From 56f5f2397e5d72e0d6665963120d29dd940526a3 Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 8 Jun 2012 16:30:29 +0200 Subject: [PATCH] [FIX] set_warranty_return_address --- crm_claim_rma/crm_claim_rma.py | 82 +++++------ .../wizard/picking_from_returned_lines.py | 130 +++++++++--------- 2 files changed, 107 insertions(+), 105 deletions(-) diff --git a/crm_claim_rma/crm_claim_rma.py b/crm_claim_rma/crm_claim_rma.py index e340558d..2a978a16 100644 --- a/crm_claim_rma/crm_claim_rma.py +++ b/crm_claim_rma/crm_claim_rma.py @@ -4,8 +4,8 @@ # # ######################################################################### # # -# Copyright (C) 2009-2011 Akretion, Raphaël Valyi, Sébastien Beau, # -# Emmanuel Samyn # +# Copyright (C) 2009-2011 Akretion, Raphaël Valyi, Sébastien Beau, # +# Emmanuel Samyn # # # #This program is free software: you can redistribute it and/or modify # #it under the terms of the GNU General Public License as published by # @@ -54,15 +54,15 @@ class return_line(osv.osv): def _line_total_amount(self, cr, uid, ids, field_name, arg,context): res = {} for line in self.browse(cr,uid,ids): - res[line.id] = line.unit_sale_price*line.product_returned_quantity + res[line.id] = line.unit_sale_price*line.product_returned_quantity return res def _get_claim_seq(self, cr, uid, ids, field_name, arg,context): res = {} for line in self.browse(cr,uid,ids): - res[line.id] = line.claim_id.sequence + res[line.id] = line.claim_id.sequence return res - + _columns = { 'name': fields.function(_get_claim_seq, method=True, string='Claim n°', type='char', size=64,store=True), 'claim_origine': fields.selection([('none','Not specified'), @@ -112,13 +112,13 @@ class return_line(osv.osv): else : limit = (datetime.strptime(return_line.invoice_id.date_invoice, '%Y-%m-%d') + relativedelta(months=int(return_line.product_id.seller_ids[0].warranty_duration))).strftime('%Y-%m-%d') else : - limit = (datetime.strptime(return_line.invoice_id.date_invoice, '%Y-%m-%d') + relativedelta(months=int(return_line.product_id.warranty))).strftime('%Y-%m-%d') + limit = (datetime.strptime(return_line.invoice_id.date_invoice, '%Y-%m-%d') + relativedelta(months=int(return_line.product_id.warranty))).strftime('%Y-%m-%d') if limit < return_line.claim_id.date: warning = 'Expired' self.write(cr,uid,ids,{ - 'guarantee_limit' : limit, - 'warning' : warning, - }) + 'guarantee_limit' : limit, + 'warning' : warning, + }) else: raise osv.except_osv(_('Error !'), _('Cannot find any date for invoice ! Must be a validated invoice !')) return True @@ -144,40 +144,42 @@ class return_line(osv.osv): def set_warranty_return_address(self, cr, uid, ids,context,return_line): return_address = None warranty_type = 'company' - if return_line.prodlot_id : - # multi supplier method - print "TO BE IMPLEMENTED" - else : - # first supplier method - if return_line.product_id.seller_ids[0]: - if return_line.product_id.seller_ids[0].warranty_return_partner: - return_partner = return_line.product_id.seller_ids[0].warranty_return_partner - if return_partner == 'company': - return_address = self._get_partner_address(cr, uid, ids, context,return_line.claim_id.company_id.partner_id)[0] - elif return_partner == 'supplier': - return_address = self._get_partner_address(cr, uid, ids, context,return_line.product_id.seller_ids[0].name)[0] - warranty_type = 'supplier' - elif return_partner == 'brand': - return_address = self._get_partner_address(cr, uid, ids, context, return_line.product_id.product_brand_id.partner_id)[0] - warranty_type = 'brand' - else : - warranty_type = 'other' - # TO BE IMPLEMENTED if something to do... - else : - raise osv.except_osv(_('Error !'), _('Cannot find any warranty return partner for this product !')) - else : - raise osv.except_osv(_('Error !'), _('Cannot find any supplier for this product !')) + if return_line.product_id.seller_ids: + # default : use first supplier method + seller = return_line.product_id.seller_ids[0] + if len(return_line.product_id.seller_ids) > 1 : + # multi supplier method + print "TO BE IMPLEMENTED" + print "lenght: ",len(return_line.product_id.seller_ids) + #seller = set right seller line + if seller.warranty_return_partner: + return_partner = seller.warranty_return_partner + if return_partner == 'company': + return_address = self._get_partner_address(cr, uid, ids, context,return_line.claim_id.company_id.partner_id)[0] + elif return_partner == 'supplier': + return_address = self._get_partner_address(cr, uid, ids, context,return_line.product_id.seller_ids[0].name)[0] + warranty_type = 'supplier' + elif return_partner == 'brand': + return_address = self._get_partner_address(cr, uid, ids, context, return_line.product_id.product_brand_id.partner_id)[0] + warranty_type = 'brand' + else : + warranty_type = 'other' + # TO BE IMPLEMENTED if something to do... + else : + raise osv.except_osv(_('Error !'), _('Cannot find any warranty return partner for this product !')) + else : + raise osv.except_osv(_('Error !'), _('Cannot find any supplier for this product !')) self.write(cr,uid,ids,{'warranty_return_partner':return_address,'warranty_type':warranty_type}) return True # Method to calculate warranty limit and validity def set_warranty(self, cr, uid, ids,context=None): for return_line in self.browse(cr,uid,ids): - if return_line.product_id and return_line.invoice_id: - self.set_warranty_limit(cr, uid, ids,context,return_line) - self.set_warranty_return_address(cr, uid, ids,context,return_line) - else: - raise osv.except_osv(_('Error !'), _('PLEASE SET PRODUCT & INVOICE!')) + if return_line.product_id and return_line.invoice_id: + self.set_warranty_limit(cr, uid, ids,context,return_line) + self.set_warranty_return_address(cr, uid, ids,context,return_line) + else: + raise osv.except_osv(_('Error !'), _('PLEASE SET PRODUCT & INVOICE!')) return True return_line() @@ -194,21 +196,21 @@ class product_exchange(osv.osv): def total_amount_returned(self, cr, uid, ids, field_name, arg,context): res = {} for line in self.browse(cr,uid,ids): - res[line.id] = line.returned_unit_sale_price*line.returned_product_qty + res[line.id] = line.returned_unit_sale_price*line.returned_product_qty return res # Method to calculate total amount of the line : qty*UP def total_amount_replacement(self, cr, uid, ids, field_name, arg,context): res = {} for line in self.browse(cr,uid,ids): - res[line.id] = line.replacement_unit_sale_price*line.replacement_product_qty + res[line.id] = line.replacement_unit_sale_price*line.replacement_product_qty return res # Method to get the replacement product unit price def get_replacement_price(self, cr, uid, ids, field_name, arg,context): res = {} for line in self.browse(cr,uid,ids): - res[line.id] = line.replacement_product.list_price + res[line.id] = line.replacement_product.list_price return res _columns = { diff --git a/crm_claim_rma/wizard/picking_from_returned_lines.py b/crm_claim_rma/wizard/picking_from_returned_lines.py index 41170910..d977c0e0 100644 --- a/crm_claim_rma/wizard/picking_from_returned_lines.py +++ b/crm_claim_rma/wizard/picking_from_returned_lines.py @@ -41,13 +41,13 @@ class picking_in_from_returned_lines(osv.osv_memory): for line in returned_lines: if line.selected: M2M.append(self.pool.get('temp.return.line').create(cr, uid, { - 'claim_origine' : "none", - 'invoice_id' : line.invoice_id.id, - 'product_id' : line.product_id.id, - 'product_returned_quantity' : line.product_returned_quantity, - 'prodlot_id' : line.prodlot_id.id, - 'price_unit' : line.unit_sale_price, - })) + 'claim_origine' : "none", + 'invoice_id' : line.invoice_id.id, + 'product_id' : line.product_id.id, + 'product_returned_quantity' : line.product_returned_quantity, + 'prodlot_id' : line.prodlot_id.id, + 'price_unit' : line.unit_sale_price, + })) return M2M # Get default destination location @@ -77,7 +77,7 @@ class picking_in_from_returned_lines(osv.osv_memory): location = claim_id.partner_id.property_stock_supplier.id # create picking picking_id = self.pool.get('stock.picking').create(cr, uid, { - 'origin': "RMA/"+`claim_id.id`, + 'origin': claim_id.sequence, 'type': 'in', 'move_type': 'one', # direct 'state': 'draft', @@ -87,32 +87,32 @@ class picking_in_from_returned_lines(osv.osv_memory): 'company_id': claim_id.company_id.id, 'location_id': location, 'location_dest_id': picking.return_line_location.id, - 'note' : 'RMA picking in', - }) - # Create picking lines + 'note' : 'RMA picking in', + }) + # Create picking lines for picking_line in picking.return_line_ids: move_id = self.pool.get('stock.move').create(cr, uid, { - 'name' : picking_line.product_id.name_template, # Motif : crm id ? stock_picking_id ? - 'priority': '0', - #'create_date': - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), - 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'), - 'product_id': picking_line.product_id.id, - 'product_qty': picking_line.product_returned_quantity, - 'product_uom': picking_line.product_id.uom_id.id, - 'address_id': claim_id.partner_address_id.id, - 'prodlot_id': picking_line.prodlot_id.id, - # 'tracking_id': - 'picking_id': picking_id, - 'state': 'draft', - 'price_unit': picking_line.price_unit, - # 'price_currency_id': claim_id.company_id.currency_id.id, # from invoice ??? - 'company_id': claim_id.company_id.id, - 'location_id': location, - 'location_dest_id': picking.return_line_location.id, - #self.pool.get('stock.warehouse').read(cr, uid, [1],['lot_input_id'])[0]['lot_input_id'][0], - 'note': 'RMA Refound', - }) + 'name' : picking_line.product_id.name_template, # Motif : crm id ? stock_picking_id ? + 'priority': '0', + #'create_date': + 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'), + 'product_id': picking_line.product_id.id, + 'product_qty': picking_line.product_returned_quantity, + 'product_uom': picking_line.product_id.uom_id.id, + 'address_id': claim_id.partner_address_id.id, + 'prodlot_id': picking_line.prodlot_id.id, + # 'tracking_id': + 'picking_id': picking_id, + 'state': 'draft', + 'price_unit': picking_line.price_unit, + # 'price_currency_id': claim_id.company_id.currency_id.id, # from invoice ??? + 'company_id': claim_id.company_id.id, + 'location_id': location, + 'location_dest_id': picking.return_line_location.id, + #self.pool.get('stock.warehouse').read(cr, uid, [1],['lot_input_id'])[0]['lot_input_id'][0], + 'note': 'RMA Refound', + }) return { 'name': 'Customer Picking IN', @@ -141,13 +141,13 @@ class picking_out_from_returned_lines(osv.osv_memory): for line in returned_lines: if line.selected: M2M.append(self.pool.get('temp.return.line').create(cr, uid, { - 'claim_origine' : "none", - 'invoice_id' : line.invoice_id.id, - 'product_id' : line.product_id.id, - 'product_returned_quantity' : line.product_returned_quantity, - 'prodlot_id' : line.prodlot_id.id, - 'price_unit' : line.unit_sale_price, - })) + 'claim_origine' : "none", + 'invoice_id' : line.invoice_id.id, + 'product_id' : line.product_id.id, + 'product_returned_quantity' : line.product_returned_quantity, + 'prodlot_id' : line.prodlot_id.id, + 'price_unit' : line.unit_sale_price, + })) return M2M _defaults = { @@ -172,7 +172,7 @@ class picking_out_from_returned_lines(osv.osv_memory): location = claim_id.partner_id.property_stock_supplier.id # create picking picking_id = self.pool.get('stock.picking').create(cr, uid, { - 'origin': "RMA/"+`claim_id.id`, + 'origin': "RMA/"+`claim_id.id`, 'type': 'out', 'move_type': 'one', # direct 'state': 'draft', @@ -183,32 +183,32 @@ class picking_out_from_returned_lines(osv.osv_memory): # 'stock_journal_id': fields.many2one('stock.journal','Stock Journal', select=True), 'location_id': self.pool.get('stock.warehouse').read(cr, uid, [1],['lot_input_id'])[0]['lot_input_id'][0], 'location_dest_id': location, - 'note' : 'RMA picking in', - }) - - # Create picking lines + 'note' : 'RMA picking in', + }) + + # Create picking lines for picking_line in picking.return_line_ids: move_id = self.pool.get('stock.move').create(cr, uid, { - 'name' : picking_line.product_id.name_template, # Motif : crm id ? stock_picking_id ? - 'priority': '0', - #'create_date': - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), - 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'), - 'product_id': picking_line.product_id.id, - 'product_qty': picking_line.product_returned_quantity, - 'product_uom': picking_line.product_id.uom_id.id, - 'address_id': claim_id.partner_address_id.id, - 'prodlot_id': picking_line.prodlot_id.id, - # 'tracking_id': - 'picking_id': picking_id, - 'state': 'draft', - 'price_unit': picking_line.price_unit, - # 'price_currency_id': claim_id.company_id.currency_id.id, # from invoice ??? - 'company_id': claim_id.company_id.id, - 'location_id': self.pool.get('stock.warehouse').read(cr, uid, [1],['lot_input_id'])[0]['lot_input_id'][0], - 'location_dest_id': location, - 'note': 'RMA Refound', - }) + 'name' : picking_line.product_id.name_template, # Motif : crm id ? stock_picking_id ? + 'priority': '0', + #'create_date': + 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'), + 'product_id': picking_line.product_id.id, + 'product_qty': picking_line.product_returned_quantity, + 'product_uom': picking_line.product_id.uom_id.id, + 'address_id': claim_id.partner_address_id.id, + 'prodlot_id': picking_line.prodlot_id.id, + # 'tracking_id': + 'picking_id': picking_id, + 'state': 'draft', + 'price_unit': picking_line.price_unit, + # 'price_currency_id': claim_id.company_id.currency_id.id, # from invoice ??? + 'company_id': claim_id.company_id.id, + 'location_id': self.pool.get('stock.warehouse').read(cr, uid, [1],['lot_input_id'])[0]['lot_input_id'][0], + 'location_dest_id': location, + 'note': 'RMA Refound', + }) return { 'name': 'Customer Picking OUT', @@ -218,7 +218,7 @@ class picking_out_from_returned_lines(osv.osv_memory): 'res_model': 'stock.picking', 'type': 'ir.actions.act_window', } - + picking_out_from_returned_lines() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: