104 lines
3.4 KiB
Python
104 lines
3.4 KiB
Python
from odoo import fields, models, api, _, Command
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tools import float_round
|
|
import re
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
valid_equipment_ids = fields.One2many(
|
|
comodel_name="bemade_fsm.equipment",
|
|
related="partner_id.owned_equipment_ids"
|
|
)
|
|
|
|
default_equipment_ids = fields.Many2many(
|
|
comodel_name="bemade_fsm.equipment",
|
|
string="Default Equipment to Service",
|
|
help="The default equipment to service for new sale order lines.",
|
|
compute="_compute_default_equipment",
|
|
inverse="_inverse_default_equipment",
|
|
store=True
|
|
)
|
|
|
|
summary_equipment_ids = fields.Many2many(
|
|
comodel_name="bemade_fsm.equipment",
|
|
string="Equipment Being Serviced",
|
|
compute="_compute_summary_equipment_ids")
|
|
|
|
site_contacts = fields.Many2many(
|
|
comodel_name='res.partner',
|
|
relation="sale_order_site_contacts_rel",
|
|
compute="_compute_default_contacts",
|
|
inverse="_inverse_default_contacts",
|
|
string='Site Contacts',
|
|
store=True
|
|
)
|
|
|
|
work_order_contacts = fields.Many2many(
|
|
comodel_name='res.partner',
|
|
relation='sale_order_work_order_contacts_rel',
|
|
compute='_compute_default_contacts',
|
|
inverse='_inverse_default_contacts',
|
|
string='Work Order Recipients',
|
|
store=True
|
|
)
|
|
|
|
visit_ids = fields.One2many(
|
|
comodel_name='bemade_fsm.visit',
|
|
inverse_name="sale_order_id",
|
|
readonly=False
|
|
)
|
|
|
|
@api.depends('order_line.task_id')
|
|
def get_relevant_order_lines(self, task_id):
|
|
self.ensure_one()
|
|
linked_lines = self.order_line.filtered(lambda l: l.task_id == task_id
|
|
or l == task_id.visit_id.so_section_id)
|
|
visit_lines = linked_lines.filtered(lambda l: l.visit_id)
|
|
for line in visit_lines:
|
|
linked_lines |= line.get_section_line_ids()
|
|
return linked_lines
|
|
|
|
@api.depends('order_line.equipment_ids')
|
|
def _compute_summary_equipment_ids(self):
|
|
for rec in self:
|
|
rec.summary_equipment_ids = rec.order_line.mapped('equipment_ids')
|
|
|
|
@api.onchange('partner_shipping_id')
|
|
def _onchange_partner_shipping_id(self):
|
|
super()._onchange_partner_shipping_id()
|
|
self._compute_default_equipment()
|
|
self._compute_default_contacts()
|
|
|
|
@api.depends('partner_shipping_id')
|
|
def _compute_default_contacts(self):
|
|
for rec in self:
|
|
rec.site_contacts = rec.partner_shipping_id.site_contacts
|
|
rec.work_order_contacts = rec.partner_shipping_id.work_order_contacts
|
|
|
|
def _inverse_default_contacts(self):
|
|
pass
|
|
|
|
@api.depends(
|
|
'partner_id',
|
|
'partner_shipping_id',
|
|
'partner_shipping_id.equipment_ids',
|
|
'partner_id.owned_equipment_ids'
|
|
)
|
|
def _compute_default_equipment(self):
|
|
for rec in self:
|
|
if rec.partner_shipping_id.equipment_ids:
|
|
ids = rec.partner_shipping_id.equipment_ids
|
|
else:
|
|
ids = rec.partner_id.owned_equipment_ids
|
|
rec.default_equipment_ids = ids if len(ids) < 4 else False
|
|
|
|
def _inverse_default_equipment(self):
|
|
pass
|
|
|
|
def copy(self, default=None):
|
|
rec = super().copy(default)
|
|
rec.visit_ids = [Command.set(rec.order_line.visit_ids.ids)]
|
|
return rec
|
|
|