From bd9a275d5f7de3693d7fcb54b748e5f5934e19ef Mon Sep 17 00:00:00 2001 From: pawan Date: Fri, 2 Sep 2016 16:50:04 +0530 Subject: [PATCH 01/84] [fix] #6254 --- .../payment_request/payment_request.json | 53 +++++++++++- erpnext/hr/doctype/appraisal/appraisal.json | 53 +++++++++++- .../leave_allocation/leave_allocation.json | 68 ++++++++++++++- .../leave_application/leave_application.json | 84 ++++++++++++++++++- .../maintenance_schedule.json | 55 +++++++++++- .../maintenance_visit/maintenance_visit.json | 62 +++++++++++++- .../landed_cost_voucher.json | 47 ++++++++++- .../stock_reconciliation.json | 51 ++++++++++- 8 files changed, 455 insertions(+), 18 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index dc3fb2cc6c9..8dc03acf9c2 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -2,7 +2,7 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "PR.######", + "autoname": "naming_series:", "beta": 0, "creation": "2015-12-15 22:23:24.745065", "custom": 0, @@ -15,6 +15,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "PR.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "recipient_and_message", "fieldtype": "Section Break", "hidden": 0, @@ -40,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "", "fieldname": "print_format", "fieldtype": "Select", @@ -67,6 +96,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "email_to", "fieldtype": "Data", "hidden": 0, @@ -92,6 +122,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "subject", "fieldtype": "Data", "hidden": 0, @@ -117,6 +148,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_9", "fieldtype": "Column Break", "hidden": 0, @@ -141,6 +173,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "payment_gateway_account", "fieldtype": "Link", "hidden": 0, @@ -167,6 +200,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -193,6 +227,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Amount in customer's currency", "fieldname": "grand_total", "fieldtype": "Currency", @@ -220,6 +255,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -247,6 +283,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.reference_doctype==\"Sales Order\"", "fieldname": "make_sales_invoice", "fieldtype": "Check", @@ -273,6 +310,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_10", "fieldtype": "Section Break", "hidden": 0, @@ -297,6 +335,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "message", "fieldtype": "Small Text", "hidden": 0, @@ -322,6 +361,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "message_examples", "fieldtype": "HTML", "hidden": 0, @@ -348,6 +388,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "mute_email", "fieldtype": "Check", "hidden": 1, @@ -373,6 +414,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "payment_url", "fieldtype": "Data", "hidden": 1, @@ -399,6 +441,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "doc.payment_gateway_account", + "columns": 0, "fieldname": "section_break_7", "fieldtype": "Section Break", "hidden": 0, @@ -424,6 +467,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "payment_gateway", "fieldtype": "Read Only", "hidden": 0, @@ -450,6 +494,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "payment_account", "fieldtype": "Read Only", "hidden": 0, @@ -476,6 +521,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "reference_details", "fieldtype": "Section Break", "hidden": 0, @@ -501,6 +547,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "reference_doctype", "fieldtype": "Link", "hidden": 0, @@ -527,6 +574,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "reference_name", "fieldtype": "Dynamic Link", "hidden": 0, @@ -553,6 +601,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -585,7 +634,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-25 01:34:44.372161", + "modified": "2016-09-02 04:07:15.279949", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Request", diff --git a/erpnext/hr/doctype/appraisal/appraisal.json b/erpnext/hr/doctype/appraisal/appraisal.json index 3ca987bf135..1de189bd0d0 100644 --- a/erpnext/hr/doctype/appraisal/appraisal.json +++ b/erpnext/hr/doctype/appraisal/appraisal.json @@ -2,17 +2,20 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "APRSL.#####", + "autoname": "naming_series:", + "beta": 0, "creation": "2013-01-10 16:34:12", "custom": 0, "docstatus": 0, "doctype": "DocType", "document_type": "Setup", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "employee_details", "fieldtype": "Section Break", "hidden": 0, @@ -38,6 +41,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "APRSL.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "description": "", "fieldname": "kra_template", "fieldtype": "Link", @@ -66,6 +97,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "description": "", "fieldname": "employee", @@ -95,6 +127,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "employee_name", "fieldtype": "Data", @@ -122,6 +155,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "column_break0", "fieldtype": "Column Break", @@ -148,6 +182,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "depends_on": "kra_template", "fieldname": "status", @@ -177,6 +212,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "start_date", "fieldtype": "Date", @@ -204,6 +240,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "end_date", "fieldtype": "Date", @@ -231,6 +268,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "section_break0", "fieldtype": "Section Break", @@ -258,6 +296,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "goals", "fieldtype": "Table", "hidden": 0, @@ -285,6 +324,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "calculate_total_score", "fieldtype": "Button", "hidden": 0, @@ -311,6 +351,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_score", "fieldtype": "Float", "hidden": 0, @@ -337,6 +378,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "section_break1", "fieldtype": "Section Break", @@ -361,6 +403,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Any other remarks, noteworthy effort that should go in the records.", "fieldname": "remarks", "fieldtype": "Text", @@ -386,6 +429,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "kra_template", "fieldname": "other_details", "fieldtype": "Section Break", @@ -411,6 +455,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -438,6 +483,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_17", "fieldtype": "Column Break", "hidden": 0, @@ -462,6 +508,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 1, @@ -491,13 +538,14 @@ "hide_toolbar": 0, "icon": "icon-thumbs-up", "idx": 1, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-04-13 01:49:09.748819", + "modified": "2016-09-02 03:07:02.731236", "modified_by": "Administrator", "module": "HR", "name": "Appraisal", @@ -564,6 +612,7 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "search_fields": "status, employee, employee_name", diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.json b/erpnext/hr/doctype/leave_allocation/leave_allocation.json index 20765d3b9c4..4e768c17c9e 100644 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation.json +++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.json @@ -2,21 +2,25 @@ "allow_copy": 0, "allow_import": 1, "allow_rename": 0, - "autoname": "LAL/.#####", + "autoname": "naming_series:", + "beta": 0, "creation": "2013-02-20 19:10:38", "custom": 0, "docstatus": 0, "doctype": "DocType", "document_type": "Setup", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -36,10 +40,39 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "LAL/", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "employee", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 1, "label": "Employee", @@ -62,10 +95,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "employee_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 1, "label": "Employee Name", @@ -85,10 +120,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -108,10 +145,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "description", "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Description", @@ -134,10 +173,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_6", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -157,10 +198,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "leave_type", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 1, "label": "Leave Type", @@ -183,10 +226,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "from_date", "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "From Date", @@ -207,10 +252,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "to_date", "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "To Date", @@ -231,10 +278,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_10", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -254,10 +303,12 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "new_leaves_allocated", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "New Leaves Allocated", @@ -277,11 +328,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "carry_forward", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Add unused leaves from previous allocations", @@ -301,11 +354,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "carry_forward", "fieldname": "carry_forwarded_leaves", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Unused leaves", @@ -325,10 +380,12 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_leaves_allocated", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Total Leaves Allocated", @@ -348,10 +405,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 1, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Amended From", @@ -375,13 +434,14 @@ "hide_toolbar": 0, "icon": "icon-ok", "idx": 1, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-02-03 01:16:35.435720", + "modified": "2016-09-01 15:09:42.311292", "modified_by": "Administrator", "module": "HR", "name": "Leave Allocation", @@ -428,10 +488,12 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "search_fields": "employee,employee_name,leave_type,total_leaves_allocated", "sort_field": "modified", "sort_order": "DESC", - "timeline_field": "employee" + "timeline_field": "employee", + "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json index 9fed1803701..ad8f670a863 100644 --- a/erpnext/hr/doctype/leave_application/leave_application.json +++ b/erpnext/hr/doctype/leave_application/leave_application.json @@ -3,22 +3,53 @@ "allow_import": 0, "allow_rename": 0, "autoname": "LAP/.#####", + "beta": 0, "creation": "2013-02-20 11:18:11", "custom": 0, "description": "Apply / Approve Leaves", "docstatus": 0, "doctype": "DocType", "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "LAP/.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "default": "Open", "fieldname": "status", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Status", @@ -39,10 +70,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_12", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -62,10 +95,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "leave_type", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 1, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 0, "label": "Leave Type", @@ -86,10 +121,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "leave_balance", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Leave Balance Before Application", @@ -109,10 +146,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_5", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -132,10 +171,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "from_date", "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "From Date", @@ -155,10 +196,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "to_date", "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "To Date", @@ -178,10 +221,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "half_day", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Half Day", @@ -201,10 +246,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_leave_days", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Total Leave Days", @@ -224,10 +271,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -248,10 +297,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "description", "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Reason", @@ -271,10 +322,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_7", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -294,10 +347,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "employee", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 0, "label": "Employee", @@ -318,10 +373,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "employee_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 0, "label": "Employee Name", @@ -341,10 +398,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_15", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -364,11 +423,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "leave_approver", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 1, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Leave Approver", @@ -389,10 +450,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "leave_approver_name", "fieldtype": "Read Only", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Leave Approver Name", @@ -413,10 +476,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sb10", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "", @@ -436,11 +501,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "posting_date", "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Posting Date", @@ -460,11 +527,13 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "default": "1", "fieldname": "follow_via_email", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Follow via Email", @@ -484,10 +553,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_17", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -506,10 +577,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Company", @@ -530,10 +603,12 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 1, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Letter Head", @@ -554,10 +629,12 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 1, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Amended From", @@ -579,13 +656,14 @@ "hide_toolbar": 0, "icon": "icon-calendar", "idx": 1, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 3, - "modified": "2016-02-03 01:18:00.202671", + "modified": "2016-09-02 03:49:26.139593", "modified_by": "Administrator", "module": "HR", "name": "Leave Application", @@ -735,11 +813,13 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "search_fields": "employee,employee_name,leave_type,from_date,to_date,total_leave_days", "sort_field": "modified", "sort_order": "DESC", "timeline_field": "employee", - "title_field": "employee_name" + "title_field": "employee_name", + "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json index 77ded222579..cf030936a69 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json @@ -2,18 +2,20 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "MS.#####", + "autoname": "naming_series:", "beta": 0, "creation": "2013-01-10 16:34:30", "custom": 0, "docstatus": 0, "doctype": "DocType", "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_details", "fieldtype": "Section Break", "hidden": 0, @@ -40,6 +42,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "MS.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "customer", "fieldtype": "Link", "hidden": 0, @@ -67,6 +97,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -91,6 +122,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -119,6 +151,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "transaction_date", "fieldtype": "Date", "hidden": 0, @@ -145,6 +178,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -171,6 +205,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -198,6 +233,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "schedule", "fieldtype": "Section Break", "hidden": 0, @@ -224,6 +260,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "generate_schedule", "fieldtype": "Button", "hidden": 0, @@ -249,6 +286,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "schedules", "fieldtype": "Table", "hidden": 0, @@ -276,6 +314,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_info", "fieldtype": "Section Break", "hidden": 0, @@ -300,6 +339,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "customer_name", "fieldtype": "Data", @@ -327,6 +367,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "contact_person", "fieldtype": "Link", @@ -353,6 +394,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "contact_mobile", "fieldtype": "Data", @@ -378,6 +420,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "contact_email", "fieldtype": "Data", @@ -403,6 +446,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 1, @@ -427,6 +471,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_17", "fieldtype": "Column Break", "hidden": 0, @@ -450,6 +495,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "customer_address", "fieldtype": "Link", @@ -476,6 +522,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 1, @@ -500,6 +547,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "description": "", "fieldname": "territory", @@ -529,6 +577,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "description": "", "fieldname": "customer_group", @@ -556,6 +605,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -583,6 +633,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -616,7 +667,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-06-29 12:56:00.801674", + "modified": "2016-09-02 04:05:12.265769", "modified_by": "Administrator", "module": "Maintenance", "name": "Maintenance Schedule", diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json index 07ff4502ced..e06204d710d 100644 --- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json +++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json @@ -2,17 +2,20 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "MV.#####", + "autoname": "naming_series:", "beta": 0, "creation": "2013-01-10 16:34:31", "custom": 0, "docstatus": 0, "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_details", "fieldtype": "Section Break", "hidden": 0, @@ -39,6 +42,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -63,6 +67,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "MV.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "customer", "fieldtype": "Link", "hidden": 0, @@ -90,6 +122,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "customer_name", "fieldtype": "Data", "hidden": 1, @@ -114,6 +147,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 1, @@ -138,6 +172,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 1, @@ -162,6 +197,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Data", "hidden": 1, @@ -186,6 +222,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Data", "hidden": 1, @@ -210,6 +247,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -235,6 +273,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "mntc_date", "fieldtype": "Date", @@ -262,6 +301,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "mntc_time", "fieldtype": "Time", "hidden": 0, @@ -288,6 +328,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "maintenance_details", "fieldtype": "Section Break", "hidden": 0, @@ -314,6 +355,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "completion_status", "fieldtype": "Select", "hidden": 0, @@ -341,6 +383,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_14", "fieldtype": "Column Break", "hidden": 0, @@ -364,6 +407,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Unscheduled", "fieldname": "maintenance_type", "fieldtype": "Select", @@ -392,6 +436,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break0", "fieldtype": "Section Break", "hidden": 0, @@ -417,6 +462,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "purposes", "fieldtype": "Table", "hidden": 0, @@ -444,6 +490,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -470,6 +517,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_feedback", "fieldtype": "Small Text", "hidden": 0, @@ -496,6 +544,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break3", "fieldtype": "Column Break", "hidden": 0, @@ -519,6 +568,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Data", @@ -547,6 +597,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -575,6 +626,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -602,6 +654,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "contact_info_section", "fieldtype": "Section Break", @@ -628,6 +681,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_address", "fieldtype": "Link", "hidden": 0, @@ -653,6 +707,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_person", "fieldtype": "Link", "hidden": 0, @@ -678,6 +733,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break4", "fieldtype": "Column Break", "hidden": 0, @@ -701,6 +757,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "territory", "fieldtype": "Link", @@ -727,6 +784,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "customer_group", "fieldtype": "Link", @@ -761,7 +819,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-06-29 12:55:51.677519", + "modified": "2016-09-02 04:04:32.658556", "modified_by": "Administrator", "module": "Maintenance", "name": "Maintenance Visit", diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json index c947b7b0d07..2eedd09df9b 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json +++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json @@ -2,17 +2,47 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "LCV.####", + "autoname": "naming_series:", + "beta": 0, "creation": "2014-07-11 11:33:42.547339", "custom": 0, "docstatus": 0, "doctype": "DocType", "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "LCV.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -38,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "purchase_receipts", "fieldtype": "Table", "hidden": 0, @@ -63,6 +94,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "get_items_from_purchase_receipts", "fieldtype": "Button", "hidden": 0, @@ -87,6 +119,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -112,6 +145,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -137,6 +171,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sec_break1", "fieldtype": "Section Break", "hidden": 0, @@ -162,6 +197,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -187,6 +223,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -212,6 +249,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break1", "fieldtype": "Column Break", "hidden": 0, @@ -236,6 +274,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Amount", "fieldname": "distribute_charges_based_on", "fieldtype": "Select", @@ -263,6 +302,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sec_break2", "fieldtype": "Section Break", "hidden": 0, @@ -287,6 +327,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "landed_cost_help", "fieldtype": "HTML", "hidden": 0, @@ -313,13 +354,14 @@ "hide_toolbar": 0, "icon": "icon-usd", "idx": 0, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-03-31 06:04:21.629139", + "modified": "2016-09-02 03:31:51.521448", "modified_by": "Administrator", "module": "Stock", "name": "Landed Cost Voucher", @@ -347,6 +389,7 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "sort_field": "modified", diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json index 21362b53ca7..8a0090e4d8e 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -2,17 +2,47 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "SR/.######", + "autoname": "naming_series:", + "beta": 0, "creation": "2013-03-28 10:35:31", "custom": 0, "description": "This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.", "docstatus": 0, "doctype": "DocType", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "SR/.", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "posting_date", "fieldtype": "Date", @@ -40,6 +70,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "posting_time", "fieldtype": "Time", "hidden": 0, @@ -66,6 +97,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col1", "fieldtype": "Column Break", "hidden": 0, @@ -89,6 +121,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -114,6 +147,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -139,6 +173,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sb9", "fieldtype": "Section Break", "hidden": 0, @@ -163,6 +198,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -189,6 +225,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_9", "fieldtype": "Section Break", "hidden": 0, @@ -213,6 +250,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", "fieldname": "expense_account", "fieldtype": "Link", @@ -239,6 +277,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", "fieldname": "cost_center", "fieldtype": "Link", @@ -265,6 +304,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "reconciliation_json", "fieldtype": "Long Text", "hidden": 1, @@ -289,6 +329,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_13", "fieldtype": "Column Break", "hidden": 0, @@ -313,6 +354,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "difference_amount", "fieldtype": "Currency", "hidden": 0, @@ -339,6 +381,7 @@ "hide_toolbar": 0, "icon": "icon-upload-alt", "idx": 1, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, @@ -346,7 +389,7 @@ "istable": 0, "max_attachments": 1, "menu_index": 0, - "modified": "2016-03-04 00:42:42.691439", + "modified": "2016-09-02 04:09:18.909485", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation", @@ -373,9 +416,11 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "search_fields": "posting_date", "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "track_seen": 0 } \ No newline at end of file From 560ba391f91daf93b62046c1be41463d3b425474 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 29 Aug 2016 18:19:32 +0530 Subject: [PATCH 02/84] [Enhancement] Purchase return for rejected qty --- .../purchase_common/purchase_common.js | 31 ++----- erpnext/controllers/buying_controller.py | 4 +- .../controllers/sales_and_purchase_return.py | 87 ++++++++++++++----- 3 files changed, 76 insertions(+), 46 deletions(-) diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js index ccf7a2faec9..3083acb325a 100644 --- a/erpnext/buying/doctype/purchase_common/purchase_common.js +++ b/erpnext/buying/doctype/purchase_common/purchase_common.js @@ -138,20 +138,15 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ }, qty: function(doc, cdt, cdn) { + var item = frappe.get_doc(cdt, cdn); if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && doc.update_stock)) { - var item = frappe.get_doc(cdt, cdn); frappe.model.round_floats_in(item, ["qty", "received_qty"]); if(!(item.received_qty || item.rejected_qty) && item.qty) { item.received_qty = item.qty; } - if(item.qty > item.received_qty) { - msgprint(__("Error: {0} > {1}", [__(frappe.meta.get_label(item.doctype, "qty", item.name)), - __(frappe.meta.get_label(item.doctype, "received_qty", item.name))])) - item.qty = item.rejected_qty = 0.0; - } else { - item.rejected_qty = flt(item.received_qty - item.qty, precision("rejected_qty", item)); - } + frappe.model.round_floats_in(item, ["qty", "received_qty"]); + item.rejected_qty = flt(item.received_qty - item.qty, precision("rejected_qty", item)); } this._super(doc, cdt, cdn); @@ -160,26 +155,18 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ }, received_qty: function(doc, cdt, cdn) { - var item = frappe.get_doc(cdt, cdn); - frappe.model.round_floats_in(item, ["qty", "received_qty"]); - - item.qty = (item.qty < item.received_qty) ? item.qty : item.received_qty; - this.qty(doc, cdt, cdn); + this.calculate_accepted_qty(doc, cdt, cdn) }, rejected_qty: function(doc, cdt, cdn) { + this.calculate_accepted_qty(doc, cdt, cdn) + }, + + calculate_accepted_qty: function(doc, cdt, cdn){ var item = frappe.get_doc(cdt, cdn); frappe.model.round_floats_in(item, ["received_qty", "rejected_qty"]); - if(item.rejected_qty > item.received_qty) { - msgprint(__("Error: {0} > {1}", [__(frappe.meta.get_label(item.doctype, "rejected_qty", item.name)), - __(frappe.meta.get_label(item.doctype, "received_qty", item.name))])); - item.qty = item.rejected_qty = 0.0; - } else { - - item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item)); - } - + item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item)); this.qty(doc, cdt, cdn); }, diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 88acfb7c176..f7181d7ea56 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -37,7 +37,7 @@ class BuyingController(StockController): self.validate_purchase_receipt_if_update_stock() if self.doctype=="Purchase Receipt" or (self.doctype=="Purchase Invoice" and self.update_stock): - self.validate_purchase_return() + # self.validate_purchase_return() self.validate_rejected_warehouse() self.validate_accepted_rejected_qty() @@ -346,7 +346,7 @@ class BuyingController(StockController): }) sl_entries.append(sle) - if flt(d.rejected_qty) > 0: + if flt(d.rejected_qty) != 0: sl_entries.append(self.get_sl_entries(d, { "warehouse": d.rejected_warehouse, "actual_qty": flt(d.rejected_qty) * flt(d.conversion_factor), diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 8d30247acf5..ae03a3562c9 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -53,13 +53,15 @@ def validate_returned_items(doc): valid_items = frappe._dict() - select_fields = "item_code, qty" if doc.doctype=="Purchase Invoice" \ - else "item_code, qty, serial_no, batch_no" + select_fields = "item_code, qty, parenttype" if doc.doctype=="Purchase Invoice" \ + else "item_code, qty, serial_no, batch_no, parenttype" + + if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: + select_fields += ",rejected_qty, received_qty" for d in frappe.db.sql("""select {0} from `tab{1} Item` where parent = %s""" .format(select_fields, doc.doctype), doc.return_against, as_dict=1): valid_items = get_ref_item_dict(valid_items, d) - if doc.doctype in ("Delivery Note", "Sales Invoice"): for d in frappe.db.sql("""select item_code, qty, serial_no, batch_no from `tabPacked Item` @@ -73,21 +75,15 @@ def validate_returned_items(doc): items_returned = False for d in doc.get("items"): - if flt(d.qty) < 0: + if flt(d.qty) < 0 or d.get('received_qty') < 0: if d.item_code not in valid_items: frappe.throw(_("Row # {0}: Returned Item {1} does not exists in {2} {3}") .format(d.idx, d.item_code, doc.doctype, doc.return_against)) else: ref = valid_items.get(d.item_code, frappe._dict()) - already_returned_qty = flt(already_returned_items.get(d.item_code)) - max_return_qty = flt(ref.qty) - already_returned_qty + validate_quantity(doc, d, ref, valid_items, already_returned_items) - if already_returned_qty >= ref.qty: - frappe.throw(_("Item {0} has already been returned").format(d.item_code), StockOverReturnError) - elif abs(d.qty) > max_return_qty: - frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}") - .format(d.idx, ref.qty, d.item_code), StockOverReturnError) - elif ref.batch_no and d.batch_no not in ref.batch_no: + if ref.batch_no and d.batch_no not in ref.batch_no: frappe.throw(_("Row # {0}: Batch No must be same as {1} {2}") .format(d.idx, doc.doctype, doc.return_against)) elif ref.serial_no: @@ -107,18 +103,45 @@ def validate_returned_items(doc): if not items_returned: frappe.throw(_("Atleast one item should be entered with negative quantity in return document")) - + +def validate_quantity(doc, args, ref, valid_items, already_returned_items): + fields = ['qty'] + if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: + fields.extend(['received_qty', 'rejected_qty']) + + already_returned_data = already_returned_items.get(args.item_code) or {} + + for column in fields: + return_qty = flt(already_returned_data.get(column, 0)) if len(already_returned_data) > 0 else 0 + referenced_qty = ref.get(column) + max_return_qty = flt(referenced_qty) - return_qty + label = column.replace('_', ' ').title() + + if flt(args.get(column)) > 0: + frappe.throw(_("{0} must be negative in return document").format(label)) + elif return_qty >= referenced_qty and flt(args.get(column)) != 0: + frappe.throw(_("Item {0} has already been returned").format(args.item_code), StockOverReturnError) + elif abs(args.get(column)) > max_return_qty: + frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}") + .format(args.idx, referenced_qty, args.item_code), StockOverReturnError) + def get_ref_item_dict(valid_items, ref_item_row): from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos valid_items.setdefault(ref_item_row.item_code, frappe._dict({ "qty": 0, + "rejected_qty": 0, + "received_qty": 0, "serial_no": [], "batch_no": [] })) item_dict = valid_items[ref_item_row.item_code] item_dict["qty"] += ref_item_row.qty - + + if ref_item_row.parenttype in ['Purchase Invoice', 'Purchase Receipt']: + item_dict["received_qty"] += ref_item_row.received_qty + item_dict["rejected_qty"] += ref_item_row.rejected_qty + if ref_item_row.get("serial_no"): item_dict["serial_no"] += get_serial_nos(ref_item_row.serial_no) @@ -128,16 +151,30 @@ def get_ref_item_dict(valid_items, ref_item_row): return valid_items def get_already_returned_items(doc): - return frappe._dict(frappe.db.sql(""" - select - child.item_code, sum(abs(child.qty)) as qty + column = 'child.item_code, sum(abs(child.qty)) as qty' + if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: + column += ', sum(abs(child.rejected_qty)) as rejected_qty, sum(abs(child.received_qty)) as received_qty' + + data = frappe.db.sql(""" + select {0} from - `tab{0} Item` child, `tab{1}` par + `tab{1} Item` child, `tab{2}` par where child.parent = par.name and par.docstatus = 1 - and par.is_return = 1 and par.return_against = %s and child.qty < 0 + and par.is_return = 1 and par.return_against = %s group by item_code - """.format(doc.doctype, doc.doctype), doc.return_against)) + """.format(column, doc.doctype, doc.doctype), doc.return_against, as_dict=1) + + items = {} + + for d in data: + items.setdefault(d.item_code, frappe._dict({ + "qty": d.get("qty"), + "received_qty": d.get("received_qty"), + "rejected_qty": d.get("rejected_qty") + })) + + return items def make_return_doc(doctype, source_name, target_doc=None): from frappe.model.mapper import get_mapped_doc @@ -166,12 +203,18 @@ def make_return_doc(doctype, source_name, target_doc=None): def update_item(source_doc, target_doc, source_parent): target_doc.qty = -1* source_doc.qty if doctype == "Purchase Receipt": - target_doc.received_qty = -1* source_doc.qty + target_doc.received_qty = -1* source_doc.received_qty + target_doc.rejected_qty = -1* source_doc.rejected_qty + target_doc.qty = -1* source_doc.qty target_doc.purchase_order = source_doc.purchase_order + target_doc.rejected_warehouse = source_doc.rejected_warehouse elif doctype == "Purchase Invoice": - target_doc.received_qty = -1* source_doc.qty + target_doc.received_qty = -1* source_doc.received_qty + target_doc.rejected_qty = -1* source_doc.rejected_qty + target_doc.qty = -1* source_doc.qty target_doc.purchase_order = source_doc.purchase_order target_doc.purchase_receipt = source_doc.purchase_receipt + target_doc.rejected_warehouse = source_doc.rejected_warehouse target_doc.po_detail = source_doc.po_detail target_doc.pr_detail = source_doc.pr_detail elif doctype == "Delivery Note": From cc1c7ad2dfa14ef2deda6376252984520bedecdb Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 2 Sep 2016 16:19:10 +0530 Subject: [PATCH 03/84] added test cases --- .../purchase_receipt/test_purchase_receipt.py | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index eba9201cb40..f961cdd1efc 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -125,7 +125,7 @@ class TestPurchaseReceipt(unittest.TestCase): pr = make_purchase_receipt() return_pr = make_purchase_receipt(is_return=1, return_against=pr.name, qty=-2) - + # check sle outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Purchase Receipt", "voucher_no": return_pr.name}, "outgoing_rate") @@ -148,7 +148,21 @@ class TestPurchaseReceipt(unittest.TestCase): self.assertEquals(expected_values[gle.account][1], gle.credit) set_perpetual_inventory(0) + + def test_purchase_return_for_rejected_qty(self): + set_perpetual_inventory() + + pr = make_purchase_receipt(received_qty=4, qty=2) + + return_pr = make_purchase_receipt(is_return=1, return_against=pr.name, received_qty = -4, qty=-2) + + actual_qty = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Purchase Receipt", + "voucher_no": return_pr.name, 'warehouse': return_pr.items[0].rejected_warehouse}, "actual_qty") + self.assertEqual(actual_qty, -2) + + set_perpetual_inventory(0) + def test_purchase_return_for_serialized_items(self): def _check_serial_no_values(serial_no, field_values): serial_no = frappe.get_doc("Serial No", serial_no) @@ -248,17 +262,23 @@ def make_purchase_receipt(**args): pr.currency = args.currency or "INR" pr.is_return = args.is_return pr.return_against = args.return_against - + qty = args.qty or 5 + received_qty = args.received_qty or qty + rejected_qty = args.rejected_qty or flt(received_qty) - flt(qty) + pr.append("items", { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", - "qty": args.qty or 5, - "received_qty": args.qty or 5, + "qty": qty, + "received_qty": received_qty, + "rejected_qty": rejected_qty, + "rejected_warehouse": args.rejected_warehouse or "_Test Rejected Warehouse - _TC" if rejected_qty != 0 else "", "rate": args.rate or 50, "conversion_factor": 1.0, "serial_no": args.serial_no, "stock_uom": "_Test UOM" }) + if not args.do_not_save: pr.insert() if not args.do_not_submit: From 8693b5c93ae82c81b27cc1dab9b793d9d8882a4c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sun, 4 Sep 2016 10:31:41 +0530 Subject: [PATCH 04/84] Minor fixes --- .../accounts/doctype/payment_entry/payment_entry.js | 6 ++++++ .../doctype/payment_entry/payment_entry.json | 4 ++-- .../doctype/payment_entry/payment_entry_list.js | 6 ------ erpnext/controllers/queries.py | 3 ++- .../maintenance_schedule/maintenance_schedule.py | 13 ++++++++----- .../daily_timesheet_summary.py | 8 +++++--- 6 files changed, 23 insertions(+), 17 deletions(-) delete mode 100644 erpnext/accounts/doctype/payment_entry/payment_entry_list.js diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index 4578f308b34..695a7215531 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -226,6 +226,12 @@ frappe.ui.form.on('Payment Entry', { party: function(frm) { if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party) { + if(!frm.doc.posting_date) { + frappe.msgprint(__("Please select Posting Date before selecting Party")) + frm.set_value("party", ""); + return ; + } + frm.set_party_account_based_on_party = true; return frappe.call({ diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json index 43d43ca9d73..2057d07d831 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.json +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json @@ -75,7 +75,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_list_view": 0, + "in_list_view": 1, "label": "Payment Type", "length": 0, "no_copy": 0, @@ -1426,7 +1426,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-02 11:34:14.817383", + "modified": "2016-09-05 11:06:18.183458", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Entry", diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js deleted file mode 100644 index 81230d08204..00000000000 --- a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js +++ /dev/null @@ -1,6 +0,0 @@ -frappe.listview_settings['Payment Entry'] = { - add_fields: ["payment_type"], - get_indicator: function(doc) { - return [__(doc.payment_type), (doc.docstatus==0 ? 'red' : 'blue'), 'status=' + doc.payment_type] - } -} diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 0debe4aced6..6da496ba174 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -17,7 +17,8 @@ def get_filters_cond(doctype, filters, conditions): if isinstance(f[1], basestring) and f[1][0] == '!': flt.append([doctype, f[0], '!=', f[1][1:]]) else: - flt.append([doctype, f[0], '=', f[1]]) + value = frappe.db.escape(f[1]) if isinstance(f[1], basestring) else f[1] + flt.append([doctype, f[0], '=', value]) query = DatabaseQuery(doctype) query.filters = flt diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py index 4cbccafb152..e77b90f958e 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py @@ -187,14 +187,17 @@ class MaintenanceSchedule(TransactionBase): if not sr_details: frappe.throw(_("Serial No {0} not found").format(serial_no)) - if sr_details.warranty_expiry_date and sr_details.warranty_expiry_date>=amc_start_date: - throw(_("Serial No {0} is under warranty upto {1}").format(serial_no, sr_details.warranty_expiry_date)) + if sr_details.warranty_expiry_date \ + and getdate(sr_details.warranty_expiry_date) >= getdate(amc_start_date): + throw(_("Serial No {0} is under warranty upto {1}") + .format(serial_no, sr_details.warranty_expiry_date)) - if sr_details.amc_expiry_date and sr_details.amc_expiry_date >= amc_start_date: - throw(_("Serial No {0} is under maintenance contract upto {1}").format(serial_no, sr_details.amc_start_date)) + if sr_details.amc_expiry_date and getdate(sr_details.amc_expiry_date) >= getdate(amc_start_date): + throw(_("Serial No {0} is under maintenance contract upto {1}") + .format(serial_no, sr_details.amc_start_date)) if not sr_details.warehouse and sr_details.delivery_date and \ - sr_details.delivery_date >= amc_start_date: + getdate(sr_details.delivery_date) >= getdate(amc_start_date): throw(_("Maintenance start date can not be before delivery date for Serial No {0}") .format(serial_no)) diff --git a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py index ab0b4a12e70..cc854a4ac74 100644 --- a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py +++ b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py @@ -12,8 +12,9 @@ def execute(filters=None): filters["from_time"] = "00:00:00" filters["to_time"] = "24:00:00" - columns = [_("Timesheet") + ":Link/Timesheet:120", _("Employee") + "::150", _("From Datetime") + "::140", - _("To Datetime") + "::140", _("Hours") + "::70", _("Activity Type") + "::120", _("Task") + ":Link/Task:150", + columns = [_("Timesheet") + ":Link/Timesheet:120", _("Employee") + "::150", _("Employee Name") + "::150", + _("From Datetime") + "::140", _("To Datetime") + "::140", _("Hours") + "::70", + _("Activity Type") + "::120", _("Task") + ":Link/Task:150", _("Project") + ":Link/Project:120", _("Status") + "::70"] conditions = "ts.docstatus = 1" @@ -27,7 +28,8 @@ def execute(filters=None): return columns, data def get_data(conditions, filters): - time_sheet = frappe.db.sql(""" select ts.name, ts.employee, tsd.from_time, tsd.to_time, tsd.hours, + time_sheet = frappe.db.sql(""" select ts.name, ts.employee, ts.employee_name, + tsd.from_time, tsd.to_time, tsd.hours, tsd.activity_type, tsd.task, tsd.project, ts.status from `tabTimesheet Detail` tsd, `tabTimesheet` ts where ts.name = tsd.parent and %s order by ts.name"""%(conditions), filters, as_list=1) From 906552a4014242db769c0c8577803116685724aa Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 5 Sep 2016 14:35:23 +0530 Subject: [PATCH 05/84] Notifications filters for DN, PR and PI --- erpnext/startup/notifications.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py index 991114d5160..58a2c79e9f3 100644 --- a/erpnext/startup/notifications.py +++ b/erpnext/startup/notifications.py @@ -22,12 +22,21 @@ def get_notification_config(): "docstatus": ("<", 2) }, "Journal Entry": {"docstatus": 0}, - "Sales Invoice": { "outstanding_amount": (">", 0), "docstatus": ("<", 2) }, - "Purchase Invoice": {"docstatus": 0}, + "Sales Invoice": { + "outstanding_amount": (">", 0), + "docstatus": ("<", 2) + }, + "Purchase Invoice": { + "outstanding_amount": (">", 0), + "docstatus": ("<", 2) + }, "Leave Application": {"status": "Open"}, "Expense Claim": {"approval_status": "Draft"}, "Job Applicant": {"status": "Open"}, - "Delivery Note": {"docstatus": 0}, + "Delivery Note": { + "status": ("not in", ("Completed", "Closed")), + "docstatus": ("<", 2) + }, "Stock Entry": {"docstatus": 0}, "Material Request": { "docstatus": ("<", 2), @@ -40,7 +49,10 @@ def get_notification_config(): "status": ("not in", ("Completed", "Closed")), "docstatus": ("<", 2) }, - "Purchase Receipt": {"docstatus": 0}, + "Purchase Receipt": { + "status": ("not in", ("Completed", "Closed")), + "docstatus": ("<", 2) + }, "Production Order": { "status": ("in", ("Draft", "Not Started", "In Process")) }, "BOM": {"docstatus": 0}, "Timesheet": {"status": "Draft"} From 4cb58c410a9197baca2f936348cacecc96795aee Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 5 Sep 2016 15:14:26 +0530 Subject: [PATCH 06/84] Minor fix in maintenance schedule --- .../doctype/maintenance_schedule/maintenance_schedule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py index e77b90f958e..5f8296753d2 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py @@ -58,7 +58,7 @@ class MaintenanceSchedule(TransactionBase): if no_email_sp: frappe.msgprint( frappe._("Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}").format( - self.owner, "
"+no_email_sp.join("
") + self.owner, "
" + "
".join(no_email_sp) )) scheduled_date = frappe.db.sql("""select scheduled_date from From 911e9caa43fa6606a76bb5acf15fe3507620de67 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 5 Sep 2016 16:13:48 +0600 Subject: [PATCH 07/84] bumped to version 7.0.39 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 8177c2998c8..6018a4ca1f3 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.38' +__version__ = '7.0.39' def get_default_company(user=None): '''Get default company for user''' From ca627fb806599e52819c451ba554a238910991e6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 5 Sep 2016 16:16:53 +0530 Subject: [PATCH 08/84] [fix] Fetch advance journal entry in invoice if it is tagged against linked order --- erpnext/controllers/accounts_controller.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 432d09a987a..8927da7f784 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -662,7 +662,7 @@ def get_advance_journal_entries(party_type, party, party_account, amount_field, .format(order_doctype, order_condition)) reference_condition = " and (" + " or ".join(conditions) + ")" if conditions else "" - + journal_entries = frappe.db.sql(""" select "Journal Entry" as reference_type, t1.name as reference_name, @@ -674,8 +674,7 @@ def get_advance_journal_entries(party_type, party, party_account, amount_field, t1.name = t2.parent and t2.account = %s and t2.party_type = %s and t2.party = %s and t2.is_advance = 'Yes' and t1.docstatus = 1 - and {1} > 0 - and (ifnull(t2.reference_name, '')='' {2}) + and {1} > 0 {2} order by t1.posting_date""".format(amount_field, dr_or_cr, reference_condition), [party_account, party_type, party] + order_list, as_dict=1) From 377c7acd53eafd17b7d262f4b6b977abb3921dd9 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 5 Sep 2016 17:56:44 +0530 Subject: [PATCH 09/84] [POS] Added offline_pos_name in print format --- erpnext/accounts/page/pos/pos.js | 1 + .../accounts/print_format/point_of_sale/point_of_sale.json | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 5947bde878e..234f9623f78 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -775,6 +775,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.update_invoice() }else{ this.name = $.now(); + this.frm.doc.offline_pos_name = this.name; this.frm.doc.posting_date = frappe.datetime.get_today(); this.frm.doc.posting_time = frappe.datetime.now_time(); invoice_data[this.name] = this.frm.doc diff --git a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json index 605c0326b36..773f7fc8e35 100644 --- a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json +++ b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json @@ -6,9 +6,9 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "html": "\n\n

\n\t{{ company }}
\n\t{{ __(\"Invoice\") }}
\n

\n

\n\t{{ __(\"Date\") }}: {{ dateutil.global_date_format(posting_date) }}
\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{% for item in items %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endfor %}\n\t\n
{{ __(\"Item\") }}{{ __(\"Qty\") }}{{ __(\"Amount\") }}
\n\t\t\t\t{{ item.item_name }}\n\t\t\t{{ format_number(item.qty, precision(\"difference\")) }}
@ {{ format_currency(item.rate, currency) }}
{{ format_currency(item.amount, currency) }}
\n\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% for row in taxes %}\n\t\t{% if not row.included_in_print_rate %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t{% endfor %}\n\t\t{% if discount_amount %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
\n\t\t\t\t{{ __(\"Net Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(total, currency) }}\n\t\t\t
\n\t\t\t\t{{ row.description }}\n\t\t\t\n\t\t\t\t{{ format_currency(row.tax_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(discount_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(grand_total, currency) }}\n\t\t\t
\n\n\n
\n

{{ __(\"Thank you, please visit again.\") }}

", + "html": "\n\n

\n\t{{ company }}
\n\t{{ __(\"POS No : \") }}{{offline_pos_name}}
\n

\n

\n\t{{ __(\"Date\") }}: {{ dateutil.global_date_format(posting_date) }}
\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{% for item in items %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endfor %}\n\t\n
{{ __(\"Item\") }}{{ __(\"Qty\") }}{{ __(\"Amount\") }}
\n\t\t\t\t{{ item.item_name }}\n\t\t\t{{ format_number(item.qty, precision(\"difference\")) }}
@ {{ format_currency(item.rate, currency) }}
{{ format_currency(item.amount, currency) }}
\n\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% for row in taxes %}\n\t\t{% if not row.included_in_print_rate %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t{% endfor %}\n\t\t{% if discount_amount %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
\n\t\t\t\t{{ __(\"Net Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(total, currency) }}\n\t\t\t
\n\t\t\t\t{{ row.description }}\n\t\t\t\n\t\t\t\t{{ format_currency(row.tax_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(discount_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(grand_total, currency) }}\n\t\t\t
\n\n\n
\n

{{ __(\"Thank you, please visit again.\") }}

", "idx": 0, - "modified": "2016-08-11 07:23:04.530676", + "modified": "2016-09-05 08:28:42.308782", "modified_by": "Administrator", "name": "Point of Sale", "owner": "Administrator", From 366ba048230146404ad58b36593a8f43d80d06fc Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Tue, 6 Sep 2016 12:44:57 +0530 Subject: [PATCH 10/84] Barcode added to Stock Reconciliation --- .../stock_reconciliation.js | 19 ++++++++++++- .../stock_reconciliation_item.json | 28 ++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js index a0c3adf2ee4..c70613b9e83 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js @@ -78,10 +78,27 @@ frappe.ui.form.on("Stock Reconciliation", { } }); } - } + }, + set_item_code: function(doc, cdt, cdn) { + var d = frappe.model.get_doc(cdt, cdn); + if (d.barcode) { + frappe.call({ + method: "erpnext.stock.get_item_details.get_item_code", + args: {"barcode": d.barcode }, + callback: function(r) { + if (!r.exe){ + frappe.model.set_value(cdt, cdn, "item_code", r.message); + } + } + }); + } + } }); frappe.ui.form.on("Stock Reconciliation Item", { + barcode: function(frm, cdt, cdn) { + frm.events.set_item_code(frm, cdt, cdn); + }, warehouse: function(frm, cdt, cdn) { frm.events.set_valuation_rate_and_qty(frm, cdt, cdn); }, diff --git a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json index e03d8a0ba92..efd0dee74f2 100644 --- a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json +++ b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json @@ -10,6 +10,32 @@ "document_type": "Other", "editable_grid": 1, "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "barcode", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Barcode", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -285,7 +311,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-26 02:15:26.109664", + "modified": "2016-09-05 07:10:19.571562", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation Item", From a477e411aadab2236020aff1fd778971fa5cd079 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 1 Sep 2016 13:01:34 +0530 Subject: [PATCH 11/84] Updated Guardian Doctype; Added new fields --- .../schools/doctype/guardian/guardian.json | 242 +++++++++++++++++- 1 file changed, 241 insertions(+), 1 deletion(-) diff --git a/erpnext/schools/doctype/guardian/guardian.json b/erpnext/schools/doctype/guardian/guardian.json index 390a52f0e05..91a30823b1b 100644 --- a/erpnext/schools/doctype/guardian/guardian.json +++ b/erpnext/schools/doctype/guardian/guardian.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "guardian_name", "fieldtype": "Data", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student", "fieldtype": "Link", "hidden": 0, @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "email_address", "fieldtype": "Data", "hidden": 0, @@ -91,6 +94,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "mobile_number", "fieldtype": "Data", "hidden": 0, @@ -116,6 +120,33 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "alternate_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Alternate Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "column_break_3", "fieldtype": "Column Break", "hidden": 0, @@ -140,6 +171,138 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "relation", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Relation", + "length": 0, + "no_copy": 0, + "options": "\nMother\nFather\nOthers", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "date_of_birth", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Date of Birth", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "education", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Education", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "occupation", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Occupation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "designation", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Designation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "image", "fieldtype": "Attach Image", "hidden": 1, @@ -165,6 +328,83 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "work_address", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Work Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_8", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "interests", "fieldtype": "Table", "hidden": 0, @@ -199,7 +439,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-08-11 07:57:21.708354", + "modified": "2016-09-01 12:58:50.246117", "modified_by": "Administrator", "module": "Schools", "name": "Guardian", From d878b669362a43600162e8ba350cadae1d6af82f Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 1 Sep 2016 14:45:58 +0530 Subject: [PATCH 12/84] Updated Student Doctype --- .../schools/doctype/guardian/guardian.json | 56 +-- erpnext/schools/doctype/student/student.json | 266 +++++++++--- .../doctype/student/student_dashboard.py | 2 +- .../student_applicant/student_applicant.json | 382 +++++++++++------- .../doctype/student_guardian/__init__.py | 0 .../student_guardian/student_guardian.json | 91 +++++ .../student_guardian/student_guardian.py | 10 + .../doctype/student_sibling/__init__.py | 0 .../student_sibling/student_sibling.json | 117 ++++++ .../student_sibling/student_sibling.py | 10 + .../doctype/student_siblings/__init__.py | 0 .../student_siblings/student_siblings.json | 117 ++++++ .../student_siblings/student_siblings.py | 10 + 13 files changed, 794 insertions(+), 267 deletions(-) create mode 100644 erpnext/schools/doctype/student_guardian/__init__.py create mode 100644 erpnext/schools/doctype/student_guardian/student_guardian.json create mode 100644 erpnext/schools/doctype/student_guardian/student_guardian.py create mode 100644 erpnext/schools/doctype/student_sibling/__init__.py create mode 100644 erpnext/schools/doctype/student_sibling/student_sibling.json create mode 100644 erpnext/schools/doctype/student_sibling/student_sibling.py create mode 100644 erpnext/schools/doctype/student_siblings/__init__.py create mode 100644 erpnext/schools/doctype/student_siblings/student_siblings.json create mode 100644 erpnext/schools/doctype/student_siblings/student_siblings.py diff --git a/erpnext/schools/doctype/guardian/guardian.json b/erpnext/schools/doctype/guardian/guardian.json index 91a30823b1b..120a884014f 100644 --- a/erpnext/schools/doctype/guardian/guardian.json +++ b/erpnext/schools/doctype/guardian/guardian.json @@ -37,33 +37,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Student", - "length": 0, - "no_copy": 0, - "options": "Student", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -167,33 +140,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "relation", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Relation", - "length": 0, - "no_copy": 0, - "options": "\nMother\nFather\nOthers", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -439,7 +385,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-01 12:58:50.246117", + "modified": "2016-09-01 14:33:26.541873", "modified_by": "Administrator", "module": "Schools", "name": "Guardian", diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json index 454aeb2f9fe..ae5147779cd 100644 --- a/erpnext/schools/doctype/student/student.json +++ b/erpnext/schools/doctype/student/student.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "first_name", "fieldtype": "Data", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "middle_name", "fieldtype": "Data", "hidden": 0, @@ -65,6 +67,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "last_name", "fieldtype": "Data", "hidden": 0, @@ -90,6 +93,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, @@ -114,6 +118,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -140,6 +145,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student_email_id", "fieldtype": "Data", "hidden": 0, @@ -165,7 +171,35 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "default": "", + "columns": 0, + "fieldname": "student_mobile_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Mobile Number", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Today", "fieldname": "joining_date", "fieldtype": "Date", "hidden": 0, @@ -191,6 +225,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "image", "fieldtype": "Attach Image", "hidden": 1, @@ -216,8 +251,9 @@ { "allow_on_submit": 0, "bold": 0, - "collapsible": 1, - "collapsible_depends_on": "!doc.__islocal", + "collapsible": 0, + "collapsible_depends_on": "", + "columns": 0, "fieldname": "section_break_7", "fieldtype": "Section Break", "hidden": 0, @@ -243,6 +279,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "date_of_birth", "fieldtype": "Date", "hidden": 0, @@ -268,6 +305,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "gender", "fieldtype": "Select", "hidden": 0, @@ -294,6 +332,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "blood_group", "fieldtype": "Select", "hidden": 0, @@ -320,56 +359,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "student_applicant", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Student Applicant", - "length": 0, - "no_copy": 0, - "options": "Student Applicant", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, + "columns": 0, "fieldname": "nationality", "fieldtype": "Link", "hidden": 0, @@ -396,17 +386,16 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "contact", - "fieldtype": "Link", + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Contact", "length": 0, "no_copy": 0, - "options": "Contact", "permlevel": 0, "precision": "", "print_hide": 0, @@ -422,6 +411,167 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "address", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_applicant", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Applicant", + "length": 0, + "no_copy": 0, + "options": "Student Applicant", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_18", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Guardian Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "guardians", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Guardians", + "length": 0, + "no_copy": 0, + "options": "Student Guardian", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_20", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Sibling Details", + "length": 0, + "no_copy": 0, + "options": "Country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "siblings", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Siblings", + "length": 0, + "no_copy": 0, + "options": "Student Sibling", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "default": "", "fieldname": "title", "fieldtype": "Data", @@ -457,7 +607,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-21 05:41:34.091353", + "modified": "2016-09-05 05:47:44.946888", "modified_by": "Administrator", "module": "Schools", "name": "Student", diff --git a/erpnext/schools/doctype/student/student_dashboard.py b/erpnext/schools/doctype/student/student_dashboard.py index 45a2f14b982..9322986149f 100644 --- a/erpnext/schools/doctype/student/student_dashboard.py +++ b/erpnext/schools/doctype/student/student_dashboard.py @@ -9,7 +9,7 @@ data = { 'items': ['Student Log', 'Student Group', 'Student Attendance'] }, { - 'items': ['Program Enrollment', 'Fees', 'Assessment', 'Guardian'] + 'items': ['Program Enrollment', 'Fees', 'Assessment'] } ] } \ No newline at end of file diff --git a/erpnext/schools/doctype/student_applicant/student_applicant.json b/erpnext/schools/doctype/student_applicant/student_applicant.json index 8dbd22a4ccf..c68068edcd2 100644 --- a/erpnext/schools/doctype/student_applicant/student_applicant.json +++ b/erpnext/schools/doctype/student_applicant/student_applicant.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "first_name", "fieldtype": "Data", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "middle_name", "fieldtype": "Data", "hidden": 0, @@ -65,6 +67,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "last_name", "fieldtype": "Data", "hidden": 0, @@ -90,6 +93,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -116,6 +120,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_8", "fieldtype": "Column Break", "hidden": 0, @@ -140,6 +145,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -166,6 +172,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.docstatus != 0", "fieldname": "application_status", "fieldtype": "Select", @@ -193,6 +200,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "application_date", "fieldtype": "Date", @@ -220,6 +228,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_year", "fieldtype": "Link", "hidden": 0, @@ -246,6 +255,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "image", "fieldtype": "Attach Image", "hidden": 1, @@ -270,8 +280,9 @@ { "allow_on_submit": 0, "bold": 0, - "collapsible": 1, - "collapsible_depends_on": "eval: doc.__islocal == 1", + "collapsible": 0, + "collapsible_depends_on": "", + "columns": 0, "fieldname": "section_break_4", "fieldtype": "Section Break", "hidden": 0, @@ -297,156 +308,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "mother_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Mother's Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "mother_email_id", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Mother's / Guardian 1 Email ID", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "father_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Father's Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "father_email_id", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Father's/ Guardian 2 Email ID", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "contact", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Contact", - "length": 0, - "no_copy": 0, - "options": "Contact", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break_12", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, + "columns": 0, "fieldname": "date_of_birth", "fieldtype": "Date", "hidden": 0, @@ -472,6 +334,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "gender", "fieldtype": "Select", "hidden": 0, @@ -498,6 +361,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "blood_group", "fieldtype": "Select", "hidden": 0, @@ -524,6 +388,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "nationality", "fieldtype": "Link", "hidden": 0, @@ -550,6 +415,32 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "column_break_12", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "student_email_id", "fieldtype": "Data", "hidden": 0, @@ -575,6 +466,190 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "student_mobile_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Mobile Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_20", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Guardian Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "guardians", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Guardians", + "length": 0, + "no_copy": 0, + "options": "Student Guardian", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_21", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Sibling Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "siblings", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Siblings", + "length": 0, + "no_copy": 0, + "options": "Student Sibling", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_23", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "title", "fieldtype": "Data", "hidden": 1, @@ -600,6 +675,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -634,7 +710,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-26 01:01:45.669665", + "modified": "2016-09-05 05:48:18.703126", "modified_by": "Administrator", "module": "Schools", "name": "Student Applicant", diff --git a/erpnext/schools/doctype/student_guardian/__init__.py b/erpnext/schools/doctype/student_guardian/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/student_guardian/student_guardian.json b/erpnext/schools/doctype/student_guardian/student_guardian.json new file mode 100644 index 00000000000..d8e50c97b28 --- /dev/null +++ b/erpnext/schools/doctype/student_guardian/student_guardian.json @@ -0,0 +1,91 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-09-01 14:28:39.174471", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "guardian", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Guardian", + "length": 0, + "no_copy": 0, + "options": "Guardian", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "relation", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Relation", + "length": 0, + "no_copy": 0, + "options": "\nMother\nFather\nOthers", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-09-01 14:39:03.576590", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Guardian", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_guardian/student_guardian.py b/erpnext/schools/doctype/student_guardian/student_guardian.py new file mode 100644 index 00000000000..04445bcc594 --- /dev/null +++ b/erpnext/schools/doctype/student_guardian/student_guardian.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class StudentGuardian(Document): + pass diff --git a/erpnext/schools/doctype/student_sibling/__init__.py b/erpnext/schools/doctype/student_sibling/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/student_sibling/student_sibling.json b/erpnext/schools/doctype/student_sibling/student_sibling.json new file mode 100644 index 00000000000..b07b9587370 --- /dev/null +++ b/erpnext/schools/doctype/student_sibling/student_sibling.json @@ -0,0 +1,117 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-09-01 14:41:23.824083", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "name1", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Name", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "gender", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "\nMale\nFemale", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "date_of_birth", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Date of Birth", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-09-01 14:43:53.473391", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Sibling", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_sibling/student_sibling.py b/erpnext/schools/doctype/student_sibling/student_sibling.py new file mode 100644 index 00000000000..4adc3f35bae --- /dev/null +++ b/erpnext/schools/doctype/student_sibling/student_sibling.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class StudentSibling(Document): + pass diff --git a/erpnext/schools/doctype/student_siblings/__init__.py b/erpnext/schools/doctype/student_siblings/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/student_siblings/student_siblings.json b/erpnext/schools/doctype/student_siblings/student_siblings.json new file mode 100644 index 00000000000..4f1ed0294cc --- /dev/null +++ b/erpnext/schools/doctype/student_siblings/student_siblings.json @@ -0,0 +1,117 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2016-09-01 14:41:23.824083", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "name1", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Name", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "gender", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "\nMale\nFemale", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "date_of_birth", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Date of Birth", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-09-01 14:41:23.824083", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Siblings", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_siblings/student_siblings.py b/erpnext/schools/doctype/student_siblings/student_siblings.py new file mode 100644 index 00000000000..4e20d84ae71 --- /dev/null +++ b/erpnext/schools/doctype/student_siblings/student_siblings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class StudentSiblings(Document): + pass From c20adb532f0500a9a163b75766eca4d79d79abfd Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 5 Sep 2016 16:55:54 +0530 Subject: [PATCH 13/84] Added student Category --- erpnext/config/schools.py | 8 +- erpnext/schools/api.py | 5 +- .../doctype/fee_structure/fee_structure.json | 37 +++++++- erpnext/schools/doctype/fees/fees.json | 53 +++++++++++- .../program_enrollment/program_enrollment.js | 7 +- .../program_enrollment.json | 42 ++++++++- .../program_enrollment_fee.json | 7 +- .../doctype/program_fee/program_fee.json | 36 +++++++- .../doctype/student_category/__init__.py | 0 .../student_category/student_category.js | 8 ++ .../student_category/student_category.json | 85 +++++++++++++++++++ .../student_category/student_category.py | 10 +++ .../student_category/test_student_category.py | 12 +++ 13 files changed, 295 insertions(+), 15 deletions(-) create mode 100644 erpnext/schools/doctype/student_category/__init__.py create mode 100644 erpnext/schools/doctype/student_category/student_category.js create mode 100644 erpnext/schools/doctype/student_category/student_category.json create mode 100644 erpnext/schools/doctype/student_category/student_category.py create mode 100644 erpnext/schools/doctype/student_category/test_student_category.py diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index 857a4223b0b..ce0c5dc3dc1 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -122,11 +122,15 @@ def get_data(): }, { "type": "doctype", - "name": "Grading Structure" + "name": "Program" }, { "type": "doctype", - "name": "Program" + "name": "Student Category" + }, + { + "type": "doctype", + "name": "Grading Structure" }, { "type": "doctype", diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index 3554fe76dd3..60111586335 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -103,13 +103,14 @@ def get_fee_components(fee_structure): return fs @frappe.whitelist() -def get_fee_schedule(program): +def get_fee_schedule(program, student_category=None): """Returns Fee Schedule. :param program: Program. + :param student_category: Student Category """ fs = frappe.get_list("Program Fee", fields=["academic_term", "fee_structure", "due_date", "amount"] , - filters={"parent": program}, order_by= "idx") + filters={"parent": program, "student_category": student_category }, order_by= "idx") return fs @frappe.whitelist() diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index d6c5a7fa284..95a2f6f1398 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -43,6 +44,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -69,6 +71,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_2", "fieldtype": "Column Break", "hidden": 0, @@ -93,6 +96,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, @@ -122,6 +126,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "section_break_4", "fieldtype": "Section Break", "hidden": 0, @@ -146,6 +178,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "components", "fieldtype": "Table", "hidden": 0, @@ -172,6 +205,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_6", "fieldtype": "Section Break", "hidden": 0, @@ -196,6 +230,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_amount", "fieldtype": "Currency", "hidden": 0, @@ -230,7 +265,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 08:44:07.886467", + "modified": "2016-09-05 06:54:22.360035", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 5682ef93298..a3af99bd58a 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student", "fieldtype": "Link", "hidden": 0, @@ -41,6 +42,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_year", "fieldtype": "Link", "hidden": 0, @@ -67,6 +69,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, @@ -93,6 +96,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fee_structure", "fieldtype": "Link", "hidden": 0, @@ -119,6 +123,33 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "due_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Due Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, @@ -143,6 +174,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student_name", "fieldtype": "Data", "hidden": 0, @@ -168,6 +200,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -194,6 +227,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -220,6 +254,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "program_enrollment", "fieldtype": "Link", "hidden": 0, @@ -246,16 +281,18 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "due_date", - "fieldtype": "Date", + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Due Date", + "label": "Student Category", "length": 0, "no_copy": 0, + "options": "Student Category", "permlevel": 0, "precision": "", "print_hide": 0, @@ -271,6 +308,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_7", "fieldtype": "Section Break", "hidden": 0, @@ -295,6 +333,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "components", "fieldtype": "Table", "hidden": 0, @@ -321,6 +360,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_10", "fieldtype": "Section Break", "hidden": 0, @@ -345,6 +385,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -370,6 +411,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_11", "fieldtype": "Column Break", "hidden": 0, @@ -394,6 +436,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "0", "fieldname": "total_amount", "fieldtype": "Currency", @@ -420,6 +463,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "0", "fieldname": "paid_amount", "fieldtype": "Currency", @@ -446,6 +490,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "0", "fieldname": "outstanding_amount", "fieldtype": "Currency", @@ -480,7 +525,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-26 02:28:48.877990", + "modified": "2016-09-05 06:56:33.012835", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.js b/erpnext/schools/doctype/program_enrollment/program_enrollment.js index 72fc6f2e6b4..96c8f96dc61 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.js +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.js @@ -9,7 +9,8 @@ frappe.ui.form.on("Program Enrollment", { frappe.call({ method: "erpnext.schools.api.get_fee_schedule", args: { - "program": frm.doc.program + "program": frm.doc.program, + "student_category": frm.doc.student_category }, callback: function(r) { if(r.message) { @@ -20,6 +21,10 @@ frappe.ui.form.on("Program Enrollment", { } }, + student_category: function() { + frappe.ui.form.trigger("Program Enrollment", "program"); + }, + onload: function(frm, cdt, cdn){ cur_frm.set_query("academic_term", "fees", function(){ return{ diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json index c7c5eed8392..199b5e1f38b 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student", "fieldtype": "Link", "hidden": 0, @@ -41,6 +42,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student_name", "fieldtype": "Read Only", "hidden": 0, @@ -67,6 +69,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, @@ -91,6 +121,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -117,6 +148,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_year", "fieldtype": "Link", "hidden": 0, @@ -143,6 +175,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "enrollment_date", "fieldtype": "Date", @@ -169,6 +202,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_7", "fieldtype": "Section Break", "hidden": 0, @@ -194,6 +228,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fees", "fieldtype": "Table", "hidden": 0, @@ -214,12 +249,14 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "unique": 0 + "unique": 0, + "width": "" }, { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -245,6 +282,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "image", "fieldtype": "Attach Image", "hidden": 1, @@ -279,7 +317,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-11 08:50:24.317353", + "modified": "2016-09-05 06:59:18.620611", "modified_by": "Administrator", "module": "Schools", "name": "Program Enrollment", diff --git a/erpnext/schools/doctype/program_enrollment_fee/program_enrollment_fee.json b/erpnext/schools/doctype/program_enrollment_fee/program_enrollment_fee.json index 6760384bf4e..17d740e801e 100644 --- a/erpnext/schools/doctype/program_enrollment_fee/program_enrollment_fee.json +++ b/erpnext/schools/doctype/program_enrollment_fee/program_enrollment_fee.json @@ -14,6 +14,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fee_structure", "fieldtype": "Link", "hidden": 0, @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_3", "fieldtype": "Column Break", "hidden": 0, @@ -90,6 +93,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "due_date", "fieldtype": "Date", "hidden": 0, @@ -115,6 +119,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amount", "fieldtype": "Currency", "hidden": 0, @@ -147,7 +152,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-07-21 12:27:02.547926", + "modified": "2016-09-05 07:05:20.118119", "modified_by": "Administrator", "module": "Schools", "name": "Program Enrollment Fee", diff --git a/erpnext/schools/doctype/program_fee/program_fee.json b/erpnext/schools/doctype/program_fee/program_fee.json index 6b320a05694..d5d3b5fc495 100644 --- a/erpnext/schools/doctype/program_fee/program_fee.json +++ b/erpnext/schools/doctype/program_fee/program_fee.json @@ -14,6 +14,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, @@ -40,13 +41,14 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fee_structure", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_list_view": 0, + "in_list_view": 1, "label": "Fee Structure", "length": 0, "no_copy": 0, @@ -66,6 +68,34 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "column_break_3", "fieldtype": "Column Break", "hidden": 0, @@ -90,6 +120,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "due_date", "fieldtype": "Date", "hidden": 0, @@ -115,6 +146,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amount", "fieldtype": "Currency", "hidden": 0, @@ -147,7 +179,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-07-21 12:27:02.153696", + "modified": "2016-09-05 07:07:39.776848", "modified_by": "Administrator", "module": "Schools", "name": "Program Fee", diff --git a/erpnext/schools/doctype/student_category/__init__.py b/erpnext/schools/doctype/student_category/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/student_category/student_category.js b/erpnext/schools/doctype/student_category/student_category.js new file mode 100644 index 00000000000..3a264d1d4a1 --- /dev/null +++ b/erpnext/schools/doctype/student_category/student_category.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Student Category', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/schools/doctype/student_category/student_category.json b/erpnext/schools/doctype/student_category/student_category.json new file mode 100644 index 00000000000..03ec0d1e5e3 --- /dev/null +++ b/erpnext/schools/doctype/student_category/student_category.json @@ -0,0 +1,85 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:category", + "beta": 0, + "creation": "2016-09-05 06:28:33.679415", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "category", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Category", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2016-09-05 06:28:33.679415", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Category", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Academics User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_category/student_category.py b/erpnext/schools/doctype/student_category/student_category.py new file mode 100644 index 00000000000..bd3a8358898 --- /dev/null +++ b/erpnext/schools/doctype/student_category/student_category.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class StudentCategory(Document): + pass diff --git a/erpnext/schools/doctype/student_category/test_student_category.py b/erpnext/schools/doctype/student_category/test_student_category.py new file mode 100644 index 00000000000..756cab87eb8 --- /dev/null +++ b/erpnext/schools/doctype/student_category/test_student_category.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Student Category') + +class TestStudentCategory(unittest.TestCase): + pass From 5ae21053bd4bffe0075dc612c7316c80131d982c Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Tue, 6 Sep 2016 15:44:09 +0800 Subject: [PATCH 14/84] fix for closing balance typo --- erpnext/accounts/report/balance_sheet/balance_sheet.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py index 23fa762fbcd..d2626cddc18 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.py +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py @@ -70,7 +70,7 @@ def check_opening_balance(asset, liability, equity): if liability: opening_balance -= flt(liability[0].get("opening_balance", 0)) if equity: - opening_balance -= flt(asset[0].get("opening_balance", 0)) + opening_balance -= flt(equity[0].get("opening_balance", 0)) if opening_balance: return _("Previous Financial Year is not closed") @@ -101,4 +101,4 @@ def get_chart_data(columns, asset, liability, equity): 'x': 'x', 'columns': columns } - } \ No newline at end of file + } From 49da25dd573a87d4c7942eb658d0dbf8fd6854a7 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 6 Sep 2016 15:28:13 +0530 Subject: [PATCH 15/84] Added patch --- erpnext/patches.txt | 1 + erpnext/patches/v7_1/set_student_guardian.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 erpnext/patches/v7_1/set_student_guardian.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 7a378a5e7f2..68c82be716d 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -322,3 +322,4 @@ erpnext.patches.v7_0.repost_gle_for_pos_sales_return erpnext.patches.v7_0.update_missing_employee_in_timesheet erpnext.patches.v7_0.update_status_for_timesheet erpnext.patches.v7_0.set_party_name_in_payment_entry +erpnext.patches.v7_1.set_student_guardian diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py new file mode 100644 index 00000000000..4cd1a109e62 --- /dev/null +++ b/erpnext/patches/v7_1/set_student_guardian.py @@ -0,0 +1,13 @@ +import frappe + +def execute(): + if frappe.db.exists("DocType", "Guardian"): + frappe.reload_doc("schools", "doctype", "student") + frappe.reload_doc("schools", "doctype", "student_guardian") + guardian = frappe.get_list("Guardian", fields=["name", "student"]) + for d in guardian: + if d.student: + student = frappe.get_doc("Student", d.student) + if student: + student.append("guardians", {"guardian": d.name}) + student.save() \ No newline at end of file From 6a95723a705d138c1afca693466af0bbb768272b Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 6 Sep 2016 17:10:58 +0530 Subject: [PATCH 16/84] Fixed Student Guardian patch - permission issue --- erpnext/patches/v7_1/set_student_guardian.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py index 4cd1a109e62..52fb3097caa 100644 --- a/erpnext/patches/v7_1/set_student_guardian.py +++ b/erpnext/patches/v7_1/set_student_guardian.py @@ -4,7 +4,7 @@ def execute(): if frappe.db.exists("DocType", "Guardian"): frappe.reload_doc("schools", "doctype", "student") frappe.reload_doc("schools", "doctype", "student_guardian") - guardian = frappe.get_list("Guardian", fields=["name", "student"]) + guardian = frappe.get_all("Guardian", fields=["name", "student"]) for d in guardian: if d.student: student = frappe.get_doc("Student", d.student) From b44efef094fe1cd22cacca81044cb439e76e4d32 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 6 Sep 2016 15:42:36 +0530 Subject: [PATCH 17/84] [Issue] Fixed, supplier quotation item uom conversion --- .../supplier_quotation/supplier_quotation.js | 4 - .../supplier_quotation/supplier_quotation.py | 5 +- .../supplier_quotation_item.json | 106 +++++++++++++++++- erpnext/patches.txt | 1 + ...rsion_factor_in_supplier_quotation_item.py | 19 ++++ 5 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js index 1859cf5005a..0323c2faf00 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js @@ -41,10 +41,6 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext // for backward compatibility: combine new and previous states $.extend(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({frm: cur_frm})); -cur_frm.cscript.uom = function(doc, cdt, cdn) { - // no need to trigger updation of stock uom, as this field doesn't exist in supplier quotation -} - cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) { return{ diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index b6a337683d8..206dfa30264 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import frappe +from frappe.utils import flt from frappe.model.mapper import get_mapped_doc from erpnext.controllers.buying_controller import BuyingController @@ -62,7 +63,7 @@ def make_purchase_order(source_name, target_doc=None): target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): - target.conversion_factor = 1 + target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) doclist = get_mapped_doc("Supplier Quotation", source_name, { "Supplier Quotation": { @@ -76,8 +77,6 @@ def make_purchase_order(source_name, target_doc=None): "field_map": [ ["name", "supplier_quotation_item"], ["parent", "supplier_quotation"], - ["uom", "stock_uom"], - ["uom", "uom"], ["material_request", "material_request"], ["material_request_item", "material_request_item"] ], diff --git a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json index 2f4b39026a6..73ebf23005c 100644 --- a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json +++ b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json @@ -303,6 +303,33 @@ "unique": 0, "width": "60px" }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "stock_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Stock UOM", + "length": 0, + "no_copy": 0, + "options": "UOM", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -409,6 +436,32 @@ "unique": 0, "width": "100px" }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "conversion_factor", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "UOM Conversion Factor", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -1106,6 +1159,57 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_44", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "stock_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Qty as per Stock UOM", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 1, "bold": 0, @@ -1144,7 +1248,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-08-26 04:51:44.857545", + "modified": "2016-09-06 02:40:11.022104", "modified_by": "Administrator", "module": "Buying", "name": "Supplier Quotation Item", diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 68c82be716d..0706a2cd01f 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -323,3 +323,4 @@ erpnext.patches.v7_0.update_missing_employee_in_timesheet erpnext.patches.v7_0.update_status_for_timesheet erpnext.patches.v7_0.set_party_name_in_payment_entry erpnext.patches.v7_1.set_student_guardian +erpnext.patches.v7_0.update_conversion_factor_in_supplier_quotation_item \ No newline at end of file diff --git a/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py b/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py new file mode 100644 index 00000000000..24da4b1aebf --- /dev/null +++ b/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py @@ -0,0 +1,19 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc('buying', 'doctype', 'supplier_quotation_item') + + frappe.db.sql("""update + `tabSupplier Quotation Item` as sqi_t, + (select sqi.item_code as item_code, sqi.uom as uom, ucd.conversion_factor as conversion_factor + from `tabSupplier Quotation Item` sqi left join `tabUOM Conversion Detail` ucd + on ucd.uom = sqi.uom and sqi.item_code = ucd.parent) as conversion_data, + `tabItem` as item + set + sqi_t.conversion_factor= ifnull(conversion_data.conversion_factor, 1), + sqi_t.stock_qty = (ifnull(conversion_data.conversion_factor, 1) * sqi_t.qty), + sqi_t.stock_uom = item.stock_uom + where + sqi_t.item_code = conversion_data.item_code and + sqi_t.uom = conversion_data.uom and sqi_t.item_code = item.name""") \ No newline at end of file From f79d7188de63bd6dbe10c83bd3d119b71963db02 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 6 Sep 2016 17:47:05 +0530 Subject: [PATCH 18/84] Patch fixed --- .../v7_0/migrate_mode_of_payments_v6_to_v7.py | 13 +++++++++++-- ...ccount_table_for_expense_claim_type_if_exists.py | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py index e2d2c89437f..03f0afba181 100644 --- a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py +++ b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py @@ -5,8 +5,17 @@ def execute(): frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment') - for data in frappe.db.sql("""select name, mode_of_payment, cash_bank_account, paid_amount from - `tabSales Invoice` where is_pos = 1 and docstatus < 2 and cash_bank_account is not null""", as_dict=1): + for data in frappe.db.sql("""select name, mode_of_payment, cash_bank_account, paid_amount, company + from `tabSales Invoice` + where is_pos = 1 and docstatus < 2 + and cash_bank_account is not null and cash_bank_account != ''""", as_dict=1): + + if not data.mode_of_payment and not frappe.db.exists("Mode of Payment", "Cash"): + mop = frappe.new_doc("Mode of Payment") + mop.mode_of_payment = "Cash" + mop.type = "Cash" + mop.save() + si_doc = frappe.get_doc('Sales Invoice', data.name) si_doc.append('payments', { 'mode_of_payment': data.mode_of_payment or 'Cash', diff --git a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py b/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py index a067e71ed05..96224909aea 100644 --- a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py +++ b/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py @@ -9,7 +9,8 @@ def execute(): return for expense_claim_type in frappe.get_all("Expense Claim Type", fields=["name", "default_account"]): - if expense_claim_type.default_account: + if expense_claim_type.default_account \ + and frappe.db.exists("Account", expense_claim_type.default_account): doc = frappe.get_doc("Expense Claim Type", expense_claim_type.name) doc.append("accounts", { "company": frappe.db.get_value("Account", expense_claim_type.default_account, "company"), From 52891b55d2dfd64a8662830c6610dc629216e002 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 6 Sep 2016 17:50:29 +0530 Subject: [PATCH 19/84] Fixed Student Guardian patch - reload issue --- erpnext/patches/v7_1/set_student_guardian.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py index 52fb3097caa..7eac23bfd8e 100644 --- a/erpnext/patches/v7_1/set_student_guardian.py +++ b/erpnext/patches/v7_1/set_student_guardian.py @@ -4,6 +4,7 @@ def execute(): if frappe.db.exists("DocType", "Guardian"): frappe.reload_doc("schools", "doctype", "student") frappe.reload_doc("schools", "doctype", "student_guardian") + frappe.reload_doc("schools", "doctype", "student_sibling") guardian = frappe.get_all("Guardian", fields=["name", "student"]) for d in guardian: if d.student: From 9b54b78794cb05494d9075902df6733967acd3b2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 6 Sep 2016 18:25:55 +0600 Subject: [PATCH 20/84] bumped to version 7.0.40 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 6018a4ca1f3..7e94a346346 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.39' +__version__ = '7.0.40' def get_default_company(user=None): '''Get default company for user''' From 7b2bd20a09437b9a209aa8246f45517115bef972 Mon Sep 17 00:00:00 2001 From: pawan Date: Tue, 6 Sep 2016 18:28:41 +0530 Subject: [PATCH 21/84] [fix] #6254 --- erpnext/accounts/doctype/payment_request/payment_request.json | 2 +- erpnext/hr/doctype/appraisal/appraisal.json | 2 +- erpnext/hr/doctype/leave_application/leave_application.json | 2 +- .../doctype/maintenance_schedule/maintenance_schedule.json | 2 +- .../doctype/maintenance_visit/maintenance_visit.json | 2 +- .../stock/doctype/landed_cost_voucher/landed_cost_voucher.json | 2 +- .../doctype/stock_reconciliation/stock_reconciliation.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index 8dc03acf9c2..50946c37422 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -26,7 +26,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "PR.", + "options": "PR", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/hr/doctype/appraisal/appraisal.json b/erpnext/hr/doctype/appraisal/appraisal.json index 1de189bd0d0..1d9a64f8798 100644 --- a/erpnext/hr/doctype/appraisal/appraisal.json +++ b/erpnext/hr/doctype/appraisal/appraisal.json @@ -52,7 +52,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "APRSL.", + "options": "APRSL", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json index ad8f670a863..14e1b67568c 100644 --- a/erpnext/hr/doctype/leave_application/leave_application.json +++ b/erpnext/hr/doctype/leave_application/leave_application.json @@ -27,7 +27,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "LAP/.", + "options": "LAP/", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json index cf030936a69..e44213bd81e 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json @@ -53,7 +53,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "MS.", + "options": "MS", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json index e06204d710d..8636858507f 100644 --- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json +++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json @@ -78,7 +78,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "MV.", + "options": "MV", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json index 2eedd09df9b..63e04abba31 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json +++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json @@ -26,7 +26,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "LCV.", + "options": "LCV", "permlevel": 0, "precision": "", "print_hide": 1, diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json index 8a0090e4d8e..291f14d6ebb 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -26,7 +26,7 @@ "label": "Series", "length": 0, "no_copy": 1, - "options": "SR/.", + "options": "SR/", "permlevel": 0, "precision": "", "print_hide": 1, From 0261889c0f9f137af99596e876aadf50ce16cb3d Mon Sep 17 00:00:00 2001 From: Ben Cornwell-Mott Date: Wed, 7 Sep 2016 02:28:50 -0700 Subject: [PATCH 22/84] Fixed spelling --- erpnext/manufacturing/doctype/bom/bom.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index 5eeb69fde50..ae23d5e2b22 100644 --- a/erpnext/manufacturing/doctype/bom/bom.json +++ b/erpnext/manufacturing/doctype/bom/bom.json @@ -657,7 +657,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Item Desription", + "label": "Item Description", "length": 0, "no_copy": 0, "permlevel": 0, From 525900c5c198cbfd5a2af651e114218302610222 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 7 Sep 2016 15:01:08 +0530 Subject: [PATCH 23/84] [Fix] Item level taxes are not getting calculated in POS --- erpnext/accounts/page/pos/pos.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 5947bde878e..9a121267b4c 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -614,6 +614,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.child.batch_no = this.item_batch_no[this.child.item_code]; this.child.serial_no = (this.item_serial_no[this.child.item_code] ? this.item_serial_no[this.child.item_code][0] : ''); + this.child.item_tax_rate = this.items[0].taxes; }, update_paid_amount_status: function(update_paid_amount){ From 23147ff8817f88236189f8f8a333985a95ad0151 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2016 16:31:26 +0530 Subject: [PATCH 24/84] Patch fixed --- .../payment_entry_reference.json | 2 +- .../v7_0/convert_timelog_to_timesheet.py | 4 ++- .../v7_0/migrate_mode_of_payments_v6_to_v7.py | 25 +++++++++++++------ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json index 64417481ff3..4dd08b67f6c 100644 --- a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json +++ b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json @@ -171,7 +171,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_list_view": 0, + "in_list_view": 1, "label": "Allocated", "length": 0, "no_copy": 0, diff --git a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py index a176a8f349c..89af095754a 100644 --- a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py +++ b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py @@ -4,8 +4,10 @@ from erpnext.manufacturing.doctype.production_order.production_order \ def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet') + if not frappe.db.table_exists("Time Log"): + return - for data in frappe.get_all('Time Log', fields=["*"], filters = [["docstatus", "<", "2"]]): + for data in frappe.db.sql("select * from `tabTime Log` where where docstatus < 2", as_dict=1): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: diff --git a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py index 03f0afba181..8de92b7f59c 100644 --- a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py +++ b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py @@ -4,11 +4,14 @@ import frappe def execute(): frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment') - + frappe.reload_doc('accounts', 'doctype', 'mode_of_payment') + + count = 0 for data in frappe.db.sql("""select name, mode_of_payment, cash_bank_account, paid_amount, company - from `tabSales Invoice` - where is_pos = 1 and docstatus < 2 - and cash_bank_account is not null and cash_bank_account != ''""", as_dict=1): + from `tabSales Invoice` si + where si.is_pos = 1 and si.docstatus < 2 + and si.cash_bank_account is not null and si.cash_bank_account != '' + and not exists(select name from `tabSales Invoice Payment` where parent=si.name)""", as_dict=1): if not data.mode_of_payment and not frappe.db.exists("Mode of Payment", "Cash"): mop = frappe.new_doc("Mode of Payment") @@ -17,13 +20,19 @@ def execute(): mop.save() si_doc = frappe.get_doc('Sales Invoice', data.name) - si_doc.append('payments', { + row = si_doc.append('payments', { 'mode_of_payment': data.mode_of_payment or 'Cash', 'account': data.cash_bank_account, 'type': frappe.db.get_value('Mode of Payment', data.mode_of_payment, 'type') or 'Cash', 'amount': data.paid_amount }) - + row.db_update() + si_doc.set_paid_amount() - si_doc.flags.ignore_validate_update_after_submit = True - si_doc.save() \ No newline at end of file + si_doc.db_set("paid_amount", si_doc.paid_amount) + si_doc.db_set("base_paid_amount", si_doc.base_paid_amount) + + count +=1 + + if count % 200 == 0: + frappe.db.commit() \ No newline at end of file From 094d3adba3b6d35734ed9d3cdd287947f743d801 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2016 17:31:17 +0600 Subject: [PATCH 25/84] bumped to version 7.0.41 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 7e94a346346..958957ca772 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.40' +__version__ = '7.0.41' def get_default_company(user=None): '''Get default company for user''' From 7c9d98161487d2ce9969c9ee0d462b79f9529981 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2016 17:17:47 +0530 Subject: [PATCH 26/84] Update convert_timelog_to_timesheet.py --- erpnext/patches/v7_0/convert_timelog_to_timesheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py index 5081311b912..16b2aec4cdd 100644 --- a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py +++ b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py @@ -7,7 +7,7 @@ def execute(): if not frappe.db.table_exists("Time Log"): return - for data in frappe.db.sql("select * from `tabTime Log` where where docstatus < 2", as_dict=1): + for data in frappe.db.sql("select * from `tabTime Log` where docstatus < 2", as_dict=1): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: From 1bf8e703393fd392e5f5a0c92e9e37da2db3540d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2016 17:19:27 +0530 Subject: [PATCH 27/84] Update convert_timelog_to_timesheet.py --- erpnext/patches/v7_0/convert_timelog_to_timesheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py index 89af095754a..52433a5dba7 100644 --- a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py +++ b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py @@ -7,7 +7,7 @@ def execute(): if not frappe.db.table_exists("Time Log"): return - for data in frappe.db.sql("select * from `tabTime Log` where where docstatus < 2", as_dict=1): + for data in frappe.db.sql("select * from `tabTime Log` where docstatus < 2", as_dict=1): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: From 3e669ca656cc4a80738c1203adac5f876406c22c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2016 17:50:14 +0600 Subject: [PATCH 28/84] bumped to version 7.0.42 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 958957ca772..fcbc3f1fe2e 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.41' +__version__ = '7.0.42' def get_default_company(user=None): '''Get default company for user''' From aaa6d1f1bc65890d50203ac9f0e8a4533284a8bf Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 8 Sep 2016 01:27:16 +0530 Subject: [PATCH 29/84] patch fix --- erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py | 4 ++-- ...gbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py index 8de92b7f59c..e0e3f7075a1 100644 --- a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py +++ b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py @@ -29,8 +29,8 @@ def execute(): row.db_update() si_doc.set_paid_amount() - si_doc.db_set("paid_amount", si_doc.paid_amount) - si_doc.db_set("base_paid_amount", si_doc.base_paid_amount) + si_doc.db_set("paid_amount", si_doc.paid_amount, update_modified = False) + si_doc.db_set("base_paid_amount", si_doc.base_paid_amount, update_modified = False) count +=1 diff --git a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py index 695c552f066..7f3b7554285 100644 --- a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py +++ b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py @@ -9,6 +9,6 @@ def execute(): ts = si_doc.append('timesheets',{}) ts.time_sheet = time_sheet.name ts.billing_amount = time_sheet.total_billing_amount - si_doc.update_time_sheet(time_sheet.sales_invoice) - si_doc.flags.ignore_validate_update_after_submit = True - si_doc.save() \ No newline at end of file + ts.db_update() + si_doc.calculate_billing_amount_from_timesheet() + si_doc.db_set("total_billing_amount", si_doc.total_billing_amount, update_modified = False) \ No newline at end of file From 1e060e98c5837294d8c047e97d281e4fb7a4f47d Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 8 Sep 2016 16:12:39 +0530 Subject: [PATCH 30/84] Rearranged feilds in Student Applicant & Student, Split address feild --- erpnext/schools/doctype/student/student.json | 187 +++++++++++++-- .../student_applicant/student_applicant.json | 217 +++++++++++++++--- 2 files changed, 357 insertions(+), 47 deletions(-) diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json index ae5147779cd..22e229ce865 100644 --- a/erpnext/schools/doctype/student/student.json +++ b/erpnext/schools/doctype/student/student.json @@ -306,17 +306,17 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "gender", + "fieldname": "blood_group", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Gender", + "label": "Blood Group", "length": 0, "no_copy": 0, - "options": "\nMale\nFemale", + "options": "\nA+\nA-\nB+\nB-\nO+\nO-\nAB+\nAB-", "permlevel": 0, "precision": "", "print_hide": 0, @@ -333,17 +333,42 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "blood_group", + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "gender", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Blood Group", + "label": "Gender", "length": 0, "no_copy": 0, - "options": "\nA+\nA-\nB+\nB-\nO+\nO-\nAB+\nAB-", + "options": "\nMale\nFemale", "permlevel": 0, "precision": "", "print_hide": 0, @@ -387,7 +412,138 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "column_break_3", + "fieldname": "student_applicant", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Student Applicant", + "length": 0, + "no_copy": 0, + "options": "Student Applicant", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_22", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Home Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_line_1", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address Line 1", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_line_2", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address Line 2", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "pincode", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Pincode", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_20", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, @@ -412,14 +568,14 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "address", - "fieldtype": "Text", + "fieldname": "city", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Address", + "label": "City", "length": 0, "no_copy": 0, "permlevel": 0, @@ -438,22 +594,21 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "student_applicant", - "fieldtype": "Link", + "fieldname": "state", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Student Applicant", + "label": "State", "length": 0, "no_copy": 0, - "options": "Student Applicant", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -607,7 +762,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-05 05:47:44.946888", + "modified": "2016-09-08 06:29:27.702968", "modified_by": "Administrator", "module": "Schools", "name": "Student", diff --git a/erpnext/schools/doctype/student_applicant/student_applicant.json b/erpnext/schools/doctype/student_applicant/student_applicant.json index c68068edcd2..ae99488660d 100644 --- a/erpnext/schools/doctype/student_applicant/student_applicant.json +++ b/erpnext/schools/doctype/student_applicant/student_applicant.json @@ -384,33 +384,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "nationality", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Nationality", - "length": 0, - "no_copy": 0, - "options": "Country", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -493,14 +466,196 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "address", - "fieldtype": "Text", + "fieldname": "nationality", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Address", + "label": "Nationality", + "length": 0, + "no_copy": 0, + "options": "Country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "home_address", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Home Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_line_1", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address Line 1", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_line_2", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address Line 2", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "pincode", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Pincode", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_23", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "city", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "City", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "state", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "State", "length": 0, "no_copy": 0, "permlevel": 0, @@ -710,7 +865,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-05 05:48:18.703126", + "modified": "2016-09-08 06:40:54.242322", "modified_by": "Administrator", "module": "Schools", "name": "Student Applicant", From e5d13f315624be780fd60a04ff255f6682bdd84b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 8 Sep 2016 17:57:55 +0530 Subject: [PATCH 31/84] Update set_student_guardian.py --- erpnext/patches/v7_1/set_student_guardian.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py index 7eac23bfd8e..e64279b8a82 100644 --- a/erpnext/patches/v7_1/set_student_guardian.py +++ b/erpnext/patches/v7_1/set_student_guardian.py @@ -5,10 +5,12 @@ def execute(): frappe.reload_doc("schools", "doctype", "student") frappe.reload_doc("schools", "doctype", "student_guardian") frappe.reload_doc("schools", "doctype", "student_sibling") + if "student" not in frappe.db.get_table_columns("Guardian"): + return guardian = frappe.get_all("Guardian", fields=["name", "student"]) for d in guardian: if d.student: student = frappe.get_doc("Student", d.student) if student: student.append("guardians", {"guardian": d.name}) - student.save() \ No newline at end of file + student.save() From e4d3809c87ae913f14cacc0fe64bb497ba1e509b Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 10:14:07 +0800 Subject: [PATCH 32/84] allow users without employee with hr permission to view all calendars --- erpnext/hr/doctype/employee/employee.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index c6b3633c65e..2e5fb260934 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -219,7 +219,11 @@ def get_employees_who_are_born_today(): and status = 'Active'""", {"date": today()}, as_dict=True) def get_holiday_list_for_employee(employee, raise_exception=True): - holiday_list, company = frappe.db.get_value("Employee", employee, ["holiday_list", "company"]) + if employee: + holiday_list, company = frappe.db.get_value("Employee", employee, ["holiday_list", "company"]) + else: + holiday_list='' + company=frappe.db.get_value("Global Defaults", None, "default_company") if not holiday_list: holiday_list = frappe.db.get_value("Company", company, "default_holiday_list") From 93c095bf167f8a30e5cedd450c066d1f7949c0a0 Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 10:15:56 +0800 Subject: [PATCH 33/84] allow users without employee with hr permission to view all calendars --- .../hr/doctype/leave_application/leave_application.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index 838d8f7513e..0aabd27d341 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -364,10 +364,11 @@ def get_events(start, end): employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True) - if not employee: - return events - - employee, company = employee.name, employee.company + if employee: + employee, company = employee.name, employee.company + else: + employee='' + company=frappe.db.get_value("Global Defaults", None, "default_company") from frappe.desk.reportview import build_match_conditions match_conditions = build_match_conditions("Leave Application") From 2ecddf58d2d53fc17fdfc073bf28205deb82689c Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 10:48:34 +0800 Subject: [PATCH 34/84] leave balance now fy not calendar changed the default from_date and to_date of Leave Balance Report to FY --- .../report/employee_leave_balance/employee_leave_balance.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js index 8c258e18e7f..59c25608c24 100644 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js +++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js @@ -8,14 +8,14 @@ frappe.query_reports["Employee Leave Balance"] = { "label": __("From Date"), "fieldtype": "Date", "reqd": 1, - "default": frappe.datetime.year_start() + "default": frappe.defaults.get_default("year_start_date") }, { "fieldname":"to_date", "label": __("To Date"), "fieldtype": "Date", "reqd": 1, - "default": frappe.datetime.year_end() + "default": frappe.defaults.get_default("year_end_date") }, { "fieldname":"company", @@ -26,4 +26,4 @@ frappe.query_reports["Employee Leave Balance"] = { "default": frappe.defaults.get_user_default("Company") } ] -} \ No newline at end of file +} From b7fc4b76e421a44f07cb30ea83de6c6632ed638e Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 11:02:33 +0800 Subject: [PATCH 35/84] stock entries from production_order dont fetch serial number of project stock entries from production_order dont fetch serial number of project --- .../manufacturing/doctype/production_order/production_order.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 2bf32048aaf..d598ee24b51 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -478,10 +478,12 @@ def make_stock_entry(production_order_id, purpose, qty=None): if production_order.source_warehouse: stock_entry.from_warehouse = production_order.source_warehouse stock_entry.to_warehouse = production_order.wip_warehouse + stock_entry.project = production_order.project else: stock_entry.from_warehouse = production_order.wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) + stock_entry.project = frappe.db.get_value("Stock Entry",{"production_order": production_order_id,"purpose": "Material Transfer for Manufacture"}, "project") stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() From 2efe20bd9a4feb8bcf70fc1176e9c212f870d67e Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 11:05:22 +0800 Subject: [PATCH 36/84] stock entries from production_order dont fetch serial number of project --- .../doctype/production_planning_tool/production_planning_tool.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index acb3ab8f1b4..ce849de7984 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -249,6 +249,7 @@ class ProductionPlanningTool(Document): "wip_warehouse" : "", "fg_warehouse" : d.warehouse, "status" : "Draft", + "project" : frappe.db.get_value("Sales Order",d.sales_order,"Project") } """ Club similar BOM and item for processing in case of Sales Orders """ From b64fc33be1360c2c792841b31429bf6992b60588 Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Fri, 9 Sep 2016 11:08:39 +0800 Subject: [PATCH 37/84] stock entries from production_order dont fetch serial number of project --- erpnext/stock/doctype/stock_entry/stock_entry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index e35f3d29659..f31901512d6 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -232,6 +232,18 @@ class StockEntry(StockController): frappe.bold(d.transfer_qty)), NegativeStockError, title=_('Insufficient Stock')) + def set_serial_nos(self,production_order_id): + + previous_se = frappe.db.get_value("Stock Entry",{"production_order": production_order_id, + "purpose": "Material Transfer for Manufacture"}, "name") + + for d in self.get('items'): + previous_serial_no = frappe.db.get_value("Stock Entry Detail",{"parent": previous_se, + "item_code": d.item_code}, "serial_no") + + if previous_serial_no: + d.serial_no = previous_serial_no + def get_stock_and_rate(self): self.set_transfer_qty() self.set_actual_qty() @@ -551,6 +563,9 @@ class StockEntry(StockController): item["to_warehouse"] = self.to_warehouse if self.purpose=="Subcontract" else "" self.add_to_stock_entry_detail(item_dict) + # fetch the serial_no of the first stock entry for the second stock entry + if self.production_order and self.purpose == "Manufacture": + self.set_serial_nos(self.production_order) # add finished goods item if self.purpose in ("Manufacture", "Repack"): From b835fef8ac1bf587b1ef8834023e507b27344fd0 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Fri, 9 Sep 2016 11:19:22 +0530 Subject: [PATCH 38/84] [enhancement] modify payment request to get payment url (#6097) * [enhancement] modify payment request to get payment url * redirect to payment url if payment initiated via shopping cart --- .../payment_request/payment_request.py | 79 +++++++++++++++---- erpnext/accounts/utils.py | 55 +++++++++++++ 2 files changed, 118 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 30d043f7299..84a8e82c14a 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -6,10 +6,11 @@ from __future__ import unicode_literals import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import flt, get_url, nowdate +from frappe.utils import flt, nowdate, get_url from erpnext.accounts.party import get_party_account from erpnext.accounts.utils import get_account_currency from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry, get_company_defaults +from frappe.integration_broker.doctype.integration_service.integration_service import get_integration_controller class PaymentRequest(Document): def validate(self): @@ -25,7 +26,7 @@ class PaymentRequest(Document): ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) if self.payment_account and ref_doc.currency != frappe.db.get_value("Account", self.payment_account, "account_currency"): frappe.throw(_("Transaction currency must be same as Payment Gateway currency")) - + def on_submit(self): send_mail = True self.make_communication_entry() @@ -35,17 +36,13 @@ class PaymentRequest(Document): send_mail = False if send_mail and not self.flags.mute_email: - self.send_payment_request() + self.set_payment_request_url() self.send_email() def on_cancel(self): + self.check_if_payment_entry_exists() self.set_as_cancelled() - def get_payment_url(self): - """ This is blanck method to trigger hooks call from individual payment gateway app - which will return respective payment gateway""" - pass - def make_invoice(self): ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart": @@ -54,20 +51,39 @@ class PaymentRequest(Document): si = si.insert(ignore_permissions=True) si.submit() - def send_payment_request(self): + def set_payment_request_url(self): if self.payment_account: - self.payment_url = get_url("/api/method/erpnext.accounts.doctype.payment_request.payment_request.generate_payment_request?name={0}".format(self.name)) + self.payment_url = self.get_payment_url() if self.payment_url: self.db_set('payment_url', self.payment_url) if self.payment_url or not self.payment_gateway_account: self.db_set('status', 'Initiated') + + def get_payment_url(self): + data = frappe.db.get_value(self.reference_doctype, self.reference_name, + ["company", "customer_name"], as_dict=1) + + controller = get_integration_controller(self.payment_gateway, setup=False) + controller.validate_transaction_currency(self.currency) + + return controller.get_payment_url(**{ + "amount": self.grand_total, + "title": data.company, + "description": self.subject, + "reference_doctype": "Payment Request", + "reference_docname": self.name, + "payer_email": self.email_to or frappe.session.user, + "payer_name": data.customer_name, + "order_id": self.name, + "currency": self.currency + }) def set_as_paid(self): if frappe.session.user == "Guest": frappe.set_user("Administrator") - + payment_entry = self.create_payment_entry() self.make_invoice() @@ -141,6 +157,13 @@ class PaymentRequest(Document): def set_as_cancelled(self): self.db_set("status", "Cancelled") + + def check_if_payment_entry_exists(self): + if self.status == "Paid": + payment_entry = frappe.db.sql_list("""select parent from `tabPayment Entry Reference` + where reference_name=%s""", self.reference_name) + if payment_entry: + frappe.throw(_("Payment Entry already exists"), title=_('Error')) def make_communication_entry(self): """Make communication entry""" @@ -156,7 +179,33 @@ class PaymentRequest(Document): def get_payment_success_url(self): return self.payment_success_url + + def on_payment_authorized(self, status=None): + if not status: + return + + shopping_cart_settings = frappe.get_doc("Shopping Cart Settings") + if status in ["Authorized", "Completed"]: + redirect_to = None + self.run_method("set_as_paid") + + # if shopping cart enabled and in session + if (shopping_cart_settings.enabled and hasattr(frappe.local, "session") + and frappe.local.session.user != "Guest"): + + success_url = shopping_cart_settings.payment_success_url + if success_url: + redirect_to = ({ + "Orders": "orders", + "Invoices": "invoices", + "My Account": "me" + }).get(success_url, "me") + else: + redirect_to = get_url("/orders/{0}".format(self.reference_name)) + + return redirect_to + @frappe.whitelist(allow_guest=True) def make_payment_request(**args): """Make payment request""" @@ -201,8 +250,9 @@ def make_payment_request(**args): pr.submit() if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart": - generate_payment_request(pr.name) frappe.db.commit() + frappe.local.response["type"] = "redirect" + frappe.local.response["location"] = pr.get_payment_url() if not args.cart: return pr @@ -255,10 +305,6 @@ def get_print_format_list(ref_doctype): "print_format": print_format_list } -@frappe.whitelist(allow_guest=True) -def generate_payment_request(name): - frappe.get_doc("Payment Request", name).run_method("get_payment_url") - @frappe.whitelist(allow_guest=True) def resend_payment_email(docname): return frappe.get_doc("Payment Request", docname).send_email() @@ -278,6 +324,7 @@ def make_status_as_paid(doc, method): doc = frappe.get_doc("Payment Request", payment_request_name) if doc.status != "Paid": doc.db_set('status', 'Paid') + frappe.db.commit() def get_dummy_message(use_dummy_message=True): return """ diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 6efb28813dd..9b28cbddb1e 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -570,3 +570,58 @@ def get_children(): each["balance_in_account_currency"] = flt(get_balance_on(each.get("value"))) return acc + +def create_payment_gateway_and_account(gateway): + create_payment_gateway(gateway) + create_payment_gateway_account(gateway) + +def create_payment_gateway(gateway): + # NOTE: we don't translate Payment Gateway name because it is an internal doctype + if not frappe.db.exists("Payment Gateway", gateway): + payment_gateway = frappe.get_doc({ + "doctype": "Payment Gateway", + "gateway": gateway + }) + payment_gateway.insert(ignore_permissions=True) + +def create_payment_gateway_account(gateway): + from erpnext.setup.setup_wizard.setup_wizard import create_bank_account + + company = frappe.db.get_value("Global Defaults", None, "default_company") + if not company: + return + + # NOTE: we translate Payment Gateway account name because that is going to be used by the end user + bank_account = frappe.db.get_value("Account", {"account_name": _(gateway), "company": company}, + ["name", 'account_currency'], as_dict=1) + + if not bank_account: + # check for untranslated one + bank_account = frappe.db.get_value("Account", {"account_name": gateway, "company": company}, + ["name", 'account_currency'], as_dict=1) + + if not bank_account: + # try creating one + bank_account = create_bank_account({"company_name": company, "bank_account": _(gateway)}) + + if not bank_account: + frappe.msgprint(_("Payment Gateway Account not created, please create one manually.")) + return + + # if payment gateway account exists, return + if frappe.db.exists("Payment Gateway Account", + {"payment_gateway": gateway, "currency": bank_account.account_currency}): + return + + try: + frappe.get_doc({ + "doctype": "Payment Gateway Account", + "is_default": 1, + "payment_gateway": gateway, + "payment_account": bank_account.name, + "currency": bank_account.account_currency + }).insert(ignore_permissions=True) + + except frappe.DuplicateEntryError: + # already exists, due to a reinstall? + pass From 8d0b826840ad7a0229a1482b4a08ef835a4b6945 Mon Sep 17 00:00:00 2001 From: Ben Cornwell-Mott Date: Fri, 9 Sep 2016 08:00:54 -0700 Subject: [PATCH 39/84] Added supplier quotation filter for Quoted Item Comparison --- .../quoted_item_comparison.js | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js index 0f44baacafc..9b0b2437185 100644 --- a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js +++ b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js @@ -4,12 +4,43 @@ frappe.query_reports["Quoted Item Comparison"] = { "filters": [ { + "fieldname":"supplier_quotation", + "label": __("Supplier Quotation"), + "fieldtype": "Link", + "options": "Supplier Quotation", + "default": "", + "get_query": function() { + return { + filters: {"docstatus": ["<",2]} + } + } + + + },{ "fieldname":"item", "label": __("Item"), "fieldtype": "Link", "options": "Item", - "default": "" - + "default": "", + "reqd": 1, + "get_query": function() { + var quote = frappe.query_report_filters_by_name.supplier_quotation.get_value(); + if (quote != "") + { + return { + query: "erpnext.buying.doctype.quality_inspection.quality_inspection.item_query", + filters: { + "from": "Supplier Quotation Item", + "parent": quote + } + } + } + else{ + return{ + filters: {"disabled":0} + } + } + } } ], onload: function(report) { From 3aa315040fc2a016230fb87127f4b4aeb793ff40 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 11 Sep 2016 16:48:24 +0530 Subject: [PATCH 40/84] [fix] paging for item group --- .../setup/doctype/item_group/item_group.js | 8 +++++++- .../setup/doctype/item_group/item_group.py | 4 +++- erpnext/stock/doctype/item/item.py | 20 ++++++++++--------- erpnext/templates/generators/item_group.html | 6 +++--- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/erpnext/setup/doctype/item_group/item_group.js b/erpnext/setup/doctype/item_group/item_group.js index 46d403417d9..c55c7cbf129 100644 --- a/erpnext/setup/doctype/item_group/item_group.js +++ b/erpnext/setup/doctype/item_group/item_group.js @@ -20,7 +20,13 @@ frappe.ui.form.on("Item Group", { frm.trigger("set_root_readonly"); frm.add_custom_button(__("Item Group Tree"), function() { frappe.set_route("Tree", "Item Group"); - }, "icon-sitemap"); + }); + + if(!frm.is_new()) { + frm.add_custom_button(__("Items"), function() { + frappe.set_route("List", "Item", {"item_group": frm.doc.name}); + }); + } }, set_root_readonly: function(frm) { diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py index 5375db0b60e..12899cddd08 100644 --- a/erpnext/setup/doctype/item_group/item_group.py +++ b/erpnext/setup/doctype/item_group/item_group.py @@ -60,13 +60,15 @@ class ItemGroup(NestedSet, WebsiteGenerator): def get_context(self, context): context.show_search=True + context.page_length = 6 context.search_link = '/product_search' start = int(frappe.form_dict.start or 0) if start < 0: start = 0 context.update({ - "items": get_product_list_for_group(product_group = self.name, start=start, limit=24, search=frappe.form_dict.get("search")), + "items": get_product_list_for_group(product_group = self.name, start=start, + limit=context.page_length, search=frappe.form_dict.get("search")), "parent_groups": get_parent_item_groups(self.name), "title": self.name, "products_as_list": cint(frappe.db.get_single_value('Website Settings', 'products_as_list')) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index b546df4126f..454fc709816 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -455,16 +455,18 @@ class Item(WebsiteGenerator): def cant_change(self): if not self.get("__islocal"): - vals = frappe.db.get_value("Item", self.name, ["has_serial_no", "is_stock_item", - "valuation_method", "has_batch_no", "is_fixed_asset"], as_dict=True) + to_check = ("has_serial_no", "is_stock_item", + "valuation_method", "has_batch_no", "is_fixed_asset") - if vals and ((self.is_stock_item != vals.is_stock_item) or - vals.has_serial_no != self.has_serial_no or - vals.has_batch_no != self.has_batch_no or - cstr(vals.valuation_method) != cstr(self.valuation_method)): - if self.check_if_linked_document_exists(): - frappe.throw(_("As there are existing transactions for this item, \ - you can not change the values of 'Has Serial No', 'Has Batch No', 'Is Stock Item' and 'Valuation Method'")) + vals = frappe.db.get_value("Item", self.name, to_check, as_dict=True) + + if vals: + for key in to_check: + if self.get(key) != vals.get(key): + if not self.check_if_linked_document_exists(): + break # no linked document, allowed + else: + frappe.throw(_("As there are existing transactions for this item, you can not change the value of {0}").format(frappe.bold(self.meta.get_label(key)))) if vals and not self.is_fixed_asset and self.is_fixed_asset != vals.is_fixed_asset: asset = frappe.db.get_all("Asset", filters={"item_code": self.name, "docstatus": 1}, limit=1) diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html index b9926d64331..674143d0872 100644 --- a/erpnext/templates/generators/item_group.html +++ b/erpnext/templates/generators/item_group.html @@ -31,10 +31,10 @@
{% if frappe.form_dict.start|int > 0 %} - Prev + Prev {% endif %} - {% if items|length == 24 %} - Next + {% if items|length == page_length %} + Next {% endif %}
{% else %} From bd979ec1ed892d5b04c56ecdc022f3a47d6ab8ea Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Mon, 12 Sep 2016 09:46:10 +0800 Subject: [PATCH 41/84] [fix] itemwise sales register add sales invoice to delivery note when update stock in item wise sales register put sales invoice into delivery note field when delivery note is null and update stock ticked --- .../item_wise_sales_register/item_wise_sales_register.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index 9f303499cbb..39e38d7a13a 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -30,6 +30,8 @@ def execute(filters=None): elif d.so_detail: delivery_note = ", ".join(frappe.db.sql_list("""select distinct parent from `tabDelivery Note Item` where docstatus=1 and so_detail=%s""", d.so_detail)) + if not delivery_note and d.update_stock: + delivery_note = d.parent row = [d.item_code, d.item_name, d.item_group, d.parent, d.posting_date, d.customer, d.customer_name, d.customer_group, d.debit_to, d.mode_of_payment, d.territory, d.project, d.company, d.sales_order, @@ -84,7 +86,7 @@ def get_items(filters): si_item.item_code, si_item.item_name, si_item.item_group, si_item.sales_order, si_item.delivery_note, si_item.income_account, si_item.cost_center, si_item.qty, si_item.base_net_rate, si_item.base_net_amount, si.customer_name, - si.customer_group, si_item.so_detail, si.mode_of_payment + si.customer_group, si_item.so_detail, si.update_stock, si.mode_of_payment from `tabSales Invoice` si, `tabSales Invoice Item` si_item where si.name = si_item.parent and si.docstatus = 1 %s order by si.posting_date desc, si_item.item_code desc""" % conditions, filters, as_dict=1) From db33ebb0ffbf889dbfd6a81ad1f0cfc9512d6b69 Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Mon, 12 Sep 2016 14:54:46 +0800 Subject: [PATCH 42/84] [fix] status updater percent when qty is minus value --- erpnext/controllers/status_updater.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index ccbf3779012..7be6acdf8a4 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -245,8 +245,8 @@ class StatusUpdater(Document): frappe.db.sql("""update `tab%(target_parent_dt)s` set %(target_parent_field)s = round( ifnull((select - ifnull(sum(if(%(target_ref_field)s > %(target_field)s, %(target_field)s, %(target_ref_field)s)), 0) - / sum(%(target_ref_field)s) * 100 + ifnull(sum(if(%(target_ref_field)s > %(target_field)s, abs(%(target_field)s), abs(%(target_ref_field)s))), 0) + / sum(abs(%(target_ref_field)s)) * 100 from `tab%(target_dt)s` where parent="%(name)s"), 0), 2) %(update_modified)s where name='%(name)s'""" % args) From 4fc70d962b72d0f57af69cef2c829f7602872c22 Mon Sep 17 00:00:00 2001 From: robert schouten Date: Mon, 12 Sep 2016 15:23:51 +0800 Subject: [PATCH 43/84] add customer and supplier names to some reports --- .../delivered_items_to_be_billed.json | 4 ++-- .../ordered_items_to_be_billed.json | 4 ++-- .../purchase_order_items_to_be_billed.json | 4 ++-- .../received_items_to_be_billed.json | 4 ++-- .../ordered_items_to_be_delivered.json | 4 ++-- .../purchase_order_items_to_be_received.json | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.json b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.json index 5a8877f6694..34322732301 100644 --- a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.json +++ b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-05-17 08:40:18.711626", + "modified": "2016-08-18 14:29:50.680329", "modified_by": "Administrator", "module": "Accounts", "name": "Delivered Items To Be Billed", "owner": "Administrator", - "query": "select\n `tabDelivery Note`.`name` as \"Delivery Note:Link/Delivery Note:120\",\n\t`tabDelivery Note`.`customer` as \"Customer:Link/Customer:120\",\n\t`tabDelivery Note`.`posting_date` as \"Date:Date\",\n\t`tabDelivery Note`.`project` as \"Project\",\n\t`tabDelivery Note Item`.`item_code` as \"Item:Link/Item:120\",\n\t(`tabDelivery Note Item`.`base_amount` - `tabDelivery Note Item`.`billed_amt`*ifnull(`tabDelivery Note`.conversion_rate, 1)) as \"Pending Amount:Currency:110\",\n\t`tabDelivery Note Item`.`item_name` as \"Item Name::150\",\n\t`tabDelivery Note Item`.`description` as \"Description::200\",\n\t`tabDelivery Note`.`company` as \"Company:Link/Company:\"\nfrom `tabDelivery Note`, `tabDelivery Note Item`\nwhere \n `tabDelivery Note`.name = `tabDelivery Note Item`.parent \n and `tabDelivery Note`.docstatus = 1 \n and `tabDelivery Note`.`status` not in (\"Stopped\", \"Closed\") \n and `tabDelivery Note Item`.amount > 0\n and `tabDelivery Note Item`.billed_amt < `tabDelivery Note Item`.amount\norder by `tabDelivery Note`.`name` desc", + "query": "select\n `tabDelivery Note`.`name` as \"Delivery Note:Link/Delivery Note:120\",\n\t`tabDelivery Note`.`customer` as \"Customer:Link/Customer:120\",\n\t`tabDelivery Note`.`customer_name` as \"Customer Name::150\",\n\t`tabDelivery Note`.`posting_date` as \"Date:Date\",\n\t`tabDelivery Note`.`project` as \"Project\",\n\t`tabDelivery Note Item`.`item_code` as \"Item:Link/Item:120\",\n\t(`tabDelivery Note Item`.`base_amount` - `tabDelivery Note Item`.`billed_amt`*ifnull(`tabDelivery Note`.conversion_rate, 1)) as \"Pending Amount:Currency:110\",\n\t`tabDelivery Note Item`.`item_name` as \"Item Name::150\",\n\t`tabDelivery Note Item`.`description` as \"Description::200\",\n\t`tabDelivery Note`.`company` as \"Company:Link/Company:\"\nfrom `tabDelivery Note`, `tabDelivery Note Item`\nwhere \n `tabDelivery Note`.name = `tabDelivery Note Item`.parent \n and `tabDelivery Note`.docstatus = 1 \n and `tabDelivery Note`.`status` not in (\"Stopped\", \"Closed\") \n and `tabDelivery Note Item`.amount > 0\n and `tabDelivery Note Item`.billed_amt < `tabDelivery Note Item`.amount\norder by `tabDelivery Note`.`name` desc", "ref_doctype": "Sales Invoice", "report_name": "Delivered Items To Be Billed", "report_type": "Query Report" diff --git a/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json b/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json index 983ec223c5c..9091aa196f9 100644 --- a/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json +++ b/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-05-17 08:26:50.810208", + "modified": "2016-08-18 14:29:50.680329", "modified_by": "Administrator", "module": "Accounts", "name": "Ordered Items To Be Billed", "owner": "Administrator", - "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.base_amount as \"Amount:Currency:110\",\n (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (`tabSales Order Item`.base_amount - (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1))) as \"Pending Amount:Currency:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order`.`company` as \"Company:Link/Company:\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Closed\"\n and `tabSales Order Item`.amount > 0\n and `tabSales Order Item`.billed_amt < `tabSales Order Item`.amount\norder by `tabSales Order`.transaction_date asc", + "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`customer_name` as \"Customer Name:150\",\n`tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.base_amount as \"Amount:Currency:110\",\n (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (`tabSales Order Item`.base_amount - (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1))) as \"Pending Amount:Currency:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order`.`company` as \"Company:Link/Company:\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Closed\"\n and `tabSales Order Item`.amount > 0\n and `tabSales Order Item`.billed_amt < `tabSales Order Item`.amount\norder by `tabSales Order`.transaction_date asc", "ref_doctype": "Sales Invoice", "report_name": "Ordered Items To Be Billed", "report_type": "Query Report" diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json index a64e7cf8f42..004c5a92236 100644 --- a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json +++ b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-05-17 08:28:26.093139", + "modified": "2016-08-18 15:46:45.789536", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Order Items To Be Billed", "owner": "Administrator", - "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.base_amount as \"Amount:Currency:100\",\n\t(`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) as \"Billed Amount:Currency:100\", \n\t(`tabPurchase Order Item`.base_amount - (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1))) as \"Amount to Bill:Currency:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n\t`tabPurchase Order`.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status != \"Closed\"\n and `tabPurchase Order Item`.amount > 0\n\tand (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) < `tabPurchase Order Item`.base_amount\norder by `tabPurchase Order`.transaction_date asc", + "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order`.`supplier_name` as \"Supplier Name::150\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.base_amount as \"Amount:Currency:100\",\n\t(`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) as \"Billed Amount:Currency:100\", \n\t(`tabPurchase Order Item`.base_amount - (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1))) as \"Amount to Bill:Currency:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n\t`tabPurchase Order`.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status != \"Closed\"\n and `tabPurchase Order Item`.amount > 0\n\tand (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) < `tabPurchase Order Item`.base_amount\norder by `tabPurchase Order`.transaction_date asc", "ref_doctype": "Purchase Invoice", "report_name": "Purchase Order Items To Be Billed", "report_type": "Query Report" diff --git a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.json b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.json index 41843ac2d0c..00964c01b67 100644 --- a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.json +++ b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-05-17 08:38:49.654749", + "modified": "2016-08-18 14:32:20.965816", "modified_by": "Administrator", "module": "Accounts", "name": "Received Items To Be Billed", "owner": "Administrator", - "query": "select\n `tabPurchase Receipt`.`name` as \"Purchase Receipt:Link/Purchase Receipt:120\",\n `tabPurchase Receipt`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Receipt`.`posting_date` as \"Date:Date\",\n\t`tabPurchase Receipt Item`.`project` as \"Project\",\n\t`tabPurchase Receipt Item`.`item_code` as \"Item:Link/Item:120\",\n\t(`tabPurchase Receipt Item`.`base_amount` - `tabPurchase Receipt Item`.`billed_amt`*ifnull(`tabPurchase Receipt`.conversion_rate, 1)) as \"Pending Amount:Currency:110\",\n\t`tabPurchase Receipt Item`.`item_name` as \"Item Name::150\",\n\t`tabPurchase Receipt Item`.`description` as \"Description::200\",\n\t`tabPurchase Receipt`.`company` as \"Company:Link/Company:\"\nfrom `tabPurchase Receipt`, `tabPurchase Receipt Item`\nwhere\n `tabPurchase Receipt`.name = `tabPurchase Receipt Item`.parent \n and `tabPurchase Receipt`.docstatus = 1 \n and `tabPurchase Receipt`.status != \"Closed\" \n and `tabPurchase Receipt Item`.amount > 0\n and `tabPurchase Receipt Item`.billed_amt < `tabPurchase Receipt Item`.amount\norder by `tabPurchase Receipt`.`name` desc", + "query": "select\n `tabPurchase Receipt`.`name` as \"Purchase Receipt:Link/Purchase Receipt:120\",\n `tabPurchase Receipt`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Receipt`.`supplier_name` as \"Supplier Name::150\",\n\t`tabPurchase Receipt`.`posting_date` as \"Date:Date\",\n\t`tabPurchase Receipt Item`.`project` as \"Project\",\n\t`tabPurchase Receipt Item`.`item_code` as \"Item:Link/Item:120\",\n\t(`tabPurchase Receipt Item`.`base_amount` - `tabPurchase Receipt Item`.`billed_amt`*ifnull(`tabPurchase Receipt`.conversion_rate, 1)) as \"Pending Amount:Currency:110\",\n\t`tabPurchase Receipt Item`.`item_name` as \"Item Name::150\",\n\t`tabPurchase Receipt Item`.`description` as \"Description::200\",\n\t`tabPurchase Receipt`.`company` as \"Company:Link/Company:\"\nfrom `tabPurchase Receipt`, `tabPurchase Receipt Item`\nwhere\n `tabPurchase Receipt`.name = `tabPurchase Receipt Item`.parent \n and `tabPurchase Receipt`.docstatus = 1 \n and `tabPurchase Receipt`.status != \"Closed\" \n and `tabPurchase Receipt Item`.amount > 0\n and `tabPurchase Receipt Item`.billed_amt < `tabPurchase Receipt Item`.amount\norder by `tabPurchase Receipt`.`name` desc", "ref_doctype": "Purchase Invoice", "report_name": "Received Items To Be Billed", "report_type": "Query Report" diff --git a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json index 4d565193d97..be003400c4b 100644 --- a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json +++ b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-04-01 08:27:03.318987", + "modified": "2016-08-18 14:34:11.263672", "modified_by": "Administrator", "module": "Stock", "name": "Ordered Items To Be Delivered", "owner": "Administrator", - "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order` JOIN `tabSales Order Item` \n LEFT JOIN `tabBin` ON (`tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse)\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status not in (\"Stopped\", \"Closed\")\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\norder by `tabSales Order`.transaction_date asc", + "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`customer_name` as \"Customer Name::150\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order` JOIN `tabSales Order Item` \n LEFT JOIN `tabBin` ON (`tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse)\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status not in (\"Stopped\", \"Closed\")\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\norder by `tabSales Order`.transaction_date asc", "ref_doctype": "Delivery Note", "report_name": "Ordered Items To Be Delivered", "report_type": "Query Report" diff --git a/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json b/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json index fd78f28bb1b..ad559854ac2 100644 --- a/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json +++ b/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 1, "is_standard": "Yes", - "modified": "2016-04-01 08:26:59.904034", + "modified": "2016-08-18 14:36:12.159987", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Order Items To Be Received", "owner": "Administrator", - "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n\t`tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order Item`.`schedule_date` as \"Reqd by Date:Date:110\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Order Item`.received_qty as \"Received Qty:Float:100\", \n\t(`tabPurchase Order Item`.qty - ifnull(`tabPurchase Order Item`.received_qty, 0)) as \"Qty to Receive:Float:100\",\n `tabPurchase Order Item`.warehouse as \"Warehouse:Link/Warehouse:150\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n `tabPurchase Order Item`.brand as \"Brand::100\",\n\t`tabPurchase Order`.`company` as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status not in (\"Stopped\", \"Closed\")\n\tand ifnull(`tabPurchase Order Item`.received_qty, 0) < ifnull(`tabPurchase Order Item`.qty, 0)\norder by `tabPurchase Order`.transaction_date asc", + "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n\t`tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order Item`.`schedule_date` as \"Reqd by Date:Date:110\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order`.`supplier_name` as \"Supplier Name::150\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Order Item`.received_qty as \"Received Qty:Float:100\", \n\t(`tabPurchase Order Item`.qty - ifnull(`tabPurchase Order Item`.received_qty, 0)) as \"Qty to Receive:Float:100\",\n `tabPurchase Order Item`.warehouse as \"Warehouse:Link/Warehouse:150\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n `tabPurchase Order Item`.brand as \"Brand::100\",\n\t`tabPurchase Order`.`company` as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status not in (\"Stopped\", \"Closed\")\n\tand ifnull(`tabPurchase Order Item`.received_qty, 0) < ifnull(`tabPurchase Order Item`.qty, 0)\norder by `tabPurchase Order`.transaction_date asc", "ref_doctype": "Purchase Receipt", "report_name": "Purchase Order Items To Be Received", "report_type": "Query Report" From 60a05324ce9b7fd1a196cd1bbb291c077d4028a0 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 12 Sep 2016 01:37:46 +0530 Subject: [PATCH 44/84] POS changes and fixes --- erpnext/accounts/doctype/sales_invoice/pos.py | 3 - erpnext/accounts/page/pos/pos.js | 55 +++++++++++++++---- erpnext/public/js/pos/pos_invoice_list.html | 7 ++- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 5336b5452cf..5ed25b432a2 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -19,9 +19,6 @@ def get_pos_data(): if pos_profile.get('name'): pos_profile = frappe.get_doc('POS Profile', pos_profile.get('name')) - else: - frappe.msgprint('' - + _("Welcome to POS: Create your POS Profile") + ''); company_data = get_company_data(doc.company) update_pos_profile_data(doc, pos_profile, company_data) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index f3ee7d0be49..07e55d9a5c8 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -128,10 +128,11 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.list_body = this.list_dialog.body; if(this.si_docs.length > 0){ $(this.list_body).append('
\ -
Sr
\ -
Customer
\ +
Sr
\ +
Customer
\
Status
\ -
Grand Total
\ +
Paid Amount
\ +
Grand Total
\
') $.each(this.si_docs, function(index, data){ @@ -140,6 +141,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ sr: index + 1, name: key, customer: data[key].customer, + paid_amount: format_currency(data[key].paid_amount, me.frm.doc.currency), grand_total: format_currency(data[key].grand_total, me.frm.doc.currency), data: me.get_doctype_status(data[key]) })).appendTo($(me.list_body)); @@ -163,12 +165,12 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }, get_doctype_status: function(doc){ - if(doc.outstanding_amount == 0){ - return {status: "Paid", indicator: "green"} - }else if(doc.docstatus == 0){ + if(doc.docstatus == 0) { return {status: "Draft", indicator: "red"} - }else if(doc.paid_amount >= 0){ - return {status: "Unpaid", indicator: "orange"} + }else if(doc.outstanding_amount == 0) { + return {status: "Paid", indicator: "green"} + }else { + return {status: "Submitted", indicator: "blue"} } }, @@ -313,6 +315,15 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); this.party_field.make_input(); + this.set_focus() + }, + + set_focus: function(){ + if(this.default_customer){ + this.search.$input.focus(); + }else{ + this.party_field.$input.focus(); + } }, make_customer: function() { @@ -728,6 +739,26 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }, "octicon octicon-plus").addClass("btn-primary"); }, + print_dialog: function(){ + var me = this; + + msgprint = frappe.msgprint(format('{0}\ + {1}', [ + __('Print'), __('New') + ])); + + $('.print_doc').click(function(){ + html = frappe.render(me.print_template, me.frm.doc) + me.print_document(html) + }) + + $('.new_doc').click(function(){ + msgprint.hide() + me.create_new(); + }) + }, + print_document: function(html){ var w = window.open(); w.document.write(html); @@ -740,10 +771,10 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ submit_invoice: function(){ var me = this; - frappe.confirm(__("Do you really want to submit the invoice?"), function () { - me.change_status(); - frappe.msgprint(__("Sales invoice submitted sucessfully.")) - }) + this.change_status(); + if(this.frm.doc.docstatus == 1){ + this.print_dialog() + } }, change_status: function(){ diff --git a/erpnext/public/js/pos/pos_invoice_list.html b/erpnext/public/js/pos/pos_invoice_list.html index c0b47641296..6eecfe3b816 100644 --- a/erpnext/public/js/pos/pos_invoice_list.html +++ b/erpnext/public/js/pos/pos_invoice_list.html @@ -1,6 +1,7 @@
-
{%= sr %}
-
{%= customer %}
+
{%= sr %}
+
{%= customer %}
{{ data.status }}
-
{%= grand_total %}
+
{%= paid_amount %}
+
{%= grand_total %}
From a36a88b6de2a625d1041c860a182230cdd214b11 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 12 Sep 2016 13:15:44 +0530 Subject: [PATCH 45/84] Remove Difference Account field from Stock Entry parent form --- .../purchase_invoice/purchase_invoice.py | 3 ++ .../doctype/sales_invoice/sales_invoice.py | 2 ++ .../stock/doctype/stock_entry/stock_entry.js | 8 ----- .../doctype/stock_entry/stock_entry.json | 29 +------------------ .../stock/doctype/stock_entry/stock_entry.py | 6 ---- .../doctype/stock_entry/stock_entry_utils.py | 2 -- 6 files changed, 6 insertions(+), 44 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 38cef3134ed..adc30e2de73 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -302,6 +302,9 @@ class PurchaseInvoice(BuyingController): asset.save() def make_gl_entries(self, repost_future_gle=True): + if not self.grand_total: + return + self.auto_accounting_for_stock = \ cint(frappe.defaults.get_global_default("auto_accounting_for_stock")) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index a5028c5ee56..2b64d17046b 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -491,6 +491,8 @@ class SalesInvoice(SellingController): throw(_("Delivery Note {0} is not submitted").format(d.delivery_note)) def make_gl_entries(self, repost_future_gle=True): + if not self.grand_total: + return gl_entries = self.get_gl_entries() if gl_entries: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 6c2a14b50c7..a9d978a9c7c 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -40,14 +40,6 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ } } } - this.frm.set_query("difference_account", function() { - return { - "filters": { - "company": me.frm.doc.company, - "is_group": 0 - } - }; - }); } this.frm.get_field('items').grid.editable_fields = [ diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json index b5efc900108..0ab80c28fe1 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.json +++ b/erpnext/stock/doctype/stock_entry/stock_entry.json @@ -844,33 +844,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "", - "fieldname": "difference_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Difference Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -1431,7 +1404,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-04-07 06:40:03.284036", + "modified": "2016-09-08 06:40:03.284036", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry", diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index e35f3d29659..b1f8c9c676d 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -71,9 +71,6 @@ class StockEntry(StockController): if self.purpose not in valid_purposes: frappe.throw(_("Purpose must be one of {0}").format(comma_or(valid_purposes))) - if self.purpose in ("Manufacture", "Repack") and not self.difference_account: - self.difference_account = frappe.db.get_value("Company", self.company, "default_expense_account") - def set_transfer_qty(self): for item in self.get("items"): if not flt(item.qty): @@ -97,9 +94,6 @@ class StockEntry(StockController): if f in ["stock_uom", "conversion_factor"] or not item.get(f): item.set(f, item_details.get(f)) - if self.difference_account and not item.expense_account: - item.expense_account = self.difference_account - if not item.transfer_qty and item.qty: item.transfer_qty = item.qty * item.conversion_factor diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py index b75eeeadd76..cb3bb7bc5e6 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py @@ -57,8 +57,6 @@ def make_stock_entry(**args): s.purchase_receipt_no = args.purchase_receipt_no s.delivery_note_no = args.delivery_note_no s.sales_invoice_no = args.sales_invoice_no - if args.difference_account: - s.difference_account = args.difference_account if not args.cost_center: args.cost_center = frappe.get_value('Company', s.company, 'cost_center') From cc8644f86e4805e717d4bf80ff77a6be1337b203 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 7 Sep 2016 12:28:44 +0530 Subject: [PATCH 46/84] [Timesheet] Field rearrange --- .../doctype/sales_invoice/sales_invoice.json | 83 ++++++++----- .../projects/doctype/timesheet/timesheet.json | 12 +- .../timesheet_detail/timesheet_detail.json | 109 +++++++++++++----- 3 files changed, 142 insertions(+), 62 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 562eaaac53a..ffe5237b7db 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -1079,6 +1079,59 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project_detail", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "oldfieldname": "project_name", + "oldfieldtype": "Link", + "options": "Project", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2873,34 +2926,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "project", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Project", - "length": 0, - "no_copy": 0, - "oldfieldname": "project_name", - "oldfieldtype": "Link", - "options": "Project", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -3867,7 +3892,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-31 15:47:32.064861", + "modified": "2016-09-07 03:04:15.927629", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index cba48593e2c..781fa03e1f2 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -470,8 +470,8 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "working_hours", "columns": 0, + "fieldname": "working_hours", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, @@ -522,6 +522,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "billing_details", "fieldtype": "Section Break", "hidden": 0, @@ -544,9 +545,10 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_billing_hours", "fieldtype": "Float", "hidden": 0, @@ -559,9 +561,9 @@ "no_copy": 0, "permlevel": 0, "precision": "", - "print_hide": 0, + "print_hide": 1, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -737,7 +739,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-01 11:33:38.110421", + "modified": "2016-09-07 02:54:20.930768", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json index 9bd4b8df7e3..560ce9f7a86 100644 --- a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json +++ b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json @@ -10,33 +10,6 @@ "document_type": "Document", "editable_grid": 1, "fields": [ - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 1, - "depends_on": "", - "fieldname": "billable", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Bill", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -165,6 +138,58 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_6", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 1, + "depends_on": "", + "fieldname": "billable", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Bill", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -195,6 +220,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "billing_hours", "fieldtype": "Float", "hidden": 0, @@ -351,6 +377,33 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "billed_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Billed Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -577,7 +630,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-08-26 03:00:11.431794", + "modified": "2016-09-07 02:55:22.545715", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet Detail", From a6927e05ba840e6f9f51eed601e978b9bca15921 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 7 Sep 2016 14:39:17 +0530 Subject: [PATCH 47/84] set project wise timesheet data --- .../doctype/sales_invoice/sales_invoice.js | 17 ++++++++--- .../doctype/sales_invoice/sales_invoice.py | 21 +++++++++++++ .../projects/doctype/timesheet/timesheet.json | 28 ++++++++++++++++- .../projects/doctype/timesheet/timesheet.py | 30 +++++++++++++++++++ 4 files changed, 91 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 4886deaa719..47ebc3da789 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -462,12 +462,21 @@ cur_frm.set_query("asset", "items", function(doc, cdt, cdn) { frappe.ui.form.on('Sales Invoice', { setup: function(frm){ frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function(doc, cdt, cdn){ - return { - filters: [ - ["Timesheet", "status", "in", ["Submitted", "Payslip"]] - ] + return{ + query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet", + filters: {'project': doc.project} } } + }, + + project: function(frm){ + frm.call({ + method: "add_timesheet_data", + doc: frm.doc, + callback: function(r, rt) { + refresh_field(['timesheets']) + } + }) } }) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index ec72be1bada..34296eabe80 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -14,6 +14,7 @@ from erpnext.accounts.doctype.sales_invoice.pos import update_multi_mode_option from erpnext.controllers.selling_controller import SellingController from erpnext.accounts.utils import get_account_currency from erpnext.stock.doctype.delivery_note.delivery_note import update_billed_amount_based_on_so +from erpnext.projects.doctype.timesheet.timesheet import get_projectwise_timesheet_data from erpnext.accounts.doctype.asset.depreciation \ import get_disposal_account_and_cost_center, get_gl_entries_on_asset_disposal @@ -221,11 +222,19 @@ class SalesInvoice(SellingController): for d in self.timesheets: if d.time_sheet: timesheet = frappe.get_doc("Timesheet", d.time_sheet) + self.update_time_sheet_detail(timesheet, d) timesheet.sales_invoice = sales_invoice timesheet.flags.ignore_validate_update_after_submit = True timesheet.set_status() timesheet.save() + def update_time_sheet_detail(self, timesheet, args): + for data in timesheet.time_logs: + if (self.project and self.project == data.project) or \ + (not self.project and (data.billing_amount - data.billed_amount) > 0): + data.billed_amount = args.billing_amount + if self.project: return + def on_update(self): self.set_paid_amount() @@ -464,6 +473,18 @@ class SalesInvoice(SellingController): self.total_billing_amount = total_billing_amount + def add_timesheet_data(self): + self.set('timesheets', []) + if self.project: + for data in get_projectwise_timesheet_data(self.project): + self.append('timesheets', { + 'time_sheet': data.parent, + 'billing_hours': data.billing_hours, + 'billing_amount': data.billing_amt + }) + + self.calculate_billing_amount_from_timesheet() + def get_warehouse(self): user_pos_profile = frappe.db.sql("""select name, warehouse from `tabPOS Profile` where ifnull(user,'') = %s and company = %s""", (frappe.session['user'], self.company)) diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index 781fa03e1f2..1c174c81f8b 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -570,6 +570,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_billed_amount", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Total Billed Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -739,7 +765,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-07 02:54:20.930768", + "modified": "2016-09-07 06:48:27.316087", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 63cb8981d02..68a8f4d5557 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -31,6 +31,7 @@ class Timesheet(Document): self.total_billing_hours = 0.0 self.total_billing_amount = 0.0 self.total_costing_amount = 0.0 + self.total_billed_amount = 0.0 for d in self.get("time_logs"): self.update_billing_hours(d) @@ -40,6 +41,7 @@ class Timesheet(Document): if d.billable: self.total_billing_amount += flt(d.billing_amount) self.total_costing_amount += flt(d.costing_amount) + self.total_billed_amount += flt(d.billed_amount) def update_billing_hours(self, args): if cint(args.billing_hours) == 0: @@ -245,6 +247,34 @@ class Timesheet(Document): data.billing_amount = data.billing_rate * hours data.costing_amount = data.costing_rate * hours +@frappe.whitelist() +def get_projectwise_timesheet_data(project, parent=None): + cond = '' + if parent: + cond = "and parent = %(parent)s" + + return frappe.db.sql("""select parent, billing_hours, (billing_amount - billed_amount) as billing_amt + from `tabTimesheet Detail` where docstatus=1 and project = %(project)s {0} + having billing_amt > 0""".format(cond), {'project': project, 'parent': parent}, as_dict=1) + +@frappe.whitelist() +def get_timesheet(doctype, txt, searchfield, start, page_len, filters): + if not filters: filters = {} + + condition = "" + if filters.get("project"): + condition = "and tsd.project = %(project)s" + + return frappe.db.sql("""select distinct tsd.parent from `tabTimesheet Detail` tsd, + `tabTimesheet` ts where ts.status in ('Submitted', 'Payslip') and + (tsd.billing_amount - tsd.billed_amount) > 0 and + tsd.docstatus = 1 and tsd.parent LIKE %(txt)s {condition} + order by tsd.parent limit %(start)s, %(page_len)s""" + .format(condition=condition), { + "txt": "%%%s%%" % frappe.db.escape(txt), + "start": start, "page_len": page_len, 'project': filters.get("project") + }) + @frappe.whitelist() def make_sales_invoice(source_name, target=None): target = frappe.new_doc("Sales Invoice") From 3815ebff8ae2dc29c956783174c7b05bcf147037 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 8 Sep 2016 18:17:43 +0530 Subject: [PATCH 48/84] Added %billed in timesheet --- .../doctype/sales_invoice/sales_invoice.js | 22 +++-- .../doctype/sales_invoice/sales_invoice.json | 83 +++++++------------ .../doctype/sales_invoice/sales_invoice.py | 17 ++-- .../sales_invoice_timesheet.json | 31 ++++++- .../projects/doctype/timesheet/timesheet.js | 4 +- .../projects/doctype/timesheet/timesheet.json | 70 ++++++++++++++-- .../projects/doctype/timesheet/timesheet.py | 61 +++++++++----- .../timesheet_detail/timesheet_detail.json | 82 +++++++++++------- 8 files changed, 240 insertions(+), 130 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 47ebc3da789..47f1a5c1c34 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -481,16 +481,22 @@ frappe.ui.form.on('Sales Invoice', { }) frappe.ui.form.on('Sales Invoice Timesheet', { - time_sheet: function(frm){ - frm.call({ - method: "calculate_billing_amount_from_timesheet", - doc: frm.doc, + time_sheet: function(frm, cdt, cdn){ + var d = locals[cdt][cdn]; + frappe.call({ + method: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet_data", + args: { + 'name': d.time_sheet, + 'project': frm.doc.project || null + }, callback: function(r, rt) { - refresh_field('total_billing_amount') + if(r.message){ + data = r.message; + frappe.model.set_value(cdt, cdn, "billing_hours", data.billing_hours); + frappe.model.set_value(cdt, cdn, "billing_amount", data.billing_amount); + frappe.model.set_value(cdt, cdn, "timesheet_detail", data.timesheet_detail); + } } }) } }) - -cur_frm.add_fetch("time_sheet", "total_billing_hours", "billing_hours"); -cur_frm.add_fetch("time_sheet", "total_billing_amount", "billing_amount"); \ No newline at end of file diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index ffe5237b7db..99b479348ac 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -337,6 +337,34 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "oldfieldname": "project_name", + "oldfieldtype": "Link", + "options": "Project", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -1079,59 +1107,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "project_detail", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "project", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Project", - "length": 0, - "no_copy": 0, - "oldfieldname": "project_name", - "oldfieldtype": "Link", - "options": "Project", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -3892,7 +3867,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-07 03:04:15.927629", + "modified": "2016-09-08 09:05:02.895682", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 34296eabe80..f75a9af8ab2 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -222,17 +222,19 @@ class SalesInvoice(SellingController): for d in self.timesheets: if d.time_sheet: timesheet = frappe.get_doc("Timesheet", d.time_sheet) - self.update_time_sheet_detail(timesheet, d) - timesheet.sales_invoice = sales_invoice + self.update_time_sheet_detail(timesheet, d, sales_invoice) + timesheet.calculate_total_amounts() + timesheet.calculate_percentage_billed() timesheet.flags.ignore_validate_update_after_submit = True timesheet.set_status() timesheet.save() - def update_time_sheet_detail(self, timesheet, args): + def update_time_sheet_detail(self, timesheet, args, sales_invoice): for data in timesheet.time_logs: - if (self.project and self.project == data.project) or \ - (not self.project and (data.billing_amount - data.billed_amount) > 0): - data.billed_amount = args.billing_amount + if (self.project and args.timesheet_detail == data.name) or \ + (not self.project and not data.sales_invoice) or \ + (not sales_invoice and data.sales_invoice == self.name): + data.sales_invoice = sales_invoice if self.project: return def on_update(self): @@ -480,7 +482,8 @@ class SalesInvoice(SellingController): self.append('timesheets', { 'time_sheet': data.parent, 'billing_hours': data.billing_hours, - 'billing_amount': data.billing_amt + 'billing_amount': data.billing_amt, + 'timesheet_detail': data.name }) self.calculate_billing_amount_from_timesheet() diff --git a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json index 25dd3cb845c..e34accad9ca 100644 --- a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json +++ b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json @@ -14,6 +14,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "time_sheet", "fieldtype": "Link", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "billing_hours", "fieldtype": "Float", "hidden": 0, @@ -65,6 +67,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "billing_amount", "fieldtype": "Currency", "hidden": 0, @@ -85,6 +88,32 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "timesheet_detail", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Timesheet Detail", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "hide_heading": 0, @@ -97,7 +126,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-08-22 21:32:55.504103", + "modified": "2016-09-08 05:36:00.922319", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index 42fe005dfcc..a47b4ac44a6 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -31,7 +31,7 @@ frappe.ui.form.on("Timesheet", { refresh: function(frm) { if(frm.doc.docstatus==1) { - if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0){ + if(frm.doc.per_billed < 100){ frm.add_custom_button(__("Make Sales Invoice"), function() { frm.trigger("make_invoice") }, "icon-file-alt"); } @@ -42,7 +42,7 @@ frappe.ui.form.on("Timesheet", { } } - if(frm.doc.sales_invoice) { + if(frm.doc.per_billed > 0) { cur_frm.fields_dict["time_logs"].grid.toggle_enable("billing_hours", false); } }, diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index 1c174c81f8b..caa3e7e1b02 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -571,23 +571,49 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "total_billed_amount", + "fieldname": "total_billed_hours", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Total Billed Amount", + "label": "Total Billed Hours", "length": 0, "no_copy": 0, "permlevel": 0, "precision": "", - "print_hide": 1, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_costing_amount", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Total Costing Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, @@ -651,25 +677,51 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "total_costing_amount", + "fieldname": "total_billed_amount", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Total Costing Amount", + "label": "Total Billed Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "per_billed", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "% Amount Billed", "length": 0, "no_copy": 0, "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -765,7 +817,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-07 06:48:27.316087", + "modified": "2016-09-08 06:35:06.943066", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 68a8f4d5557..867603b0a96 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -25,10 +25,12 @@ class Timesheet(Document): self.validate_time_logs() self.update_cost() self.calculate_total_amounts() + self.calculate_percentage_billed() def calculate_total_amounts(self): self.total_hours = 0.0 self.total_billing_hours = 0.0 + self.total_billed_hours = 0.0 self.total_billing_amount = 0.0 self.total_costing_amount = 0.0 self.total_billed_amount = 0.0 @@ -37,11 +39,17 @@ class Timesheet(Document): self.update_billing_hours(d) self.total_hours += flt(d.hours) - self.total_billing_hours += flt(d.billing_hours) - if d.billable: + if d.billable: + self.total_billing_hours += flt(d.billing_hours) self.total_billing_amount += flt(d.billing_amount) self.total_costing_amount += flt(d.costing_amount) - self.total_billed_amount += flt(d.billed_amount) + self.total_billed_amount += flt(d.billing_amount) if d.sales_invoice else 0.0 + self.total_billed_hours += flt(d.billing_hours) if d.sales_invoice else 0.0 + + def calculate_percentage_billed(self): + self.per_billed = 0 + if self.total_billed_amount > 0 and self.total_billing_amount > 0: + self.per_billed = (self.total_billed_amount * 100) / self.total_billing_amount def update_billing_hours(self, args): if cint(args.billing_hours) == 0: @@ -54,7 +62,7 @@ class Timesheet(Document): "2": "Cancelled" }[str(self.docstatus or 0)] - if self.sales_invoice: + if self.per_billed == 100: self.status = "Billed" if self.salary_slip: @@ -253,9 +261,9 @@ def get_projectwise_timesheet_data(project, parent=None): if parent: cond = "and parent = %(parent)s" - return frappe.db.sql("""select parent, billing_hours, (billing_amount - billed_amount) as billing_amt + return frappe.db.sql("""select name, parent, billing_hours, billing_amount as billing_amt from `tabTimesheet Detail` where docstatus=1 and project = %(project)s {0} - having billing_amt > 0""".format(cond), {'project': project, 'parent': parent}, as_dict=1) + and sales_invoice is null""".format(cond), {'project': project, 'parent': parent}, as_dict=1) @frappe.whitelist() def get_timesheet(doctype, txt, searchfield, start, page_len, filters): @@ -266,30 +274,41 @@ def get_timesheet(doctype, txt, searchfield, start, page_len, filters): condition = "and tsd.project = %(project)s" return frappe.db.sql("""select distinct tsd.parent from `tabTimesheet Detail` tsd, - `tabTimesheet` ts where ts.status in ('Submitted', 'Payslip') and - (tsd.billing_amount - tsd.billed_amount) > 0 and - tsd.docstatus = 1 and tsd.parent LIKE %(txt)s {condition} + `tabTimesheet` ts where + ts.status in ('Submitted', 'Payslip') and tsd.parent = ts.name and + tsd.docstatus = 1 and ts.total_billing_amount > 0 + and tsd.parent LIKE %(txt)s {condition} order by tsd.parent limit %(start)s, %(page_len)s""" .format(condition=condition), { "txt": "%%%s%%" % frappe.db.escape(txt), "start": start, "page_len": page_len, 'project': filters.get("project") }) +@frappe.whitelist() +def get_timesheet_data(name, project): + if project and project!='': + data = get_projectwise_timesheet_data(project, name) + else: + data = frappe.get_all('Timesheet', + fields = ["(total_billing_amount - total_billed_amount) as billing_amt", "total_billing_hours as billing_hours"], filters = {'name': name}) + + return { + 'billing_hours': data[0].billing_hours, + 'billing_amount': data[0].billing_amt, + 'timesheet_detail': data[0].name if project and project!= '' else None + } + @frappe.whitelist() def make_sales_invoice(source_name, target=None): target = frappe.new_doc("Sales Invoice") + timesheet = frappe.get_doc('Timesheet', source_name) + + target.append('timesheets', { + 'time_sheet': timesheet.name, + 'billing_hours': flt(timesheet.total_billing_hours) - flt(timesheet.total_billed_hours), + 'billing_amount': flt(timesheet.total_billing_amount) - flt(timesheet.total_billed_amount) + }) - target.append("timesheets", get_mapped_doc("Timesheet", source_name, { - "Timesheet": { - "doctype": "Sales Invoice Timesheet", - "field_map": { - "total_billing_amount": "billing_amount", - "total_billing_hours": "billing_hours", - "name": "time_sheet" - }, - } - })) - target.run_method("calculate_billing_amount_from_timesheet") return target @@ -330,7 +349,7 @@ def get_activity_cost(employee=None, activity_type=None): ["costing_rate", "billing_rate"], as_dict=True) return rate[0] if rate else {} - + @frappe.whitelist() def get_events(start, end, filters=None): """Returns events for Gantt / Calendar view rendering. diff --git a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json index 560ce9f7a86..300fed30d5b 100644 --- a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json +++ b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json @@ -377,33 +377,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "fieldname": "billed_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Billed Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -618,6 +591,59 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reference", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Reference", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sales_invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Sales Invoice", + "length": 0, + "no_copy": 1, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "hide_heading": 0, @@ -630,7 +656,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-09-07 02:55:22.545715", + "modified": "2016-09-08 03:24:26.221661", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet Detail", From c940440fbe1c24b5e75455b718fff5fd49e73427 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 9 Sep 2016 13:08:23 +0530 Subject: [PATCH 49/84] patch and rearrangement of fields --- erpnext/patches.txt | 5 +- ..._invoice_from_parent_to_child_timesheet.py | 20 + .../projects/doctype/timesheet/timesheet.js | 1 + .../projects/doctype/timesheet/timesheet.json | 20 +- .../timesheet_detail/timesheet_detail.json | 676 ++++++++++-------- 5 files changed, 410 insertions(+), 312 deletions(-) create mode 100644 erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 0706a2cd01f..d38ed3476a6 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -295,7 +295,7 @@ erpnext.patches.v7_0.rename_prevdoc_fields erpnext.patches.v7_0.rename_time_sheet_doctype execute:frappe.delete_doc_if_exists("Report", "Customers Not Buying Since Long Time") erpnext.patches.v7_0.make_is_group_fieldtype_as_check -execute:frappe.reload_doc('projects', 'doctype', 'timesheet', force=True) #2016-08-23 +execute:frappe.reload_doc('projects', 'doctype', 'timesheet') #2016-09-09 execute:frappe.delete_doc_if_exists("Report", "Employee Holiday Attendance") execute:frappe.delete_doc_if_exists("DocType", "Payment Tool") execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail") @@ -323,4 +323,5 @@ erpnext.patches.v7_0.update_missing_employee_in_timesheet erpnext.patches.v7_0.update_status_for_timesheet erpnext.patches.v7_0.set_party_name_in_payment_entry erpnext.patches.v7_1.set_student_guardian -erpnext.patches.v7_0.update_conversion_factor_in_supplier_quotation_item \ No newline at end of file +erpnext.patches.v7_0.update_conversion_factor_in_supplier_quotation_item +erpnext.patches.v7_1.move_sales_invoice_from_parent_to_child_timesheet \ No newline at end of file diff --git a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py new file mode 100644 index 00000000000..67e88e60ab9 --- /dev/null +++ b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py @@ -0,0 +1,20 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc('projects', 'doctype', 'timesheet_detail') + frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') + + frappe.db.sql(""" update + `tabTimesheet` as ts, + (select + sum(billing_amount) as billing_amount, sum(billing_hours) as billing_hours, time_sheet + from `tabSales Invoice Timesheet` where docstatus = 1 group by time_sheet + ) as sit + set + ts.total_billed_amount = sit.billing_amount, ts.total_billed_hours = sit.billing_hours, + ts.per_billed = ((sit.billing_amount * 100)/ts.total_billing_amount) + where ts.name = sit.time_sheet and ts.docstatus = 1""") + + frappe.db.sql(""" update `tabTimesheet Detail` tsd, `tabTimesheet` ts set tsd.sales_invoice = ts.sales_invoice + where tsd.parent = ts.name and ts.sales_invoice is not null""") \ No newline at end of file diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index a47b4ac44a6..2160fa96f52 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -44,6 +44,7 @@ frappe.ui.form.on("Timesheet", { if(frm.doc.per_billed > 0) { cur_frm.fields_dict["time_logs"].grid.toggle_enable("billing_hours", false); + cur_frm.fields_dict["time_logs"].grid.toggle_enable("billable", false); } }, diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index caa3e7e1b02..f58610a97d6 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -571,7 +571,7 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, @@ -587,9 +587,9 @@ "no_copy": 0, "permlevel": 0, "precision": "", - "print_hide": 0, + "print_hide": 1, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -597,7 +597,7 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, @@ -613,7 +613,7 @@ "no_copy": 0, "permlevel": 0, "precision": "", - "print_hide": 0, + "print_hide": 1, "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, @@ -703,7 +703,7 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, @@ -716,12 +716,12 @@ "in_list_view": 0, "label": "% Amount Billed", "length": 0, - "no_copy": 0, + "no_copy": 1, "permlevel": 0, "precision": "", - "print_hide": 0, + "print_hide": 1, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -817,7 +817,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-08 06:35:06.943066", + "modified": "2016-09-09 03:53:17.544760", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json index 300fed30d5b..b1d32329ac6 100644 --- a/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json +++ b/erpnext/projects/doctype/timesheet_detail/timesheet_detail.json @@ -138,245 +138,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_6", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 1, - "depends_on": "", - "fieldname": "billable", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Bill", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "billable", - "fieldname": "section_break_11", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "billing_hours", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Billing Hours", - "length": 0, - "no_copy": 0, - "permlevel": 1, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "fieldname": "billing_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Billing Rate", - "length": 0, - "no_copy": 0, - "permlevel": 1, - "precision": "2", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "costing_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Costing Rate", - "length": 0, - "no_copy": 0, - "permlevel": 1, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_14", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "depends_on": "", - "description": "", - "fieldname": "billing_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Billing Amount", - "length": 0, - "no_copy": 0, - "permlevel": 1, - "precision": "2", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "description": "", - "fieldname": "costing_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Costing Amount", - "length": 0, - "no_copy": 0, - "permlevel": 1, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -429,55 +190,28 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 3, - "fieldname": "project", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Project", - "length": 0, - "no_copy": 0, - "options": "Project", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "", - "fieldname": "task", + "depends_on": "eval:parent.production_order", + "fieldname": "workstation", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Task", + "label": "Workstation", "length": 0, "no_copy": 0, - "options": "Task", + "options": "Workstation", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -509,34 +243,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:parent.production_order", - "fieldname": "workstation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Workstation", - "length": 0, - "no_copy": 0, - "options": "Workstation", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -592,6 +298,376 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 3, + "fieldname": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Project", + "length": 0, + "no_copy": 0, + "options": "Project", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "task", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Task", + "length": 0, + "no_copy": 0, + "options": "Task", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_6", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 1, + "depends_on": "", + "fieldname": "billable", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Bill", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "billable", + "fieldname": "billing_hours", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Billing Hours", + "length": 0, + "no_copy": 0, + "permlevel": 1, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "billable", + "fieldname": "section_break_11", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "billing_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Billing Rate", + "length": 0, + "no_copy": 0, + "permlevel": 1, + "precision": "2", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "depends_on": "", + "description": "", + "fieldname": "billing_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Billing Amount", + "length": 0, + "no_copy": 0, + "permlevel": 1, + "precision": "2", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "costing_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Costing Rate", + "length": 0, + "no_copy": 0, + "permlevel": 1, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "description": "", + "fieldname": "costing_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Costing Amount", + "length": 0, + "no_copy": 0, + "permlevel": 1, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -656,7 +732,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-09-08 03:24:26.221661", + "modified": "2016-09-09 13:36:03.057513", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet Detail", From 1d0e8ea9c638e54dbc920a6ee85d0a665d7dc5bb Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 9 Sep 2016 15:05:17 +0530 Subject: [PATCH 50/84] minor changes --- .../sales_invoice_timesheet/sales_invoice_timesheet.json | 4 ++-- erpnext/projects/doctype/timesheet/timesheet.js | 5 ++++- erpnext/projects/doctype/timesheet/timesheet.py | 8 ++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json index e34accad9ca..1191ea71539 100644 --- a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json +++ b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json @@ -96,7 +96,7 @@ "columns": 0, "fieldname": "timesheet_detail", "fieldtype": "Data", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -126,7 +126,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-09-08 05:36:00.922319", + "modified": "2016-09-09 14:01:04.095775", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index 2160fa96f52..c4f92f3b630 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -156,9 +156,12 @@ var calculate_time_and_amount = function(frm) { for(var i=0; i Date: Fri, 9 Sep 2016 16:53:11 +0530 Subject: [PATCH 51/84] test cases and minor changes --- .../doctype/sales_invoice/sales_invoice.py | 24 ++++++++++++------- .../doctype/timesheet/test_timesheet.py | 19 +++++++++++---- .../projects/doctype/timesheet/timesheet.js | 8 +++++++ .../projects/doctype/timesheet/timesheet.py | 2 +- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index f75a9af8ab2..2e38927c7dc 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -85,7 +85,7 @@ class SalesInvoice(SellingController): self.validate_multiple_billing("Delivery Note", "dn_detail", "amount", "items") self.update_packing_list() self.set_billing_hours_and_amount() - self.calculate_billing_amount_from_timesheet() + self.update_timesheet_billing_for_project() def before_save(self): set_account_for_mode_of_payment(self) @@ -467,13 +467,11 @@ class SalesInvoice(SellingController): if not timesheet.billing_amount and ts_doc.total_billing_amount: timesheet.billing_amount = ts_doc.total_billing_amount - def calculate_billing_amount_from_timesheet(self): - total_billing_amount = 0.0 - for data in self.timesheets: - if data.billing_amount: - total_billing_amount += data.billing_amount - - self.total_billing_amount = total_billing_amount + def update_timesheet_billing_for_project(self): + if not self.timesheets and self.project: + self.add_timesheet_data() + else: + self.calculate_billing_amount_for_timesheet() def add_timesheet_data(self): self.set('timesheets', []) @@ -486,7 +484,15 @@ class SalesInvoice(SellingController): 'timesheet_detail': data.name }) - self.calculate_billing_amount_from_timesheet() + self.calculate_billing_amount_for_timesheet() + + def calculate_billing_amount_for_timesheet(self): + total_billing_amount = 0.0 + for data in self.timesheets: + if data.billing_amount: + total_billing_amount += data.billing_amount + + self.total_billing_amount = total_billing_amount def get_warehouse(self): user_pos_profile = frappe.db.sql("""select name, warehouse from `tabPOS Profile` diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py index 8e7e562442c..1e7be41d59b 100644 --- a/erpnext/projects/doctype/timesheet/test_timesheet.py +++ b/erpnext/projects/doctype/timesheet/test_timesheet.py @@ -9,11 +9,12 @@ import datetime from frappe.utils import now_datetime, nowdate from erpnext.projects.doctype.timesheet.timesheet import OverlapError from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice class TestTimesheet(unittest.TestCase): def test_timesheet_billing_amount(self): salary_structure = make_salary_structure("_T-Employee-0001") - timesheet = make_timesheet("_T-Employee-0001", True) + timesheet = make_timesheet("_T-Employee-0001", simulate = True, billable=1) self.assertEquals(timesheet.total_hours, 2) self.assertEquals(timesheet.total_billing_hours, 2) @@ -22,7 +23,7 @@ class TestTimesheet(unittest.TestCase): def test_salary_slip_from_timesheet(self): salary_structure = make_salary_structure("_T-Employee-0001") - timesheet = make_timesheet("_T-Employee-0001", simulate = True) + timesheet = make_timesheet("_T-Employee-0001", simulate = True, billable=1) salary_slip = make_salary_slip(timesheet.name) salary_slip.submit() @@ -51,11 +52,20 @@ class TestTimesheet(unittest.TestCase): item.rate = 100 sales_invoice.submit() - timesheet = frappe.get_doc('Timesheet', timesheet.name) self.assertEquals(sales_invoice.total_billing_amount, 100) self.assertEquals(timesheet.status, 'Billed') + def test_timesheet_billing_based_on_project(self): + timesheet = make_timesheet("_T-Employee-0001", simulate=True, billable=1, project = '_Test Project', company='_Test Company') + sales_invoice = create_sales_invoice(do_not_save=True) + sales_invoice.project = '_Test Project' + sales_invoice.submit() + + ts = frappe.get_doc('Timesheet', timesheet.name) + self.assertEquals(ts.per_billed, 100) + self.assertEquals(ts.time_logs[0].sales_invoice, sales_invoice.name) + def make_salary_structure(employee): name = frappe.db.get_value('Salary Structure Employee', {'employee': employee}, 'parent') if name: @@ -93,7 +103,7 @@ def make_salary_structure(employee): return salary_structure -def make_timesheet(employee, simulate=False, billable = 0, activity_type="_Test Activity Type", project=None, task=None): +def make_timesheet(employee, simulate=False, billable = 0, activity_type="_Test Activity Type", project=None, task=None, company=None): update_activity_type(activity_type) timesheet = frappe.new_doc("Timesheet") timesheet.employee = employee @@ -105,6 +115,7 @@ def make_timesheet(employee, simulate=False, billable = 0, activity_type="_Test timesheet_detail.to_time = timesheet_detail.from_time + datetime.timedelta(hours= timesheet_detail.hours) timesheet_detail.project = project timesheet_detail.task = task + timesheet_detail.company = company or '_Test Company' for data in timesheet.get('time_logs'): if simulate: diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index c4f92f3b630..c591ccb54b9 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -21,6 +21,14 @@ frappe.ui.form.on("Timesheet", { } } } + + frm.fields_dict['time_logs'].grid.get_field('project').get_query = function() { + return{ + filters: { + 'status': frm.doc.company + } + } + } }, onload: function(frm){ diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index df87ed1bb7d..9d0371e3da2 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -255,7 +255,7 @@ class Timesheet(Document): data.billing_amount = data.billing_rate * hours data.costing_amount = data.costing_rate * hours -@frappe.whitelist() +@frappe.whitelist() def get_projectwise_timesheet_data(project, parent=None): cond = '' if parent: From 4eb908fc766e3cd54ebfe776c8aac6c750dd2d57 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 9 Sep 2016 19:10:45 +0530 Subject: [PATCH 52/84] Doc updated for timesheet --- .../manual/en/projects/timesheet/timesheet-against-project.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/docs/user/manual/en/projects/timesheet/timesheet-against-project.md b/erpnext/docs/user/manual/en/projects/timesheet/timesheet-against-project.md index 7460a4b9a0d..a8b2a6bf18c 100644 --- a/erpnext/docs/user/manual/en/projects/timesheet/timesheet-against-project.md +++ b/erpnext/docs/user/manual/en/projects/timesheet/timesheet-against-project.md @@ -8,6 +8,9 @@ Timesheets can be tracked against Project and Tasks so that you can get reports To bill Customer based on Timesheet, check "Is Billable" in the Timesheet created against Project and Task. To learn more about billing Customer from Timesheet, click [here]({{docs_base_url}}/user/manual/en/projects/timesheet/sales-invoice-from-timesheet.html). +User can also make invoice against timesheet by selecting the project on the invoice. System will fetch the records from the timesheet based on selected project, for mode detail check below video + + ####Project Costing When creating Timesheet, Employee will have to select an Activity Type. For each Activity Type, you can create an Activity Cost master. In the Activity Cost, Billing Rate and Costing rate is defined for each Employee. From af111e9c43cb3775d93b76d65917c74fed1b0e90 Mon Sep 17 00:00:00 2001 From: pawan Date: Mon, 12 Sep 2016 15:15:32 +0530 Subject: [PATCH 53/84] [fix] #6195 --- erpnext/accounts/doctype/gl_entry/gl_entry.py | 2 +- erpnext/stock/doctype/stock_entry/stock_entry.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 9223cdb3f0e..b052e4d1411 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -57,7 +57,7 @@ class GLEntry(Document): def pl_must_have_cost_center(self): if frappe.db.get_value("Account", self.account, "report_type") == "Profit and Loss": if not self.cost_center and self.voucher_type != 'Period Closing Voucher': - frappe.throw(_("Cost Center is required for 'Profit and Loss' account {0}") + frappe.throw(_("Cost Center is required for 'Profit and Loss' account {0}. Please set up a default Cost Center for the Company.") .format(self.account)) else: if self.cost_center: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index e35f3d29659..90315c7ee0f 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -162,7 +162,7 @@ class StockEntry(StockController): if not d.s_warehouse: frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx)) - if cstr(d.s_warehouse) == cstr(d.t_warehouse): + if cstr(d.s_warehouse) == cstr(d.t_warehouse) and not self.purpose == "Material Transfer for Manufacture": frappe.throw(_("Source and target warehouse cannot be same for row {0}").format(d.idx)) def validate_production_order(self): From 03e5e68a7a1a37cc95882762189ea24317383712 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 12 Sep 2016 16:14:06 +0530 Subject: [PATCH 54/84] [Fix] Employee name is missing in timesheet --- erpnext/patches.txt | 1 + erpnext/projects/doctype/timesheet/timesheet.py | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 0c6a978a9b5..dfc926dc66d 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -316,3 +316,4 @@ erpnext.patches.v7_0.repost_gle_for_pos_sales_return erpnext.patches.v7_0.update_missing_employee_in_timesheet erpnext.patches.v7_0.update_status_for_timesheet erpnext.patches.v7_0.set_party_name_in_payment_entry +execute:frappe.db.sql("update `tabTimesheet` ts, `tabEmployee` emp set ts.employee_name = emp.employee_name where emp.name = ts.employee and ts.employee_name is null and ts.employee is not null") diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 0379f906dea..0c49353931d 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -20,12 +20,17 @@ class OverProductionLoggedError(frappe.ValidationError): pass class Timesheet(Document): def validate(self): + self.set_employee_name() self.set_status() self.validate_dates() self.validate_time_logs() self.update_cost() self.calculate_total_amounts() + def set_employee_name(self): + if self.employee and not self.employee_name: + self.employee_name = frappe.db.get_value('Employee', self.employee, 'employee_name') + def calculate_total_amounts(self): self.total_hours = 0.0 self.total_billing_amount = 0.0 From daee44906392c5a1ce4e5d0792e6507fb95ee6ee Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 12 Sep 2016 16:42:36 +0530 Subject: [PATCH 55/84] [fix] for print format draft (#6346) --- .../payment_receipt_voucher/payment_receipt_voucher.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html b/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html index a4f8fa6e9f2..f2e65d33345 100644 --- a/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html +++ b/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html @@ -2,7 +2,7 @@
{%- if not doc.get("print_heading") and not doc.get("select_print_heading") and doc.set("select_print_heading", _("Payment Receipt Note")) -%}{%- endif -%} - {{ add_header(0, 1, doc, letter_head, no_letterhead) }} + {{ add_header(0, 1, doc, letter_head, no_letterhead, print_settings) }} {%- for label, value in ( (_("Received On"), frappe.utils.formatdate(doc.voucher_date)), From 6594c841a7d38847c7d8b51eed21d7325fc06c2b Mon Sep 17 00:00:00 2001 From: bcornwellmott Date: Mon, 12 Sep 2016 04:13:23 -0700 Subject: [PATCH 56/84] Added color coding to timesheet calendars (#6269) --- erpnext/projects/doctype/timesheet/timesheet.py | 2 +- erpnext/projects/doctype/timesheet/timesheet_calendar.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 63cb8981d02..31a98d9ec55 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -311,7 +311,7 @@ def get_events(start, end, filters=None): filters = json.loads(filters) conditions = get_conditions(filters) - return frappe.db.sql("""select `tabTimesheet Detail`.name as name, `tabTimesheet Detail`.parent as parent, + return frappe.db.sql("""select `tabTimesheet Detail`.name as name, `tabTimesheet Detail`.docstatus as status, `tabTimesheet Detail`.parent as parent, from_time, hours, activity_type, project, to_time from `tabTimesheet Detail`, `tabTimesheet` where `tabTimesheet Detail`.parent = `tabTimesheet`.name and `tabTimesheet`.docstatus < 2 and (from_time between %(start)s and %(end)s) {conditions}""".format(conditions=conditions), diff --git a/erpnext/projects/doctype/timesheet/timesheet_calendar.js b/erpnext/projects/doctype/timesheet/timesheet_calendar.js index 6db3e5aacd4..a41ba38a7be 100644 --- a/erpnext/projects/doctype/timesheet/timesheet_calendar.js +++ b/erpnext/projects/doctype/timesheet/timesheet_calendar.js @@ -8,6 +8,11 @@ frappe.views.calendar["Timesheet"] = { "allDay": "allDay", "child_name": "name" }, + style_map: { + "0": "info", + "1": "standard", + "2": "danger" + }, gantt: true, filters: [ { From 97a82714debe8f455db4bbe305e1902a03e74704 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 12 Sep 2016 18:03:48 +0530 Subject: [PATCH 57/84] [Fix] so_dn_required for pos and stock update invoice --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index ec72be1bada..8b2113aed55 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -357,12 +357,12 @@ class SalesInvoice(SellingController): def so_dn_required(self): """check in manage account if sales order / delivery note required or not.""" - dic = {'Sales Order':'so_required','Delivery Note':'dn_required'} + dic = {'Sales Order':['so_required', 'is_pos'],'Delivery Note':['dn_required', 'update_stock']} for i in dic: - if frappe.db.get_value('Selling Settings', None, dic[i]) == 'Yes': + if frappe.db.get_value('Selling Settings', None, dic[i][0]) == 'Yes': for d in self.get('items'): if frappe.db.get_value('Item', d.item_code, 'is_stock_item') == 1 \ - and not d.get(i.lower().replace(' ','_')): + and not d.get(i.lower().replace(' ','_')) and not self.get(dic[i][1]): msgprint(_("{0} is mandatory for Item {1}").format(i,d.item_code), raise_exception=1) From d7b95267b398036cedd7d9691503162a9283dc98 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 12 Sep 2016 18:33:17 +0530 Subject: [PATCH 58/84] Update production_planning_tool.py --- .../production_planning_tool/production_planning_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index ce849de7984..fd28b547a98 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -249,7 +249,7 @@ class ProductionPlanningTool(Document): "wip_warehouse" : "", "fg_warehouse" : d.warehouse, "status" : "Draft", - "project" : frappe.db.get_value("Sales Order",d.sales_order,"Project") + "project" : frappe.db.get_value("Sales Order", d.sales_order, "project") } """ Club similar BOM and item for processing in case of Sales Orders """ From 6c08f5caf91382a63de8890300aff116ad6e19bd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 12 Sep 2016 18:34:46 +0530 Subject: [PATCH 59/84] Update stock_entry.py --- erpnext/stock/doctype/stock_entry/stock_entry.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index f31901512d6..e7e3eb15415 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -232,17 +232,16 @@ class StockEntry(StockController): frappe.bold(d.transfer_qty)), NegativeStockError, title=_('Insufficient Stock')) - def set_serial_nos(self,production_order_id): - - previous_se = frappe.db.get_value("Stock Entry",{"production_order": production_order_id, + def set_serial_nos(self, production_order): + previous_se = frappe.db.get_value("Stock Entry", {"production_order": production_order, "purpose": "Material Transfer for Manufacture"}, "name") for d in self.get('items'): - previous_serial_no = frappe.db.get_value("Stock Entry Detail",{"parent": previous_se, + transferred_serial_no = frappe.db.get_value("Stock Entry Detail",{"parent": previous_se, "item_code": d.item_code}, "serial_no") - if previous_serial_no: - d.serial_no = previous_serial_no + if transferred_serial_no: + d.serial_no = transferred_serial_no def get_stock_and_rate(self): self.set_transfer_qty() From 7b6fdb77d00f2cb04da557debfa587db8deecdae Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 12 Sep 2016 19:06:41 +0530 Subject: [PATCH 60/84] rename total_billing_amount to total_billable_amount in timesheet doctype --- .../doctype/sales_invoice/sales_invoice.py | 4 ++-- erpnext/demo/user/projects.py | 2 +- erpnext/patches.txt | 3 ++- ..._salesinvoiceitem_to_salesinvoicetimesheet.py | 4 ++-- ...les_invoice_from_parent_to_child_timesheet.py | 2 +- erpnext/patches/v7_1/rename_field_timesheet.py | 8 ++++++++ .../patches/v7_1/update_total_billing_hours.py | 2 +- .../projects/doctype/timesheet/test_timesheet.py | 1 + erpnext/projects/doctype/timesheet/timesheet.js | 8 ++++---- .../projects/doctype/timesheet/timesheet.json | 6 +++--- erpnext/projects/doctype/timesheet/timesheet.py | 16 ++++++++-------- 11 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 erpnext/patches/v7_1/rename_field_timesheet.py diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 2e38927c7dc..99c869d809b 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -464,8 +464,8 @@ class SalesInvoice(SellingController): if not timesheet.billing_hours and ts_doc.total_billing_hours: timesheet.billing_hours = ts_doc.total_billing_hours - if not timesheet.billing_amount and ts_doc.total_billing_amount: - timesheet.billing_amount = ts_doc.total_billing_amount + if not timesheet.billing_amount and ts_doc.total_billable_amount: + timesheet.billing_amount = ts_doc.total_billable_amount def update_timesheet_billing_for_project(self): if not self.timesheets and self.project: diff --git a/erpnext/demo/user/projects.py b/erpnext/demo/user/projects.py index 505ccfd077f..98024476793 100644 --- a/erpnext/demo/user/projects.py +++ b/erpnext/demo/user/projects.py @@ -22,7 +22,7 @@ def make_timesheet_for_projects(current_date ): ts = make_timesheet(employee, simulate = True, billable = 1, activity_type=get_random("Activity Type"), project=data.project, task =data.name) - if flt(ts.total_billing_amount) > 0.0: + if flt(ts.total_billable_amount) > 0.0: make_sales_invoice_for_timesheet(ts.name) frappe.db.commit() diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d38ed3476a6..802e045d653 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -295,7 +295,8 @@ erpnext.patches.v7_0.rename_prevdoc_fields erpnext.patches.v7_0.rename_time_sheet_doctype execute:frappe.delete_doc_if_exists("Report", "Customers Not Buying Since Long Time") erpnext.patches.v7_0.make_is_group_fieldtype_as_check -execute:frappe.reload_doc('projects', 'doctype', 'timesheet') #2016-09-09 +execute:frappe.reload_doc('projects', 'doctype', 'timesheet') #2016-09-12 +erpnext.patches.v7_1.rename_field_timesheet execute:frappe.delete_doc_if_exists("Report", "Employee Holiday Attendance") execute:frappe.delete_doc_if_exists("DocType", "Payment Tool") execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail") diff --git a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py index 695c552f066..a365f656057 100644 --- a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py +++ b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py @@ -3,12 +3,12 @@ import frappe def execute(): frappe.reload_doc('accounts', 'doctype', 'sales_invoice') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment') - for time_sheet in frappe.db.sql(""" select sales_invoice, name, total_billing_amount from `tabTimesheet` + for time_sheet in frappe.db.sql(""" select sales_invoice, name, total_billable_amount from `tabTimesheet` where sales_invoice is not null and docstatus < 2""", as_dict=True): si_doc = frappe.get_doc('Sales Invoice', time_sheet.sales_invoice) ts = si_doc.append('timesheets',{}) ts.time_sheet = time_sheet.name - ts.billing_amount = time_sheet.total_billing_amount + ts.billing_amount = time_sheet.total_billable_amount si_doc.update_time_sheet(time_sheet.sales_invoice) si_doc.flags.ignore_validate_update_after_submit = True si_doc.save() \ No newline at end of file diff --git a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py index 67e88e60ab9..d1ec7c697e7 100644 --- a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py +++ b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py @@ -13,7 +13,7 @@ def execute(): ) as sit set ts.total_billed_amount = sit.billing_amount, ts.total_billed_hours = sit.billing_hours, - ts.per_billed = ((sit.billing_amount * 100)/ts.total_billing_amount) + ts.per_billed = ((sit.billing_amount * 100)/ts.total_billable_amount) where ts.name = sit.time_sheet and ts.docstatus = 1""") frappe.db.sql(""" update `tabTimesheet Detail` tsd, `tabTimesheet` ts set tsd.sales_invoice = ts.sales_invoice diff --git a/erpnext/patches/v7_1/rename_field_timesheet.py b/erpnext/patches/v7_1/rename_field_timesheet.py new file mode 100644 index 00000000000..1957545cd35 --- /dev/null +++ b/erpnext/patches/v7_1/rename_field_timesheet.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals +import frappe +from frappe.model.utils.rename_field import rename_field + +def execute(): + doctype = 'Timesheet' + if "total_billing_amount" in frappe.db.get_table_columns(doctype): + rename_field(doctype, 'total_billing_amount', 'total_billable_amount') \ No newline at end of file diff --git a/erpnext/patches/v7_1/update_total_billing_hours.py b/erpnext/patches/v7_1/update_total_billing_hours.py index a38b88d594d..68222c42740 100644 --- a/erpnext/patches/v7_1/update_total_billing_hours.py +++ b/erpnext/patches/v7_1/update_total_billing_hours.py @@ -6,7 +6,7 @@ def execute(): frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') frappe.db.sql("""update tabTimesheet set total_billing_hours=total_hours - where total_billing_amount>0 and docstatus = 1""") + where total_billable_amount>0 and docstatus = 1""") frappe.db.sql("""update `tabTimesheet Detail` set billing_hours=hours where docstatus < 2""") diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py index 1e7be41d59b..22bb2761b08 100644 --- a/erpnext/projects/doctype/timesheet/test_timesheet.py +++ b/erpnext/projects/doctype/timesheet/test_timesheet.py @@ -20,6 +20,7 @@ class TestTimesheet(unittest.TestCase): self.assertEquals(timesheet.total_billing_hours, 2) self.assertEquals(timesheet.time_logs[0].billing_rate, 50) self.assertEquals(timesheet.time_logs[0].billing_amount, 100) + self.assertEquals(timesheet.total_billable_amount, 100) def test_salary_slip_from_timesheet(self): salary_structure = make_salary_structure("_T-Employee-0001") diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index c591ccb54b9..1b6f95678d4 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -25,7 +25,7 @@ frappe.ui.form.on("Timesheet", { frm.fields_dict['time_logs'].grid.get_field('project').get_query = function() { return{ filters: { - 'status': frm.doc.company + 'company': frm.doc.company } } } @@ -159,12 +159,12 @@ var calculate_time_and_amount = function(frm) { var tl = frm.doc.time_logs || []; total_working_hr = 0; total_billing_hr = 0; - total_billing_amount = 0; + total_billable_amount = 0; total_costing_amount = 0; for(var i=0; i 0 and self.total_billing_amount > 0: - self.per_billed = (self.total_billed_amount * 100) / self.total_billing_amount + if self.total_billed_amount > 0 and self.total_billable_amount > 0: + self.per_billed = (self.total_billed_amount * 100) / self.total_billable_amount def update_billing_hours(self, args): if cint(args.billing_hours) == 0: @@ -276,7 +276,7 @@ def get_timesheet(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql("""select distinct tsd.parent from `tabTimesheet Detail` tsd, `tabTimesheet` ts where ts.status in ('Submitted', 'Payslip') and tsd.parent = ts.name and - tsd.docstatus = 1 and ts.total_billing_amount > 0 + tsd.docstatus = 1 and ts.total_billable_amount > 0 and tsd.parent LIKE %(txt)s {condition} order by tsd.parent limit %(start)s, %(page_len)s""" .format(condition=condition), { @@ -290,7 +290,7 @@ def get_timesheet_data(name, project): data = get_projectwise_timesheet_data(project, name) else: data = frappe.get_all('Timesheet', - fields = ["(total_billing_amount - total_billed_amount) as billing_amt", "total_billing_hours as billing_hours"], filters = {'name': name}) + fields = ["(total_billable_amount - total_billed_amount) as billing_amt", "total_billing_hours as billing_hours"], filters = {'name': name}) return { 'billing_hours': data[0].billing_hours, @@ -306,10 +306,10 @@ def make_sales_invoice(source_name, target=None): target.append('timesheets', { 'time_sheet': timesheet.name, 'billing_hours': flt(timesheet.total_billing_hours) - flt(timesheet.total_billed_hours), - 'billing_amount': flt(timesheet.total_billing_amount) - flt(timesheet.total_billed_amount) + 'billing_amount': flt(timesheet.total_billable_amount) - flt(timesheet.total_billed_amount) }) - target.run_method("calculate_billing_amount_from_timesheet") + target.run_method("calculate_billing_amount_for_timesheet") return target From 05682387864cd3afc507aa9fee388519280e6a27 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 12 Sep 2016 23:00:24 +0530 Subject: [PATCH 61/84] rename total_billing_hours to total_billable_hours in timesheet doctype --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 4 ++-- erpnext/patches/v7_1/rename_field_timesheet.py | 7 +++++-- erpnext/patches/v7_1/update_total_billing_hours.py | 4 ++-- erpnext/projects/doctype/timesheet/test_timesheet.py | 2 +- erpnext/projects/doctype/timesheet/timesheet.js | 2 +- erpnext/projects/doctype/timesheet/timesheet.json | 6 +++--- erpnext/projects/doctype/timesheet/timesheet.py | 8 ++++---- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 99c869d809b..ecc9a6026ad 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -461,8 +461,8 @@ class SalesInvoice(SellingController): def set_billing_hours_and_amount(self): for timesheet in self.timesheets: ts_doc = frappe.get_doc('Timesheet', timesheet.time_sheet) - if not timesheet.billing_hours and ts_doc.total_billing_hours: - timesheet.billing_hours = ts_doc.total_billing_hours + if not timesheet.billing_hours and ts_doc.total_billable_hours: + timesheet.billing_hours = ts_doc.total_billable_hours if not timesheet.billing_amount and ts_doc.total_billable_amount: timesheet.billing_amount = ts_doc.total_billable_amount diff --git a/erpnext/patches/v7_1/rename_field_timesheet.py b/erpnext/patches/v7_1/rename_field_timesheet.py index 1957545cd35..3690a2e79d4 100644 --- a/erpnext/patches/v7_1/rename_field_timesheet.py +++ b/erpnext/patches/v7_1/rename_field_timesheet.py @@ -4,5 +4,8 @@ from frappe.model.utils.rename_field import rename_field def execute(): doctype = 'Timesheet' - if "total_billing_amount" in frappe.db.get_table_columns(doctype): - rename_field(doctype, 'total_billing_amount', 'total_billable_amount') \ No newline at end of file + fields_dict = {'total_billing_amount': 'total_billable_amount', 'total_billing_hours': 'total_billable_hours'} + + for old_fieldname, new_fieldname in fields_dict.items(): + if old_fieldname in frappe.db.get_table_columns(doctype): + rename_field(doctype, old_fieldname, new_fieldname) diff --git a/erpnext/patches/v7_1/update_total_billing_hours.py b/erpnext/patches/v7_1/update_total_billing_hours.py index 68222c42740..b9c96028f52 100644 --- a/erpnext/patches/v7_1/update_total_billing_hours.py +++ b/erpnext/patches/v7_1/update_total_billing_hours.py @@ -5,10 +5,10 @@ def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet_detail') frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') - frappe.db.sql("""update tabTimesheet set total_billing_hours=total_hours + frappe.db.sql("""update tabTimesheet set total_billable_hours=total_hours where total_billable_amount>0 and docstatus = 1""") frappe.db.sql("""update `tabTimesheet Detail` set billing_hours=hours where docstatus < 2""") - frappe.db.sql(""" update `tabSales Invoice Timesheet` set billing_hours = (select total_billing_hours from `tabTimesheet` + frappe.db.sql(""" update `tabSales Invoice Timesheet` set billing_hours = (select total_billable_hours from `tabTimesheet` where name = time_sheet) where time_sheet is not null""") \ No newline at end of file diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py index 22bb2761b08..369be6da3cf 100644 --- a/erpnext/projects/doctype/timesheet/test_timesheet.py +++ b/erpnext/projects/doctype/timesheet/test_timesheet.py @@ -17,7 +17,7 @@ class TestTimesheet(unittest.TestCase): timesheet = make_timesheet("_T-Employee-0001", simulate = True, billable=1) self.assertEquals(timesheet.total_hours, 2) - self.assertEquals(timesheet.total_billing_hours, 2) + self.assertEquals(timesheet.total_billable_hours, 2) self.assertEquals(timesheet.time_logs[0].billing_rate, 50) self.assertEquals(timesheet.time_logs[0].billing_amount, 100) self.assertEquals(timesheet.total_billable_amount, 100) diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index 1b6f95678d4..7d0e71ae99e 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -173,7 +173,7 @@ var calculate_time_and_amount = function(frm) { } } - cur_frm.set_value("total_billing_hours", total_billing_hr); + cur_frm.set_value("total_billable_hours", total_billing_hr); cur_frm.set_value("total_hours", total_working_hr); cur_frm.set_value("total_billable_amount", total_billable_amount); cur_frm.set_value("total_costing_amount", total_costing_amount); diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index fd99e9a5afa..168bc631423 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -549,14 +549,14 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "total_billing_hours", + "fieldname": "total_billable_hours", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Total Billing Hours", + "label": "Total Billable Hours", "length": 0, "no_copy": 0, "permlevel": 0, @@ -817,7 +817,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-12 18:35:01.578750", + "modified": "2016-09-12 13:19:22.298036", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index ba5210dc69f..6fbe3f0fc50 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -29,7 +29,7 @@ class Timesheet(Document): def calculate_total_amounts(self): self.total_hours = 0.0 - self.total_billing_hours = 0.0 + self.total_billable_hours = 0.0 self.total_billed_hours = 0.0 self.total_billable_amount = 0.0 self.total_costing_amount = 0.0 @@ -40,7 +40,7 @@ class Timesheet(Document): self.total_hours += flt(d.hours) if d.billable: - self.total_billing_hours += flt(d.billing_hours) + self.total_billable_hours += flt(d.billing_hours) self.total_billable_amount += flt(d.billing_amount) self.total_costing_amount += flt(d.costing_amount) self.total_billed_amount += flt(d.billing_amount) if d.sales_invoice else 0.0 @@ -290,7 +290,7 @@ def get_timesheet_data(name, project): data = get_projectwise_timesheet_data(project, name) else: data = frappe.get_all('Timesheet', - fields = ["(total_billable_amount - total_billed_amount) as billing_amt", "total_billing_hours as billing_hours"], filters = {'name': name}) + fields = ["(total_billable_amount - total_billed_amount) as billing_amt", "total_billable_hours as billing_hours"], filters = {'name': name}) return { 'billing_hours': data[0].billing_hours, @@ -305,7 +305,7 @@ def make_sales_invoice(source_name, target=None): target.append('timesheets', { 'time_sheet': timesheet.name, - 'billing_hours': flt(timesheet.total_billing_hours) - flt(timesheet.total_billed_hours), + 'billing_hours': flt(timesheet.total_billable_hours) - flt(timesheet.total_billed_hours), 'billing_amount': flt(timesheet.total_billable_amount) - flt(timesheet.total_billed_amount) }) From 5414725fd62798314ba49502d4c78fa5caa9ddd7 Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Tue, 13 Sep 2016 08:27:51 +0800 Subject: [PATCH 62/84] PPT material request non-stock items --- .../production_planning_tool.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index fd28b547a98..cfa6cdc01ac 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -307,7 +307,7 @@ class ProductionPlanningTool(Document): self.get_raw_materials(bom_dict) return self.get_csv() - def get_raw_materials(self, bom_dict): + def get_raw_materials(self, bom_dict,non_stock_item=False): """ Get raw materials considering sub-assembly items { "item_code": [qty_required, description, stock_uom, min_order_qty] @@ -326,7 +326,7 @@ class ProductionPlanningTool(Document): from `tabBOM Explosion Item` fb, `tabBOM` bom, `tabItem` item where bom.name = fb.parent and item.name = fb.item_code and (item.is_sub_contracted_item = 0 or ifnull(item.default_bom, "")="") - and item.is_stock_item = 1 + """ + ("and item.is_stock_item = 1","")[non_stock_item] + """ and fb.docstatus<2 and bom.name=%(bom)s group by fb.item_code, fb.stock_uom""", {"bom":bom}, as_dict=1): bom_wise_item_details.setdefault(d.item_code, d) @@ -334,7 +334,7 @@ class ProductionPlanningTool(Document): # Get all raw materials considering SA items as raw materials, # so no childs of SA items bom_wise_item_details = self.get_subitems(bom_wise_item_details, bom,1, \ - self.use_multi_level_bom,self.only_raw_materials, self.include_subcontracted) + self.use_multi_level_bom,self.only_raw_materials, self.include_subcontracted,non_stock_item) for item, item_details in bom_wise_item_details.items(): for so_qty in so_wise_qty: @@ -343,14 +343,14 @@ class ProductionPlanningTool(Document): self.make_items_dict(item_list) - def get_subitems(self,bom_wise_item_details, bom, parent_qty, include_sublevel, only_raw, supply_subs): + def get_subitems(self,bom_wise_item_details, bom, parent_qty, include_sublevel, only_raw, supply_subs,non_stock_item=False): for d in frappe.db.sql("""select bom_item.item_code, default_material_request_type, ifnull(%(parent_qty)s * sum(bom_item.qty/ifnull(bom.quantity, 1)), 0) as qty, item.is_sub_contracted_item as is_sub_contracted, item.default_bom as default_bom from `tabBOM Item` bom_item, `tabBOM` bom, tabItem item where bom.name = bom_item.parent and bom.name = %(bom)s and bom_item.docstatus < 2 and bom_item.item_code = item.name - and item.is_stock_item = 1 + """ + ("and item.is_stock_item = 1","")[non_stock_item] + """ group by bom_item.item_code""", {"bom": bom, "parent_qty": parent_qty}, as_dict=1): if (d.default_material_request_type == "Purchase" and not (d.is_sub_contracted \ and only_raw and include_sublevel)) or (d.default_material_request_type == \ @@ -399,7 +399,7 @@ class ProductionPlanningTool(Document): frappe.throw(_("Please enter Warehouse for which Material Request will be raised")) bom_dict = self.get_so_wise_planned_qty() - self.get_raw_materials(bom_dict) + self.get_raw_materials(bom_dict,self.create_material_requests_non_stock_request) if self.item_dict: self.create_material_request() From 4ca64c33ebf5170a70be3677c8d2c88cc16f6f3a Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Tue, 13 Sep 2016 08:36:05 +0800 Subject: [PATCH 63/84] Update production_planning_tool.json --- .../production_planning_tool.json | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index 8438e07ba79..8d844cda7eb 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -698,6 +698,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "description": "If checked, Will include non-stock items in the Material Requests.", + "fieldname": "create_material_requests_non_stock_request", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Include non-stock items", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -823,4 +849,4 @@ "read_only_onload": 0, "sort_order": "ASC", "track_seen": 0 -} \ No newline at end of file +} From 1579565e52abc2f74f7d906260574f35ba8abf8b Mon Sep 17 00:00:00 2001 From: superlack Date: Mon, 12 Sep 2016 21:18:41 -0700 Subject: [PATCH 64/84] Activity Summary to not show cancelled timesheets on click Clicking an Activity Type in the Activity summary portion of project will add filter of "Status" != "Cancelled" --- erpnext/projects/doctype/project/project.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index 5bb9dd6d8e5..ee2db462465 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -78,7 +78,7 @@ frappe.ui.form.on("Project", { section.on('click', '.time-sheet-link', function() { var activity_type = $(this).attr('data-activity_type'); frappe.set_route('List', 'Timesheet', - {'activity_type': activity_type, 'project': frm.doc.name}); + {'activity_type': activity_type, 'project': frm.doc.name, 'status': ["!=", "Cancelled"]}); }); } } From a5de83351e02bc2168da71bb3fe013968cdda6de Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 13 Sep 2016 12:36:37 +0530 Subject: [PATCH 65/84] [Fix] Timesheet patch --- erpnext/patches/v7_0/remove_doctypes_and_reports.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/patches/v7_0/remove_doctypes_and_reports.py b/erpnext/patches/v7_0/remove_doctypes_and_reports.py index 978c3635629..0a302b14413 100644 --- a/erpnext/patches/v7_0/remove_doctypes_and_reports.py +++ b/erpnext/patches/v7_0/remove_doctypes_and_reports.py @@ -1,9 +1,10 @@ import frappe def execute(): - for doctype in ['Time Log Batch', 'Time Log Batch Detail', 'Time Log']: - frappe.delete_doc('DocType', doctype) - + if frappe.db.table_exists("Time Log"): + frappe.db.sql("""delete from `tabDocType` + where name in('Time Log Batch', 'Time Log Batch Detail', 'Time Log')""") + report = "Daily Time Log Summary" if frappe.db.exists("Report", report): frappe.delete_doc('Report', report) \ No newline at end of file From 4bd08182acc90859f66cd685707337a9cae09107 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 13 Sep 2016 13:35:53 +0530 Subject: [PATCH 66/84] [Fix] Timesheet calendar permission issue --- erpnext/projects/doctype/timesheet/timesheet.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 0379f906dea..968974469cb 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -8,6 +8,7 @@ from frappe import _ import json from datetime import timedelta +from erpnext.controllers.queries import get_match_cond from frappe.utils import flt, time_diff_in_hours, get_datetime, getdate, cint, get_datetime_str from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc @@ -305,7 +306,8 @@ def get_events(start, end, filters=None): return frappe.db.sql("""select `tabTimesheet Detail`.name as name, `tabTimesheet Detail`.parent as parent, from_time, hours, activity_type, project, to_time from `tabTimesheet Detail`, `tabTimesheet` where `tabTimesheet Detail`.parent = `tabTimesheet`.name and - (from_time between %(start)s and %(end)s) {conditions}""".format(conditions=conditions), + (from_time between %(start)s and %(end)s) {conditions} + {match_cond}""".format(conditions=conditions, match_cond = get_match_cond('Timesheet')), { "start": start, "end": end From 122d0791a3580f4d65a3b9a822d046a34b5ad4d6 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Tue, 13 Sep 2016 14:29:02 +0530 Subject: [PATCH 67/84] Job Application web form --- erpnext/hr/web_form/__init__.py | 0 .../hr/web_form/job_application/__init__.py | 0 .../job_application/job_application.js | 3 + .../job_application/job_application.json | 68 +++++++++++++++++++ .../job_application/job_application.py | 7 ++ 5 files changed, 78 insertions(+) create mode 100644 erpnext/hr/web_form/__init__.py create mode 100644 erpnext/hr/web_form/job_application/__init__.py create mode 100644 erpnext/hr/web_form/job_application/job_application.js create mode 100644 erpnext/hr/web_form/job_application/job_application.json create mode 100644 erpnext/hr/web_form/job_application/job_application.py diff --git a/erpnext/hr/web_form/__init__.py b/erpnext/hr/web_form/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/web_form/job_application/__init__.py b/erpnext/hr/web_form/job_application/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/web_form/job_application/job_application.js b/erpnext/hr/web_form/job_application/job_application.js new file mode 100644 index 00000000000..699703c5792 --- /dev/null +++ b/erpnext/hr/web_form/job_application/job_application.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}) \ No newline at end of file diff --git a/erpnext/hr/web_form/job_application/job_application.json b/erpnext/hr/web_form/job_application/job_application.json new file mode 100644 index 00000000000..2aa65208c52 --- /dev/null +++ b/erpnext/hr/web_form/job_application/job_application.json @@ -0,0 +1,68 @@ +{ + "allow_comments": 1, + "allow_delete": 0, + "allow_edit": 1, + "allow_multiple": 1, + "creation": "2016-09-10 02:53:16.598314", + "doc_type": "Job Applicant", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "", + "is_standard": 1, + "login_required": 0, + "modified": "2016-09-13 04:56:29.228762", + "modified_by": "Administrator", + "module": "HR", + "name": "job-application", + "owner": "Administrator", + "published": 1, + "route": "job_application", + "success_message": "Thank you for applying.", + "success_url": "/jobs", + "title": "Job Application", + "web_form_fields": [ + { + "fieldname": "job_title", + "fieldtype": "Data", + "hidden": 0, + "label": "Job Opening", + "options": "", + "read_only": 1, + "reqd": 0 + }, + { + "fieldname": "applicant_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Applicant Name", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "email_id", + "fieldtype": "Data", + "hidden": 0, + "label": "Email Id", + "options": "Email", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "cover_letter", + "fieldtype": "Text", + "hidden": 0, + "label": "Cover Letter", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "resume_attachment", + "fieldtype": "Attach", + "hidden": 0, + "label": "Resume Attachment", + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/erpnext/hr/web_form/job_application/job_application.py b/erpnext/hr/web_form/job_application/job_application.py new file mode 100644 index 00000000000..2334f8b26d8 --- /dev/null +++ b/erpnext/hr/web_form/job_application/job_application.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass From b6bca567cee99505ea889c6c7af4d21845f211ec Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 13 Sep 2016 14:37:09 +0530 Subject: [PATCH 68/84] [fixes] [style] for web-form --- erpnext/public/css/website.css | 5 ----- erpnext/public/less/website.less | 16 +++++----------- .../doctype/student_sibling/student_sibling.json | 8 ++++---- erpnext/templates/generators/item.html | 2 +- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/erpnext/public/css/website.css b/erpnext/public/css/website.css index 065e2818efd..ab3beb03be3 100644 --- a/erpnext/public/css/website.css +++ b/erpnext/public/css/website.css @@ -45,11 +45,6 @@ .product-text { padding: 15px 0px; } -.product-label { - padding-bottom: 4px; - text-transform: uppercase; - font-size: 12px; -} .product-search { margin-bottom: 15px; } diff --git a/erpnext/public/less/website.less b/erpnext/public/less/website.less index 4aa3940442b..37d69e0c9a7 100644 --- a/erpnext/public/less/website.less +++ b/erpnext/public/less/website.less @@ -51,12 +51,6 @@ padding: 15px 0px; } -.product-label { - padding-bottom: 4px; - text-transform: uppercase; - font-size: 12px; -} - .product-search { margin-bottom: 15px; } @@ -165,7 +159,7 @@ .cart-container { margin: 50px 0px; - + .checkout { margin-bottom:15px; } @@ -223,7 +217,7 @@ .cart-dropdown-container { width: 400px; padding: 15px; - + .item-price { display: block !important; padding-bottom: 10px; @@ -232,12 +226,12 @@ .cart-item-header { border-bottom: 1px solid #d1d8dd; } - + .cart-items-dropdown { max-height: 350px; - overflow: auto; + overflow: auto; } - + .cart-items-dropdown .cart-dropdown { display:block; margin-top:15px; diff --git a/erpnext/schools/doctype/student_sibling/student_sibling.json b/erpnext/schools/doctype/student_sibling/student_sibling.json index b07b9587370..d6209875071 100644 --- a/erpnext/schools/doctype/student_sibling/student_sibling.json +++ b/erpnext/schools/doctype/student_sibling/student_sibling.json @@ -14,15 +14,15 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, - "fieldname": "name1", + "columns": 4, + "fieldname": "full_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, - "label": "Name", + "label": "Full Name", "length": 0, "no_copy": 0, "options": "", @@ -101,7 +101,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-09-01 14:43:53.473391", + "modified": "2016-09-13 12:39:05.078062", "modified_by": "Administrator", "module": "Schools", "name": "Student Sibling", diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html index cf6f89bb925..5a8116cc37b 100644 --- a/erpnext/templates/generators/item.html +++ b/erpnext/templates/generators/item.html @@ -88,7 +88,7 @@ {% for d in website_specifications -%} - + {%- endfor %} From b78eb2b6f2c5878241aa62db92b0a8ea4e27ae4e Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 14 Sep 2016 12:50:36 +0530 Subject: [PATCH 69/84] [Fix] Financial Statements reports are running very slow --- .../accounts/report/financial_statements.py | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 09174281bf9..97d2cdbbced 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -12,20 +12,12 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity): """Get a list of dict {"from_date": from_date, "to_date": to_date, "key": key, "label": label} Periodicity can be (Yearly, Quarterly, Monthly)""" - from_fy_start_end_date = frappe.db.get_value("Fiscal Year", from_fiscal_year, ["year_start_date", "year_end_date"]) - to_fy_start_end_date = frappe.db.get_value("Fiscal Year", to_fiscal_year, ["year_start_date", "year_end_date"]) - - if not from_fy_start_end_date: - frappe.throw(_("Start Year {0} not found.").format(from_fiscal_year)) - - if not to_fy_start_end_date: - frappe.throw(_("End Year {0} not found.").format(to_fiscal_year)) + fiscal_year = get_fiscal_year_data(from_fiscal_year, to_fiscal_year) + validate_fiscal_year(fiscal_year, from_fiscal_year, to_fiscal_year) # start with first day, so as to avoid year to_dates like 2-April if ever they occur] - year_start_date = getdate(from_fy_start_end_date[0]) - year_end_date = getdate(to_fy_start_end_date[1]) - - validate_fiscal_year(year_start_date, year_end_date) + year_start_date = getdate(fiscal_year.year_start_date) + year_end_date = getdate(fiscal_year.year_end_date) months_to_add = { "Yearly": 12, @@ -46,7 +38,7 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity): to_date = add_months(start_date, months_to_add) start_date = to_date - + if to_date == get_first_day(to_date): # if to_date is the first day, get the last day of previous month to_date = add_days(to_date, -1) @@ -85,8 +77,16 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity): return period_list -def validate_fiscal_year(start_date, end_date): - if date_diff(end_date, start_date) <= 0: +def get_fiscal_year_data(from_fiscal_year, to_fiscal_year): + fiscal_year = frappe.db.sql("""select min(year_start_date) as year_start_date, + max(year_end_date) as year_end_date from `tabFiscal Year` where + name between %(from_fiscal_year)s and %(to_fiscal_year)s""", + {'from_fiscal_year': from_fiscal_year, 'to_fiscal_year': to_fiscal_year}, as_dict=1) + + return fiscal_year[0] if fiscal_year else {} + +def validate_fiscal_year(fiscal_year, from_fiscal_year, to_fiscal_year): + if not fiscal_year.get('year_start_date') and not fiscal_year.get('year_end_date'): frappe.throw(_("End Year cannot be before Start Year")) def get_months(start_date, end_date): @@ -142,10 +142,9 @@ def calculate_values(accounts_by_name, gl_entries_by_account, period_list, accum for period in period_list: # check if posting date is within the period - fiscal_year = get_date_fiscal_year(entry.posting_date) if entry.posting_date <= period.to_date: if (accumulated_values or entry.posting_date >= period.from_date) and \ - (fiscal_year == period.to_date_fiscal_year or not ignore_accumulated_values_for_fy): + (entry.fiscal_year == period.to_date_fiscal_year or not ignore_accumulated_values_for_fy): d[period.key] = d.get(period.key, 0.0) + flt(entry.debit) - flt(entry.credit) if entry.posting_date < period_list[0].year_start_date: @@ -294,7 +293,7 @@ def set_gl_entries_by_account(company, from_date, to_date, root_lft, root_rgt, f additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters) - gl_entries = frappe.db.sql("""select posting_date, account, debit, credit, is_opening from `tabGL Entry` + gl_entries = frappe.db.sql("""select posting_date, account, debit, credit, is_opening, fiscal_year from `tabGL Entry` where company=%(company)s {additional_conditions} and posting_date <= %(to_date)s From 00295f2b8db82180731de33124220d11b9054efb Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 14 Sep 2016 15:36:40 +0530 Subject: [PATCH 70/84] make supplier quotation from opportunity --- .../supplier_quotation.json | 123 +++++++++++++++++- .../crm/doctype/opportunity/opportunity.js | 44 +++++-- .../crm/doctype/opportunity/opportunity.py | 19 +++ 3 files changed, 173 insertions(+), 13 deletions(-) diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json index 56ddd6bdc88..4184d79d0fd 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "supplier_section", "fieldtype": "Section Break", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "{supplier_name}", "fieldname": "title", "fieldtype": "Data", @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -93,6 +96,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "supplier", "fieldtype": "Link", @@ -121,6 +125,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "supplier_name", "fieldtype": "Data", "hidden": 0, @@ -145,6 +150,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -171,6 +177,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "transaction_date", "fieldtype": "Date", @@ -198,6 +205,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 1, @@ -225,6 +233,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "company", "fieldtype": "Link", @@ -253,6 +262,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "address_section", "fieldtype": "Section Break", "hidden": 0, @@ -278,6 +288,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "supplier_address", "fieldtype": "Link", "hidden": 0, @@ -303,6 +314,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_person", "fieldtype": "Link", "hidden": 0, @@ -328,6 +340,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 0, @@ -352,6 +365,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 0, @@ -376,6 +390,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Small Text", "hidden": 0, @@ -400,6 +415,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Data", "hidden": 0, @@ -425,6 +441,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "hidden": 0, @@ -450,6 +467,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -477,6 +495,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "conversion_rate", "fieldtype": "Float", @@ -505,6 +524,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "cb_price_list", "fieldtype": "Column Break", "hidden": 0, @@ -530,6 +550,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "buying_price_list", "fieldtype": "Link", "hidden": 0, @@ -555,6 +576,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "buying_price_list", "fieldname": "price_list_currency", "fieldtype": "Link", @@ -581,6 +603,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "buying_price_list", "fieldname": "plc_conversion_rate", "fieldtype": "Float", @@ -607,6 +630,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ignore_pricing_rule", "fieldtype": "Check", "hidden": 0, @@ -631,6 +655,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -657,6 +682,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -684,6 +710,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_22", "fieldtype": "Section Break", "hidden": 0, @@ -707,6 +734,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total", "fieldtype": "Currency", "hidden": 0, @@ -733,6 +761,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_net_total", "fieldtype": "Currency", "hidden": 0, @@ -760,6 +789,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_24", "fieldtype": "Column Break", "hidden": 0, @@ -783,6 +813,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total", "fieldtype": "Currency", "hidden": 0, @@ -809,6 +840,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "net_total", "fieldtype": "Currency", "hidden": 0, @@ -836,6 +868,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_section", "fieldtype": "Section Break", "hidden": 0, @@ -862,6 +895,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "taxes_and_charges", "fieldtype": "Link", @@ -890,6 +924,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -917,6 +952,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "other_charges_calculation", "fieldtype": "HTML", "hidden": 0, @@ -942,6 +978,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals", "fieldtype": "Section Break", "hidden": 0, @@ -968,6 +1005,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_taxes_and_charges_added", "fieldtype": "Currency", "hidden": 0, @@ -995,6 +1033,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_taxes_and_charges_deducted", "fieldtype": "Currency", "hidden": 0, @@ -1022,6 +1061,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1049,6 +1089,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_37", "fieldtype": "Column Break", "hidden": 0, @@ -1073,6 +1114,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges_added", "fieldtype": "Currency", "hidden": 0, @@ -1100,6 +1142,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges_deducted", "fieldtype": "Currency", "hidden": 0, @@ -1127,6 +1170,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1154,6 +1198,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "discount_amount", + "columns": 0, "fieldname": "section_break_41", "fieldtype": "Section Break", "hidden": 0, @@ -1179,6 +1224,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Grand Total", "fieldname": "apply_discount_on", "fieldtype": "Select", @@ -1206,6 +1252,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1232,6 +1279,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_43", "fieldtype": "Column Break", "hidden": 0, @@ -1256,6 +1304,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "additional_discount_percentage", "fieldtype": "Float", "hidden": 0, @@ -1281,6 +1330,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1307,6 +1357,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_46", "fieldtype": "Section Break", "hidden": 0, @@ -1331,6 +1382,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1358,6 +1410,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "base_in_words", "fieldtype": "Data", @@ -1385,6 +1438,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1412,6 +1466,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break4", "fieldtype": "Column Break", "hidden": 0, @@ -1436,6 +1491,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1463,6 +1519,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_words", "fieldtype": "Data", "hidden": 0, @@ -1490,6 +1547,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "terms", + "columns": 0, "fieldname": "terms_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -1516,6 +1574,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "tc_name", "fieldtype": "Link", "hidden": 0, @@ -1543,6 +1602,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "terms", "fieldtype": "Text Editor", "hidden": 0, @@ -1569,6 +1629,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "printing_settings", "fieldtype": "Section Break", "hidden": 0, @@ -1594,6 +1655,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "select_print_heading", "fieldtype": "Link", "hidden": 0, @@ -1621,6 +1683,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, @@ -1648,6 +1711,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "language", "fieldtype": "Data", "hidden": 0, @@ -1673,6 +1737,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -1699,6 +1764,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "status", "fieldtype": "Select", "hidden": 0, @@ -1726,6 +1792,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_57", "fieldtype": "Column Break", "hidden": 0, @@ -1749,6 +1816,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "No", "fieldname": "is_subcontracted", "fieldtype": "Select", @@ -1770,6 +1838,59 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reference", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Reference", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "opportunity", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Opportunity", + "length": 0, + "no_copy": 1, + "options": "Opportunity", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "hide_heading": 0, @@ -1784,7 +1905,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-08 06:48:04.162164", + "modified": "2016-09-14 05:48:17.443848", "modified_by": "Administrator", "module": "Buying", "name": "Supplier Quotation", diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js index c9f1ffb1a5d..2f1169d7902 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.js +++ b/erpnext/crm/doctype/opportunity/opportunity.js @@ -8,16 +8,47 @@ frappe.ui.form.on("Opportunity", { customer: function(frm) { erpnext.utils.get_party_details(frm); }, - customer_address: function(frm, cdt, cdn){ + + customer_address: function(frm, cdt, cdn) { erpnext.utils.get_address_display(frm, 'customer_address', 'address_display', false); }, + contact_person: erpnext.utils.get_contact_details, + enquiry_from: function(frm) { frm.toggle_reqd("lead", frm.doc.enquiry_from==="Lead"); frm.toggle_reqd("customer", frm.doc.enquiry_from==="Customer"); }, + refresh: function(frm) { + var doc = frm.doc; frm.events.enquiry_from(frm); + + if(doc.status!=="Lost") { + if(doc.with_items){ + frm.add_custom_button(__('Supplier Quotation'), + function() { + frm.trigger("make_supplier_quotation") + }, __("Make")); + + frm.add_custom_button(__('Quotation'), + cur_frm.cscript.create_quotation, __("Make")); + + frm.page.set_inner_btn_group_as_primary(__("Make")); + } + + if(doc.status!=="Quotation") { + frm.add_custom_button(__('Lost'), + cur_frm.cscript['Declare Opportunity Lost']); + } + } + }, + + make_supplier_quotation: function(frm) { + frappe.model.open_mapped_doc({ + method: "erpnext.crm.doctype.opportunity.opportunity.make_supplier_quotation", + frm: cur_frm + }) } }) @@ -91,17 +122,6 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) { }); } } - - if(doc.status!=="Lost") { - if(doc.status!=="Quotation") { - cur_frm.add_custom_button(__('Lost'), - cur_frm.cscript['Declare Opportunity Lost']); - } - - cur_frm.add_custom_button(__('Quotation'), - cur_frm.cscript.create_quotation); - } - } cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) { diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index a2a1be23025..8bd3a2346e6 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -231,6 +231,25 @@ def make_quotation(source_name, target_doc=None): return doclist +@frappe.whitelist() +def make_supplier_quotation(source_name, target_doc=None): + doclist = get_mapped_doc("Opportunity", source_name, { + "Opportunity": { + "doctype": "Supplier Quotation", + "field_map": { + "name": "opportunity" + } + }, + "Opportunity Item": { + "doctype": "Supplier Quotation Item", + "field_map": { + "uom": "stock_uom" + } + } + }, target_doc) + + return doclist + @frappe.whitelist() def set_multiple_status(names, status): names = json.loads(names) From 72801043f1095717be7991aaaf7626557e78f79d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 14 Sep 2016 16:14:25 +0600 Subject: [PATCH 71/84] bumped to version 7.0.43 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index fcbc3f1fe2e..231dd1aeed6 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.42' +__version__ = '7.0.43' def get_default_company(user=None): '''Get default company for user''' From 6d34033c3fb4720cb7e99af8407cec8d644bfcce Mon Sep 17 00:00:00 2001 From: vrms Date: Thu, 15 Sep 2016 14:05:13 +0800 Subject: [PATCH 72/84] Update item-variants.md tried to bring out the implications and meaning of Variants (compared to a regular item) a little more detailed --- .../docs/user/manual/en/stock/item/item-variants.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/docs/user/manual/en/stock/item/item-variants.md b/erpnext/docs/user/manual/en/stock/item/item-variants.md index cee3ab1ec9c..cdca6ed9618 100644 --- a/erpnext/docs/user/manual/en/stock/item/item-variants.md +++ b/erpnext/docs/user/manual/en/stock/item/item-variants.md @@ -1,10 +1,10 @@ -A Item Variant is a different version of a Item, such as differing sizes or differing colours. -Without Item variants, you would have to treat the small, medium and large versions of a t-shirt as three separate Items; -Item variants let you treat the small, medium and large versions of a t-shirt as variations of the same Item. +A Item Variant is a version of a Item, such as differing sizes or differing colours (like a _blue_ t-shirt in size _small_ rather then just a t-shirt). +Without Item variants, you would have to treat the _small, medium_ and _large_ versions of a t-shirt as three separate Items; +Item variants let you treat the _small, medium_ and _large_ versions of a t-shirt as variations of the one Item 't-shirt'. -To use Item Variants in ERPNext, create an Item and check 'Has Variants' +To use Item Variants in ERPNext, create an Item and check 'Has Variants'. -* The Item shall then be referred as a 'Template' +* The Item shall then be referred to as a so called 'Template'. Such a Template is not identical to a regular 'Item' any longer. For example it (the Template) can not be used directly in any Transactions (Sales Order, Delivery Note, Purchase Invoice) itself. Only the Variants of an Item (_blue_ t-shirt in size _small)_ can be practically used in such. Therefore it would be ideal to decide whether an item 'Has Variants' or not directly when creating it. Has Variants From 05e33789aa82ba45b9e501a4378974a529b806f5 Mon Sep 17 00:00:00 2001 From: vrms Date: Thu, 15 Sep 2016 14:11:06 +0800 Subject: [PATCH 73/84] Update index.md --- erpnext/docs/user/manual/en/stock/item/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/docs/user/manual/en/stock/item/index.md b/erpnext/docs/user/manual/en/stock/item/index.md index 4af8eff9268..7ca9d4eef94 100644 --- a/erpnext/docs/user/manual/en/stock/item/index.md +++ b/erpnext/docs/user/manual/en/stock/item/index.md @@ -1,4 +1,4 @@ -An Item is your companys' product or a service. The term Item is applicable to your core products as well as your raw materials. It can be a product or service that you buy/sell from your customers/ suppliers. ERPNext allows you to manage all sorts of items like raw-materials, sub-assemblies, finished goods, item variants and service items. +An Item is your companys' product or a service. The term Item is applicable to things (products or services) you sell as well as raw materials or components of products yet to be produced (before they can be sold to customers). An Item can be a phyical product or a service that you buy/sell from your customers/suppliers. ERPNext allows you to manage all sorts of items like raw-materials, sub-assemblies, finished goods, item variants and service items. ERPNext is optimized for itemized management of your sales and purchase. If you are in services, you can create an Item for each services that your offer. Completing the Item Master is very essential for successful implementation of ERPNext. From 33d18dbc9ad65aa9afc5126f4275b7d158de6858 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 15 Sep 2016 13:57:25 +0530 Subject: [PATCH 74/84] [docs] for auto email --- .../assets/img/setup/email/auto-email-1.png | Bin 0 -> 168174 bytes .../assets/img/setup/email/auto-email-2.png | Bin 0 -> 190341 bytes .../assets/img/setup/email/auto-email-3.png | Bin 0 -> 123802 bytes .../assets/img/setup/email/auto-email-4.png | Bin 0 -> 104063 bytes .../en/setting-up/email/email-reports.md | 37 ++++++++++++++++++ .../user/manual/en/setting-up/email/index.txt | 4 +- 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 erpnext/docs/assets/img/setup/email/auto-email-1.png create mode 100644 erpnext/docs/assets/img/setup/email/auto-email-2.png create mode 100644 erpnext/docs/assets/img/setup/email/auto-email-3.png create mode 100644 erpnext/docs/assets/img/setup/email/auto-email-4.png create mode 100644 erpnext/docs/user/manual/en/setting-up/email/email-reports.md diff --git a/erpnext/docs/assets/img/setup/email/auto-email-1.png b/erpnext/docs/assets/img/setup/email/auto-email-1.png new file mode 100644 index 0000000000000000000000000000000000000000..be4cc433abca558a57cd51f10c147836fcef6fef GIT binary patch literal 168174 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

`^z~jEh!W7H$fvNt zR%tvj;6tNMR?urR`A@#)0S}`651j2mYy22g;ZJ%z=pmZ*5LNxM0Z@@w zeF}5@i=aq~C;*{3D845Jd-OBB+dXy$Q5u)*R_yKAG{*nBXwnej>oL@wDOPUAUU84z zWZ2{W^@2CdAD1+lTo{v0@2>^eK_$;BVKJ}`}I|K9DdR3Xk~TyBVlDE8M`l=wj?I4$EbaX zx22#g?>zqy+Lb8FVf`=GCLGG$fs&T|Bk}j9-x7awEqlP?dCmA!DFM!OR4^+Xyl6w5~EFEmu(1~Xb zC74Q3vM-OrC_KSq`Qw={zF8Z?34~{n6EwwYtSsGgqu-q!A8?^z$p4d~{-rKK0+r+W z4-p&bxvo!JeT=(;L7UVSy?Wj_iK4p}y+V~)$gOjIBzkC|y54P&r1x&?%kcgWnrR*; zd{f<^#7+Z|1ANq9VDXox_2^KmG9eFsi)aSBf+%mFvRh2Lx;ol<$pu_zMSLfx$b%dh zczr2^J%vsJPJU75*FlihLfYqo+W-V>KULjlFU{WpewutlFFIsK>B*_B3DCyMr;j9_EiZ4hR3qauC(YV&?=)8Ks=(y*gcnkv}uurjE67-1~NMMw|m9M7|6VZs*!uMSF}K zPgomo`3ryH)tuYeS)JqhD{wVD=HI4@g4q5B4ubxt$nb&&6kn{VK&bGQyN&T4qxc_| z%$JGF=X#~H)aoIV!5`qO$L8eNby`*dH?^SEBpxc>`URdY$#E{t)9*UE1uz%N&k>R%^Jq$x-Ai&NcUv&ky0Ii0#+fa=-E>cX-%_+umURhxV0mP~f!aKS-s$i1n8> zRLk@%m>qwid;x=#&lI%^WSRNzuMaZS;@j-45tTnJn{d70mL41A+kW~1ocnu|@2&Sz zB)MT&w89Cx#bKEqs5`rbjo@x1nCoHG`*jFv6Akfp#QMhHzS8g-j?1Er zO8DOZ+s}xR0nv}Dc;C+cc}z$TSR!~pZGC7-+f_yTSEBMim6(T;M@vfgx5vFed9mQB zdq}Wsaq0iwlXrysRZ4w

tMv0|`7X;3eX$-npgbL{!gjk7Oqn)`!S zDgR|)c{xxrpFO#j_U?rxJWXWxShkn13$=6vj_u1%lb~UjWI)OWDbZ?hd2kLq5q}B0 z`=P!LdXZjL%7p2$s!raoa=OY)H0!q4n{qUW&qg|n6FKDENK_uC@Cg2pKa;%%{;g5S zzV>pxor5Vo3aH;Z7*oTZBaG=uxunzZ;RK4bo!Cl50yeR%eJTHttLawJK0dT&LQ73Ug~ z1}#T0&m3@NX|Qf%?L`LBckmR9Zu8w#er&-#hY`T`h)~9P4Z=nBbH^ zO_7zF*qO3U!xgQ-v6aj=?(O^;XA6Ub?TP6cTUKDQCw3HRF?rT?OAg5C znrS=56WiE>aa{or<#bCX?~Q#l@zKz0KiVeB4vYQHNv@&tk)lCU4|1wf0`#--3JPk^ z6doi zmF_FX6UaJvX8WNb_C*e+ierwm7EP$_isdGf`Und}^Mn1{EGxB)q1J+|j~9JrbZpz>AsnfA7|)S5;KlzACmyXcI955xSJ=bOb6*^= zIcAy2bwhth#pd?=%XOV|j5jkM!M=Hp|7A<-=jQ}Nq)+N$Xs^WBc7Z|h7QplyDgC5k~GJE@v&txa-L2pkN20JM%|+3%gBSClQuJ%JpkJORYKVVdd1 zLKsJISzXVCXho9RW=uM3OnbES=9s4&ai1ItcD(e#2$T!h8mrNi>Z0Jsxr7NrQ>~gP z3Ys%Yk$ib^pUVR5Un<>nD9?SqoM#B=GadH#defrmD_t{BG0ZkLJ;cEK%)HHmzA4m< z79}{iY*BGWvHs*%3FA3F6%xi!p~raI`f1{^Ewo{>xud#efUVQO7vROZzFed>Rsgy! znX!>BxVk(Go7ND+-gYUUu(Z(xVqBAFSdi8)=t=US{-`cMl|C4*C3 zYI$S!Awro04sWB*!qPb$ZE6OAHQ&s+6|Yy%%cLAOIt}$S1*+DT&v$J6h!hN1$ClKG z6y}tdX!n!}Z?$&8HarS3-q~p%DQU6$Texh)%LB6~Yi4lre@t+!Dua_Z<^6>)_iGNd z2kor9a-h1H`qQ)+gEON}aou4NWz%*t6^X8yHx-{0vMSEKZ{453rrw~&ZwX$46xlhV zaXPyt#BrXR!oCgOcXK+9!`c;m$_=XxvHDAy1K{vy4kN%>Sdr$mjYX75aI%GkBOhUW zRi95<{@Ip~Eg=ZlxCJ;gD%ypnY<@dV9>?4!b!V&U+tOA-Z<$W+XerRXc5AnQ{$RQB z4BV@s^!CzgH5D?N>+G#rZ;;8YcR&uAip~9Jfc)@%t+O{|I?3R8U6}18h143|6RtvPuKer@aIiXB7**X_Wukn{}7-j?cGas zWRDPi^Uo?H|37j5K7a@#1n2(=^?zqivDqkUB=rBYoW?(9tpBOPjYjIpl4M_HeOvR? zN$Z^kl~4DA8cGQtk%CrjeILHG|7_b}{2wgwMfG*kuZHA!(Y>V6avjI5tWDxRGazUG zcazH-!4b3CU5s9v^}8tKJ2JZ_akirqw%Oz9BMKWXjK-VZk;BVW_as>RlQF&hQi5Zr zHWU}EsEVvE@_T(Woxw23P(Fr$n>DhyC(9Bv*&{F(EaUob|M^c5d%$8FJ40RWX9sn& z%Q0sk75xx>r)P)oX81Mec@f<<=Pp?bua=(`p=C4_sP76<%4jw{+!!Si#kXj%~3Z-<{Eizerlzka6EiDW#HMAaB%JfX#GS%3;V zMSb_-0rmhBHZ?Aq*#5hM{%#{PE}ud*?$O@Sv_$Y+y=SD%|2zswD>&;qj7gIu~Hf7g$ZFcndf0OaKK&yS4X{3|+OecNYw3{A7_RC|{N} z6U5icK2t+$6F?PBzM`@J-`bERjFMI^lYch#alZ~?9iiBoJBAY5`s%2#tHJyD&P9+? zz95ss!d0dZZ7ZvCmEeVAQOG5iTP>u436Fa*lGGK`p{$i7v#iSF_#xA_#Cxkh`f6up zqF70PO-|bgmfsk7LV_()S%O~P?6{ml;lFe44hek?E56m~VtEDhh#=9a{JFF$W+a)aoJ{*SQ5${jbF*Ueg8P-z%=Kw+FoI+zl zB1Fza=g-Wo<-F^ma+IV7!48`9*wr}~G6VDIk_epe7*Q1Ny8Ze@hG&<`S64Z!KDz_Q zOcM@zg($6PyM<}LT|5SUzAF$_Zm?8T(I{3@=)PZn&Oju*Jc5rw!m4MYB2Q)8Pk7E1 zRmyC!SCWY*Q=)ucta{0?fB1CChlx125M$oxv3zs&7<8A5Q4kh|RdRhaUl??O-7Rn^ zAsEg+7JGTUL6cCl?ARq&Wh>bZX-1#neTF_OE2J_}Xz}xnJw0L7K5017+l# zRMzk2Z(r7?U^8^DF4)ZHHdikjj0;bn&vLlDZYsl_Ypmdbs6kEN%8V?gccN`zD{VGo z8J9EH3x?(%#2DFL$5xqTXe1MsOykY<3DCa^o%~z#StRfuIE3zxM{Gdj!ah%GvY)=& zjiqyQ8oF*S{Z(Fx-Ow%Xb11(lDJ;&%5;n2q`s+PMXJ_Z2mHAiB+cCuNlA{#6!|T<; z3@3u$BeeDvmB1ZtNy&mg*vQ`XHt^kjMX$x86!`%=2zp*k)-p(}HUMx0oKObLZB#`g zlH{epaNC*6&lrU7U!MBye%e1BdaiPxk|N{^7o0Jo2)Y1YA$Q-NP7jYb$z`^jD%feW z$a@7q&26sB-xkcvkqde0l>+mgMREj_PH60>}`aw8GQtkQ2mJuk{>wq zLthBu+L-ih)PqA!=Y~Z}hK8m~A$^X!HKY?aIB5qO- zx6en<$<=_pkK0~fqjPY3{b&#TF2`DCHfdxkA(c8^$In)$Os^`-=UKZB@&R^{5D0`o z4Idr779An?{;Edg@=x?cpTq!xI3gJ7=gXHATix>_4N<^dEDRKsJBQste!(F6yR_cB6>WFIZD}tG6k0`jyHIHu#bu)|$Vzg(N*|Eo+~l^eY`@Y- z%+E*oJB=EMdnuoLYY?#DfB%_wP6|YMyol;+Y*5!8nwW~R};PTEwQ~Lh)cr|9TU@%{&iSC2Z2iD<1 zf}T9_88(YUE_#zP*bbc+DQfo5sfX?5)vf^KYQVNQRK)3ZIsQZfrHBu@6bHV*uQFTB zj|KM;+NvES2}an)PpSRy*HeYs+%|Xpss~nEL=zTC1}2*=H0X`M#UJJZ4;zWC=eFM6 z&@dZ$gVk2NZcnOJy4Gdf&+r3qISdyCCe#UPA~>Wj3YeZvb{rCyvuoaHX*RjN?n?BzwUg{UX4FD?ua|oWCUFHByiT-!N|^+lZN+iW&E^7vvLNr=`~?| z`_f-Br_!Q8`6B(735PK?-7#L>6n(ikTkO6&ex=4O^X$5xn%zYF6L#J>C=LzbRT=Cw zZ?LsjJQa?I{eCzG{H_1LjiF~CYW9u7L`{9il6ceZkQMAG=R7xX3zyz($ZmK-jw|6Y?oeT2gra{^jq;b)7|D3W zu*UWM=Ufb}4kDa;|Kskc%L=S#!(5t6>t(QV@8zwrla!mXnPjnIk7Q@Ct3^U(gDFDZ zX==~+%{*#A;n8TKK=yoju-vx$zlEW{I9y3wWKGyAH2A?@haUvQO<2iZ*fw z?P7k0JQke}7o5I{c7z0yFEu%C9y01sb&o(Czd&~sHPAtAj4X!jG)@~VG{&L69v(>0 zr<>nisjReyKZaHDnianCsicJn$7COid+*JwZH`9$d0 zFLt4`s`dCh&h3AX*z2^NxkPy&j$L)SJc+oycaZC(Ow`Vnm6fr-C8b#d`Y1PIZ$dYH z4KwI)HO1v2=2ZpQw(Nw(}lU4<9#z5HAc<&|@G8VL=yf<)JM zuI4WOKjQ~kZm^l?spSC~s*Z?qT@LxR5UD;J<<4BA#iO!fX6LIh(pkkU{p|Ank?m{M zr$x$cO5+wUvjpCo&sWFuXKMF zx%Z{qfE&CNJ|CnYpw@lmrelq7Yn_Bv>kNo67`da75Qewh2Lyp0r{txkJ2$@9MJtOe z7`^?fP0I7C8!Ml5lVGv}IS&$5!GgRuj?7~ZpCHIww z2d?zls?)Zq1V)P-x?vO2@A3L%{2p16S@Y2LaeBf54OSD{0I0HWg7V$jKzodgR<&~( z14FS2Wl}3EM=nY13c*A{tJNumHXWTI2J0_i?-tFawCCcjxYp-kQpqUIZe|Xr9k2B8 zk4o7*?FYL9zh8*FVtFAf&2EK^jZFfftk+~cu81A z^7yxzVZM0YtO+Aj+Ax%t1q8YTVJN`S;@_T?Qk z!gT!ZlQn>&lvX?Mn)h?iRCyr3KWvj~#Sau$D$U50`)>J1Og3~tgI#|8d|b^qD(H4w zHTxoQ!Fjrnzk^8Pi+-2Ej_1?na*&BA^ICjR_MHF}a0)bP&pE`l7g%HPzyf!u2?`|K zxcUu;e+Y;DFS6b-ysofY7jD=#Y-}~Qt){VU+cs8=#*J;;S+TuhH@3ZEp6v5o=j{D{ z=jWV1=QW;Zj&WTXvnVxCATmqH;Vs^Oe1gu2&1#{%cF} zvv`<0XHRHH7NM{+Z@)r|^1(`;ySJ~271cl!LH{daZxF+%W5 z(@JhB&azhe#VmNgX(i3%x?#vX8p9@6X&nv_Pk2vR7%lAy{6Q#UHaT*buhh(fl*FCv zBaxJzdO`JJ+g?8lyLjIwzM-$#<(tZxo881O~-Na9ug-6E`zC{3}X?$AZWKi1tP}HXIp*5H3N&z(eZ$0=~_e7xgTl z_n#~l_X>%vz$pHBv87@<;+zhQ0Rw|5SHPwHPph2ScaX_)61pS2?&p2M;R(mSoXH7& z=X_r}Bs_l8#whc*F)dUmuganVeB%)P7GYRy_AKbMI)b|fU$}7&;lewpA~C6>nr*f6 zJ#;FqDRmCOjL(KAw>THXx_+|iCgX`H`u8uGARJmNBFY-~O*b@{k{$8JT^8|>%AlBk}{u zPDT|b!E|=ZU@45TR(L&6b*8R)${axN_bZOIxD^B0cn^O~+FqBx)`Eom}~E8XS{Rmkzo5vGFmo?q68w-g(0U(_VEWKeuG8`renV zy6Wm8(8C<*clmJJTX@gBwN)sT8NtBH6GhD!4;iBEAC3*)oJ>X=x>T+8rfOzb+^OWK z>opY1UJYq?u16~Y)C@kv5KoDESAkU-`!4{2!QyDVy69b-xq2KeHftvly=w(HcpRmc zIF2MVuQdU8G?(=mb$8N*=mx;5n#JRtd}YRUt&>?#F@54JTKr`YbYysf@9@aXZfUu_ zD`YbC?5znyU4>}F(1;ks@24aey&6p*AyNJ24M}XcWGt_z-0>od$>TSf?AMY8BNgAf zJh3Jk7og1nU3Uk3am63TF614y008!||Ep1j@xgPCAn`sZWgoE)<>rv|QUM3xHf(&W zakg7Skj1O(KU*Z#;w%)&a+WKxvcD6fG2v`ERLPynZx6wu#3e`M{0$&*9GNE^#(R*W z@5M}`PM5QcwcyPn>G5ZX{Nv*E`z3hw^~L4hcHyK+ZsZObVx{D?K<8ilh`6KLL$pIy zZ{4)8umhiuuGdo6m9MRG=X1zWgYV{UEDqS=W@zv*^<+FX2fo>XOv^*)aVUf=E_Z)f}QO9@B2wiFGsKOPJRWZDD!x@=cx zUOELH9rsjp)*5-nk{DtRH=mZj>j%96{%8#SCLDa)rquU|4A=x*WCxK)Oz7ACK<0Zw z^?li9edxb>e~UQA=j$#h5Q^}7ciZ~S_>SYv7{bc0{&JZ|C+R1{M=Wm6Jyc!5Y7GxR z;w4pPX}q<+nxr@4x%e0*@z2lpZ}9DzuU^o7Hr?6aRK|l;=a#0~FIIx}$S!RsJDwiR&Qua7)4oTSt8PiEqIz2* zhSFbC5oExV4n>KV#GEIf?+ok?=X}jqmcO?=)H9jH4LWzW4EwV#q1*AL%1CL;U@GP6 z7VN&&oYAg)G$K=H|CKO*|A)NsyyapbCuEvFVGq2#-TpiJ#XRh) z+r^Nxyg>O+2_fhCl_qPRfS*o~-A;E_YmV^4X({SgD`hbSVr))3@|IcMwInQ z4EZ@0S8K|bJ7cH3JDM}m52*hq3n2T@>3W`s|IKN4m@B1k7Og{0;3HS?Md4e9I#{kb z#9eHFMEclg`QAr=zEmHsh9CSb=_!59my2Gr8FK3V(9w=6zy*C);B^na<6)8VPn8mq zbTQq|M6%H1uw2hq`|b!WS>7vTOX9_jH+u3n48OLBbT%sq2-+6QP#i+L{l^@aepO8? zvs92i$znBP*C7Zwaa&e{qCr63$o4xP#RoTH&Ic2;r?bgmeG}e#Cn+NRS#kABuAz zRlRI`9bIixX%{Dg zpVPRVG4)P3zXiQNKnlFP(mn`RAF$U~dp%#LFx%az%x@#NwC^C#jucW50`65+c9E}f zEHM*Fz14Kq^8zwh4@#VzdtuHM+ei213L_#TT}jNP1~KF^GmighWD{dZp*ya=?zW_k zelh6j(SPa+at?MuFDslp`ll&ypU=kLue4fS0495L>X9vSLlg2rRm3@VH-RyN|ijRrhk^UXd!xpmlcaJl4pS0P zehvObXmrPgXwG<5RoNc*rngU)(7272fu7bJ1&8pAq%q0LAhpUqyd2-ie0o}=pH(D; zfD@Pw(6Y$CdKfhZo^8S6yBWlFuUyUc7;Hg5ZYy=#Xf=2JsRU2K=l4h2d-GWF3!Ai= z;)N<~zD7=Bw3$wl4)#-BdUPQ{{4WdqSKKhYb zN^#qAuv>ta ztu!4hCTo~J+sDiQ-HXqrJ$`B@#&X*6FjReX{U}|k(?w6AG|-+4z{)fjVK*PQJE(TjH=gRMW;Es+890DSs|-8r`A=$6V-v=l5;9`@qD zeY9EB|2U~@WUtoWV0Yvu`U3;)LhEa#WQCwr-Y|${B7Ct!SnyF;6`Suljp)nX*ouSib)E}1x=5yH7ZOpfF0=>$fD z?ee>hpnWIKhqJ_uZhSUW9Ho+9=kRztV4+=)GopT8zA5L!v14CZ1tLu4z0O8)`DY$` z@i{kk=Cjz4mYbcSQoSb*I^DY2yF9%DrR525@kSBQaL2vV6RI-ZBYSj$S$TBDLZuEm zGzvcq;}l5j8g4Y%6n_)-vR{I9nQA$=5!?C-WA-&<(4&n~Z>}050{tv-qVWneC|EA_ z{_LnPwI1>4;?qNPOZLo-Svo3Ct_ozQO4RI;GzvVpZDkNxZlf|nShJsspn$2O(NimY^{ zeX=QY z?9u;ytSz0q+2+8YuTcYsDcI@{tHOUpAP8f?Vmk!ejiXFOl~~)nN^TBr&4TUcilZHb zfO3(F>ZMzL8z27;WRyGmZ`GsfkC zCtXa2m1eg$F_%*>Zl}2dgQaSIDm^+REcepW4ypmk4@*59IV}z8DeyL#`Vc~9?EXZ? z*9qJWkS_dV?8%R44l0~$A`B9n0rk!6Fu-IvgiG@>t9Ue5crvs z@-L5>$PS3?UR_^0HxFMAS-0F*V5Ti$-~5nv)Gh5qR?)ELtY-Iq_2jEl%qm1ssWV_t zw0y5`96BAQTLUyQS&*e;(lE&c$J zlRpxZfMMXTru3E5)TyIq%H+uCXoVeuy6z%QP3IdSEE1mhX`xcf7`(&KGaM&@HawsFpw-EwPTkDTi?g~aNDnVbreM|RUg&!T- z_8o+qA8cP3rx6;24?$O#etugzizb%fW#I>w=?ya-KhU~Hml=Nq=15Sxg|SAXgCUl& zB!iuR?M7D^q-2M31-ow%O%g4!{y`K1QVJ%~8yh-sa~{!=?ONsLO?&i@qaXs|F62OL zc6<7TT?a1Oy|lzKIS6>y76&akT*W_FW|&wYc;S}AOQ`OCd<0oWYmf^Rpq5l`mR?yL z@L7?Z)M$xOa|ENp&}}vwLCdCbK&8zU4m^rhIBLgMWG!z!yl}j|%$O4ZA75}b`#FK= zd{c?&?Uf(3)E1gyX1}a~WD)Eu4-?35o)?H>;QNI-(&=I1r4id7uey6Bi&BejTUg6h_7E;%!aBK6h2^pOL3z?js@vty z)P5G@Ko+vV_5d!-&Bqjc&2A^>2MAB=N_vunuz-N?-U%y_*UUEil;8eXjJ8)v?kX;| zqK(IWCB#qgiOv^~AEh0;{miSam!niY@^De28*2XQl37>Zq@~OO;ofma{p5DHU>(tKkSE7%l zpxI`y|B@EKmdKqYT7u|C>hH-b@XWg0X-ZEySRntK4VkbOrCOY+uT1U zVJ_2JppnR8hMg;xcNfGK92u}kPd7dD9oQ)n*#n^87@ML6w zD%a}?Y6RZwv3$k!P)_t4z4}~31y57Sl49y;txyC$93*{HEB2W*b zkclE-obtPd_VRtNaOQTl#V~-}{NKwaodLP%?iG1QoR#gQ(-V`^Jqw>BXn)d5q)6ur zH{r}D$Wm}9yTrS>a*{Nr_-*-=CMljjRoZ)Kz-*{v-}+i4mH}Pdt3@*3UiIgA|AX>; z-ebMVKPj24rg+Cvio7|PbJY4;BAht`UdlUDOM=^1Oc9*m9lzI+k$9&~#MX2>NRZJZ2YOh>ZoH|a5;^w+&)!vUI%o<%D1QGkA6q1Bf zf=_>(Q*Hs0IgGHJ4=vffD;&EsUkiUjZN4*oac$`cs1!jj)XD!#F?Ui^smf-!*locH zm-MhpBdI+sCu_ZXxV>9vxyleB%DN3hmt+3k7m~{CN*$3r67F4X16nrfsE>)8r%Y1y zw?5lmkSzKwuu*Sx-Fvi9!-xKeyHpc>IV>wIlZ=hUT1jp!SytJNQk6G4$=MwxvY+qC zD}>cxv6(K;+Nttgb(?O>q?Kg`hG5X ztHnCsJBdk7b2?w4;({>k8LyU;X{Gb%NHAg}i&S;xhx#LiQ=mc%^dci3Uo+krC^Q7# zPnc3bYJ5-I?iP9lWWJ|@(RRf(4*GcdYnsoJBR&uNAGyaEzsHay%EXpG?Amb82iLV+G$=Xge<7C_)=w$iD6%6(x zbqJ{P6RepL7%(Zvh;}!(7JM|}?#T$p7VC|1br;Fpem(?ptrM8B#)cG{g4Cb!`gI8k zRQh&_bXs4uOCtb+7SLk~kLCS2bY1U;#P4@@f;vluxYcL#aPXQ-AAr<;78r5zo?zbl^VO1&$=6|TsHi|(mnAr zL(V|`ApNh%McDNiMO@}pV~<^05;A~UaP>jjjY64HHQDD%Kuv*{Vz?tJ6CYpi zN@i+>_$T+VtHVZtXif1{c%LSe27O1Y{`jD>b0f97IKRq?P4aiW9R zRRrJ!_5(wVD((9_Lrp?&x1#`CICy-a#~7IHE3mnd)p(<@JR~vuTL52(XN7B1bSnoZHMpYvRjXpLhPKovE z%JeizQ>a05#{A64B9be%9y0d*9#Y2yFb}V zS`L&w&Ja%)dZV$L27uiN!|A#&On%!xC39YIU-}-)> zDv9p%eyt~my(Y`>cISfORDS`nP1M;Guj1paC%E)YRS zFy-e1rG~tt$5$ApH>*O&vESu{Z!a~S`3>Gbo?0$B<$^Q$OewSyDnumjB!_=3-9)81 z*Tx8TvmK1Fq%c!;os13$-quHC3J1tAr29?BD=N^|kz~Hi3d<10OtIkLA)rD^0U` zJJ6diR|&T!tw}%S0YF{ypR2rW$#X!_VI6D#nNd*d%?t;m%f>eH=BM6;g-5Z^#bJuD zY6lzNP|mhj+;7c+y`R^4tUZg6N-Faw7cCvb(4TbnKvg(OrK56e_(^&w6lvz5W2Qh7 zQvYJ~wrZ0{4BX=FO?hgazZD0We%yDEYCZfyRNRC)!Q5s-U1Ubd_K$YbMI?4S)+K?~VjlqlC#qCYvz`sirEBPvViKbFlyx^! zYiYvp$zzV5wIS7>+Q9Q%$wNZQm6kS_g`06u4&x6QmBkcyM2cO}pCh$1Xn)y_y;Mqd zM#7b8D6XX>%kMF=7<=wMd{N5wVL2UH7~9&yA>-6sQrkVaS(Iczy2M{;j^GTGKFDaO zj?Ho}$t|TlE_H#ewqB0LTkY;4@NW2oK|?!W=$GF$VaP#fi14$|6$;G=*nCz$+vaX0 zuG7r$ zb!c{p@_juL>F4Ow$!O9`m%j?0UDsN3>$|cCo(lkf1b-zgvT1aA5j@MMyK;SPJ=h=n zi{nwm$)G&&9UsTz)fbN=9#hp76-=*HANBR`q77g2v#R0IpP3F#B8fGk_gsCt8HWU6xTcUsn6v`K9ZPh`dHSjbV+;OEFXiicD|9X3?UGk zQ_mU4IN#K9Sj7)NiH~wYIkLI}dE)`DoSjZKk{Fi6Jjaxv5O%J#vni@wB*&$RF0{+m zk1mEw@4M>@NBp36T7uMBkT3Q0a!^VEYrXUZ7Bny{3*j5g(=B&4q&5U*k_H3B9jEFDJ(l>Vf0?==%QV@FMv)H*trc?b&&;l6GG66InP4UF zQOV_Sjd4R7#Tb#KUj7z}TvR!U2 z`NIlElxLBLBM&l%g3PI-DuH`U#l|ywu(;zLR`lT?2B%I0#uFp5g!>#st+@WbX;hEgSZo@+cT2cc^n{K$!oyw(K5 z4I#Y~-kmJE)kWN8@;i*nRA*vMnJ){MPI7OtGIqtp*lKTuu3kDDN(lHquy?#)gpH(; z@*3-%4_!KAQo>2&Mpm{^jBEI7y^^R;J&{LXiO(V3P1jChw7g|crZzZGn=!d*+|3T^ z=zY);9uT`Zp(T3-Wrf_c@TAV+!Y(IrSsEm(J{JgQ-{1N1dA|-sQgWI)R}hq{^ngfKL3k zU1zSt;Os9&L>kYKnU5|Bd+!Tt%h-|N=1#5H@SBA1<^rqG@7tiWsTfMN-gKo9J*Cck zF?yLQTp}CJz{O(^ToBq~wffp{)#+obc+BY?jO5#H6wZ@Eo*Xk>Ry}IQiA`SF-unRB zkZj>UWEel*e{4zbef@s#33g@}eGN&v7LM$W4@+X8=6?^s*N9~qZQ1iU^?zwM}b zJXE}Eup0AY(&sNI2KuvGPwF7xa>A3tnf9xmYZ3dscjQUMKVp~jGK&vz2xil{e6y4M z{YnrASm)A6gMec>DVv;<$q_@(A?if-mlVb}DAY=!(EBq%by%^9j&1VNJLC&*EO z_lG0#D5sqE!maUjatn-NKxO9pCv<517bIf8Y8z}mGnNhCJD7{HUcYyIXYQwZ74|nM!W)eB{}PS-4~0mZL}LOJxfGLgGAC(&R=hB zCn>;1rIG--ZJ&iWT3Q(3Jo@=!+n2pD26Zt_coG7rSkUM*w6em>cg%>9YC&{Q&y(r? zm_S$oUr zk%`bz2$$|CkJD=`$(WTswmuI@9Y$T@;Y^8X^4Bc5wy*Q``GPew7Sq8l_?h{Ur<~?| zwYhi%Ra((3C&L~2`PFn_XsC^kX0G7HwNy03Y`;9oj?fp3xa54-$KoSr-h!=_2)LR> z)8Q-2&G>3f#X{lvQS@Q#v#leyJo{VSzVimZ*fr;ZkEm@Liu`L*c2g#p`Znso)~h%s znGKlio|IjZkclQvi*2gi=fXIaeKhr?$m&!8O&Yr2Hx(3^1lt;e2ZxDJnRhTz^5u^A zihuW2Y4(dSF0VDMrs61v`OtXJm{eUIneEk&tsjSya947j$bL*)yrczOSp7Qa{Q{4P zu!492<*G=IlPQqpezTWhOa=~c*}Ovf@h69^jak@owoY?&*&0gGrjE7xaw#$^zPDwV zHZzi?2`gDtYkRwpt%z$&#ip#U+|`V}IInoHj^sR*8hziU(rUe4?6k;jhgPHh+#f;J zY~>Bx^>w;$jH!;*Q#QN$17-$Y)@8BU67(+Q?V2m($jN}wIkZgq>Cg?oJfxS)80x`F zVe({8kzx>aVKLZ|zmslS-H-={3*Hvc=QytD_D<{|k^odXt>0({51fAwjn_r4MfmzQ z@ykZ-hZfdZEWlk-q^bD1%w1DoL&gRZJ*{K?xv743aV`^<{!8igAbf2F!(_E40-IH! z`%}^yrU(C@F*d$8n(F?F++SrJ`%bi?F@t4AcahD~t$=+HR-rhUBwZvX&+>%ah82%- z9Og*Sjzem1A{fMAAu7%7Bp?Tu6IoVYG`t*AaplL)FsKV$-?MW&$(-y(7QBdT&pD3{ z#W1pj0RH3(*968?5oI(u?X*@T9es9D-GjOhl=F@*lrG8(bqPHsc-L`~t`wOz;ul;e z8Iv$)rUpLTtl$RdX{a`jS=jd-ag1-a4u?=xuP%UUt#0n?XBA9fY=*IFx{TP^!elB-EB`#REwd$R&@;tzTi z)B~q!&oxJ56md;N3Nixuw-V!qa5X28TD6#-0Nt9Wu(}G3K4!vuYD74~5n&gj1$!dC zCad9Cl;&$wNh0sT?h~2>M;nur$P&N!U9r;x`v$Tmu(HK%Zbj<1$!fCf`kO=r;)%YR zz+bAP?#YVGN_VcHJy4Uzs$UKZ{g39Bsrdg?Ur6SD;rF_gUwr%|F4)}PjZC&13J$)7 z9hUfr?SG(pV=`*vcwjPBt8kG|UiRV1&zLV%nQIK{CE;a1A5^977#U}UB=RAWkx|PR zh#@{@egbyR`&^7=((v^BmM>2Ml?7xp$HP0Yc{~fr+1*XD&f-l4ZE&optp|HuNawVA z9oYAEx=nE^N`PMQhoOBz;SHgC`{k=6E1@7%`&26oQz*;O);4-Am+k_exLq*9AgBe{ z%cd;+qEEDf#$*B~tjFr6@k1>{8F%PnA@)wFveK{sLM&K_*cQf?d@@6Xt%PKds1Qb(2O)zCxt%M`MN(X(VU$$KLF?q_vK(hC zn^G=L7>&7`W-U|5je405N)oN=K$Gs06V9Y;D!+R`HaV6=zE0I4b z(w++aj|f$n*)M4pM5)?R5(iWO4y}T<*Q1XsazcqYgMM(7s-%N_lezPYOaO}dYfSMMiGdEBHTqE92zZf-b672= zTGp&v_e9DitPbupbQ)bSvUrQGI{~r0i7KmM;n%Q2_wCqUrH6H@OSfGVhwqQ(E-5LG zWHNwoM830Fv4U%$bqoH}4o~L>8?C5}Zn&vUS9-h7*01V>Cb!qqj*8yCCOjN%-`oAy z)-GaIX<%t|q})xmwdWN1_A{e!;&f*sdK@;m_Y*UX5$j7kNhmZGofKYe)rgzU?jX9F zkntT8662B%$>e%pLn7d@j#gpss?Ew!l{^~Nui&wGp)NXy$iH3dHoCxEa(XLNp{mF3 zb;?x0o;;rDzF?s1UqsKDPl;b53mW@Wy<)Ro%lojopk}upJGpdIOs1K|?ll)Re)m0n zlh^tCI;w2mUX;AvKT+08!0h#6_21G32vUc(?~mM4X65j8Dnw!qgcU^nXhfH*^D(Zs6e?hYZwIGO<>3(|cx?*qibkxXgs^IJ7hu;-ZH zc#Q&SVL_?o7cqxrc2dL+x+B*Yk<0jIT1-p=5w4o=@2z}m(zkL{%7ow5bVSz4n*ahu zpUQAc)%up%r?pX#!7rUUJ07VdI>OAxd>kpBUiP{S*4Vmev5#;#gqE15C^V5gYOUE` zMFXcd<=kdzhPE$}I6+7IoEyCca%8ki_7kcd?=EOV2y6=@anzk?z7$h>dvZQ7vI2F5 ztOqqk;R)}#6Ptu*h2&~wEk8Z>kHyzgLw@f%iad&9%7L-yL~2U(#n)SWu$gQi+w|KJ zOtBxR5a~JV75}a_cw;4xYwoTg)2h>5@)TzT#&5W?YIYlv%A$N2tW)d$wP;n9>V0q* z+nhrv_aKjzFW4yuN za^OzjRDJIBM`I;jk8-+bV-%&~ylMcqXrwdehO1!97%jM<&}bn$!b4aLDV}cgB*D0X zg8_@`t`cWON!v2(@&YRLh>r6%kb^L=WV%Dxl<#hXv*mB^sr9sw=F>dTMzg^PE7m?6 zABURG&h@tj91JU8+yE@O$AJAmSw%No^wTj`1@?EInO1?n(npw+X&CSxSst|2nT^uA zoZ(A;`GaS_>?n;?U%anp97ggGLx4PF zGFEkytYiIrjQmNvuV_48$-vHJT$6}AmrpY0MEXzCv$JL0P|b!7csG2eU*uIrW`u5sa>02x2@ z(W~bwhb>l1G|^z-TvkCnJM*uFNUP5_F`=!nRZVSOuLur2u?uc>Rv?9GOPCI`91HS3SDE!DsAl!>&Twbp041)QsKyaPN2#$g)^P%}g`_ z>?bsSk|<3{@dq@L-{nzDkQAUJlYP>RlVa5_bXG9?9+uk9<;#80QyA#6=MzU@MY?L5wq6P4$Wt%V8UJYMY&naM zR0tCg)3Z^asM>QAO^Lkr>h7h|CvFFmCjX|b+h1{uzMA{1sL^E0>HEH~z9x5yeK!{g z)inhLi`XkKh-_j@Oar}rQK{FqmI0D@>JQani%gvSDyK*r`PLVt5DSU6&8J-ikX5 zX@kG?Bda&*;AU3W0gpZgvwAfGue$9|wP$0MNd(>HspO6B7dDB`xG|!oDsrCFDA`etE~axnEyq zjo*Mmwe>oDs4A=oL2z9P@m-JB>dAH0mAkBA7x|7f^LbV%0pP zCQoc1gwS)r;Eb9#e+Df5t;vQFL0D7?{f{eY6(js6L#X0BqY#$Kx9OakVSW^!ux}F5 zyOa8Dqng2%&Rg$CteI=P%;fkVJ+ie%Aw4c?O{2(}YGVwo{YefTjlD#da_8E4fQsVY zhiTs|!TQ<+2XAX&#oCGQu`yC)6v1kV+EZAm)EG(>grS&P4Og=?gS-?6s-RjtI~V zw+y94F?BIPD|1{YOVx5S=U?8ISRDpuZ;#gEAhCwGMLh(~7A!~q@7VY0WZPOJ`H}9G z$(!|Fa>vG&!nGj0w6^C#&FvYZI;>CcSK0P)0SI^+pgszrP(e-J3v?E0S6k+Br=Qp{ zI>K#1q2~5Iz)tj%m3YmnWY)^5+D~iIw=Z}U9gBrK^3Pi1Mm%paBrDK%0Ri4OCxl{u z$KeBXxl7vSZ(C4M_FV1jZzHtWniLIvf&F+rfBGNpkdRn|?MP9|$R(X@T~|XG+bVbfd&)R~!Hm zTu+V}-{Gm&~zrYi=rZ8}2hXK{3TuimC#%CRgSo)!#Gc+A9^v6=-X!4LLFIdx4ichK&CM5MhEm z#1AOUHl1n>$ebdOOLZ5)+hKMS1=+32F$XA{1r+&O?i9_}>JfBYPxepllzE0p>zkAYjedV!1Uum}3p$ObP-gtn434ueG51rBoKDFWdkQnV(X& zg{B6_I@}G0lY#UW8pTZ6o=u!)li8}!y_+*u-RbxhDH)JvRRb#WTiZ405OpX3DJ6V8LRfbNfsr0Bt~ zfbNpgj^uo2y+-@>C^g-Eq$Qlrh+R9^bMPR%TGuZ~nvc6ucRx9TCQ`$oA)LwGe?<1$ zEnOC-eJ^+1T7gH4AQv)Y-D!g8*@LDg>hI=chw zGi!vu3e{!%65PUSxqhVN14%ga)pP*+{A&&IA1oxsWjD*M?t+*M|DvY49&tbUS2bo% z#Uyr(sa1PJ!P%`|y-sY>Qf4uk>;Ogq+@qU;#PKl5G~>^GW+u013m6X@u6R{6^<;8A zj?L+&r)vn>s)sn?Vih#HNUwb2|NUTHAJ#Rqwl6J+Rfi~TuJS;(G`r#J2D%zBR z+b8MTi0de^xfOB9WRcv8nzr$zOGkkGz%09DG8?kMOLoKfm^L5fjT2oztW58OyIxe7 z*ZO`i{UD4|>d#gIT~|v=7Zd-yS@w*XHgfuR@R&JVSFl@^c1yMdLhmcPMg}!~y+SFR z*=(L1g^!IwO4L$y@AHHw&Td$;QY$N$JJsq@My(5Z*ZB*{``f_W6{MPmL8*jw0nfyk5i;qfDan*%KUT|^_4-7` z-7dW*#||>-eAk9WmQ@B=y;wn-_7kPm`p~%3esKZzR6Y&zv%v%}C2=v8W+V`MA6Nh=gp2i0MhgtBeBSTw1^6b)SV)@UFEFKQ)AQy zD<-hYmSQBn4qYtG%9inj#^OiDMZq-1S&PEbz7jZ9J7`iFHQCR6v)%B(WXHkQrfn#z z%-MRHqR-&$?K9Lj`XmprIjrc)Q|K?$Q0IKVGt1&G3O5WPD#q8DCi-x9f&hnI*+A~d zw0Eelypa^JcuvW*T044n_UC$*L(A&ync8uT6<+mo1ZC%YXHmb#x|}%UZaedLo)$N3zxI=Sx_P>CRAn>Dr2RrnMVTwn%W8f16-9auL!#G{O^*f4fuav@*Q~e7GXKx_(oy!#{n_ zbyl~fF7=+mJI$vaM)AxlMXujz&lPqZ0+gp>n~y$BbicTjtCmG=9tS@EOW8Cap@#-t z;jd}YB)dXi=lS@0bN)|;<^KzfaE8v57D?1o?v%1pPh2}ZD{jy%l9cm}v+VXCk49!Vr3zm*NX^`*o_PwdpkdMeIdi=FQfkiu5`yG`WA!g`s zq1i#u#5CVv#oGdf>=dt6PjcYfa5!8_5==6%Ln#|AT(F>dJ~aMBCL#2~d6W-LMQ)#5 zfXWg>NV6$qIG-E*|lwRR0*jk3ZUu ze*+0ibEH-%h0coG33Kr_a0jj)-yStD2e2JJjkZ#J>Vv{R6O>x$fh61He7>7uK|0@6 z4&!!sVRjrH>`F&a4tb`4LEjH6hW2X0gUbuLj&avSIpw~Gl~MCavEA|IW7bChN1ylk zkjV@g;o6Z!qE1Ji*VX*2$s9S;{rK5(fqj# zgYbJF!=4vqe?S=WYj$}_)HZkuuym^Qd?u-$C*KyTi_z&I%^|tHpu9y@`I(So@*?T& z1*^H#J+k*8u7+|;`U8QDI_29|$QS)E`%U0Jkdl1t@om^kU3(M-B7cDdg*g4k55mZM zX`i`n2PrGM?RuxG`Rc| zzT=NM4T$FqcUzl3f>F}Yx`H3V1jRvkwi%2C?&O>hvL5bufls9ZW(bY#!Byr<+BfEv zlrxtGzX@f|VpZ4VS7MWf$l(HO#7bz1aY1*cW)-3c9hT| z9J^INq$PrjpiQEU1Hl(Soavj}KKv!T{e$b{gM)yrwB3fqQzO08_%@GeD=-{lp3`R8 zAGmQE)ThZhePhFj+f?q~=4$oCkTvh^fj{$%S>z>p4jg}!{)apdiKd7$-28W(EG^Z8p2oQSRG{WN!>>lKT?^~;z zA6{CY#)l4N&$`#7Ho3;L@PmilyGuPDY7{@?B7-8uBp0w-zLL7ZOhjHeFs(yXXNB+Vifj0(iw4?)f zx0#^5)??jlZ#2!peb4RgROGq1t?yU_lx^YL9!_(p?|7t$GBK(YTKvN+n40Q)?n!s6uihTod*%Q^H>K26mrVEP zLd#YgX|D5uP9RiO`xiuDFLqxIel1!vjUH;-bc3g2I?#nh*KNf z+PnQV(pvK=!pd|Od@2cQkA1ay+d+eUeE`V+;C!;PSL9Zs`wx07eQ*bN14+|P;dT3e zh*17_FWXZ_{5Nz_1P5ozlF=BEmO?H60=>ye5bOGK4E-IyN}=&>rdgCWBhxm{Rn%9V zz&FDW**@~M@^VHw9r~K)Cd`X*r_l=HfARK~VRbG^xG3)Kt^ooBcZcBau0evkyM++k zCAho0E!+w2?(Xhz)}EO?XJ&Tx{dMo<$6C+F)2pkiy1J^rx2mgO-tZZXKSrZ0@py>t zZ>eSAX;NzeMmY6%hoQhPw)s=PJ1zw@Wy%KDwWp;*v_a0bL54BfuJK}b>e5mq(yPJ+ z!C~12Ub&BrqIN?bueX`tw-RflnvA3*WEUaPzU?11m977;%yIm$gZ#>>#>9m7y*5)< z?34Wxbd(a$%g9JJrKpt%1xmTi)0zIVJb}Lo5bVadX~U`+bIBfqD7)TL;_iUn?4yZL zs!2c)9;e!*;cdS**WuRt?*!dHvvt$pz$gvU;X>7d|1t!y7`Cb5s|79xvO^!+) zNGZZC01@7cyBF#wyx^|O-w zEj$0*QSbsO$z`M`u!8;Fh&jO_WIDOQqsw9cUV3p|plgZBBMa&mzcE9Xhr zJ5ZFz|Ltr6n}I_p*)FxbBCs0CrU4*~{Y}aCLI^W=75_==)YrfJm7B*41HYNeHd z$YD}8i5+phXZNJ`cZ~SgMs;R*KS#66;^j$+28NSU)=choP%XU=a=*B~6P363JS*7+ zSSuf!gK2m1#yjyh5X>e0Fl*OqA^+z_LLq z9eZd#U0n07_m79sI zGxg(ndt6t4*11i`a`c3W>aYW>XcRp@Yf6AKF`JzF#}(@J=`4QlIKKpTRhs*Z35%L_ zmFu@xV_y<~?;_&~Vr$No_T@cxbM0$SohaU#kC7leX(WqV^v5YuJt`s(UtZd zceL@S-m8-1A95eOke}R|Dt@##6Y^VjxA%IeP{moYt3)+CmMx9GP9aa{$pxuU%a=Rq z7U9-=%zXfw`4r(VguipbERrM{TSM&+;Btu3ew#|&spsNbcU7Gm*H1FA=i(T*?%nw4 z0#rVnD?2f%O?+PhD+d}eA7AYdg(B_vV%*6)p4n%#w%W;QF3Ks}g6~102W=T3>yufF zg?GtAKU}JA&GNq~w+1isr*R#O#hfp37FuU0A`U>z{$s1EsFDB>qnDfoXL=lZgm!e93{dV*Q{S|3NVEo-b)zA5j*a$!S zH-;+B6yk$c8tf*SyLDRA^AfDNo^RkrLYsZ2Db=hdKS7wkb0RUxamH_c`N9Vgi^f#9 z+D!BoVIQnS32`P@5>*(gQKCYvdvb5o=;(n#xnAJP7XIQ>(vMS~p@JaitMC>xi54vV zIB|OEE&Yq~ON@TxQbuwYf7+)%d~ae}!hfYw{&UOWf1TndLiP$DhWh5{<<(Z}ceOsw z`eW7euE}lda4Mh2T2`8IsoIERDo?g&_DrtY%Z?zIu0EYo7H?nyUb0w;T7#G5t}xD% z@hn{;iJtC*v1kE?&KrZO)TIJJ{cDJ~B3C+t7N&ytoU3$UWG6L0xV-K_8Rc&T4SXqq z28Bf~rd}x1tHp}*eGfG31tn0Ku!lp}tTh(f><&V~#y{?j0EZ3`ylBt-GD-HS#?14f zwRSVR9d!+BY+E4sSQ&qqL31ZgUZBt~0d2KKSGY^0YbNli=ds6`xYBp?wM2Mpa&I(s z^0;fjZgw{*$Gx_Hq0x37_4U?7?zMHl1BzTcvVTXQP!UJUp9YgQ%YGYbFq458NrBVQ zG@t?rcoG$=j3V(hoSxbwQ4t+;>xR+^PrtX$Z&MImi}8sWOx zK&3CV8337Pb~{50n0%dUt+tyq%#*7co5C?hr4YkwjU}$-=P8)-AlF|n&}|Ow>6ncN{lXYpCPJ{$s6I$pE!9C@)*%hYGl4Uk3`1y|9qN0%_?TvI zLxy=f2<6SjugtXls4+d)%TrC2DIphrx^dcEK7_~%|H({Ndla{e8aKSDVBnv3RfC|k z)MUG0z_o&U9#$_Oae%L@g4C<1-!aEc%w$~T`^F(0dB|M6@Zwi*YmVs z*?JpdUl>M~w6?2Cr5YymM?20Wp*#JYkWaqsldI>YmF->X0!TY^@gHLaI4U~!;8=_F z$2GxD*8unecf@|}uk8a^{q@5!T;MHwYq+P&^|Baqlrm}G8a;gde!?eZyJfdEyYQ%(dh6H-Gncn?FBf`MPoHD$to{ z?idr}4Jh)Kb^_$UJM8^}g;lF;f1@-s3Nw5PU&LXuhr8Mz46tl<5qfU0{zx_ihls=E zfN}hQ0or=yt)%pKF9)&*B} zCV1(S6p^IvdjViN|NbX2nI#po**u~OKnv~F?r7ket+!uVv%^*>eNvM>A~6$MW!tSl z+sjGZN3~ChMhoAQ^gYpMOH_8MEyTZ^-SoeQvai*eEKfRYEl#l<|MoT8za!P}8*M1s z6O}7~&-0G!xDW}$r~idJsKV}^0lpxUx=`& zG6_%Z6lhGYL`*l%laYSg&G7NbvqqVA$67?KVbIl&T#^KC6Pgw@dZF~W`H3Yu^0obB zqLzI%UZ-=%hxKRgv<->{UzyYhZBO1G-1Q~7eUq*UG_kn@(b*k*ki+b;Ww@)ng9$9;iII2>LtA{ z4FxtYwU+sGULSX;MwEaX1OMw4zRtoW7#uM*3O=^9q7f$lTN|-nsU9IPYpAm+#CKzO zq}5>YYIiV+ipph5$#QmB^`madhXVObfAJRmfKLc$zGjfiGMaeE_bqW)dd{=FM8Loq zVe7gucHiir6gDSA(NL(_W{wF47k^&;9FN(21KR>G_$YRN8W6T}8?-Ib%*88FEf2uG z#v-dQQ#8)PRG7@Ee%Nh{k@K5&`(V8LQ6CQZrUk!R6mIee4#RCK7Z`C|IX1!H4Nr`0 z6wvya*EsZADHQ1Oa8X-ncRpRY*;lA9*f51@FS<;5FjEbHFC#)n4}`^lwp6E%gnoA> zhT9t=^+sL4_08=5f~>Q8>(GM!)wLq^-TQRC=_WRe`eVMx*-G=JPY3APLhpHHsG?DS z_Nb`(=Gd}rwy27YO0g1d@d1>ZT+D7hr15jt4D`mbrpRDV2@^|Tp7KQ{{gLGf{l$l zs7au3RB%L2-C#K0{9vM;F0i{&C>;w?Ax8w3D*pR;SC99TsTVWoai)Emb^LE8+fE4r ztrxc#l^$|VBiJr_-G%4A#d_Hlq?%1JrgVpTZFVd@oT=|YLzVh_+x_BvxGCoO-Rj#4 zkK6Y|jp>g{b(V|qiHe6zhfxBG)k=`RlKGH1bk-Bj9E4s9VrSuU%wovG)iHY|hCjn+ zSYyb#FeWMuLzFT)i+62sOnIYLH{%wThKId=nC}h8Wy#jeeZt}U8h~!^usiH8+3_yP zF_2jmA~b07dOfm(+q5+WZ~p2CGNNAAt*gsJYMa4J50wa3oJ6gQCR#Eh_XBemDzi7t zG_Lo|ELHVG=oy8-*p`mi)$y+fLs>jFW5(C|vCpT#;(>|^mIt2_m+EXJ8;9uV`4>hi z+xjn0ggrvFXw}NU^o^u@7NjJUX6n3PoLkI~c_X}K;6XZk&BfnG>YaA5K6?o=Tdd2j zwOeZUE(`-NczL8{ccPUqi6lqosc7GqI}dnJFVR2}KyV|(Zmk^Xto!|Qy_swyq+rg%2&>zP>w{=XCZA*nN47&`qcDXIv) z=M#tPniq+*9QH?D&=y>?P!E}llk+m;kKG^H6Lf|#rX>wk5(1i;;wn6@vFXHu8_J`@ z&Wz+8DO$N4_gkA(s;jI0IlCkCvrQ5{HLE1OQ8zVW5Uab249tF)De!v!wbM)5oHn$o zz*N@$^u)9O`QhT7Z-i54Ha(if{7HxEWKczd7D>tpc52i0mb_XS_4F;jvOVNuf<&j1 zpmX{6WGZ=^{;uH=U_CP6_Pn63WcYLAFG;hNCe&7Ml)f-5!F2BWkL*ku{J297#~v+G z!))iBpipC`@AWk~u>n2D8okN}XyS(oaCsFQcbgxO%;OwVZ!{k(qMq-G^AdFUc;9Y( zFLxXnwhPYGb7iu5<-R%I9;amw7VSh5avbrAM~2IZ#52z3JA;4HsvB%3rI}MTiDV<( z_8HoBB7!XQaJJyVa=?smdC}c{_e)|q9(+Ouu@Ghj6Gxx09{H~mFn@rq`*@&*s(Erk zr9W{@ar0*nZ{)kXd*nL;mRnp!y1*XO>oKw9dds*RSC1SV0MoJx1KoXxK`v4i+LFQI_rK|EK6y=Hs}3iK_&^0l6_Sv}kX6-i%X~ti|3C?O_`cYR z)Y%l8%hyms$06B3p-t~_4loMuGO&UfO~%ra@cV`aCJ?OguS)w_3cwoLHuLak{(+{5wy#xgSkU7sXvuXWaTg`2odxRql9t z>O&P*TZh9#Uf0jsz3Yai0+r6o1U=t#^rzFz%xrz$7Z6>(H#F|+aF&IQ9v@>XgOJe3 zJoa+sgYu}3c)CzCWch5_R1W2(?mjD!tAKRNb=BBlH<^G8oh^pxd zJWjpwiWivy6;k{grf0EBVY2&Aj>7n=`J&y-Hk?JoN(6;z|O;&iGKl_9bY|l@Gr`uBo zv=s!h+D{^&b9K*&bPvn#`SW&5=dZD*Bd4(Yl~dzzt1PZp8>{ibzWb3Hz~KDX*Edl? z-qfueGos8fj_uNBG={?@1BWTHQ6+zq#2C~Y}pwER<8;B?@|EITNGg&1Tu+W zcl?~=M~HFK9B;!xA-;wc7ocYHE3T6Z0~!bNOv~bHW$5zb7`{s6-Cpq%QDO0 z2G&4CHt9tAeA~pbEGnOOaV^$Ua;ET3P;-=lLoKF#$EV}6egMui&e1p(Gkr>R zqR;z)z%&}aiCq_m^x<9Riu|_iqX6s!QjhxHavqQgIt zkW2M?Y&Ickc@Aid@wJ56Fdd2g%e>Bff~bOI3=q3N|8@C8 zuaK7=0~3n~eLSy&--jb&6Gw)cn$8$s;}d>i`#az`=)J&`ID4o6M6+jkeeLx?8EJ|y zxp5z}ibD>g-ZDul9V(NG3L}T;-J|9*K4xhkvAaI608#A5@upRPPZ(R* zw>2%%b-jFkden7=)_ZTCI5&f@b-FOFV45N0fdz0mgkg~}kxcY3glw*qgjBPN;t?dj zw$~@c1%ru9_Ytd~1ji@qJYjp_^5gLoLxxWV+}qVB&oETB$cTb{J+B1%=7Y~n3eIOU zF<*bVM-X{$$vZ9HHYy^m=Sqts=0^GW2xJy4XvkSvrLV->yYSBA3`Cw_&Swb`;Accu z-zy6s`Ml$}wb1v}VQtD;`kwI_4?1J>W9&Sld+FHc2Hoo)|IMcKT9l2+hu8IztZ6tO@lf!Rh` zO_KdI51I)wtv@CP*T@&g`iKcU8`~mazw#7;!+*1c1EdUG&sg&+9E} zr!UcHu7%Fr5vPV4nDYM5%I<6o0@?b!yMr0ONZ6L}Hj^l#7E0BhRL%boW%P#O+lgvS*9zcU> z4+gQtP8+9`jH^M-MXuo@r|gwnOi4_v!0ouVDp(1feJe};Mc5YxB-5Ey`owU-1|vC*7nBx@6v?{~yCz7fczCp()L#>zcyk{41+m@; z`P1n8B@FzVRH8%JJu+9ShwjPj7$yYJcDCL~6E%?TLrw!c1iIpW{-kaJdFhY9AM&0# zM_$_Y^gqW1d#+`SNrGI}ls|xY%tkv{aKRl}7L;cdnp=`x{>VlVf_LR274I+WEcvyw zgx2;=y+|xU8(UmWqbS0zsYQFA;5_Xu$azITkRvM1F!)P!-x~$3D^fGxuce+~dS?TemC_E!Zc9Ne!UNhBr-C zzIWP_pme|Z5Ga*}{KaVFfX$-%hq_57OyFmz-X*Jmq0z=i`B{^GA|~H10)^SY2m@QQ zjRgFv+IbFK*=$5TOLBhHH#XJ{-O2J;&*1sGyDl~ZGAJwhKO)EyBlj}}hv?{M>218X zQphERFXpWZ+aNhhknAK9nuq5yX#S#)yYu;)?1zuF1W?HlT_0Hq$Ynk=N_E*Kj0mAz zUjdW_X_#kLy!eR{sY(utU_v85@dxFSSw{@~ML*<-A#xsf*})vPRhp(?#FScdS!ZLAYJeJ9vs*K=zu0m#DB{e@ zBOk6Y@Z95R5mUAHmo>8?g3@VuQPhc57F*dXEv0&oaPd%CpU#{4a73EV+cJ_nKltjf z%Iyp2IGIPk#gsf-czJo_rh9&*(du{nX;^9P^h;}wUx(YwM$>&&XPH{|vA%qcR`+qG z?UP<3z%$}*X$;_EZbN)lPb*%jNGv7ZxRzkgt*_n;3g3^qJK$O}5Y$L+*tXT7F^-~IhT5*rs52W8p0|=lz@#I3>HOiHcBB0Jn`a>NN>HuC zbrGni;p1@_MdqMtQD!Q7jH&fsnKUL*K+W|7GLs@)SkmHR(#*VS|9oh}wNk&_US`<{ z$gC{m7O*uL@mc)19YTWvV6Iuc+pG{CqK)Fv@&4E%4L_SS_2Ttbb2Z!0CWWYBk;d(I zz$lx+9tZ^G#1|Jeff1iD&n!H+38?qz_=4uC+X6SM41WaPw}#DS zA^wKs;ty|EwTu^*_~n-)5W4PC$I4}mSAGI~Uw0OZWw8se%pC5ou;G`HJ zS6OKRTnO20W_~=~oKe5h>o=z$5%G!uH@L-)19wwNk)UfvrSoNRr(Yu$JxeT;1h*4Uv)g(M}poP18-VqV_2*!gTuWaz!Qf!rdeHQ?JYmyxwwoT*RzT zc;By$u7_|Q4X;PE2Qn1?Od8F(+#U!z1u4|u!6wN4aX?dh{QY!<=5M{o7K};=sC4Uc zlRb;O`)Wm$fKS<4550LWZ_Tm z^$IR_uS9hkV8fm!6nOE+DPzyG&hbfFmD>L9l8a?^^0+_kYuf(g^h&2b{SY=VwVv@# zESr9Tq&V{CbRK~{NshcK9p#?ltF`9lu+ITGX?(tSwqk1yX zxZ1r-KT{;`=yCs3fAYX_9E*G^)`a$;(f5rOa6Npj6E*YG=WRjOY5ufPLFxJ{tLK?l z%S{f?!5&Y4HB(8np4T02PBIazv55H7x&Avze+4wLcL0AfZ>pFcW5!x0W5`+Sv!Yg$ z8T0M=a%#rgbM4KJ?|KfQwCRr<%GK}F`b2GkHpaXtxsnlPO6J7*D4j$80}B$Nr&-xb zgm>SUs~xFE-wc^w?SE2p{ZJm@Nzii|Ah)Lr>sHZ@p3%vgUTi zVA!VBrKhl;=?Xon-T0H}{dD}$x3XPwRhzAFz~_y{+bt0=Ba8OP4CehvGNYo^Xbq+P^)8FRDF_IijUH`+V>GHDGGtA~=szs*7KW6l5E- z-NJ;c#Kick(ttmB5f?tem%Pv2iKAob+*5OetsgVDO%vF4+;xS{s>v#mqm)!Lvk`4n zDOPv>8=v_1lWLHlvv)wb67naUv;#9NHfb}mH3kp{GP2JIEKF^PmAV!dDC3pb^jpWX zPRmW1(*S|ybUeGxYmvL*6nN#abmcr-sgB6Wvve!*co=;F^lVvg|c|hi(uH*M8(Ahv1GApo^Fq;W0=$Jn7?Ym zLNP~<^?y=*q&miR8#$Uk`n`qmKl1yhRKeB!d#T8VhsQRj*LcTi=QpBLQ^lPZ-OzDS zac?4Vxy`b0D(&J>q)S|*FxI{|g)&DOhwdX-FUy~fosKgV#P0C3TP!GC<>h@vyZ$jA zmD~G3`8jN(NvZD;=Jue!pIR=)YC>XX8rgjO3zLlhoZq%mbw|Vv=y>X<$OO?De|DQS zscoC42=E|c@?LH3Di3t;b`Sd9mt)BQdx&EAfzg0VxMG%LnVA4)=BQ9tF$Ruz^i=6;{CHCFd9J#%P@123dvvpvGi zc2j^!dt>|a+z*6|?LQm0P$Uwm^=AOZbY6zobq(F+F z7_9^T(+2bUA#f`IDvvBOU1gA|bVD__@Rz$oTO7({_i}rZ7+(wUMuUnQLmkp&-nQlm zS3@se&vQ2-y~j2-LwI{n7)(UJBKcSyj0zV7a z0ar|~XX;TCFOcgK8~(2&t3*`YC%~aP#p;KJs*}dJEhaB&+3yh!l!`WmbF~ zfG44tj4HR@W6Q-;pLufM9h(z2Yl>voG8r!G93(xMuc1$C+CvB|ysw0#mmS=X*vQXQ z;Jimx1CF7$y$u*0B%BT<%eK5c@^zXG`Z zCfsNNqca~X-x=M--Yxt!S0IaTe zbw6;sB(@kt(Yb%Lb(PJnu@|s`nw2fxr;$vcHv<_52igVL%NfSfo3V#G>h8Yu#3jML zelnIIFUTg0eO`@Y_Jt@3SZyT}@yP<{X}q=7wKP+O=P(dMB1!qlz`W$ zChk!@84zuhvrft`+n)_Xqd&YDsW;nH+<*FkO`}@DEM=-E^o;tbRq39UesmCfi`T4u zes}J2?1a0ct{2nw`5RSd(NpW|2A;KuDdvGwq;&MFdx$4Asehgq#jxD_668^Wxa5ZFaj^SbqeYh zOqpmTPFH+OUr@DThe~k6V~C~1Cq7kse-D8~A>Agu%2j$&eibf~if<(pH^>LOQz}R$ zH?~rX!@nkfE;q^Sm6T)fkxm_U^e%umsft!|%c%QkG!GLbc9q(_L+PmbI^O#<8L71# z?F?V&gOeqca=D2>kKMLHr=$jWL*P-*EENv!26zd0^HvZzRdlF7_08}HdT05|V@cQ$ zgJKzXM@c%rSlz6p*@!S{IRm*z1B%Mr zt}su5GXXO6MMdY^H)P8AEcXv}G%-?M^G#wm@O8mn)TLQybYZ)JpI(oGu5$VGp^t}) zT~qv(W2Y4S2;z5bXUbtzr1bsARy;|qJ9CFNQ8lwz(9ayRN@mu-yI`NB;?^T$Y7<`5 zFc}9!6QdyT(buitb7Va8M+Cyr@+s74$gesdbz zL!Q8;Itx+dg3&x#{QJo!_+X{&{s5Rh$<3?1j5C-7Wfu@R2W+jy+8*PT8+q|ygRoWpeIcp`h_q6 z0NKcFvwMfzR*zChPH)7;<8oq*TxI<92!21@(Eo(YCsqllN^fi+#9(6Egx`+1pYig5 z!QLj20#w4Go&}X}8+08u%+tYY`i^r{bNPXNT zyy8(=6?*uai0sH0;L@7TIgMy=689Ni38$u@tI`zh%OvJOD!C{VLJp*G%I2^2a-w#` zNd0~D8`mSM-c6OAt|HBCD_x{nSz*?&i=VXehB!kzc$5&lzO~ICz)%nV;P;k161=7l z-Gvy&sVu@XHkPA=2%C_>(SUOBz50T+G0RTTPc5rT1a}}}lKahP^(mG&LuP^%vOmiM z(s|FLSxr;RpTL`B8#!FJR4Nn$w6BH70c;&vLFzD4jo)1fVIn}4SoD|^9PM?FMVlQ!SY1J z?Sv(9w8*C_9fl!Kx+tM66=7Yc6P`=38*k3oKQm)17IVphFnXrbliwpcYN?imr`4Z}rOS zV!AM+gzaDlY5LhFco}Opn!wW~upU0nk^5B-!rdTdY^;Y2f9fx7>Hv8=U~m(dY;q$Q z);?N;XmMap+>D?pa;>sd_~d^Bl|n2di6$}@tDsKm?! z@wBJaIeg&L^CF|h((53Sb%vR95AP<7?;%^g^!W6~uW;9tr*{kQ(tn$im+P4|c8qV$ z2fWTFL&o~Jn8Gk#)fhxMJLlNYsx4rm^yd10jK435C5=Pz9XkmKSRth zu{@Wl=V{^wa)jD?6D#!G9c$Hj8TlhOO)L~Lk%SRLN5QUI57~LEWcY-4cwS)Lw1@QxU?e0N)BVkUIW7<+L(N$|)pCcM z3qY7T12p~FmP{}gJsz2BeCB-v43oZk9tl(I*7?q<4T^(QcXCTcFi`bS(UuhC{@s^@0&{BVi$g+TB*l}=W#|c!yN?h0)yq& z^XfyKsrJ?m-SCNSXW8R@dah-dm@*kLKOW;lTk-C__;T|mj(!jrC6FH^trp635`Y?b z_&hE^QQa{i$2VkWUCavRKtti#^5wa39RyOEr(Jzvj_d7e#CYUDxZ^F%ZK2*QQBb)f zMF<#^rI~i4IDI5~GD(`tGsGAa(rL=&a<}5#r7NSd>bUYzlDZ=bRg29v%-@dLZm_SU zoipldrlD!g@xnY`+~(DEkQa$M%275Mup@if>?epkyTc5n!WgvEN6_c?y|hySH^s*vt~EXZR5*#u<4_% zqi20SKC)$hykeP<%{rQJHa=3~3Vi55Xw*^UuPa8Vyi-(5tvRamwjTFK1>T00ude+# zuCNfClR)+8wiHiQ+cJ}xSG}qB*(qpRaw@m`RXwqq`*@_~l7%fJtklv_eyC&?Y3pJG z$u>DKc&aZNq%yI%DNaIF>F2eHa6`1+PGFF0 z<|D+v-oqJcJ0)@!{L4B!^@@)&G%R9k!Q|`=Xy!=>=+DY5^vAv zit?+4rKO&Pa^y(^0GG#}N!^T4z1Es;U16-F=tyk+gwtWg6sqP2+u8iqmtj}#-7^i# zo+cU|y(Ilgw)^efsZ~pX%*3uhr?z$T%G*nCH4%XX9bCOSuEm!Uby3Gz@$2nLCKdgP zHicXI(edL%`v{CP&y6dOw1Im~J%Q{zHP!WOV_G^L;?0Al3Yx3oyX=>g;3-gN2@iph zty@mocaGdsn%Lmuj+&d$8=!va2>9q-kW$;|9rg;)F1?4`sl@o`5Zy1GY9FTL0x@{^ zkrt$RD5nnsWAq)Kr}jy&#V-|B`H$KyPJlTb_g9mA@_BCG3g^LBBk)n#r3T&9s-A!1&}2LJ}*j4(_i4!T-W)4t-8lNR*Vn<44|!A(yFS?X@QG)}Em61aos(2suNO z9X0g{ISPb#(J+UcnkPyA+s!Jpb^bjnkzERgFWs}_%s|abiOkb#snk!(k>BHPMG-J6 zr|7ML2JTScCbw27o5Z)mL&Y$o_n#90tfw=bJB zooxZ1hX)Sh+Uh5+hiL%*$jgZKG$s)EfC)+|xx6x{Kt{~J9hVHmFF#dEUNud06u&QU z+8~Rh(uPKx3VsU9aGO7as@`BA-mUX&3zKY(KFkIG9v88*KxG717F!u zt7=g?Wb4Wqe#fl;G%m1Z`k3o{zl#)V72UT&44>nb|IlOqX>d?&mBjX_Y(`j7+SRF# zKrR#lfr3;+YHWjg(>2rQ7mfDu`)`(akLzXal!zWV_%>AVMozo3Px zwd5-TJII0}2TByr>srS7cZ2PB|kx9Yn;4@N#H-F$P`pC zmQJ(e2t8A1L*f(uB{~auu)>}d92Vpyxq z@KRgN8?#8^3+k+75*)2{_`ld>L-V(D)OSt|GbTa~v}1<{X=siT67Dn zWIvPCMNJnIgL;(#G0BO|aB`JK8{N;3IQZp9efl5X-$lj5hTCv(QBiBO-*s?fiwO)(_CuiR`++LiSn z{xw+1g%%Gj3wqU*5x_dazrwCt;*<1Aj(TUqvVk{&Of{P#<%l8T59X-fstBVkkw1?3 zq|Cvy_?mTe_A-F;W}CSsKX_b9S*)@8w>X*M$AkJv|EUdvsw7$0(-nNrho`X92Mg6k z@u})0P-V$Q5*CZR{$uz|$x2$R$YZJp*w+MakNXUCw8#$m&5pTurIwI%fyC4*sh{Ug zQ%y>#DQQAIT+cDm!V-wDIBZsh7&-((7z=Y({I35nb|WK&zsd-Xmg@<4{pd)fhrKswu-XIq9_7+#{;0`(vw|4y#^kPP8l9LxKB7{1sCuwY=D95vA|P}qEpo7|Pl>WZX{x2HdNF>bGgjLWDaS~bAB#Gut4 ziPt}y%g@K1OT)=P<7-ih<+OjBq=13H9!W5ogWQoU>fKV8>%+&RjD%m!2sO)PR&L0( zr1$M7hZB8i_47hDMY++blR`yUnzl|k|MxmOogh0ZVjWN4q==`a+Cuk~ts zDs$A=>5cYP^XZ246T(C)W~%Wtc|MJ=@ENVM$=?VZTgHwbdF5+g!_hQ-n8#-&%ml3O zKL0G$F8nak@ENCY&SpX88HuQX1?sM#Zglz3Os(NpbMpSR`>&yskhw}z?9g4h9~MqL zgW8x$Wjf-X$OHv$KDcwW($JSGagirIe;PPW*gyQ&2R{okL{O3qKxtWqh5=}VFXTy3 zK6NbiN;T7D{0O|B=A}cQsj}(xuOM2J5m4S-y*C5q2)re6-nyzEne_(EpY}GHW-}tb z;JZ!o#F?vmn|@$$Y7IT$f=`?nP~KNAWFLxO$U~L=S^EQvUSE1%&xN01Zu<~~Az9$X z0ckcWA`#Ngl--YT*BZ%l!7eDsm7U?N@q9&E7fg(4cHZIN`d)&{+3!dgix*_*ruPkc zs+uf{-+Juxlh+={OsO({Xk=s_2bD~rKfq;T7duVZ`9XAiE8*DuxxyO*9leji4GosT z=BpPVO$=E;B3B#q4ml?*Z(+n4aJ_SGF!w>&E2K({x=V?`m7xt$vL?z0b0MA8KUV zX;ebQaB_W&HSutsCS3j?dz*cO;9=UWlEUSS>wLNp2@JSRVyr=N*2!Ztd2|WRHSW83 zL|_9PvFP(h`ZMU33CI>fT;{U$oc5x9Fou?ivb4kU3T~p_0aSYW`{`^VD09%EcrcB{ zR{wPP3ah9F;3xrErq%bTZIO31!53|!w8hjNUgn9(onpBF*1-M75wT1m^6xhZlTL?K zDf}DO9v5h5OH2uPGf@e2zWYeTBt+6~kJr25&8*IAN=M7N=$_(z)zt_1M=KQ+x|ivS z80sBFh@0i141i~@@pS2fmXQG^4E&0m95OQ$Px2^ZE_?s-u;Oysb%EeeJxwNvvli(0}PpXur`%|cP`n?*5nGym=BJv`i*{C z|JPj%L;&4IBtEyL8BBZxNLz4;V|VxUYRL4?XxTj!dnR{-T)}4G(~l)+Btoppk8KhC zSb`rS{Qa$c84Whet;fesd)Q#Ts-56sjyIjs`IJFwWnd z&4uhS=t_Iu6UVxOffgsYLxJLM!9BRcN%vlB|K}sjyf7~wacI<| z73#%mjINgKiO(&4hu=W79XTB(dR(#Pp$IcJ7~3KD-){JgpEF4PX#3yox&42=0=4lk zc@1jYOVnVZkar=y2?VQ=pd7A}bUU8u-uK5gGH+yQvn(ojyBvyJuw|{!w}ehf^}~bW zBHXmHps$5-5XP3oNMqbgvhhK0FPR?7(ZJ`CUc4`(Gg0`XQGlWb?F_wU#}Tv9i(CA+ zhWJj|jL)|w|F*X3l+amDn;vsr(tb#wPKzhD+a_HmLz%n>8vT-x5NIA(sVQFO`HN>w z2FoIbTT{oi;&0w;q0$|>n7pcJN{bN;WMivjAHg(J$o%sOTj@MrTa;jf%LF|l z7`Y7}_Y#F}@6$=uq~-5&ssxW{m(3lCe%N0Rx+=f^?<7E4&Hp~KchJGRri}wIx8-aQ zFKue{`TXwKc?iIGb+KyaeetcgUeLRK9LmOR3B~p~d|!q_XOcPwru(N!m57s(7-8&e z#}mdV0kt<)V%RCZHjUX9@i@v$^@-5!ps6mEqTMB4U)1>)n{z!_Ln0k<3qw;0uOE#5 z%lzNxm#YtZG(48wGwKgx%d zo>xn#!5FfVpnvj7=p(5#l!-d_PTS@;B@R$mZ}8S86-w&~p2`{J9t=N?$vU5%A#~$< zg#`X2KlcuCvpx7cTNor#4C%)PK3;eZ9-f5Xj9+qB>!JJkHKOo@Zk;F(Vi8Jkb)|`i z@an=x!bR;|1V{L^n;mChlf7ea{R%Uv?_I4tk72z%amAqb;oqr45jPm5#Z1pMvJ6qd zh#|p>R}0F|7K}pUrE5RiV&1_f1ame7dFeKJ{>rU|UCXB9+7hc@XABDmI>%c&Rlm36 z`4j7;R2Tq66Gv75qSs-oeQ$ba40OWGsW(t4K;ZEhk-(n$Ksd zxIT7-Q{%$W+9;j5u$vy9&k6(xrrHxANVM5w0>0W6K47yZ815%eH%jfSrfh?`29d)` zy&mw_)xCS4EXlE5Z;6iSNeIhZEMvM;>wjk?F>dKXBGKV&1WoR@vn=0;?h&zf^aQ8E zSzE3AZ~_NoD~NmSh6)8=zKx-*WQ4Kee4jXwFL3>Ht6^W*>)DH@=Ov$uP5{ItMv2vD zY1(+PZzF-}yc26<(FSx{R}cWZy?Xd14m&0-rzaLfO_cx<4K7b)M~h`}q6F6|`4^gZ zVvkrl{V0@m(~inrov_XYt;TS~K+ivO_=zcSymB2}Ksdm#HEwT6*8P48>!W6K7)**hLw4A-|)<3ec9k16czqv$3 zCjT+eFK)XY3k8L<+R*z72Yq?n0B=*z>m<3kwGvqRjvleiW@SRSA-3b!B_ADL6AOs) z9X&fG>BMjeY216f0q?5Vl1B9P!vwFc+&)Bkh_itnKE)HYojEFeDe zk^@(jp>m?$dhzI#Sd~8?H>C1A+LLbd1+yT1 zB#*tkEG^6B|TVoN*z)(?RN$@R~zp{ z*Nkqj%;bAEjC>O(h^8Z($!}RyY8<%PRR|dh74dg;&sBh`6-`Cf%k%$h+c&*2yWLAZ zlQt~0es)VgWM?*T>kskW?U>ww-Kb(Ctl2THJ>|yGgk=+-GRPK`w$*Dkv?+4U#JJ)` zwZ>W6ZsYXRHQ;ru4uez9S1SKqjHc%~mB$;8F?gW*ZS;HVG&hFyg74TraOw|U=zCJY z1U$|tXDq2w9y-1 z6G-2kFG8``bMDYkId>{|P>Q&LrCj$<4@glL_bY>j$W|3}9s=g*MQk>j3 zZT{cu1~O`TUr{wJ=fQ4i(5OPg7#q>huVEkH$1mFo!FIK2{)0|c&?4q?!D#AWH0kb} zo+uVt%-I=)KTOF+$u6@?kJT!+c;4Ma{ru;zUR7M~3~ix+fc{UB@m zf`DOWd9`m)-io3Hr4~#w_*kOpd!$i9*U2cd7Jluy^E1;&eZjeQ;4RaTtHh=^7DwpJ z1(nsmU&R#rb%Ng#x01zm(CObch5(uknttGGc=ue@f>ZIyiT=@2&G+0v5RpUE>8b=V zuT$o`WKMro`31#F|7@MqLc^Sm(W?(aPXv*_WS344$ z&X*+ueBH6|58vC(91tK>SF1JGrd^>RGgRtOl{Pub9^W@)^bvl;CB&kPs6RNcwoOf8 z5in8NV;jD_LNPyS_3>F%GMIdd^?;@0T&>mH_rwMZ2yY`o0Ig)me!ew;)Ha)dozI%w zvOi_Tid-Y^tB7QU7F9nAnqiFT!A;QjDs3nntN%U|=SS+V{8BiRtZjQ;a0UE8!4VFn=F5c{IJ9^m$h7fA#?2PelCbpj)N+R6i+l`FaE(itpfpl<|ns}``p0(g$-l;!EtF-WuQG*C6wL8 zCHM7I3BUcSz#tUkv6}Co%A;+ME0O3e%a-iq?~+MNmO>s@o+<9kgtC^$8`#8g`|E5D z4-w)f-Dne=%W5fiEHTc!ETlc3e468xjpudXxa0CNE4~TeRs&v0V zmUK}&qMownAZ*5}Y{EbiG98uqR$HwJcnp9u(o^MSqZRsP8toX3bkXgr<+zc!*#se-ZSPE_iheaqg>hZTuUQ|f>+etjZNE4fjl7Fn*-M6_+Ga}) zkPQSZOT3*N)|+DK0vf-rKe)rMJ+8$L$drGsZh5S~eqma-gz!lY{W2k@V!C90cH_CtVSmvd-DYdWj&`qvVEx*~o_BaRd3d#6@V?sY{K6OO5PGyT9)KW#+*CWn@aI z?=Z5)KIB`P$at)qMCQaXE%MaO{E?#FV(FyUiX-76b2E zzwloBevLd8=!~t6QT*Q9eTPB!f93t}mPZKo$L!beW;?KANap)EIW!Px@oQuJ1c7%N zQ9UQJA(_+(WB92%SUqM_>PtHh>tUx}EiOBQw*_U-pKw-hg(IGliPM$o$v}6sIRJj2 zL&sJ{z4dXzT3U}DY!|O7W~1>ozUqo5>w%xWn7DzY@fi6IcU+b9RYrAD#>jXDzLQ-T zx_6Xx$od1^P)p+CrfB6RMqT$Y^5>8CW|HDh!^4Qar+p)^W~9L1TqY*-Eh-X>RFPg9 z)VHX1m|8~GKLcD>9EmvV%I)J}>&cu_g`VP|8otH*FwZ;U`oa>A+ndlQEe#=2Vc!2r zX8-u=2@d$2Z=@^(&It3OcqQXP>I!^VB|&|xrcxr;M@RNL>W(Y{8dl!VDBWeo@^>&d zlP$JLZyB3dHLk7I>4uE)J2&WG0J z7LapcbeJ7^40EH4FIP5C?KK2gD11sCg<0#+6bTZQ^BQ`WeOvUQA@9=WtZArm?0i&N zWW2HClEL6<%9TMRlU~1LR3kv$u%f9#El}SM;;u2Ol`OCu{yT>5l=%6qaYckgm?ZJ& z=m;la?-JHsSrfP3(6)R1{GPt({Q-erc^~uGuIu}HyZ`hCwtUd{1`P!*M1eR8FGr9% zLs$nEiyIgYmWZ_3jc{;(Dcx87n845Nbz#dxcUqipuyoJ|UutL|7_~o*;-rwq8g{zU zP$+WZG8<F;O|z5@|L} z7?AYmj&eN(ak5f!-4St;={azxo_BGWGQgVD&&|Y+I!?cylk<}ghxtH#usyn8P|YTR zo_AG(Vk|o<2U< z3LQNHmra09z-u35Kag*=;&q<6Xv|?8P1V$`cEBR42+I)!I>*^Cp1g|b+OTg}9x;rD zv+sx0I|lwCIhgW~{sNuIRSp_) zYHV{&$cRjaZtn>_fyUsE2t?^rnN-edWsK{~T0RdK4Z&ZU{W{R;nYGES5lPeWc>$5SP2iQM>e6sik{25~jm8pTG;P z7Kb0Z0YNzL=b9yXp^85FD32CoNiRBg8PH}a4ZhQ*IK0#3oYIH=itr%`VaM9*lgKPw z%5;)l$~j49BY7!;1w3NWJ+uL&K?t(aC#=SZn>ph^v zj;4ofgSo4cPQ=X8i&|rlY5OL>0~Hf8QzQ9VU<_$Y$0M{$`{i@n;_BNyU9%TU|1-&R z6GJ`o{4F}csUd%llDZ(QTB7MT3Q*`LUzxi9_s5378BZSA#>~xQNIz2sd#kP6=?g=g zJ8d&HigrEMo9?~~XLWJg;mBn##xA!9Hxa{4e7L#go;|6DZWZt=rMCSID8Kt9rbO(%18y;&+n8!>(kwaD;&3R-ybY=y2QdW#NpSwOwlA(|8YJt4P5qO z^E?zCf0aa-QC@Q;#{QWY5N|{Udmhk;28^HyD%E!Xw8#HPVhCi!nT3U{(|K7~KOX}B zT`x&l?k5&%@F;cRWYoQ1&m9l1Xd(v3;v@!^hfljB6>%L^$GO3-)IvVq*4t_#Wc_>D zJCz8?#Ie)JXM^zmbvpjSQx3<|H@a@%O(NMKt`5};E1#QzTv|W_#<=`^#2K%?(U$qW z#pBrWM0yn$MDaSBo(|y^WzK0yc{8na7JsM;!T6BW8&CjT1{W;9N}Au7YMJY&Z@Kua z*#&j!q7UFCXePV3=~W~AS~?C~=@u(}{T0@e((q|5T}xy0Qc|a!4J`EHc~-4yjpxEcmh*u0$4ghtmX0HNa~lBX~zz z{QJv#@i3XL@Iyl{8>#BUZ1?!}NSaR=4tl*vuclQ0w-BgffArrX>Dvn2u}(CfmM+Yp z*Ajn9BLf>AZ%?Rx-oRiyR{&u8u<1EDT+p2Wp@-j2THiCf@1}|qlHVN9edk;M5S5Cz zg;cg~{!RK9pW;HGZSM+h5g^lERtr9Du5(l`yFiy)3L!vdlVoEilq3kvNA3zX8jF6z z={4d1z`h?u!EN^4;so&a#H&sF6c(-rk%N#Ow@}zac^mEToMH`dahr{{+jWm_pF+z< zku_VQp8=s^bDqIJ4mr7#N-OamPql3pebsaGF-)@K0HBh(cQhhzXi2$qLPs$?FBV~SR=9d(dVY^z6Y9t z%J_@zNI4!zviH!ftB8|2vi?&Q*3kTD2{&<59VLSzNYR9u0$6$d{uuKX98zSBgJ8Ol zrPJVEO&cXxrr%%ITN%#5unX3#lCZA}={fH1>ANOGNQ^v-+Ir7sVi3Wn ze^xcHV;K$9;81B|=5ZoY%3E$MvggSkH>^wJIbW3DINkV2&|W3LcG4R^cTkE|!87K{ zLht|uy&e>$k~y$qm{Vs(^V)PYACF0W6z#u2!Mpn8_Ts=0pYWGu@|Pn8A(3PufI(PA zVrFK=G}qAcMzs##9~WbCA6WRJ{oLsHMsU6{D-CpL!YKRrM&=An8SY$jx}0gAHjb*){-*O4-*Q#lC_!S{9m6?W z7LOZVm;OYl+k`+WHV){JBNAZ==#c|dKK@h7+O_J4%ay`d)^n?)(?IEfLoU!)Z>F{a zR!q281uhT%10e-32aA#B({Ko2MF*m7rID z(?5}JMb~l;bsf#3UuMg5KN<{`Qrr?kw>o|6_b~}M z?hm7zr7MN|6bSF6mUbE%hj*ElA&Wbi>R3^N!wzhvXf{~U1UgLT6!s(zbO+vopwS`x zg(!qCIcYQ(x)Ozc4&-u8Q$IwZeczhSmYF|~sq-{2ovzFqzO|SL4S4Ckb}lmH&Nd*u z$yY>RU~KS+&l@R-zYCI}re3tmomr&y%8@>9*`g}^wC=LK(ajbN3I^L4-M0?tig0oU zKi(bpA<(@C6s>i>Tq=JSetdGhR44lQsBhx)(8zljVFxG!bm@GN7<@^xUJ-w^98o>m zC~vM#?*_Owz6_4*9RQgF#d12o$+_)~mzzkyBlt9uW0Bo6pir-Jd1q5TJV1}Le*Etm z#TXV$40P?Yv>m%e??;es6?k#fj7Gpafy5s*Gi#;y0C+QRI++h!Ex^~xGjj8msKvZXip3thbh0EcR*rcH{?u!2}w_L_3g5M-<2WqQxSGH-sd zS9_X9$VGE^CkN=euoGSm2O&v$t+Xr{zIj+v62}Bym3PSj=Zr)zDYzBBpfdYOEPrm> zed5JzJd$n*;B0eK6v zoq#T|=$D(T`3J{tb^#BCgFWj4pB))zR$YK$z*0ozhva>?t|&Xgu?t;J0J%wET#=!D z_3&>HDPlp#8_^A^OYk+uw=GrFvBJF$8})(&_dcf}xl`4ZQ4=W~(Kl63DWRv|UDi9_ zBo4Eg2S-{sEZvbYSfg)7LyA%h)~l>Ae9yjZxG}_w%WaXOr4U4l&*voUxe+IZHT@x7 z2Q7LcZlMwLlrXF}CXbQ1m?~di6z{66`vgCQ+xiF=s z84mlutBS(G|Da`G;EV8RA%7B4R_wKIav$_N94u_Qg6W%5KV`Dy$oYKC;3vvmeeYBKq5(AJazqDUn^rwe5;za$^5k(Q+d~RR_%4s*KML>Y@&o(aJYZ)$r;oEEu_kTSwL0Ijl4k z8$CbhB&-b3+c~YWz_SnlG;4I^ojR{5A+nH00=MNRN2zT#B6+h(@&OB{Xknk_FTUrg zlNCydj`pxbpJ({#W>?{2A9l{f1Hr{^G)>?Q|c_A+6=yQwZC|8(?nt3O$8(y9XclbzS_@gzJ+f%l=rrHMLMon?X4 zgO|67zSp2JC+CA$JoiH>e6VKsAI@^?b4nif_tQGm5%NGr)J~;INB4>JX3WMD83c3^ zY@yq;6{WX_jpGKh1+uo+A7j?{b(G>8t#-UG+Z*f`J(B$HryASV%5R+wo@?;F`=Ltx zi=I>A`!kzRFXj%3HyuwrXrDQT1GZ1^Y({_c``cRJ8hEeE94$0s47ha%Q30IX!!};@ zMRfd^uK@?+ccNwEdQB=MPA-QFRR{)NH{K8az`I)jO&P z;e$@JENLMozr?T{atN+=hHMCMoC6HGuSN$#tPn!3l6F|w-0ukMN0tX{&9P=0mDAmw_}r2W#e5%1)|P?FyJC2 zXZ7X&)##5OV8YnvWTY{*qYnFcN|1b_*h}P_BtYbj#^Z2R1(>#;#~03XwmwAf!d^1) zalXF)27BcL^~coO0I-r|PR3Ler`e*nx|rzO(wj>F!gA9#3q(EjHjR|8!slM$ea#U! z7Ymwc@M8Px`Z5hW_?_|N{`7UU(@d5Mb%^QDC6rSy_5jHS3)XnybNeE4MWu3SvPTr7 z^AgI?M?c^r>AQ*G-LYwdN?-Ac5j7HB)^!M1!F~?{h3%-e#Tl(JVoG* zYfnBOGkiRbaTT5xk~;logIp*;WefmRZ5wdrp$6N=yu-_B+e9rj^|>ip_9t#gt<=)V z&#;JBSV<4J(m5Tgn&FHb8?!SaJr4fnW1ul4XeKbn0}F1h=wdA&TQq6H@{{Y3866up zgOTCct*^ISI1|3UeIl>#sf2M@&troxBuU7;8M4Z!HFf&_MBWxZU-OuC%aSEC`LeHa z#I;G%cC)W^H7`N%rEWZ7<9#_gXr}h60?COmm)nYL+^8<8&GSp?$BFi^z`Lq)>w!^? z-Y4|CtMw`))#f6H!=<5f%k$#O>%CuzYHyvD4bFqQzPs_w!rxSq)6y2Re47=@4E&34 zzjt+pLtYzVHXuhk;sJzbq61Lv<{JRbCV~jF58qY`HNu8$6%%c(W~;F{b z#_OrZae-~`haN-rf1RV~$%CO2_T9nC0^Cl6hSIsVy-u=HD#4LffZGwSi?PZE|2bQm zj3yuA)8$EeX{R-%<{&SYo1>+?CWnQUXx^NjOoH5^MFN# zmFDw8M+4xgeVU$_k<*&=FGHWO=2bMjR*Y3Qgf-{=$*2^)di;6KqnRptr&f7tTjhcY zqS?&ajz{FBz4?e{TF1qfXuO)0PapT$i#nd}VmT`c!35(L%Vwf&5rLlP2DEV>;(c-` zfY}Lkz+uH2n}eiJ{@7lrt|r~VUoc*-DfhMs3}j?GDlJrT@>hTadYni|phAt|fL|-A zPG?NT`nR{EqqiWlBK}TdX}4B?hJ~TA^zbZ+o`Fs?VjgVT*>Zn8zYQhFaz)Y=lov1H z>G>l<(9i$WQ zpakK(OB%Q;>Ad+J=rg_B_+O+HHTWp_FG+kTfP)n^*aM0UmUlr`|OiGZj-;s zyghBaS$BVhvPjS|%dOUJjB)IIuzXy<>y&O@^VCZ>EonPj`UPPIEMfsM?n5Xi5TUo} zXlY$GHx@s5yv%ndS-6)Fn0@(62H2dXD(qriw7fmXH!7lpd7OrrDrIc2lZ0)HcGH(M z)oH8GbXon5Cosb$7HK+NQc|O1F_WW26KrOd`aE0I?${DV_IkJmnu3Lq#T$w}8Y5HY z6#*j@J9t5&O?-2FLxR+srZVpS|-wXM@n(9ehA@JvDcIA@D-vPWd6;5nKQDs zV4}rj-x#V$fTO4_$@C=Rg6T;%Q&L%=mZ?ZO@MI4$*FDflX!N+t6D>X!^!(Ml$WD_5 zY))^l9meZ<4qiEWvCMq#KyTk0zAz;&7KZ*a)3fV-(YhexU;mYZsN1Ch{wKnmJ;5#X ze656i*7sHMrDeYR6XI4*kQw(*kk2!FWEmj4kMA{K3EHW@(csQ-*DQO&P`j>z>~8n&$OlI261;W9(fl5tv%< znskBSUX<%OEu*ROfxsmz(1sy?q8ck{p;4(Y&!Z4ii|KxsmaoyrDtoc^SqH%ZXFM;_8a7~WaZGPbWm${; z4?(^x$wK7fg1KT0ZZ=}@aUM(j-Ox9NDfQ+%Y9z!JhCZ)Y{2o|?ZIAws)QUd+vQgvN zbU#(V*2c_csAlRE@xjr82$f&P(1M9V-vxePx~JDP8#Iq0f=>Udw@8Qmy$E?HTI{`o zr*>AKAN?wH9TYo*UZd^%>LF-7{LR2sWd#20$dpPCYvLbd?gZT81wk>o#k*sfGl7A6 z>n$#3oa^0RHN@!+QKRB8V;!#n0-IYqkOCv3kT0Zzs?A|YX%O^s<38|S3(P3vqB;np zTmk#iSZg(ze?5S2q|C+M zo&@Lb=*Tvn%^geTvx7Btm+yCmmG}Hp1Kzc{wpzqMFD1=X>!=lN-6atX{mBSD^zYqrwH+vjqGHu=2%C3Ulforu zb!h}omy7rfs>&HH}ysl+9xK*N6*d3eSHvOO<{4lv)Q__QYC-*3U z;M#XIrNYy>TmMNxhH{U;67eed9k`vZ&OcUD;Q%ucErNNN9k)-2mt=Xmh}m=h6{^ zQti%;IVZMB5&AdnwC}=4*}VJrRL2WALdBakuzhKl2c%OUKx#czHnSBfy&p{=v_xUw z2Jb{h47?_eucvG6ne){;eNJB!RcFc+1`c4($*<917Dv;Wks{La1iePNftiJ4!7vCr zNN{<-rq0T^RB)NbYIly*L>FV^fj=M7u(!nvF=kHf+m6BdI~dL%Ra=@I_w;F z5Q&}3yJeuiKdK(f!5Jfy%|Nb(4;}S7rTL0#?Ju&jX-@sMYmS{>DYbB$1G#(EsJn~# z3ZJb=aRh0$#Drwc<4ujE&l*SA{Y|M~LiVjwsmW1;mAp$AylJy6V%W57k~?Kz-Ts<= zaeZ6DKTFps(s8#18|^bEP)eKU^*QMA4ngezgXA|UnHZ^HgH?6ev~c2UY;zy$_tqL2R8Jgwn(CkIcaG#_HR??1%;HQ$|3yE$*wazT_;zbX zX8DouhHyRF(C-dM2WPWA7zb|%{Xm?V_Z)cwDru#`L|9<9jq><#9Ho%Enp_@D*L0;I z6aMyGqQOkixhoj2+!_L-?^Y#-H@#(gx`tyb= zDLWSnMCm8?o~j#Tk;(yLO(B)jbe>{Ys$s(W9ve;p4A|5*!6FYZaOYxfw;nlaC>DM~ zm+@1Y`6*R-1|(qfy&R#Bb!^?upjubmY}~K674~Cz|MIBS#YQ9==#NEATaq9DNorE~ zjwBE|b})gI`E4;v^}4z1r6#I53QlmZ##9R80Lo6psyDzRZSN*%w9-tA}gH<}qC9^6xys zX6xTsoKp5Dj35UuDSKR|wv(S@F&V6Sbinh@Cr2#ew3yoVv$kSLCjyL$7m+dwd?=mm zczrycPKZ~NI@wachBTg{ej88(10Fz8iWp36MA@%2Vlvn3J=czPjDu_Sq$@7DrbG2O z<%(({mn$sjnZFZ!mECJLJC9SZ_GdESoUwPt3kW%!9*Ur z4)TGG7anJ#qh15xi%yZg!G{RLfY8Kj&pUb}n9Q}|*10`I+ovvb7As|PaQ9TfzaSF$J9WmHa! z?K0NR;D_hXhewR_&1`J~7^-<1A%<2TM|4Dr31@FdgGD60j|C`Un``38q z&K#v&zC%Aqk_6~+kc|I8;bQIXyR`q)t<~_NUehUf?wCv4oUZe>Z1zydz1?O^(Q#EwxLD2BPh>wFzF0t2WpdIsV5?__!3{f4wRS+khzB?x5RVz1dKlcY3s=QHIP zoHjJA$(!k6#blzcn?7b#VQrqLN4~G!FxCSx?`NyL*qbNOZ=WBQCIjinq?Lp&U^!i= z)si#m%q;Kkkko8BL`rx6bH5F0y1Ij8X|f{G*Na3`Blk7ydMpn_<}kEuEmYaft$Mi0 z54fA8$S@FJnXOnbhlHx1x6f91NSzE_`N6}Rh|+>$i{@U4zljW2L0X#R7p9oNutX{h zg4BSNebg&6*Ceu_XO|w>tr&2=I2jjR0Zr=*Yx64Ax(;9Yf`Jz)0B`PV;Nwie=;|CX z%0sQQA}1bj{VVll1r!PkBKWTB&A{1=O68=H7gBv&+!4Fm={f^MkLJo+z1udAg%dlR zF+al>WT&?JZ~^U@Aqp44Mp7SUhx`kkMoXuX!VUS?4frAa{ps-{E^4XyS}AtXTQfz5 zSJKyY8~P2OEEr&2=i8}Zr9@7~eSMMctB}TDh&uZ16-A-LgoKpeRlWBZ6M3Q4P5Nl1 zy*!6pt}|ycuhier;~bDE@@3;~-T~X!Ywv{c2(q?B+pUw_NdzIlqMs&!Brh;jL~r|- z+Z@`BvnC$~b(?Kv`?PEG-vryC0LD+xPGlw2OJ1(ncemkXNv~C9loNn{Yl;}OsXwMM;y%pOEw~RuUWR(mGEvYpk>e3^h80do=`je& zgP!X#P5IzWB6|&OxLiPzlow*=lxbM|xIC2j_%dQnpRB2eIrMoE%Ox*BC+Up=kR#6^ z3Jc~RU-r&QfUsU#%N0@Tp+cZG+VAtBF5JSd&`!sM705-N2)K8_ZAoyVanE!3ic&$M zU}67bR$jah3j2sZk=dPkR&$(1s@l(i2F~x6VDuX{pO7gRz2}^A#Q1aLNNAKHaEN;U znmGOrtP-7DEt#gCyUIAeu?|Ydsx73QwQcj%V6V7fj%?g*55;*Nd+g8a zIZhjNy60{vEC#@(hI#XMq2yMqlNTeJ#Dyx4={W*B3jySU&AorGzrVx|CK~AX+1*O&d81EFGhche-CrRPzkLC?em zAsEVJtxT87+iZ3RgOK0}2c}~2uS02i@!%d^;`m`CFipXq#V1(N8EG)>kCNd6g5h|A z`NFJlWS9=Z6_dolwIT5g;9=<2h^r716N+Il1>6VhDy3k5i6C#+Pfd_9+EIk95o_I@ zqI;7P0l=5biyn!4iR@XSe|NSPei9;rJ8Pz&q~ROax(O%v2j6oWN>_MT^3VF;4#FP` z>|eV1^fi0#eX(4Z-GsBalYij%Ec>N&m#EY>>FI{dSMir80UBYEb|$?=8R(wUiv_hEgL-!T;xi8zMoz1;kRnMKFf*UV<0sCw=2Aj=Gu5iTi= zeXkEF4P|786I?cLN=BAL59eI!!e5o8cI*1@k|-sju7qW+K|1K9!I3z?t~6&=Qi|vX z*rSCU*QBqxsdD!4jxuq9JHuG|hR65+dI2oxp}J}4%!RWaZB~YBAZ)FL`M4@Fhj`&e z(S)5By@SE^R_R%h+Z&#NZH0IGkQ6PzI~+V5f_mhxpDV48?;9xg)8>Hc(K=|j@E~h3 z6Ov(0D7722g8%7n%M$D=CDxS#{suhVJ3cHs9=!5S$V8FJ>Jol3@_kCJY_JK!Ggxb8 ze!0aLExJ8jZrMm)pL8{mkO+#z%V-ype$2z;6WGJCSJW-6wGn*@Qn>AarB`3)&L%%d^ zRet)hz)Wr(szo>Za6P)%`R^qmUbu?L@}RRz&c=EleDO+Q^Ahe@#LRwUy=sOaZDO{xwWIf2?U^?iFkB+N+ zI`J4`sGZE1;*mgw;qlpGDU^|s{^&khA#_R9L1?VVhp*Sc3UyF$W|?~t1Z0-rPG}nh zAwHY-q|e3uSMWJNxVE{O;aJvQ#AFO)lQ4=$%!G17d)lpFpa$YX|8cfmEv4cn+e3>O zovC5+2|tt*y|)VGK0YFC9Gc))(d%vh5c4phiF(tL6@&JqUo_(4c)^_Zp}csH-^pAV zv>P!?5nDBWM-KS0%3A&B-<6N~nzANfZGfI0n~+fKFlIFcAbX;IIe0x+>4T*|A^b29 zM8DN%c<-llqq*Zy$8SdpoSyxN=GK2#)s)U(Wzax-v3evcwad#U2L-`laCgL#uy0anf$Q*`M zTvA$!#K;xf(XY(GgFFadKUlRl!Z}Q^lLlQGUMz`cf1AQWVV6`vLg|Y**SDI4N?PQq z+W=9Q6_Udlnli*N-}-1s%6?6t*+XoURP{)b%>rm4m^WGrBQoL+Q_|gu|6R zp$PJ|oTM!in8?haN*FF|xljjV;slkD5jlyZW=Lc=iY%|m>YRF)VO-V6s0s~2=uE=kkjMz=(Vb@n zA_4n~ut5`xp79*snYyCBem!JE1#L$3DnzORTx1dX;Uf3_JTJKvN1C$;Er`NC?uAg? zTMRu6@A3ISS~NvShr$>0F(MtR9=kBbgyMICTe0y=bupm1kZeO3Q5JS2^jQP^EIx(6 z-VmAwT@+@1Ch=_+dI?%}AF|(g{}Y)8V{mBHSDPEN1Qi*GiJ8KejFTKX8{&l@MY|ZD z)GF5gczY`U_Pj3|zUuRGvk>k)eJ*XkHBwUY{<=>Bnauc4Vy^n|H#n9;e9DAANUjfk zfw$^j$;jRm-jU##y#A-IK+%v{zwLP5gLEw;ETu|FzJdI-|0Wa$|4wbMezHFK$hzp` z0kwPPD*;Lvj&m@+fp{NmHY5o9<^R$3&heRS+tzT$>e#kzTOHe0$F^;D>`pqi?WAMd zwrzb+pL6y;`+oPnf902?o~No-)mm%LG3FctfQk^rSxQPrcYSXs*$Tx`wfVi41HYXg z*T*T)^R``r8iuD}rWCzq|aEpDfF{3h1w*3Uh;pF&H^O#2H zGGH@r=DuV}vHQ}{$CdiwY~15tkt-U^XI2^a>R&`sd?_}F4(@>Kk>RPp3g<=s-` zJ(HkZGv!yU*qBkURs?`$=rxJ zd3Yunz7x^=!r4+In6Kb($nOqD7d5umKbKW?Qr%C*+Ko@=iH~9&trj|CYa}5sUA6YQ zgDZd|!Q|(nX|rEN+3-V7WNgV3lul(tm9l-;7hwFJXn!M04`Qp`R zzX`x1{_aix>M!Llz}orT9Cx^!(=XH%sgK>E~FIxeqbD!m=N^fA_&HHw}wC zFdT?z<07E#-C@QklffA}^LTbx5Qc0n|H%ii%=C@eVL-jpX?Mbu`N^5$awc2!TMV`Y zKS7l^1nwZI`xnJ-w_y6qJdMwnaw#=9d?Cg+Kw9Tm@AcA;qFHBy%o=6;FMq6#S0=OF z16rr?rRljwXXrZ9IRvm&cY=ZR4ah`ACT~mj8 z|)Yhn=S`^o_>Y>N+G1-1zAL!yzM z<-+VmoG57El23gf1L2y&r|kt{;UcEiBeN&W^~aZ0XY4382Dtt~J_Cci8I~&y9W6|gDpcSE$ z)grZ_1QfTtkc709NvNVSZcfK`UET7f2txT|gll6xjp(NXcI8DSa^=s9;S&|w1Xs2SL{B>gH{5gh2+mq^@LROx=AG!qL`{}JxztS^hS=IN*wS)EJ3t{;OHztVD6LV=YV)L z2#^Kv8qgnP3WY9`jSWWt!dz`1(DtAAx3yxQr4G7T(o6rCqd*Y;Ox{=m>UbA20L+qX zrOowRNEqV2NLP4phWS!%S3Z4R@n=HD;I{8Kg0=Y0&k8L7L-FpP?EQrFzT5IS0>Y?@ zzSizuHnibB3i>jd5IZ|q^`7x@yCd>Y9+A>@Ks?P{aF?$-9>3>rJAcw3t;;L74z4Rx z)$uI8lGPcS?fYTC6%9HtomDI*6IxbAE``xlNbT8Z1YfmZZ*f1!QizWSNz7TbAd3kQ z1LHB@a?hnd;_b`+;-=jvjN1-WE!uXF4OKXJQVIv0bkC=QuPs35rpHmYQfP`f=;pp( zU3IU^dFHtfY*MfDiqaIE9Uq|vZj|dbI9Rh_gby}IwL8agsjIW$aTaO;Q@;3I>SL|f z?p8yh5qo&q`4g}|-{6Kf3akPT(%PKqTW_?Kz-}-K5D+;b68_Y@Oq%6tAWrNQ;LIv| zxV2G%=+sj{=!KMHpa#?;$_pZ1`7Wx;pN?DowH*Qw!!gLjG>GJbB(CmUZ#^&8lz1-K z{KW4v{TaDxi!t?13raXEO+Qu|&BwDbSeK2Ub4gasZW61GzJ`W5S!^bY!D08dIBTNZ zNT;$sT1M=2-MOADWdj%{sS3@)aB^^=T#84QEWS}t)Rf&fec?n|5Rc7)Y@H!3WQnE? zFOYG)`osnLOfn`gTP?G*qfLd&Y+2oOLh0I$`;l9xvnMFBUzu;}FMh>Z2*!)+?*t7t zGhq{%yEV_xPbgLO>de2e)~`DtmSF;K&1xQd=NeXzTlCh*b&Xe=^tD%+LFt%*$7WHU zhO{$j{Y6CVS0t&m;u}v_&u&YR4mJC*DsPnUO1vm?!f>zQo0F=9U9bZcH30>JTch|yx~D4 zB5DMubruf)f|`v2(4aoPkWMl?XxvRrW(tZjxmv z7$s1IfFc98lmrwA0~8EC_Y#7>rBrT6n#9rYzJm0+Xrq58NPnyQVgLstQXm7v_{#Tz zfcNrzpU4)Uqe)IET`ZslR1u{pcAl}vMCKmDsLd>#a~E44#^8j^#Nl~t@wJ|2G%3p3 zz>RBFhxxpZ-QN9nteQ%lCN5zNE#Yzdd@SIlzl74Pwu9mwIrsgz%y62$M_!VOgepTW z>PLoF0)7svb?GBp>6h44Qc9nW$!aq{e;L=tCbr&SPZGz)3y~L)1dE4zQTuqXUY+{+ z^NIh*EIWz)PZoD@-kUmnX7l|xK-GT5!~Mdt&%7YP8wc?rG(3M>=>)4iA@lqt`CZ4_ zCZ)ybel>`Z?!-0y-kJtJ;88=yeDTe!_@`>J-3DYLl>dJ9w|O()0U*r=7Z6g`u-r|a z8-)Agd7T@HFrFF)Nwn?NiYlfP2EjLr zpPgcTA#jBmWKp^HMq;z*_?`Ps1D=ZTFFm|XO1FuHb7kUcFX!~WvbROP+Edxx&T>3L z*Encl+FGWKw1xBGu%zxDvt+|8raR1cbDJMBlb^RnKJRHh&#V0MN@SgEblKY{LnC}d zubiAMHac+h*s%^#2_WeAJr4a5Zv6W5J(@iHm(i)b`lwqbp4)+b+9_{ie%82fr@TH) zDOltj;oV7Yu=tkaNdLYu|B;|CKAtynKXccVp63|oR6m|Vx#Tre|AWE)>jwobu!)fV za35prQjM@yI-55*tE`pubS5%1{J;|ge9>uY^~szMoXYN+O2e|H#o2tG*?B8$Vy7wm z{`HABL91qimEbwYF!xC6wAxHabcXq1rH(B3VY8%^R6)%7YHnJ*TU1)z!MDz`mwUsY z-;z=?d3tq+i&gj^jI4Wco!~V!JHw>7PhwE}0AOpj+Xqm}8Hwf))#T&t5wR|l!S=)W ztaz5wfM1!jhh*uON}JAPnY@Fl9xEaw1U|X;y#++2`P+7z;5)`j!{Zm+v61gc)RoGM z9`ihbY=6~Z)(U)i4D@7%llYkNn0DR^ElGC+NZLjZQNbk2{H;MQ|BP5Xz>fOjrDaps zkKi99U(LlR@U3bGDqr8b>2gVwee;%p)e=YCb<>C0`D7~l`&hQrruW`tc_Wu~`X^t5 z`FiaXPT(;miF|KQEovEM25;-j{ds>G6<3hX7LSy?!FUn^P)Fs=BYu8eCOTb%#ILx_ zl-m_Q8MhuhtGXDRqNuSxWqPg%s0uTmVmma!;-I3w!vB;K+F>FN9VQjRUk9)kajKb1 zDhfyJh}y>u0MWl$Prp^u?GD%E{v|Q*{{`Sn+-!3yYmvRCj#k=tz3&wR%Md$~*xkE# zC3Jm|+FR2E`(-OQ|5BHMVE6p6KCkJviPN@C4gZCpXp;P=OkpUVXNU_OJtQWM^LfSH zEyQKPk3MkWA5q~ID}L|5I%l~%&yfTxJ&HG#SDZ;$RKlE~=gBo2+4sJjmZ4 z^1lU7e7?OTWp(6!SC^o>l%J)3e7WWR33QN%^cIOltUpw0hw*hm-xeEcg-zJA;*|0lYofBi#k#lHYaQUZjtQA%|kD2wuCz}$xh*i#Qs3G1U~ zzZ7sQ_I@G0SpO+_eC(N)$VCobZ!;f{w6iHKCj~&ZT;62^1l@lu!+d@B+ifN#)n9%??v-PoZ{DCd7pJBwCw#$ zkwu_|2;l-$HEpk(N)1#h7l&PN;~vgBRbDE$D68f4=)l{OAe7fszF-g>Ph;A2aaP*@Su7+Y z{iGD#p{Nf-DrP2@$-e)0d)yBdC?KpxA$qLx)HKin9F73G1_8wvz@F?G<=w2mEF7#u z`JW3j3HN(z6v(}e-2J#n+{Y;Vhu1>sSKy?W?ouYx2{Nn)$e`Qk)|CSfT}*e>hs6ZU ze`&-E1Pgb6uKw!cM4j+q{zq`#3k^hE-FxDc%9sQNl!61jE3qsrit!VN`TurM70qdF zGv)qk?EjH90d_k9QIQ;?xBF(I9Sb&WV1pn(M0EovrZJR%?gW27TNr_EAsD(ZET@K$ z$~2%+-KFY>qviigA^+cm7T`lU00VYV)g;8Ql6&kRZzDoJ6$$}~Y=vZV6 za25^o{6F)EzdlM(j>rH^T`m`ksrCc0nkOFh`7G`H|GcT~KX{5uL6ox1^^qtfnW$}uyJG}|Bc-L&k+Lr2AZq`@_(M`KYuic{xfXe9%IcBQGWZ~ zr9-BZR_uSNVE#3Fe{L6&958CoMRf*^{|Yp^A)mbX+>^jCOiIdV&KPn3k8@~40<+TP zC)_gvSdVx_$U_`;0#>0Ui}~K=8+lbdZErK4(&>Fa;YpygnRl41+y{CX9dtusGpplY zhiGQ8F$Infjp&O9Np*in*8kr8zph2@&$Ue68mg)Qg9<5$q_{e4RR-{Gm8qme9!*`- z-?L?2$)DZI?lXVoizwI8;;D(?)+60^W+G3qSS%G~wGh#+uZ$mnwxWm9`Y{Mm5XCXO zV@Fj5U^ik z$R3VK7Y&QqX;-UDEtIJ*%wH!WXk(}&EkWs#jU^o#%i>235=zCMg9|Lpwy{F*PHXzD z#t1&tvSO=F(&u?v4cklC3H7F*f~C406jDhmG-(p8nsl9&6N;HiRqHr*Q2FMQogj%B zt`VArZ2Q;H6WDhb011OrB8mo$_;d;_+}W~8YJ^hUBDG0cxg3PXjgQ8E2&Sog1?spi zGn{Qa#sW?O226B1un{(~B$1q>U5}^kYV%XsbRJX6`RH;P(~0c<+a`ps<4DM6XG1`9 z44s06H$wOqAovINQK4=KtQ0*f3VPbUw%iY{m%IX6E*E)(-fhT?{;1^~yJ!SBZc%*x z&i;eC9jmSvxv_=x2t2YsIs0S)#!eOK(@TgT#Wu=Wel4hDYKMg{YxX$$`B*bH9lrSG zXfGC@j)yoj_H+)8atd^wfT~w8Z^0om%5o_ZZC(eG!vd@SB6tCd^!I!!&Tmx5XTjAorb?k$yV)?2kl92ZYHN&7tG;t zKpJ{Zb6@&ai@7`ldqAin!b4k~Ezk*-Md-VF;FiF4U_oJd2JFt_p%C_dHU2atDn<*P z0!y$b!M&+OTlKkZ&Yj~R%-#ZPaM@)`XR^iY9}t->&h>^lHTE>H1YM2V!POer<{B$O z+bwX>KaC6K8|d6BLtom)z>}N;iOtul#H93?f0Z1j{$Y|e-;-@eiIL*`(|{+n7zppg zdyauH2Cwz-JDDScZxzoq4yGfXk~QTNX=(oj(P35witkV!uC4=@c#-M0>yksvd3yJ6 zv)e+6wa_ZCO!^PCpEaV>&;Dk@9VcJEBUh>*sCrbmi}!K%xPMi(n2)l1b-M?KxNH&8 zv*n&3KD*a#gv zN?S3O#$f#&1iN!FMnvyLsrxUv@n*KoQFYiQ?_dpMi{`PLX2Uai9)b8yuMjmmzZ0Kt zq)-~mj2;Znbtq{y!3)hLm#fRQJ(wyQS76O`nmC>eoHwM32y*)DkUVbw##8a62$1k& zqfJ+MoH!?;fjcLFPi8h~v|qKstTR1qOdQ-pgtodvBSjUMD_^aTUSQgGiRVqiBLA(p z2v@OON2c)`-rj9*W*)mlLy>r;-kTkF=c-$T%)!IeQcfZoyVddbWPlIHZYOmtGQ32J zQ8^{#?o#v^Gc9pq+m=98K>lpkXshN?0BycZE0n9jQsR6y9}37Jbx@<-ffpd`CHKl) z2U>Spg(t+B8ECOu*`bXuMZIW?`m0L(kj+X8*t^3C_S{J48umn?s`8w&K;qX@(+}P~ zf%f~04F#u5fUIG1)w&1-Jbpp*%k*4{HH^h3mkcB_f>7ClP2s(kD^&J)JW{b*3fvq+ zE)e18{0^!mWq~Ndsy^&l9f>p&+rpxJE%%nLkVM?cNtEPi(mPvr! zcp>hYH=0D2TZ|4@BjV0i4(s)rjKkVAIDAe)C@asDhl*n7$V8#IlY97`v#-d}HD~Xj zR)InWZ*l|5N0BPnXb2T`-I$RO;fAq_>91M^xvhS9 zV8j}+oqYL8oH=^;9%>w8J(I536l1MJbn-hKM{{WDTzWDGOWG$Fw|QqpOnr~YCNi=@ zJhV1usu0)nXn;|el9Tc7o)l#DKb2X4UR^@Squ7(+yNYt}00X4*%G!y|1Au^m0w}bh zVkyNJHf!OWQX)T7cXAC5PZ&n1T4z(P(2RXZpg@SXyg}J1OMK~E_t6CfNe5vv_+Lk} zn2}}!Zv{fNdj|*8`IDy8t+d=FI-1C(lbm_FpT=ZO^oZXCyS?uAangA*I$E*Va@5Im z`7#^*3dc0R9lF^eD9#?z{E|>Q2oIH4g426*craXPH>$$P>#(!GkVK==5v}q8$m)7% z7LhS?*2j`{ev(?7#zXFdP8v+?u(E^?h5(vN_r&TGC1T|Y$MbgALRwJg&!a%$$!H05 zY?6c&qqv)^HYrn&Ey!50HLF`zcyrCve7^6x) zOdH)T49-4fRu;^WMF)ND<9v5o(Z1f|8Wfr3YTTc#>MTscZdA;eBg2_U6}R=~N?2ev z533CxE@S7*mUVZ3mR4s=cr*C)ct>vWnZo<3l_>#x8yMB(N0Grb+5%^oN+Y#@+YmLm zc#1DuAUyzQvgt3KKJp}!)s|?OY9>sfe}&{W&Y`F{YTJAvFCftI_$*Dv@i>HI$t-w3 zlW)#)dTKHQw{!VEX*v~ErKaex%MtNCw)>H6GT{^z_-ab4#fI8@Xz^mA19L93=Ia3> z*~r=dj;%*Pfo{90kTGP!3FT4zw_;~R_vzGRKtp4_nVc)*m;wEYg&h!e#gv|%PRCPX z(gEbsO>h;(#GbF+N-$vIm|OIl`}D*%LMB3Y*y=n*o{TA z>+CwB*2~N=1?GmtWIbpRO^Cg}59oBn`znuwj5sDy!V1`E9w&;JgPMQ9eXz$7nL%K( zxDI1s&DDWKV{*##gmE?5%GfeYv$+E7gr?h}Jg4lwVNU|Y8D#+iVYbs#VZ7C3-kd30 z3TSFM4~VYO z0>yD|*a>;ybFI@fLep?Y3%D!sNeSHm$|L*d(8Hr(LS$JTo0_%JdCSC5+kUt!_4*Db zk#0wQWf%uqB6ko5s!}R`oI>Oi zRaU4E*y;bYIoq!PiN>hG?qY_IwbE5|XVWjT{@ay&HeTg)f91;$^^}C=O}l&jMVm`? z((}_6RfqGXYvg)z;z%1j=2QDmpa}@uXOWG*t9XIl<#KA923!`PJh)8rND-Jco~=m{Sct)$5bucsoPUh(8_(Mw zAj1=egHVyW0wKdHl|l_ul~e27Soin#Yf@BrkiW^4Wb;dZ%~km!{X~#|N#XfHFgaa= zOwMseFBg_iaS{7KCmmO;hSK{*tIic!=uRG8UA8u5_BvAu=VV?C5;=|#3MYLro;Mhw z@Q_5GoRCOAGFc2q7Gef8`#XgwixCa@-t6&haFCEJF%)uCjKgqCU}%gyuB=FB7VrF& zZpPze7Pr(Z+;`-&-Zux1{2JoWRsZ$?>tYbh#WQBlI*VcSFrcgG+ z&iS%uM+^HK7ZN-ELvHfzbONc)Ckvp^lLizfdx1+En@v!%uJ3f3GWfon8JY~s@kYZm9fjy8i7#;T7n8hioz7O}h?j zejPsrDtjzpa)XEJz;>W?EikB;+=VA9LA-czcIHWeobiwgWstHQ?eCWC$#BY~Fn)dQ zwxt{ncd*7YsA4_>4S__p?kR)$6@*1Tly*NlI?wr>?@RmzQi$?G*&PW2;yszy0MeqLI@mT*3 zVKBt4E617@`eB#k9zyran?P)+D*`G(py3ks=>imSzts2ffh-p54@t?e=t63Uhj<=! z$icv~hxJ!cJox9U)<3pjJ-d)W60{Q;V3SxVq(EEVpf}{|oQ}x}AK?s+HbvL8;p`@23|26rv`0(;fHy>96_&O(#65T#ZD$xJgf1k>R)*vg?#UKuXaJAdHzs&nMwF#s$KWLV$tSfS5nMD}`79qJ z(T!K|SeB@BvX(=!yPlRlsVc;{?5696wg5-{imi5I2zNZ#=ami*b-f1;D@wiH=eJ62iB5ifX?-sVRv?|__1XueQ zS@~4hc#KvC)%$t~89UF?QbQslj_n}P1E?Pnz<|jQMN1>yfG#YPxk%=O#+s=r3TkXg z`oJwG3!Cxl_+itvZGksxE&#_khHKzE=%yKNN)Rm{ojrm6xL=YQ$RgU3@LcW?+& zR$euUk!BcJa8%_DD#8mJhEjt~x(x+=yXwps-3X#p%#etwV1C1F{ys;*u8m?$bPzc; zX!Ri0=eA*4UM=eKx7EwvoRdkk-!1uN?SjS2AIwM&EQlPz?WwXS2z3Yn0c^=;sXgnK zvtr*%<_F3?IeU<@;SAIbcGE?o${m6bYs`?Fq1Yyn&l6iVw?(LQjc6_JM9^ zHi@T!&3XK|vu_zBBFt9-F!9K5;!CG`CkQO@4DCm#7Gk(g4V3Q@n2{V}?~<|bgnb~< zs&$}!-(FU8-|up|mMk4Lupu~&i-k%3c#Mu+4xv0_O&m0q;^jn_&wBwy?$V9((U9&O z+s#xVFhVeVnr|nS#t@TtoX`W8V=%?TGisr4FSvrw)&PiSfrM88oFwrS@)_G9hnwScPfO(P-eMM zczMtSOneCh*lHo5;O;SH6Ma%}@HPSwif1`^yoUInOZLBTK?-5eF_5yaJuE5!Bv$at z2FdcEqcJHPtS)ztE<-dY{cJ-XxMZz00*s9NeETAQCRy1$Vd7WNdHV-rAjbJ}38Jcq z#i)e5$z6ut=(GFy(QIDRe14wdbVd!P5M)Q+9%>ky?KkBkPl8hl*wa-}q|iXnW}7$vG1uuOWBXti*HtpMQ@Q{X^Y^M{! zpOA-%$7nM;>;w|cI9(US)5Ke1pkPr{Rl>};`rL31_)c~LuM;!7n<>`0n|9}~;HDwk z1GWsw#$_4cCcGfNndKWo&-~WfIuESo@4~{|q431+0g-{R>VLXQ6dK-7f|hgOqjdtN zoXy!F^N3d4m)g1eAjnB)L@+W^6bx^6n`Ho)=_H6=udb*OcS zIuF`GJUp}z?0Yqlpx9|0=MD-JhTL2-P`d)WWx*m&2m5%S8O?+mk{{AWMaZtOWR1)*i~`N22nSz}1d_3yZoIM;48@W}A(Hlsa z(D7#Xu0Ih0GjN+M{m{vkIPR$53%{s8O9F>@f7su9pD-DOKM@NCgO`{RCU6{30yh% zxFx(Qx+GuX+4CI42smCSR$IP@HT+u0OqIh*rB=ma#lorTX~$}JW4BRN`T2h|dH>#- zP@#aLiW*-EEzP;w*4?xk# z>J_OvgO22&-|&D@=e`^@bFpKFq87KWlsJ^GuF_G@n+tcV?gN*K0@|%eQkV-zD8V=E zNlUooyO6f2*EQdYc(<9`>e@>sR*8gIZ@f*W+PE(caDkaeJ9L&uc;C> znZ|$ZF(xQ;0Ca6oUE=Dk23Q9Ud%jwDO6-=bgp+pQl$`xWaC@Q6gR+Q@Hu3+YKqFv&=&E&fpQ%LffJ`zcDHu#3V5~;#?eN5 z*)#PwxDU>FSGBw9t=7P*=xL^PJ06{zzWy)PNB#kFi7Ln>w#1wT6x9D09~F4i|AUx< z1kgib`Z|yn3xfz0V8FTF+LF`DBL8dM_-hpr?S`a5hhAj_9YOnpTxjvg{0*D^qv{7h zmjVtfFZH~zKKNhP_V;lp1PBA!7-IUUnPh+(t^e04b54j523qV!tWkw@eAe1#5*AQ9 zkg6qBdKAw^S7B76cIKB_IHYPJ5@2xhhMv?BsdI>5iZdS;jjGJ_Gw?i3>h&nN3t~4z z^xsud${EqqFRytkY4u$)RByJ~oH>P9_>q)7P67l1 zx-U;yhlopzLmX7U3b&WmA4f;+1@w}pD_r43eUMZA7JJnU{?ygmCL&5OYZ}cynWjuEM1k`oIgg0QcJ6;kB;{iPi@|I+c2(c zT)l8mxLmlw&z@cd)k6nkEHhMv($IXfsCTOtua!{@6%T)e7MI?+!n9C2L<=h>y}GV5 z2AB!@y6U!9J(Ol0?cnxRJYpB$RQAy1FfCb78V7b&)q@Q|Bq@o0h)q{<@x15CtvJa~ zE>s-)RE}r6oRvn|6fAR-89yxz0_$SBZqie$=P1IQ0HzYhfyZL9JX4%7)O?J`;+N0P zrjbqf-JIfdAtP>?;7yIGhVf7Nz6zQ6!24qQ?%`-1tTzi_%ys!LJZ&70a{lag zUi|yMIk0p79u>3JTT2@r>yOvb8U*tN)+_v1>ZdRRG!{iov95Zr9!-^a9p-ytOTpOV zztTH+0qr0Zct9PEYf@5l#fFtswh61@gA_B9)L|~X3l*D{etlaD9zn*7o@dMArnp66 znJh2!5O+||l+Z+nsx90;S-S7prG}-rCHfvbSpjSi6*L%gt2D3K(EUXME4~-aMDnU8 z0rPEC>$rgY#ROAL+STb4o!&|Ps5@^`=`t&{NHYi|RsmCyPoCpyiMgE{D(TwxUS1R= zwqax419VO2GsbF7vMCgzTd0j_3w6=^(u*+v9xuAbRbwj2*%dm{qQM5H;f2~{ciogw zE!%a?yW&xKsPYiw1q5z=SHD)*{Ty9c7CU#d?(!VJIo60)Hw$Q8CBHhW_#V>2w_>J( zx)8NhrNVy@=za!Al1xAqe!b#hwqkXQoi}HL_wKTJFx#hAt6t|40)+JZAC&-K{bvXO zU4#oIZ?k*ct}zyimHm%l^G7(Bhd=ptmwxBRul*hx&x<806_*zgakk+fKlkcGUcy5Z zWVM`&^BiY3oe0b3`q3atk8;w-@!;riYfKY`Icy|ur&pi1mo-v^#fqb&*kcQ5%_Lod z<|ZyxGfh*{KD|@Hw8{l>sD`bjm~UboW&3(Qq;oW3-f#0g>^Ip%fYO*r~=h$`np4PH>EP(0J?wpv=$zePF zyU-#C0C#c!VRWseby_AFk*HZz7YzT)>-7`M7lJ19VFZS~JdG|prQ*lfVsS_9>>8SX z_Rx6j_L)l`&E>B&r0y9YK?F@rBXc^5Ha#S+u>9C~^+FS!FOg}mT*yC>Hp?;$IC>i9 zIa%%Cg+1R?`p)D#Y@yluoq3((J0z=Z`d+-SnRbf{^0<0+K+G)&=TNZ=ZTj?-4=)8F zU$R5mlE-ac$y}bJ*2zXmMV$7$#`nPs@4M~97N^1cJc=3xU~e|->?Nn&rETS(wvA4* z1V1+3_oxXAZ1DJnPWV%K63$0WbO^Rfr+@5nvi$OOJz1?|rq!)U23XRGZMNI6^e@CB zuFCBn&X!%u71Et+$}h%PANkt)l7XT!^uX%+d|;9x-xN#ig7#tnvQo2^%>H_NtyTn6 z=R6|wy&T=S0&mM{Q`?a4XQCVtb6H)y^EFSu;Ta1QCH9EYMYw13yIb7eJ$e{m4qrG0 zdS6hxM=7R(RXLNud2_91D=DKqwShL@mP7gE#>9fk(dfu%Jx;`8v8TS>jVS5oK#AME zft$hR5l*#?r2lSFfMR?TK(tbWDXnU4WJr+$Rh)JF8r)slm;DV_lhx#=lnlV+NrcwM zLiZ%buf^?P&zbI&!Z}+d2{kl(4`zSm>fKXoOCDD@VU38aATN#0;*bE?F%|TQ$4sY3 zuLgC`FshZWf3x-C3FLD4`N7LQGrdc0He4#>#6X>K(P>idW{At_62M!JV@rmhL_v`B zVEP@oT|r(z8K4#t+i0~Z)6v@K3RPagJ!8Ju38LI2o4*$2|28thCkDHFqLB9lE@b6z z7g>Q%>jB`yM{gj^4+2bBK1Kw0lAL2YwBd01BnRE`SeNq3oh<+&IS_R*3}g@`GMdPe z)-z!z{lCLfmem|nrpU;uz^}Yc7}FYkZe`Os%&FErwP-D7f3;XVZm~PDH@hm%g91eEied#Fi)$+=UT^COO#g8P=<3O+_nZ8S2E?rCItK8 z-~V7q-F)j5v<2ZuH=R8oG-Ra!YPCKPi<~9rqoa*TEN-xj&=|c@4fd2?hs|nPFe8m6 zkj~9NH&cI-4#6E)i@j(Y#8XPAZNc2;>6h|S2B94uq}dYq&@Pr2ExVKjNk`HcFT4ub zf5iF$eIQssYqx&QE47aBpNRCKhQIQD%dyaWc>Us!Dae)~MJgY0tTHQ_o=_3xHu_!# zcx4ljflb8p&5Lmz-tM+PBCPTBxB zq~kXMk{)d6=e#MnSekiQ`2743`?)SPQ;*{gdh^MTKp}kt=^&zqvl-PP>b=!~P-Ot0 zNl91<#A*l(Wz>608ECy+<5}gVFmHTgG5GucZJwbX>o)<9oRp!hADurt`h${9OdMD1cY9LgzDWWS5_tFD+Y?1|l z3kpa^)d^bSJS{N~CpD|RI_4PF`gIi>O5oaSuSEO6MAXU-WRALX`|3U3(SZFMJo;2E zaP)rmJt&$z{F4O1ehl>g8g75ST=VdjvIjblZhQhIfo-7Lm?Vxiv-C&@H-L`NA?>aiV)jt zJw*f4EpxK4AAu8p`eFW+FxgQe3Jh^w!~!Zp0Wp(&3F1^}yCknfhIWA%fi}J|<{cAp zb)uCJhqkh@%!|h|7F0@^RuP)@Qe$LC-iiY5$LQ*F67b%G9fm$#6+&}1Z~WGDaMCOs z&PcMC`Vc%=74=@S5Ks+B6@}H06lh)TYIr=IZ;+e867+7o{v<24yjh*89luQyw$kIohTg7=kHoL=xBZYpRn$#AaOM0YjtBoSXGv{%Z}2qpVHm z(YTS2#cL&Ryg1D8e3RWT=Qw48D*3pu_bU2MVJ*%>U9Q)%NSx0vuf zVBYyM&h7Xt_xbM5^%V&-6TDCY!~Lf29c9k@BhMXUIPdFuFDQFZsE{``qmajGl}J;=!0c2>)NEoL*MUQvY{$Y{!8U1jE} z#Sy9wU==!?$)D_sN9fFJ-`UcJy9Aj9R2j)S5kf4Mc#&_Sd}AbWnB@0P?97 z3Kg_sKU>evCTyt{3IBv;(#4jCjZ!UNrIOeZw;R&;3iOEDX5*SLh-jrEexbZRm^Xdh z_80K~)OTAlQvDlN_$#Fl;3W17{qid1!Wn3FQbq-gE~8Hw4%};U=`U?D%ag_%zoWym zeLa_}0&U^|N4-}nr07^KrWA|prV9Tfw1}+=7(=Nk=2W5~B}J!FsST~cHjB!Gk&LJE z#mQPuk5*k)JQlZzkC$s0I#|!qrz}hQmmt}Xgr-U5BniHaz(M56ynGA1`Pkdv9SEG_id2a6FSeihug-SuUs{ zB6>X~DVTIfDkWF1H*UN zWRR9XhoE5^1QXUY6bt#T>?47W6}2o!B}#=L4>w7Jet`y9JPpWqkdplKA=CY{x^)`( zwm-rG8AM>S!MImvGb&J)3*9(b*9MNAK^&?HsEAp*)!XH6nI*8Av9x>e_?%?fhU)9p zKGO9p)Zn@rtMKrkcWe2#CrQmVHBQY7!GXa;5-CHv;X{jPvMxzMuvVf_4_OL|o25&5 zVQO3UD!+dpSOHei6bPXAisfOv(`I<-?O^ZviyL+0JU~6SK!Hg2=a~lO;r9e4P&!25 zCvV**XL8m9{8M|SB3(N*ivWxV zEe8H(NzV)D$-GZ0@?Hm?wb^V-X{I%-f2p6J&jtOy_O(VIj3{4U_WP*8_``Ivx@q<+3jpzh5zAp1b?C9kjG3s@nQoVUgB&WC@;?mXfvdGE zhM>9xA!Z4kIj!gPP)>PprlG=6GTDYheOeFU3x2JO(t|WQ?L48NDI@08vW7|QXH@nW z6v|50zn>~_RO6g;ADr@74Z#O?$O`?bfx7T(ZB4tTLpF;m#Tf1-?apVT{nbqTdO-)N zPm=SShexYhKw&|FM66PK1a&*Fzh3i-_DD%u>R-Fr-++&@ASj?|!XYeMzytC(?4oJz9*cbdKJ5)*fR@9{XugU?s)(7a=Zz$DaTsUvjZ++kb3$U+SDpgUwP0omN2F1lV* zuw;LBQ(rbh^iasdH5T)(9P}@Ge&}>$XLWaGldb+Y?E#wf_V+jV6KDyji2Xq+y&kMD z_9FyLS{CJnfbn<$RseZ>`Nq8#*#z!bY*ydYblpjDIqU>_UssxJ=|Lw?=F18y0B{CU zWuyD;cOhKWL#x@sXg3Idd4=_2y(Syn3cW7f35nZ-@e<3$N}=CJ61|dz3JMAUGfdIZ z6#Am`)uvI5D;A5D`jT?1B!H+J3_4vtqtU?B#d@1LK!sr^_>a5}p}K4)2cc1S8+5*e zrY4s2*^)vpkYKWb0pwA~`@<@!^7S7vj~(a-!cb*nW0D4|Wkubi#VS4ifC_?E`5a_C zS<8j;T!1GIq&es-L7ibgw4{s-s^^vrI1hu5tSlU@My<%e@k~MF(MFeV*Vy&Y58}CU z4d#=Lj(aXQo1iI9yKOZW#URHR{a}-|vd}QH8*b(HVdkA7-TJr=PBO`xDF;D|PO= zLEyuz32e5U!2th1O~!dem%zYl5%WyMth{)RoNvnoTw`sk`t# zS0HJ#TDBdeFS_3MDuiHyzYKHZ-c8>bbQ!;f+T)1N<1o%Z|vD6HTesq@ zary$*YcM(A9MB(ad%j{II*u?vvIW4ybpDhy3y!@0Ma#uPLby7<<8T*j725BcjOEyK zl*>)XknRL~9eO@UtgoQEQ7<()DqugitFOL6R-r>l5_5X_eakj1_8)uK{oxqri02(n zxKYluOO2dYu!UDIfmK9!uT{^PD#+a0Zr2ePEpD~l z?~Dkd6?nSq`Ao4Z}03py#NFx_y zPN|%+C&@f6wc$Jot}iZU9>h?OiJliv*L7{N4O!>lMYz)AM)tzM;VEMud!qW37ifVT zib3nibZE>#zru5~NTON^n-V_oab=io<-5j&!sCsD z?dL% zMIVo%es6J@pTjO zv7EFajGeg77($)cU-?Wt)(CH*-rru$=!C>Cf$!0gKGH+t2aGZ%C*_X!-v-2!I1KW9 zp*ms6agFHfVG?q(dEM^CW{IPNqDYWxGgluwis^R@k(nCEZXtwHk^}Ia`*~1^&Hmc_ z_}^Kk6SysG2+IHHEu>KpzY_onD|NgFXgW6+Kt_RH&5X-1hfIv28F=KLOQ=)r znexg6LJ(eLOTNs8u(BM51IQWCgV;S?AfFxBHBHJ8cOB3iMV%G1GNxj0ntG$UwTAP- zYLy?X?)$vyjP6z7wG)R06ioo@G7+xw&*~y!%m!*|OJotDV560r%21JQH*aJUn8A@6 zTYYEe$7lGKZ2kMPgd2pZ|LumFy(XsLlFxhJMR&J-cK ztdGK|s68S~qV7y5@5Uj_3%aILv(uHP+(j@n{Qi3MeuZE%A}c13TsrZ(8gMb6UzJc7 zUsccg?GHGi41GemK)chV!!|uDczBD8V;7MMluGDE{$|g9aq~2Zn-vcaA|@a;p(=l{ zE}~neopTUM|LPlI41~+Bh2RVIU*iHuf)>}PU~Hg?e8hN5ou@RAu1+bvXHf60@EPFG zHWqczlmk!MfNJSgGNge4w3jRvi>gtBVEM6SMG5teD)?nFZYakv?c^GTqcMXM<%LxN z7^w&`yfm#h*xhfz=F^}!59wBf?gms(OiH2#;9T-EAQ-Mf!`dLy5PM&CX)>dHR#4E7 z>R)}GLlX5<2*!<(ugqPAaaIO`wnM#S97Km^N)lkhMXNh#2B9oM1T^AgiLviRU%g?npeB6g0{oYkCD?WADOP7eJF@ zZljETkO43xbbOo*UNk7j+(FQbdpUV|;%hvrUFg<$?TcsQYn|nmNOB2jEaS^S^G2Uc z00TTK!7R8WEX1JiILk57YbN}Cy9=le zA4VZk>411FyUqQqsen`m z-KoBJ%BiNiJM3)ME*3{a#3UZz&7try%{Pd$?*^jb4UHLn4?OwxKC40<4GrgmG+W$e zE3H~q{Ild`q~a=C_Lw|Rmp|9lSV8B8&R_vOIE~e4u=ysex}Hh+c%$Bve7FeUd(8ZS zdC!F0&-Lwqt{oL$bA&V%s|Cw0OdGUN)(wZT#VE-)H*rlTUYc_~p&@)lAGKo!M+DVzq8Hov`5bng&aEJ7C4=5+}`mSk%BWvqXoTIQ3|^QAG5j8PqPZU zu-s#oWUi>~cO1^^IhrUHS1C#-om(k*gS-;sDP09JhUO6E9~=Z=@VN*XBMP`!Sf-9b zSR=$vYdeDNlU}_8z;G7=xBX);E~_GAW65$*`thA4G6}9xTkF8Gbnrr^^VL*OXW=;7WoCKpdXvBz5s^W6y`?D3< zDerfMok#`W2)OFmi_eC8A3$?5VfSD?*@v|Y^K|nsuBGT}m!m>g{%YvTI4ATRy^P$T z*sRjx%PW=o!MhW?^EfXBR;vs1XC?lRLu@z>GqWIh*jMNNY%qnJ=sL2&jLeHe~L2l$}4h&LUd|Z@yxg{W^pF zquQet4xU#0TadC*Qv%Z%o2GTkEJ&&L**WbGQ4Oi}99D6pV%s{s1$qgoz-*W+gTZck zc$SMz2hNp?LZ?guF%+i_&)cze^O?p8i>1~y+@$x$qhoXLjs3nMOlF^#8%*SgUxI*C%j?Dxu0oKFLGW2V1$@5C1M^M$L~_hG zDA>J_!k;Ev`!#mnFOAF9K~;(^wHplA0afAU6rEI`ufK}B<8ni7=utlO%MY&Q4Amr@ zUGOGkGNfUrmRzj9fy=8Mn6`Bju;|Dlo2+tC*`F>(0i$R9U}5ZT?>zzVpl6&9pna8U z_n)8Vt3in7t24dB8YVqOEa$Hh+lM+{9%sUT`rIrFjavtOFx2HsYSJaTI%Z0HOVOub zIg*TyD!+s$dW6WD*SDC_R8Eo1qh5(@{7EsjKyVgtq#GOm8X~25aMMfaUBn>;MkUUS z%c?Pr+?yk6*zkA52fmy!QTMR>T^0Mb50ybh3|Y>*Op{o%5SAs@8@)mKn4Qa&$VTGq zq@9qcQE(?@{ReMmEmkVD1b2ZGaI(a{vLoqyIyPcNsNCR;4j_Mo_}QhLGgjq+FuNhA z+5Riyybo%KHc!O(dPyIzM1d_TJO1YBgu6DbqQ|OoAL92q12C;r&km%&yftNTr?~iQjK5l0?S?}6E(pxm%mwa-_+F&7xEyoVeC`ztLjwvm zD9C&2b-A-H1silS2vAbIYN5ku5WJfODDFMZ=M3+swPeTEzRyj1b_Gc+@C8Z~QyT*i zN+)daDZfp@YM*3EDRF3yQnF7s%DDv>qfDzDNW6uzxo;4pB+|~Mb926lG~7P1wz+vY zZj$YM9DBJxD9g8W-M~e2E@+f2Mz{Ie0q4~j;f z;Lzm>ExA{#=;~)UT$PD{ zs*aVs3&ZmrukTF`JI5zZTZ6G!q6kb)gxm%uc*3-gE~{ooo18k2Pddh*^on&%9#pe+!c~hHD1K1+g>rVQ-367a)r9>hHw4!I5!H>^JAv)Ut5fN7INC` z6d6#k%&#d{88{k>9|R+5ddD&~x=$3cQRJbh7u}ym2V;T`%=QTP*-ZxK5j2~Ny_Zki z_hk*&9viN!F1^BsULFQymBdWpf>pHxj>-zcQQB{32gQVO0C+71c-V5^;&%k&u$6j zab*R1wn>YA1%C;GWD{kx6I6D5^Fo0gx=~0JmD$%{0 zPYUgiG<*V2JA9}$GzK+6x{GdTyKTPLsmAMk-sAEh=?Xw*%G|w3f68&)H)x~jy5!Vw z1WJvH#h>t1qB>OA*glUZ)UUD+jNAAL4)ErDnpc8P`w z=tWB-u^Fu#9dc~Dvd0}7bw4vzdr6MB3%O&~!kX0`dc%YrZ^iqCKlq)>naL3eLA-w+ zR?t+&A%z3xP%G5v!idiZE{TL6xkqqVm;y>6>s*6romdY(=rX*O2<5=yGu7MSHf0W; zi=p%(WV(lTEmONh`R^bLb_V2kM1xxd99hJPJ9Az}(X&T#mB#%|Cl)bCR|s8UUrVTC zjHsgr_EBLp$kBGg_`e6I&EiGw^`gQ(C%3ot;ld`;{jx|7NGDkg?1i%yh4f?qEO_C8 z4S-YBFakf~n`bLS(lIE2vt~PINypsF7IxX7dGT?){!&MofFq97r*InaRN52sd9=mY zQQpH5NE4h)lm?9PBDyg^3W5NXXN(jz; z(y816AHz<)=?(HbJRbTiHE7P>2EgFUi$#-%&3K-t>H6D7Iu-uZ>Qzs&57P4ncQ@}6 zsw;I1K21sPXmHaxDJe1(RxP0qkL_vkt|8u?e)FclaUeyb^ocOOu1ov8>K+k;gEX5z(_awpjz00lj(%w_3ILBH zmKYi|+E^wS=;jx}hAOHM_ese{4ODkFn_!dLj?ICLksMBf)q~fTU9PVx>9?!$jC?2$ zHwxIHHZ|P#<-VI&d6x1iLs1N8#B8iK2l$9`omTJDgWTRl``LQv9BaGfAIqqgX{#1e zFPMCP2Pi}VBs!Y2$9>9|iV+I9fFc$ucFrXmEOURVe%w-d)~dBwu+UZko->YOm{X9i zLTv9hT{|7(LCVY=rY?6~zP-)$w^EW;o&^?tL1aEqNiK7|2=HWUt32Knf=x1b?QW3>wgvd5x1| zP*EjgqI-);;H20J7Cc@k^%{NIHlpJBL{(wS6FC$DA4|93a2%W3bTin@QMGyG$Tnd7 z@`zihzeanPfAXxQ3!m9);yw0Lz*d2XM%Wht>p=W_Tn7}Qx00Z1^K*3YGZide5aHCh<9ZpQO>UVM%EzP*#tVOE_p?-u(;`GUBr0oKCFA_ zj8$v7;MdQSAW5VeIAUA?*Ulb*fig!Kb1OpAHPfG;F9e$|qNkW3>g4grV-QRt8Fkh( zofCxfQRLrPjHSYPklTJ9{m?O36ToVPjEcx7#@?y%8sA6^jv565Q81$z*6UjkppoR2 z{OdMJ)sO5%mh~}O&7?{!jjnM_6^&iJ%)geG(94t*Sf;c2dSq~N*m(kyiD%EvK9o`| z^j{I)0tCrJtjhtByL)LefRjoezFhYaW@mdA)+mq%s2#_kMVox=E*6%`o(u6)ayVpv zz~k}7?xqdfaHrL^!D%mQ=^K%c?bd?M%lo_ZJ`cJF6uj8?#v#K72QD5@n0L<}+~i=9 zt9W<=(SeO{w@+yOPUTZR#*;H`_xX_FC0DqtL%1gvv5SXZ=Nm6~4czyqKA(N? zAVh~X$$e}qucTurt_dy2i(m~C=uPcF&npOr_jMLmQaFW8M7^p&Cs|D!)&!S4`hmBs zZiV%!5EZ0WzSq&wsYU|R0VufCe9tp4G%wd(eTECiP?gp<0&0xr-yeUnwb9;u*Vstf zw-a6nE1{?ct>YkRl{*9~kK}!V`mw77nRYo_ECjc};jWVr(z_-k;*e*70G$4o_%E9r z%Lbetj*9}(|H?#P!E2&>QC{`#Mvl&X>F$a1)`ec{OD8lW@}xjp>`$$e6B6mt4CFPdo#l!rz|fG7B|7HKCRPoVGE+IJO{vbcSxM=2`WQq$ns@Ew+L=$%Zswz-5!=4Z<;Qfkuk?{)$DykrlKJMh$}LMTQ{S$>nmx=n z-_JXhZEKI!l0YD+;DJtq|7BLhv9EZC@W(>8KfWH0t&Z6Ye0aBD069Ii{OX2?PqSr= zx%o^!aVJ zf5vhV{n*+F#F!6@UwC$|*;>1YPeoT3O~ci2vD8ZUqK6#V2%tKLuYO?>epclW{Nwrg z!%6+=s=(g^4Iz1`b+u%^!K>iYqqKK!1#J6iJ1UJXy_yOct87BT@2Wwk6@Fco#aG+~ z`f^uu{WEi%5gV+0*Imsxl`tg<;C#uun&6+M`;XoH3(9~q8S7u~ePxa1rhl8Mua^Gi z1FZO8G30-f$r*w6h2Rs;x4KH;=lc{;@5{)Iz5O3l^dERMg_hxIU(@|X7E(pbQxdKW zh%x-1-2OjFJ~Mz)R|^IhBEG5)KL&N6K2U-G57%c$$`4UYf}$PSz6F1&VzjTmGo{sX zJV-B_g!SjGV2kFj_o(XHTKd7XwA*_B@c6FH>H;Z#=g{)XfHHaP0JkH*iMNra3DrO^ zIZ}L8`HlyUZPW@B35s_%R&?imzQAQkI=q)5BjLKZfT0x|jp6Gr9JCh(I%MKqqQ_$GUAjeWK_; ztol>bE9md;APo+xf3S*QVT=#FhF9q>1Bw5>pZ{~f-$n{tU@-0xkK_jc>pO-#%3S=- zTUo+df9k?vY&LKRH$)#C$G-lb|M?fjok9oS#H$~wK7i6dPaTZLECjZJe)v!B^3*B3 zTcbX+TXk*XLPl)=ejNUDpbNgHGi)z_1rel7b7u_A!F*1ufNbNZdBq+H88mUp(;>Aw zAfrs|Uuf^&7C}f1C)XYvxX>ACx$4Om<${QN~Ah8D-xp6Fu!(G)|-!b%aP!8S8|sK%a*m8k2$Zg1PBp_Nm~ z5au`Q;tvOAcutYLnS+D3BOgmO_+)&L9Dy!ZUYl+f%VJqQAf;58M_K?C_v}=tWfL;~ z?Oqx6U0r;z>*W2zZj0k~)Ia^Rq3-rh|~o8Bponj(%$rkwcp>B&n4E9|x-sxvrGSv<@nE@2l7 zCvuj&&s2mJGo$=r6T}ttft7V&jRd;#WmS*Eic-e|c}Rfgc+Qa@oZgn8?o9b2raY7h zxtzswHLct3Y?*pocx=i&qrSH^S0bov2c`};T#%iITDpmvhb4s$_4(Dz4c`wa^N-sV z7D+s>={$FBL!q#E;C^n${>|pRaAiF4RoUJ#aS?j;6U%9lpyf~0d{yk&%qdh=T9SCH zZuD8b%Jt-#9kWDzE1b>5L@H)-lD$~BMur0DxLRV@nj=i^vAPjeysQNkg`TU{lM5jZ zU%AtwV%X)9Y&d5g!UZQFfRgVCIki-CkX>4;{d|n;L1n5^Qf@6Ql=<^TIsxHZc5AEl z^Y(#GEDHoK1#hOC2f^{X*A3U%*)>ek($u|fcc$S3-*J8#PWXbwB>&+fBujciP7iMl zFNX?;{ zpYJ?YUh)<}eKuYZzRhuQ%HrZOwOBvM$FS^ZoaB1Con$g)gl#&}_66k55oObkFkUm4 zl^P}`sjHLHv$9f35iyXfV+(v99e-rkRJSo_Wn+^x3v4;S_Lr6(M#ILYfe(VObiH#5 znz1GSed(8p+GPz}x>8%B_!-bon?p|b-Pg0`H;4C??;cFdE3Gt}n=6_Wo^Pf7ZSxJ*}ej)+SWG7eU7$002ysu;JZ-_#SVj`5*b~kSc5|_jpiGDcNq6mW5)-8?B z58iCR){X*;--)@prqCwwsZ1}mC@Xx5l0J=Uw&MWpSHEMo5(Cdrp%$`%9cVc?j)K0} zQB~QtR&u7=J%S!T>>oEcFV0Vktm@ezdrzW;Uw;Bssk@w#u`@N0_49o4{pe7nH#)Qa ztZswB9Wzcu5-ptu*(^8Jlp;@{ zUCwH~>tY0}iWQxhuGFbbyBXGf}K2Wo)w%L5#6`lXg7(GSNowx7zdk zbhnPd@xE`UiRY(%FLj4pcEb4eH}o7OS(Ba6wnlxWEfBbtizVjE&I4U<5lz>9l@zQV zV;1WyLO-z7^$TM5fFYhDloS%IX}RZXZ|c#?YiwpJ|{O#ZpjBENu(M-KQg8t9N)%J zOMJHj?a(%;S68U}!EH|LuFvC1_HJ)OHozDuC39d_tbgW z%0nCy0k0y|Kyik$I=!XEY>xgUC+0W(%_)Kxor|zRF#=tZ!0}v9%eE$Y-s?z|+tVms>OW!hujGp@9Gn9r_a*T}@(Tk!Z@n`P z>nQsAPukqYZ4{D>jt-I3*m(s8i{5UXEEhylso_lIt%ufOobCs_hA1|?0jZr@+A8U) zW7I+bj6}z-lmTB5AAz3SUhV$2LM6*y#H^JIAW&-USDT*dzxV9w@Jv;A^q4)G)JC zEX;RT3Vnk*3LPE31kjnsuE#b(aQ{6?Y#%1!hd9`-_$*5bWCD~U5(%gJ`Alq{aJmhA$E!dHi;N#7_#N3?H*fezUP?RPOn|8x!=Z!GLD}aW zYg~#r`sb+?S5ZmDK_Q=iu*DWZaQtuaPECz!AEsD^|44jsk(G07Rea3-h76usFI-$U zCaIAUbg!BHqhBhH^0n*n2Qo2Mmb@q7fgh17^s5QRN=B)!n-?B5SxosknIciuM~#ot z=V354`+JtQKq+_QLjR(_R_h_(o zm#S3csmPUEuVD$|+U^%TBGxMrIBK7y@0w1YqhXA7%*ki(C?zgiZ zrgGO!hRb*a5l5B;QQQYed&`FyeNJTQcpfArvnVkcsM`|7|znwezJ5qWrrv( zEtGbztx;;N&zIiczeMKW@Nz`Gq`GK6e~Qk4oT;CryjuXtpPwFn3HoUo<3MKA&>$2@ zO~Y_th@^)&bg2*(4SklcuC75!^ZxzrlHHkpE=bbI*jNp}IcMYmjWkIXFZ^syzf|Bgm~GI*Q~EV&h^>383s}x&U|_+->ulmx)!4 zcI6+@rrZN-lM@nV*YH#6cqx>Wl$4D(1J}UQPZjL@I*+$4@lO5z9-!|DAzYO?<>V-{ z{kJ8ON&~IaPl%1EG0KUzWUSsj`FlQ)@Z~~c0g}Z~%U{g~F$_~H;xU;2OuhXe%2UxC z#aPD=UHs#c5-0UYq|4^2OBJSS@zDoIPsVwWT!7@4kV&7N3Z^T6N2taQYZb;s*!K_Q)e12At6&944iB0LpP-j@QuWwy= z_)>-no)Y%c8tK_N^ZLtx&apc3OdHL{e;2y`gg&dizp&N@PE~+L48Q0cX(geq8Tp{_ zIUxxmj;PRY`N3ESz>WwN%mKBB5?YasNV8?>)czA>e+mT$j%No^j`Tnx{++zQ2F!PG ze_zcAegXJ6kZx(;B#pl$JutW zg}jOfF8{Gme+NJrZQ##2wQ|C^^G{e89QoW*!0*EA4#n}YhpU?rq?w^1VTNReXiHEurS~4~*s{-Tv{UKoh_%*IN@u-wmSw zzOFxxcZ&heitU`BM%6(YYBE;VkA$2=0^h%yn8a3qy2!x!Pf}9yR)0lw9G}VKm!N4I z3aO6ToNB=^Oe}Fz(_(NZ>`=j)kdc^$Lk3;s_BIxWrj;PQva;H8#-S7rpL33|s43U( zs0}!2Y>{n05ubg?UW5DlDuZn*;{>hV0%8axT2q8j<94D4vV4FT5R+s@Ev~5<1{BZV zf4qxc@n{EpkD9Ono!8-#QZdQcD7p@g{E%}_yR@s%kV|v9(klF38Vf-+U{jclfsn;?@V3Sq4!VrW&1PWtqQN zx&K^X1~!~#o#$2@RA==Z{FZ znpIbWi(ef<#OUQ?9}}G|cwXjRm}+-AoekNc!UIjY^V69VrOnO5t>*6a{n8 zI{#Um|GkoXZZCYy^70&%ih`u1BqXVj-U>mm8OcLXe;i4niCjm-Ja3=hQc%(&;REd} zT{H`RE1o!)7#Nm_UldSNhGi6A$)l5MmVD9%V6i|aQ@=a^2F$#Y-x#iE%_-J*0 z%bl3Dta4^uaoNgj%+prY9F&34aeZ6$KPh~&~eB^ zRbs10I0R|}+ccL*C}al8Sd^#vL+$Mg^JI7*y|@f(olU_SC{2bl&#qLo)NvO^*hUA> zGe*|~zbsgiuiJ`WQhk3P*Qa}V#h!ot zgUr;S2|Ag)PZJ3ldGC;teNfHmB<(v1KxY+hPPvyWen+GwvA4IC*%G!#|#Gaz=;I; zOq%CX5HJ0+;wRgxLk=rpn0;hlgNu)F4rJUBIvJ44DKJ_D*+(u~#Jdk`-srW(tCv(8 z!=}aj20E$i_R7@7rgR^tZ<$E=n+jw9(gHC0QLxs*6dS7(^Jw6=U!$Zq1VmkRD{?j< zqab5`R*FEAb&mFY;G&!`Dw*vkly#i41GR9_UrYZMoA@EMP}_H=q2A`Z#&E*r?giJ0 zfocD2NM&}o8BRUd(>`WlkMla{Gf5RJn0TuDp+|cs8A!Hd&j+m>Py4EYD!$*j7E?0M z(aK0#-K7XJUr%T+_~N_8Qtww@o25sBI)WEV0Ui|E4W=qHa|V5aq>gy=rI_cxrAYs} zvl*l4^?HzT=n3yKO96Rfu8!uNG1R)poYi;;Dq(Qp|A*DL!7nmG95`3_A*f^?X_azM zrp^5GUxGtsG=CrACpTNmK)3XH9v*63}J|M?_i z;qc(#-^UjJiR2$26|ZN0a6tB`4@nUcM*9-dFK;dP4{tOE?pZmc_jN-d6P1G0gS%Dy zUd!4N7`(6ROY^=%vX6L_UT#GRaXxF(@?;-2EZ%&^bV+-`yr%M?UuAi!aLN|S=IW4B zt_$aO=tEfxUrm=EA9U}Dz!`$v(u&#G;vCHTMR75K{#>=Y3#%{;PArBQm)Eu@k3FpI zR##m$=Aira`i#ud!?8RXpVWh{E$Gsx&m9+IOaYVD!)mPBuI8CYQ**}564Tlg{K@k*(szEi2ZDKH3# zXht@$F*+{5)NJ5_Nk*6j^m&;|JCs>Xrt>S`UW`5Ly?3zJTKK{?rlqUxyk&4wcQP{a zy8poqp}GjWl-K5Qr`}=U9Lm6~jDS)klU!v6uSN4@YReD*>B>9$QpFBkP&>opfKqp3 z9#I*-CIBLeZ)NCA`^o(Nc?qr-w;z#pqY7od{@T^3zw(?vjmZ|&N^-c^oD#YPt?m7E z|9(7=#_Ep9jf9K6RnDaa`Fbn43Rg6swrkSda&`up6A8x$H*3gW{FK+%R3*e`qZ8D= zIJIY0VwBnv4>b3E@z;Iko+#_G)*Nz2Dbufp@Cc)J9Q!OJ^27?L_g z6YFUFYOn#8iY_O#3Tx))Vz=)(4s6y%s76g;LwG!bc@0J3{$O#xI~iXlO>Y}ve0@*+aSN+RYK>_@Z*tF{^*)5yVj5a8zMWH>onyd5dk_PgaU~ZKUM(?xn zi&MRafZ&kOc~iB$!*RipoeA!|=-9Lh$2aMET1)p<=hjbEj<2lNXsSM~*q58f?}T}I zM@TZTnUMzzA_&r#RPv2_9M>$~P4R_~tCGavXLZp_FoYD*uxexd5(5=F8%WV}HYYTTvCWnao5=q-g9PHWbHizWmT?%rsb)A{chT6!C`uaDcgt9mAoqJBfl7;1)U|#0Q@Hd zE2C0z$HRz~HDX;XjyONBZ^jL zj~7NOkxbFzLuM#CdnGox?`?H>G``xfT((CI!Qj40U#|Nh!I5Fo9N8H|MnoorHxMJzjKdh~Sky|M&{esA>+#doLe&E3 zi*|X?YS2o#Efn7U&6MNR()d@0`mt8QGNH!v!G%z758NZQRtQIS^OF&?76j!L9k!gd z<<=a}sRc*RryC8(+a}Ae=CN2$CKeWZm!At(WKz(74?w%Nfby?!GFFjEl)57OscZH3 z+z$~X05Y`u`g$as z)tPz9?+19cKKw0Aie`(a_Vz7R&SVM;PpL1ESWnwEKp7PROgQCn#fx)4nT=179*45Qj ze9c~^4K_4+Fj(it8@cMAVG+1ac3BTbZ4hxWG5z3;`Sd+KJ*<-PCwYh6bnzayr+QUo z-@hZx2h4-(L+xf?O-+4ROL-iTN;b~B@H8~krGY+-+p>7`a8>#hLZA%d^Mv2m>Cc}y zr~N|SK-bCl(iJ`YVwf*ADj^^uO5ci0N=BoSd`$3+;b8pv z8JfxT;rhsCf0C-o3&>*F4@3{Lv9&G1n@Q&qw41Lq3V}BU#;g|lG5tv8Qd!^FDA6+3 zP*I_5%?E{OFH1@%MU-81KbAlgE z*RRYKaKvMWb5%x@1@e#;yJML`Xn1($#F*XbV6loM!VktH?{GM5a$*TMY`V<|fp_Tl ze*CrIO=wiq)XWv|#MtxQs#d(8e|W*dN|9fj2ey(s^~yW?l0AUXA_p#(1R>jgdgc zU9fwrLXX3(V{pf><^sZLoJ0lM1*K@6wCObK|HE#4=vS*AfN^hLGAOk$vC{*nX% z%acTdH{~Y`dqX3d4dBm9h>P!iunp7!rs{^1xru>5Ao8#d#2@L5%Cq_T`3tw?(n+L3 z0mv-T9X_x_zjp6)aBysQK#!KVJzT5d%zIJ#vulB6N$Tz?+nL3jtTK6MsqARKqx~QB zLIw(IpkjOqnCeK;g<>dpdbmkeK|4kiE~q?bMz>om^)fOtsx?GeM~gy_F8?+P$VgB{ zyg!b^?ChoE^JVun@*05}0=ag;NWw5^H&X_-__bPv`sTWgEHk?@ln02u@ny+jeL~?P z6x8)$!-gF1>+MP6_p8u*7kB{P0nCm|Q%dBkcPIm_a!@1`vf1c**VI%i*!mBC5e#6! zeJg>JgzPhPx*WB@@8tlLiY!7>0bv{KvT|P_ygo8_!utBg;ag%9Ut%YVP&}^bZbBzD zqBo5p8qn5oS48Z314N~%U$(lB6ZF~C~EzVJfZ=>m&9`p>C^II2U|A0S#p&cN2s5!V@ zncsUC&;i#meNz8~93&gahC)hP<^opRFo(~yFLVEL8c|eS65Z`9JVZ@N$;dzvs4NC_ zDo+`MRux?ai+BvfZ~+@P@BLr-F9A?D-M|}D$dfX4Hic5WXRxAl*uCp8n>)rR90Y^~ zn`vm#H7oS}=sbk+xl82;^s%^0t-_p77dtr|h=q|DXia??0{~3OkV#Gcp({d&23?P1 z3;^E$(~^(jHRCd`As16ZN!r`XnF>u30Uhjl0u@ikyb0M{Z>_32 z&V>#w0t)H-Uep^HgDMh8-3(Hr#P*`h1f07MvfK(vgp-_aW+TuN_7=-lzXhz56- z(;DF@6WO~(XxE!fNyWg%EdzN!8@V^k7TXHnpo;}+Kj5~;&XfLL<@#5evU(49S>S1(D`f5c z$?;l6A6@-LeP6TmwMR1Cde|E+@Yp%(;QtSoa{+J`Y2UvySxmtqQUv$mT#20xMy~!| z1o|UOwLpSksJsm|X|6`AifYaG`q8@$prrM#eqvv;Jj|_%vtg_+DvX$MFH-FCa-3?-W3g9=wsGSbXd{TbM76~vbRJLxsQwIYxUkeHZ#YK} z4}cdgg8FRb$^8#pv{xXQ!=lNuM1lQ3Do1SL{5hpWS)TS6;9dLw)gJxdK}Gn3mzb6i z2JZMIJ3F{!g)5jb{4BEnII5ti*fhNiL(*a~y2p+|Gozprn*lNSXbz2dNjhf6Sj@GM zA>SV~gM-Gc;ohnL=-^S=Aex$j?K=gZz%Su*FCV~lClt7_=?qph*YQyc%;u{qhu zm|y<@?%u?Tf#>GhHvKQD#^1Y9l)%de2n^@7B0Ea?0nwh~)zzwAb~dTEy<>-e;wEf7 zBzohvvIxMPaVaTVUU;CBn_XN4k5$`#K8D_R8?ipK%^_6dRIY>$t z6QozmXXW-x_^a5UeSxo zM8%HdM1+NJcJt~=&yU#1ApYMBBwhiM;l6evx+xE6_WZmfpY-D-<6O zKew>3F&paVAcQB@($nkOrR?BP+SB{%tM86r=GhBb;6XANFC;QFwxJ>7B}_oAu(UX# z#~&7}_;JeA+&pFn_`O^zAR{l260*Te9Nb12oTA9x|7AqeNHubv$>c?JuPedm++EkO4E|BJa#rP`!K2Q`Z zCZe*j$}-zk(3ZGJn|+a@n}L*-np_G`!zFqh@viRDuO-Odg0h zZ4cufNBx|{O>KW3^4cr0wX}=z-S=x#3+1L*sQM!FM347I8w5a7Yt0-{5$Xa{be|oW zjE_S&Bhmi;9EA z)zvi@IU==YDax?-g&u65VmUsQe@y7haFd=bRink~jbIjhBeVuwfd|B{hTaEK8iX~D zC3B6Yg#IveHMwy1=zhnk;k?*GZH=3rQhEajK~^9|a&P_?=)&@^W#mNySw{TJBBP{T zh+kqnOAX|eb94gmoH0r@*v4Q9gFm1f!2wV|1JPBjJqp(2hLdzC$pS$VW*r8_g1>+; zcYQNRMXMK^lX!`wz^hKOeMmz9h0<^Hp0!CF^bGTSc!8OU#U5^~Jv|B3S9xI5qz_;c zmrdocI7p!aXKlVR``PHJI4%&Qc~Xdap6g*bmr; ze3P&M8;2&CrCpnzX+ulYd$n~n1IgU)vWm=?>%`6@aR!>Wal}_ovup)_{o2)aQ%&~( zSzvF^7OJYZga>>8u4w!-^1f7rep_+B9}cSdx^4^0JgEqnY?z?V6Hqu)K>Eg5X!AXFsNE%4lq;a1&Ep`3!+b2v~y(>`_)y8cedwWp*3n_(a`C zvMV70m_8+Ksu{iLssh-V?qYtyp+&55q|d(S#41uqSc=y!0Y0cQ#I|4vmm~p@j8bmi z0=Yks*5SaGlY(u?Z)C_6&1X3CYQ&T)Gp=(yP(G|w{>UJDWSIFLxsMNU?we9;%upRh;$LxFC>lO{#N$U%WLjc61PQaiKa`+ zj}V*Ln>0zB#E%Ux{fO#y#z1=Fu=uX2UBlj<31+KaLo+IFmX#ehNd1x9butzE>|f=c zd%E91&-JYBH*)kq?@uB+p4F~O+9f5-S#MTVK1z(MDTRQOKs7ms!>??&zeEqqpOJeA z6uF|;4n}X~OO;4WP+1mCcw&!-|JYrv(G79fr}cHvL!L75}gA;;pp(Blcm#*v`PGm2^^HkILqsY zK2#`-khe^d8(-R3xP-wu5s;I=P}QH@#N~2adn0u?hz}&o7DJ6+fCS@mu5Z*jxjV4_ z-+0T%QwkDB@wYXm;vxD|WKtso5%cmXhBg}&=?b`euo3uAtAu=U6w-ct;-p5G#$yq3 zJmmjiryR#=b6(@}o>YL7r!tB}Qa`^1Q(MFNUMnd~;S5~hYB6I{QY_gNt6xd~iJ<)2 zcug|xHObpX1p;nO=dQQ@^{=b*iyF3m`F4%Eb6*q3^9ITG!JiXhW6AR})NqWbtWo;j!@GUMI{vd>hBRD;GVKe)I}p{g@m<^7s^^I=?6 zLy57cAqw5itQgL|T}jyt`W-abYi~84QV(Sc6i(da75+Aj(}?@sv7$UGQ@hLo=E%d` zs%5(2+e&1ze=5^}fuqz*G`z)9-c zFPzzR6{MUaL|fvA_X55`(PUkBFM4gn@QH59E#9;l?}O+rIepr>7o`pU{{UN{)Zb{q%hY-LPB8 zK6QX!m*_M>D7oY6GskN;JxO?N>TstQJ)Fp+0vyfA^_2*90a&cr$vGkN(1-4*h|hMs z`o2WO|E9Hpvp}wIVTA(&Y($5fyK$eK z{c8)xDWh-AM&ZX@5UbM=pXwZoIZ)pH(|Jzi{s_yYg2%iaDZfb36r24Jsr7wH{YVk=)2X^S+aVk#v+AQ|?a zZI`d&?luff!q@Mj$*EOqD8Nyy3RT3*$h8&*~;VO7`RjHS^xa;m=zCfw?s18~n=0@B$*DN3 zY0=k4W?NPxM5ON2{HtE*N!?WzLY7$q;zSU#DvhQy#E&$inuJx#*KK31+W(6mJidn5 zfCbu+b4jQ)y^ zbJ!C^vagm5|Ei$2QT+U~8i!-6@MD4V%9T~%4++02xa5!1IYLv6+HJt%RpDLwxB-%@ z3g276sw_2+pmkT77h>fEX0bi#vVWWQ&ZI)$C>9awvz=BzO9iuwB<%Ur!)ebY>Td_+@8H2Rjz< zyBkM@=x{_vL{z$fztH8q1MZWqA%5S(FG*&?v4FR!pHxtQmZT+p{ln(Vi&`1N7>%{` z#2sk=G0d+nXax@*6*m()z8^w4cWC)E`@N2yi6Bcy4Fv_o_Gf|GsBuY!VA6io^>x51 zs-FhVhjoNBtD-uWwi>MjgY;-uY`k5W6p|sFF{ZXGgF2so#~fuo0!duBB&mp9DI|CN z#M;7kyc!e|{PP`Q^L8DcL%C#^kop5jmQ;H260soy=wgq z<_wl8fdrw^%o)3}v4dqun`{-khiDk*CG$2#^!;U z_1;f#t-9NrbD_pIhrTrlC(Y=E=N3?kFsZlt}-=YHFT z+7+J?dJro1|DJ{r=s^Yg_A$B~-xh>2#Jc-ROKfsi4T3Jrau2zZj|U+NykaVg~FwS}8OWDI#Y z*6UgXA=KV)9tXAUvbr-Jh3v#y1%-(Et2|M}z4y#)5!rL~_?p~g<-}v5l2TKqC-6@` zDBvzd6qpVzt@L8Eiz#;mO&gm5w(tB?quJk4{|T>L^8b#j*LXo;U)QT(Ns_hb?<{yO zA{@AYPPBFwL9-WgKGJ)&#d9kYGd7hO)<@?M#j;rf@v$>So%VwNPLNLXGkwCz&d)DR zsYw2`2~DPB@&Er*pxlv9Ef!nHtzi)e(c!Yk3wUALlo`^iezQ}wg5v&X9n~l0YsZnc z7gn>ODu#&nrt+5+RMf!#1vzE1Kz7iyBnY*{1acY`_$4jyHs)!>pv5A>T5R4SM{D8tf{e!*H#3)@@j?)+ym4u$xI$7epBh}6HJpx|St*Ddh?XoCQ-p)hy1 zQ8FPzvNi{A`*<{utL0#HQWT)|(6?6v8%bK%e{+LXgOm!}2gkjA$I>+qTg64#Wxq5K z`2K%miI8&zQh77{dzyFPTwmNMz#PVUGm$B}my zCj6%e7f2eob`971sDT9-gRlT8k8r5m{x-)x4xN7uEkyo0ZUFtx9~VI=e=I!#MbmL8 z;5-!ChtjGCz0qUB{CyOVnj#l;4qnnUoT<8FCTCyrCqnoPe;zq>>?a0lV;wRSFqIfL zFgqB1vR#MdoKCyn-lxL2A#ll8y__;F)V>4@5SUq-MBg@WBr)^J=E)GyFfmOi*k7l% zTs&Kb%-A7(|0+E~S9Ki`5W~u-t>b*9T{>qDhzhY~W-;uIJ7c3{nZ;qxsNSXT$3L-1 z$h|P?pKsYvX)#;VCsfViv7WOPpE~;)sk*jGE6-I|ThCB+;j<58czr2;KB$?JQ?eOD zPSLyMtgpE?PX1{i#P($oWDCCJT&UZPN~5BpfP3&TxD2kjTq?$xSVy=t&T}GV1fvM5Tcc zL=9R0~>0-iCve- zZIj)0dtSWwq&FaRdz+lou1yJ*=&EX(h|UUF?z0+Nwe4v|Q|78Dv4?f76cPWT9;&izacMJJiZ_hx&z@Tj zZ2QepTG8@o%+Cx=q&mEbi&r&R)Xd6rvy!V7TG*8`LtUIx(`KIr4wXY=Iv3ubuQy?1 z;@}tml&gI_+*jSc9jLCd?=-)#|1tOYFh`ppb=7cAg&>OFzcZFfj`Ur&`lkVv>=06U zD^+=0wQ?ZJK&5ADa6A)Dq++1Y5qF3PUwd#oaD3KSljW3aKJhcrB0HL}g~FGr)Tr$muI4_1Q1Vm=9jPH`{uK>v@~Y^ z&HDXz4~XjBA%;rZd>qhW9G*lM;v>b!cAp#Kiohy1v*aPHOU|$9#{|rgx+VjPwlVYfMG$86Q>@=GA+Myjhff^XW!v)n=PivHB2KRG} zi}`aTZ5c>uJRnhH1GA;7NLh|raRVh?AHDp$bQ;N6%Xyg=xR1lRREYcW7Fv=sY-BF?yOFp~zbd5)6E^+*ir!c*`@=XF zldRHMJk2+NU?yeNH4-({#B!!mV6j|$bUGZCiBfryqLHM1l73p8DNixLE`Kn_g{2gk z0fEpV|JpC}$QViTUSYbsP;l$pMtHDW>}CW4TqM-Ns2%luRC?yv24_;!m$R@@P-@te z-f?yyTKr{=;ir$ZF)>wdl2`$$%7Sj_S!JI)iI^%?3UA@i*cjwIYRnhg#&-JIrBx+j z994y(K2&Iy;c1LnxT7a~@y?;=jAuM}utlr4QbrqjIgx&g|1N2-7h==ksecT6VhtMp zD{Av8rWl{WNpfEG=gBLpGg*Y#(fx@UE}?vgFe;>KRm$$1zlg*U|M`YH z7f!BVS7iQ4}(7OZC*Qcfg*^Tcaji@=~PJ5Vi-K$C7(k?RBXvFUE1W{dMl| zY5%sXYWzeZcQ=-JRs8YABpc&)c;P5A`VMQe3MhsONZWiHpBgr3R+waT5 zh*^YoMib4~VzS(K+q&NcA#HgZO~oN*m-1i2$WkMy+@fccuj-Qr;g{{z9!rgRjjc(e{^lPTP;g!zgfq7pVPi8Ev>fWM$y_;JyaKVl9Des}U@RFe9MK6 z&iO?3YQWbBa}}c6zd5=FAbqR9&tN*{S*{+7&swtvS@Klafi}SYLv{`}_8>?pJ}J%Y z;n~QLgZl;dQ~=HBvxrDE|tHNcE;%>m$AsK^!kN!iL}X)Hg~8Dzwb9 zA89|Co1F1vGK$?W_H<7p6`?Ye+1;Zg9`CV#&#BLm%lHYSplCRFD_;eWZ9~*T&pge- zC)TQTTC>-N*q(c}wbWZ=9KYdMh3+RC=i}*5h3G&@RYMNw9{SvYlzO`s`D~O~K;p5qBc1T@X__K`nn0!6i z41^Lv{%v|E_uVpKjGg$DZm}5O*0Pu(8!H~-=g(|K<63|rmksGXAj;+q`l{TmM?jRn z|C+ki76LaypFH(f^>pBt6%=B7ITMpwGA<#lFyAxWSu?-Xi_G)mROHv=Oew<@oNe!E zajY%33k~pxD@k z*a0tj__zx^6SOayNmL#HhlBVCvZq|b?E=uI3-95wFPELvH1-@<}q1sV4Bd{Qj_Ma)$%9Z+v)6`+&!wr zpI-d84_vvDj%VzF?F&;}IL_P=s``z2b*tanXV^dYTWi1JQTU}@6S}7RNQYC1psk>x zPZS^wk2VSFNjDB#yRgHN7#U(xY{gx3@yhRYU1G?19OvCR3uwn+oXk74BG%EQf4Ur4 zOCDLFdDl$q2BV{_U5rnYD$jHr^Mn$P$M%Jp^_Xxq?C+{<2MA&P?zKF;jf~gX;{imF z2w?V@R67Zc769-hpxa^VR((eq9yiizJQCnF7<5Lm@G+V=>zcByERty7mWrJq3mSxa zs>0GO5Kt>BEl)7e(9u?ebc(ir5V~rqi!L22J{1?NLWGXGFA0WgybA7ya=<$mnfGyWR=wX#lnPsT3j8XVnUfXh~-ogSmsQ zpVil?J#Lp6-EfjW+ah`G%6e9JKah*^_;V4$d})Q0FC7%~4Bdc!*neh}zze0f*TIDY zwsyLuLXg*s4IyHN0pZnkxvkbHD^V7izO6IIrcW@jm(crF5)w)kW1%pbM-o9p1rM4; z0@`4{TR|c25X2*2jB}pKk8<)EAo_XkL7`ZzX`zeeW=>o&QN6=aRA}vny9O)pgF{#s-1Da6rT`$%`2G8?Amv89z& z3H~lcK({+YpDgz}t2oaxpQpyLaX6Jr$DmGmzz(8|6>~s5jXFf8GpitEBUU;QJzR9r zV0XOjgfJe^z*j#Tr=$zs+^FC_3FlZ^UO!iUF)vZk<}>c9r8nzQ5NgpcFKB_t3LooI zX9>T;AK>4Ga`8Pr_@NPF_3kXd!{0bLc5_te|L2JG@e~rs&Ie!gQgF}gVzlI(1{ml5 z5SIl{I<^@3dB??}Q^kJHGbrT4%5dG6{?sN%@23<+{i%E!w-5#t?RFeTaP=q_HoL3q z(Z@!HS289_8_)+2eVFdCHu#J3`_a7J*K3o+uraUA==Fr^hl@y))EVLA8$of&uRviu z{Hr8Y_IW#cku{c#iD%$g3MEYf-So})S=EW0kNI49Y)maJJ?fcuO3wYt(S4W>HOuAu zusf2P-k~NxC*LG9V8&WGt>-GvcJIdguF5;|gn2!_ z1}#aW^QqoiADTZM8Sp$a-3=`_7Vp+KZ}NP`)U#{6PcOWo9JD&7=8SJ#H^N%jM8B0^w)Zy@5AZBWLpJ9A+^kjUJUA+>f_*8Kddj6(k)TBbmr$K6J&;ZWdkdB8Uudu<~hUOmfN+Z^{V^GYE+sRXF-2;WI zSGIgp_Qx-!H+6?9k!5dO)C^*!k{Em2cs+I2mfLGx@{tD!4Oc@g5&J;*27gR>I!dLX zPMS^uC_HhexyGTcvMw%6J0@WaGN%MX60-5iLpaIx3@TWU*WougTJ0To^JGq%?qWTj z9^l;iZI2acNS8a$V}*%5Il<`V)^9$viL4`=J#96f*~b;7N3YX^jN!Qf2b$A*LPR|u z=e4G#Jv_6|8qs?<+iL4mpz5UAMO>c4M<{7W(%IxyVVrHWPqcV6cgE69$MoC>sPOy!5cH=khmV$R6@riGX_nf=#dnJ@dRYX87>0c^#W`ZSQkKJrx}M;3DLnccebz zBGYQ685ORU8xvA!xM$p_=Fj0`5MNJ5Tz5KLpAgC~mWXxbMVZV+iM6kW>DehLwTf$; zqU!&ut>f(vK!!(>DO6(>Z1;(X)mkyJZ)i*EEoW`13_M^Ci1e^d!x8(!ZqSjUO&eLD zXhlzTxtVfkCUd>J<$16!(Gm?aR zo1FVzLYwcwo0|HZq>dLv<;~7p8?NH*j9r*dHQQf4$#u?GF#jC7LBDy+ZQpE^ z{Sea^K4R9V9pcJ9mmD+$)P`sE+$K6$`qlO$;<_c7_Z7_y8%O5_1}LhBgeR-jReKg~ z%(N$@=VHzLGAR-eb!yt{&Uhltjh1}#?%O~*r!Kvu{Q!S@xfb8NC%^L_CDFJW1k=7E za=Vs-5HkhViWg%7;&Na;42Z0(npRTO*cp3Ld|3>X1bA$%>UiP%t_c&O+C9bu7a%y9 z3Vjk8#3Q+q0@uo7+48LFwD-12F%t!uf{%W+hs`|ETknMK-tQZNO|UfPz5aUB!*`fJ zP{&g;RQiWoW^ze(S|2f{bXMoG4x4%2?$Z)K_E;)~La~Y;Uru$>nJjCL4S8qS1S(gY z9SYsTJVRnjzTp4~Rf_uFg4e}}RVm>heE%a?z$zT2xA_<=cGfZrj!iuYNvQ_c7xle_`0G!b!ZN8S3H&!%bY@cC@K*b@cXwU{{?^ zxD&KM({%ix+W+eixF-UAv;lCnK|h4>fY*00J5s*8bDK5mfg}8Co7_m+D9WbDRtq+t z=r{F9SK}m|g~Ql)j#1dpE2q&N5vn3cjvJe3^?|*c9kzTq7flA3b%aicSFN*G*heNS zs3=_BQDi*b=#emW&VCWv{MGhJy;;7ow%6{39^4TEjc#a!GmoD&@4e9o|1PRp=faY( zbzZ#rfbF>T3+KaWmF*jhmWU(y9F)4E`S_yBDqH(~ULev>df<$a>2N<;9}-~fnQR9m zHJ3=XFZ2gp`rGv8S}lRhdAV?aQ%J(X&_|}qd9l;}@~06@j?iv9ExgU7zr9$u_6uu+1#2Vq_?$`)1Hpn z)beu}!$IDW>fYRoo*~!wV~i@LoA{=)Yxr%B6$8_h(a*VQUDZ}ixd|#QnZhdi) zX#Wv>M=1HGQUvNIR*D(q^B;6YZyfQhr+Rnh4Wt9D4-c7l%IbIR)j;;VQDxo8Li`Ou zq636hK?@U;XnEH7dzJd$6_PpA7L|5%4h43;zHsvpSLtw$<>SrlD+}i1Absbqz{;sS zDQjJto)O2*Ue}zkISM$)S}bSTpu}6%>KjQbw6e`_9+{>pl39LC0LT0&1gEh|wB~C} zdk0+ODeHzD59!0zF!C6~i!!wcih9#tpCv9c_P+1C-WP3TZOZR&%qL$ky0 zBbG_#|7*i1Nru`nI>c7iQP^wiSJhTt0LVzh9T2IRMs;D{nXXu2T%hmNGMQ?1Q63Q< zS(wr;9_+MS$npzD@ViE^*v_b^4j8UXw|+$tyw$Ms8wFfMrqc~wW`7hbs6-gLE>h0Z zAO7eeKMe-njwp0v@MM9fvz^cV;ck8++FhunRihQ@BQiKtG~TC-asKik#Skq9stg~@ zSgr={Vn6%gEZ~;1IK+%r-&dJd;Z=$jZ-ApbwO+#&Ei8`S8Kvjg9T>BF;#O3=dc9#*Uo@bRn>WA`u=6DCFsE0;dUmm0) zH-mXte@_ePvuX+eXD++d- z@XPg&`t=ye^H|Y{$q-qgWnJtl|FoV^-@h~?Y1Ub3x1u0o{xmi*}*S{;u4g-j$f=38KckY4}S}u1m3UC4HIx{!(3sodKI8^%I~@0<#-($Q!OCF%`kl4;C&4 z%F>V}AXADl{9gN9i9$;L7|7G3kYQX^y+ZH6VoxbCdtS@wRBgGB3|9NQGmSO^>}~;l zz`&Pj0)x8{hPzD)iCwLrB48i}vQA&Ny~(p!d5aYL*K%7EDZK)pMr4dwF>QXewpuI| zApO`C^#VI?btanhPhG|zBk4@ay^;8I5F%c@hBlYb2~7s&*6%}ru?4|CZD5nd5wBv? zj(#2svmXii8Rc96<)aHfpWH|#;oqRHXa};?%A1(?qk1_&vcrd9>6wjEfaE!8%#jwb zFsEx{L3>tK!?luUOGL zr>GmY8Bk$rb0hX7>B9_daIqf#0A^9Tu*MyO! zdrWSBL_3Vr2;*fF4=il!a3x3FDTXILFkp37p&y}0faN`|Pqb1chCI#%B9Jfw)KYdD zvOYm(meW+#<)X7eZnZW;9#vRc7B_fq`>7*e0T;5Rx=KTN3BM-0JVEo4s4%$Nk)_sd zwFk5wI}qO|OQ(2d&{>L2-)!Zfxgh8hJXQHC2?hNsP0tWrUJNO++8x~P0+Wqx`+_{V zB;XBw0l;1++AmBMo@%X`si2fm^KI!~u-e+==gnE*FPlpM4^LEw1=v>zCPIG(E0CIR}~mk@Jgn%tO0*Lk!{QMoj@!%Yv5n z$Z0A;*i&wH^5eyoM%(`7mD+MdLFjruon@c@7o!JYU3RVCXD|uu#p83<^0sf)*Pz$! z3@US0WNK6&4NP>)sIHz|_wTonYv%$nzytq z9XWGxfiV`BA>CN3e@|=S@RS|D5$w$ji!b(JhIegSiY+msD9GJxEdkN?eCY;MN~p_+ zi#ByIl*v=DHdf6>%P`-z{|0<|;m4IZj8oT^)NH&WO}xG+En7<; zfWM$kllGG8wO8i`*4Yl-I6SyS)z{2iMXI2=w8`*Wo>Ss0!*QAo8J3iRH1Ya!kWquq zury!ygLCA7*LA?G~z00Bc$V> zV)~dNjo&6yY$eu?Y%_#L)V&>r)4K$|cc2~P*YMa@=Xrl*+plztl;XL4cgC3Xu~q-7 z>)bs}-lkngiKoc2$z3;LAONJEMCeB5$A#cnhE=$iA$X_9RrH;(ED^ZFO%>;HTr8~I|&!{!nn8C zoMb=-qWp%|x4%+@8!Nkc)s4}*dov=i;jnvq;mqz2_jbi*MpWL}zMH)2G_*zrUl0A< zROwr+uA^uDzIlmLD~#;PW|MB9Y|ox$)5wMpLPU z*&Ku9oMVL!rMCXLhEc(A=)N5CclA*eHT?SHsJzyPX}6-;@F7nI^C*J@(ZP8xNe5nF zLj2dQp1`uCWM&+0+>+B1J;~6wVEn2t{nzYeDH`9SIx5J$+fyBD@2wWvB$IEB=0Xde z=ujjH2tNNO)DYmu>=+t|=q7Z1VN(#DQ^`-qzpor1D(uxJ=P6rUTmoFwrBzwI_)HIa z6Mg#0_;+|B*pcekJ3BL2u$b%*Bm3^^V+=`@BFwv0wWHN))jZjB5{h3U$A*b#1KwNy z4#~XS;fiS>nGTBPIqA6g__##p!G`!jJ%8A5VkE}Bgv+R#<;G7t7L${U)ZtjY;s6oO z6;=3~xC)2g2Uou)w6p%?bc^b&)xt4QYF&g9h}BD>7Z_MSb1$u#hEZ(u?VC=R;;Te;^(AvMIB9%5>QUx@tVYDc#Pr!*>E4To{{r_GSbgMJ|Nr28&-v zSd9?UAfA@x3jx}C!~RE_qtC`kw2|cK#L#CA@_iRV`Wpxfjc$l9oNiq;R4BBL@Ml0*5xjbAHa@|rk+eR$jGxftbT>LzK-Pl?vj#^vO)W5 zYX>5-gG+_7oY}f+bLqgS==34;erm5QLcZ97({6<`@|}#?R2vTE3ut&2-?l$Ox0KQA z!7HecX7}%l5%K3(MnIWvSU^R*41_AVZ&0^VU>KOlHdWAxX`T4R_1C!Yx1hT6iu(Te|7Oa}#T5ewubkE*C$Y>EAKQ zpZ{#L`y7^vs9Sd!MRQN1gM(8COGD!^o>plWuh}*p|H2W6Hn%bXsu;Z^{_-YMmi!q8z zOG~HRXe9Nn8G#O(>fl`5--{CWm0NJd0rF(9=Hm9IBl3Z+n$Gh5$n)>d>X7@Ock{E8 z@5Z65;-GdP5o`njd`N;|*HtH~2`y~rIg}ys+@-&O46@qwjgGc@bftw<&*%;H9l9}= zouHuLpeB^dJ9Fsz&k-s{MpHy4%H68niCpe&fd zBLl7M#4C6dU8nM-71Y%~v9hurFNT|O*nek%|2{cl3sEpb`8cl*zUCSrM?|LeX?RxO z?(vSNlSt_yL{9U^kdXMHh!&JPAdCADTRnqlw$;%oY&qrpK0BAumBJx#fH@NOtKJ?) zMZ4E>!3NxL3ogtb+~t39amsLCahPk|QdZRl?PQocd^e5#TYio%nmLvGvBduL9B$Yf zfOS+y$PL)9n#)z9vge?$sdeZ--r=<^$dx8?19RGl(z1#YLcFE+6{!ZN#V2$>`?vl; z)APF->IMc8zj`Euhk1tUK9{C1T7FrQR$aR^S8Ep}a@`|syayL+19kfrJ8W)_S8O4@ z>xbmU2q`Xh$4<`I*XNj8Ip7|AFCnfnpt9!Un3ubZm*{9RvB3iQ>>P;DSjX*%)n!O? z^@EkifhJ(1E8tik##LHO34fModvf4Qe2V9uxa!)XPd@f@5-qaL`Z>GT1v@3COAS|> z_Zr`Mw_()DkjQ`lJ?*VS_u%h#K~b`>j2XxlWba0Me_O&3-}Q@a53`KL2{$Fs=vbC$ zv`RRduaW9LZsLFjY0BfoV<{WW^0c>@wejUG8N|ooCTUd4qJ-}^->voogR=MSlkU6i z;V(*4|0dnz4#L`g>*z8J37G_5hU4=VEyeJ~E>u>FdtUVgL5y%URywrTKAW^okQL|1 zt#LfvRT?>n>ov!{#Tf{+Xa<3uQZr_~m9>;|teTtn<&`>{Vo)A+!qs1Q@kLu&T!JO;65)XTKr7?SS9TOR=_Nd^S@Kq+gFc^7crR8T@LE{#%2%oG+cQcg|RSwq|CXmIVc zQfS*A@7q0<+8DYye(xzgAp$PyjRa21Hpj_J@kt`pthaPvKRi|Q#d&*uGT&g6J!GalHfS=HH!z&U zq9{uI;N}Uju>n9VY0AbLCNfyfRCe)=pDqIR-&p0`94%25tCZSG(vJ5+JeyWx`1U## z+HrK<<>^~ah3YS@_9t`8%pY&hj+6a@pl~xQcwo*UhAhDSseEqXc)FGO3VlEKTQXvx z-6*FR-^0R~gtoT!53(>ps#I&=2d7DKs)3Z%OUgoGO$IB^iv-QlFId*fYb+SyXg-CkcN z{fuI=2o52=1|e^PULPhO_ArlNKQAT5m5=bmmpBfTQi&uS<@2GhnGtY}?Ch#r9?yr4 zm$Q+X*F%{7A$C<9*2P7c^D`%f*#FrZg?4+u$dt-3Q0b!Ue0}o zGI3O_Ea$>esr`~g{XjzdBfzM`H*2q?deqjzI`dG zyLYwKElnSU(|#MEW!?Fj9!)fU?dAE#*MpY?sXU+m-U%hFY+xI-}gikwkYP%qG z>EmAAAY$}9kIm>u^STx0e7@aU>4sW_G!BcBLczovsA39{8D3|RC zvF)N8U5c0Ilb7Q#bw(on6B@19jgZ$TG(6*9UcYR>?_QbdJ|vqV1?ILtf*8*0y&me% z(Oyo`M*X0;^o$=PUvAOZRdDb1GX0$vou1d6wtbNptasnIb+tSlStZoB9$Abwgsc(c zqIH6WiSMH{9SwHRo*zyUUhd0ZY=`jOs&u8Mof9G5bQ#|wtS859Hr5L6eF@%U9uJ#&!Ma_c*VxK2`P++0B_Ax&`1+M7g{?tT8~| z*$0B0-I-HC#N#MrxMhtEz%I#yl@m{=LGJ($G=|1)%)4zW{!e1VTwOEO2W}FGWPe4Z zjQ)uB4i?}ofghKpa^munP}uqoU0;59v2|{BqL?gq*BBGL0#M>))!({}$Y}ewBXH(znv0>-BV1b_kiWxfh;Ys~_n1u3lNtYSi?s5#`3f5vB)Tb*w=9jW4(z+%SJ=i*u#I$BBaIEs`@{Cy#-WMU)VKHccXMl zOLs_#0#YI%U4wu~cXtS=q`)B3Al+RVox-8s_TG4NePeShEg{?~skoOOkXJNKUR zoagLk@BNs)E5gSwl>&zAKul2Nl(FxzrswLT`E^Jps5(du10Q{lSw`e^#yPc{91z;1 z`CV871BejU7bR@acgL9v&y*y>8N-7e&z@6g?& z`2cr5@$$V_ndKQn$L$vhFWdiul{l72qWf)?y+1hDl?GPS>X?|VM_jb2XHN@NgdOci zb+Smzf}EIlX#uCi)XbuK5thz9P5$RdqKpK`<1wAgXwvtunJX$pAyx~xW=ix!0w+B| z^jJos6C%`za$Ft^hCch>oX%m1P2wB{^;?zDlzr5+ml!-Yi=6!8A8q`LZi9-O@Y3m= zcNss~Vx$0A71Tfr2`o3mL$vi-B2IUpk=z>y5+(w#w{K!XA6~(zCP1Y2d1`iup%h!T zZ(+0;WVB0bEJ%=^1twGmDjXdhE=**i4LT4e6F9OhKX|W)AzCDu{366W2ICDfKH1qt zy5YFP4B(*1|8x;oqC<2wjo|~0?h07EVXU04_eSyg%Q*CP{5 z2Jsr3b&P}kJu_H7>HWP*1ScIYB>SQdT#Y@cw96saoiXOnN5)?3Oy~1AaN|0BGRO`= z`AbyO&^n5UH{Ddu5#B&I)=&6_rw9Y0NCWNsgW}6HZRJT2&cTo{stBE~A14OR3AZH* zI#tZJgE-nl(+SMVO>S|}z7xtJk<5fah&5wr)d?SpQ*A2R63I+Wb8}}iPGBq+H^{+O z@?tG}*7g3laev+?cEVzOt@OVcVGmf^z+x>$&kqaRdub>^Kx$Iz7t6!e>{qIeSc1Sx{_RJ`8^9^mxl-J0)=X zi_*T0aBqxqxlJkp|6)<%tt9=#r`3VfWWB64tRwWP?%WNGG5K;Csx*xSZ1~CR*^6+# z>eCSo)dq9sA>__z@|u(mqpLO|1#$6Izl(J{QO1`#w4kq*2%VHdoLy;}7(#Lps9j1v z>NJS(E_DU683JXzOP4_WC^Ggg^H3$qqN29nOEwU(&FVY51@R6^N~bYADuNo&xp5q} zyM8_~(55H#;k_s1Lv}{Emz4o~@!{}ZC?d942C=u@BGU&$<4zYIV9)m3Cyb9Ue3RJb zIRNIC=;e&l=W_4m~gTK~5JBQ^VT+^aH2TL&L61^oxl|ut_)4luY{eW0X)H8#6pp z9G7;wut*rE&U|dGSOK5lT<1h6$Z06>`oa@j%K$0fGk?m_9n3-nUTQ}$yDa;ZqVaJt ztR}1_5c#AasN%azhH<$5O$MHmV2vPKc3i?DhTp>S#^x@H&J@`;RVEJAkJ?dLs`e>Y z%gP_q?Vn=O}+xq--dHIx=5meASPyzcs1i3pSco~{$No?i<|G-J3Sl^;}K0 z^JK#DTL^Uo`J~@mt)@Emu5`Gd9QNmjT=f+yu5!L*`Ur}4MktMG_gD}VF0_lMb?)@F`#wvQS+@38%t*uWnTp>>gZ@OpDGi1^1U>8v^a{jyF~meeF2=X zEatggGv3JL-}+Oc+yVFPA}vjIZK7!{Fsdn_Qx*7(rPJJyv!Kffw3atLf9p`bOa$Y) zVoieH%oQQE`JqV;F_!X1khHyU%s)BF0GB zdHmc$crlgOD&BE}#U9XJs+$}di(}{p&=_mS(2AH4d-5PG_q|ulJ6)B!^t96O9+CH+ znBFSHH(?FjTvl~A~#mRL}SPr=`6W({K7`zQ(2EVz2mSA;=zPQ-^qtcpDz^+b)%ls z({sNd*^-AzgFU0##@k?BP}2PPG4b+Q2Q>{=2B{q9batQ1Vz}_snFS&~(F8t<90P|+ z$mvLmsPjxG5~N_k{B81ej#6S@`t=cuHrg!4UT%>4{S%*#WLpnIlPXU#FAzcJN4XwQ zIx7eE`Ktf5g*L6}H&;wsIDG!5c{+s}jcKdtcp(@c;8|_kzjdRF7C!7k@Wfa{2h(4) zn{9vCmdMCQGNFq?|?D zAvJcYn2v!Dr(ai37h%ECk$u!EvLGGgh^=SexEpiW_d0?SDF#>|SOZcwKBBvjLxW4| zutziFl)b5Y>@|kJLF~s1}g1nT6^A}@vGsoo4gb+(w-y=1P{>lc7ad`t{_@;$JDKaj^r5zGn z_Vv}duu&G>*|=X~`=6a46ueEllz#lS_#$6JeFa*sj`IACa1c#upnuoB@8%Gfo}`iQB;po*+^xth_YeJB}_H3KGK+B8x>= z&65j)$*D0e&5Jhk_K{0`cGjw^5UQDy61k1M6C_76^Kv?}=H?X3 z6QyZUPCS(ZT$G6iK3kNdZTARWm+^erVta-sF=o6bL&;ht^n%tmG@=I8zUUT293VjJ z9R5aXyoJLb^NmKE=UF=)nkNb+KP0n!{66^MR4_&#pb6fB#O>5Cvip`N( z)~Fci=tV6|Es}*l8S%pm8`~wKktz(h9dxZ26RsxTL%*N3gk4?;>@05S2~1=gmL4vx zgjT5Q8zwb|noqMd$)R@#S*OD$&)^Kd$a&hZ?->L;HitmI%MMvv9(`-gO{Q7t^v0g6 zSCxWSr+6&Alh~1R;kiZM5dbV5u_>xduTBAL6!VQbVBtq>GeINpz$CcLsopKyrDS3ClfTMo?x!|>AophQKY_#BV4}Q zeR(R&eev4z$6R0(8QQ5%b=oaC9 zURO>=5qfo+W!_$6pai5$=Mi~wX*CYmXif=|bT0^wwZ6`tQGJq^E+=}@-*Fu#b>6GG zVoH1Y=`ufTUg$67BqkcAQL=dj6e6SxfSE69cV@O}JYs}1{UZE4Iet(<)P!t1jW{m8 z@%ri%kCqvaMix8T!}fN32V3BkzS?o#;Xhd(kPGKN@B0YmB`eb^on?htaah0LCPE_$ zmkPYvXRT=6<@se|ZsM6w+28$LgbQI0t#aXjBUU`i04|8!FdLWuL5M&(nwoRIFUXgT zEOzf}M<){4ZGl$i#eg}QA85Wf*}i3x^W9e>IS6kU%@*$QBEJ8`w*K3PWKV=Hl$*IJ z1@Yo)Ov%`dRTZC$COu!#rK%+1;QoZyhXU)E3XUqjDi^o@vncZ;y2CqMC3wP6%ifU% z!!n~#S5V6W+Xc)@@K$I&R|wA!5?i;7KKpEFq&sm3bZqEQ{-bV567)0xFz@SbRQoTA zBl_(^890(ouMVhrWoT3IvcD?wCN2NKGe0Ycb5&2*D3rp|y#J{@8)G6_$2Yb{nAwcVh1IBvghcjdwlV6++FU$ zj@ab)*3dos!p5~&T!X@?1?S|6_;&U1jFYPe?y!eBqvu@!>#;x*6$VW%bBgCOkGRi5 zCZ$OlT+?O~uP476YwB{Hk&?{(B(aY!;UWKZ%b1cj#yrEv8iL_y^N7om?Z?>T6Pzv4 zU7xr2U5R)7DNSYwqm-lk0Mk49t>Zo(yK_PzdynE|*LFZ(kKSS?x0hL_q}xGFuQ_^N zgkn&n@s>j2%<^0`0+2+TDbe{~wO3L*+N}hQm-Cb`FB{J*5A<<-|JzaY2pk|a=-{`` zDLZy6tPX5v8ag)^Bd469`PO>uCkV<(elZLV)DKAvW`8fGeG-Erj`S;W%^dfYfKfB~ zQv&#eOXH@#l#tTs9Te6Xg0Pxo;*=$-47?YFc_9s&vi)B5&1BkIn{Yv8i5y_h61au= z6`Dm;HfN?9`|%HeHbjepC37ON744QE_h)nGgXFy*1+Y|odAZdtTTV=Z9o zs@&CAV)tU;AUjIU%g3`-W#!WH1HgDnFXvl1=hNb*)HUvMIrGfL?zZVRchVYHMV~GQ z2C|_s&3Q{i?>S$)h*_3QC2p~df^E*ycyu9p5-5PH)y{&d^>D|1rpEM@P|FvZczPYF zp!KH(*UEjag{t6?wP3FC*DmwwRty(&qRiGqQTgN%41>G!vyOyyL5DX?cLhMd3uhtn^MVX+6}32Ozshx!gDhE}C6a29*v$V-G7Exsm%-=Q=QehVtK`EhVRm6^J+`O~X4l;avV{2DePpyI`ze4}X=D{dD&sf-S z#_F@A@mL=pb>{}%U{Kj3jzR9z<(Qi4(W+V>xQSB_zittw+mZQIz483P_F7`n0EqnH zhdZ>6;eb#cBZ@ON`OFevi80y3#=yM*(QG{rE~XWg-K!&d;M4ro^o7tTAyHtj zxDY*_c)E<)yH}CLp**%R@gs46Su2X+fK#V6%S?r93m6%Sb))#!+{)3t(?867;H><< z%wgHRxzI!4l%FYCC))t@M(-2q7`EljocjD1Q5nLL7AaVT&0jCx0EQ?mKy!0gXV&-U(5Th-<<9gH*F?Jg0CQsb*}(l%J$f&J!d$)P ziibJPC5H12-DT0uG*s+&o!h^LO1Fn2v8k7_bHKLOh7y_1UnNn}bqIiP3El|(*F}rK z7|A21jT94G>HYGw!b!yMhz9B*4p=QaJj&TG>|XtdR!qZSib_N_h2oJ)HMJVud^__3 zGgax*_+y(^>ZZBS12=zVh+h(8a@3 zYqZzv;Z@6}Yxa`XywvAnYB=AAJa&Ha8?yL1m%X*|iuzu(y zNtUAHZPNa!N-sB@NA8Aw85rakz1Ls*h#Lw5GdMRZtp}|~HqPWVEUjLIE@&!!BWCKA zx!`zBHMeh&AiO!+bh=d9QL+H zUn^eu;r#G;N!0N$mY0We4WSyht!Ja(+cl*k=*kn9#w;^GQfea_vzTfG(GXBtPSct~ zxZJgX?xRr5Tz2QwfB@2PI_^Rky_FTRj7TX(zg z-R4h^4Z(Oc-sc8rU z$J|~vuwk;{-*f%(xwQC02D5r)K{!ine^pkw^Gcs`+c>(QQOh@9YQKtctHd`i{9o9T zns5{5JW@{AJcMR#B-=Ea<~H7*A>m{x_Ilq>ERXvdKVCBOHcIooOyyqgCZ@>p2X0~~ zBLnmS)`QB}T(g12 z_3L3oh4$SQf~y2nsreJ<`u(MRa|YHA{1gBkpF~vBV4A7W87VO>jV2e8Pw=1RP@!8re_OU%pv-2^N~`<6id`wXRD zBN@niN+M+XN8I{z0IDYn-{fb&)#*GI{0t@Z9;O001-~hQZbO zVG}B^0I^|z5`0czK{5&N3Bt)^x@B>bk8~A^j4$`pwCJ?=W$`yt``d4t|Hv_V_q9Z- znc^#*)&_Q~&F1Tm(3g_o9%wo1KmpY=_@}6l;$OQ~0&Jx99o(M@u#7_i5DZ}{MyowB zLqf{;ysx-!Sy7wYPG-<{4t_oRnIYjdGOZu+e<&4zBJBk_b7|s~8Ge>8r`=w(G8@Q}#_nH37iMvqF z_+Kwz2+R_3d++;yH6aNMe6ZltfhX?~8c9Yk(11IV1bXx*yCYBm2FDvA4*Ea{V_Whb zM7)IR-tYS_O^b0aKen*Eoaf~eZ}~8)C_cNlV{13cn}ZnJ!v891q`=h2P2~UX_)+?! z^w&%CgTJF5@c}`45{5*(9|dPgNu~EGjU!rSfJ%OCqvHDy%dSuyQ_72}xj9Mc)rjwZ z*6_9k;_z`B@iXxW6mMBx25Ec_y%}FP`XRi!S1)Z8Ta~5${=JA8 z;j!Yx?MLp=3TKON1NEW2f4PFv{sb9-cYnS*Km+@m%B~;>l1+ZTz-9@Z_~EE?LM_6| zLggCL|4B>%S9g2B4*k*)zNWUZKC&304)l8CifXx6K>D(KG3sTKr)>Kfs_*L%pp%k= zYb?G5SIKeeY2xdwk_UoW)Xz79?AC%Zu?{fa)Rk~9+G@Vkp(|^y&@wVO38ivf!6{&U zsEJ=$%O%IJ{qCQ{YY<~7Ai;tqzVjVJpvNq{yGYnk+<5D+9|TdrIiEt>SqXA zlAviJKi8xWCWCqyNeAok)TZ^yu^?sjVOWmI)|(`WY_+~V#aR$w-@(!J`Q(|3W=^qA z%>XRjW5z%?Z_aQi&^#QfRT{g|=VamWkc|sWYHUc~lziG(&+F>6LOA@zz_lIQdj1;u z;9|qI(&SKxO>22<F|tf_0nj4uVxN~r)f88}^&SGw;?HXN6R znSJ{l$=BqVb;~5azFH&lynLJ28)UjF+BsG_`+Xp86E?2ZWF952oW61KMv1_i$L9TA zHWDK(jI^IpFv`%NubOnrvl&Nu^BlT44E^Izc@z}Db*7=3C!jPl(0NAZs5dT`PP1-<#w+LAT7A5YtE2kd;u<@CYnYy{->e!oQWJZ6rXJQw zkw$7ai|iNQ*$)sX(v=QI2!P(EalQWYjepM;97-gwyeQv1@Wz3-hmuKwk&<;&1dZ-C z7}IX1Qbi(1(R}eLdxlSngGKxxeEp}0V^Z;SwPte$QQZZTRdrA-CKP4S7qyJb25Vl# zGDSI=@5iD|KJ9i?m4&k7oOZrwmE*_ad5Ga@gH@cP>E_CT(m=v532*ZniV-Zidm_tv znLEC3b0Xe3Opv!M(1y1Bfy)3wCmpb~Ify{17%)9hmNxJv5pFTF(0knrUjrKT^$yqvQ2*%?40k8tb-cV-i*?J^=mHM5R9aoS|13 zV{h&jLI>v2TjVpOs5e{3YS_BcFmLpFt*NQix2!6~4LyPe*D4Q@H^1bDbcqSd5dRJC zE8KxWSJV{pz#2~=*Vbx+$8JIMCoJN~BgtCf1Zm#`uh(q++Su!{Qt{GOA=Bpmeu>xf zk<>T=-dG?8DF>GsFcpp2$0{sujyfwwzSP4PBe+VGJ?o$sZ%_|qRv}$?lIE9tOyju1 z1g5HeR%3@ErFJ|PO~a(3^1brau~(f7z{_SSlPcFHZPEHysOx+y-Rc2qXc+xoej&-e zVmaAzu%tTEi7L|l-|kHW3`kyOSi42rD&8{(k~8U3Qb$Be*SRW5bQav=ax^|msJc}q zAL7^5+s*BZ<4mJdnB@nP*3pKuybZVQ=2nZf3oeaEaaB1jS`|Onlz(y9ER}c{Ij*K* z4q~0I@GjeN7nI3;PQi^Yev&fdaS7)$I)zR_d=vFMbc&K|XrFs|sC<6G9nI;fTiUeF zC2D?cAi5b(obvd?>DbQ8J%IKIOc-fe%#crx7x}!xqnFQW6+aHD&f8N zyGoTE`WN2PU%JM=USkNfc`i+x3_A88bU^!6&UJj^PJf%pnD~ZU8Yvo3y&U)3Myl`WI6UHC30+RiFFCH0|y?giD6b}?{pv%vdZP7~wgD%FFU^U7`Z z-V3L45qC!_*u76%quqI=hKFBRrD~Xgmcv_VK8?3pASi#@_xX``=yW)>x6$_@n4e%{ zO1Vy}!5hk=>}$;Kf#)-uR#Z-!3HJ}?lm@j1OB@TDE188xpgF5)9I_WoUweruR{H9U z>8!`>KO%2zyY|OUh3+)h=;PX)U6^E*^d6Kd4S;PQx%GZ()LU&xIFAxzr@Hqie+lGD z`#S6JrAhdi_Lz#=AirF`BZkU~Ky^M;(4hQ-OJ#Rg9L5{8IFY$mHTn8NOJ@+CsMix% zZXFwE=O&(hqRWgt6DV8m_l%i3NW&>u1nYCq&J1a{0wf`|R;dx=+*FZ;CC}l8cy6r| zl6SY{nyB2<5diOZLOtG7yxFU17U}-|`ZM|uAuySV$?Eau_0Of&a9$IA9^ZOG zkBf#x^ZgG{m-GO)q^wQ&pw!`0*Td)aiq4fnuf)5OrB@>@AeX&!e|80JdyESa3Wi2G zq0W1|5^#|(!Ir}W;NAICJ;S5+Ami?6ebFej^A?KNc4B#5$e~$a&2gW);GP`1MzU#QuAyIW0Z>OFh)i4Ohw> z*+c>^5x3`sJ_ldXL|<)q=r%bPO{)eN={&Yl{%6n$h)?Kl#SfWnQGcp_bb*Ts8BMVK zFsd!MuA^G)ORe~ZK{S0MW=$TqgbX8HOPLYp9~~CK`?BDv&kwbKnYmV-T3*Q3Z8s&) zCgSj~Tl^)i{7b0+9JCFw3|SzP5PTXR?b%SQ{ zr>kH-CTFQo0dUHBj&n%0WB(?@ziCFH1c*1K_86|ohJV&lfJG>PBzlgOx$Ow(aF`fI zO|1Y8%xp$8tN8>LrD2$t@%?q?9b8knhF4_y%J_USp@HnM_=Je++8QNK-3p32tj>{J z;mPlJzkQ@TLD>uC^ONK7HlgtL*`oU$CfZ_{7N#Xax9HFcmPL6%nY(V3d<7=O)wQ*~ zb8z%gY0Zq#{2hj>~7Bl#vcG`hA{kg0m}rU-IP z1|}xaO|MftzWdFLgX_OpV8%FMm!T!%~{YEwvB9hE{pGMHHr&mX7Yb($U-^ z%;r7V8|C6uzLPwnJ!gP$@@e@6I9gmP%H<`-MnDSe+;u1vhCY2bjrHO3xOispaJs@r zio4J@uEJ@P^Z>x2&nx{zm$bNbSU%Z{T>-eIk&sxB>kHE3pmVT=d|W4CrJtV;`2ojS zqZ)quxQXYxj{|&4m-532rM_{(%_go_e8cAQMZ2^ra|gvY&-7>Py9ZB~nXNrVF6bxF zrEGn}e=b60@^au_V_G_C36s2qe&waTnQ63uK&h*1@Cj8r_Y<-F&I5-d^Uf8zW%Rgq zLi&i*UPi_&{|hnYho4qA--maqv78UmMp~}$N(83p2F{cPrD52tNNNh}8#kN8ZB6?> z8@Bp-a1q02q>`VgXXq3jb5MD(!mLWQDqd;iYnu>JM!T$7yEDPYu4Nyu@oO;l=f{=G z&hoxA8aZG;-AJ@|L(>H2xx*fQi|2P#_8-$zoo-EYU%Jw26(fQE?8pNRh@Wjy8Yr`1&Y0v2K zr}Dmo((f_)b7})}gF<1P}Yrb#Nss6^!;p#T*0418ek7m;Yv+BZ?a<)_qm)Y+i zV@ZHk?^zNdHu#%mTsO2)Mc-We&l1D4?GtM# z>o%@S-tswbJUu?(9ykv#xWlRfP$Hxc=X@*WR;fcSeq@hql17PY^_hy@7U420;t3UJ zD=1w>O%#5(P3D2+$jTfvVtSqXHnigtd(G{|l%8u~n>RH&jla}vEF;mQTu1A=!+QSY z%pyeLy@ri?<>h>!>7Ccj!rMcm$Z-aG)K`Kl9X+p?x88A$@Onz66&+5HrmDGSA2^S$ z&aGi?YUmi*yR0@oFE<8C4y%o`^=q3@vg{2xn8l;lMfTk`o5zVW(#P3(+ea^3@_e$6 z*A&Wg%+%l+4dlz~BZqN4qKxS9hVIgN0LvPu$%9oJSm%)Ail zM6@Q1bn>cto?^}TTkLE!N6%2Y%kj?y^B0swOTTfhSE%eC29DgWnoAO86TO&->aLHh z2!eGAxUVWpk`=f#&gquO<8wPbLSV-Y&hV^i?PeKOy{Rden=x@?A+k_$jxz0gy6*tV zpEL$eV(VnNV<-$4<7h_s6}M^zxp9l_sOX!X$&#O`(JtnqZIkviIwroGB@(f6MLeJT zDFu+4;j%Q~hKfA2Eh0=^Uz!yaR?}bm%T<|%N?uvnbgOU$Ds4J%&u2+I% zTH^$*a=C|YJYWWgK0s%|cuRA!nXHtR8;gox zUZv#*6pM*dQ&U`Bl`mxb@1h{!&cxUzQGT%Z#pzFd;WqXWNFhC$_ki(pva!WJ+J$I5 z7vFzskuQ@(o-s8&4GX2Ti#Z&4G)P_v8nUvp13M2&Xzw(i8X2oRv~xY(nq-i=-j7cG zu~{Kc>)cgt4oz%mG`^e~Hv@E1T=)n7EW1)LhLEjAQf;FW{&V>oPQ}76csr)0%Ri&+RKUVl_~481Z=MQHdyA|tyn};Q`2%fYjV&~B^r4ZKmf&0LTD)3`B9z}r>v|j0GjE&<@k3E=%w+C#YJPO z(Ec+@+S&+M0g$mP8<4|^GK>xSUpt>K)84F6%-7l`1H3S)m|HQ?ttcVyr1U3s)k<3+ z^1#{stsGC|cAi?VV=Gbk(J(CQ1D8`*QEjbI9nO9SHn)o$CkMTatu1aL=&tiLD4Z~Z z)^<>p3>fbN5rY4Qu=GQ-~wV&sLCUU#aX#q?=R!+_YeBZSv0}i3^T7reqZ+9s)j{xQ#*4*Kt9J1D6 zQpJD2t#mpD4t&~8Us1=vfMeHp*Lya1bKJl=66Abpd~-1l=&6E=F&`&-nxyjFpw#sf zK#9v5Hy(-tx|P|k-CJ2-WhGzUuvwK|K+vD0Jq8`6K7dn>x@<(QncY3j~ng!sf5H=V#FN z&OT?7Lqf+yE$siy`wV-aGO|G_H3mps{>)rNqBY*Y%-z7Z^qs_5a>a&CZoP4;lIu8H zx5DBCc5Sf-uj4n^(#{W8p`~KH^4SDuoBwZ0?LdDE zbcqgA{RhAP8rn7_3^{|I`2k9*N2bFplKYrRyr!W(m(%m$@5#b>$MG`o1*w}OP{Tqz zo5qa#Q=cDuQa6WEuxwg*{)|H>u3b_VH}to{6!;t*^jpY3tg4^)f3_sj#TYog_#B6R zUcZtoR-Dr>Q+$5$r#pIU8G6DJc0Ppg2rOa;?G06eTw_Arwf5#SpMdC$X_cb|!4i}dN;p8Xm{ z1?Xjv36?ST)sJXD#?>_M(yLKpc)}x2mNbtn=;f^-tee&!a?9uBqU|aK#NigzGQRxE znFOJnHfYg%d!6{$5wDJqkDX>5yK`_r_K^KhK%@06O5#K(uN(954yFN;{X5=GWiWY0 z6cD1NGbV8`zrJl7@-+y@eth!BX3HKW^h6oOlsG~g5d1scs=&GNBoBHRehv-MZEtS_ zJ-kRHE!%{59j>nC6!S`kS=39K7Zk3IIR#Y8|O&|SzexIrHa8Sxv@*p<49$qSW z){ZZhJ;B>e#Xu=+=R(=|WOdekp0lQ=X6N3KTXacF>fh1SgBmz6SUZ(Z8Z<>~qu zZ+j>JmFRc41g7muw~a{omi*d^yd5$$r35C5*pz8dXIXT+$6Ee^)~se5{Y{10&Ly!- zkA=8vtT%tkYVPXS`R;?T-_}x&bfCkf&$!969qmA~g>SEoP-y!<#8GxB+Pa#j|B|J& zAUkw1Z}E9i+R&hjMxH=APh?+ zTBH2+t?S(~;QExMdicse1=S05jIO!C7)VB(5o{Hqir4hJoY@&9?f3oZ2_2EoUb#=o zPmu1OKyq=fZewn)+}Nl-!Qx8e?&8BKGNzi&iy;%Rp#qMW$d-;4UYw4)S0M zC*C8Z{YJWP&=jF9KXMV!?^qE?e|6j*DCsGngDc=z`}?)X@)?H>#r#4JCHUXLSfQ`$ zCawP`to(~Fw+DfXx1MN=PPwAbiJlRKCrXj2V&83J_ZZre-kha6NBzm`pJg};ZAGA( zqp?$Kr}I#hqiqTYZGUW|1H?Sv-o!YR>)xFVA`3xl604sC#a>(o+Ff)*`xKDuowEJV zuj<8>vemn|C&*(6Hym{ogyb)Y3E-YNUv#sVDm5DG{^#7JwlD5x zDFWsh3eRbEO%1gDNr}3KCR2*LkJ$P$z)V=}R43{IuBr2j?~lGx5&Zt<(t1eypWfkZ zQl=tpD;nBH7Ee~o(mr^YQ`^XAJE;2?%4(o1x17dnm-n@CAm0qa=2Scbcu#Y7k*}H6&Ln76_gbv0K0^I-l8e;3M{O8s2rG# z?T^_lGSY2b)K|M|LB#w@q}^xu$B$S8#R+6tI0wbJg&als#rana3CypN(gr2#j>}(v zJA(kx7avKdQO#Ibu@Bm3)?LahXlCn*PuyvGM8$M>N2Q5axgLJ(d(W37U{?(I9IVqs z>>svJJfo4Y{eV`SMwI>E>b|rQp+lO^eVDqg(J!!5xLq;y@AB8c8~`utht|zbm$uu+%;!9<%ezQQhnpj^#q1Tq=zK;Ct0;8005ZDS%d0`DWhcLOvfS=c z-hUC~6T;)B=1L^kc&(h*&8U*z`+#;^ucg=ATR_6ZclTYC^0Do(8;7~Y8aX1@-Yz+} z;{V`Y2$(DMh>-h(=H=*QRGeuF{-07t@xiFWNiNwlF1q46EIK=NCXP0Kv^aiX+Ayl0 z?GTsaU~{!~7cYis?0YC5OAE@y{So{cXrnjs(rM#QhaZ<3_W3YbF6Eov`0yHQPhEWh zeZp%^`_{C+4UWB@2@6l&h>%}~ZI+9-RvM>qNwJ2x@C=rvv!xZ-m5YDE8{UO}St@v@ z6Itq+^t1%9SljLnUI!)BgkHIrKbFuMjM5q(Cw8;*m0;c+7xa}7{hXFIg4w4>8+5L` z8VYPT8Wx{%{z-1`?&(mZwDI>>z9sV|PkJMGnoT_0FOs%=Cf6`Fwp1Fmx6RbpUNQ<) z2{%WT#zk2hCl5CIjRg@dubIGU-n&~0L}>EA@sXwc$d2XwuBVr2fHawPZ?vt z2;=5?-#TUPf{hcDbW*!qg@Um8jSQ(F>iop{0D zT}~)E@UEfVp1)WX=wt(Sn>AR;{%~~f0fZ4W)JK$mOK|kh0dAp0U|936(}SHnXHP%x zY*Ird_hbwBcI1vhRAl2_47z=!dxUh<))z&b^Y2$aNV0xegN_z93ZM0l=FCE_!!npN zxwJkJ@?PTQ9;3_AeaO>c>>lBiVv6x)jKkxXId@8Wab7uj8uFK9`*+^`xn(>q7%OAQ z*mCSO_4WQ%5Wa3^vP$*yBo4mdww;Ac5=(1)cVBUby%?Jbh^CmB7?FfR6dUQR({^=@ zd?BA)3&IAl)Sl~d*>#ly+|o+FVJ*ua3^G4`)|PHvAO4@u`u*Q?X~3nS*qmJ(8XV09 z&P(^!1#GbLAF~GL8%91J@_-3GrpU}@s4&3qBI9?Xr`s zGj>e@K4E^&o3jTU&@xe66W`zpteIjQ+nejsu$5SrbfwV>zRj*aO>3A`X|tMd_L8mj^6o$KWI-C%3K#o_8eCuyROB_rj0Gdrwg9T7{(Rdx8HY^9S ztR%qfzaSLrH9fX#-R1RMs8}^~A2wp+cqX9#V!``0Q-oH2h(5(UCFTWOoIfIm;+b6k z8&g+DH2|4I$ru z$leE=nAFGtEGc{GXqALi#>nbrehWwM27aIp!J3Z(`G=iy;(vFrf+c2HqC6_iJH!jA zBrd^PxbM~R8?l3MOMqMX@I$)4ERgYk9sdh3>=Vi#a z)12bp^$zH<&N^A`+GOBA4OcG+%{*;gR^cnGl@qd?V-}vd4j9qW>@hZU3*>*5RKaQj zQRGnY*_ccm@u;2Qye!h1d^`0EAd2KhJcqg_EoXl)j<RHo?uz$?q^GA<= z&8hIG2ExXgXu+;l9tCR1!?DB6qTJc$ zWn~FXv|b&f>@R}JAc=c}IFdX(^pQ;d;PJ__uMFpLN=EU?yPi*TRVY{zja@<`)Kp6- zcdtG`@-OY^MHnWi@%xMf#hPJ|I9PoHKa5TAMZ10h-8y-VcBBIPxQ&yMfwP5b90LVQ zkI`|pp2Lw%lK%+DD$_~C&b}+08Xvl{f9&)vc`%;0acl2a6G^X9S*gRe%@E-Ezxt$7 z>2$pD=t`qHmHc4q=lzZEu5IM4DKVF^d;Ni=6TRJon!$zz@$vVdlPt6>%iWQVl)ato z+mWuxDVe+PKMcetX)yO7t3ooo-I_N9+JamW|o{XY|&cG$Xmr@6(yk6wPK z-HF?7yhoV%=uzT#+RktUczfuN-d`{N-$72Nim~z)8LHDJg7kz0jL9{e6EZp$oiV`@$y{RInN+;C@9i#HUeb6idBQK|@lIu%Ul|I8dDT)4td9$T=Nlw) zAS@2n&gm36V93$u6vqyOhNBLC!vuz0Rn6rQKS7RWuI~O+rm}o_omegzK_Iu%UP7P+Jse;1d`1!dL=~uzr+Sp2j#Ar+r?mJuLjqPwn z!J!(cqx^R_BA(~%Pi#ML)L$(*r|jdvjhg*F*i5zz_ugZR+jw6&((=lCgbcl`NSB`? zwQl;%@woCeT#ik9nG6{-0LahJy#M!_2iOGzMv3M|I>Z!Reeb&a-R4w!9_dLWy)KMJ zH)*Bt5*tY_^gDW%B;=U|wH`4|pm0(5gHpWi=aif-a+}`%G&`2YBG~=b7dKUC#YBqEa*Hpfj(U8P)TRDyAd88Z6 zN#y+aNuIJl89&du^z=oUrYm!VhYrbPrg)*oWw41<5ykdyd+@vKHmuN=Z0ZmN+~b3p zB2_52J!Cl2b%XIZJX!GjdR2?a`yATW_!Ay+k(br4cL zL+%kZr1E1?1(osxxs6XP7(Mz+$Rw-Udl4aj`8MXwf@C`5o&;tbiS5Q!;**I&HPr$k zL8Qnbp+P;5;+;gz?UPk2?d6ZQS$6Oc`9!D^MZm`mb@a_-^9-5@#hk`oF`>Y2x%IUp zOYEpIrr3mmiMMVGy{K^?=QX?OI&M(6KXHiEFW9JCW&Cv14ba8k?mT=*NMvM>d6>|n zo0ql#X#qF4$N~QbJfl@~4n9J5w@C{ZiypfADboU(LIB(gw>8%J>)pbMtkAYogI1|h z`?uc57}NS&v8C27g0jnG(eM-LX$7Wegy8guhE=59FUcpujK(#uo9!C?dOZ0|6ligT zV%nKk&eZ9Jf{g1-l$;dkkIqXNmw1@(7q(-~DXgaYy;1~CM;Sh+3FYy@b!gbBsj+si znnt0KnI3Vrs^fCqI>?dS#hfSqUd=s`hlOaY8B!WsxC!BZ?&Nt^;jA4;u{olz)E&WF ztW%}-+2zS`V{Fay*Lk%K7WNMK#a~|xQH7!`-|Ko2e?`IYFi3YOJQOmJf%$*RyAH0V zwr!0R0ShPyC>^D!R0|-XDT*S!2%!W*lTMH(1PE0`RC@1Sdgvvz(5v)bq(~<~0-+_e z7w_?$d*3mYflblmQWWB0hb?f>Cgi>BU})L+O1nJ^<1P!Xo`kNyJ=lVCxcr&3O zs`a|b3-1e;Y!@znRfs8k(=uyXRYcd0`f5S>;Ba_CH(fu5%a`Pem*_?eqd1jIr?}HO zKVRES0e-&FUl8yxl!#&i&20G_a3%1CF+o6r_ELxq0UL%BQ0DsadvcIT!iYt>TH{X; zc1hgF^O2zu0`yZ_xQ`$=)gC*DZ)>R1cdePp_?XMR@8R}#S@)2xd2*Pi$KRaasnn!> z1R=O1nb&^TCOFvZ?p&R1z_iJISM|-8>&(LPEKhRU(_h7OX7tx_2JGegWA`t6uO`J| zB7K204c}eR>E@I2g< z2@u3*o+vSQYlhY11Pb-&>Zw6$<$FTyOY3km8v5hk)?NxXhhV6SC; z(4IhXu2~Mmr0z~P(a4nhartDt3VQQ=oWuN$jJVo`gh3M%S63G!4OiE|CLv9OXiTcF z=h_Ecp3LE~m92FINzDlj_!jA_4~L_HL8VmF)mi2nEr*N`AFP0#Ig}Q!)S=ti3zSJo{%$soh>c@(+{jMFkhWYh4HJj z(7^|?r}uyv)P!_bh{xuq(+nHxd!2DU?L{W`Go)z-Y1_{s z?$bABRs-xAlepB6FD^2j;W!=~G>N7j!Hg6C3@+KFDJJUaUpmgg4!a0it9KA9((u=} zibAOc9lUxjF8xW}|An?zlHz;4{i){7+KI0S(tqzXu@sM2OlL+U?GqCIBCuG#IlJL* zrP-SK9?mKG^2MJyk;Mm31bL7%Qxq%Cc03QXkSq}oSO~;`W9O6i*QyL320AQRombox z{a8GpgXntRmk*izGei1UeJPal4K3RmtR9$Wt5D}&;qlHo1U9h)aL^PlY6rg&1FYR* zN#91}XRiM{ql4g8$xg*;J`hB9B9s@uRIJA6%yhqdK}S$(han6l?tXC+I(m4wto(}} zW1wlV12`td+&+S!@=qS3#Y#v*RD)Q8$NClQ9abtoL=v()37KA$PaJIzr7!#bnR>xW z`^zWId3j~;Sj|dgqoVa7VFcwguOII(B^7arQSRS-%=_Da5mCw^8H+m!d=qw0($CIC zh_SJQBj>M@zt>rCAjOnkdCBLhbBYO&R@{R6*UQ+|taBp>Gpfr3X^vpU#3x-_L7&As zp*7Tqu+o;l2Bv;Wso#&Ok1e*T?htlF_(X>}{Wg=Z(=Ct-HJ*+!&|!3Xk%f6ZY~GxE?}JCPv0Z0{U6g62Nj~rq~b9b;jUZ4r@9XQiiwY38&>NQc)`b3*w&9FKMpp&!@xNNnS?)vH-v0& z44*h3Qf7ilTdPAt2BY;$e}mnH6tIUQ22&(SG#H53OmY_$8VE+=+q#L*3YV!K3jd-j zHVWM#8m3#hK7)*N)O6NwR^2Di( zXejFYsjy3Z)Sk!%jC>|T=eNIJ%p%|`RRtLpN$$p1&(M^A#J104yyM|C;OELzX;~G$ zZGJ-&jpC;-B3p4vrZ| z7PC)X)3y2ubgh$W%S$Ub%P-S|8%G^Er8yo*h`{0)YcNH-XxIjR*fb2)Q7g}-?ujUx z-t~JmY=n#M8yy@+b+qh}_wd_x*lc|0I)bXz@XZBl@x)f1B(u8bXIJgJO(E~%Y^JHZ z$%Z-b`#@HAgC_CI292?Pf8N*pd6mmbznVUfRhmYQo#Pq>Wg6MFgbQVpu3RF4l1ANq zis6AgI1bI%T)FW$qm_VM9K*_7Y|1yQ-IkH>)JEZ5KU+npL?$NqE;89v-u!-_zJwxB zlg6%wkUUf`(XS@-S9?d)2ACyzN8d#D|;C9*{M?MfU&u_>zh{IXjv zi>6yos`lsY0P^60Ri3^9>GRF2R&m3Lu3EnMH+n2zs1d|a{XuZ#h`<2VPb;LM9oMtD z_It}Fb;6wNq1429^47IAZ93Zf2LVbCpkle4lhM4q9bT+X;bRd2b)h5_nb(U`^rlrx zcUDjB#YA2M2)v4HX>>?okvyJu|B+g)yhD%7c>gdP!bG5s)8Sm$>%2a=E*ECxtvIbAO3LaEXZ6l5}%*>>$GC z1nLC}RtgV}irQW8KQ=+-ho8MTRUCnb&y)`AWA{3ATD_^S5ncFK@tL8KJ9d9!E8s`= zR;w{Q35f5&L|Koo?^ZB9&S(g(5f``cM9rk1uA# zH>GdAZ$p7* zWPI>x%))?4Im(Zu+!1Z$`NrXnB=fDTTaPx@(crn4D6OJTbnnYMv7-NZep~Ne zVPSu@Fc5*su^3RkObllf=YJ?0&Q3)9w*s~!hMr!oROO0qJBu5^*NAnuLzB`%ASsOn)SwB}HeYOoAEalSYY|Hy`9HJ_Y zwuo;cD@n;%zeb_u}!QqKJ=k>&md6QyC0S;owB+?Mjx>5dVwk+Ir7!t*p+ zas*Kvb@u*PVY{SX{BSed@0Idkca}cTtQ>lYSy_y3B3elusrVRAD9}2!5jBC6#54@-bzBUNA9B6!k^Eahq(Z4 z&sQ!(Je3_ENtPJjo9h#OdB`S_nGBa58I?*=PL@K?%rVy~nfEz9uwGW5y)}Am3qQo{ zPA{15g=?c;pX^2b;1704SSU?ac00nPl_8y=-rFT}K;+KXS}xVk8b$S`QEmW+a0wdS zM)DJ_Hww(wb1-95rrqd(nWS^qt-qN1|eIFVwhQZ8^%#0&mK(Er|~&e-?bF8UoE zkV7C^Cn#v7w%YGvz&2?cz<^xfPgnIH7W`#dpDxM!$vjIjz>So&M{c1z)pF!liF6^W!p;xXDD_v-nPcscXAw2X2;yX!Ltn{K)d z&-@Ipe$!sPfg%2TKmFZpg^Y;fW@K^(mnCw=l**3SvHaymTlWt$8y9L1bBxS(A(>{g zvRwFAxTj9{j9>d$%;S{+uOFequc5ueZ>#HT zH*Ktx!K0m=2l^z*XZQmX#^6ronwCaN*ocFTMy0A2tK-U5%hUL%lgwtV8b@?;?Xubm z19tdIz?0R}0OY*h4Yp68s8}SQnG1jx^tGD!10ALp29k~i?6MmLPdzHf0*4ta2Agr) zp)Ncsc~iL;bpJ1_mHw*{-sy@1xfCC}#6&3C%(DpzLC*X?WiWb+XxFP@dG&-;c-^kTLSrN0G%VgW6+MN*RQ`2&l&l0MnGvUEx9)=!O9~sBxeKt->Ug1&?4v#kT+cr^xd&`raQu)>; zwfjY1z8DGGLBrpd_4%J!!*2?|GZ~Q7RND=kW(Hzz=_icu4W4h!px#4z7xg%$@k@>Z zHNx-0Y%9LRy^&ywxkCCkm;2W)7v=XO(FS>|DAfVq$eGIVZhxN1Wv7FmbQ>srMW*C6 zNB<|Dl`PsZ|54I9cm}e?ewc!fF+p zeX$uwhFuxb5)kS-xt|<^&0WeX%6Cy=19b#c*@3FMyB-UQhMwwr%xa1=^y-?4Rx@+W zb~muPeAH4HwrR*J?%3K4ul|BFbiJn~TyjouC1Kk;0)_#BwJG0f*HZvZX#ec|KyfYIdnxHcbx2^47b`OOO|jWO?Cm2# zdvpG(?5=3Rj1M<3`7F3_(OALA`pwH5ZCMgr@65vV$c4Z1?{(6WFBjb7cgPK{3}5Q( z?5u{yNHJWd+U55`;uj&F#tU=RGLid*QZ~F~WMUoNA)>DCpJu0z1KmF_Y|!;2cJW7_ zc6gl!yV&rjBi&Ew1fth>c3Y)>LSsH#J3d8)7B(%u> z(ffqdh0N9?g_%Gx(0WF|kq{ZSrlCppte-k}i2TNrwy zXAr;WZOl`}dA1iYm)7F(u2$lL+IyJoQuD;4gfVsV4w;zfl#F)l^82f6e*g8=K}4bW z^{FO=BT@VQq_*V)%k)`pYw5x2;(Qij{HxG9x=+>-uRq-J7(k{&s6(TmZz3H$(It^`m841(^CuVYM@EJ{?D1Z>u#_pmmn6AkE35l&Jg zulJga#Z+=8YVMN0wKVm+FgVD5xz>XpYn7y#znDbpe4@Ej;pYw zySYNpib0VZ3K?Qk6}iw%_*syC7sRw6e&YpqbI*D)=t8ash-oe7Ev8H*@&ujRO7T`C z5k)R_dwik)($&IsD|sJ-c|l{7rkp!L879uHi=PTbfr$OJ&TPi^hdwGT!9b*DG; zSo%YHO`8iIF#=>OF73@E3R2%upyk(yVT+ZO_S07eWIq@+AhBk`NAzbOi@_UYV7)dV zzy^4)`KCzG-GBj=5z;SP%0zQHSPg;v!Q5Az+3=B~C#+}4kC#Ki^*A!A$a>O7!; z$9}S%VRY?oAFRj=!hii4P%@&mcLym#y)NDnmVGyQinDMUr>XbgDvbW8e}tM0*?GJ* zC#9_|E17gb)KUxC5@iyt`DV5u!xd9NHyGrP7s-57LA;(1=A~}i=x>uB3|h@-r%{4q z9Jfybl+$C!EK~KgV;@oNI#w>kk8(!(>%s$f%bRo97y+t2#f?Jhmw1|sJ+D-ZYRxhA zgXU6W<2OF53e-|Xi|Nw}MkfGknd`F1^}SvDKf z!PqV`u0Akl_l`{L}<`Ph*elrh6QD%*twF>>PqE^DKy<$8^6<&GrlMvrnB+O|RnY!X-e~9a=eK_!Fg)$036;?@5M=(D zJnnK4s^m_5;4WBOvL|(v=`UNw%A@$Lmn)~^Mbv~=y0u^CWLB>Zo6bT0^+(nzKZ_z& zk_fA?BOXI6Q$*(kl&ZA(Dh8pp9k_$B`)*;75z2zPG+N!$Ok87Wb$wD5tQTy$0o2RS z#-1g9?FpkRJ2WwUaDa{b)X(P;$>j2|q`P8&Up}a(7nZlz-8DBp2pV1j0H0vx3y&Nj zNWL`f{mZ(~RF(j%RSodq!k}*XiVgACDy!vmEYpV_+jFY}VQX3Iy3@ur4fPczr|NF$ z`M_p9A%T9m81cXc+Qf;9n9^~mCI+c zkkRTJxb4~$jQY(=RbIqM9$cEo;e6=uIiVg&@ocHBI&{zEhh~SpVGo>RgS5CHTiL_} z=Qjsi+h9wWGspXq^Khx*v|zLf?5MD}t&c8(0h^DX;>MLa4pl93BJ)h*@)Y-fJaIBT z1_%~{8j`waOsT-lTx|~(!rN|qzQS!~{zHeY($4u?jUBf1RDO4;DDtGP3+r#o0rhkV zoi68|_u3yONWM%g3j%EW#`in^WthePWtin74HjGe49>Wu7|*HILYg1OB_qf_Yw^A+ zo=@v-7n?Yulii#|vN|Q5!4*q&!UHFTbH-;8OUvB_UQ9^F)6B&CK@t8T4kpUnT8PR9 zgIs$ALM6&T40jBOw-$4dybH3;REpFg8?Jg#UR0>|#aW@ZBeLaLd{CbyFLxz6WDD;h z2_6sb8Ki?D3g8D7S0DS1bHJ`*;eEJ(~cBS74n_`?mT?h=?v=UcY$u#{PjmSm3<_SIH%_A@CQxf)Lh3ThB|N z$skQySg?#IfObh$T4|(MMR}dc{$JD=}s>LptTwrX z9`=+eK|`f-QXR^fj_VoW9`^^6`Vhd=H*MB`cr7A|8x*PDnub2C6sGd2 z-Bssi@w|yX|BNi3CR3(*N3FV$Bb2O(Cwznp=cG6Z&*N_x7D0^joZ2cf7sH>|cY}!V Nc`d8_0xo0d`#)(dp?LrR literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/setup/email/auto-email-2.png b/erpnext/docs/assets/img/setup/email/auto-email-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8cb9f34dca25c19f56388b68529d67b84b1865a GIT binary patch literal 190341 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%0D01)Fhqg8iwv75N8lk7fbQx8h=cY@A++G(Z;G~ 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


Fwz$*%!PH}_W%h-p6k2PxvG`ubm2|z1gIaxu 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/user/manual/en/setting-up/email/email-reports.md b/erpnext/docs/user/manual/en/setting-up/email/email-reports.md new file mode 100644 index 00000000000..723fa27950e --- /dev/null +++ b/erpnext/docs/user/manual/en/setting-up/email/email-reports.md @@ -0,0 +1,37 @@ +# Email Reports at Regular Intervals + +You can setup **Auto Email Report** to send reports at regular intervals. These must be saved reports of any type (Report Builder, Script or Query Report). + +You can find Auto Email Report at + +> Setup > Email > Auto Email Report + +Or just type "Auto Email Report" on the Search bar. + +### Example + +#### Step 1 + +Select the Report, the user for which you want to create this report (permissions will apply for this user), the email ids where you want this report emailed and the frequency of the report. + +Make Auto Email Report + +#### Step 2 + +If your report has filters, you will see a table with the filters + +Step 1. Select the Report, the user for which you want to create this report. Permissions will apply for this user + +With Filters + +Click on the table to edit the table + +Edit Filters + +#### Test + +You can also test the report by clicking on "Download" or "Send Now" + +Here is an example of the email you will receive for a report + +Report by Email diff --git a/erpnext/docs/user/manual/en/setting-up/email/index.txt b/erpnext/docs/user/manual/en/setting-up/email/index.txt index 86e75c252d5..7ca1b942242 100644 --- a/erpnext/docs/user/manual/en/setting-up/email/index.txt +++ b/erpnext/docs/user/manual/en/setting-up/email/index.txt @@ -1,5 +1,5 @@ email-account email-alerts email-digest -sending-email -setting-up-email +email-reports +sending-email \ No newline at end of file From 83d81203b2e9bc324c4a85fa62850f004fa44f5c Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 15 Sep 2016 14:48:13 +0530 Subject: [PATCH 75/84] Added Student Admissions (#6359) * Added Student Admissions * Fixes for Student Application --- erpnext/config/schools.py | 4 + erpnext/hooks.py | 3 +- erpnext/hr/doctype/job_opening/job_opening.py | 5 - .../doctype/student_admission/__init__.py | 0 .../student_admission/student_admission.js | 8 + .../student_admission/student_admission.json | 374 ++++++++++++++++++ .../student_admission/student_admission.py | 20 + .../test_student_admission.py | 12 + .../student_sibling/student_sibling.json | 90 ++++- .../web_form/student_applicant/__init__.py | 0 .../student_applicant/student_applicant.js | 3 + .../student_applicant/student_applicant.json | 159 ++++++++ .../student_applicant/student_applicant.py | 7 + .../generators/student_admission.html | 49 +++ 14 files changed, 722 insertions(+), 12 deletions(-) create mode 100644 erpnext/schools/doctype/student_admission/__init__.py create mode 100644 erpnext/schools/doctype/student_admission/student_admission.js create mode 100644 erpnext/schools/doctype/student_admission/student_admission.json create mode 100644 erpnext/schools/doctype/student_admission/student_admission.py create mode 100644 erpnext/schools/doctype/student_admission/test_student_admission.py create mode 100644 erpnext/schools/web_form/student_applicant/__init__.py create mode 100644 erpnext/schools/web_form/student_applicant/student_applicant.js create mode 100644 erpnext/schools/web_form/student_applicant/student_applicant.json create mode 100644 erpnext/schools/web_form/student_applicant/student_applicant.py create mode 100644 erpnext/templates/generators/student_admission.html diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index ce0c5dc3dc1..6acf081b3f6 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -37,6 +37,10 @@ def get_data(): "type": "doctype", "name": "Student Applicant" }, + { + "type": "doctype", + "name": "Student Admission" + }, { "type": "doctype", "name": "Program Enrollment" diff --git a/erpnext/hooks.py b/erpnext/hooks.py index c1cee0c3a4a..19e915e46c3 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -45,7 +45,7 @@ calendars = ["Task", "Production Order", "Leave Application", "Sales Order", "Ho fixtures = ["Web Form"] -website_generators = ["Item Group", "Item", "Sales Partner", "Job Opening"] +website_generators = ["Item Group", "Item", "Sales Partner", "Job Opening", "Student Admission"] website_context = { "favicon": "/assets/erpnext/images/favicon.png", @@ -89,6 +89,7 @@ website_route_rules = [ } }, {"from_route": "/jobs", "to_route": "Job Opening"}, + {"from_route": "/admissions", "to_route": "Student Admission"}, ] portal_menu_items = [ diff --git a/erpnext/hr/doctype/job_opening/job_opening.py b/erpnext/hr/doctype/job_opening/job_opening.py index 267e7a84ff1..7c42a76c549 100644 --- a/erpnext/hr/doctype/job_opening/job_opening.py +++ b/erpnext/hr/doctype/job_opening/job_opening.py @@ -7,8 +7,6 @@ from __future__ import unicode_literals import frappe from frappe.website.website_generator import WebsiteGenerator -from frappe.utils import quoted -from frappe.utils.user import get_fullname_and_avatar from frappe import _ class JobOpening(WebsiteGenerator): @@ -18,9 +16,6 @@ class JobOpening(WebsiteGenerator): page_title_field = "job_title", ) - def make_route(self): - return 'jobs/' + self.scrub(self.job_title) - def get_context(self, context): context.parents = [{'name': 'jobs', 'title': _('All Jobs') }] diff --git a/erpnext/schools/doctype/student_admission/__init__.py b/erpnext/schools/doctype/student_admission/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/student_admission/student_admission.js b/erpnext/schools/doctype/student_admission/student_admission.js new file mode 100644 index 00000000000..463e929060b --- /dev/null +++ b/erpnext/schools/doctype/student_admission/student_admission.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Student Admission', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/schools/doctype/student_admission/student_admission.json b/erpnext/schools/doctype/student_admission/student_admission.json new file mode 100644 index 00000000000..abd4c93582f --- /dev/null +++ b/erpnext/schools/doctype/student_admission/student_admission.json @@ -0,0 +1,374 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:route", + "beta": 0, + "creation": "2016-09-13 03:05:27.154713", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "admission_start_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Admission Start Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "admission_end_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Admission End Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "publish", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Publish on website", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "application_fee", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Application Fee", + "length": 0, + "no_copy": 0, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "currency", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Currency", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "route", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Route", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_5", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "introduction", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Introduction", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "eligibility", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Eligibility", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2016-09-15 02:59:15.180465", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Admission", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Academics User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "program", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_admission/student_admission.py b/erpnext/schools/doctype/student_admission/student_admission.py new file mode 100644 index 00000000000..e0ac983437e --- /dev/null +++ b/erpnext/schools/doctype/student_admission/student_admission.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.website.website_generator import WebsiteGenerator +from frappe import _ + +class StudentAdmission(WebsiteGenerator): + website = frappe._dict( + template = "templates/generators/student_admission.html", + condition_field = "publish" + ) + + def get_context(self, context): + context.parents = [{'name': 'admissions', 'title': _('All Student Admissions') }] + +def get_list_context(context): + context.title = _("Student Admissions") diff --git a/erpnext/schools/doctype/student_admission/test_student_admission.py b/erpnext/schools/doctype/student_admission/test_student_admission.py new file mode 100644 index 00000000000..748c7ae1b39 --- /dev/null +++ b/erpnext/schools/doctype/student_admission/test_student_admission.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Student Admission') + +class TestStudentAdmission(unittest.TestCase): + pass diff --git a/erpnext/schools/doctype/student_sibling/student_sibling.json b/erpnext/schools/doctype/student_sibling/student_sibling.json index d6209875071..b74d48ce875 100644 --- a/erpnext/schools/doctype/student_sibling/student_sibling.json +++ b/erpnext/schools/doctype/student_sibling/student_sibling.json @@ -14,7 +14,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 4, + "columns": 3, "fieldname": "full_name", "fieldtype": "Data", "hidden": 0, @@ -41,7 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 1, "fieldname": "gender", "fieldtype": "Select", "hidden": 0, @@ -57,6 +57,33 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, + "print_width": "", + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "date_of_birth", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Date of Birth", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -69,14 +96,65 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "date_of_birth", - "fieldtype": "Date", + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "program", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, - "label": "Date of Birth", + "label": "Program", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "institution", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Institution", "length": 0, "no_copy": 0, "permlevel": 0, @@ -101,7 +179,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-09-13 12:39:05.078062", + "modified": "2016-09-14 06:03:44.067781", "modified_by": "Administrator", "module": "Schools", "name": "Student Sibling", diff --git a/erpnext/schools/web_form/student_applicant/__init__.py b/erpnext/schools/web_form/student_applicant/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/web_form/student_applicant/student_applicant.js b/erpnext/schools/web_form/student_applicant/student_applicant.js new file mode 100644 index 00000000000..699703c5792 --- /dev/null +++ b/erpnext/schools/web_form/student_applicant/student_applicant.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}) \ No newline at end of file diff --git a/erpnext/schools/web_form/student_applicant/student_applicant.json b/erpnext/schools/web_form/student_applicant/student_applicant.json new file mode 100644 index 00000000000..63ad764413b --- /dev/null +++ b/erpnext/schools/web_form/student_applicant/student_applicant.json @@ -0,0 +1,159 @@ +{ + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_multiple": 1, + "creation": "2016-09-12 02:26:42.447103", + "doc_type": "Student Applicant", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "is_standard": 1, + "login_required": 1, + "modified": "2016-09-15 02:00:28.493759", + "modified_by": "Administrator", + "module": "Schools", + "name": "student-applicant", + "owner": "Administrator", + "published": 1, + "route": "student-applicant", + "sidebar_items": [], + "success_url": "/student-applicant", + "title": "Student Applicant", + "web_form_fields": [ + { + "fieldname": "first_name", + "fieldtype": "Data", + "hidden": 0, + "label": "First Name", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "middle_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Middle Name", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "last_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Last Name", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "image", + "fieldtype": "Data", + "hidden": 0, + "label": "Image", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "label": "Program", + "options": "Program", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "label": "Academic Year", + "options": "Academic Year", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "date_of_birth", + "fieldtype": "Date", + "hidden": 0, + "label": "Date of Birth", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "blood_group", + "fieldtype": "Select", + "hidden": 0, + "label": "Blood Group", + "options": "\nA+\nA-\nB+\nB-\nO+\nO-\nAB+\nAB-", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "student_email_id", + "fieldtype": "Data", + "hidden": 0, + "label": "Student Email ID", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "student_mobile_number", + "fieldtype": "Data", + "hidden": 0, + "label": "Student Mobile Number", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "nationality", + "fieldtype": "Link", + "hidden": 0, + "label": "Nationality", + "options": "Country", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "address_line_1", + "fieldtype": "Data", + "hidden": 0, + "label": "Address Line 1", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "address_line_2", + "fieldtype": "Data", + "hidden": 0, + "label": "Address Line 2", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "pincode", + "fieldtype": "Data", + "hidden": 0, + "label": "Pincode", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "guardians", + "fieldtype": "Table", + "hidden": 0, + "label": "Guardians", + "options": "Student Guardian", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "siblings", + "fieldtype": "Table", + "hidden": 0, + "label": "Siblings", + "options": "Student Sibling", + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/erpnext/schools/web_form/student_applicant/student_applicant.py b/erpnext/schools/web_form/student_applicant/student_applicant.py new file mode 100644 index 00000000000..2334f8b26d8 --- /dev/null +++ b/erpnext/schools/web_form/student_applicant/student_applicant.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/erpnext/templates/generators/student_admission.html b/erpnext/templates/generators/student_admission.html new file mode 100644 index 00000000000..53c5311de11 --- /dev/null +++ b/erpnext/templates/generators/student_admission.html @@ -0,0 +1,49 @@ + +{% extends "templates/web.html" %} + +{% block breadcrumbs %} + {% include "templates/includes/breadcrumbs.html" %} +{% endblock %} + +{% block header %} + +

{{ program }}

+{% endblock %} + +{% block page_content %} + +{%- if introduction -%} +
{{ introduction }}
+{% endif %} + +{%- if eligibility -%} +

Eligibility

+
{{ eligibility }}
+{% endif %} + +
{{ d.label }}{{ d.label }} {{ d.description }}
+ + + + + + + + + + + + + + + + +
Academic Year{{ academic_year }}
Admission Start Date{{ frappe.utils.formatdate(admission_start_date) }}
Admission End Date{{ frappe.utils.formatdate(admission_end_date) }}
Application Fee{{ frappe.utils.fmt_money(application_fee, 2, currency) }}
+ +

+ + {{ _("Apply Now") }} +

+ +{% endblock %} From 769dda087425a27e54a9b3bf6bd9877bb2ee2a8b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 15 Sep 2016 15:15:45 +0530 Subject: [PATCH 76/84] [translation] [fixes] #5860 --- erpnext/config/desktop.py | 2 +- erpnext/setup/setup_wizard/install_fixtures.py | 5 ++--- .../doctype/address_template/address_template.js | 10 +++++++++- .../address_template/address_template.json | 7 +++++-- .../doctype/address_template/address_template.py | 15 +++++++++++++++ 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py index 2b8dce03943..c5a1320a266 100644 --- a/erpnext/config/desktop.py +++ b/erpnext/config/desktop.py @@ -60,7 +60,7 @@ def get_data(): "link": "List/Lead" }, { - "module_name": "Profit and Loss Statment", + "module_name": "Profit and Loss Statement", "_doctype": "Account", "color": "#3498db", "icon": "octicon octicon-repo", diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 23549ff7970..84ac1579efa 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -30,7 +30,7 @@ def install(country=None): # salary component {'doctype': 'Salary Component', 'salary_component': _('Income Tax'), 'description': _('Income Tax')}, {'doctype': 'Salary Component', 'salary_component': _('Basic'), 'description': _('Basic')}, - + # expense claim type {'doctype': 'Expense Claim Type', 'name': _('Calls'), 'expense_type': _('Calls')}, {'doctype': 'Expense Claim Type', 'name': _('Food'), 'expense_type': _('Food')}, @@ -209,5 +209,4 @@ def install(country=None): # make sure DuplicateEntryError is for the exact same doc and not a related doc pass else: - raise - + raise \ No newline at end of file diff --git a/erpnext/utilities/doctype/address_template/address_template.js b/erpnext/utilities/doctype/address_template/address_template.js index 83d4fc8d3cf..c055bcaceca 100644 --- a/erpnext/utilities/doctype/address_template/address_template.js +++ b/erpnext/utilities/doctype/address_template/address_template.js @@ -3,6 +3,14 @@ frappe.ui.form.on('Address Template', { refresh: function(frm) { - + if(frm.is_new() && !frm.doc.template) { + // set default template via js so that it is translated + frappe.call({ + method: 'erpnext.utilities.doctype.address_template.address_template.get_default_address_template', + callback: function(r) { + frm.set_value('template', r.message); + } + }); + } } }); diff --git a/erpnext/utilities/doctype/address_template/address_template.json b/erpnext/utilities/doctype/address_template/address_template.json index 5002619c3f6..3e263be0a34 100644 --- a/erpnext/utilities/doctype/address_template/address_template.json +++ b/erpnext/utilities/doctype/address_template/address_template.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "country", "fieldtype": "Link", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "This format is used if country specific format is not found", "fieldname": "is_default", "fieldtype": "Check", @@ -65,7 +67,8 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "default": "{{ address_line1 }}
{% if address_line2 %}{{ address_line2 }}
{% endif -%}\n{{ city }}
\n{% if state %}{{ state }}
{% endif -%}\n{% if pincode %}{{ pincode }}
{% endif -%}\n{{ country }}
\n{% if phone %}Phone: {{ phone }}
{% endif -%}\n{% if fax %}Fax: {{ fax }}
{% endif -%}\n{% if email_id %}Email: {{ email_id }}
{% endif -%}\n", + "columns": 0, + "default": "", "description": "

Default Template

\n

Uses Jinja Templating and all the fields of Address (including Custom Fields if any) will be available

\n
{{ address_line1 }}<br>\n{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}\n{{ city }}<br>\n{% if state %}{{ state }}<br>{% endif -%}\n{% if pincode %} PIN:  {{ pincode }}<br>{% endif -%}\n{{ country }}<br>\n{% if phone %}Phone: {{ phone }}<br>{% endif -%}\n{% if fax %}Fax: {{ fax }}<br>{% endif -%}\n{% if email_id %}Email: {{ email_id }}<br>{% endif -%}\n
", "fieldname": "template", "fieldtype": "Code", @@ -99,7 +102,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-25 05:24:26.636240", + "modified": "2016-09-15 05:42:59.542484", "modified_by": "Administrator", "module": "Utilities", "name": "Address Template", diff --git a/erpnext/utilities/doctype/address_template/address_template.py b/erpnext/utilities/doctype/address_template/address_template.py index e759be49195..64aaa45d269 100644 --- a/erpnext/utilities/doctype/address_template/address_template.py +++ b/erpnext/utilities/doctype/address_template/address_template.py @@ -9,6 +9,9 @@ from frappe import _ class AddressTemplate(Document): def validate(self): + if not self.template: + self.template = get_default_address_template() + self.defaults = frappe.db.get_values("Address Template", {"is_default":1, "name":("!=", self.name)}) if not self.is_default: if not self.defaults: @@ -25,3 +28,15 @@ class AddressTemplate(Document): def on_trash(self): if self.is_default: frappe.throw(_("Default Address Template cannot be deleted")) + +@frappe.whitelist() +def get_default_address_template(): + '''Get default address template (translated)''' + return '''{{ address_line1 }}
{% if address_line2 %}{{ address_line2 }}
{% endif -%}\ +{{ city }}
+{% if state %}{{ state }}
{% endif -%} +{% if pincode %}{{ pincode }}
{% endif -%} +{{ country }}
+{% if phone %}'''+_('Phone')+''': {{ phone }}
{% endif -%} +{% if fax %}'''+_('Fax')+''': {{ fax }}
{% endif -%} +{% if email_id %}'''+_('Email')+''': {{ email_id }}
{% endif -%}''' From 7e1b51610338f65273c1f567d1e0f226da4e0c7a Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 15 Sep 2016 15:36:14 +0530 Subject: [PATCH 77/84] fixes for student admission (#6377) * fixes for student admission * Added Application Route to Student Admission --- .../student_admission/student_admission.js | 11 +++++-- .../student_admission/student_admission.json | 31 +++++++++++++++++-- .../student_admission/student_admission.py | 3 +- .../generators/student_admission.html | 4 ++- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/erpnext/schools/doctype/student_admission/student_admission.js b/erpnext/schools/doctype/student_admission/student_admission.js index 463e929060b..48f4c46aa99 100644 --- a/erpnext/schools/doctype/student_admission/student_admission.js +++ b/erpnext/schools/doctype/student_admission/student_admission.js @@ -2,7 +2,14 @@ // For license information, please see license.txt frappe.ui.form.on('Student Admission', { - refresh: function(frm) { - + program: function(frm) { + if (frm.doc.academic_year && frm.doc.program) { + frm.doc.route = frappe.model.scrub(frm.doc.program) + "-" + frappe.model.scrub(frm.doc.academic_year) + frm.refresh_field("route"); + } + }, + + academic_year: function(frm) { + frm.trigger("program"); } }); diff --git a/erpnext/schools/doctype/student_admission/student_admission.json b/erpnext/schools/doctype/student_admission/student_admission.json index abd4c93582f..c956085ea70 100644 --- a/erpnext/schools/doctype/student_admission/student_admission.json +++ b/erpnext/schools/doctype/student_admission/student_admission.json @@ -163,7 +163,7 @@ "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -227,6 +227,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "", "fieldname": "route", "fieldtype": "Data", "hidden": 0, @@ -243,6 +244,32 @@ "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 1 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "application_form_route", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Application Form Route", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, @@ -336,7 +363,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-15 02:59:15.180465", + "modified": "2016-09-15 05:59:18.435682", "modified_by": "Administrator", "module": "Schools", "name": "Student Admission", diff --git a/erpnext/schools/doctype/student_admission/student_admission.py b/erpnext/schools/doctype/student_admission/student_admission.py index e0ac983437e..faf945622c9 100644 --- a/erpnext/schools/doctype/student_admission/student_admission.py +++ b/erpnext/schools/doctype/student_admission/student_admission.py @@ -10,7 +10,8 @@ from frappe import _ class StudentAdmission(WebsiteGenerator): website = frappe._dict( template = "templates/generators/student_admission.html", - condition_field = "publish" + condition_field = "publish", + page_title_field = "route" ) def get_context(self, context): diff --git a/erpnext/templates/generators/student_admission.html b/erpnext/templates/generators/student_admission.html index 53c5311de11..bf138f0ea61 100644 --- a/erpnext/templates/generators/student_admission.html +++ b/erpnext/templates/generators/student_admission.html @@ -40,10 +40,12 @@ +{%- if application_form_route -%}

+ href='/{{ doc.application_form_route }}?program={{ doc.program }}&academic_year={{ doc.academic_year }}&new=1'> {{ _("Apply Now") }}

+{% endif %} {% endblock %} From bb5eb7d6f41ad7e347853fd5c14e36ab432d97e0 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 15 Sep 2016 16:44:25 +0530 Subject: [PATCH 78/84] Added title to Student Admission (#6379) --- .../student_admission/student_admission.json | 30 +++++++++++++++++-- .../student_admission/student_admission.py | 4 +++ .../generators/student_admission.html | 6 +++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/erpnext/schools/doctype/student_admission/student_admission.json b/erpnext/schools/doctype/student_admission/student_admission.json index c956085ea70..e757ae11018 100644 --- a/erpnext/schools/doctype/student_admission/student_admission.json +++ b/erpnext/schools/doctype/student_admission/student_admission.json @@ -90,6 +90,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Title", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -363,7 +389,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-15 05:59:18.435682", + "modified": "2016-09-15 07:03:55.581346", "modified_by": "Administrator", "module": "Schools", "name": "Student Admission", @@ -396,6 +422,6 @@ "read_only_onload": 0, "sort_field": "modified", "sort_order": "DESC", - "title_field": "program", + "title_field": "title", "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/schools/doctype/student_admission/student_admission.py b/erpnext/schools/doctype/student_admission/student_admission.py index faf945622c9..c4384e2133d 100644 --- a/erpnext/schools/doctype/student_admission/student_admission.py +++ b/erpnext/schools/doctype/student_admission/student_admission.py @@ -16,6 +16,10 @@ class StudentAdmission(WebsiteGenerator): def get_context(self, context): context.parents = [{'name': 'admissions', 'title': _('All Student Admissions') }] + + def validate(self): + if not self.title: + self.title = self.program + " admissions for " + self.academic_year def get_list_context(context): context.title = _("Student Admissions") diff --git a/erpnext/templates/generators/student_admission.html b/erpnext/templates/generators/student_admission.html index bf138f0ea61..7eb92267c03 100644 --- a/erpnext/templates/generators/student_admission.html +++ b/erpnext/templates/generators/student_admission.html @@ -7,7 +7,7 @@ {% block header %} -

{{ program }}

+

{{ title }}

{% endblock %} {% block page_content %} @@ -22,6 +22,10 @@ {% endif %} + + + + From 3cef7d5ae9f02b505b0e915169ddb80b35ae9240 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 15 Sep 2016 17:01:00 +0530 Subject: [PATCH 79/84] Update production_planning_tool.py --- .../production_planning_tool/production_planning_tool.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index cfa6cdc01ac..8521b5e8d68 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -307,7 +307,7 @@ class ProductionPlanningTool(Document): self.get_raw_materials(bom_dict) return self.get_csv() - def get_raw_materials(self, bom_dict,non_stock_item=False): + def get_raw_materials(self, bom_dict,non_stock_item=0): """ Get raw materials considering sub-assembly items { "item_code": [qty_required, description, stock_uom, min_order_qty] @@ -343,7 +343,7 @@ class ProductionPlanningTool(Document): self.make_items_dict(item_list) - def get_subitems(self,bom_wise_item_details, bom, parent_qty, include_sublevel, only_raw, supply_subs,non_stock_item=False): + def get_subitems(self,bom_wise_item_details, bom, parent_qty, include_sublevel, only_raw, supply_subs,non_stock_item=0): for d in frappe.db.sql("""select bom_item.item_code, default_material_request_type, ifnull(%(parent_qty)s * sum(bom_item.qty/ifnull(bom.quantity, 1)), 0) as qty, item.is_sub_contracted_item as is_sub_contracted, item.default_bom as default_bom From 59dc0ece9f286c5e4474c0be606b926da88e9150 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 16 Sep 2016 11:37:38 +0530 Subject: [PATCH 80/84] [enhance] added Lead Source master, fixes #6231 --- .../doctype/sales_invoice/sales_invoice.json | 62 +- erpnext/crm/doctype/lead/lead.json | 1958 +++++++++-------- .../crm/doctype/opportunity/opportunity.json | 43 +- erpnext/patches.txt | 1 + erpnext/patches/v7_1/update_lead_source.py | 21 + .../selling/doctype/lead_source/__init__.py | 0 .../doctype/lead_source/lead_source.js | 8 + .../doctype/lead_source/lead_source.json | 131 ++ .../doctype/lead_source/lead_source.py | 10 + .../doctype/lead_source/test_lead_source.py | 12 + .../selling/doctype/quotation/quotation.json | 88 +- .../doctype/sales_order/sales_order.json | 122 +- .../setup/setup_wizard/install_fixtures.py | 7 + .../doctype/delivery_note/delivery_note.json | 118 +- 14 files changed, 1575 insertions(+), 1006 deletions(-) create mode 100644 erpnext/patches/v7_1/update_lead_source.py create mode 100644 erpnext/selling/doctype/lead_source/__init__.py create mode 100644 erpnext/selling/doctype/lead_source/lead_source.js create mode 100644 erpnext/selling/doctype/lead_source/lead_source.json create mode 100644 erpnext/selling/doctype/lead_source/lead_source.py create mode 100644 erpnext/selling/doctype/lead_source/test_lead_source.py diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 99b479348ac..30f96e468b3 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -337,34 +337,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "project", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Project", - "length": 0, - "no_copy": 0, - "oldfieldname": "project_name", - "oldfieldtype": "Link", - "options": "Project", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -2901,6 +2873,34 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "oldfieldname": "project_name", + "oldfieldtype": "Link", + "options": "Project", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2961,7 +2961,7 @@ "collapsible": 0, "columns": 0, "fieldname": "source", - "fieldtype": "Select", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -2972,7 +2972,7 @@ "no_copy": 0, "oldfieldname": "source", "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", + "options": "Lead Source", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -3867,7 +3867,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-08 09:05:02.895682", + "modified": "2016-09-16 01:53:40.014037", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json index 7cd9d60992e..6e87e23cd6a 100644 --- a/erpnext/crm/doctype/lead/lead.json +++ b/erpnext/crm/doctype/lead/lead.json @@ -1,1046 +1,1084 @@ { - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "naming_series:", - "creation": "2013-04-10 11:45:37", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", + "allow_copy": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 0, + "creation": "2013-04-10 11:45:37", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, "fields": [ { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "lead_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "", - "length": 0, - "no_copy": 0, - "options": "icon-user", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "lead_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "icon-user", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "naming_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Series", - "length": 0, - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "LEAD-", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "oldfieldname": "naming_series", + "oldfieldtype": "Select", + "options": "LEAD-", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "lead_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Person Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "lead_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "lead_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Person Name", + "length": 0, + "no_copy": 0, + "oldfieldname": "lead_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "company_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 1, - "label": "Organization Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "company_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 1, + "label": "Organization Name", + "length": 0, + "no_copy": 0, + "oldfieldname": "company_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "email_id", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Email Id", - "length": 0, - "no_copy": 0, - "oldfieldname": "email_id", - "oldfieldtype": "Data", - "options": "Email", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email_id", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Email Id", + "length": 0, + "no_copy": 0, + "oldfieldname": "email_id", + "oldfieldtype": "Data", + "options": "Email", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "col_break123", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break123", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "50%" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "default": "Lead", - "fieldname": "status", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 1, - "label": "Status", - "length": 0, - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "Lead\nOpen\nReplied\nOpportunity\nInterested\nConverted\nDo Not Contact", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Lead", + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 1, + "label": "Status", + "length": 0, + "no_copy": 1, + "oldfieldname": "status", + "oldfieldtype": "Select", + "options": "Lead\nOpen\nReplied\nOpportunity\nInterested\nConverted\nDo Not Contact", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "source", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Source", - "length": 0, - "no_copy": 0, - "oldfieldname": "source", - "oldfieldtype": "Select", - "options": "\nAdvertisement\nBlog Post\nCampaign\nCall\nCustomer\nExhibition\nSupplier\nWebsite\nEmail", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "source", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Source", + "length": 0, + "no_copy": 0, + "oldfieldname": "source", + "oldfieldtype": "Select", + "options": "Lead Source", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "depends_on": "eval:doc.source == 'Customer'", - "fieldname": "customer", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "From Customer", - "length": 0, - "no_copy": 1, - "oldfieldname": "customer", - "oldfieldtype": "Link", - "options": "Customer", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.source == 'Customer'", + "fieldname": "customer", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "From Customer", + "length": 0, + "no_copy": 1, + "oldfieldname": "customer", + "oldfieldtype": "Link", + "options": "Customer", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "depends_on": "eval:doc.source == 'Campaign'", - "description": "", - "fieldname": "campaign_name", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Campaign Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "campaign_name", - "oldfieldtype": "Link", - "options": "Campaign", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.source == 'Campaign'", + "description": "", + "fieldname": "campaign_name", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Campaign Name", + "length": 0, + "no_copy": 0, + "oldfieldname": "campaign_name", + "oldfieldtype": "Link", + "options": "Campaign", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "image", - "fieldtype": "Attach Image", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Image", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "section_break_12", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_12", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "default": "__user", - "fieldname": "lead_owner", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Lead Owner", - "length": 0, - "no_copy": 0, - "oldfieldname": "lead_owner", - "oldfieldtype": "Link", - "options": "User", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "__user", + "fieldname": "lead_owner", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Lead Owner", + "length": 0, + "no_copy": 0, + "oldfieldname": "lead_owner", + "oldfieldtype": "Link", + "options": "User", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break_14", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "contact_by", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Next Contact By", - "length": 0, - "no_copy": 0, - "oldfieldname": "contact_by", - "oldfieldtype": "Link", - "options": "User", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contact_by", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Next Contact By", + "length": 0, + "no_copy": 0, + "oldfieldname": "contact_by", + "oldfieldtype": "Link", + "options": "User", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "Add to calendar on this date", - "fieldname": "contact_date", - "fieldtype": "Datetime", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Next Contact Date", - "length": 0, - "no_copy": 1, - "oldfieldname": "contact_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Add to calendar on this date", + "fieldname": "contact_date", + "fieldtype": "Datetime", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Next Contact Date", + "length": 0, + "no_copy": 1, + "oldfieldname": "contact_date", + "oldfieldtype": "Date", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "fieldname": "contact_info", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Address & Contact", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "options": "icon-map-marker", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "contact_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address & Contact", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "options": "icon-map-marker", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "depends_on": "eval:doc.__islocal", - "fieldname": "address_desc", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Address Desc", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.__islocal", + "fieldname": "address_desc", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address Desc", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "address_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Address HTML", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Address HTML", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "phone", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Phone", - "length": 0, - "no_copy": 0, - "oldfieldname": "contact_no", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Phone", + "length": 0, + "no_copy": 0, + "oldfieldname": "contact_no", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "mobile_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Mobile No.", - "length": 0, - "no_copy": 0, - "oldfieldname": "mobile_no", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mobile_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Mobile No.", + "length": 0, + "no_copy": 0, + "oldfieldname": "mobile_no", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "fax", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Fax", - "length": 0, - "no_copy": 0, - "oldfieldname": "fax", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fax", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Fax", + "length": 0, + "no_copy": 0, + "oldfieldname": "fax", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "website", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Website", - "length": 0, - "no_copy": 0, - "oldfieldname": "website", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "website", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Website", + "length": 0, + "no_copy": 0, + "oldfieldname": "website", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "", - "fieldname": "territory", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Territory", - "length": 0, - "no_copy": 0, - "oldfieldname": "territory", - "oldfieldtype": "Link", - "options": "Territory", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "territory", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Territory", + "length": 0, + "no_copy": 0, + "oldfieldname": "territory", + "oldfieldtype": "Link", + "options": "Territory", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "fieldname": "more_info", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "More Information", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "icon-file-text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "more_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "More Information", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "icon-file-text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "type", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Lead Type", - "length": 0, - "no_copy": 0, - "oldfieldname": "type", - "oldfieldtype": "Select", - "options": "\nClient\nChannel Partner\nConsultant", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Lead Type", + "length": 0, + "no_copy": 0, + "oldfieldname": "type", + "oldfieldtype": "Select", + "options": "\nClient\nChannel Partner\nConsultant", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "market_segment", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 1, - "in_list_view": 0, - "label": "Market Segment", - "length": 0, - "no_copy": 0, - "oldfieldname": "market_segment", - "oldfieldtype": "Select", - "options": "\nLower Income\nMiddle Income\nUpper Income", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "market_segment", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_list_view": 0, + "label": "Market Segment", + "length": 0, + "no_copy": 0, + "oldfieldname": "market_segment", + "oldfieldtype": "Select", + "options": "\nLower Income\nMiddle Income\nUpper Income", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "industry", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Industry", - "length": 0, - "no_copy": 0, - "oldfieldname": "industry", - "oldfieldtype": "Link", - "options": "Industry Type", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "industry", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Industry", + "length": 0, + "no_copy": 0, + "oldfieldname": "industry", + "oldfieldtype": "Link", + "options": "Industry Type", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "request_type", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Request Type", - "length": 0, - "no_copy": 0, - "oldfieldname": "request_type", - "oldfieldtype": "Select", - "options": "\nProduct Enquiry\nRequest for Information\nSuggestions\nOther", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "request_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Request Type", + "length": 0, + "no_copy": 0, + "oldfieldname": "request_type", + "oldfieldtype": "Select", + "options": "\nProduct Enquiry\nRequest for Information\nSuggestions\nOther", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "50%" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "unsubscribed", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Unsubscribed", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "unsubscribed", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Unsubscribed", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "blog_subscriber", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Blog Subscriber", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "blog_subscriber", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Blog Subscriber", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "icon-user", - "idx": 5, - "image_field": "image", - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-04-20 11:01:14.179325", - "modified_by": "Administrator", - "module": "CRM", - "name": "Lead", - "owner": "Administrator", + ], + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "icon-user", + "idx": 5, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2016-09-16 01:52:31.334462", + "modified_by": "Administrator", + "module": "CRM", + "name": "Lead", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 1, - "print": 0, - "read": 1, - "report": 1, - "role": "All", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 1, + "print": 0, + "read": 1, + "report": 1, + "role": "All", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 1, - "print": 0, - "read": 1, - "report": 1, - "role": "Sales Manager", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 1, + "print": 0, + "read": 1, + "report": 1, + "role": "Sales Manager", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 1, - "print": 0, - "read": 1, - "report": 1, - "role": "Sales User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 1, + "print": 0, + "read": 1, + "report": 1, + "role": "Sales User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 } - ], - "read_only": 0, - "read_only_onload": 0, - "search_fields": "lead_name,lead_owner,status", - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "lead_name", + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "lead_name,lead_owner,status", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "lead_name", "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json index ee625b46c1f..84c3567781f 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.json +++ b/erpnext/crm/doctype/opportunity/opportunity.json @@ -16,6 +16,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "from_section", "fieldtype": "Section Break", "hidden": 0, @@ -41,6 +42,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -68,6 +70,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "enquiry_from", "fieldtype": "Select", "hidden": 0, @@ -95,6 +98,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.enquiry_from===\"Customer\"", "fieldname": "customer", "fieldtype": "Link", @@ -123,6 +127,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.enquiry_from===\"Lead\"", "fieldname": "lead", "fieldtype": "Link", @@ -151,6 +156,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "customer_name", "fieldtype": "Data", @@ -176,6 +182,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -201,6 +208,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "title", "fieldtype": "Data", "hidden": 1, @@ -226,6 +234,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Sales", "fieldname": "enquiry_type", "fieldtype": "Select", @@ -254,6 +263,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Open", "fieldname": "status", "fieldtype": "Select", @@ -282,6 +292,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.status===\"Lost\"", "fieldname": "order_lost_reason", "fieldtype": "Small Text", @@ -307,6 +318,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "mins_to_first_response", "fieldtype": "Float", "hidden": 0, @@ -332,6 +344,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "with_items", "fieldtype": "Check", "hidden": 0, @@ -357,6 +370,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "with_items", "fieldname": "items_section", "fieldtype": "Section Break", @@ -384,6 +398,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "items", "fieldtype": "Table", @@ -413,6 +428,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "next_contact_by", + "columns": 0, "depends_on": "eval:doc.lead || doc.customer", "fieldname": "contact_info", "fieldtype": "Section Break", @@ -439,6 +455,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.customer || doc.lead", "fieldname": "customer_address", "fieldtype": "Link", @@ -465,6 +482,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 1, @@ -491,6 +509,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "description": "", "fieldname": "territory", @@ -518,6 +537,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "description": "", "fieldname": "customer_group", @@ -547,6 +567,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break3", "fieldtype": "Column Break", "hidden": 0, @@ -570,6 +591,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.lead || doc.customer", "fieldname": "contact_person", "fieldtype": "Link", @@ -596,6 +618,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "contact_display", "fieldtype": "Small Text", @@ -621,6 +644,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.lead || doc.customer", "fieldname": "contact_email", "fieldtype": "Data", @@ -646,6 +670,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.lead || doc.customer", "fieldname": "contact_mobile", "fieldtype": "Small Text", @@ -672,6 +697,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "", + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -698,8 +724,9 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "source", - "fieldtype": "Select", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -710,7 +737,7 @@ "no_copy": 0, "oldfieldname": "source", "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign\nWalk In", + "options": "Lead Source", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -725,6 +752,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Enter name of campaign if source of enquiry is campaign", "fieldname": "campaign", "fieldtype": "Link", @@ -753,6 +781,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -778,6 +807,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -805,6 +835,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "transaction_date", "fieldtype": "Date", @@ -834,6 +865,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "contact_by", + "columns": 0, "fieldname": "next_contact", "fieldtype": "Section Break", "hidden": 0, @@ -859,6 +891,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Your sales person who will contact the customer in future", "fieldname": "contact_by", "fieldtype": "Link", @@ -888,6 +921,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Your sales person will get a reminder on this date to contact the customer", "fieldname": "contact_date", "fieldtype": "Datetime", @@ -915,6 +949,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break2", "fieldtype": "Column Break", "hidden": 0, @@ -940,6 +975,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "to_discuss", "fieldtype": "Small Text", "hidden": 0, @@ -966,6 +1002,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -1002,7 +1039,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-28 15:58:06.614493", + "modified": "2016-09-16 01:52:06.229882", "modified_by": "Administrator", "module": "CRM", "name": "Opportunity", diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2b0aaef3ef6..40441c8e228 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -327,3 +327,4 @@ erpnext.patches.v7_1.set_student_guardian erpnext.patches.v7_0.update_conversion_factor_in_supplier_quotation_item erpnext.patches.v7_1.move_sales_invoice_from_parent_to_child_timesheet execute:frappe.db.sql("update `tabTimesheet` ts, `tabEmployee` emp set ts.employee_name = emp.employee_name where emp.name = ts.employee and ts.employee_name is null and ts.employee is not null") +erpnext.patches.v7_1.update_lead_source diff --git a/erpnext/patches/v7_1/update_lead_source.py b/erpnext/patches/v7_1/update_lead_source.py new file mode 100644 index 00000000000..3edffd0615f --- /dev/null +++ b/erpnext/patches/v7_1/update_lead_source.py @@ -0,0 +1,21 @@ +import frappe +from frappe import _ + +def execute(): + from erpnext.setup.setup_wizard.install_fixtures import default_lead_sources + + frappe.reload_doc('selling', 'doctype', 'lead_source') + + frappe.local.lang = frappe.db.get_default("lang") or 'en' + + for s in default_lead_sources: + frappe.get_doc(dict(doctype='Lead Source', source_name=_(s))).insert() + + # get lead sources in existing forms (customized) + # and create a document if not created + for d in ['Lead', 'Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice']: + sources = frappe.db.sql_list('select distinct source from `tab{0}`'.format(d)) + for s in sources: + if s and s not in default_lead_sources: + frappe.get_doc(dict(doctype='Lead Source', source_name=s)).insert() + diff --git a/erpnext/selling/doctype/lead_source/__init__.py b/erpnext/selling/doctype/lead_source/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/selling/doctype/lead_source/lead_source.js b/erpnext/selling/doctype/lead_source/lead_source.js new file mode 100644 index 00000000000..6af6a4f6486 --- /dev/null +++ b/erpnext/selling/doctype/lead_source/lead_source.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Lead Source', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/selling/doctype/lead_source/lead_source.json b/erpnext/selling/doctype/lead_source/lead_source.json new file mode 100644 index 00000000000..e6779158751 --- /dev/null +++ b/erpnext/selling/doctype/lead_source/lead_source.json @@ -0,0 +1,131 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:source_name", + "beta": 0, + "creation": "2016-09-16 01:47:47.382372", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "source_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Source Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "details", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2016-09-16 02:03:01.441622", + "modified_by": "Administrator", + "module": "Selling", + "name": "Lead Source", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/selling/doctype/lead_source/lead_source.py b/erpnext/selling/doctype/lead_source/lead_source.py new file mode 100644 index 00000000000..d2d75586212 --- /dev/null +++ b/erpnext/selling/doctype/lead_source/lead_source.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class LeadSource(Document): + pass diff --git a/erpnext/selling/doctype/lead_source/test_lead_source.py b/erpnext/selling/doctype/lead_source/test_lead_source.py new file mode 100644 index 00000000000..42df18f1818 --- /dev/null +++ b/erpnext/selling/doctype/lead_source/test_lead_source.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Lead Source') + +class TestLeadSource(unittest.TestCase): + pass diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index 53bd725f609..4668c3bf56f 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_section", "fieldtype": "Section Break", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "default": "{customer_name}", "fieldname": "title", "fieldtype": "Data", @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -93,6 +96,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Customer", "fieldname": "quotation_to", "fieldtype": "Select", @@ -121,6 +125,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.quotation_to == \"Customer\"", "fieldname": "customer", "fieldtype": "Link", @@ -149,6 +154,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.quotation_to == \"Lead\"", "fieldname": "lead", "fieldtype": "Link", @@ -177,6 +183,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "customer_name", "fieldtype": "Data", "hidden": 1, @@ -201,6 +208,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -226,6 +234,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -254,6 +263,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "company", "fieldtype": "Link", @@ -283,6 +293,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "transaction_date", "fieldtype": "Date", @@ -311,6 +322,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Sales", "fieldname": "order_type", "fieldtype": "Select", @@ -340,6 +352,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "", + "columns": 0, "depends_on": "eval:(doc.customer || doc.lead)", "fieldname": "contact_section", "fieldtype": "Section Break", @@ -366,6 +379,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_address", "fieldtype": "Link", "hidden": 0, @@ -391,6 +405,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 0, @@ -417,6 +432,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.customer", "fieldname": "contact_person", "fieldtype": "Link", @@ -445,6 +461,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 0, @@ -469,6 +486,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Small Text", "hidden": 0, @@ -493,6 +511,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Data", "hidden": 1, @@ -518,6 +537,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "col_break98", "fieldtype": "Column Break", @@ -543,6 +563,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address_name", "fieldtype": "Link", "hidden": 0, @@ -568,6 +589,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address", "fieldtype": "Small Text", "hidden": 0, @@ -592,6 +614,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "description": "", "fieldname": "customer_group", @@ -621,6 +644,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "territory", "fieldtype": "Link", @@ -647,6 +671,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "hidden": 0, @@ -672,6 +697,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -700,6 +726,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which customer's currency is converted to company's base currency", "fieldname": "conversion_rate", "fieldtype": "Float", @@ -729,6 +756,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break2", "fieldtype": "Column Break", "hidden": 0, @@ -753,6 +781,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "selling_price_list", "fieldtype": "Link", "hidden": 0, @@ -781,6 +810,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "price_list_currency", "fieldtype": "Link", "hidden": 0, @@ -806,6 +836,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which Price list currency is converted to company's base currency", "fieldname": "plc_conversion_rate", "fieldtype": "Float", @@ -832,6 +863,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ignore_pricing_rule", "fieldtype": "Check", "hidden": 0, @@ -856,6 +888,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -882,6 +915,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -910,6 +944,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sec_break23", "fieldtype": "Section Break", "hidden": 0, @@ -933,6 +968,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total", "fieldtype": "Currency", "hidden": 0, @@ -959,6 +995,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_net_total", "fieldtype": "Currency", "hidden": 0, @@ -987,6 +1024,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_28", "fieldtype": "Column Break", "hidden": 0, @@ -1010,6 +1048,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total", "fieldtype": "Currency", "hidden": 0, @@ -1036,6 +1075,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "net_total", "fieldtype": "Currency", "hidden": 0, @@ -1061,6 +1101,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_section", "fieldtype": "Section Break", "hidden": 0, @@ -1087,6 +1128,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges", "fieldtype": "Link", "hidden": 0, @@ -1114,6 +1156,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_34", "fieldtype": "Column Break", "hidden": 0, @@ -1137,6 +1180,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_rule", "fieldtype": "Link", "hidden": 0, @@ -1163,6 +1207,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_36", "fieldtype": "Section Break", "hidden": 0, @@ -1186,6 +1231,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -1213,6 +1259,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "other_charges_calculation", "fieldtype": "HTML", "hidden": 0, @@ -1238,6 +1285,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_39", "fieldtype": "Section Break", "hidden": 0, @@ -1261,6 +1309,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1288,6 +1337,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_42", "fieldtype": "Column Break", "hidden": 0, @@ -1311,6 +1361,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1337,6 +1388,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "discount_amount", + "columns": 0, "fieldname": "section_break_44", "fieldtype": "Section Break", "hidden": 0, @@ -1362,6 +1414,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Grand Total", "fieldname": "apply_discount_on", "fieldtype": "Select", @@ -1389,6 +1442,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1415,6 +1469,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_46", "fieldtype": "Column Break", "hidden": 0, @@ -1439,6 +1494,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "additional_discount_percentage", "fieldtype": "Float", "hidden": 0, @@ -1464,6 +1520,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1489,6 +1546,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals", "fieldtype": "Section Break", "hidden": 0, @@ -1515,6 +1573,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1543,6 +1602,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "In Words will be visible once you save the Quotation.", "fieldname": "base_in_words", "fieldtype": "Data", @@ -1571,6 +1631,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1599,6 +1660,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break3", "fieldtype": "Column Break", "hidden": 0, @@ -1624,6 +1686,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1652,6 +1715,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1680,6 +1744,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_words", "fieldtype": "Data", "hidden": 0, @@ -1708,6 +1773,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "terms", + "columns": 0, "fieldname": "terms_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -1734,6 +1800,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "tc_name", "fieldtype": "Link", "hidden": 0, @@ -1761,6 +1828,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "terms", "fieldtype": "Text Editor", "hidden": 0, @@ -1787,6 +1855,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "print_settings", "fieldtype": "Section Break", "hidden": 0, @@ -1812,6 +1881,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, @@ -1839,6 +1909,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "select_print_heading", "fieldtype": "Link", "hidden": 0, @@ -1866,6 +1937,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_73", "fieldtype": "Column Break", "hidden": 0, @@ -1890,6 +1962,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "language", "fieldtype": "Data", "hidden": 0, @@ -1915,6 +1988,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -1941,6 +2015,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "campaign", "fieldtype": "Link", "hidden": 0, @@ -1968,8 +2043,9 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "source", - "fieldtype": "Select", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -1980,7 +2056,7 @@ "no_copy": 0, "oldfieldname": "source", "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", + "options": "Lead Source", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -1995,6 +2071,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.status===\"Lost\"", "fieldname": "order_lost_reason", "fieldtype": "Small Text", @@ -2022,6 +2099,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break4", "fieldtype": "Column Break", "hidden": 0, @@ -2047,6 +2125,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -2075,6 +2154,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "enq_det", "fieldtype": "Text", "hidden": 1, @@ -2110,7 +2190,7 @@ "istable": 0, "max_attachments": 1, "menu_index": 0, - "modified": "2016-08-11 08:52:09.666306", + "modified": "2016-09-16 01:53:05.665422", "modified_by": "Administrator", "module": "Selling", "name": "Quotation", @@ -2290,4 +2370,4 @@ "timeline_field": "customer", "title_field": "title", "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 3699595cba7..262fee126de 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_section", "fieldtype": "Section Break", "hidden": 0, @@ -40,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -65,6 +67,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "default": "{customer_name}", "fieldname": "title", "fieldtype": "Data", @@ -91,6 +94,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -118,6 +122,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "customer", "fieldtype": "Link", "hidden": 0, @@ -145,6 +150,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "customer_name", "fieldtype": "Data", "hidden": 0, @@ -169,6 +175,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Sales", "depends_on": "", "fieldname": "order_type", @@ -198,6 +205,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -223,6 +231,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 1, @@ -251,6 +260,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "company", "fieldtype": "Link", @@ -280,6 +290,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "transaction_date", "fieldtype": "Date", @@ -308,6 +319,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.order_type == 'Sales'", "fieldname": "delivery_date", "fieldtype": "Date", @@ -336,6 +348,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "description": "", "fieldname": "po_no", @@ -365,6 +378,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.po_no", "description": "", "fieldname": "po_date", @@ -395,6 +409,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "", + "columns": 0, "depends_on": "customer", "fieldname": "contact_info", "fieldtype": "Section Break", @@ -421,6 +436,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_address", "fieldtype": "Link", "hidden": 0, @@ -446,6 +462,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 0, @@ -470,6 +487,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_person", "fieldtype": "Link", "hidden": 0, @@ -495,6 +513,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 0, @@ -519,6 +538,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Small Text", "hidden": 0, @@ -543,6 +563,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Data", "hidden": 1, @@ -568,6 +589,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break46", "fieldtype": "Column Break", "hidden": 0, @@ -592,6 +614,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address_name", "fieldtype": "Link", "hidden": 0, @@ -617,6 +640,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address", "fieldtype": "Small Text", "hidden": 0, @@ -641,6 +665,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "customer_group", "fieldtype": "Link", @@ -667,6 +692,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "territory", "fieldtype": "Link", @@ -693,6 +719,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "hidden": 0, @@ -718,6 +745,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -746,6 +774,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which customer's currency is converted to company's base currency", "fieldname": "conversion_rate", "fieldtype": "Float", @@ -775,6 +804,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break2", "fieldtype": "Column Break", "hidden": 0, @@ -799,6 +829,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "selling_price_list", "fieldtype": "Link", "hidden": 0, @@ -827,6 +858,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "price_list_currency", "fieldtype": "Link", "hidden": 0, @@ -852,6 +884,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which Price list currency is converted to company's base currency", "fieldname": "plc_conversion_rate", "fieldtype": "Float", @@ -878,6 +911,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ignore_pricing_rule", "fieldtype": "Check", "hidden": 0, @@ -902,6 +936,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -928,6 +963,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -955,6 +991,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_31", "fieldtype": "Section Break", "hidden": 0, @@ -978,6 +1015,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_33a", "fieldtype": "Column Break", "hidden": 0, @@ -1001,6 +1039,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total", "fieldtype": "Currency", "hidden": 0, @@ -1027,6 +1066,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_net_total", "fieldtype": "Currency", "hidden": 0, @@ -1055,6 +1095,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_33", "fieldtype": "Column Break", "hidden": 0, @@ -1078,6 +1119,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total", "fieldtype": "Currency", "hidden": 0, @@ -1104,6 +1146,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "net_total", "fieldtype": "Currency", "hidden": 0, @@ -1129,6 +1172,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_section", "fieldtype": "Section Break", "hidden": 0, @@ -1155,6 +1199,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges", "fieldtype": "Link", "hidden": 0, @@ -1182,6 +1227,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_38", "fieldtype": "Column Break", "hidden": 0, @@ -1205,6 +1251,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_rule", "fieldtype": "Link", "hidden": 0, @@ -1231,6 +1278,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_40", "fieldtype": "Section Break", "hidden": 0, @@ -1254,6 +1302,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -1281,6 +1330,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "other_charges_calculation", "fieldtype": "HTML", "hidden": 0, @@ -1306,6 +1356,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_43", "fieldtype": "Section Break", "hidden": 0, @@ -1329,6 +1380,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1357,6 +1409,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_46", "fieldtype": "Column Break", "hidden": 0, @@ -1381,6 +1434,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1407,6 +1461,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "discount_amount", + "columns": 0, "fieldname": "section_break_48", "fieldtype": "Section Break", "hidden": 0, @@ -1432,6 +1487,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Grand Total", "fieldname": "apply_discount_on", "fieldtype": "Select", @@ -1459,6 +1515,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1485,6 +1542,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_50", "fieldtype": "Column Break", "hidden": 0, @@ -1508,6 +1566,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "additional_discount_percentage", "fieldtype": "Float", @@ -1534,6 +1593,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "discount_amount", "fieldtype": "Currency", @@ -1560,6 +1620,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals", "fieldtype": "Section Break", "hidden": 0, @@ -1586,6 +1647,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1614,6 +1676,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1642,6 +1705,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "In Words will be visible once you save the Sales Order.", "fieldname": "base_in_words", "fieldtype": "Data", @@ -1670,6 +1734,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break3", "fieldtype": "Column Break", "hidden": 0, @@ -1695,6 +1760,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1723,6 +1789,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1751,6 +1818,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_words", "fieldtype": "Data", "hidden": 0, @@ -1778,6 +1846,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "advance_paid", "fieldtype": "Currency", "hidden": 0, @@ -1804,6 +1873,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "packed_items", + "columns": 0, "description": "", "fieldname": "packing_list", "fieldtype": "Section Break", @@ -1831,6 +1901,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "packed_items", "fieldtype": "Table", "hidden": 0, @@ -1859,6 +1930,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "terms", + "columns": 0, "fieldname": "terms_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -1885,6 +1957,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "tc_name", "fieldtype": "Link", "hidden": 0, @@ -1912,6 +1985,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "terms", "fieldtype": "Text Editor", "hidden": 0, @@ -1939,6 +2013,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "project", + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -1965,6 +2040,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Track this Sales Order against any Project", "fieldname": "project", "fieldtype": "Link", @@ -1993,6 +2069,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "party_account_currency", "fieldtype": "Link", "hidden": 1, @@ -2019,6 +2096,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_77", "fieldtype": "Column Break", "hidden": 0, @@ -2043,8 +2121,9 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "source", - "fieldtype": "Select", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -2055,7 +2134,7 @@ "no_copy": 0, "oldfieldname": "source", "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", + "options": "Lead Source", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -2070,6 +2149,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.source == 'Campaign'", "fieldname": "campaign", "fieldtype": "Link", @@ -2098,6 +2178,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "printing_details", "fieldtype": "Section Break", "hidden": 0, @@ -2123,6 +2204,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "language", "fieldtype": "Data", "hidden": 0, @@ -2148,6 +2230,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, @@ -2175,6 +2258,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break4", "fieldtype": "Column Break", "hidden": 0, @@ -2200,6 +2284,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "select_print_heading", "fieldtype": "Link", "hidden": 0, @@ -2227,6 +2312,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "section_break_78", "fieldtype": "Section Break", "hidden": 0, @@ -2253,6 +2339,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -2282,6 +2369,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "delivery_status", "fieldtype": "Select", "hidden": 1, @@ -2307,6 +2395,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.__islocal", "description": "% of materials delivered against this Sales Order", "fieldname": "per_delivered", @@ -2336,6 +2425,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_81", "fieldtype": "Column Break", "hidden": 0, @@ -2359,6 +2449,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.__islocal", "description": "% of materials billed against this Sales Order", "fieldname": "per_billed", @@ -2388,6 +2479,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "billing_status", "fieldtype": "Select", "hidden": 1, @@ -2414,6 +2506,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "commission_rate", + "columns": 0, "fieldname": "sales_team_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -2440,6 +2533,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sales_partner", "fieldtype": "Link", "hidden": 0, @@ -2468,6 +2562,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break7", "fieldtype": "Column Break", "hidden": 0, @@ -2492,6 +2587,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "commission_rate", "fieldtype": "Float", "hidden": 0, @@ -2519,6 +2615,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_commission", "fieldtype": "Currency", "hidden": 0, @@ -2547,6 +2644,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "sales_team", + "columns": 0, "fieldname": "section_break1", "fieldtype": "Section Break", "hidden": 0, @@ -2571,6 +2669,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sales_team", "fieldtype": "Table", "hidden": 0, @@ -2599,6 +2698,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "is_recurring", + "columns": 0, "fieldname": "recurring_order", "fieldtype": "Section Break", "hidden": 0, @@ -2624,6 +2724,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "settings", "fieldtype": "Column Break", "hidden": 0, @@ -2649,6 +2750,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.docstatus<2", "description": "", "fieldname": "is_recurring", @@ -2675,6 +2777,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "recurring_id", @@ -2702,6 +2805,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "recurring_type", @@ -2729,6 +2833,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "repeat_on_day_of_month", @@ -2755,6 +2860,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "end_date", @@ -2781,6 +2887,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "fieldname": "submit_on_creation", "fieldtype": "Check", @@ -2807,6 +2914,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "notify_by_email", @@ -2834,6 +2942,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.notify_by_email && doc.recurring_id === doc.name", "description": "", "fieldname": "notification_email_address", @@ -2861,6 +2970,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.notify_by_email && doc.recurring_id === doc.name", "fieldname": "recurring_print_format", "fieldtype": "Link", @@ -2888,6 +2998,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break83", "fieldtype": "Column Break", "hidden": 0, @@ -2912,6 +3023,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "from_date", @@ -2938,6 +3050,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "to_date", @@ -2964,6 +3077,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "next_date", @@ -2998,7 +3112,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-21 17:24:25.306923", + "modified": "2016-09-16 01:54:10.111597", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", @@ -3012,7 +3126,7 @@ "delete": 1, "email": 1, "export": 0, - "if_owner": 0, + "if_owner": 1, "import": 0, "permlevel": 0, "print": 1, diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 84ac1579efa..1f14ddf3fa3 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -7,6 +7,10 @@ import frappe from frappe import _ +default_lead_sources = ["Existing Customer", "Reference", "Advertisement", + "Cold Calling", "Exhibition", "Supplier Reference", "Mass Mailing", + "Customer's Vendor", "Campaign", "Walk In"] + def install(country=None): records = [ @@ -147,6 +151,7 @@ def install(country=None): {'doctype': 'Activity Type', 'activity_type': _('Execution')}, {'doctype': 'Activity Type', 'activity_type': _('Communication')}, + # Lead Source {'doctype': "Item Attribute", "attribute_name": _("Size"), "item_attribute_values": [ {"attribute_value": _("Extra Small"), "abbr": "XS"}, {"attribute_value": _("Small"), "abbr": "S"}, @@ -191,6 +196,8 @@ def install(country=None): records += [{"doctype":"Industry Type", "industry": d} for d in get_industry_types()] # records += [{"doctype":"Operation", "operation": d} for d in get_operations()] + records += [{'doctype': 'Lead Source', 'source_name': _(d)} for d in default_lead_sources] + from frappe.modules import scrub for r in records: doc = frappe.new_doc(r.get("doctype")) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index bf2f4f3944e..2eff7976133 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -3,16 +3,19 @@ "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", + "beta": 0, "creation": "2013-05-24 19:29:09", "custom": 0, "docstatus": 0, "doctype": "DocType", "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "delivery_to_section", "fieldtype": "Section Break", "hidden": 0, @@ -38,6 +41,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -64,6 +68,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "default": "{customer_name}", "fieldname": "title", "fieldtype": "Data", @@ -90,6 +95,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -117,6 +123,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer", "fieldtype": "Link", "hidden": 0, @@ -144,6 +151,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "customer_name", "fieldtype": "Data", @@ -169,6 +177,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -193,6 +202,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -222,6 +232,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "company", "fieldtype": "Link", @@ -252,6 +263,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "posting_date", "fieldtype": "Date", @@ -281,6 +293,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "po_no", "fieldtype": "Data", "hidden": 0, @@ -309,6 +322,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.po_no", "fieldname": "po_date", "fieldtype": "Date", @@ -338,6 +352,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "is_return", "fieldtype": "Check", "hidden": 0, @@ -363,6 +378,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_return", "fieldname": "return_against", "fieldtype": "Link", @@ -390,6 +406,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "depends_on": "customer", "fieldname": "contact_info", "fieldtype": "Section Break", @@ -416,6 +433,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address_name", "fieldtype": "Link", "hidden": 0, @@ -441,6 +459,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address", "fieldtype": "Small Text", "hidden": 0, @@ -465,6 +484,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_person", "fieldtype": "Link", "hidden": 0, @@ -490,6 +510,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 0, @@ -514,6 +535,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Small Text", "hidden": 1, @@ -538,6 +560,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Data", "hidden": 1, @@ -563,6 +586,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break21", "fieldtype": "Column Break", "hidden": 0, @@ -588,6 +612,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "customer", "fieldname": "customer_address", "fieldtype": "Link", @@ -614,6 +639,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "address_display", "fieldtype": "Small Text", "hidden": 0, @@ -638,6 +664,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "customer_group", "fieldtype": "Link", @@ -664,6 +691,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "territory", "fieldtype": "Link", @@ -690,6 +718,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "hidden": 0, @@ -715,6 +744,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -742,6 +772,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which customer's currency is converted to company's base currency", "fieldname": "conversion_rate", "fieldtype": "Float", @@ -770,6 +801,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break23", "fieldtype": "Column Break", "hidden": 0, @@ -793,6 +825,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "selling_price_list", "fieldtype": "Link", "hidden": 0, @@ -820,6 +853,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "price_list_currency", "fieldtype": "Link", "hidden": 0, @@ -845,6 +879,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Rate at which Price list currency is converted to company's base currency", "fieldname": "plc_conversion_rate", "fieldtype": "Float", @@ -871,6 +906,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ignore_pricing_rule", "fieldtype": "Check", "hidden": 0, @@ -895,6 +931,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -921,6 +958,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -949,6 +987,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "packed_items", + "columns": 0, "fieldname": "packing_list", "fieldtype": "Section Break", "hidden": 0, @@ -975,6 +1014,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "packed_items", "fieldtype": "Table", "hidden": 0, @@ -1002,6 +1042,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "product_bundle_help", "fieldtype": "HTML", "hidden": 0, @@ -1026,6 +1067,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_31", "fieldtype": "Section Break", "hidden": 0, @@ -1049,6 +1091,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total", "fieldtype": "Currency", "hidden": 0, @@ -1075,6 +1118,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_net_total", "fieldtype": "Currency", "hidden": 0, @@ -1104,6 +1148,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_33", "fieldtype": "Column Break", "hidden": 0, @@ -1127,6 +1172,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total", "fieldtype": "Currency", "hidden": 0, @@ -1153,6 +1199,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "net_total", "fieldtype": "Currency", "hidden": 0, @@ -1178,6 +1225,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_section", "fieldtype": "Section Break", "hidden": 0, @@ -1204,6 +1252,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.", "fieldname": "taxes_and_charges", "fieldtype": "Link", @@ -1232,6 +1281,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_39", "fieldtype": "Column Break", "hidden": 0, @@ -1255,6 +1305,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_rule", "fieldtype": "Link", "hidden": 0, @@ -1281,6 +1332,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_41", "fieldtype": "Section Break", "hidden": 0, @@ -1304,6 +1356,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -1331,6 +1384,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "other_charges_calculation", "fieldtype": "HTML", "hidden": 0, @@ -1356,6 +1410,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_44", "fieldtype": "Section Break", "hidden": 0, @@ -1379,6 +1434,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1408,6 +1464,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_47", "fieldtype": "Column Break", "hidden": 0, @@ -1432,6 +1489,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1458,6 +1516,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "discount_amount", + "columns": 0, "fieldname": "section_break_49", "fieldtype": "Section Break", "hidden": 0, @@ -1483,6 +1542,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Grand Total", "fieldname": "apply_discount_on", "fieldtype": "Select", @@ -1510,6 +1570,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1536,6 +1597,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_51", "fieldtype": "Column Break", "hidden": 0, @@ -1559,6 +1621,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "additional_discount_percentage", "fieldtype": "Float", "hidden": 0, @@ -1584,6 +1647,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1609,6 +1673,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals", "fieldtype": "Section Break", "hidden": 0, @@ -1635,6 +1700,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1664,6 +1730,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1693,6 +1760,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "In Words will be visible once you save the Delivery Note.", "fieldname": "base_in_words", "fieldtype": "Data", @@ -1722,6 +1790,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break3", "fieldtype": "Column Break", "hidden": 0, @@ -1746,6 +1815,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1775,6 +1845,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1804,6 +1875,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "In Words (Export) will be visible once you save the Delivery Note.", "fieldname": "in_words", "fieldtype": "Data", @@ -1834,6 +1906,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "terms", + "columns": 0, "fieldname": "terms_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -1860,6 +1933,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "tc_name", "fieldtype": "Link", "hidden": 0, @@ -1887,6 +1961,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "terms", "fieldtype": "Text Editor", "hidden": 0, @@ -1914,6 +1989,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "transporter_name", + "columns": 0, "fieldname": "transporter_info", "fieldtype": "Section Break", "hidden": 0, @@ -1939,6 +2015,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "transporter_name", "fieldtype": "Data", "hidden": 0, @@ -1967,6 +2044,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break34", "fieldtype": "Column Break", "hidden": 0, @@ -1992,6 +2070,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "lr_no", "fieldtype": "Data", @@ -2021,6 +2100,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "description": "", "fieldname": "lr_date", @@ -2051,6 +2131,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -2077,6 +2158,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Track this Delivery Note against any Project", "fieldname": "project", "fieldtype": "Link", @@ -2105,6 +2187,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.source == 'Campaign'", "fieldname": "campaign", "fieldtype": "Link", @@ -2133,8 +2216,9 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "source", - "fieldtype": "Select", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -2145,7 +2229,7 @@ "no_copy": 0, "oldfieldname": "source", "oldfieldtype": "Select", - "options": "\nExisting Customer\nReference\nAdvertisement\nCold Calling\nExhibition\nSupplier Reference\nMass Mailing\nCustomer's Vendor\nCampaign", + "options": "Lead Source", "permlevel": 0, "print_hide": 1, "print_hide_if_no_value": 0, @@ -2160,6 +2244,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break5", "fieldtype": "Column Break", "hidden": 0, @@ -2186,6 +2271,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Time at which items were delivered from warehouse", "fieldname": "posting_time", "fieldtype": "Time", @@ -2215,6 +2301,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "per_billed", "fieldtype": "Percent", "hidden": 0, @@ -2240,6 +2327,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "printing_details", "fieldtype": "Section Break", "hidden": 0, @@ -2265,6 +2353,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, @@ -2292,6 +2381,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "select_print_heading", "fieldtype": "Link", "hidden": 0, @@ -2319,6 +2409,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "language", "fieldtype": "Data", "hidden": 0, @@ -2344,6 +2435,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_88", "fieldtype": "Column Break", "hidden": 0, @@ -2368,6 +2460,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "print_without_amount", "fieldtype": "Check", "hidden": 0, @@ -2394,6 +2487,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "section_break_83", "fieldtype": "Section Break", "hidden": 0, @@ -2418,6 +2512,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -2448,6 +2543,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.__islocal", "description": "% of materials delivered against this Delivery Note", "fieldname": "per_installed", @@ -2476,6 +2572,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "installation_status", "fieldtype": "Select", "hidden": 1, @@ -2500,6 +2597,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_89", "fieldtype": "Column Break", "hidden": 0, @@ -2523,6 +2621,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Required only for sample item.", "fieldname": "to_warehouse", "fieldtype": "Link", @@ -2551,6 +2650,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "excise_page", "fieldtype": "Data", "hidden": 1, @@ -2577,6 +2677,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "instructions", "fieldtype": "Text", "hidden": 0, @@ -2604,6 +2705,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "total_commission", + "columns": 0, "fieldname": "sales_team_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -2630,6 +2732,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sales_partner", "fieldtype": "Link", "hidden": 0, @@ -2659,6 +2762,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break7", "fieldtype": "Column Break", "hidden": 0, @@ -2684,6 +2788,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "commission_rate", "fieldtype": "Float", "hidden": 0, @@ -2712,6 +2817,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_commission", "fieldtype": "Currency", "hidden": 0, @@ -2740,6 +2846,7 @@ "bold": 0, "collapsible": 0, "collapsible_depends_on": "sales_team", + "columns": 0, "fieldname": "section_break1", "fieldtype": "Section Break", "hidden": 0, @@ -2764,6 +2871,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sales_team", "fieldtype": "Table", "hidden": 0, @@ -2792,6 +2900,7 @@ "hide_toolbar": 0, "icon": "icon-truck", "idx": 146, + "image_view": 0, "in_create": 0, "in_dialog": 0, "is_submittable": 1, @@ -2799,7 +2908,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-04-14 12:53:48.081945", + "modified": "2016-09-16 01:54:24.934483", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", @@ -2906,6 +3015,7 @@ "write": 1 } ], + "quick_entry": 0, "read_only": 0, "read_only_onload": 1, "search_fields": "status,customer,customer_name, territory,base_grand_total", @@ -2914,4 +3024,4 @@ "timeline_field": "customer", "title_field": "title", "track_seen": 0 -} +} \ No newline at end of file From 86e660f6c33f0344412fe6de675d3923be18ad00 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 16 Sep 2016 14:51:28 +0530 Subject: [PATCH 81/84] Article on maximum number of fields --- .../en/customize-erpnext/articles/index.txt | 1 + .../maximum-numbers-of-fields-in-a-form.md | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 erpnext/docs/user/manual/en/customize-erpnext/articles/maximum-numbers-of-fields-in-a-form.md diff --git a/erpnext/docs/user/manual/en/customize-erpnext/articles/index.txt b/erpnext/docs/user/manual/en/customize-erpnext/articles/index.txt index 6edbd720e37..f8a81a4e51f 100644 --- a/erpnext/docs/user/manual/en/customize-erpnext/articles/index.txt +++ b/erpnext/docs/user/manual/en/customize-erpnext/articles/index.txt @@ -14,3 +14,4 @@ search-record-by-specific-field set-language set-precision user-restriction +maximum-numbers-of-fields-in-a-form \ No newline at end of file diff --git a/erpnext/docs/user/manual/en/customize-erpnext/articles/maximum-numbers-of-fields-in-a-form.md b/erpnext/docs/user/manual/en/customize-erpnext/articles/maximum-numbers-of-fields-in-a-form.md new file mode 100644 index 00000000000..7751a3d90f9 --- /dev/null +++ b/erpnext/docs/user/manual/en/customize-erpnext/articles/maximum-numbers-of-fields-in-a-form.md @@ -0,0 +1,22 @@ +Sometimes while creating custom fields, you might experienced an error message like below: + +> Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs + +### What it actually means? + +In simple terms, it means that you have reached the limit of maximum numbers of fields for the specific form/doctype. So, what is the limit of maximum numbers of fields? + +In MySQL, there is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact limit depends on several interacting factors. + +Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size. + +The maximum row size constrains the number (and possibly size) of columns because the total length of all columns cannot exceed this size (65,535 bytes). For example, `utf8mb3` characters require up to 3 bytes per character, so for a `VARCHAR(140)` column, the server must allocate `140 × 3 = 420` bytes per value. Consequently, a table cannot contain more than `65,535 / 420 = 156` such columns. + +In Frappe frapework, `VARCHAR(140)` type columns are created based on "Data", "Link", "Select", "Dynamic Link", "Password" and "Read Only" fieldtypes. Hence, you can create approximately 156 such columns in the system. + +### Solutions: + +To add more fields in the system, you can do some changes. + +1. Convert some of the fields to "Text", "Small Text", "Text Editor" or "Code" type field. In MySQL, BLOB and TEXT columns count from one to four plus eight bytes each toward the row-size limit because their contents are stored separately from the rest of the row. So, converting to those fieldtypes will free up some spaces and will allow to add some more fields. +2. Set smaller value in the "Length" property while creating fields, default value is 140. System sets length of `VARCHAR` based on this property and allocates size for that columns. Hence, smaller Length leads to add more fields. \ No newline at end of file From 39b5d39df67fd7f80a214fccb9c750510a2cba32 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 16 Sep 2016 15:55:34 +0530 Subject: [PATCH 82/84] [fix] remove campaign depends on --- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 4 ++-- erpnext/crm/doctype/lead/lead.json | 4 ++-- erpnext/crm/doctype/lead/lead.py | 4 ---- erpnext/docs/user/manual/en/setting-up/email/email-reports.md | 2 +- erpnext/selling/doctype/sales_order/sales_order.json | 4 ++-- erpnext/stock/doctype/delivery_note/delivery_note.json | 4 ++-- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 30f96e468b3..8e6506103d9 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -2931,7 +2931,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.source == 'Campaign'", + "depends_on": "", "fieldname": "campaign", "fieldtype": "Link", "hidden": 0, @@ -3867,7 +3867,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-16 01:53:40.014037", + "modified": "2016-09-16 06:09:01.246951", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json index 6e87e23cd6a..214379a5d1f 100644 --- a/erpnext/crm/doctype/lead/lead.json +++ b/erpnext/crm/doctype/lead/lead.json @@ -263,7 +263,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.source == 'Campaign'", + "depends_on": "", "description": "", "fieldname": "campaign_name", "fieldtype": "Link", @@ -946,7 +946,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-16 01:52:31.334462", + "modified": "2016-09-16 06:17:22.790727", "modified_by": "Administrator", "module": "CRM", "name": "Lead", diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index e1c39189016..605b9e9ecd4 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import frappe from frappe import _ from frappe.utils import cstr, validate_email_add, cint, comma_and, has_gravatar -from frappe import session from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController @@ -34,9 +33,6 @@ class Lead(SellingController): self.set_status() self.check_email_id_is_unique() - if self.source == 'Campaign' and not self.campaign_name and session['user'] != 'Guest': - frappe.throw(_("Campaign Name is required")) - if self.email_id: if not self.flags.ignore_email_validation: validate_email_add(self.email_id, True) diff --git a/erpnext/docs/user/manual/en/setting-up/email/email-reports.md b/erpnext/docs/user/manual/en/setting-up/email/email-reports.md index 723fa27950e..1730143ae9f 100644 --- a/erpnext/docs/user/manual/en/setting-up/email/email-reports.md +++ b/erpnext/docs/user/manual/en/setting-up/email/email-reports.md @@ -22,7 +22,7 @@ If your report has filters, you will see a table with the filters Step 1. Select the Report, the user for which you want to create this report. Permissions will apply for this user -With Filters +With Filters Click on the table to edit the table diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 262fee126de..c8158a6aea8 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -2150,7 +2150,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.source == 'Campaign'", + "depends_on": "", "fieldname": "campaign", "fieldtype": "Link", "hidden": 0, @@ -3112,7 +3112,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-09-16 01:54:10.111597", + "modified": "2016-09-16 06:07:17.882648", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 2eff7976133..1ab1abe07db 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -2188,7 +2188,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.source == 'Campaign'", + "depends_on": "", "fieldname": "campaign", "fieldtype": "Link", "hidden": 0, @@ -2908,7 +2908,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-09-16 01:54:24.934483", + "modified": "2016-09-16 05:55:36.487662", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", From 9919a0a9db4bbc0f3019651c3357b28a747d0585 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Fri, 16 Sep 2016 16:21:36 +0530 Subject: [PATCH 83/84] [fix] #5992 --- erpnext/accounts/doctype/journal_entry/journal_entry.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 13f2f619712..ced56d08c9e 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -259,7 +259,6 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) { if(!doc.company) return; var update_jv_details = function(doc, r) { - var jvdetail = frappe.model.add_child(doc, "Journal Entry Account", "accounts"); $.each(r, function(i, d) { var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts"); row.account = d.account; @@ -267,8 +266,8 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) { }); refresh_field("accounts"); } - - if(!(doc.accounts || []).length) { + + if((!(doc.accounts || []).length) || ((doc.accounts || []).length==1 && !doc.accounts[0].account)) { if(in_list(["Bank Entry", "Cash Entry"], doc.voucher_type)) { return frappe.call({ type: "GET", From cf7a36ac2666a57436aac6ba6fa97b7d29c21a3d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 16 Sep 2016 23:01:41 +0530 Subject: [PATCH 84/84] [fix] fix patch to clear lead customization --- erpnext/patches/v7_1/update_lead_source.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/patches/v7_1/update_lead_source.py b/erpnext/patches/v7_1/update_lead_source.py index 3edffd0615f..c7815c13dd5 100644 --- a/erpnext/patches/v7_1/update_lead_source.py +++ b/erpnext/patches/v7_1/update_lead_source.py @@ -19,3 +19,7 @@ def execute(): if s and s not in default_lead_sources: frappe.get_doc(dict(doctype='Lead Source', source_name=s)).insert() + # remove customization for source + for p in frappe.get_all('Property Setter', {'doc_type':d, 'field_name':'source', 'property':'options'}): + frappe.delete_doc('Property Setter', p.name) +
Program{{ program }}
Academic Year {{ academic_year }}