mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-23 20:02:00 +02:00
19.0 vanilla
This commit is contained in:
parent
ba20ce7443
commit
768b70e05e
2357 changed files with 1057103 additions and 712486 deletions
|
|
@ -2,14 +2,13 @@
|
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models, _
|
||||
from odoo.tools import float_is_zero
|
||||
|
||||
|
||||
class MrpWorkorder(models.Model):
|
||||
_inherit = 'mrp.workorder'
|
||||
|
||||
mo_analytic_account_line_id = fields.Many2one('account.analytic.line', copy=False)
|
||||
wc_analytic_account_line_id = fields.Many2one('account.analytic.line', copy=False)
|
||||
mo_analytic_account_line_ids = fields.Many2many('account.analytic.line', 'mrp_workorder_mo_analytic_rel', copy=False)
|
||||
wc_analytic_account_line_ids = fields.Many2many('account.analytic.line', 'mrp_workorder_wc_analytic_rel', copy=False)
|
||||
|
||||
def _compute_duration(self):
|
||||
res = super()._compute_duration()
|
||||
|
|
@ -22,15 +21,15 @@ class MrpWorkorder(models.Model):
|
|||
return res
|
||||
|
||||
def action_cancel(self):
|
||||
(self.mo_analytic_account_line_id | self.wc_analytic_account_line_id).unlink()
|
||||
(self.mo_analytic_account_line_ids | self.wc_analytic_account_line_ids).unlink()
|
||||
return super().action_cancel()
|
||||
|
||||
def _prepare_analytic_line_values(self, account, unit_amount, amount):
|
||||
def _prepare_analytic_line_values(self, account_field_values, amount, unit_amount):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': _("[WC] %s", self.display_name),
|
||||
'amount': amount,
|
||||
'account_id': account.id,
|
||||
**account_field_values,
|
||||
'unit_amount': unit_amount,
|
||||
'product_id': self.product_id.id,
|
||||
'product_uom_id': self.env.ref('uom.product_uom_hour').id,
|
||||
|
|
@ -40,44 +39,20 @@ class MrpWorkorder(models.Model):
|
|||
}
|
||||
|
||||
def _create_or_update_analytic_entry(self):
|
||||
wo_to_link_mo_analytic_line = self.env['mrp.workorder']
|
||||
wo_to_link_wc_analytic_line = self.env['mrp.workorder']
|
||||
mo_analytic_line_vals_list = []
|
||||
wc_analytic_line_vals_list = []
|
||||
for wo in self.filtered(lambda wo: wo.production_id.analytic_account_id or wo.workcenter_id.costs_hour_account_id):
|
||||
for wo in self:
|
||||
if not wo.id:
|
||||
continue
|
||||
hours = wo.duration / 60.0
|
||||
value = -hours * wo.workcenter_id.costs_hour
|
||||
mo_account = wo.production_id.analytic_account_id
|
||||
wc_account = wo.workcenter_id.costs_hour_account_id
|
||||
if mo_account:
|
||||
mo_currency = mo_account.currency_id or wo.company_id.currency_id
|
||||
is_zero = float_is_zero(value, precision_rounding=mo_currency.rounding)
|
||||
if wo.mo_analytic_account_line_id:
|
||||
wo.mo_analytic_account_line_id.write({
|
||||
'unit_amount': hours,
|
||||
'amount': value if not is_zero else 0,
|
||||
})
|
||||
elif not is_zero:
|
||||
wo_to_link_mo_analytic_line += wo
|
||||
mo_analytic_line_vals_list.append(wo._prepare_analytic_line_values(mo_account, hours, value))
|
||||
if wc_account and wc_account != mo_account:
|
||||
wc_currency = wc_account.currency_id or wo.company_id.currency_id
|
||||
is_zero = float_is_zero(value, precision_rounding=wc_currency.rounding)
|
||||
if wo.wc_analytic_account_line_id:
|
||||
wo.wc_analytic_account_line_id.write({
|
||||
'unit_amount': hours,
|
||||
'amount': value if not is_zero else 0,
|
||||
})
|
||||
elif not is_zero:
|
||||
wo_to_link_wc_analytic_line += wo
|
||||
wc_analytic_line_vals_list.append(wo._prepare_analytic_line_values(wc_account, hours, value))
|
||||
analytic_lines = self.env['account.analytic.line'].sudo().create(mo_analytic_line_vals_list + wc_analytic_line_vals_list)
|
||||
mo_analytic_lines, wc_analytic_lines = analytic_lines[:len(wo_to_link_mo_analytic_line)], analytic_lines[len(wo_to_link_mo_analytic_line):]
|
||||
for wo, analytic_line in zip(wo_to_link_mo_analytic_line, mo_analytic_lines):
|
||||
wo.mo_analytic_account_line_id = analytic_line
|
||||
for wo, analytic_line in zip(wo_to_link_wc_analytic_line, wc_analytic_lines):
|
||||
wo.wc_analytic_account_line_id = analytic_line
|
||||
wo._create_or_update_analytic_entry_for_record(value, hours)
|
||||
|
||||
def _create_or_update_analytic_entry_for_record(self, value, hours):
|
||||
self.ensure_one()
|
||||
if self.workcenter_id.analytic_distribution or self.wc_analytic_account_line_ids or self.mo_analytic_account_line_ids:
|
||||
wc_analytic_line_vals = self.env['account.analytic.account']._perform_analytic_distribution(self.workcenter_id.analytic_distribution, value, hours, self.wc_analytic_account_line_ids, self)
|
||||
if wc_analytic_line_vals:
|
||||
self.wc_analytic_account_line_ids += self.env['account.analytic.line'].sudo().create(wc_analytic_line_vals)
|
||||
|
||||
def unlink(self):
|
||||
(self.mo_analytic_account_line_id | self.wc_analytic_account_line_id).unlink()
|
||||
(self.mo_analytic_account_line_ids | self.wc_analytic_account_line_ids).unlink()
|
||||
return super().unlink()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue