Skip to content

Commit

Permalink
[RFC] egd_sale_blanket_order_custom
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelsavegnago committed Sep 20, 2023
1 parent 967dc12 commit ad8b6f6
Show file tree
Hide file tree
Showing 19 changed files with 406 additions and 317 deletions.
2 changes: 0 additions & 2 deletions egd_sale_blanket_order_custom/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
# Copyright 2023 - TODAY, Kaynnan Lemes <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import wizard
7 changes: 5 additions & 2 deletions egd_sale_blanket_order_custom/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
"website": "https://github.com/Escodoo/egd-addons",
"depends": ["sale_blanket_order"],
"data": [
"security/egd_sale_blanket_order_product.xml",
"security/egd_sale_blanket_order_service.xml",
"security/egd_sale_blanket_order_sale_order_plan.xml",
"security/ir.model.access.csv",
"wizard/sale_create_order_plan_view.xml",
"wizard/sale_make_planned_order_view.xml",
"views/sale_view.xml",
"views/sale_blanket_order.xml",
"views/egd_sale_blanket_order_sale_order_plan.xml",
],
# 'demo': [],
}
6 changes: 2 additions & 4 deletions egd_sale_blanket_order_custom/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# Copyright 2023 - TODAY, Kaynnan Lemes <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import blanket_orders
from . import sale_blanket_orders
from . import egd_sale_blanket_order_product
from . import egd_sale_blanket_order_service
from . import sale_order_plan
from . import egd_sale_blanket_order_sale_order_plan
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from odoo import api, fields, models


class EGDSaleBlanketOrderProduct(models.Model):
class EgdSaleBlanketOrderProduct(models.Model):

_name = "egd.sale.blanket.order.product"
_description = "EGD Sale Blanket Order Product"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
# Copyright 2023 - TODAY, Kaynnan Lemes <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import _, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.tools.float_utils import float_compare, float_round


class SaleOrderPlan(models.Model):
_name = "sale.order.plan"
_description = "Order Planning Detail"
class EgdSaleBlanketOrderSaleOrderPlan(models.Model):
_name = "egd.sale.blanket.order.sale.order.plan"
_description = "Sale Order Planning Detail"
_order = "installment"

