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