Merge PR #1116 into 14.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2023-11-04 12:23:33 +00:00
11 changed files with 317 additions and 0 deletions

View 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

View File

@@ -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,
}

View File

@@ -0,0 +1 @@
from . import res_partner

View File

@@ -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}

View File

@@ -0,0 +1 @@
from . import test_create_subcontractor_partner_location

View File

@@ -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),
)

View File

@@ -0,0 +1 @@
../../../../mrp_subcontracting_purchase_partner_management

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)