Skip to content

Commit

Permalink
[IMP] sale_order_weight: pre-commit stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
legalsylvain committed Nov 18, 2024
1 parent 99b37e9 commit ee705d1
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 93 deletions.
10 changes: 5 additions & 5 deletions sale_order_weight/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ Sale Order Weight
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/12.0/sale_order_weight
:target: https://github.com/OCA/sale-workflow/tree/16.0/sale_order_weight
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-12-0/sale-workflow-12-0-sale_order_weight
:target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_order_weight
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=12.0
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|
Expand All @@ -41,7 +41,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_weight%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_weight%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand Down Expand Up @@ -79,6 +79,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-legalsylvain|

This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/12.0/sale_order_weight>`_ project on GitHub.
This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/16.0/sale_order_weight>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
28 changes: 14 additions & 14 deletions sale_order_weight/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
# Copyright 2021 Manuel Calero Solís (https://xtendoo.es)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Sale Order Weight',
'version': '12.0.1.1.0',
'category': 'Accounting & Finance',
'author': 'Xtendoo, Odoo Community Association (OCA)',
'maintainers': ['legalsylvain'],
"name": "Sale Order Weight",
"version": "12.0.1.1.0",
"category": "Accounting & Finance",
"author": "Xtendoo, Odoo Community Association (OCA)",
"maintainers": ["legalsylvain"],
"website": "https://github.com/OCA/sale-workflow",
'license': 'AGPL-3',
'summary': 'Sale Order Weight',
'installable': True,
'depends': [
'sale',
'sale_stock',
"license": "AGPL-3",
"summary": "Sale Order Weight",
"installable": True,
"depends": [
"sale",
"sale_stock",
],
'data': [
'views/sale_order_view.xml',
"data": [
"views/sale_order_view.xml",
],
'pre_init_hook': 'pre_init_hook',
"pre_init_hook": "pre_init_hook",
}
24 changes: 12 additions & 12 deletions sale_order_weight/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,33 @@


class SaleOrder(models.Model):
_inherit = 'sale.order'
_inherit = "sale.order"

total_ordered_weight = fields.Float(
compute='_compute_total_ordered_weight',
string='Total Ordered Weight',
store=True
compute="_compute_total_ordered_weight",
string="Total Ordered Weight",
store=True,
)
total_delivered_weight = fields.Float(
compute='_compute_total_delivered_weight',
string='Total Delivered Weight',
store=True
compute="_compute_total_delivered_weight",
string="Total Delivered Weight",
store=True,
)

@api.depends('order_line.total_ordered_weight')
@api.depends("order_line.total_ordered_weight")
def _compute_total_ordered_weight(self):
for order in self:
order.total_ordered_weight = sum(
order.mapped('order_line.total_ordered_weight')
order.mapped("order_line.total_ordered_weight")
)

@api.depends('order_line.total_delivered_weight')
@api.depends("order_line.total_delivered_weight")
def _compute_total_delivered_weight(self):
for order in self:
order.total_delivered_weight = sum(
order.mapped('order_line.total_delivered_weight')
order.mapped("order_line.total_delivered_weight")
)

@api.multi
def recalculate_weight(self):
self.mapped('order_line')._onchange_weight()
self.mapped("order_line")._onchange_weight()
25 changes: 13 additions & 12 deletions sale_order_weight/models/sale_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,39 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import api, fields, models

from odoo.addons import decimal_precision as dp


class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
_inherit = "sale.order.line"

unit_weight = fields.Float(
string='Unit Weight',
digits=dp.get_precision('Stock Weight'),
string="Unit Weight",
digits=dp.get_precision("Stock Weight"),
)
total_ordered_weight = fields.Float(
compute='_compute_total_ordered_weight',
string='Total Ordered Weight',
store=True
compute="_compute_total_ordered_weight",
string="Total Ordered Weight",
store=True,
)
total_delivered_weight = fields.Float(
compute='_compute_total_delivered_weight',
string='Total Delivered Weight',
store=True
compute="_compute_total_delivered_weight",
string="Total Delivered Weight",
store=True,
)

@api.onchange('product_id')
@api.onchange("product_id")
def _onchange_weight(self):
for line in self:
line.unit_weight = line.product_id.weight

@api.depends('unit_weight', 'product_uom_qty')
@api.depends("unit_weight", "product_uom_qty")
def _compute_total_ordered_weight(self):
for line in self:
line.total_ordered_weight = line.unit_weight * line.product_uom_qty

@api.depends('unit_weight', 'qty_delivered')
@api.depends("unit_weight", "qty_delivered")
def _compute_total_delivered_weight(self):
for line in self:
line.total_delivered_weight = line.unit_weight * line.qty_delivered
16 changes: 11 additions & 5 deletions sale_order_weight/pre_init_hook.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright 2023 Sylvain LE GAL
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import logging

_logger = logging.getLogger(__name__)


Expand All @@ -15,21 +16,24 @@ def pre_init_hook(cr):
ADD COLUMN IF NOT EXISTS unit_weight NUMERIC,
ADD COLUMN IF NOT EXISTS total_ordered_weight DOUBLE PRECISION,
ADD COLUMN IF NOT EXISTS total_delivered_weight DOUBLE PRECISION;
""")
"""
)
_logger.info(
"sale.order.line model :"
" Initialize 'unit weight';"
" precompute 'total_ordered_weight' and 'total_delivered_weight'"
)
cr.execute("""
cr.execute(
"""
UPDATE sale_order_line
SET unit_weight = product_product.weight,
total_ordered_weight = product_product.weight * product_uom_qty,
total_delivered_weight = product_product.weight * qty_delivered
FROM product_product
WHERE product_product.id = sale_order_line.product_id
AND product_product.weight != 0;
""")
"""
)

_logger.info(
"sale.order: Create 'total_ordered_weight' and"
Expand All @@ -40,7 +44,8 @@ def pre_init_hook(cr):
ALTER TABLE sale_order
ADD COLUMN IF NOT EXISTS total_ordered_weight DOUBLE PRECISION,
ADD COLUMN IF NOT EXISTS total_delivered_weight DOUBLE PRECISION;
""")
"""
)

_logger.info(
"sale.order model :"
Expand All @@ -60,4 +65,5 @@ def pre_init_hook(cr):
WHERE tmp.order_id = sale_order.id
AND (tmp.total_ordered_weight != 0.0
OR tmp.total_delivered_weight != 0.0);
""")
"""
)
6 changes: 3 additions & 3 deletions sale_order_weight/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ <h1 class="title">Sale Order Weight</h1>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6c59da35017eadc3724250770bc60296ba21ae7ec3902b2171477d8b8e3d3247
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-workflow/tree/12.0/sale_order_weight"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-12-0/sale-workflow-12-0-sale_order_weight"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&amp;target_branch=12.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-workflow/tree/16.0/sale_order_weight"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_order_weight"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module is used to calculate the weight in a sale order.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
Expand All @@ -388,7 +388,7 @@ <h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-workflow/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_weight%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_weight%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
Expand Down Expand Up @@ -416,7 +416,7 @@ <h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/legalsylvain"><img alt="legalsylvain" src="https://github.com/legalsylvain.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/12.0/sale_order_weight">OCA/sale-workflow</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/16.0/sale_order_weight">OCA/sale-workflow</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
Expand Down
53 changes: 29 additions & 24 deletions sale_order_weight/tests/test_sale_order_weight.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,38 @@


class TestSaleOrderWeight(common.TransactionCase):

def setUp(self):
super().setUp()
self.partner = self.env.ref('base.res_partner_1')
self.product_1 = self.env.ref('product.product_product_4')
self.partner = self.env.ref("base.res_partner_1")
self.product_1 = self.env.ref("product.product_product_4")
self.product_1.weight = 5.0 # * 2 = 10 kg
self.product_2 = self.env.ref('product.product_product_5')
self.product_2 = self.env.ref("product.product_product_5")
self.product_2.weight = 4.0 # * 3 = 12 kg
self.sale_order = self.env['sale.order'].create({
'partner_id': self.partner.id,
})
self.sale_order_line_1 = self.env['sale.order.line'].create({
'order_id': self.sale_order.id,
'name': self.product_1.name,
'product_id': self.product_1.id,
'unit_weight': self.product_1.weight,
'product_uom_qty': 2,
'product_uom': self.product_1.uom_id.id,
})
self.sale_order_line_2 = self.env['sale.order.line'].create({
'order_id': self.sale_order.id,
'name': self.product_2.name,
'product_id': self.product_2.id,
'unit_weight': self.product_2.weight,
'product_uom_qty': 3,
'product_uom': self.product_2.uom_id.id,
})
self.sale_order = self.env["sale.order"].create(
{
"partner_id": self.partner.id,
}
)
self.sale_order_line_1 = self.env["sale.order.line"].create(
{
"order_id": self.sale_order.id,
"name": self.product_1.name,
"product_id": self.product_1.id,
"unit_weight": self.product_1.weight,
"product_uom_qty": 2,
"product_uom": self.product_1.uom_id.id,
}
)
self.sale_order_line_2 = self.env["sale.order.line"].create(
{
"order_id": self.sale_order.id,
"name": self.product_2.name,
"product_id": self.product_2.id,
"unit_weight": self.product_2.weight,
"product_uom_qty": 3,
"product_uom": self.product_2.uom_id.id,
}
)

def test_sale_order_weight(self):
self.assertEqual(self.sale_order.total_ordered_weight, 22.0)
Expand All @@ -43,7 +48,7 @@ def test_sale_delivered_weight(self):
picking_1 = self.sale_order.picking_ids
self.assertEqual(len(picking_1.move_lines), 2)
picking_1.action_confirm()
picking_1.mapped('move_lines').write({'quantity_done': 1})
picking_1.mapped("move_lines").write({"quantity_done": 1})
picking_1.action_done()
self.assertEqual(self.sale_order.total_delivered_weight, 9.0)

Expand Down
41 changes: 23 additions & 18 deletions sale_order_weight/views/sale_order_view.xml
Original file line number Diff line number Diff line change
@@ -1,54 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>

<record id="sale_order_weight_view_form" model="ir.ui.view">
<field name="name">sale.order.weight.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree"/>
<field name="inherit_id" ref="sale.view_order_tree" />
<field name="type">form</field>
<field name="arch" type="xml">
<field name="amount_total" position="after">
<field name="total_ordered_weight" sum="Total Ordered Weight"/>
<field name="total_delivered_weight" sum="Total Delivered Weight"/>
<field name="total_ordered_weight" sum="Total Ordered Weight" />
<field name="total_delivered_weight" sum="Total Delivered Weight" />
</field>
</field>
</record>

<record id="quotation_weight_view_form" model="ir.ui.view">
<field name="name">sale.order.weight.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="inherit_id" ref="sale.view_quotation_tree" />
<field name="type">form</field>
<field name="arch" type="xml">
<field name="amount_total" position="after">
<field name="total_ordered_weight" sum="Total Ordered Weight"/>
<field name="total_delivered_weight" sum="Total Delivered Weight"/>
<field name="total_ordered_weight" sum="Total Ordered Weight" />
<field name="total_delivered_weight" sum="Total Delivered Weight" />
</field>
</field>
</record>

<record id="view_order_form_inherit" model="ir.ui.view">
<field name="name"> sale.order.weight.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">

<button name="action_unlock" position="after">
<button name="recalculate_weight"
class="ml-2 btn btn-default"
string="Recalculate weight"
Help="Recalculate sale order weight"
type="object" />
<button
name="recalculate_weight"
class="ml-2 btn btn-default"
string="Recalculate weight"
Help="Recalculate sale order weight"
type="object"
/>
</button>

<field name="amount_total" position="after">
<field name="total_ordered_weight"/>
<field name="total_delivered_weight"/>
<field name="total_ordered_weight" />
<field name="total_delivered_weight" />
</field>

<xpath expr="//field[@name='order_line']/tree//field[@name='price_subtotal']" position="before">
<field name="unit_weight"/>
<field name="total_ordered_weight" invisible="1"/>
<xpath
expr="//field[@name='order_line']/tree//field[@name='price_subtotal']"
position="before"
>
<field name="unit_weight" />
<field name="total_ordered_weight" invisible="1" />
</xpath>

</field>
Expand Down
1 change: 1 addition & 0 deletions setup/sale_order_weight/odoo/addons/sale_order_weight
Loading

0 comments on commit ee705d1

Please sign in to comment.