109 lines
4.9 KiB
Python
Raw Permalink Normal View History

# -*- 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()