97 lines
4.8 KiB
Python
97 lines
4.8 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, api, _
|
||
|
|
||
|
|
||
|
class StockPicking(models.Model):
|
||
|
_inherit = "stock.picking"
|
||
|
|
||
|
l10n_it_transport_reason = fields.Selection([('sale', 'Sale'),
|
||
|
('outsourcing', 'Outsourcing'),
|
||
|
('evaluation', 'Evaluation'),
|
||
|
('gift', 'Gift'),
|
||
|
('transfer', 'Transfer'),
|
||
|
('substitution', 'Returned goods'),
|
||
|
('attemped_sale', 'Attempted Sale'),
|
||
|
('loaned_use', 'Loaned for Use'),
|
||
|
('repair', 'Repair')], default="sale", tracking=True, string='Transport Reason')
|
||
|
l10n_it_transport_method = fields.Selection([('sender', 'Sender'), ('recipient', 'Recipient'), ('courier', 'Courier service')],
|
||
|
default="sender", string='Transport Method')
|
||
|
l10n_it_transport_method_details = fields.Char('Transport Note')
|
||
|
l10n_it_parcels = fields.Integer(string="Parcels", default=1)
|
||
|
l10n_it_ddt_number = fields.Char('DDT Number', readonly=True)
|
||
|
l10n_it_show_print_ddt_button = fields.Boolean(compute="_compute_l10n_it_show_print_ddt_button")
|
||
|
|
||
|
@api.depends('country_code',
|
||
|
'picking_type_code',
|
||
|
'state',
|
||
|
'is_locked',
|
||
|
'move_ids',
|
||
|
'location_id',
|
||
|
'location_dest_id')
|
||
|
def _compute_l10n_it_show_print_ddt_button(self):
|
||
|
# Enable printing the DDT for done outgoing shipments
|
||
|
# or dropshipping (picking going from supplier to customer)
|
||
|
for picking in self:
|
||
|
picking.l10n_it_show_print_ddt_button = (
|
||
|
picking.country_code == 'IT'
|
||
|
and picking.state == 'done'
|
||
|
and picking.is_locked
|
||
|
and (picking.picking_type_code == 'outgoing'
|
||
|
or (
|
||
|
picking.move_ids_without_package
|
||
|
and picking.move_ids_without_package[0].partner_id
|
||
|
and picking.location_id.usage == 'supplier'
|
||
|
and picking.location_dest_id.usage == 'customer'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
|
||
|
def _action_done(self):
|
||
|
super(StockPicking, self)._action_done()
|
||
|
for picking in self.filtered(lambda p: p.picking_type_id.l10n_it_ddt_sequence_id):
|
||
|
picking.l10n_it_ddt_number = picking.picking_type_id.l10n_it_ddt_sequence_id.next_by_id()
|
||
|
|
||
|
|
||
|
class StockPickingType(models.Model):
|
||
|
_inherit = 'stock.picking.type'
|
||
|
|
||
|
l10n_it_ddt_sequence_id = fields.Many2one('ir.sequence')
|
||
|
|
||
|
def _get_dtt_ir_seq_vals(self, warehouse_id, sequence_code):
|
||
|
if warehouse_id:
|
||
|
wh = self.env['stock.warehouse'].browse(warehouse_id)
|
||
|
ir_seq_name = _('%(warehouse)s Sequence %(code)s', warehouse=wh.name, code=sequence_code)
|
||
|
ir_seq_prefix = wh.code + '/' + sequence_code + '/DDT'
|
||
|
else:
|
||
|
ir_seq_name = _('Sequence %(code)s', code=sequence_code)
|
||
|
ir_seq_prefix = sequence_code + '/DDT'
|
||
|
return ir_seq_name, ir_seq_prefix
|
||
|
|
||
|
@api.model_create_multi
|
||
|
def create(self, vals_list):
|
||
|
for vals in vals_list:
|
||
|
company = self.env['res.company'].browse(vals.get('company_id', False)) or self.env.company
|
||
|
if company.country_id.code == 'IT' and vals.get('code') == 'outgoing' and ('l10n_it_ddt_sequence_id' not in vals or not vals['l10n_it_ddt_sequence_id']):
|
||
|
ir_seq_name, ir_seq_prefix = self._get_dtt_ir_seq_vals(vals.get('warehouse_id'), vals['sequence_code'])
|
||
|
vals['l10n_it_ddt_sequence_id'] = self.env['ir.sequence'].create({
|
||
|
'name': ir_seq_name,
|
||
|
'prefix': ir_seq_prefix,
|
||
|
'padding': 5,
|
||
|
'company_id': company.id,
|
||
|
'implementation': 'no_gap',
|
||
|
}).id
|
||
|
return super().create(vals_list)
|
||
|
|
||
|
def write(self, vals):
|
||
|
if 'sequence_code' in vals:
|
||
|
for picking_type in self.filtered(lambda p: p.l10n_it_ddt_sequence_id):
|
||
|
warehouse = picking_type.warehouse_id.id if 'warehouse_id' not in vals else vals['warehouse_ids']
|
||
|
ir_seq_name, ir_seq_prefix = self._get_dtt_ir_seq_vals(warehouse, vals['sequence_code'])
|
||
|
picking_type.l10n_it_ddt_sequence_id.write({
|
||
|
'name': ir_seq_name,
|
||
|
'prefix': ir_seq_prefix,
|
||
|
})
|
||
|
return super(StockPickingType, self).write(vals)
|