open-synergy/opensynid-fleet

View on GitHub
fleet_work_order_cargo_from_picking/models/fleet_work_order.py

Summary

Maintainability
B
5 hrs
Test Coverage
# Copyright 2018 OpenSynergy Indonesia
# Copyright 2020 PT. Simetri Sinergi Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import api, fields, models


class FleetWorkOrder(models.Model):
    _inherit = "fleet.work.order"

    @api.multi
    @api.depends("type_id")
    def _compute_allowed_picking_type_ids(self):
        for wo in self:
            wo.allowed_picking_type_ids = []
            if wo.type_id:
                wo.allowed_picking_type_ids = wo.type_id.picking_type_ids.ids

    @api.multi
    @api.depends("type_id")
    def _compute_allowed_partner_ids(self):
        for wo in self:
            wo.allowed_partner_ids = []
            if wo.type_id:
                wo.allowed_partner_ids = wo.type_id.partner_ids.ids

    @api.multi
    @api.depends("type_id")
    def _compute_restrict_partner_cargo(self):
        for wo in self:
            wo.restrict_partner_cargo = False
            if wo.type_id:
                wo.restrict_partner_cargo = wo.type_id.restrict_partner_cargo

    @api.depends(
        "vehicle_id",
        "vehicle_id.loading_space",
        "vehicle_id.load_capacity",
        "picking_ids",
        "picking_ids.move_lines",
        "picking_ids.move_lines.product_id",
        "picking_ids.move_lines.product_qty",
    )
    def _compute_picking(self):
        for order in self:
            picking_volume = (
                picking_weight
            ) = picking_weight_diff = picking_volume_diff = 0.0
            for picking in order.picking_ids:
                for move in picking.move_lines:
                    picking_volume += move.product_id.volume * move.product_qty
                    picking_weight += move.product_id.weight * move.product_qty
            picking_volume_diff = order.loading_space - picking_volume
            picking_weight_diff = order.load_capacity - picking_weight
            order.picking_volume = picking_volume
            order.picking_weight = picking_weight
            order.picking_volume_diff = picking_volume_diff
            order.picking_weight_diff = picking_weight_diff

    picking_volume = fields.Float(
        string="Picking Volume",
        compute="_compute_picking",
        store=True,
    )
    picking_weight = fields.Float(
        string="Picking Weight",
        compute="_compute_picking",
        store=True,
    )
    picking_weight_diff = fields.Float(
        string="Picking Weight Diff",
        compute="_compute_picking",
        store=True,
    )
    picking_volume_diff = fields.Float(
        string="Picking Volume Diff",
        compute="_compute_picking",
        store=True,
    )

    @api.depends(
        "loading_space",
        "load_capacity",
        "picking_volume",
        "picking_weight",
    )
    def _compute_picking_progress(self):
        for order in self:
            progress_volume = progress_weight = 0.0
            try:
                progress_volume = (order.picking_volume / order.loading_space) * 100
            except ZeroDivisionError:
                progress_volume = 0.0
            try:
                progress_weight = (order.picking_weight / order.load_capacity) * 100
            except ZeroDivisionError:
                progress_weight = 0.0
            order.picking_volume_progress = progress_volume
            order.picking_weight_progress = progress_weight

    picking_volume_progress = fields.Float(
        string="Progress Volume",
        compute="_compute_picking_progress",
        store=True,
    )
    picking_weight_progress = fields.Float(
        string="Progress Weight",
        compute="_compute_picking_progress",
        store=True,
    )
    picking_ids = fields.One2many(
        string="Pickings",
        comodel_name="stock.picking",
        inverse_name="work_order_id",
        copy=False,
    )
    allowed_picking_type_ids = fields.Many2many(
        string="Allowed Picking Types",
        comodel_name="stock.picking.type",
        compute="_compute_allowed_picking_type_ids",
        store=False,
    )
    restrict_partner_cargo = fields.Boolean(
        string="Restrict Partner Cargo",
        compute="_compute_restrict_partner_cargo",
        store=False,
    )
    allowed_partner_ids = fields.Many2many(
        string="Allowed Cargo Partner",
        comodel_name="res.partner",
        compute="_compute_allowed_partner_ids",
        store=False,
    )
    picking_summary_ids = fields.One2many(
        string="Picking Summary",
        comodel_name="fleet.work.order.picking_summary",
        inverse_name="work_order_id",
    )