diff options
| author | Alexis de Lattre <alexis@via.ecp.fr> | 2012-07-11 13:14:34 +0200 |
|---|---|---|
| committer | Alexis de Lattre <alexis@via.ecp.fr> | 2012-07-11 13:14:34 +0200 |
| commit | 42ffccfa96a71a8abacaa86b45e2f9bfcb78ab6a (patch) | |
| tree | 1eb8042327878e4c45fd5adefba4952bac21c71f /addons | |
| parent | e9c288b4bf9b82e505ee94a44b5c0e5dfd1f45f8 (diff) | |
Add a "Supplier Payment Term" on res.partner
Add payment term on purchase.order
bzr revid: alexis@via.ecp.fr-20120711111434-ih20ohy81bynn1wd
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/account/account.py | 7 | ||||
| -rw-r--r-- | addons/account/account_invoice.py | 6 | ||||
| -rw-r--r-- | addons/account/account_move_line.py | 15 | ||||
| -rw-r--r-- | addons/account/demo/account_demo.xml | 16 | ||||
| -rw-r--r-- | addons/account/partner.py | 11 | ||||
| -rw-r--r-- | addons/account/partner_view.xml | 3 | ||||
| -rw-r--r-- | addons/base_vat/base_vat_view.xml | 2 | ||||
| -rw-r--r-- | addons/purchase/purchase.py | 19 | ||||
| -rw-r--r-- | addons/purchase/purchase_view.xml | 1 | ||||
| -rw-r--r-- | addons/purchase/stock.py | 3 | ||||
| -rw-r--r-- | addons/purchase/wizard/purchase_line_invoice.py | 6 | ||||
| -rw-r--r-- | addons/stock/stock.py | 4 |
12 files changed, 70 insertions, 23 deletions
diff --git a/addons/account/account.py b/addons/account/account.py index caf1d68c45d..132bee96bce 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -2281,8 +2281,13 @@ class account_model(osv.osv): if not line.partner_id: raise osv.except_osv(_('Error !'), _("Maturity date of entry line generated by model line '%s' of model '%s' is based on partner payment term!" \ "\nPlease define partner on it!")%(line.name, model.name)) - if line.partner_id.property_payment_term: + + payment_term_id = False + if model.journal_id.type in ('purchase', 'purchase_refund') and line.partner_id.property_supplier_payment_term: + payment_term_id = line.partner_id.property_supplier_payment_term.id + elif line.partner_id.property_payment_term: payment_term_id = line.partner_id.property_payment_term.id + if payment_term_id: pterm_list = pt_obj.compute(cr, uid, payment_term_id, value=1, date_ref=date_maturity) if pterm_list: pterm_list = [l[0] for l in pterm_list] diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index c6011979f8d..3965050a5a2 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -216,7 +216,7 @@ class account_invoice(osv.osv): 'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"), 'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True, help="If you use payment terms, the due date will be computed automatically at the generation "\ - "of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."), + "of accounting entries. If you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment."), 'partner_id': fields.many2one('res.partner', 'Partner', change_default=True, readonly=True, required=True, states={'draft':[('readonly',False)]}), 'payment_term': fields.many2one('account.payment.term', 'Payment Term',readonly=True, states={'draft':[('readonly',False)]}, help="If you use payment terms, the due date will be computed automatically at the generation "\ @@ -468,10 +468,11 @@ class account_invoice(osv.osv): if type in ('out_invoice', 'out_refund'): acc_id = p.property_account_receivable.id + partner_payment_term = p.property_payment_term and p.property_payment_term.id or False else: acc_id = p.property_account_payable.id + partner_payment_term = p.property_supplier_payment_term and p.property_supplier_payment_term.id or False fiscal_position = p.property_account_position and p.property_account_position.id or False - partner_payment_term = p.property_payment_term and p.property_payment_term.id or False if p.bank_ids: bank_id = p.bank_ids[0].id @@ -733,6 +734,7 @@ class account_invoice(osv.osv): def action_date_assign(self, cr, uid, ids, *args): for inv in self.browse(cr, uid, ids): res = self.onchange_payment_term_date_invoice(cr, uid, inv.id, inv.payment_term.id, inv.date_invoice) + print "action_date_assign res=", res if res and res['value']: self.write(cr, uid, [inv.id], res['value']) return True diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 95b53b51339..00aa1d9a64d 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -652,17 +652,24 @@ class account_move_line(osv.osv): return {'value':val} if not date: date = datetime.now().strftime('%Y-%m-%d') + jt = False + if journal: + jt = journal_obj.browse(cr, uid, journal).type part = partner_obj.browse(cr, uid, partner_id) - if part.property_payment_term: - res = payment_term_obj.compute(cr, uid, part.property_payment_term.id, 100, date) + payment_term_id = False + if jt and jt in ('purchase', 'purchase_refund') and part.property_supplier_payment_term: + payment_term_id = part.property_supplier_payment_term.id + elif jt and part.property_payment_term: + payment_term_id = part.property_payment_term.id + if payment_term_id: + res = payment_term_obj.compute(cr, uid, payment_term_id, 100, date) if res: val['date_maturity'] = res[0][0] if not account_id: id1 = part.property_account_payable.id id2 = part.property_account_receivable.id - if journal: - jt = journal_obj.browse(cr, uid, journal).type + if jt: if jt in ('sale', 'purchase_refund'): val['account_id'] = fiscal_pos_obj.map_account(cr, uid, part and part.property_account_position or False, id2) elif jt in ('purchase', 'sale_refund'): diff --git a/addons/account/demo/account_demo.xml b/addons/account/demo/account_demo.xml index 0dff40ca19f..2cae1eb81a1 100644 --- a/addons/account/demo/account_demo.xml +++ b/addons/account/demo/account_demo.xml @@ -131,5 +131,21 @@ <record id="base.user_demo" model="res.users"> <field name="groups_id" eval="[(4,ref('account.group_account_user'))]"/> </record> + + <!-- Add payment term on some demo partners --> + <record id="base.res_partner_agrolait" model="res.partner"> + <field name="property_payment_term" ref="account_payment_term_net"/> + </record> + <record id="base.res_partner_c2c" model="res.partner"> + <field name="property_payment_term" ref="account_payment_term"/> + <field name="property_supplier_payment_term" ref="account_payment_term"/> + </record> + <record id="base.res_partner_4" model="res.partner"> + <field name="property_supplier_payment_term" ref="account_payment_term_net"/> + </record> + <record id="base.res_partner_asus" model="res.partner"> + <field name="property_supplier_payment_term" ref="account_payment_term"/> + </record> + </data> </openerp> diff --git a/addons/account/partner.py b/addons/account/partner.py index 36fd88183f2..67f20b3f618 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -180,9 +180,16 @@ class res_partner(osv.osv): 'account.payment.term', type='many2one', relation='account.payment.term', - string ='Payment Term', + string ='Customer Payment Term', view_load=True, - help="This payment term will be used instead of the default one for the current partner"), + help="This payment term will be used instead of the default one for sale orders and customer invoices"), + 'property_supplier_payment_term': fields.property( + 'account.payment.term', + type='many2one', + relation='account.payment.term', + string ='Supplier Payment Term', + view_load=True, + help="This payment term will be used instead of the default one for purchase orders and supplier invoices"), 'ref_companies': fields.one2many('res.company', 'partner_id', 'Companies that refers to partner'), 'last_reconciliation_date': fields.datetime('Latest Reconciliation Date', help='Date on which the partner accounting entries were reconciled last time') diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index ec3dcba3b84..8f4f4f6f654 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -79,11 +79,12 @@ <group col="4"> <group string="Customer Accounting Properties" col="4"> <field name="property_account_receivable" groups="account.group_account_invoice" /> - <field name="property_account_position" widget="selection"/> <field name="property_payment_term" widget="selection"/> + <field name="property_account_position" widget="selection"/> </group> <group string="Supplier Accounting Properties" col="4"> <field name="property_account_payable" groups="account.group_account_invoice"/> + <field name="property_supplier_payment_term" widget="selection"/> </group> <group string="Customer Credit" col="4"> <field name="credit"/> diff --git a/addons/base_vat/base_vat_view.xml b/addons/base_vat/base_vat_view.xml index 1d7f06eb571..346bdd02d4f 100644 --- a/addons/base_vat/base_vat_view.xml +++ b/addons/base_vat/base_vat_view.xml @@ -7,7 +7,7 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="account.view_partner_property_form"/> <field name="arch" type="xml"> - <field name="property_account_payable" position="after" version="7.0"> + <field name="property_supplier_payment_term" position="after" version="7.0"> <label for="vat"/> <div> <field name="vat" on_change="vat_change(vat)" placeholder="BE0477472702" class="oe_inline"/> diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index e74ca83a92b..0e19c12d836 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -203,6 +203,7 @@ class purchase_order(osv.osv): 'purchase.order.line': (_get_order, None, 10), }, multi="sums",help="The total amount"), 'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position'), + 'payment_term': fields.many2one('account.payment.term', 'Payment Term'), 'product_id': fields.related('order_line','product_id', type='many2one', relation='product.product', string='Product'), 'create_uid': fields.many2one('res.users', 'Responsible'), 'company_id': fields.many2one('res.company','Company',required=True,select=1), @@ -271,12 +272,17 @@ class purchase_order(osv.osv): def onchange_partner_id(self, cr, uid, ids, partner_id): partner = self.pool.get('res.partner') if not partner_id: - return {'value':{'fiscal_position': False}} + return {'value': { + 'fiscal_position': False, + 'payment_term': False, + }} supplier_address = partner.address_get(cr, uid, [partner_id], ['default']) supplier = partner.browse(cr, uid, partner_id) - pricelist = supplier.property_product_pricelist_purchase.id - fiscal_position = supplier.property_account_position and supplier.property_account_position.id or False - return {'value':{'pricelist_id': pricelist, 'fiscal_position': fiscal_position}} + return {'value': { + 'pricelist_id': supplier.property_product_pricelist_purchase.id, + 'fiscal_position': supplier.property_account_position and supplier.property_account_position.id or False, + 'payment_term': supplier.property_supplier_payment_term.id or False, + }} def view_invoice(self, cr, uid, ids, context=None): ''' @@ -462,7 +468,7 @@ class purchase_order(osv.osv): 'invoice_line': [(6, 0, inv_lines)], 'origin': order.name, 'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id, - 'payment_term': order.partner_id.property_payment_term and order.partner_id.property_payment_term.id or False, + 'payment_term': order.payment_term.id or False, 'company_id': order.company_id.id, } inv_id = inv_obj.create(cr, uid, inv_data, context=context) @@ -1070,7 +1076,8 @@ class procurement_order(osv.osv): 'pricelist_id': pricelist_id, 'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'company_id': procurement.company_id.id, - 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False + 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False, + 'payment_term': partner.property_supplier_payment_term.id or False, } res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=context) self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]}) diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 0be6b8ddf8c..5ee0f21e079 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -248,6 +248,7 @@ <field name="invoiced"/> </group> <group> + <field name="payment_term" widget="selection"/> <field name="fiscal_position"/> </group> </group> diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index 06b391513e0..ebf56ffa355 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -59,6 +59,9 @@ class stock_picking(osv.osv): invoice_vals = super(stock_picking, self)._prepare_invoice(cr, uid, picking, partner, inv_type, journal_id, context=context) if picking.purchase_id: invoice_vals['fiscal_position'] = picking.purchase_id.fiscal_position.id + invoice_vals['payment_term'] = picking.purchase_id.payment_term.id + if picking.purchase_id.payment_term and context.get('date_inv'): + invoice_vals['date_due'] = self.pool.get('account.invoice').onchange_payment_term_date_invoice(cr, uid, [], picking.purchase_id.payment_term.id, context.get('invoice_date'))['value'].get('date_due') return invoice_vals def get_currency_id(self, cursor, user, picking): diff --git a/addons/purchase/wizard/purchase_line_invoice.py b/addons/purchase/wizard/purchase_line_invoice.py index 1c94ba08588..039cb6f3ca1 100644 --- a/addons/purchase/wizard/purchase_line_invoice.py +++ b/addons/purchase/wizard/purchase_line_invoice.py @@ -74,10 +74,6 @@ class purchase_line_invoice(osv.osv_memory): journal_id = account_jrnl_obj.search(cr, uid, [('type', '=', 'purchase')], context=None) journal_id = journal_id and journal_id[0] or False a = partner.property_account_payable.id - if partner and partner.property_payment_term.id: - pay_term = partner.property_payment_term.id - else: - pay_term = False inv = { 'name': name, 'origin': name, @@ -89,7 +85,7 @@ class purchase_line_invoice(osv.osv_memory): 'invoice_line': [(6,0,lines_ids)], 'currency_id' : orders[0].pricelist_id.currency_id.id, 'comment': multiple_order_invoice_notes(orders), - 'payment_term': pay_term, + 'payment_term': orders[0].payment_term.id, 'fiscal_position': partner.property_account_position.id } inv_id = invoice_obj.create(cr, uid, inv) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index a279b8bea6c..c27de8b9dbd 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -987,8 +987,10 @@ class stock_picking(osv.osv): partner = self.pool.get('res.partner').browse(cr, uid, partner, context=context) if inv_type in ('out_invoice', 'out_refund'): account_id = partner.property_account_receivable.id + payment_term = partner.property_payment_term and partner.property_payment_term.id or False else: account_id = partner.property_account_payable.id + payment_term = False # We don't copy the payment term on supplier inv. comment = self._get_comment_invoice(cr, uid, picking) invoice_vals = { 'name': picking.name, @@ -997,7 +999,7 @@ class stock_picking(osv.osv): 'account_id': account_id, 'partner_id': partner.id, 'comment': comment, - 'payment_term': partner.property_payment_term and partner.property_payment_term.id or False, + 'payment_term': payment_term, 'fiscal_position': partner.property_account_position.id, 'date_invoice': context.get('date_inv', False), 'company_id': picking.company_id.id, |
