Ejemplo n.º 1
0
    def write(self, values):
        lines = False
        changed_lines = False
        if 'product_uom_qty' in values:
            precision = self.env['decimal.precision'].precision_get(
                'Product Unit of Measure')
            lines = self.filtered(
                lambda r: r.state == 'sale' and float_compare(
                    r.product_uom_qty,
                    values['product_uom_qty'],
                    precision_digits=precision) == -1)
            changed_lines = self.filtered(
                lambda r: r.state == 'sale' and float_compare(
                    r.product_uom_qty,
                    values['product_uom_qty'],
                    precision_digits=precision) != 0)
            if changed_lines:
                orders = self.mapped('order_id')
                for order in orders:
                    order_lines = changed_lines.filtered(
                        lambda x: x.order_id == order)
                    msg = ""
                    if any([
                            values['product_uom_qty'] < x.product_uom_qty
                            for x in order_lines
                    ]):
                        msg += "<b>" + _(
                            'The ordered quantity has been decreased. Do not forget to take it into account on your invoices and delivery orders.'
                        ) + '</b>'
                    msg += "<ul>"
                    for line in order_lines:
                        msg += "<li> %s:" % (line.product_id.display_name, )
                        msg += "<br/>" + _(
                            "Ordered Quantity") + ": %s -> %s <br/>" % (
                                line.product_uom_qty,
                                float(values['product_uom_qty']),
                            )
                        if line.product_id.type in ('consu', 'product'):
                            msg += _("Delivered Quantity") + ": %s <br/>" % (
                                line.qty_delivered, )
                        msg += _("Invoiced Quantity") + ": %s <br/>" % (
                            line.qty_invoiced, )
                    msg += "</ul>"
                    order.message_post(body=msg)

        # Prevent writing on a locked SO.
        protected_fields = self._get_protected_fields()
        if 'done' in self.mapped('order_id.state') and any(
                f in values.keys() for f in protected_fields):
            fields = self.env['ir.model.fields'].search([
                ('name', 'in', protected_fields), ('model', '=', self._name)
            ])
            raise UserError(
                _('It is forbidden to modify the following fields in a locked order:\n%s'
                  ) % '\n'.join(fields.mapped('field_description')))

        result = super(SaleOrderLine, self).write(values)
        if lines:
            lines._action_procurement_create()
        return result
Ejemplo n.º 2
0
    def write(self, values):
        if 'display_type' in values and self.filtered(lambda line: line.display_type != values.get('display_type')):
            raise UserError(_("You cannot change the type of a sale order line. Instead you should delete the current line and create a new line of the proper type."))

        if 'product_uom_qty' in values:
            precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
            self.filtered(
                lambda r: r.state == 'sale' and float_compare(r.product_uom_qty, values['product_uom_qty'], precision_digits=precision) != 0)._update_line_quantity(values)

        # Prevent writing on a locked SO.
        protected_fields = self._get_protected_fields()
        if 'done' in self.mapped('state') and any(f in values.keys() for f in protected_fields):
            protected_fields_modified = list(set(protected_fields) & set(values.keys()))
            fields = self.env['ir.model.fields'].search([
                ('name', 'in', protected_fields_modified), ('model', '=', self._name)
            ])
            raise UserError(
                _('It is forbidden to modify the following fields in a locked order:\n%s')
                % '\n'.join(fields.mapped('field_description'))
            )

        return super().write(values)
Ejemplo n.º 3
0
    def write(self, values):
        if 'product_uom_qty' in values:
            precision = self.env['decimal.precision'].precision_get(
                'Product Unit of Measure')
            self.filtered(lambda r: r.state == 'rent' and float_compare(
                r.product_uom_qty,
                values['product_uom_qty'],
                precision_digits=precision) != 0)._update_line_quantity(values)

        # Prevent writing on a locked SO.
        protected_fields = self._get_protected_fields()
        if 'done' in self.mapped('order_id.state') and any(
                f in values.keys() for f in protected_fields):
            protected_fields_modified = list(
                set(protected_fields) & set(values.keys()))
            fields = self.env['ir.model.fields'].search([
                ('name', 'in', protected_fields_modified),
                ('model', '=', self._name)
            ])
            raise UserError(
                _('It is forbidden to modify the following fields in a locked order:\n%s'
                  ) % '\n'.join(fields.mapped('field_description')))
        result = super(odoolocOrderLine, self).write(values)
        return result