From a6efa3b5e4cb7e60dece0f6e502a70777958c74f Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Mon, 18 Mar 2019 17:31:56 +0100 Subject: [PATCH 1/3] Proxy fields defaults with lambda to allow inheritance --- rma/README.rst | 1 + rma/models/rma_operation.py | 10 ++++++---- rma/models/rma_order.py | 7 +++++-- rma/models/rma_order_line.py | 11 ++++++----- rma_account/README.rst | 1 + rma_account/models/rma_order_line.py | 2 +- rma_account/wizards/rma_refund.py | 3 ++- 7 files changed, 22 insertions(+), 13 deletions(-) diff --git a/rma/README.rst b/rma/README.rst index 19617464..041219ca 100644 --- a/rma/README.rst +++ b/rma/README.rst @@ -114,6 +114,7 @@ Contributors * Aaron Henriquez * Lois Rilo * Bhavesh Odedra +* Akim Juillerat Maintainer ---------- diff --git a/rma/models/rma_operation.py b/rma/models/rma_operation.py index bee15958..cee0ecc8 100644 --- a/rma/models/rma_operation.py +++ b/rma/models/rma_operation.py @@ -45,12 +45,12 @@ class RmaOperation(models.Model): in_route_id = fields.Many2one( comodel_name='stock.location.route', string='Inbound Route', domain=[('rma_selectable', '=', True)], - default=_default_routes, + default=lambda self: self._default_routes(), ) out_route_id = fields.Many2one( comodel_name='stock.location.route', string='Outbound Route', domain=[('rma_selectable', '=', True)], - default=_default_routes, + default=lambda self: self._default_routes(), ) customer_to_supplier = fields.Boolean( string='The customer will send to the supplier', @@ -60,10 +60,12 @@ class RmaOperation(models.Model): ) in_warehouse_id = fields.Many2one( comodel_name='stock.warehouse', string='Inbound Warehouse', - default=_default_warehouse_id) + default=lambda self: self._default_warehouse_id(), + ) out_warehouse_id = fields.Many2one( comodel_name='stock.warehouse', string='Outbound Warehouse', - default=_default_warehouse_id) + default=lambda self: self._default_warehouse_id(), + ) location_id = fields.Many2one( 'stock.location', 'Send To This Company Location') type = fields.Selection([ diff --git a/rma/models/rma_order.py b/rma/models/rma_order.py index 54134542..420006ab 100644 --- a/rma/models/rma_order.py +++ b/rma/models/rma_order.py @@ -50,12 +50,15 @@ class RmaOrder(models.Model): string='Group Number', index=True, copy=False) type = fields.Selection( [('customer', 'Customer'), ('supplier', 'Supplier')], - string="Type", required=True, default=_get_default_type, readonly=True) + string="Type", required=True, + default=lambda self: self._get_default_type(), + readonly=True + ) reference = fields.Char(string='Partner Reference', help="The partner reference of this RMA order.") comment = fields.Text('Additional Information') date_rma = fields.Datetime(string='Order Date', index=True, - default=_default_date_rma) + default=lambda self: self._default_date_rma(),) partner_id = fields.Many2one( comodel_name='res.partner', string='Partner', required=True) rma_line_ids = fields.One2many('rma.order.line', 'rma_id', diff --git a/rma/models/rma_order_line.py b/rma/models/rma_order_line.py index 221543f2..2c22dd98 100644 --- a/rma/models/rma_order_line.py +++ b/rma/models/rma_order_line.py @@ -167,7 +167,7 @@ class RmaOrderLine(models.Model): delivery_address_id = fields.Many2one( comodel_name='res.partner', string='Partner delivery address', - default=_default_delivery_address, + default=lambda self: self._default_delivery_address(), readonly=True, states={'draft': [('readonly', False)]}, help="This address will be used to deliver repaired or replacement " "products.", @@ -258,7 +258,8 @@ class RmaOrderLine(models.Model): default=lambda self: self.env.user.company_id) type = fields.Selection( selection=[('customer', 'Customer'), ('supplier', 'Supplier')], - string="Type", required=True, default=_get_default_type, + string="Type", required=True, + default=lambda self: self._get_default_type(), readonly=True, ) customer_to_supplier = fields.Boolean( @@ -298,19 +299,19 @@ class RmaOrderLine(models.Model): string='Inbound Warehouse', required=True, readonly=True, states={'draft': [('readonly', False)]}, - default=_default_warehouse_id, + default=lambda self: self._default_warehouse_id(), ) out_warehouse_id = fields.Many2one( comodel_name='stock.warehouse', string='Outbound Warehouse', required=True, readonly=True, states={'draft': [('readonly', False)]}, - default=_default_warehouse_id, + default=lambda self: self._default_warehouse_id(), ) location_id = fields.Many2one( comodel_name='stock.location', string='Send To This Company Location', required=True, readonly=True, states={'draft': [('readonly', False)]}, - default=_default_location_id, + default=lambda self: self._default_location_id(), ) customer_rma_id = fields.Many2one( 'rma.order.line', string='Customer RMA line', ondelete='cascade') diff --git a/rma_account/README.rst b/rma_account/README.rst index c8003352..8dfed892 100644 --- a/rma_account/README.rst +++ b/rma_account/README.rst @@ -44,6 +44,7 @@ Contributors * Aaron Henriquez * Lois Rilo * Bhavesh Odedra +* Akim Juillerat Maintainer ---------- diff --git a/rma_account/models/rma_order_line.py b/rma_account/models/rma_order_line.py index 95904737..bfe24b6c 100644 --- a/rma_account/models/rma_order_line.py +++ b/rma_account/models/rma_order_line.py @@ -43,7 +43,7 @@ class RmaOrderLine(models.Model): invoice_address_id = fields.Many2one( 'res.partner', string='Partner invoice address', - default=_default_invoice_address, + default=lambda self: self._default_invoice_address(), readonly=True, states={'draft': [('readonly', False)]}, help="Invoice address for current rma order.", ) diff --git a/rma_account/wizards/rma_refund.py b/rma_account/wizards/rma_refund.py index 48c72eeb..a77e0e1e 100644 --- a/rma_account/wizards/rma_refund.py +++ b/rma_account/wizards/rma_refund.py @@ -63,7 +63,8 @@ class RmaRefund(models.TransientModel): ) date = fields.Date(string='Accounting Date') description = fields.Char( - string='Reason', required=True, default=_get_reason, + string='Reason', required=True, + default=lambda self: self._get_reason(), ) item_ids = fields.One2many( comodel_name='rma.refund.item', From 21d340cc237286d0f3371f47c1069adbe10f5ae4 Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Mon, 18 Mar 2019 17:38:46 +0100 Subject: [PATCH 2/3] Use strings on fields compute to allow inheritance --- rma/models/rma_order.py | 12 +++++++----- rma/models/rma_order_line.py | 20 ++++++++++---------- rma_account/models/invoice.py | 4 ++-- rma_account/models/rma_order.py | 4 ++-- rma_account/models/rma_order_line.py | 6 +++--- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/rma/models/rma_order.py b/rma/models/rma_order.py index 420006ab..201eca08 100644 --- a/rma/models/rma_order.py +++ b/rma/models/rma_order.py @@ -63,14 +63,16 @@ class RmaOrder(models.Model): comodel_name='res.partner', string='Partner', required=True) rma_line_ids = fields.One2many('rma.order.line', 'rma_id', string='RMA lines') - in_shipment_count = fields.Integer(compute=_compute_in_shipment_count, + in_shipment_count = fields.Integer(compute='_compute_in_shipment_count', string='# of Invoices') - out_shipment_count = fields.Integer(compute=_compute_out_shipment_count, + out_shipment_count = fields.Integer(compute='_compute_out_shipment_count', string='# of Outgoing Shipments') - line_count = fields.Integer(compute=_compute_line_count, + line_count = fields.Integer(compute='_compute_line_count', string='# of Outgoing Shipments') - supplier_line_count = fields.Integer(compute=_compute_supplier_line_count, - string='# of Outgoing Shipments') + supplier_line_count = fields.Integer( + compute='_compute_supplier_line_count', + string='# of Outgoing Shipments' + ) company_id = fields.Many2one('res.company', string='Company', required=True, default=lambda self: self.env.user.company_id) diff --git a/rma/models/rma_order_line.py b/rma/models/rma_order_line.py index 2c22dd98..b3697aaf 100644 --- a/rma/models/rma_order_line.py +++ b/rma/models/rma_order_line.py @@ -240,9 +240,9 @@ class RmaOrderLine(models.Model): string='Price Unit', readonly=True, states={'draft': [('readonly', False)]}, ) - in_shipment_count = fields.Integer(compute=_compute_in_shipment_count, + in_shipment_count = fields.Integer(compute='_compute_in_shipment_count', string='# of Shipments') - out_shipment_count = fields.Integer(compute=_compute_out_shipment_count, + out_shipment_count = fields.Integer(compute='_compute_out_shipment_count', string='# of Deliveries') move_ids = fields.One2many('stock.move', 'rma_line_id', string='Stock Moves', readonly=True, @@ -336,40 +336,40 @@ class RmaOrderLine(models.Model): qty_to_receive = fields.Float( string='Qty To Receive', digits=dp.get_precision('Product Unit of Measure'), - compute=_compute_qty_to_receive, store=True) + compute='_compute_qty_to_receive', store=True) qty_incoming = fields.Float( string='Incoming Qty', copy=False, readonly=True, digits=dp.get_precision('Product Unit of Measure'), - compute=_compute_qty_incoming, store=True) + compute='_compute_qty_incoming', store=True) qty_received = fields.Float( string='Qty Received', copy=False, digits=dp.get_precision('Product Unit of Measure'), - compute=_compute_qty_received, + compute='_compute_qty_received', store=True) qty_to_deliver = fields.Float( string='Qty To Deliver', copy=False, digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute=_compute_qty_to_deliver, + readonly=True, compute='_compute_qty_to_deliver', store=True) qty_outgoing = fields.Float( string='Outgoing Qty', copy=False, readonly=True, digits=dp.get_precision('Product Unit of Measure'), - compute=_compute_qty_outgoing, + compute='_compute_qty_outgoing', store=True) qty_delivered = fields.Float( string='Qty Delivered', copy=False, digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute=_compute_qty_delivered, + readonly=True, compute='_compute_qty_delivered', store=True) qty_to_supplier_rma = fields.Float( string='Qty to send to Supplier RMA', digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute=_compute_qty_supplier_rma, + readonly=True, compute='_compute_qty_supplier_rma', store=True) qty_in_supplier_rma = fields.Float( string='Qty in Supplier RMA', digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute=_compute_qty_supplier_rma, + readonly=True, compute='_compute_qty_supplier_rma', store=True) under_warranty = fields.Boolean( string="Under Warranty?", diff --git a/rma_account/models/invoice.py b/rma_account/models/invoice.py index 6a88d0cc..1b8b9fa9 100644 --- a/rma_account/models/invoice.py +++ b/rma_account/models/invoice.py @@ -58,7 +58,7 @@ class AccountInvoice(models.Model): return {} rma_count = fields.Integer( - compute=_compute_rma_count, string='# of RMA') + compute='_compute_rma_count', string='# of RMA') add_rma_line_id = fields.Many2one( comodel_name='rma.order.line', @@ -156,7 +156,7 @@ class AccountInvoiceLine(models.Model): invl.rma_line_count = len(rma_lines) rma_line_count = fields.Integer( - compute=_compute_rma_count, string='# of RMA') + compute='_compute_rma_count', string='# of RMA') rma_line_ids = fields.One2many( comodel_name='rma.order.line', inverse_name='invoice_line_id', string="RMA", readonly=True, diff --git a/rma_account/models/rma_order.py b/rma_account/models/rma_order.py index 20d4f89b..82a4591b 100644 --- a/rma_account/models/rma_order.py +++ b/rma_account/models/rma_order.py @@ -25,9 +25,9 @@ class RmaOrder(models.Model): ondelete='set null', readonly=True, ) invoice_refund_count = fields.Integer( - compute=_compute_invoice_refund_count, string='# of Refunds') + compute='_compute_invoice_refund_count', string='# of Refunds') invoice_count = fields.Integer( - compute=_compute_invoice_count, string='# of Invoices') + compute='_compute_invoice_count', string='# of Invoices') def _prepare_rma_line_from_inv_line(self, line): if self.type == 'customer': diff --git a/rma_account/models/rma_order_line.py b/rma_account/models/rma_order_line.py index bfe24b6c..5f4d41f5 100644 --- a/rma_account/models/rma_order_line.py +++ b/rma_account/models/rma_order_line.py @@ -48,7 +48,7 @@ class RmaOrderLine(models.Model): help="Invoice address for current rma order.", ) refund_count = fields.Integer( - compute=_compute_refund_count, string='# of Refunds', default=0) + compute='_compute_refund_count', string='# of Refunds', default=0) invoice_line_id = fields.Many2one( comodel_name='account.invoice.line', string='Originating Invoice Line', @@ -73,11 +73,11 @@ class RmaOrderLine(models.Model): qty_to_refund = fields.Float( string='Qty To Refund', copy=False, digits=dp.get_precision('Product Unit of Measure'), readonly=True, - compute=_compute_qty_to_refund, store=True) + compute='_compute_qty_to_refund', store=True) qty_refunded = fields.Float( string='Qty Refunded', copy=False, digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute=_compute_qty_refunded, store=True) + readonly=True, compute='_compute_qty_refunded', store=True) @api.onchange('product_id') def _onchange_product_id(self): From 5a9fed3301d5d92403e3c83354289a779f3bad39 Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Mon, 18 Mar 2019 18:13:25 +0100 Subject: [PATCH 3/3] Define default value for required fields --- rma/models/rma_order_line.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rma/models/rma_order_line.py b/rma/models/rma_order_line.py index b3697aaf..7c907fd6 100644 --- a/rma/models/rma_order_line.py +++ b/rma/models/rma_order_line.py @@ -273,13 +273,13 @@ class RmaOrderLine(models.Model): receipt_policy = fields.Selection([ ('no', 'Not required'), ('ordered', 'Based on Ordered Quantities'), ('delivered', 'Based on Delivered Quantities')], - required=True, string="Receipts Policy", + required=True, string="Receipts Policy", default='no', readonly=True, states={'draft': [('readonly', False)]}, ) delivery_policy = fields.Selection([ ('no', 'Not required'), ('ordered', 'Based on Ordered Quantities'), ('received', 'Based on Received Quantities')], required=True, - string="Delivery Policy", + string="Delivery Policy", default='no', readonly=True, states={'draft': [('readonly', False)]}, ) in_route_id = fields.Many2one(