mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-07 07:20:26 +00:00
fix: use field precision instead of hardcoded precision in so and po
(cherry picked from commit 1a1e2c7e01)
# Conflicts:
# erpnext/buying/doctype/purchase_order/purchase_order.js
# erpnext/selling/doctype/sales_order/sales_order.js
This commit is contained in:
@@ -62,8 +62,16 @@ frappe.ui.form.on("Purchase Order", {
|
||||
get_materials_from_supplier: function(frm) {
|
||||
let po_details = [];
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (frm.doc.supplied_items && (frm.doc.per_received == 100 || frm.doc.status === 'Closed')) {
|
||||
frm.doc.supplied_items.forEach(d => {
|
||||
=======
|
||||
if (
|
||||
frm.doc.supplied_items &&
|
||||
(flt(frm.doc.per_received, precision("per_received")) == 100 || frm.doc.status === "Closed")
|
||||
) {
|
||||
frm.doc.supplied_items.forEach((d) => {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
if (d.total_supplied_qty && d.total_supplied_qty != d.consumed_qty) {
|
||||
po_details.push(d.name)
|
||||
}
|
||||
@@ -180,11 +188,22 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
this.frm.fields_dict.items_section.wrapper.removeClass("hide-border");
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
if(!["Closed", "Delivered"].includes(doc.status)) {
|
||||
if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received) < 100 && flt(this.frm.doc.per_billed) < 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)) {
|
||||
this.frm.add_custom_button(__('Update Items'), () => {
|
||||
=======
|
||||
if (!["Closed", "Delivered"].includes(doc.status)) {
|
||||
if (
|
||||
this.frm.doc.status !== "Closed" &&
|
||||
flt(this.frm.doc.per_received, precision("per_received")) < 100 &&
|
||||
flt(this.frm.doc.per_billed, precision("per_billed")) < 100
|
||||
) {
|
||||
if (!this.frm.doc.__onload || this.frm.doc.__onload.can_update_items) {
|
||||
this.frm.add_custom_button(__("Update Items"), () => {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
erpnext.utils.update_child_items({
|
||||
frm: this.frm,
|
||||
child_docname: "items",
|
||||
@@ -195,7 +214,14 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
}
|
||||
}
|
||||
if (this.frm.has_perm("submit")) {
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_billed, 6) < 100 || flt(doc.per_received, 6) < 100) {
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_billed, precision("per_billed")) < 100 ||
|
||||
flt(doc.per_received, precision("per_received")) < 100
|
||||
) {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
if (doc.status != "On Hold") {
|
||||
this.frm.add_custom_button(__('Hold'), () => this.hold_purchase_order(), __("Status"));
|
||||
} else{
|
||||
@@ -218,8 +244,19 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
}
|
||||
if(doc.status != "Closed") {
|
||||
if (doc.status != "On Hold") {
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_received) < 100 && allow_receipt) {
|
||||
cur_frm.add_custom_button(__('Purchase Receipt'), this.make_purchase_receipt, __('Create'));
|
||||
=======
|
||||
if (flt(doc.per_received, precision("per_received")) < 100 && allow_receipt) {
|
||||
this.frm.add_custom_button(
|
||||
__("Purchase Receipt"),
|
||||
() => {
|
||||
me.make_purchase_receipt();
|
||||
},
|
||||
__("Create")
|
||||
);
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
if (doc.is_subcontracted) {
|
||||
if (doc.is_old_subcontracting_flow) {
|
||||
if (me.has_unsupplied_items()) {
|
||||
@@ -231,11 +268,25 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
}
|
||||
}
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_billed) < 100)
|
||||
cur_frm.add_custom_button(__('Purchase Invoice'),
|
||||
this.make_purchase_invoice, __('Create'));
|
||||
|
||||
if(flt(doc.per_billed) < 100 && doc.status != "Delivered") {
|
||||
=======
|
||||
// Please do not add precision in the below flt function
|
||||
if (flt(doc.per_billed, precision("per_billed")) < 100)
|
||||
this.frm.add_custom_button(
|
||||
__("Purchase Invoice"),
|
||||
() => {
|
||||
me.make_purchase_invoice();
|
||||
},
|
||||
__("Create")
|
||||
);
|
||||
|
||||
if (flt(doc.per_billed, precision("per_billed")) < 100 && doc.status != "Delivered") {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
this.frm.add_custom_button(
|
||||
__('Payment'),
|
||||
() => this.make_payment_entry(),
|
||||
@@ -243,6 +294,7 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
);
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_billed) < 100) {
|
||||
this.frm.add_custom_button(__('Payment Request'),
|
||||
function() { me.make_payment_request() }, __('Create'));
|
||||
@@ -252,6 +304,16 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
|
||||
cur_frm.add_custom_button(__('Subscription'), function() {
|
||||
erpnext.utils.make_subscription(doc.doctype, doc.name)
|
||||
}, __('Create'))
|
||||
=======
|
||||
if (flt(doc.per_billed, precision("per_billed")) < 100) {
|
||||
this.frm.add_custom_button(
|
||||
__("Payment Request"),
|
||||
function () {
|
||||
me.make_payment_request();
|
||||
},
|
||||
__("Create")
|
||||
);
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
}
|
||||
|
||||
if (doc.docstatus === 1 && !doc.inter_company_order_reference) {
|
||||
|
||||
@@ -47,6 +47,7 @@ frappe.ui.form.on("Sales Order", {
|
||||
frm.set_df_property('packed_items', 'cannot_add_rows', true);
|
||||
frm.set_df_property('packed_items', 'cannot_delete_rows', true);
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
refresh: function(frm) {
|
||||
if(
|
||||
frm.doc.docstatus === 1
|
||||
@@ -62,6 +63,63 @@ frappe.ui.form.on("Sales Order", {
|
||||
child_doctype: "Sales Order Detail",
|
||||
cannot_add_row: false,
|
||||
})
|
||||
=======
|
||||
|
||||
refresh: function (frm) {
|
||||
if (frm.doc.docstatus === 1) {
|
||||
if (
|
||||
frm.doc.status !== "Closed" &&
|
||||
flt(frm.doc.per_delivered, precision("per_delivered")) < 100 &&
|
||||
flt(frm.doc.per_billed, precision("per_billed")) < 100 &&
|
||||
frm.has_perm("write")
|
||||
) {
|
||||
frm.add_custom_button(__("Update Items"), () => {
|
||||
erpnext.utils.update_child_items({
|
||||
frm: frm,
|
||||
child_docname: "items",
|
||||
child_doctype: "Sales Order Detail",
|
||||
cannot_add_row: false,
|
||||
has_reserved_stock: frm.doc.__onload && frm.doc.__onload.has_reserved_stock,
|
||||
});
|
||||
});
|
||||
|
||||
// Stock Reservation > Reserve button should only be visible if the SO has unreserved stock and no Pick List is created against the SO.
|
||||
if (
|
||||
frm.doc.__onload &&
|
||||
frm.doc.__onload.has_unreserved_stock &&
|
||||
flt(frm.doc.per_picked, precision("per_picked")) === 0
|
||||
) {
|
||||
frm.add_custom_button(
|
||||
__("Reserve"),
|
||||
() => frm.events.create_stock_reservation_entries(frm),
|
||||
__("Stock Reservation")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Stock Reservation > Unreserve button will be only visible if the SO has un-delivered reserved stock.
|
||||
if (
|
||||
frm.doc.__onload &&
|
||||
frm.doc.__onload.has_reserved_stock &&
|
||||
frappe.model.can_cancel("Stock Reservation Entry")
|
||||
) {
|
||||
frm.add_custom_button(
|
||||
__("Unreserve"),
|
||||
() => frm.events.cancel_stock_reservation_entries(frm),
|
||||
__("Stock Reservation")
|
||||
);
|
||||
}
|
||||
|
||||
frm.doc.items.forEach((item) => {
|
||||
if (flt(item.stock_reserved_qty) > 0 && frappe.model.can_read("Stock Reservation Entry")) {
|
||||
frm.add_custom_button(
|
||||
__("Reserved Stock"),
|
||||
() => frm.events.show_reserved_stock(frm),
|
||||
__("Stock Reservation")
|
||||
);
|
||||
return;
|
||||
}
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -203,6 +261,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
|
||||
if (doc.docstatus==1) {
|
||||
|
||||
<<<<<<< HEAD
|
||||
if(this.frm.has_perm("submit")) {
|
||||
if(doc.status === 'On Hold') {
|
||||
// un-hold
|
||||
@@ -214,6 +273,24 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
// close
|
||||
this.frm.add_custom_button(__('Close'), () => this.close_sales_order(), __("Status"))
|
||||
}
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 ||
|
||||
flt(doc.per_billed, precision("per_billed")) < 100
|
||||
) {
|
||||
// close
|
||||
this.frm.add_custom_button(__("Close"), () => this.close_sales_order(), __("Status"));
|
||||
}
|
||||
} else if (doc.status === "Closed") {
|
||||
// un-close
|
||||
this.frm.add_custom_button(
|
||||
__("Re-open"),
|
||||
function () {
|
||||
me.frm.cscript.update_status("Re-open", "Draft");
|
||||
},
|
||||
__("Status")
|
||||
);
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
}
|
||||
else if(doc.status === 'Closed') {
|
||||
// un-close
|
||||
@@ -228,7 +305,14 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
&& !this.frm.doc.skip_delivery_note
|
||||
|
||||
if (this.frm.has_perm("submit")) {
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_delivered, 6) < 100 || flt(doc.per_billed) < 100) {
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 ||
|
||||
flt(doc.per_billed, precision("per_billed")) < 100
|
||||
) {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
// hold
|
||||
this.frm.add_custom_button(__('Hold'), () => this.hold_sales_order(), __("Status"))
|
||||
// close
|
||||
@@ -237,9 +321,16 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
}
|
||||
|
||||
if (
|
||||
<<<<<<< HEAD
|
||||
flt(doc.per_picked, 6) < 100
|
||||
&& flt(doc.per_delivered, 6) < 100
|
||||
&& frappe.model.can_create("Pick List")
|
||||
=======
|
||||
(!doc.__onload || !doc.__onload.has_reserved_stock) &&
|
||||
flt(doc.per_picked, precision("per_picked")) < 100 &&
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 &&
|
||||
frappe.model.can_create("Pick List")
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
) {
|
||||
this.frm.add_custom_button(__('Pick List'), () => this.create_pick_list(), __('Create'));
|
||||
}
|
||||
@@ -250,10 +341,17 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
const order_is_a_custom_sale = ["Sales", "Shopping Cart", "Maintenance"].indexOf(doc.order_type) === -1;
|
||||
|
||||
// delivery note
|
||||
<<<<<<< HEAD
|
||||
if(
|
||||
flt(doc.per_delivered, 6) < 100
|
||||
&& (order_is_a_sale || order_is_a_custom_sale)
|
||||
&& allow_delivery
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 &&
|
||||
(order_is_a_sale || order_is_a_custom_sale) &&
|
||||
allow_delivery
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
) {
|
||||
if (frappe.model.can_create("Delivery Note")) {
|
||||
this.frm.add_custom_button(
|
||||
@@ -272,7 +370,14 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
}
|
||||
|
||||
// sales invoice
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_billed, 6) < 100 && frappe.model.can_create("Sales Invoice")) {
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_billed, precision("per_billed")) < 100 &&
|
||||
frappe.model.can_create("Sales Invoice")
|
||||
) {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
this.frm.add_custom_button(
|
||||
__("Sales Invoice"),
|
||||
() => me.make_sales_invoice(),
|
||||
@@ -282,12 +387,19 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
|
||||
// material request
|
||||
if (
|
||||
<<<<<<< HEAD
|
||||
(
|
||||
!doc.order_type
|
||||
|| (order_is_a_sale || order_is_a_custom_sale)
|
||||
&& flt(doc.per_delivered, 6) < 100
|
||||
)
|
||||
&& frappe.model.can_create("Material Request")
|
||||
=======
|
||||
(!doc.order_type ||
|
||||
((order_is_a_sale || order_is_a_custom_sale) &&
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100)) &&
|
||||
frappe.model.can_create("Material Request")
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
) {
|
||||
this.frm.add_custom_button(
|
||||
__('Material Request'),
|
||||
@@ -311,8 +423,16 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
}
|
||||
|
||||
// maintenance
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_delivered, 2) < 100 && (order_is_maintenance || order_is_a_custom_sale)) {
|
||||
if(frappe.model.can_create("Maintenance Visit")) {
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 &&
|
||||
(order_is_maintenance || order_is_a_custom_sale)
|
||||
) {
|
||||
if (frappe.model.can_create("Maintenance Visit")) {
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
this.frm.add_custom_button(
|
||||
__('Maintenance Visit'),
|
||||
() => this.make_maintenance_visit(),
|
||||
@@ -330,6 +450,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
}
|
||||
|
||||
// project
|
||||
<<<<<<< HEAD
|
||||
if(flt(doc.per_delivered, 2) < 100 && frappe.model.can_create("Project")) {
|
||||
this.frm.add_custom_button(__('Project'), () => this.make_project(), __('Create'));
|
||||
}
|
||||
@@ -342,6 +463,13 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
|
||||
},
|
||||
__('Create')
|
||||
);
|
||||
=======
|
||||
if (
|
||||
flt(doc.per_delivered, precision("per_delivered")) < 100 &&
|
||||
frappe.model.can_create("Project")
|
||||
) {
|
||||
this.frm.add_custom_button(__("Project"), () => this.make_project(), __("Create"));
|
||||
>>>>>>> 1a1e2c7e01 (fix: use field precision instead of hardcoded precision in so and po)
|
||||
}
|
||||
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user