mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-16 03:29:16 +00:00
Merge branch 'version-14-hotfix' into mergify/bp/version-14-hotfix/pr-32986
This commit is contained in:
@@ -2071,6 +2071,8 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None):
|
|||||||
if source.doctype == "Purchase Order Item" and target.doctype == "Sales Order Item":
|
if source.doctype == "Purchase Order Item" and target.doctype == "Sales Order Item":
|
||||||
target.purchase_order = source.parent
|
target.purchase_order = source.parent
|
||||||
target.purchase_order_item = source.name
|
target.purchase_order_item = source.name
|
||||||
|
target.material_request = source.material_request
|
||||||
|
target.material_request_item = source.material_request_item
|
||||||
|
|
||||||
if (
|
if (
|
||||||
source.get("purchase_order")
|
source.get("purchase_order")
|
||||||
|
|||||||
@@ -230,9 +230,17 @@ class TestAsset(AssetSetup):
|
|||||||
self.assertTrue(asset.journal_entry_for_scrap)
|
self.assertTrue(asset.journal_entry_for_scrap)
|
||||||
|
|
||||||
expected_gle = (
|
expected_gle = (
|
||||||
("_Test Accumulated Depreciations - _TC", 18000.0 + pro_rata_amount, 0.0),
|
(
|
||||||
|
"_Test Accumulated Depreciations - _TC",
|
||||||
|
flt(18000.0 + pro_rata_amount, asset.precision("gross_purchase_amount")),
|
||||||
|
0.0,
|
||||||
|
),
|
||||||
("_Test Fixed Asset - _TC", 0.0, 100000.0),
|
("_Test Fixed Asset - _TC", 0.0, 100000.0),
|
||||||
("_Test Gain/Loss on Asset Disposal - _TC", 82000.0 - pro_rata_amount, 0.0),
|
(
|
||||||
|
"_Test Gain/Loss on Asset Disposal - _TC",
|
||||||
|
flt(82000.0 - pro_rata_amount, asset.precision("gross_purchase_amount")),
|
||||||
|
0.0,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
gle = frappe.db.sql(
|
gle = frappe.db.sql(
|
||||||
@@ -288,9 +296,17 @@ class TestAsset(AssetSetup):
|
|||||||
pro_rata_amount = flt(pro_rata_amount, asset.precision("gross_purchase_amount"))
|
pro_rata_amount = flt(pro_rata_amount, asset.precision("gross_purchase_amount"))
|
||||||
|
|
||||||
expected_gle = (
|
expected_gle = (
|
||||||
("_Test Accumulated Depreciations - _TC", 18000.0 + pro_rata_amount, 0.0),
|
(
|
||||||
|
"_Test Accumulated Depreciations - _TC",
|
||||||
|
flt(18000.0 + pro_rata_amount, asset.precision("gross_purchase_amount")),
|
||||||
|
0.0,
|
||||||
|
),
|
||||||
("_Test Fixed Asset - _TC", 0.0, 100000.0),
|
("_Test Fixed Asset - _TC", 0.0, 100000.0),
|
||||||
("_Test Gain/Loss on Asset Disposal - _TC", 57000.0 - pro_rata_amount, 0.0),
|
(
|
||||||
|
"_Test Gain/Loss on Asset Disposal - _TC",
|
||||||
|
flt(57000.0 - pro_rata_amount, asset.precision("gross_purchase_amount")),
|
||||||
|
0.0,
|
||||||
|
),
|
||||||
("Debtors - _TC", 25000.0, 0.0),
|
("Debtors - _TC", 25000.0, 0.0),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -833,6 +833,10 @@ class TestPurchaseOrder(FrappeTestCase):
|
|||||||
prepare_data_for_internal_transfer()
|
prepare_data_for_internal_transfer()
|
||||||
supplier = "_Test Internal Supplier 2"
|
supplier = "_Test Internal Supplier 2"
|
||||||
|
|
||||||
|
mr = make_material_request(
|
||||||
|
qty=2, company="_Test Company with perpetual inventory", warehouse="Stores - TCP1"
|
||||||
|
)
|
||||||
|
|
||||||
po = create_purchase_order(
|
po = create_purchase_order(
|
||||||
company="_Test Company with perpetual inventory",
|
company="_Test Company with perpetual inventory",
|
||||||
supplier=supplier,
|
supplier=supplier,
|
||||||
@@ -840,6 +844,8 @@ class TestPurchaseOrder(FrappeTestCase):
|
|||||||
from_warehouse="_Test Internal Warehouse New 1 - TCP1",
|
from_warehouse="_Test Internal Warehouse New 1 - TCP1",
|
||||||
qty=2,
|
qty=2,
|
||||||
rate=1,
|
rate=1,
|
||||||
|
material_request=mr.name,
|
||||||
|
material_request_item=mr.items[0].name,
|
||||||
)
|
)
|
||||||
|
|
||||||
so = make_inter_company_sales_order(po.name)
|
so = make_inter_company_sales_order(po.name)
|
||||||
@@ -875,9 +881,11 @@ class TestPurchaseOrder(FrappeTestCase):
|
|||||||
self.assertTrue(pi.items[0].purchase_order)
|
self.assertTrue(pi.items[0].purchase_order)
|
||||||
self.assertTrue(pi.items[0].po_detail)
|
self.assertTrue(pi.items[0].po_detail)
|
||||||
pi.submit()
|
pi.submit()
|
||||||
|
mr.reload()
|
||||||
|
|
||||||
po.load_from_db()
|
po.load_from_db()
|
||||||
self.assertEqual(po.status, "Completed")
|
self.assertEqual(po.status, "Completed")
|
||||||
|
self.assertEqual(mr.status, "Received")
|
||||||
|
|
||||||
|
|
||||||
def prepare_data_for_internal_transfer():
|
def prepare_data_for_internal_transfer():
|
||||||
@@ -979,6 +987,8 @@ def create_purchase_order(**args):
|
|||||||
"schedule_date": add_days(nowdate(), 1),
|
"schedule_date": add_days(nowdate(), 1),
|
||||||
"include_exploded_items": args.get("include_exploded_items", 1),
|
"include_exploded_items": args.get("include_exploded_items", 1),
|
||||||
"against_blanket_order": args.against_blanket_order,
|
"against_blanket_order": args.against_blanket_order,
|
||||||
|
"material_request": args.material_request,
|
||||||
|
"material_request_item": args.material_request_item,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -159,6 +159,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.item-img {
|
||||||
|
@extend .image;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
> .item-detail {
|
> .item-detail {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -95,8 +95,10 @@
|
|||||||
"item_tax_rate",
|
"item_tax_rate",
|
||||||
"transaction_date",
|
"transaction_date",
|
||||||
"inter_transfer_reference_section",
|
"inter_transfer_reference_section",
|
||||||
|
"material_request",
|
||||||
"purchase_order",
|
"purchase_order",
|
||||||
"column_break_89",
|
"column_break_89",
|
||||||
|
"material_request_item",
|
||||||
"purchase_order_item"
|
"purchase_order_item"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -847,12 +849,23 @@
|
|||||||
"label": "quotation_item",
|
"label": "quotation_item",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Material Request",
|
||||||
|
"options": "Material Request"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Material Request Item"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-11-10 18:20:30.137455",
|
"modified": "2022-11-18 11:39:01.741665",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Sales Order Item",
|
"name": "Sales Order Item",
|
||||||
|
|||||||
@@ -103,9 +103,9 @@ erpnext.PointOfSale.ItemSelector = class {
|
|||||||
<div class="flex items-center justify-center h-32 border-b-grey text-6xl text-grey-100">
|
<div class="flex items-center justify-center h-32 border-b-grey text-6xl text-grey-100">
|
||||||
<img
|
<img
|
||||||
onerror="cur_pos.item_selector.handle_broken_image(this)"
|
onerror="cur_pos.item_selector.handle_broken_image(this)"
|
||||||
class="h-full" src="${item_image}"
|
class="h-full item-img" src="${item_image}"
|
||||||
alt="${frappe.get_abbr(item.item_name)}"
|
alt="${frappe.get_abbr(item.item_name)}"
|
||||||
style="object-fit: cover;">
|
>
|
||||||
</div>`;
|
</div>`;
|
||||||
} else {
|
} else {
|
||||||
return `<div class="item-qty-pill">
|
return `<div class="item-qty-pill">
|
||||||
|
|||||||
@@ -902,6 +902,8 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None):
|
|||||||
"serial_no": "serial_no",
|
"serial_no": "serial_no",
|
||||||
"purchase_order": "purchase_order",
|
"purchase_order": "purchase_order",
|
||||||
"purchase_order_item": "purchase_order_item",
|
"purchase_order_item": "purchase_order_item",
|
||||||
|
"material_request": "material_request",
|
||||||
|
"Material_request_item": "material_request_item",
|
||||||
},
|
},
|
||||||
"field_no_map": ["warehouse"],
|
"field_no_map": ["warehouse"],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,11 +11,14 @@ def get_data():
|
|||||||
},
|
},
|
||||||
"internal_links": {
|
"internal_links": {
|
||||||
"Sales Order": ["items", "against_sales_order"],
|
"Sales Order": ["items", "against_sales_order"],
|
||||||
|
"Material Request": ["items", "material_request"],
|
||||||
|
"Purchase Order": ["items", "purchase_order"],
|
||||||
},
|
},
|
||||||
"transactions": [
|
"transactions": [
|
||||||
{"label": _("Related"), "items": ["Sales Invoice", "Packing Slip", "Delivery Trip"]},
|
{"label": _("Related"), "items": ["Sales Invoice", "Packing Slip", "Delivery Trip"]},
|
||||||
{"label": _("Reference"), "items": ["Sales Order", "Shipment", "Quality Inspection"]},
|
{"label": _("Reference"), "items": ["Sales Order", "Shipment", "Quality Inspection"]},
|
||||||
{"label": _("Returns"), "items": ["Stock Entry"]},
|
{"label": _("Returns"), "items": ["Stock Entry"]},
|
||||||
{"label": _("Subscription"), "items": ["Auto Repeat"]},
|
{"label": _("Subscription"), "items": ["Auto Repeat"]},
|
||||||
|
{"label": _("Internal Transfer"), "items": ["Material Request", "Purchase Order"]},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,9 +88,11 @@
|
|||||||
"allow_zero_valuation_rate",
|
"allow_zero_valuation_rate",
|
||||||
"column_break_71",
|
"column_break_71",
|
||||||
"internal_transfer_section",
|
"internal_transfer_section",
|
||||||
|
"material_request",
|
||||||
"purchase_order",
|
"purchase_order",
|
||||||
"column_break_82",
|
"column_break_82",
|
||||||
"purchase_order_item",
|
"purchase_order_item",
|
||||||
|
"material_request_item",
|
||||||
"accounting_dimensions_section",
|
"accounting_dimensions_section",
|
||||||
"cost_center",
|
"cost_center",
|
||||||
"dimension_col_break",
|
"dimension_col_break",
|
||||||
@@ -818,13 +820,24 @@
|
|||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Has Item Scanned",
|
"label": "Has Item Scanned",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Material Request",
|
||||||
|
"options": "Material Request"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "material_request_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Material Request Item"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-11-02 12:54:07.225623",
|
"modified": "2022-11-09 12:17:50.850142",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Delivery Note Item",
|
"name": "Delivery Note Item",
|
||||||
|
|||||||
@@ -14,5 +14,6 @@ def get_data():
|
|||||||
},
|
},
|
||||||
{"label": _("Stock"), "items": ["Stock Entry", "Purchase Receipt", "Pick List"]},
|
{"label": _("Stock"), "items": ["Stock Entry", "Purchase Receipt", "Pick List"]},
|
||||||
{"label": _("Manufacturing"), "items": ["Work Order"]},
|
{"label": _("Manufacturing"), "items": ["Work Order"]},
|
||||||
|
{"label": _("Internal Transfer"), "items": ["Sales Order"]},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user