Merge pull request #2312 from neilLasrado/production-calender-sync
Production calender sync
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json
index b8f65cd..9ec5892 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.json
+++ b/erpnext/manufacturing/doctype/production_order/production_order.json
@@ -1,113 +1,113 @@
{
- "allow_import": 1,
- "autoname": "naming_series:",
- "creation": "2013-01-10 16:34:16",
- "docstatus": 0,
- "doctype": "DocType",
+ "allow_import": 1,
+ "autoname": "naming_series:",
+ "creation": "2013-01-10 16:34:16",
+ "docstatus": 0,
+ "doctype": "DocType",
"fields": [
{
- "fieldname": "item",
- "fieldtype": "Section Break",
- "label": "Item",
- "options": "icon-gift",
+ "fieldname": "item",
+ "fieldtype": "Section Break",
+ "label": "Item",
+ "options": "icon-gift",
"permlevel": 0
- },
+ },
{
- "default": "PRO-",
- "fieldname": "naming_series",
- "fieldtype": "Select",
- "label": "Series",
- "options": "PRO-",
- "permlevel": 0,
+ "default": "PRO-",
+ "fieldname": "naming_series",
+ "fieldtype": "Select",
+ "label": "Series",
+ "options": "PRO-",
+ "permlevel": 0,
"reqd": 1
- },
+ },
{
- "depends_on": "eval:!doc.__islocal",
- "fieldname": "status",
- "fieldtype": "Select",
- "in_filter": 1,
- "in_list_view": 1,
- "label": "Status",
- "no_copy": 1,
- "oldfieldname": "status",
- "oldfieldtype": "Select",
- "options": "\nDraft\nSubmitted\nStopped\nIn Process\nCompleted\nCancelled",
- "permlevel": 0,
- "read_only": 1,
- "reqd": 1,
+ "depends_on": "eval:!doc.__islocal",
+ "fieldname": "status",
+ "fieldtype": "Select",
+ "in_filter": 1,
+ "in_list_view": 1,
+ "label": "Status",
+ "no_copy": 1,
+ "oldfieldname": "status",
+ "oldfieldtype": "Select",
+ "options": "\nDraft\nSubmitted\nStopped\nIn Process\nCompleted\nCancelled",
+ "permlevel": 0,
+ "read_only": 1,
+ "reqd": 1,
"search_index": 1
- },
+ },
{
- "fieldname": "production_item",
- "fieldtype": "Link",
- "in_filter": 1,
- "in_list_view": 1,
- "label": "Item To Manufacture",
- "oldfieldname": "production_item",
- "oldfieldtype": "Link",
- "options": "Item",
- "permlevel": 0,
- "read_only": 0,
+ "fieldname": "production_item",
+ "fieldtype": "Link",
+ "in_filter": 1,
+ "in_list_view": 1,
+ "label": "Item To Manufacture",
+ "oldfieldname": "production_item",
+ "oldfieldtype": "Link",
+ "options": "Item",
+ "permlevel": 0,
+ "read_only": 0,
"reqd": 1
- },
+ },
{
- "depends_on": "production_item",
- "description": "Bill of Material to be considered for manufacturing",
- "fieldname": "bom_no",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "BOM No",
- "oldfieldname": "bom_no",
- "oldfieldtype": "Link",
- "options": "BOM",
- "permlevel": 0,
- "read_only": 0,
+ "depends_on": "production_item",
+ "description": "Bill of Material to be considered for manufacturing",
+ "fieldname": "bom_no",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "BOM No",
+ "oldfieldname": "bom_no",
+ "oldfieldtype": "Link",
+ "options": "BOM",
+ "permlevel": 0,
+ "read_only": 0,
"reqd": 1
- },
+ },
{
- "default": "1",
- "description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.",
- "fieldname": "use_multi_level_bom",
- "fieldtype": "Check",
- "label": "Use Multi-Level BOM",
+ "default": "1",
+ "description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.",
+ "fieldname": "use_multi_level_bom",
+ "fieldtype": "Check",
+ "label": "Use Multi-Level BOM",
"permlevel": 0
- },
+ },
{
- "fieldname": "column_break1",
- "fieldtype": "Column Break",
- "oldfieldtype": "Column Break",
- "permlevel": 0,
- "read_only": 0,
+ "fieldname": "column_break1",
+ "fieldtype": "Column Break",
+ "oldfieldtype": "Column Break",
+ "permlevel": 0,
+ "read_only": 0,
"width": "50%"
- },
+ },
{
- "description": "Manufacture against Sales Order",
- "fieldname": "sales_order",
- "fieldtype": "Link",
- "label": "Sales Order",
- "options": "Sales Order",
- "permlevel": 0,
+ "description": "Manufacture against Sales Order",
+ "fieldname": "sales_order",
+ "fieldtype": "Link",
+ "label": "Sales Order",
+ "options": "Sales Order",
+ "permlevel": 0,
"read_only": 0
- },
+ },
{
- "depends_on": "production_item",
- "fieldname": "qty",
- "fieldtype": "Float",
- "in_list_view": 1,
- "label": "Qty To Manufacture",
- "oldfieldname": "qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "read_only": 0,
+ "depends_on": "production_item",
+ "fieldname": "qty",
+ "fieldtype": "Float",
+ "in_list_view": 1,
+ "label": "Qty To Manufacture",
+ "oldfieldname": "qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "read_only": 0,
"reqd": 1
- },
+ },
{
- "depends_on": "production_item",
- "fieldname": "total_fixed_cost",
- "fieldtype": "Float",
- "label": "Total Fixed Cost",
+ "depends_on": "production_item",
+ "fieldname": "total_fixed_cost",
+ "fieldtype": "Float",
+ "label": "Total Fixed Cost",
"permlevel": 0
- },
+ },
{
"depends_on": "eval:doc.docstatus==1",
"description": "Automatically updated via Stock Entry of type Manufacture or Repack",
@@ -119,146 +119,160 @@
"oldfieldtype": "Currency",
"permlevel": 0,
"read_only": 1
- },
+ },
{
- "depends_on": "sales_order",
- "fieldname": "expected_delivery_date",
- "fieldtype": "Date",
- "label": "Expected Delivery Date",
- "permlevel": 0,
+ "depends_on": "sales_order",
+ "fieldname": "expected_delivery_date",
+ "fieldtype": "Date",
+ "label": "Expected Delivery Date",
+ "permlevel": 0,
"read_only": 1
- },
+ },
{
- "fieldname": "warehouses",
- "fieldtype": "Section Break",
- "label": "Warehouses",
- "options": "icon-building",
+ "fieldname": "start_date",
+ "fieldtype": "Datetime",
+ "label": "Start Date",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "fieldname": "end_date",
+ "fieldtype": "Datetime",
+ "label": "End Date",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "fieldname": "warehouses",
+ "fieldtype": "Section Break",
+ "label": "Warehouses",
+ "options": "icon-building",
"permlevel": 0
- },
+ },
{
- "depends_on": "production_item",
- "description": "Manufactured quantity will be updated in this warehouse",
- "fieldname": "fg_warehouse",
- "fieldtype": "Link",
- "in_list_view": 0,
- "label": "For Warehouse",
- "options": "Warehouse",
- "permlevel": 0,
- "read_only": 0,
+ "depends_on": "production_item",
+ "description": "Manufactured quantity will be updated in this warehouse",
+ "fieldname": "fg_warehouse",
+ "fieldtype": "Link",
+ "in_list_view": 0,
+ "label": "For Warehouse",
+ "options": "Warehouse",
+ "permlevel": 0,
+ "read_only": 0,
"reqd": 0
- },
+ },
{
- "fieldname": "column_break_12",
- "fieldtype": "Column Break",
+ "fieldname": "column_break_12",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "wip_warehouse",
- "fieldtype": "Link",
- "label": "Work-in-Progress Warehouse",
- "options": "Warehouse",
- "permlevel": 0,
+ "fieldname": "wip_warehouse",
+ "fieldtype": "Link",
+ "label": "Work-in-Progress Warehouse",
+ "options": "Warehouse",
+ "permlevel": 0,
"reqd": 0
- },
+ },
{
- "fieldname": "more_info",
- "fieldtype": "Section Break",
- "label": "More Info",
- "options": "icon-file-text",
- "permlevel": 0,
+ "fieldname": "more_info",
+ "fieldtype": "Section Break",
+ "label": "More Info",
+ "options": "icon-file-text",
+ "permlevel": 0,
"read_only": 0
- },
+ },
{
- "fieldname": "description",
- "fieldtype": "Small Text",
- "label": "Item Description",
- "permlevel": 0,
+ "fieldname": "description",
+ "fieldtype": "Small Text",
+ "label": "Item Description",
+ "permlevel": 0,
"read_only": 1
- },
+ },
{
- "fieldname": "project_name",
- "fieldtype": "Link",
- "in_filter": 1,
- "label": "Project Name",
- "oldfieldname": "project_name",
- "oldfieldtype": "Link",
- "options": "Project",
- "permlevel": 0,
+ "fieldname": "project_name",
+ "fieldtype": "Link",
+ "in_filter": 1,
+ "label": "Project Name",
+ "oldfieldname": "project_name",
+ "oldfieldtype": "Link",
+ "options": "Project",
+ "permlevel": 0,
"read_only": 0
- },
+ },
{
- "fieldname": "column_break2",
- "fieldtype": "Column Break",
- "permlevel": 0,
- "read_only": 0,
+ "fieldname": "column_break2",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "read_only": 0,
"width": "50%"
- },
+ },
{
- "depends_on": "production_item",
- "fieldname": "stock_uom",
- "fieldtype": "Link",
- "label": "Stock UOM",
- "oldfieldname": "stock_uom",
- "oldfieldtype": "Data",
- "options": "UOM",
- "permlevel": 0,
+ "depends_on": "production_item",
+ "fieldname": "stock_uom",
+ "fieldtype": "Link",
+ "label": "Stock UOM",
+ "oldfieldname": "stock_uom",
+ "oldfieldtype": "Data",
+ "options": "UOM",
+ "permlevel": 0,
"read_only": 1
- },
+ },
{
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "oldfieldname": "company",
- "oldfieldtype": "Link",
- "options": "Company",
- "permlevel": 0,
- "read_only": 0,
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "label": "Company",
+ "oldfieldname": "company",
+ "oldfieldtype": "Link",
+ "options": "Company",
+ "permlevel": 0,
+ "read_only": 0,
"reqd": 1
- },
+ },
{
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "ignore_user_permissions": 1,
- "label": "Amended From",
- "no_copy": 1,
- "oldfieldname": "amended_from",
- "oldfieldtype": "Data",
- "options": "Production Order",
- "permlevel": 0,
+ "fieldname": "amended_from",
+ "fieldtype": "Link",
+ "ignore_user_permissions": 1,
+ "label": "Amended From",
+ "no_copy": 1,
+ "oldfieldname": "amended_from",
+ "oldfieldtype": "Data",
+ "options": "Production Order",
+ "permlevel": 0,
"read_only": 1
}
- ],
- "icon": "icon-cogs",
- "idx": 1,
- "in_create": 0,
- "is_submittable": 1,
- "modified": "2014-09-15 11:45:48.591196",
- "modified_by": "Administrator",
- "module": "Manufacturing",
- "name": "Production Order",
- "owner": "Administrator",
+ ],
+ "icon": "icon-cogs",
+ "idx": 1,
+ "in_create": 0,
+ "is_submittable": 1,
+ "modified": "2014-10-27 13:42:31.476892",
+ "modified_by": "Administrator",
+ "module": "Manufacturing",
+ "name": "Production Order",
+ "owner": "Administrator",
"permissions": [
{
- "amend": 1,
- "apply_user_permissions": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Manufacturing User",
- "submit": 1,
+ "amend": 1,
+ "apply_user_permissions": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Manufacturing User",
+ "submit": 1,
"write": 1
- },
+ },
{
- "apply_user_permissions": 1,
- "permlevel": 0,
- "read": 1,
- "report": 1,
+ "apply_user_permissions": 1,
+ "permlevel": 0,
+ "read": 1,
+ "report": 1,
"role": "Material User"
}
]
-}
+}
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index fbca0d5..a68b3a1 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
-import frappe
+import frappe, json
from frappe.utils import flt, nowdate
from frappe import _
@@ -181,3 +181,27 @@
stock_entry.get_items()
return stock_entry.as_dict()
+
+@frappe.whitelist()
+def get_events(start, end, filters=None):
+ from frappe.desk.reportview import build_match_conditions
+ if not frappe.has_permission("Production Order"):
+ frappe.msgprint(_("No Permission"), raise_exception=1)
+
+ conditions = build_match_conditions("Production Order")
+ conditions = conditions and (" and " + conditions) or ""
+ if filters:
+ filters = json.loads(filters)
+ for key in filters:
+ if filters[key]:
+ conditions += " and " + key + ' = "' + filters[key].replace('"', '\"') + '"'
+
+ data = frappe.db.sql("""select name,production_item, start_date,end_date from `tabProduction Order`
+ where ((ifnull(start_date, '0000-00-00')!= '0000-00-00') \
+ and (start_date between %(start)s and %(end)s) \
+ or ((ifnull(start_date, '0000-00-00')!= '0000-00-00') \
+ and end_date between %(start)s and %(end)s)){conditions}""".format(conditions=conditions), {
+ "start": start,
+ "end": end
+ }, as_dict=True, update={"allDay": 0})
+ return data
diff --git a/erpnext/manufacturing/doctype/production_order/production_order_calendar.js b/erpnext/manufacturing/doctype/production_order/production_order_calendar.js
new file mode 100644
index 0000000..d4011a3
--- /dev/null
+++ b/erpnext/manufacturing/doctype/production_order/production_order_calendar.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+frappe.views.calendar["Production Order"] = {
+ field_map: {
+ "start": "start_date",
+ "end": "end_date",
+ "id": "name",
+ "title": "production_item",
+ "allDay": "allDay"
+ },
+ gantt: true,
+ filters: [
+ {
+ "fieldtype": "Link",
+ "fieldname": "sales_order",
+ "options": "Sales Order",
+ "label": __("Sales Order")
+ },
+ {
+ "fieldtype": "Link",
+ "fieldname": "production_item",
+ "options": "Item",
+ "label": __("Production Item")
+ },
+ {
+ "fieldtype": "Link",
+ "fieldname": "wip_warehouse",
+ "options": "Warehouse",
+ "label": __("WIP Warehouse")
+ }
+ ],
+ get_events_method: "erpnext.manufacturing.doctype.production_order.production_order.get_events"
+}
\ No newline at end of file