[ADD] Add account_payment_blocking

This commit is contained in:
Adrien Peiffer (ACSONE)
2015-03-24 14:10:06 +01:00
parent ac86d8565c
commit 4cb4a67530
8 changed files with 336 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Stéphane Bidoul <stephane.bidoul@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import model
from . import tests

View File

@@ -0,0 +1,59 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Stéphane Bidoul <stephane.bidoul@acsone.eu>
# @author Adrien Peiffer <adrien.peiffer@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'account banking payment blocking',
'version': '0.1',
'category': 'Banking addons',
'description': """
Prevent invoices under litigation to be proposed in payment orders.
This module uses the 'blocked' flag that is present on move lines,
to filter out lines proposed in payment orders.
In addition it exposes this flag on the supplier invoice form
so it is easier to block an invoice.
""",
'author': 'ACSONE SA/NV',
'website': 'http://acsone.eu',
'depends': [
'base',
'account_banking_payment_export'
],
'data': [
'view/account_invoice_view.xml'
],
'test': [
],
'demo': [
],
'js': [
],
'qweb': [
],
'css': [
],
'installable': True,
'application': False,
'auto_install': False,
'license': 'AGPL-3',
}

View File

@@ -0,0 +1,24 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Stéphane Bidoul <stephane.bidoul@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import payment_order_create
from . import account_invoice

View File

@@ -0,0 +1,72 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Adrien Peiffer <adrien.peiffer@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields
class account_invoice(orm.Model):
_inherit = "account.invoice"
def _get_move_line(self, cr, uid, invoice_id, context=None):
return self.pool.get('account.move.line')\
.search(cr, uid, [('account_id.type', 'in',
['payable', 'receivable']),
('invoice.id', '=', invoice_id)])
def _set_move_blocked(self, cr, uid, ids, name, field_value, arg,
context=None):
if isinstance(ids, (int, long)):
ids = [ids]
for invoice in self.browse(cr, uid, ids, context=context):
if invoice.move_id.id:
move_line_ids = self._get_move_line(cr, uid, invoice.id,
context=context)
assert len(move_line_ids) == 1
# work with account_constraints from OCA/AFT:
context.update({'from_parent_object': True})
self.pool.get('account.move.line')\
.write(cr, uid, move_line_ids, {'blocked': field_value},
context=context)
def _get_move_blocked(self, cr, uid, ids, name, arg, context=None):
res = {}
if isinstance(ids, (int, long)):
ids = [ids]
for invoice in self.browse(cr, uid, ids, context=context):
if invoice.move_id.id:
move_line_ids = self._get_move_line(cr, uid, invoice.id,
context=context)
assert len(move_line_ids) == 1
move_line = self.pool.get('account.move.line')\
.browse(cr, uid, move_line_ids, context=context)[0]
res[invoice.id] = move_line.blocked
else:
res[invoice.id] = False
return res
_columns = {
'blocked': fields.function(_get_move_blocked,
fnct_inv=_set_move_blocked,
type='boolean', string='No Follow Up',
states={'draft': [('readonly',
True)]}),
}

View File

@@ -0,0 +1,34 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Stéphane Bidoul <stephane.bidoul@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm
class payment_order_create(orm.TransientModel):
_inherit = 'payment.order.create'
def extend_payment_order_domain(
self, cr, uid, payment_order, domain, context=None):
super(payment_order_create, self).extend_payment_order_domain(
cr, uid, payment_order, domain, context=context)
domain += [('blocked', '!=', True)]
return True

View File

@@ -0,0 +1,27 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Adrien Peiffer <adrien.peiffer@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import test_account_banking_payment_blocking
checks = [
test_account_banking_payment_blocking,
]

View File

@@ -0,0 +1,81 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Account Payment Blocking module for OpenERP
# Copyright (C) 2014 ACSONE SA/NV (http://acsone.eu)
# @author Adrien Peiffer <adrien.peiffer@acsone.eu>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import openerp.tests.common as common
from openerp import netsvc
DB = common.DB
ADMIN_USER_ID = common.ADMIN_USER_ID
def create_simple_invoice(self, cr, uid, context=None):
partner_id = self.ref('base.res_partner_2')
product_id = self.ref('product.product_product_4')
return self.registry('account.invoice')\
.create(cr, uid, {'partner_id': partner_id,
'account_id':
self.ref('account.a_recv'),
'journal_id':
self.ref('account.expenses_journal'),
'invoice_line': [(0, 0, {'name': 'test',
'account_id':
self.ref('account.a_sale'),
'price_unit': 2000.00,
'quantity': 1,
'product_id': product_id,
}
)
],
})
class TestAccountBankingPaymentBlocking(common.TransactionCase):
def setUp(self):
super(TestAccountBankingPaymentBlocking, self).setUp()
self.context = self.registry("res.users").context_get(self.cr,
self.uid)
def test_invoice(self):
invoice_obj = self.registry('account.invoice')
move_line_obj = self.registry('account.move.line')
invoice_id = create_simple_invoice(self, self.cr, self.uid,
context=self.context)
netsvc.LocalService("workflow")\
.trg_validate(self.uid, 'account.invoice', invoice_id,
'invoice_open', self.cr)
invoice = invoice_obj.browse(self.cr, self.uid, [invoice_id],
context=self.context)[0]
move_line_ids = move_line_obj\
.search(self.cr, self.uid, [('account_id.type', 'in',
['payable', 'receivable']),
('invoice.id', '=', invoice.id)])
move_line = move_line_obj.browse(self.cr, self.uid, move_line_ids)[0]
self.assertEqual(invoice.blocked, move_line.blocked,
'Blocked values are not equals')
move_line_obj.write(self.cr, self.uid, move_line_ids,
{'blocked': True})
invoice = invoice_obj.browse(self.cr, self.uid, [invoice_id],
context=self.context)[0]
move_line = move_line_obj.browse(self.cr, self.uid, move_line_ids)[0]
self.assertEqual(invoice.blocked, move_line.blocked,
'Blocked values are not equals')

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="invoice_supplier_form" model="ir.ui.view">
<field name="name">account.invoice.supplier.form (account_banking_payment_blocking)</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_supplier_form"/>
<field name="arch" type="xml">
<field name="move_id" position="after">
<field name="blocked"/>
</field>
</field>
</record>
</data>
</openerp>