From 19eb12c3410cdbabb0a7f1d599d5281c6795e09d Mon Sep 17 00:00:00 2001 From: Oihane Crucelaegui Date: Tue, 22 May 2018 19:02:12 +0200 Subject: [PATCH] [IMP] stock_incoterm_extension: add default destination port --- .gitignore | 7 ++++ stock_incoterm_extension/__openerp__.py | 33 +++++++++++-------- .../models/account_invoice.py | 6 ++++ stock_incoterm_extension/models/sale_order.py | 5 +++ stock_incoterm_extension/models/stock.py | 22 ++++++++----- .../tests/test_stock_incoterm_extension.py | 18 ++++++++-- 6 files changed, 67 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index e789c70..4f4fa1a 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ coverage.xml # Translations *.mo +*.pot # Pycharm .idea @@ -51,9 +52,15 @@ coverage.xml # Rope .ropeproject +# Django stuff: +*.log + # Sphinx documentation docs/_build/ # Backup files *~ *.swp + +.settings/ + diff --git a/stock_incoterm_extension/__openerp__.py b/stock_incoterm_extension/__openerp__.py index 0a111f8..326bd3c 100644 --- a/stock_incoterm_extension/__openerp__.py +++ b/stock_incoterm_extension/__openerp__.py @@ -18,21 +18,26 @@ { "name": "Stock Incoterm Extension", - "version": "8.0.1.0.0", + "version": "8.0.1.1.0", "license": "AGPL-3", - "depends": ["stock_account", - "sale_stock", - "purchase"], - "author": "OdooMRP team," - "AvanzOSC," - "Serv. Tecnol. Avanzados - Pedro M. Baeza", + "depends": [ + "stock_account", + "sale_stock", + "purchase", + ], + "author": "OdooMRP team, " + "AvanzOSC, " + "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Odoo Community Association (OCA)", "website": "http://www.odoomrp.com", "category": "Stock", - 'data': ["security/ir.model.access.csv", - "views/stock_view.xml", - "views/account_invoice_view.xml", - "views/sale_order_view.xml", - "views/purchase_order_view.xml"], - 'installable': True, - 'auto_install': False, + "data": [ + "security/ir.model.access.csv", + "views/stock_view.xml", + "views/account_invoice_view.xml", + "views/sale_order_view.xml", + "views/purchase_order_view.xml", + ], + "installable": True, + "auto_install": False, } diff --git a/stock_incoterm_extension/models/account_invoice.py b/stock_incoterm_extension/models/account_invoice.py index 860b949..1112da4 100644 --- a/stock_incoterm_extension/models/account_invoice.py +++ b/stock_incoterm_extension/models/account_invoice.py @@ -36,3 +36,9 @@ def _get_selection_transport_type(self): destination_port = fields.Char(string="Destination port") transport_type = fields.Selection( selection='_get_selection_transport_type', string="Transport type") + + @api.onchange('incoterm') + def _onchange_incoterm(self): + for invoice in self: + invoice.destination_port = ( + invoice.incoterm.default_destination_port) diff --git a/stock_incoterm_extension/models/sale_order.py b/stock_incoterm_extension/models/sale_order.py index bd74b57..715c555 100644 --- a/stock_incoterm_extension/models/sale_order.py +++ b/stock_incoterm_extension/models/sale_order.py @@ -32,6 +32,11 @@ class SaleOrder(models.Model): selection=[('air', 'Air'), ('maritime', 'Maritime'), ('ground', 'Ground')], string="Transport type") + @api.onchange('incoterm') + def _onchange_incoterm(self): + for order in self: + order.destination_port = order.incoterm.default_destination_port + @api.model def _prepare_invoice(self, order, line_ids): res = super(SaleOrder, self)._prepare_invoice(order, line_ids) diff --git a/stock_incoterm_extension/models/stock.py b/stock_incoterm_extension/models/stock.py index 41fcefe..12cd261 100644 --- a/stock_incoterm_extension/models/stock.py +++ b/stock_incoterm_extension/models/stock.py @@ -25,6 +25,7 @@ class StockIncoterms(models.Model): destination_port = fields.Boolean(string="Requires destination port") transport_type = fields.Boolean(string="Requires transport type") + default_destination_port = fields.Char(string="Default Destination Port") class StockPicking(models.Model): @@ -45,17 +46,22 @@ def _get_selection_transport_type(self): transport_type = fields.Selection( selection='_get_selection_transport_type', string="Transport type") + @api.onchange('incoterm') + def _onchange_incoterm(self): + for picking in self: + picking.destination_port = ( + picking.incoterm.default_destination_port) + @api.model def _create_invoice_from_picking(self, picking, vals): - if picking and picking.sale_id: - sale = picking.sale_id + if picking: vals.update({ - 'incoterm': sale.incoterm and sale.incoterm.id or False, - 'destination_port': sale.destination_port, - 'transport_type': sale.transport_type - }) - return super(StockPicking, self)._create_invoice_from_picking(picking, - vals) + 'incoterm': picking.incoterm and picking.incoterm.id or False, + 'destination_port': picking.destination_port, + 'transport_type': picking.transport_type, + }) + return super(StockPicking, self)._create_invoice_from_picking( + picking, vals) class StockMove(models.Model): diff --git a/stock_incoterm_extension/tests/test_stock_incoterm_extension.py b/stock_incoterm_extension/tests/test_stock_incoterm_extension.py index 7f16c5f..2d6f390 100644 --- a/stock_incoterm_extension/tests/test_stock_incoterm_extension.py +++ b/stock_incoterm_extension/tests/test_stock_incoterm_extension.py @@ -17,11 +17,11 @@ def setUp(self): self.incoterm = self.env.ref('stock.incoterm_EXW') self.incoterm.destination_port = False self.incoterm.transport_type = True + self.incoterm.default_destination_port = 'port1' self.sale_order.incoterm = self.incoterm self.sale_order.transport_type = 'air' self.sale_order1.incoterm = self.incoterm self.sale_order1.transport_type = 'ground' - self.sale_order1.destination_port = 'port1' self.purchase_order.incoterm_id = self.incoterm self.purchase_order.transport_type = 'maritime' @@ -33,20 +33,34 @@ def test_sale_order_invoice(self): invoice = self.invoice_model.browse(inv_id) self.assertTrue(invoice and invoice.incoterm.id == self.incoterm.id and invoice.transport_type == 'air') + self.assertFalse(invoice.destination_port) + invoice._onchange_incoterm() def test_purchase_order_invoice(self): self.purchase_order.signal_workflow('purchase_confirm') invoice = self.purchase_order.invoice_ids and \ self.purchase_order.invoice_ids[0] + self.assertFalse(invoice and invoice.destination_port) self.assertTrue(invoice and invoice.incoterm.id == self.incoterm.id and invoice.transport_type == 'maritime') def test_sale_order_picking_invoice(self): self.sale_order1.order_policy = 'picking' self.sale_order1.action_button_confirm() - invoice_ids = self.sale_order1.picking_ids.action_invoice_create( + pickings = self.sale_order1.picking_ids + self.assertFalse(pickings.destination_port) + pickings._onchange_incoterm() + self.assertEquals(pickings.destination_port, + self.incoterm.default_destination_port) + invoice_ids = pickings.action_invoice_create( journal_id=self.journal.id) invoices = self.invoice_model.browse(invoice_ids) self.assertTrue(invoices and invoices[0].incoterm.id == self.incoterm.id and invoices[0].transport_type == 'ground' and invoices[0].destination_port == 'port1') + + def test_sale_order_onchange(self): + self.assertTrue(self.incoterm.default_destination_port) + self.sale_order._onchange_incoterm() + self.assertEquals(self.sale_order.destination_port, + self.incoterm.default_destination_port)