mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[ADD] mrp_subcontracting_purchase_partner_management: Module added.
This commit is contained in:
19
mrp_subcontracting_purchase_partner_management/__init__.py
Normal file
19
mrp_subcontracting_purchase_partner_management/__init__.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import unittest
|
||||||
|
|
||||||
|
from odoo.addons.mrp_subcontracting_partner_management.tests.test_create_subcontractor_partner_location import ( # noqa
|
||||||
|
TestSubcontractedPartner,
|
||||||
|
)
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skip
|
||||||
|
def void(self):
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
TestSubcontractedPartner.test_change_subcontractor_location = void
|
||||||
|
TestSubcontractedPartner.test_check_countof_rules = void
|
||||||
|
TestSubcontractedPartner.test_is_subcontractor_partner_aсtive_switch_on = void
|
||||||
|
TestSubcontractedPartner.test_is_subcontractor_partner_first_time = void
|
||||||
|
TestSubcontractedPartner.test_is_subcontractor_partner_switch_on = void
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "Subcontracting Purchase Partner Management",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"summary": "Subcontracting Purchase Partner Management",
|
||||||
|
"author": "Cetmix, Odoo Community Association (OCA)",
|
||||||
|
"license": "LGPL-3",
|
||||||
|
"category": "Inventory",
|
||||||
|
"website": "https://github.com/OCA/manufacture",
|
||||||
|
"depends": ["mrp_subcontracting_partner_management", "mrp_subcontracting_purchase"],
|
||||||
|
"maintainers": ["CetmixGitDrone", "geomer198"],
|
||||||
|
"external_dependencies": {},
|
||||||
|
"demo": [],
|
||||||
|
"data": [],
|
||||||
|
"qweb": [],
|
||||||
|
"installable": True,
|
||||||
|
"application": False,
|
||||||
|
"auto_install": True,
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import res_partner
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
from odoo import api, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResPartner(models.Model):
|
||||||
|
_inherit = "res.partner"
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def get_data_struct(self):
|
||||||
|
result = super(ResPartner, self).get_data_struct()
|
||||||
|
# Remove preparing `partner_picking_type_id` field value
|
||||||
|
result.pop("partner_picking_type_id", False)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def _update_subcontractor_values_name(self, name):
|
||||||
|
# Update values without functional dependencies on partner_picking_type_id field
|
||||||
|
partners = self.filtered(lambda p: p.is_subcontractor_partner)
|
||||||
|
field_names = [*self.get_data_struct(), "property_stock_subcontractor"]
|
||||||
|
for field in field_names:
|
||||||
|
records = partners.mapped(field)
|
||||||
|
records.write({"name": name})
|
||||||
|
self._update_name_translation(records, name)
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
partners = super(ResPartner, self).create(vals_list)
|
||||||
|
for partner in partners.filtered(
|
||||||
|
lambda p: p.is_subcontractor_partner and p.is_company
|
||||||
|
):
|
||||||
|
partner.partner_resupply_rule_id.write({"partner_address_id": partner.id})
|
||||||
|
return partners
|
||||||
|
|
||||||
|
def _create_route_rule_for_subcontracting(self, vals):
|
||||||
|
# Overide this function
|
||||||
|
location_id = self._get_location_id_for_record(vals)
|
||||||
|
picking_type_id = (
|
||||||
|
self.env["stock.picking.type"]
|
||||||
|
.with_context(active_test=False)
|
||||||
|
.search(
|
||||||
|
[
|
||||||
|
("name", "=", "Dropship"),
|
||||||
|
("sequence_code", "=", "DS"),
|
||||||
|
("company_id", "=", self.env.company.id),
|
||||||
|
],
|
||||||
|
limit=1,
|
||||||
|
)
|
||||||
|
.id
|
||||||
|
)
|
||||||
|
route = self.env.ref(
|
||||||
|
"mrp_subcontracting_purchase.route_subcontracting_dropshipping",
|
||||||
|
raise_if_not_found=False,
|
||||||
|
)
|
||||||
|
buy_rule = self.env["stock.rule"].create(
|
||||||
|
{
|
||||||
|
"name": "Vendors → %s"
|
||||||
|
% self._context.get("partner_name", self._compose_entity_name()),
|
||||||
|
"action": "buy",
|
||||||
|
"location_id": location_id,
|
||||||
|
"route_id": route.id,
|
||||||
|
"picking_type_id": picking_type_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return {"partner_buy_rule_id": buy_rule.id}
|
||||||
|
|
||||||
|
def _create_route_rule_for_subcontracting_resupply(self, vals):
|
||||||
|
prop = self.env["ir.property"]._get(
|
||||||
|
"property_stock_production", "product.template"
|
||||||
|
)
|
||||||
|
route = self.env.ref(
|
||||||
|
"mrp_subcontracting_purchase.route_subcontracting_dropshipping",
|
||||||
|
raise_if_not_found=False,
|
||||||
|
)
|
||||||
|
picking_type_id = (
|
||||||
|
self.env["stock.picking.type"]
|
||||||
|
.with_context(active_test=False)
|
||||||
|
.search(
|
||||||
|
[("name", "=", "Subcontracting"), ("sequence_code", "=", "SBC")],
|
||||||
|
limit=1,
|
||||||
|
)
|
||||||
|
.id
|
||||||
|
)
|
||||||
|
rule = self.env["stock.rule"].create(
|
||||||
|
{
|
||||||
|
"name": "%s - Production"
|
||||||
|
% self._context.get("partner_name", self._compose_entity_name()),
|
||||||
|
"action": "pull",
|
||||||
|
"picking_type_id": picking_type_id,
|
||||||
|
"location_src_id": self._get_location_id_for_record(vals),
|
||||||
|
"location_id": prop.id,
|
||||||
|
"route_id": route.id,
|
||||||
|
"partner_address_id": self._origin.id,
|
||||||
|
"procure_method": "make_to_order",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return {"partner_resupply_rule_id": rule.id}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import test_create_subcontractor_partner_location
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
import types
|
||||||
|
|
||||||
|
from odoo.addons.mrp_subcontracting_partner_management.tests.test_create_subcontractor_partner_location import ( # noqa
|
||||||
|
TestSubcontractedPartner,
|
||||||
|
tagged,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .. import void
|
||||||
|
|
||||||
|
|
||||||
|
@tagged("post_install", "-at_install")
|
||||||
|
class TestSubcontractedPartnerPatch(TestSubcontractedPartner):
|
||||||
|
def test_void(self):
|
||||||
|
self.assertIsInstance(
|
||||||
|
void(None), types.FunctionType, msg="Type must be Function"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_first_time(self):
|
||||||
|
self.partner_id.update(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = self.partner_id.subcontracted_created_location_id
|
||||||
|
self.assertTrue(location, "Location is not created")
|
||||||
|
self.assertTrue(location.active, "Location must be active")
|
||||||
|
|
||||||
|
partner_buy_rule = self.partner_id.partner_buy_rule_id
|
||||||
|
self.assertTrue(partner_buy_rule, "Partner Buy rule is not created")
|
||||||
|
self.assertTrue(partner_buy_rule.active, "Partner Buy rule must be active")
|
||||||
|
|
||||||
|
partner_resupply_rule = self.partner_id.partner_resupply_rule_id
|
||||||
|
self.assertTrue(partner_resupply_rule, "Partner Resupply rule is not created")
|
||||||
|
self.assertTrue(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_switch_off(self):
|
||||||
|
self.partner_id.write(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.partner_id.update(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = self.partner_id.subcontracted_created_location_id
|
||||||
|
self.assertFalse(location.active, "Location must be not active")
|
||||||
|
|
||||||
|
partner_buy_rule = self.partner_id.partner_buy_rule_id
|
||||||
|
self.assertFalse(partner_buy_rule.active, "Partner Buy rule must be not active")
|
||||||
|
|
||||||
|
partner_resupply_rule = self.partner_id.partner_resupply_rule_id
|
||||||
|
self.assertFalse(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be not active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_switch_on(self):
|
||||||
|
self.partner_id.update(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = self.partner_id.subcontracted_created_location_id
|
||||||
|
self.assertTrue(location.active, "Location must be active")
|
||||||
|
|
||||||
|
partner_buy_rule = self.partner_id.partner_buy_rule_id
|
||||||
|
self.assertTrue(partner_buy_rule.active, "Partner Buy rule must be active")
|
||||||
|
|
||||||
|
partner_resupply_rule = self.partner_id.partner_resupply_rule_id
|
||||||
|
self.assertTrue(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_active_switch_off(self):
|
||||||
|
self.partner_id.write(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.partner_id.update(
|
||||||
|
{
|
||||||
|
"active": False,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = self.partner_id.subcontracted_created_location_id
|
||||||
|
self.assertFalse(location.active, "Location must be not active")
|
||||||
|
|
||||||
|
partner_buy_rule = self.partner_id.partner_buy_rule_id
|
||||||
|
self.assertFalse(partner_buy_rule.active, "Partner Buy rule must be not active")
|
||||||
|
|
||||||
|
partner_resupply_rule = self.partner_id.partner_resupply_rule_id
|
||||||
|
self.assertFalse(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be not active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_aсtive_switch_on(self):
|
||||||
|
self.partner_id.write(
|
||||||
|
{
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.partner_id.write(
|
||||||
|
{
|
||||||
|
"active": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = self.partner_id.subcontracted_created_location_id
|
||||||
|
self.assertTrue(location.active, "Location must be active")
|
||||||
|
|
||||||
|
partner_buy_rule = self.partner_id.partner_buy_rule_id
|
||||||
|
self.assertTrue(partner_buy_rule.active, "Partner Buy rule must be active")
|
||||||
|
|
||||||
|
partner_resupply_rule = self.partner_id.partner_resupply_rule_id
|
||||||
|
self.assertTrue(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_is_subcontractor_partner_delete(self):
|
||||||
|
partner_id = self.partner_obj.create(
|
||||||
|
{
|
||||||
|
"name": "Test partner",
|
||||||
|
"is_company": True,
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
location = partner_id.subcontracted_created_location_id
|
||||||
|
partner_buy_rule = partner_id.partner_buy_rule_id
|
||||||
|
partner_resupply_rule = partner_id.partner_resupply_rule_id
|
||||||
|
|
||||||
|
partner_id.unlink()
|
||||||
|
|
||||||
|
self.assertFalse(location.active, "Location must be not active")
|
||||||
|
self.assertFalse(partner_buy_rule.active, "Partner Buy rule must be not active")
|
||||||
|
self.assertFalse(
|
||||||
|
partner_resupply_rule.active, "Partner Resupply rule must be not active"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_change_subcontractor_location(self):
|
||||||
|
expected_text = "Test partner"
|
||||||
|
partner = self.partner_obj.create(
|
||||||
|
{
|
||||||
|
"name": "Test partner",
|
||||||
|
"is_company": True,
|
||||||
|
"is_subcontractor_partner": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
location = partner.property_stock_subcontractor
|
||||||
|
self.assertEqual(
|
||||||
|
location.name,
|
||||||
|
expected_text,
|
||||||
|
msg="Location name must be equal to {}".format(expected_text),
|
||||||
|
)
|
||||||
|
|
||||||
|
fields = [
|
||||||
|
"subcontracted_created_location_id",
|
||||||
|
"partner_buy_rule_id",
|
||||||
|
"partner_resupply_rule_id",
|
||||||
|
"property_stock_subcontractor",
|
||||||
|
]
|
||||||
|
expected_text = "Test partner 1"
|
||||||
|
partner.name = expected_text
|
||||||
|
for field in fields:
|
||||||
|
location = getattr(partner, field)
|
||||||
|
self.assertEqual(
|
||||||
|
location.name,
|
||||||
|
expected_text,
|
||||||
|
msg="Record name must be equal to {}".format(expected_text),
|
||||||
|
)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../../../mrp_subcontracting_purchase_partner_management
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user