mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-19 13:09:17 +00:00
[feature] Blanket Order
- Creaete Sales or Purchase order from the blanket order - If there is any blanket order for the customer/supplier rates will be fetched from that order - Manually selecting the Blanket order will change the rates accordingly - Upon submission of the order, the ordered qty will be updated in the Blanket Order
This commit is contained in:
committed by
Nabin Hait
parent
2fb63e1724
commit
e5e87f7137
@@ -108,8 +108,11 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
|
||||
|
||||
item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
|
||||
precision("rate", item));
|
||||
let item_rate = item.price_list_rate;
|
||||
if (doc.doctype == "Purchase Order" && item.blanket_order_rate) {
|
||||
item_rate = item.blanket_order_rate;
|
||||
}
|
||||
item.rate = flt(item_rate * (1 - item.discount_percentage / 100.0), precision("rate", item));
|
||||
|
||||
this.calculate_taxes_and_totals();
|
||||
},
|
||||
|
||||
@@ -4,12 +4,15 @@
|
||||
erpnext.taxes_and_totals = erpnext.payments.extend({
|
||||
setup: function() {},
|
||||
apply_pricing_rule_on_item: function(item){
|
||||
|
||||
let effective_item_rate = item.price_list_rate;
|
||||
if (item.parenttype === "Sales Order" && item.blanket_order_rate) {
|
||||
effective_item_rate = item.blanket_order_rate;
|
||||
}
|
||||
if(item.margin_type == "Percentage"){
|
||||
item.rate_with_margin = flt(item.price_list_rate)
|
||||
+ flt(item.price_list_rate) * ( flt(item.margin_rate_or_amount) / 100);
|
||||
item.rate_with_margin = flt(effective_item_rate)
|
||||
+ flt(effective_item_rate) * ( flt(item.margin_rate_or_amount) / 100);
|
||||
} else {
|
||||
item.rate_with_margin = flt(item.price_list_rate) + flt(item.margin_rate_or_amount);
|
||||
item.rate_with_margin = flt(effective_item_rate) + flt(item.margin_rate_or_amount);
|
||||
item.base_rate_with_margin = flt(item.rate_with_margin) * flt(this.frm.doc.conversion_rate);
|
||||
}
|
||||
|
||||
|
||||
@@ -1323,6 +1323,36 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
blanket_order: function(doc, cdt, cdn) {
|
||||
var me = this;
|
||||
var item = locals[cdt][cdn];
|
||||
if (item.blanket_order && (item.parenttype=="Sales Order" || item.parenttype=="Purchase Order")) {
|
||||
frappe.call({
|
||||
method: "erpnext.stock.get_item_details.get_blanket_order_details",
|
||||
args: {
|
||||
args:{
|
||||
item_code: item.item_code,
|
||||
customer: doc.customer,
|
||||
supplier: doc.supplier,
|
||||
company: doc.company,
|
||||
transaction_date: doc.transaction_date,
|
||||
blanket_order: item.blanket_order
|
||||
}
|
||||
},
|
||||
callback: function(r) {
|
||||
if (!r.message) {
|
||||
frappe.throw(__("Invalid Blanket Order for the selected Customer and Item"))
|
||||
} else {
|
||||
frappe.run_serially([
|
||||
() => frappe.model.set_value(cdt, cdn, "blanket_order_rate", r.message.blanket_order_rate),
|
||||
() => me.frm.script_manager.trigger("price_list_rate", cdt, cdn)
|
||||
]);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user