friday fix

This commit is contained in:
Benoît Vézina 2023-11-20 09:33:52 -05:00
parent baad827f86
commit 3ecbac2346
5 changed files with 65 additions and 41 deletions

View file

@ -44,7 +44,7 @@
],
'data': [
# BV: FOR MIGRATION
# 'data/fsm_data.xml',
'data/fsm_data.xml',
'views/task_template_views.xml',
'views/equipment.xml',
'security/ir.model.access.csv',

View file

@ -6,7 +6,7 @@
<field name="name">Waiting on Parts</field>
<field name="legend_blocked">Blocked</field>
<field name="fold" eval="False"/>
<field name="is_closed" eval="False"/>
<!-- <field name="is_closed" eval="False"/>-->
<field name="project_ids" eval="[(4,ref('industry_fsm.fsm_project'))]"/>
</record>
<record id="planning_project_stage_work_completed" model="project.task.type">
@ -14,7 +14,7 @@
<field name="name">Work Executed</field>
<field name="legend_blocked">Blocked</field>
<field name="fold" eval="False"/>
<field name="is_closed" eval="False"/>
<!-- <field name="is_closed" eval="False"/>-->
<field name="project_ids" eval="[(4,ref('industry_fsm.fsm_project'))]"/>
</record>
<record id="planning_project_stage_exception" model="project.task.type">
@ -22,7 +22,7 @@
<field name="name">Exception</field>
<field name="legend_blocked">Blocked</field>
<field name="fold" eval="False"/>
<field name="is_closed" eval="False"/>
<!-- <field name="is_closed" eval="False"/>-->
<field name="project_ids" eval="[(4,ref('industry_fsm.fsm_project'))]"/>
</record>
<!-- Since the Field Service project has no_update="1" we use a workaround here -->

View file

@ -38,7 +38,7 @@ class Task(models.Model):
)
planned_date_begin = fields.Datetime(
string="Start Date",
string="Planned Start Date",
tracking=True,
task_dependency_tracking=True,
compute="_compute_planned_dates",
@ -47,7 +47,7 @@ class Task(models.Model):
)
planned_date_end = fields.Datetime(
string="End Date",
string="Planned End Date",
tracking=True,
task_dependency_tracking=True,
compute="_compute_planned_dates",

View file

@ -16,7 +16,7 @@
</group>
<group name="right">
<field name="partner_location_id"
groups="sale.group_delivery_invoice_address"
groups="account.group_delivery_invoice_address"
context="{'default_type': 'delivery', 'show_address': 1}"
options='{"always_reload": True}'/>
<field name="tag_ids" widget="many2many_tags" options="{'no_open': False}"/>

View file

@ -5,48 +5,74 @@ from odoo.tools.float_utils import float_is_zero, float_compare
class SaleOrder(models.Model):
_inherit = 'sale.order'
margin_actual = fields.Monetary("Margin", compute='_compute_margin_actual',
store=False)
margin_percent_actual = fields.Float('Margin (%)', compute='_compute_margin_actual',
store=False,
group_operator='avg')
margin_actual = fields.Monetary("Our Margin", compute='_compute_margin_actual', store=False)
margin_percent_actual = fields.Float(
string='Our Margin (%)',
compute='_compute_margin_actual',
store=False,
group_operator='avg'
)
@api.depends('order_line.margin_actual', 'amount_untaxed')
def _compute_margin_actual(self):
for order in self:
order.margin_actual = sum(order.order_line.mapped('margin_actual'))
order.margin_percent_actual = order.amount_untaxed \
and order.margin_actual / order.amount_untaxed
order.margin_percent_actual = order.amount_untaxed and order.margin_actual / order.amount_untaxed
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
purchase_price_vendor = fields.Float(compute='_compute_purchase_price_vendor',
string="Vendor Price", groups="base.group_user",
digits='Product Price')
margin_percent_vendor = fields.Float(string='Margin (%) on Vendor Price',
groups='base.group_user', group_operator='avg',
compute='_compute_margin_vendor')
margin_vendor = fields.Float(string='Margin on Vendor Price',
groups='base.group_user', digits='Product Price',
compute='_compute_margin_vendor')
purchase_price_vendor = fields.Float(
compute='_compute_purchase_price_vendor',
string="Vendor Price",
groups="base.group_user",
digits='Product Price'
)
purchase_price_actual = fields.Float(compute="_compute_actual_margins",
digits='Product Price',
groups="base.group_user",
string="Purchase Price")
margin_actual = fields.Float(compute="_compute_actual_margins",
digits='Product Price',
groups="base.group_user",
string="Margin")
margin_percent_actual = fields.Float(compute="_compute_actual_margins",
groups="base.group_user",
string="Margin (%)")
margin_percent_vendor = fields.Float(
string='Margin (%) on Vendor Price',
groups='base.group_user',
group_operator='avg',
compute='_compute_margin_vendor'
)
@api.depends('purchase_price', 'purchase_price_vendor', 'move_ids.product_id',
'move_ids.product_id.qty_available', 'move_ids.state',
'qty_to_deliver')
margin_vendor = fields.Float(
string='Margin on Vendor Price',
groups='base.group_user',
digits='Product Price',
compute='_compute_margin_vendor'
)
purchase_price_actual = fields.Float(
compute="_compute_actual_margins",
digits='Product Price',
groups="base.group_user",
string="Purchase Price"
)
margin_actual = fields.Float(
compute="_compute_actual_margins",
digits='Product Price',
groups="base.group_user",
string="Our Margin"
)
margin_percent_actual = fields.Float(
compute="_compute_actual_margins",
groups="base.group_user",
string="Our Margin (%)"
)
@api.depends(
'purchase_price',
'purchase_price_vendor',
'move_ids.product_id',
'move_ids.product_id.qty_available',
'move_ids.state',
'qty_to_deliver'
)
def _compute_actual_margins(self):
""" We want to use the margin based on average inventory valuation when the
sale order line will be completely fulfilled (or has been fulfilled) from stock.
@ -62,8 +88,7 @@ class SaleOrderLine(models.Model):
non_product_lines.margin_percent_actual = 0.0
for line in self - non_product_lines:
stock_missing = line._determine_missing_stock()
if float_is_zero(stock_missing,
precision_rounding=line.product_uom.rounding):
if float_is_zero(stock_missing, precision_rounding=line.product_uom.rounding):
# everything is coming from stock, use inventory valuation
line.purchase_price_actual = line.purchase_price
elif float_compare(line.product_uom_qty, stock_missing,
@ -79,8 +104,7 @@ class SaleOrderLine(models.Model):
/ line.product_uom_qty
line.margin_actual = line.price_subtotal - (
line.purchase_price_actual * line.product_uom_qty)
line.margin_percent_actual = line.price_subtotal \
and line.margin_actual / line.price_subtotal
line.margin_percent_actual = line.price_subtotal and line.margin_actual / line.price_subtotal
def _determine_missing_stock(self) -> float:
""" Compute how much stock is missing to meet an order line's demand. In the