feat: add on hold status in purchase order
This commit is contained in:
parent
4713e2dd73
commit
439546c83c
@ -36,7 +36,8 @@ frappe.ui.form.on("Purchase Order", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
refresh: function(frm) {
|
refresh: function(frm) {
|
||||||
if(frm.doc.docstatus == 1 && frm.doc.status == 'To Receive and Bill') {
|
if(frm.doc.docstatus == 1 && frm.doc.status != 'Closed'
|
||||||
|
&& flt(frm.doc.per_received) < 100 && flt(frm.doc.per_billed) < 100) {
|
||||||
frm.add_custom_button(__('Update Items'), () => {
|
frm.add_custom_button(__('Update Items'), () => {
|
||||||
erpnext.utils.update_child_items({
|
erpnext.utils.update_child_items({
|
||||||
frm: frm,
|
frm: frm,
|
||||||
@ -95,60 +96,64 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
|||||||
|
|
||||||
cur_frm.set_df_property("drop_ship", "hidden", !is_drop_ship);
|
cur_frm.set_df_property("drop_ship", "hidden", !is_drop_ship);
|
||||||
|
|
||||||
if(doc.docstatus == 1 && !in_list(["Closed", "Delivered"], doc.status)) {
|
if(doc.docstatus == 1) {
|
||||||
if (this.frm.has_perm("submit")) {
|
if(!in_list(["Closed", "Delivered"], doc.status)) {
|
||||||
if(flt(doc.per_billed, 2) < 100 || doc.per_received < 100) {
|
if (this.frm.has_perm("submit")) {
|
||||||
cur_frm.add_custom_button(__('Close'), this.close_purchase_order, __("Status"));
|
if(flt(doc.per_billed, 2) < 100 || doc.per_received < 100) {
|
||||||
|
cur_frm.add_custom_button(__('Close'), this.close_purchase_order, __("Status"));
|
||||||
|
if (doc.status != "On Hold") {
|
||||||
|
cur_frm.add_custom_button(__('Hold'),
|
||||||
|
function() {
|
||||||
|
me.hold_purchase_order();
|
||||||
|
}, __("Status"));
|
||||||
|
} else{
|
||||||
|
cur_frm.add_custom_button(__('Resume'), this.unhold_purchase_order, __("Status"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_drop_ship && doc.status!="Delivered"){
|
||||||
|
cur_frm.add_custom_button(__('Delivered'),
|
||||||
|
this.delivered_by_supplier, __("Status"));
|
||||||
|
|
||||||
|
cur_frm.page.set_inner_btn_group_as_primary(__("Status"));
|
||||||
|
}
|
||||||
|
} else if(in_list(["Closed", "Delivered"], doc.status)) {
|
||||||
|
if (this.frm.has_perm("submit")) {
|
||||||
|
cur_frm.add_custom_button(__('Re-open'), this.unclose_purchase_order, __("Status"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(doc.status != "Closed") {
|
||||||
|
if (doc.status != "On Hold") {
|
||||||
|
if(flt(doc.per_received, 2) < 100 && allow_receipt) {
|
||||||
|
cur_frm.add_custom_button(__('Receipt'), this.make_purchase_receipt, __('Create'));
|
||||||
|
if(doc.is_subcontracted==="Yes") {
|
||||||
|
cur_frm.add_custom_button(__('Material to Supplier'),
|
||||||
|
function() { me.make_stock_entry(); }, __("Transfer"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flt(doc.per_billed, 2) < 100)
|
||||||
|
cur_frm.add_custom_button(__('Invoice'),
|
||||||
|
this.make_purchase_invoice, __('Create'));
|
||||||
|
|
||||||
if(is_drop_ship && doc.status!="Delivered"){
|
if(!doc.auto_repeat) {
|
||||||
cur_frm.add_custom_button(__('Delivered'),
|
cur_frm.add_custom_button(__('Subscription'), function() {
|
||||||
this.delivered_by_supplier, __("Status"));
|
erpnext.utils.make_subscription(doc.doctype, doc.name)
|
||||||
|
}, __('Create'))
|
||||||
cur_frm.page.set_inner_btn_group_as_primary(__("Status"));
|
}
|
||||||
|
}
|
||||||
|
if(flt(doc.per_billed)==0) {
|
||||||
|
this.frm.add_custom_button(__('Payment Request'),
|
||||||
|
function() { me.make_payment_request() }, __('Create'));
|
||||||
|
}
|
||||||
|
if(flt(doc.per_billed)==0 && doc.status != "Delivered") {
|
||||||
|
cur_frm.add_custom_button(__('Payment'), cur_frm.cscript.make_payment_entry, __('Create'));
|
||||||
|
}
|
||||||
|
cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
|
||||||
}
|
}
|
||||||
} else if(doc.docstatus===0) {
|
} else if(doc.docstatus===0) {
|
||||||
cur_frm.cscript.add_from_mappers();
|
cur_frm.cscript.add_from_mappers();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doc.docstatus == 1 && in_list(["Closed", "Delivered"], doc.status)) {
|
|
||||||
if (this.frm.has_perm("submit")) {
|
|
||||||
cur_frm.add_custom_button(__('Re-open'), this.unclose_purchase_order, __("Status"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(doc.docstatus == 1 && doc.status != "Closed") {
|
|
||||||
if(flt(doc.per_received, 2) < 100 && allow_receipt) {
|
|
||||||
cur_frm.add_custom_button(__('Receipt'), this.make_purchase_receipt, __('Create'));
|
|
||||||
|
|
||||||
if(doc.is_subcontracted==="Yes") {
|
|
||||||
cur_frm.add_custom_button(__('Material to Supplier'),
|
|
||||||
function() { me.make_stock_entry(); }, __("Transfer"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(flt(doc.per_billed, 2) < 100)
|
|
||||||
cur_frm.add_custom_button(__('Invoice'),
|
|
||||||
this.make_purchase_invoice, __('Create'));
|
|
||||||
|
|
||||||
if(flt(doc.per_billed)==0 && doc.status != "Delivered") {
|
|
||||||
cur_frm.add_custom_button(__('Payment'), cur_frm.cscript.make_payment_entry, __('Create'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!doc.auto_repeat) {
|
|
||||||
cur_frm.add_custom_button(__('Subscription'), function() {
|
|
||||||
erpnext.utils.make_subscription(doc.doctype, doc.name)
|
|
||||||
}, __('Create'))
|
|
||||||
}
|
|
||||||
|
|
||||||
if(flt(doc.per_billed)==0) {
|
|
||||||
this.frm.add_custom_button(__('Payment Request'),
|
|
||||||
function() { me.make_payment_request() }, __('Create'));
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
get_items_from_open_material_requests: function() {
|
get_items_from_open_material_requests: function() {
|
||||||
@ -427,6 +432,42 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
unhold_purchase_order: function(){
|
||||||
|
cur_frm.cscript.update_status("Resume", "Draft")
|
||||||
|
},
|
||||||
|
|
||||||
|
hold_purchase_order: function(){
|
||||||
|
var me = this;
|
||||||
|
var d = new frappe.ui.Dialog({
|
||||||
|
title: __('Reason for Hold'),
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
"fieldname": "reason_for_hold",
|
||||||
|
"fieldtype": "Text",
|
||||||
|
"reqd": 1,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
primary_action: function() {
|
||||||
|
var data = d.get_values();
|
||||||
|
frappe.call({
|
||||||
|
method: "erpnext.buying.doctype.purchase_order.purchase_order.update_reason_for_hold",
|
||||||
|
args: {
|
||||||
|
data: data.reason_for_hold,
|
||||||
|
name: me.frm.doc.name
|
||||||
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
if(!r.exc) {
|
||||||
|
me.frm.set_value("reason_for_hold", data.reason_for_hold);
|
||||||
|
me.update_status('Hold', 'On Hold')
|
||||||
|
d.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
d.show();
|
||||||
|
},
|
||||||
|
|
||||||
unclose_purchase_order: function(){
|
unclose_purchase_order: function(){
|
||||||
cur_frm.cscript.update_status('Re-open', 'Submitted')
|
cur_frm.cscript.update_status('Re-open', 'Submitted')
|
||||||
},
|
},
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -301,6 +301,10 @@ class PurchaseOrder(BuyingController):
|
|||||||
else:
|
else:
|
||||||
self.db_set("per_received", 0, update_modified=False)
|
self.db_set("per_received", 0, update_modified=False)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def update_reason_for_hold(name, data):
|
||||||
|
frappe.db.set_value('Purchase Order', name, 'reason_for_hold', data)
|
||||||
|
|
||||||
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
|
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
|
||||||
"""get last purchase rate for an item"""
|
"""get last purchase rate for an item"""
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@ frappe.listview_settings['Purchase Order'] = {
|
|||||||
get_indicator: function (doc) {
|
get_indicator: function (doc) {
|
||||||
if (doc.status === "Closed") {
|
if (doc.status === "Closed") {
|
||||||
return [__("Closed"), "green", "status,=,Closed"];
|
return [__("Closed"), "green", "status,=,Closed"];
|
||||||
|
} else if (doc.status === "On Hold") {
|
||||||
|
return [__("On Hold"), "orange", "status,=,On Hold"];
|
||||||
} else if (doc.status === "Delivered") {
|
} else if (doc.status === "Delivered") {
|
||||||
return [__("Delivered"), "green", "status,=,Closed"];
|
return [__("Delivered"), "green", "status,=,Closed"];
|
||||||
} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
|
} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
|
||||||
|
|||||||
@ -70,6 +70,7 @@ status_map = {
|
|||||||
["Completed", "eval:self.per_received == 100 and self.per_billed == 100 and self.docstatus == 1"],
|
["Completed", "eval:self.per_received == 100 and self.per_billed == 100 and self.docstatus == 1"],
|
||||||
["Delivered", "eval:self.status=='Delivered'"],
|
["Delivered", "eval:self.status=='Delivered'"],
|
||||||
["Cancelled", "eval:self.docstatus==2"],
|
["Cancelled", "eval:self.docstatus==2"],
|
||||||
|
["On Hold", "eval:self.status=='On Hold'"],
|
||||||
["Closed", "eval:self.status=='Closed'"],
|
["Closed", "eval:self.status=='Closed'"],
|
||||||
],
|
],
|
||||||
"Delivery Note": [
|
"Delivery Note": [
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user