From e9abc723c024eb159b6e5132c325cabce4e9dc01 Mon Sep 17 00:00:00 2001 From: qdp-odoo Date: Tue, 8 Jul 2014 16:04:09 +0200 Subject: [PATCH] Changed the type of fields.date_order on purhcase.order object from date to datetime --- addons/purchase/purchase.py | 27 ++++++++++--------- .../test/process/edi_purchase_order.yml | 6 ++--- .../purchase_requisition.py | 6 +++-- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index da14954d4a0..dc7a29f5aea 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -209,9 +209,9 @@ class purchase_order(osv.osv): "It's mainly used to do the matching when you receive the " "products as this reference is usually written on the " "delivery order sent by your supplier."), - 'date_order':fields.date('Order Date', required=True, states={'confirmed':[('readonly',True)], + 'date_order':fields.datetime('Order Date', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}, - select=True, help="Date on which this document has been created.", + select=True, help="Depicts the date where the Quotation should be validated and converted into a Purchase Order, by default it's the creation date.", copy=False), 'date_approve':fields.date('Date Approved', readonly=1, select=True, copy=False, help="Date on which purchase order has been approved"), @@ -290,7 +290,7 @@ class purchase_order(osv.osv): 'invoice_count': fields.function(_count_all, type='integer', string='Invoices', multi=True) } _defaults = { - 'date_order': fields.date.context_today, + 'date_order': fields.datetime.now, 'state': 'draft', 'name': lambda obj, cr, uid, context: '/', 'shipped': 0, @@ -710,7 +710,7 @@ class purchase_order(osv.osv): 'product_id': order_line.product_id.id, 'product_uom': order_line.product_uom.id, 'product_uos': order_line.product_uom.id, - 'date': fields.date.date_to_datetime(self, cr, uid, order.date_order, context), + 'date': order.date_order, 'date_expected': fields.date.date_to_datetime(self, cr, uid, order_line.date_planned, context), 'location_id': order.partner_id.property_stock_supplier.id, 'location_dest_id': order.location_id.id, @@ -980,8 +980,8 @@ class purchase_order_line(osv.osv): 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True, copy=False), 'invoiced': fields.boolean('Invoiced', readonly=True, copy=False), - 'partner_id': fields.related('order_id','partner_id',string='Partner',readonly=True,type="many2one", relation="res.partner", store=True), - 'date_order': fields.related('order_id','date_order',string='Order Date',readonly=True,type="date"), + 'partner_id': fields.related('order_id', 'partner_id', string='Partner', readonly=True, type="many2one", relation="res.partner", store=True), + 'date_order': fields.related('order_id', 'date_order', string='Order Date', readonly=True, type="datetime"), 'procurement_ids': fields.one2many('procurement.order', 'purchase_line_id', string='Associated procurements'), } _defaults = { @@ -1026,13 +1026,13 @@ class purchase_order_line(osv.osv): :param browse_record | False supplier_info: product.supplierinfo, used to determine delivery delay (if False, default delay = 0) - :param str date_order_str: date of order, as a string in - DEFAULT_SERVER_DATE_FORMAT + :param str date_order_str: date of order field, as a string in + DEFAULT_SERVER_DATETIME_FORMAT :rtype: datetime :return: desired Schedule Date for the PO line """ supplier_delay = int(supplier_info.delay) if supplier_info else 0 - return datetime.strptime(date_order_str, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(days=supplier_delay) + return datetime.strptime(date_order_str, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=supplier_delay) def action_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'cancel'}, context=context) @@ -1101,7 +1101,7 @@ class purchase_order_line(osv.osv): # - determine product_qty and date_planned based on seller info if not date_order: - date_order = fields.date.context_today(self,cr,uid,context=context) + date_order = fields.datetime.now() supplierinfo = False @@ -1125,8 +1125,9 @@ class purchase_order_line(osv.osv): if state not in ('sent','bid'): # - determine price_unit and taxes_id if pricelist_id: + date_order_str = datetime.strptime(date_order, DEFAULT_SERVER_DATETIME_FORMAT).strftime(DEFAULT_SERVER_DATE_FORMAT) 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] + product.id, qty or 1.0, partner_id or False, {'uom': uom_id, 'date': date_order_str})[pricelist_id] else: price = product.standard_price @@ -1320,8 +1321,8 @@ class procurement_order(osv.osv): po_id = available_draft_po_ids[0] po_rec = po_obj.browse(cr, uid, po_id, context=context) #if the product has to be ordered earlier those in the existing PO, we replace the purchase date on the order to avoid ordering it too late - if datetime.strptime(po_rec.date_order, DEFAULT_SERVER_DATE_FORMAT) > purchase_date: - po_obj.write(cr, uid, [po_id], {'date_order': purchase_date}, context=context) + if datetime.strptime(po_rec.date_order, DEFAULT_SERVER_DATETIME_FORMAT) > purchase_date: + po_obj.write(cr, uid, [po_id], {'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context) #look for any other PO line in the selected PO with same product and UoM to sum quantities instead of creating a new po line available_po_line_ids = po_line_obj.search(cr, uid, [('order_id', '=', po_id), ('product_id', '=', line_vals['product_id']), ('product_uom', '=', line_vals['product_uom'])], context=context) if available_po_line_ids: diff --git a/addons/purchase/test/process/edi_purchase_order.yml b/addons/purchase/test/process/edi_purchase_order.yml index 8e34606afb4..6d585d69c65 100644 --- a/addons/purchase/test/process/edi_purchase_order.yml +++ b/addons/purchase/test/process/edi_purchase_order.yml @@ -53,7 +53,7 @@ "code": "EUR", "symbol": "€", }, - "date_order": "2011-09-13", + "date_order": "2011-09-13 12:00:00", "partner_id": ["sale:724f9v70-dv70-1v70-8v70-701a04e25v70.res_partner_test22", "Junjun wala"], "partner_address": { "__id": "base:724f9v70-dv70-1v70-8v70-701a04e25v70.res_partner_address_7wdsjasdjh", @@ -154,7 +154,7 @@ "code": "EUR", "symbol": "€", }, - "date_order": "2011-09-13", + "date_order": "2011-09-13 12:00:00", "partner_id": ["sale:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_test22", "Junjun wala"], "partner_address": { "__id": "base:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_address_7wdsjasdjh", @@ -234,4 +234,4 @@ assert purchase_line.price_unit == 20 , "unit price is not same, got %s, expected 20"%(purchase_line.price_unit,) assert purchase_line.product_qty == 10 , "product qty is not same" else: - raise AssertionError('unknown order line: %s' % purchase_line) \ No newline at end of file + raise AssertionError('unknown order line: %s' % purchase_line) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 954547cb5b5..103506d571d 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -20,8 +20,10 @@ # ############################################################################## +from datetime import datetime from openerp.osv import fields, osv from openerp.tools.translate import _ +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT import openerp.addons.decimal_precision as dp class purchase_requisition(osv.osv): @@ -134,7 +136,7 @@ class purchase_requisition(osv.osv): picking_type_in = self.pool.get("purchase.order")._get_picking_in(cr, uid, context=context) return { 'origin': requisition.name, - 'date_order': requisition.date_end or fields.date.context_today(self, cr, uid, context=context), + 'date_order': requisition.date_end or fields.datetime.now(), 'partner_id': supplier.id, 'pricelist_id': supplier_pricelist, 'location_id': requisition.picking_type_id.default_location_dest_id.id, @@ -150,7 +152,7 @@ class purchase_requisition(osv.osv): product_uom = self.pool.get('product.uom') product = requisition_line.product_id default_uom_po_id = product.uom_po_id.id - date_order = requisition.ordering_date or fields.date.context_today(self, cr, uid, context=context) + date_order = requisition.ordering_date and datetime.strptime(requisition.ordering_date, DEFAULT_SERVER_DATE_FORMAT).strftime(DEFAULT_SERVER_DATETIME_FORMAT) or fields.datetime.now() qty = product_uom._compute_qty(cr, uid, requisition_line.product_uom_id.id, requisition_line.product_qty, default_uom_po_id) supplier_pricelist = supplier.property_product_pricelist_purchase and supplier.property_product_pricelist_purchase.id or False vals = po_line_obj.onchange_product_id(