[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:
Manas Solanki
2018-05-28 20:07:08 +05:30
committed by Nabin Hait
parent 2fb63e1724
commit e5e87f7137
12 changed files with 243 additions and 71 deletions

View File

@@ -3,41 +3,28 @@
frappe.ui.form.on('Blanket Order', {
refresh: function(frm) {
if (frm.doc.customer) {
if (frm.doc.customer && frm.doc.docstatus === 1) {
frm.add_custom_button(__('View Orders'), function() {
frappe.set_route('List', 'Sales Order', {blanket_order: frm.doc.name});
});
if (frm.doc.docstatus === 1) {
frm.add_primary_button(__("Create Sales Order"), function(){
frm.add_custom_button(__("Create Sales Order"), function(){
frappe.model.open_mapped_doc({
method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_sales_order",
frm: frm
});
}
}).addClass("btn-primary");
}
if (frm.doc.supplier) {
if (frm.doc.supplier && frm.doc.docstatus === 1) {
frm.add_custom_button(__('View Orders'), function() {
frappe.set_route('List', 'Purchase Order', {blanket_order: frm.doc.name});
});
}
// if (frm.doc.project) {
// frm.add_custom_button(__('Project'), function() {
// frappe.set_route("Form", "Project", frm.doc.project);
// },__("View"));
// frm.add_custom_button(__('Task'), function() {
// frappe.set_route('List', 'Task', {project: frm.doc.project});
// },__("View"));
// }
if ((!frm.doc.employee) && (frm.doc.docstatus === 1)) {
frm.add_custom_button(__('Employee'), function () {
frm.add_custom_button(__("Create Purchase Order"), function(){
frappe.model.open_mapped_doc({
method: "erpnext.hr.doctype.employee_onboarding.employee_onboarding.make_employee",
method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_purchase_order",
frm: frm
});
}, __("Make"));
frm.page.set_inner_btn_group_as_primary(__("Make"));
}).addClass("btn-primary");
}
}
});

View File

@@ -26,7 +26,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Series",
"length": 0,
@@ -437,7 +437,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-05-24 07:56:37.911486",
"modified": "2018-05-28 05:56:05.922333",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Blanket Order",
@@ -467,6 +467,7 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "order_type, to_date",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -5,6 +5,39 @@
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc
class BlanketOrder(Document):
pass
@frappe.whitelist()
def make_sales_order(source_name):
return get_mapped_doc("Blanket Order", source_name, {
"Blanket Order": {
"doctype": "Sales Order"
},
"Blanket Order Item": {
"doctype": "Sales Order Item",
"field_map": {
"rate": "blanket_order_rate",
"parent": "blanket_order"
}
}
})
@frappe.whitelist()
def make_purchase_order(source_name):
return get_mapped_doc("Blanket Order", source_name, {
"Blanket Order": {
"doctype": "Purchase Order"
},
"Blanket Order Item": {
"doctype": "Purchase Order Item",
"field_map": {
"rate": "blanket_order_rate",
"parent": "blanket_order"
}
}
})