banking-addons-team team mailing list archive
-
banking-addons-team team
-
Mailing list archive
-
Message #00442
lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70
Nicolas Bessi - Camptocamp has proposed merging lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70.
Requested reviews:
Banking Addons Team (banking-addons-team)
For more details, see:
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule/+merge/151217
Add a completion rule to allows supplier invoice completion baser on invoice number
--
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule/+merge/151217
Your team Banking Addons Team is requested to review the proposed merge of lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70.
=== modified file 'account_statement_base_completion/data.xml'
--- account_statement_base_completion/data.xml 2012-06-26 09:21:35 +0000
+++ account_statement_base_completion/data.xml 2013-03-01 12:32:22 +0000
@@ -7,7 +7,7 @@
<field name="sequence">60</field>
<field name="function_to_call">get_from_label_and_partner_field</field>
</record>
-
+
<record id="bank_statement_completion_rule_3" model="account.statement.completion.rule">
<field name="name">Match from line label (based on partner name)</field>
<field name="sequence">70</field>
@@ -26,7 +26,12 @@
<field name="function_to_call">get_from_ref_and_invoice</field>
</record>
-
-
+ <record id="bank_statement_completion_rule_5" model="account.statement.completion.rule">
+ <field name="name">Match from line reference (based on Invoice Supplier number)</field>
+ <field name="sequence">40</field>
+ <field name="function_to_call">get_from_ref_and_invoice</field>
+ </record>
+
+
</data>
</openerp>
=== modified file 'account_statement_base_completion/statement.py'
--- account_statement_base_completion/statement.py 2013-01-30 10:00:31 +0000
+++ account_statement_base_completion/statement.py 2013-03-01 12:32:22 +0000
@@ -107,6 +107,7 @@
"""
return [
('get_from_ref_and_invoice', 'From line reference (based on invoice number)'),
+ ('get_from_ref_and_supplier_invoice', 'From line reference (based on supplier invoice number)'),
('get_from_ref_and_so', 'From line reference (based on SO number)'),
('get_from_label_and_partner_field', 'From line label (based on partner field)'),
('get_from_label_and_partner_name', 'From line label (based on partner name)'),
@@ -122,6 +123,48 @@
'function_to_call': fields.selection(_get_functions, 'Method'),
}
+ def get_from_ref_and_supplier_invoice(self, cr, uid, line_id, context=None):
+ """
+ Match the partner based on the invoice supplier invoice number and the reference of the statement
+ line. Then, call the generic get_values_for_line method to complete other values.
+ If more than one partner matched, raise the ErrorTooManyPartner error.
+
+ :param int/long line_id: id of the concerned account.bank.statement.line
+ :return:
+ A dict of value that can be passed directly to the write method of
+ the statement line or {}
+ {'partner_id': value,
+ 'account_id' : value,
+
+ ...}
+ """
+ st_obj = self.pool['account.bank.statement.line']
+ st_line = st_obj.browse(cr, uid, line_id, context=context)
+ res = {}
+ inv_obj = self.pool.get('account.invoice')
+ if st_line:
+ inv_id = inv_obj.search(cr,
+ uid,
+ [('supplier_invoice_number', '=', st_line.ref),
+ ('type', 'in', ('in_invoice', 'in_refund'))],
+ context=context)
+ if inv_id:
+ if len(inv_id) == 1:
+ inv = inv_obj.browse(cr, uid, inv_id[0], context=context)
+ res['partner_id'] = inv.partner_id.id
+ else:
+ raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more '
+ 'than one partner.') % (st_line.name, st_line.ref))
+ st_vals = st_obj.get_values_for_line(cr,
+ uid,
+ profile_id=st_line.statement_id.profile_id.id,
+ partner_id=res.get('partner_id', False),
+ line_type=st_line.type,
+ amount=st_line.amount,
+ context=context)
+ res.update(st_vals)
+ return res
+
def get_from_ref_and_invoice(self, cr, uid, line_id, context=None):
"""
Match the partner based on the invoice number and the reference of the statement
@@ -134,7 +177,6 @@
the statement line or {}
{'partner_id': value,
'account_id' : value,
-
...}
"""
st_obj = self.pool.get('account.bank.statement.line')
@@ -142,27 +184,24 @@
res = {}
if st_line:
inv_obj = self.pool.get('account.invoice')
- inv_id = inv_obj.search(
- cr,
- uid,
- [('number', '=', st_line.ref)],
- context=context)
+ inv_id = inv_obj.search(cr,
+ uid,
+ [('number', '=', st_line.ref)],
+ context=context)
if inv_id:
- if inv_id and len(inv_id) == 1:
+ if len(inv_id) == 1:
inv = inv_obj.browse(cr, uid, inv_id[0], context=context)
res['partner_id'] = inv.partner_id.id
- elif inv_id and len(inv_id) > 1:
- raise ErrorTooManyPartner(
- _('Line named "%s" (Ref:%s) was matched by more '
- 'than one partner.') % (st_line.name, st_line.ref))
- st_vals = st_obj.get_values_for_line(
- cr,
- uid,
- profile_id=st_line.statement_id.profile_id.id,
- partner_id=res.get('partner_id', False),
- line_type=st_line.type,
- amount=st_line.amount,
- context=context)
+ else:
+ raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more '
+ 'than one partner.') % (st_line.name, st_line.ref))
+ st_vals = st_obj.get_values_for_line(cr,
+ uid,
+ profile_id=st_line.statement_id.profile_id.id,
+ partner_id=res.get('partner_id', False),
+ line_type=st_line.type,
+ amount=st_line.amount,
+ context=context)
res.update(st_vals)
return res
Follow ups