Create a project from a Sales Order (#9111)

* init commit

* don't get tasks if project name is none

* cleanup

* Update sales_order.js
This commit is contained in:
almeidapaulopt 2017-06-16 10:59:41 +01:00 committed by Rushabh Mehta
parent e159ce9a27
commit 31692a2595
3 changed files with 47 additions and 2 deletions

View File

@ -47,6 +47,9 @@ class Project(Document):
self.append("tasks", task_map) self.append("tasks", task_map)
def get_tasks(self): def get_tasks(self):
if self.name is None:
return {}
else:
return frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc") return frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc")
def validate(self): def validate(self):

View File

@ -10,7 +10,8 @@ frappe.ui.form.on("Sales Order", {
'Delivery Note': 'Delivery', 'Delivery Note': 'Delivery',
'Sales Invoice': 'Invoice', 'Sales Invoice': 'Invoice',
'Material Request': 'Material Request', 'Material Request': 'Material Request',
'Purchase Order': 'Purchase Order' 'Purchase Order': 'Purchase Order',
'Project': 'Project'
} }
frm.add_fetch('customer', 'tax_id', 'tax_id'); frm.add_fetch('customer', 'tax_id', 'tax_id');
}, },
@ -120,6 +121,12 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
function() { me.make_maintenance_schedule() }, __("Make")); function() { me.make_maintenance_schedule() }, __("Make"));
} }
// project
if(flt(doc.per_delivered, 2) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && allow_delivery) {
this.frm.add_custom_button(__('Project'),
function() { me.make_project() }, __("Make"));
}
} else { } else {
if (this.frm.has_perm("submit")) { if (this.frm.has_perm("submit")) {
// un-close // un-close
@ -264,6 +271,13 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
}) })
}, },
make_project: function() {
frappe.model.open_mapped_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_project",
frm: this.frm
})
},
make_maintenance_visit: function() { make_maintenance_visit: function() {
frappe.model.open_mapped_doc({ frappe.model.open_mapped_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit", method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",

View File

@ -408,6 +408,34 @@ def make_material_request(source_name, target_doc=None):
return doc return doc
@frappe.whitelist()
def make_project(source_name, target_doc=None):
def postprocess(source, doc):
doc.project_type = "External"
doc.project_name = source.name
doc = get_mapped_doc("Sales Order", source_name, {
"Sales Order": {
"doctype": "Project",
"validation": {
"docstatus": ["=", 1]
},
"field_map":{
"name" : "sales_order",
"delivery_date" : "expected_end_date",
"base_grand_total" : "estimated_costing",
}
},
"Sales Order Item": {
"doctype": "Project Task",
"field_map": {
"description": "title",
},
}
}, target_doc, postprocess)
return doc
@frappe.whitelist() @frappe.whitelist()
def make_delivery_note(source_name, target_doc=None): def make_delivery_note(source_name, target_doc=None):
def set_missing_values(source, target): def set_missing_values(source, target):