diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index e2e8c93b7b6..889b643d1ae 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -933,7 +933,7 @@ class purchase_order_line(osv.osv): def onchange_product_uom(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order=False, fiscal_position_id=False, date_planned=False, - name=False, price_unit=False, lead_time=False, context=None): + name=False, price_unit=False, lead_time=False, state='draft', context=None): """ onchange handler of product_uom. """ @@ -968,7 +968,7 @@ class purchase_order_line(osv.osv): def onchange_product_id(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order=False, fiscal_position_id=False, date_planned=False, - name=False, price_unit=False, lead_time=False, context=None): + name=False, price_unit=False, lead_time=False, state='draft', context=None): """ onchange handler of product_id. """ @@ -1045,13 +1045,13 @@ class purchase_order_line(osv.osv): # - determine lead time value for product product_lead_time = lead_time or supplierinfo.delay if supplierinfo else 0 res['value'].update({'product_lead_time': product_lead_time}) - - # - determine price_unit and taxes_id - if pricelist_id: - price = product_pricelist.price_get(cr, uid, [pricelist_id], - product.id, qty or 1.0, partner_id or False, {'uom': uom_id, 'date': date_order})[pricelist_id] - else: - price = product.standard_price + if state not in ('sent','bid'): + # - determine price_unit and taxes_id + if pricelist_id: + price = product_pricelist.price_get(cr, uid, [pricelist_id], + product.id, qty or 1.0, partner_id or False, {'uom': uom_id, 'date': date_order})[pricelist_id] + else: + price = product.standard_price taxes = account_tax.browse(cr, uid, map(lambda x: x.id, product.supplier_taxes_id)) fpos = fiscal_position_id and account_fiscal_position.browse(cr, uid, fiscal_position_id, context=context) or False diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index b581cb1b22a..ef2f0e9331b 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -206,14 +206,14 @@ - + - + - - + + @@ -393,11 +393,11 @@ - + diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 3c5e6666f05..c8007514328 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -61,6 +61,7 @@ class purchase_requisition(osv.osv): 'Status', track_visibility='onchange', required=True), 'multiple_rfq_per_supplier': fields.boolean('Multiple RFQ per supplier'), 'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',), + 'schedule_date': fields.date('Scheduled Date', select=True), } _defaults = { 'date_start': lambda *args: time.strftime('%Y-%m-%d %H:%M:%S'), @@ -170,6 +171,7 @@ class purchase_requisition(osv.osv): supplier_pricelist = supplier.property_product_pricelist_purchase or False return { 'origin': requisition.name, + 'order_date': requisition.date_end or fields.date.context_today, 'partner_id': supplier.id, 'pricelist_id': supplier_pricelist.id, 'location_id': location_id, @@ -181,20 +183,32 @@ class purchase_requisition(osv.osv): } def _prepare_purchase_order_line(self, cr, uid, requisition, requisition_line, purchase_id, supplier, context=None): fiscal_position = self.pool.get('account.fiscal.position') + res_partner = self.pool.get('res.partner') + product_product = self.pool.get('product.product') product = requisition_line.product_id seller_price, qty, default_uom_po_id, date_planned = self._seller_details(cr, uid, requisition_line, supplier, context=context) taxes_ids = product.supplier_taxes_id taxes = fiscal_position.map_tax(cr, uid, supplier.property_account_position, taxes_ids) + # - determine name and notes based on product in partner lang. + context_partner = context.copy() + + if supplier: + lang = res_partner.browse(cr, uid, supplier.id).lang + context_partner.update( {'lang': lang, 'partner_id': supplier.id} ) + #call name_get() with partner in the context to eventually match name and description in the seller_ids field + dummy, name = product_product.name_get(cr, uid, product.id, context=context_partner)[0] + if product.description_purchase: + name += '\n' + product.description_purchase return { 'order_id': purchase_id, - 'name': product.partner_ref, + 'name': name, 'product_qty': qty, 'product_id': product.id, 'product_uom': default_uom_po_id, 'price_unit': seller_price, - 'date_planned': date_planned, + 'date_planned': requisition_line.schedule_date, 'taxes_id': [(6, 0, taxes)], - 'account_analytic_id':requisition.account_analytic_id.id, + 'account_analytic_id':requisition_line.account_analytic_id.id, } def make_purchase_order(self, cr, uid, ids, partner_id, context=None): """ @@ -314,9 +328,11 @@ class purchase_requisition_line(osv.osv): 'requisition_id': fields.many2one('purchase.requisition','Purchase Requisition', ondelete='cascade'), 'po_line_ids': fields.related('requisition_id', 'po_line_ids', string='PO lines', readonly=True, type="one2many"), 'company_id': fields.related('requisition_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True), + 'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',), + 'schedule_date': fields.date('Scheduled Date', select=True), } - def onchange_product_id(self, cr, uid, ids, product_id, product_uom_id, context=None): + def onchange_product_id(self, cr, uid, ids, product_id, product_uom_id, parent_analytic_account, analytic_account, parent_date, date, context=None): """ Changes UoM and name if product_id changes. @param name: Name of the field @param product_id: Changed product_id @@ -326,6 +342,10 @@ class purchase_requisition_line(osv.osv): if product_id: prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context) value = {'product_uom_id': prod.uom_id.id,'product_qty':1.0} + if not analytic_account: + value.update({'account_analytic_id': parent_analytic_account}) + if not date: + value.update({'schedule_date': parent_date}) return {'value': value} _defaults = { diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index eb177fe9f1d..bf2bef24065 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -59,6 +59,7 @@ + @@ -68,15 +69,20 @@ - + + + +
+ +