sale_id = fields.Many2one(
Expand Down Expand Up @@ -94,7 +97,7 @@ def _compute_ordered(self):

def _compute_last(self):
for rec in self:
last = max(rec.sale_id.order_plan_ids.mapped("installment"))
last = max(rec.sale_id.egd_sale_order_plan_ids.mapped("installment"))

Check warning on line 100 in egd_sale_blanket_order_custom/models/egd_sale_blanket_order_sale_order_plan.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/egd_sale_blanket_order_sale_order_plan.py#L100

Added line #L100 was not covered by tests
rec.last = rec.installment == last

def _compute_new_order_quantity(self, blanket_order):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from odoo import api, fields, models


class EGDBlanketOrderService(models.Model):
class EgdBlanketOrderService(models.Model):

_name = "egd.sale.blanket.order.service"
_description = "EGD Sale Blanket Order Service"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
# Copyright 2023 - TODAY, Kaynnan Lemes <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from dateutil.relativedelta import relativedelta

from odoo import _, api, fields, models
Expand All @@ -10,74 +11,76 @@
class SaleBlanketOrder(models.Model):
_inherit = "sale.blanket.order"

order_plan_ids = fields.One2many(
comodel_name="sale.order.plan",
egd_sale_order_plan_ids = fields.One2many(
comodel_name="egd.sale.blanket.order.sale.order.plan",
inverse_name="sale_id",
string="Order Plan",
string="Sale Order Plan",
copy=False,
)
use_order_plan = fields.Boolean(
string="Use Order Plan",
egd_use_sale_order_plan = fields.Boolean(
string="Use Sale Order Plan",
default=False,
copy=False,
)
ip_order_plan = fields.Boolean(
string="Order Plan In Process",
compute="_compute_ip_order_plan",
help="At least one order plan line pending to create order",
egd_ip_sale_order_plan = fields.Boolean(
string="Sale Order Plan In Process",
compute="_compute_egd_ip_sale_order_plan",
help="At least one order plan line pending to create sale order",
)
egd_order_product = fields.One2many(
egd_order_product_ids = fields.One2many(
"egd.sale.blanket.order.product",
"blanket_order_id",
string="Blanket Order Products",
string="Blanket Order Products Costs",
)

egd_order_service = fields.One2many(
egd_order_service_ids = fields.One2many(
"egd.sale.blanket.order.service",
"blanket_order_id",
string="Blanket Order Services",
string="Blanket Order Services Costs",
)

egd_product_total = fields.Monetary(
"egd_order_product.amount_total", compute="_compute_egd_total_order_product"
"Total Product Costs", compute="_compute_egd_product_total"
)

egd_service_total = fields.Monetary(
"egd_order_service.amount_total", compute="_compute_egd_total_order_service"
"Total Service Costs", compute="_compute_egd_service_total"
)

egd_profit = fields.Monetary(
string="Profit", compute="_compute_egd_profit", store=True
string="Profit (Total - Total Costs)", compute="_compute_egd_profit", store=True
)

def _compute_ip_order_plan(self):
def _compute_egd_ip_sale_order_plan(self):
for rec in self:
has_order_plan = rec.use_order_plan and rec.order_plan_ids
to_order = rec.order_plan_ids.filtered(lambda l: not l.ordered)
has_order_plan = rec.egd_use_sale_order_plan and rec.egd_sale_order_plan_ids

Check warning on line 56 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L56

Added line #L56 was not covered by tests
to_order = rec.egd_sale_order_plan_ids.filtered(lambda l: not l.ordered)
if rec.state == "open" and has_order_plan and to_order:
rec.ip_order_plan = True
rec.egd_ip_sale_order_plan = True

Check warning on line 59 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L59

Added line #L59 was not covered by tests
continue
rec.ip_order_plan = False
rec.egd_ip_sale_order_plan = False

Check warning on line 61 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L61

Added line #L61 was not covered by tests

@api.constrains("state")
def _check_order_plan(self):
for rec in self:
if rec.state != "draft":
if rec.order_plan_ids.filtered(lambda l: not l.percent):
if rec.egd_sale_order_plan_ids.filtered(lambda l: not l.percent):
raise ValidationError(
_("Please fill percentage for all order plan lines")
)

def action_confirm(self):
if self.filtered(lambda r: r.use_order_plan and not r.order_plan_ids):
if self.filtered(
lambda r: r.egd_use_sale_order_plan and not r.egd_sale_order_plan_ids
):
raise UserError(_("Use Order Plan selected, but no plan created"))
return super().action_confirm()

def create_order_plan(
self, num_installment, installment_date, interval, interval_type
):
self.ensure_one()
self.order_plan_ids.unlink()
self.egd_sale_order_plan_ids.unlink()

Check warning on line 83 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L83

Added line #L83 was not covered by tests
order_plans = []
Decimal = self.env["decimal.precision"]
prec = Decimal.precision_get("Product Unit of Measure")
Expand All @@ -98,12 +101,12 @@ def create_order_plan(
installment_date = self._next_date(
installment_date, interval, interval_type
)
self.write({"order_plan_ids": order_plans})
self.write({"egd_sale_order_plan_ids": order_plans})

Check warning on line 104 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L104

Added line #L104 was not covered by tests
return True

def remove_order_plan(self):
self.ensure_one()
self.order_plan_ids.unlink()
self.egd_sale_order_plan_ids.unlink()

Check warning on line 109 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L109

Added line #L109 was not covered by tests
return True

@api.model
Expand Down Expand Up @@ -153,38 +156,32 @@ def _create_sale_order(self):
self.id
) # Usage for compute new quantity
if order_plan_id:
plan = self.env["sale.order.plan"].browse(order_plan_id)
plan = self.env["egd.sale.blanket.order.sale.order.plan"].browse(

Check warning on line 159 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L159

Added line #L159 was not covered by tests
order_plan_id
)
for order in orders:
plan._compute_new_order_quantity(blanket_orders)
order.date_order = plan.plan_date
plan.sale_order_ids += orders
return orders

@api.depends("egd_order_product.amount_total", "egd_order_service.amount_total")
@api.depends("amount_total", "egd_service_total", "egd_product_total")
def _compute_egd_profit(self):
for order in self:
order.egd_profit = sum(
[line.amount_total for line in order.egd_order_product]
) + sum([line.amount_total for line in order.egd_order_service])

def _compute_egd_total_order_product(self):
for order in self:
order.egd_product_total = sum(
[line.amount_total for line in order.egd_order_product]
order.egd_profit = order.amount_total - (

Check warning on line 171 in egd_sale_blanket_order_custom/models/sale_blanket_orders.py

View check run for this annotation

Codecov / codecov/patch

egd_sale_blanket_order_custom/models/sale_blanket_orders.py#L171

Added line #L171 was not covered by tests
order.egd_product_total + order.egd_service_total
)

def _compute_egd_total_order_service(self):
@api.depends("egd_order_product_ids.amount_total")
def _compute_egd_product_total(self):
for order in self:
order.egd_service_total = sum(
[line.amount_total for line in order.egd_order_service]
order.egd_product_total = sum(
[line.amount_total for line in order.egd_order_product_ids]
)

@api.onchange("egd_order_product", "egd_order_service")
def _onchange_egd_order_product_service(self):
@api.depends("egd_order_service_ids.amount_total")
def _compute_egd_service_total(self):
for order in self:
order.egd_service_total = sum(
[line.amount_total for line in order.egd_order_service]
)
order.egd_product_total = sum(
[line.amount_total for line in order.egd_order_product]
[line.amount_total for line in order.egd_order_service_ids]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 - TODAY, Marcel Savegnago - Escodoo https://www.escodoo.com.br
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.model.access" id="egd_sale_blanket_order__user">
<field name="name">egd_sale_blanket_order_product_user</field>
<field name="model_id" ref="model_egd_sale_blanket_order_product" />
<field name="group_id" ref="base.group_user" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<record model="ir.model.access" id="egd_sale_blanket_order_product_manager">
<field name="name">egd_sale_blanket_order_product_manager</field>
<field name="model_id" ref="model_egd_sale_blanket_order_product" />
<field name="group_id" ref="sales_team.group_sale_salesman" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 - TODAY, Marcel Savegnago - Escodoo https://www.escodoo.com.br
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.model.access" id="egd_sale_blanket_order_sale_order_plan_user">
<field name="name">egd_sale_blanket_order_sale_order_plan_user</field>
<field name="model_id" ref="model_egd_sale_blanket_order_sale_order_plan" />
<field name="group_id" ref="base.group_user" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<record model="ir.model.access" id="egd_sale_blanket_order_sale_order_plan_manager">
<field name="name">egd_sale_blanket_order_sale_order_plan_manager</field>
<field name="model_id" ref="model_egd_sale_blanket_order_sale_order_plan" />
<field name="group_id" ref="sales_team.group_sale_salesman" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 - TODAY, Marcel Savegnago - Escodoo https://www.escodoo.com.br
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.model.access" id="egd_sale_blanket_order_service_user">
<field name="name">egd_sale_blanket_order_service_user</field>
<field name="model_id" ref="model_egd_sale_blanket_order_service" />
<field name="group_id" ref="base.group_user" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<record model="ir.model.access" id="egd_sale_blanket_order_service_manager">
<field name="name">egd_sale_blanket_order_service_manager</field>
<field name="model_id" ref="model_egd_sale_blanket_order_service" />
<field name="group_id" ref="sales_team.group_sale_salesman" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
</odoo>
3 changes: 0 additions & 3 deletions egd_sale_blanket_order_custom/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_order_plan,access_sale_order_plan,model_sale_order_plan,,1,1,1,1
access_egd_sale_blanket_order_product,access_egd_sale_blanket_order_product,model_egd_sale_blanket_order_product,,1,1,1,1
access_egd_sale_blanket_order_service,access_egd_sale_blanket_order_service,model_egd_sale_blanket_order_service,,1,1,1,1
access_sale_create_order_plan,access_sale_create_order_plan,model_sale_create_order_plan,,1,1,1,1
access_sale_make_planned_order,access_sale_make_planned_order,model_sale_make_planned_order,,1,1,1,1
Loading

0 comments on commit ad8b6f6

Please sign in to comment.