mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
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