diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 51df37044d5..4748826ec37 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -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": target.purchase_order = source.parent target.purchase_order_item = source.name + target.material_request = source.material_request + target.material_request_item = source.material_request_item if ( source.get("purchase_order") diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index 5c1311d68a9..19c913ae910 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -230,9 +230,17 @@ class TestAsset(AssetSetup): self.assertTrue(asset.journal_entry_for_scrap) 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 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( @@ -288,9 +296,17 @@ class TestAsset(AssetSetup): pro_rata_amount = flt(pro_rata_amount, asset.precision("gross_purchase_amount")) 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 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), ) diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 5a96131157b..5206a428c4e 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -833,6 +833,10 @@ class TestPurchaseOrder(FrappeTestCase): prepare_data_for_internal_transfer() supplier = "_Test Internal Supplier 2" + mr = make_material_request( + qty=2, company="_Test Company with perpetual inventory", warehouse="Stores - TCP1" + ) + po = create_purchase_order( company="_Test Company with perpetual inventory", supplier=supplier, @@ -840,6 +844,8 @@ class TestPurchaseOrder(FrappeTestCase): from_warehouse="_Test Internal Warehouse New 1 - TCP1", qty=2, rate=1, + material_request=mr.name, + material_request_item=mr.items[0].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].po_detail) pi.submit() + mr.reload() po.load_from_db() self.assertEqual(po.status, "Completed") + self.assertEqual(mr.status, "Received") def prepare_data_for_internal_transfer(): @@ -979,6 +987,8 @@ def create_purchase_order(**args): "schedule_date": add_days(nowdate(), 1), "include_exploded_items": args.get("include_exploded_items", 1), "against_blanket_order": args.against_blanket_order, + "material_request": args.material_request, + "material_request_item": args.material_request_item, }, ) diff --git a/erpnext/public/scss/point-of-sale.scss b/erpnext/public/scss/point-of-sale.scss index 7a3854cc611..7b7530b1501 100644 --- a/erpnext/public/scss/point-of-sale.scss +++ b/erpnext/public/scss/point-of-sale.scss @@ -159,6 +159,12 @@ } } + .item-img { + @extend .image; + border-radius: 8px 8px 0 0; + object-fit: cover; + } + > .item-detail { display: flex; flex-direction: column; diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index 8c7c5520a40..b801de314cc 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -95,8 +95,10 @@ "item_tax_rate", "transaction_date", "inter_transfer_reference_section", + "material_request", "purchase_order", "column_break_89", + "material_request_item", "purchase_order_item" ], "fields": [ @@ -847,12 +849,23 @@ "label": "quotation_item", "no_copy": 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, "istable": 1, "links": [], - "modified": "2022-11-10 18:20:30.137455", + "modified": "2022-11-18 11:39:01.741665", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order Item", diff --git a/erpnext/selling/page/point_of_sale/pos_item_selector.js b/erpnext/selling/page/point_of_sale/pos_item_selector.js index 7a90fb044f3..b5eb0489f9d 100644 --- a/erpnext/selling/page/point_of_sale/pos_item_selector.js +++ b/erpnext/selling/page/point_of_sale/pos_item_selector.js @@ -103,9 +103,9 @@ erpnext.PointOfSale.ItemSelector = class {
${frappe.get_abbr(item.item_name)} + >
`; } else { return `
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 9dd28dc60b3..a1df764ea9d 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -902,6 +902,8 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): "serial_no": "serial_no", "purchase_order": "purchase_order", "purchase_order_item": "purchase_order_item", + "material_request": "material_request", + "Material_request_item": "material_request_item", }, "field_no_map": ["warehouse"], }, diff --git a/erpnext/stock/doctype/delivery_note/delivery_note_dashboard.py b/erpnext/stock/doctype/delivery_note/delivery_note_dashboard.py index fd44e9cee5c..b6b5ff4296f 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note_dashboard.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note_dashboard.py @@ -11,11 +11,14 @@ def get_data(): }, "internal_links": { "Sales Order": ["items", "against_sales_order"], + "Material Request": ["items", "material_request"], + "Purchase Order": ["items", "purchase_order"], }, "transactions": [ {"label": _("Related"), "items": ["Sales Invoice", "Packing Slip", "Delivery Trip"]}, {"label": _("Reference"), "items": ["Sales Order", "Shipment", "Quality Inspection"]}, {"label": _("Returns"), "items": ["Stock Entry"]}, {"label": _("Subscription"), "items": ["Auto Repeat"]}, + {"label": _("Internal Transfer"), "items": ["Material Request", "Purchase Order"]}, ], } diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index 32294630700..916ab2a05be 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -88,9 +88,11 @@ "allow_zero_valuation_rate", "column_break_71", "internal_transfer_section", + "material_request", "purchase_order", "column_break_82", "purchase_order_item", + "material_request_item", "accounting_dimensions_section", "cost_center", "dimension_col_break", @@ -818,13 +820,24 @@ "fieldtype": "Check", "label": "Has Item Scanned", "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, "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-11-02 12:54:07.225623", + "modified": "2022-11-09 12:17:50.850142", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", diff --git a/erpnext/stock/doctype/material_request/material_request_dashboard.py b/erpnext/stock/doctype/material_request/material_request_dashboard.py index 691a8b39b1b..2bba52a4e25 100644 --- a/erpnext/stock/doctype/material_request/material_request_dashboard.py +++ b/erpnext/stock/doctype/material_request/material_request_dashboard.py @@ -14,5 +14,6 @@ def get_data(): }, {"label": _("Stock"), "items": ["Stock Entry", "Purchase Receipt", "Pick List"]}, {"label": _("Manufacturing"), "items": ["Work Order"]}, + {"label": _("Internal Transfer"), "items": ["Sales Order"]}, ], }