feat: allow Update Items for Subcontracted PO not having SCO created

This commit is contained in:
s-aga-r 2023-08-21 15:51:57 +05:30
parent 450949cadd
commit faf9f13215
3 changed files with 45 additions and 2 deletions

View File

@ -185,8 +185,7 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
if(!in_list(["Closed", "Delivered"], doc.status)) {
if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received, 2) < 100 && flt(this.frm.doc.per_billed, 2) < 100) {
// Don't add Update Items button if the PO is following the new subcontracting flow.
if (!(this.frm.doc.is_subcontracted && !this.frm.doc.is_old_subcontracting_flow)) {
if (!this.frm.doc.__onload || this.frm.doc.__onload.can_update_items) {
this.frm.add_custom_button(__('Update Items'), () => {
erpnext.utils.update_child_items({
frm: this.frm,

View File

@ -49,9 +49,22 @@ class PurchaseOrder(BuyingController):
}
]
def can_update_items(self) -> bool:
result = True
if self.is_subcontracted and not self.is_old_subcontracting_flow:
# Check - 1: NOT ALLOWED if non-cancelled Subcontracting Order exists for this Purchase Order
if frappe.db.exists(
"Subcontracting Order", {"purchase_order": self.name, "docstatus": ["!=", 2]}
):
return False
return result
def onload(self):
supplier_tds = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category")
self.set_onload("supplier_tds", supplier_tds)
self.set_onload("can_update_items", self.can_update_items())
def validate(self):
super(PurchaseOrder, self).validate()

View File

@ -678,6 +678,37 @@ erpnext.utils.update_child_items = function(opts) {
})
}
if (frm.doc.doctype == 'Purchase Order' && frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
fields.push({
fieldtype:'Link',
fieldname:'fg_item',
options: 'Item',
reqd: 1,
in_list_view: 0,
read_only: 0,
disabled: 0,
label: __('Finished Good Item'),
get_query: () => {
return {
filters: {
'is_stock_item': 1,
'is_sub_contracted_item': 1,
'default_bom': ['!=', '']
}
}
},
}, {
fieldtype:'Float',
fieldname:'fg_item_qty',
reqd: 1,
default: 0,
read_only: 0,
in_list_view: 0,
label: __('Finished Good Item Qty'),
precision: get_precision('fg_item_qty')
})
}
let dialog = new frappe.ui.Dialog({
title: __("Update Items"),
size: "extra-large",