109 lines
4.9 KiB
Python
109 lines
4.9 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import api, fields, models
|
||
|
|
||
|
|
||
|
class ResCompany(models.Model):
|
||
|
_inherit = 'res.company'
|
||
|
|
||
|
dropship_subcontractor_pick_type_id = fields.Many2one('stock.picking.type')
|
||
|
|
||
|
def _create_subcontracting_dropshipping_sequence(self):
|
||
|
seq_vals = [{
|
||
|
'name': 'Dropship Subcontractor (%s)' % company.name,
|
||
|
'code': 'mrp.subcontracting.dropshipping',
|
||
|
'company_id': company.id,
|
||
|
'prefix': 'DSC/',
|
||
|
'padding': 5,
|
||
|
} for company in self]
|
||
|
|
||
|
if seq_vals:
|
||
|
self.env['ir.sequence'].create(seq_vals)
|
||
|
|
||
|
def _create_subcontracting_dropshipping_picking_type(self):
|
||
|
pick_type_vals = []
|
||
|
for company in self:
|
||
|
sequence = self.env['ir.sequence'].search([
|
||
|
('code', '=', 'mrp.subcontracting.dropshipping'),
|
||
|
('company_id', '=', company.id),
|
||
|
])
|
||
|
pick_type_vals.append({
|
||
|
'name': 'Dropship Subcontractor',
|
||
|
'company_id': company.id,
|
||
|
'warehouse_id': False,
|
||
|
'sequence_id': sequence.id,
|
||
|
'code': 'incoming',
|
||
|
'default_location_src_id': self.env.ref('stock.stock_location_suppliers').id,
|
||
|
'default_location_dest_id': company.subcontracting_location_id.id,
|
||
|
'sequence_code': 'DSC',
|
||
|
'use_existing_lots': False,
|
||
|
})
|
||
|
if pick_type_vals:
|
||
|
pick_type_ids = self.env['stock.picking.type'].create(pick_type_vals)
|
||
|
for pick_type in pick_type_ids:
|
||
|
pick_type.company_id.dropship_subcontractor_pick_type_id = pick_type.id
|
||
|
|
||
|
def _create_subcontracting_dropshipping_rules(self):
|
||
|
route = self.env.ref('mrp_subcontracting_dropshipping.route_subcontracting_dropshipping')
|
||
|
supplier_location = self.env.ref('stock.stock_location_suppliers')
|
||
|
vals = []
|
||
|
for company in self:
|
||
|
subcontracting_location = company.subcontracting_location_id
|
||
|
dropship_picking_type = self.env['stock.picking.type'].search([
|
||
|
('company_id', '=', company.id),
|
||
|
('default_location_src_id.usage', '=', 'supplier'),
|
||
|
('default_location_dest_id', '=', subcontracting_location.id),
|
||
|
], limit=1, order='sequence')
|
||
|
if dropship_picking_type:
|
||
|
vals.append({
|
||
|
'name': '%s → %s' % (supplier_location.name, subcontracting_location.name),
|
||
|
'action': 'buy',
|
||
|
'location_dest_id': subcontracting_location.id,
|
||
|
'location_src_id': supplier_location.id,
|
||
|
'procure_method': 'make_to_stock',
|
||
|
'route_id': route.id,
|
||
|
'picking_type_id': dropship_picking_type.id,
|
||
|
'company_id': company.id,
|
||
|
})
|
||
|
if vals:
|
||
|
self.env['stock.rule'].create(vals)
|
||
|
|
||
|
@api.model
|
||
|
def _create_missing_subcontracting_dropshipping_rules(self):
|
||
|
route = self.env.ref('mrp_subcontracting_dropshipping.route_subcontracting_dropshipping')
|
||
|
company_ids = self.env['res.company'].search([])
|
||
|
company_has_rules = self.env['stock.rule'].search([('route_id', '=', route.id)]).mapped('company_id')
|
||
|
company_todo_rules = company_ids - company_has_rules
|
||
|
company_todo_rules._create_subcontracting_dropshipping_rules()
|
||
|
|
||
|
@api.model
|
||
|
def _create_missing_subcontracting_dropshipping_sequence(self):
|
||
|
company_ids = self.env['res.company'].search([])
|
||
|
company_has_seq = self.env['ir.sequence'].search([('code', '=', 'mrp.subcontracting.dropshipping')]).mapped('company_id')
|
||
|
company_todo_sequence = company_ids - company_has_seq
|
||
|
company_todo_sequence._create_subcontracting_dropshipping_sequence()
|
||
|
|
||
|
@api.model
|
||
|
def _create_missing_subcontracting_dropshipping_picking_type(self):
|
||
|
company_ids = self.env['res.company'].search([])
|
||
|
company_has_dropship_subcontractor_picking_type = self.env['stock.picking.type'].search([
|
||
|
('default_location_src_id.usage', '=', 'supplier'),
|
||
|
('default_location_dest_id', 'in', company_ids.subcontracting_location_id.ids),
|
||
|
]).mapped('company_id')
|
||
|
company_todo_picking_type = company_ids - company_has_dropship_subcontractor_picking_type
|
||
|
company_todo_picking_type._create_subcontracting_dropshipping_picking_type()
|
||
|
|
||
|
def _create_per_company_sequences(self):
|
||
|
super()._create_per_company_sequences()
|
||
|
self._create_subcontracting_dropshipping_sequence()
|
||
|
|
||
|
def _create_per_company_rules(self):
|
||
|
res = super()._create_per_company_rules()
|
||
|
self._create_subcontracting_dropshipping_rules()
|
||
|
return res
|
||
|
|
||
|
def _create_per_company_picking_types(self):
|
||
|
super()._create_per_company_picking_types()
|
||
|
self._create_subcontracting_dropshipping_picking_type()
|