From 033e2fa8b60ca90e8bea666a903cef391fec1e91 Mon Sep 17 00:00:00 2001 From: Ricardo Johann Date: Fri, 31 Mar 2017 02:18:54 -0300 Subject: [PATCH 001/287] changed accumulated header --- .../report/balance_sheet/balance_sheet.js | 6 +++++ .../report/balance_sheet/balance_sheet.py | 24 ++++++++++++------- .../accounts/report/cash_flow/cash_flow.py | 5 ++-- .../accounts/report/financial_statements.py | 14 +++++++---- .../profit_and_loss_statement.py | 2 +- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js index a20d47c784..9cd92d4367 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.js +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js @@ -3,6 +3,12 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { frappe.query_reports["Balance Sheet"] = erpnext.financial_statements; + + frappe.query_reports["Balance Sheet"]["filters"].push({ + "fieldname": "accumulated_values", + "label": __("Accumulated Values"), + "fieldtype": "Check" + }); }); diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py index 4325afcd29..d5d7a1b88d 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.py +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py @@ -8,11 +8,14 @@ from frappe.utils import flt, cint from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data) def execute(filters=None): - period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity, filters.company) + period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity, filters.accumulated_values) - asset = get_data(filters.company, "Asset", "Debit", period_list, only_current_fiscal_year=False) - liability = get_data(filters.company, "Liability", "Credit", period_list, only_current_fiscal_year=False) - equity = get_data(filters.company, "Equity", "Credit", period_list, only_current_fiscal_year=False) + asset = get_data(filters.company, "Asset", "Debit", period_list, only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + liability = get_data(filters.company, "Liability", "Credit", period_list, only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + equity = get_data(filters.company, "Equity", "Credit", period_list, only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity, period_list, filters.company) @@ -43,9 +46,9 @@ def execute(filters=None): if total_credit: data.append(total_credit) - columns = get_columns(filters.periodicity, period_list, company=filters.company) + columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, company=filters.company) - chart = get_chart_data(columns, asset, liability, equity) + chart = get_chart_data(filters, columns, asset, liability, equity) return columns, data, message, chart @@ -107,7 +110,7 @@ def check_opening_balance(asset, liability, equity): return _("Previous Financial Year is not closed"),opening_balance return None,None -def get_chart_data(columns, asset, liability, equity): +def get_chart_data(filters, columns, asset, liability, equity): x_intervals = ['x'] + [d.get("label") for d in columns[2:]] asset_data, liability_data, equity_data = [], [], [] @@ -128,9 +131,14 @@ def get_chart_data(columns, asset, liability, equity): if equity_data: columns.append(["Equity"] + equity_data) - return { + chart = { "data": { 'x': 'x', 'columns': columns } } + + if not filters.accumulated_values: + chart["chart_type"] = "bar" + + return chart \ No newline at end of file diff --git a/erpnext/accounts/report/cash_flow/cash_flow.py b/erpnext/accounts/report/cash_flow/cash_flow.py index d2c8c3e5f1..be530d8a65 100644 --- a/erpnext/accounts/report/cash_flow/cash_flow.py +++ b/erpnext/accounts/report/cash_flow/cash_flow.py @@ -10,8 +10,7 @@ from erpnext.accounts.utils import get_fiscal_year def execute(filters=None): - period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, - filters.periodicity, filters.company) + period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity, filters.accumulated_values) operation_accounts = { "section_name": "Operations", @@ -104,7 +103,7 @@ def get_account_type_based_data(company, account_type, period_list, accumulated_ data = {} total = 0 for period in period_list: - start_date = get_start_date(period, accumulated_values, company) + start_date = get_start_date(period, accumulated_values) gl_sum = frappe.db.sql_list(""" select sum(credit) - sum(debit) from `tabGL Entry` diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 80b0bf2558..1fc26ac07f 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -4,9 +4,10 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import flt, getdate, get_first_day, add_months, add_days, formatdate +from frappe.utils import (flt, getdate, get_first_day, get_last_day, date_diff, + add_months, add_days, formatdate, cint) -def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, company): +def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_values=False, company=None): """Get a list of dict {"from_date": from_date, "to_date": to_date, "key": key, "label": label} Periodicity can be (Yearly, Quarterly, Monthly)""" @@ -58,11 +59,14 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, company): # common processing for opts in period_list: key = opts["to_date"].strftime("%b_%Y").lower() - if periodicity == "Monthly": + if periodicity == "Monthly" and not accumulated_values: label = formatdate(opts["to_date"], "MMM YYYY") else: - label = get_label(periodicity, opts["from_date"], opts["to_date"]) - + if not accumulated_values: + label = get_label(periodicity, opts["from_date"], opts["to_date"]) + else: + label = get_label(periodicity, period_list[0]["from_date"], opts["to_date"]) + opts.update({ "key": key.replace(" ", "_").replace("-", "_"), "label": label, diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py index 02dc870035..73a4831189 100644 --- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py +++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py @@ -9,7 +9,7 @@ from erpnext.accounts.report.financial_statements import (get_period_list, get_c def execute(filters=None): period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, - filters.periodicity, filters.company) + filters.periodicity, filters.accumulated_values, filters.company) income = get_data(filters.company, "Income", "Credit", period_list, filters = filters, accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) From b66edd19ca56b19923c6d94ce2294ba75010e93d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 30 Mar 2017 21:21:56 +0530 Subject: [PATCH 002/287] [minor] refactor transaction.js --- erpnext/public/js/controllers/transaction.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 1c9c0ab0a3..7e0dccc6a1 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -97,7 +97,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }); if(this.frm.doc.company && !this.frm.doc.amended_from) { - this.frm.script_manager.trigger("company"); + this.frm.trigger("company"); } } @@ -295,7 +295,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ if (item.serial_no) { if (!item.item_code) { - this.frm.script_manager.trigger("item_code", cdt, cdn); + this.frm.trigger("item_code", cdt, cdn); } else { var sr_no = []; From c040015bb5e17b233c343702b82a040b5d43f5df Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 31 Mar 2017 11:58:01 +0530 Subject: [PATCH 003/287] Used db_update in patch to bypass validate and on_update method --- .../v8_0/manufacturer_childtable_migrate.py | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/erpnext/patches/v8_0/manufacturer_childtable_migrate.py b/erpnext/patches/v8_0/manufacturer_childtable_migrate.py index 6d566b45bb..87a3431578 100644 --- a/erpnext/patches/v8_0/manufacturer_childtable_migrate.py +++ b/erpnext/patches/v8_0/manufacturer_childtable_migrate.py @@ -6,20 +6,19 @@ import frappe def execute(): - # reading from json and writing it to mariadb - # reload_doc needed here with information because new table introduced - frappe.reload_doc('stock', 'doctype', 'item_manufacturer') - # reload_doctype is a simpler concept of reload_doc - frappe.reload_doctype('Item') + # reading from json and writing it to mariadb + # reload_doc needed here with information because new table introduced + frappe.reload_doc('stock', 'doctype', 'item_manufacturer') + # reload_doctype is a simpler concept of reload_doc + frappe.reload_doctype('Item') - item_manufacturers = frappe.get_all("Item", fields=["name", "manufacturer", "manufacturer_part_no"]) - for item in item_manufacturers: - if item.manufacturer or item.manufacturer_part_no: - item_doc = frappe.get_doc("Item", item.name) - item_doc.append("manufacturers", { - "manufacturer": item.manufacturer, - "manufacturer_part_no": item.manufacturer_part_no - }) - item_doc.flags.ignore_validate = True - item_doc.flags.ignore_mandatory = True - item_doc.save() + item_manufacturers = frappe.get_all("Item", fields=["name", "manufacturer", "manufacturer_part_no"]) + for item in item_manufacturers: + if item.manufacturer or item.manufacturer_part_no: + item_doc = frappe.get_doc("Item", item.name) + item_doc.append("manufacturers", { + "manufacturer": item.manufacturer, + "manufacturer_part_no": item.manufacturer_part_no + }) + + item_doc.get("manufacturers")[0].db_update() \ No newline at end of file From 34b1dba9aa981dad8f07d8d6b964b878358bef4a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 31 Mar 2017 12:44:10 +0530 Subject: [PATCH 004/287] [fix] get_valuation_rate takes 4 arguments 3 given in gross profit report --- erpnext/accounts/report/gross_profit/gross_profit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 48c6d9a8ab..28b8778242 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -224,7 +224,7 @@ class GrossProfitGenerator(object): else: average_buying_rate = get_incoming_rate(row) if not average_buying_rate: - average_buying_rate = get_valuation_rate(item_code, row.warehouse, allow_zero_rate=True) + average_buying_rate = get_valuation_rate(item_code, row.warehouse, row.parenttype, row.parent, allow_zero_rate=True) self.average_buying_rate[item_code] = average_buying_rate return self.average_buying_rate[item_code] From e7c01887326710c119d85a887f0705814a9fa888 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 31 Mar 2017 13:40:06 +0530 Subject: [PATCH 005/287] [enhance] Get project from bom on production order --- .../manufacturing/doctype/production_order/production_order.js | 2 +- .../manufacturing/doctype/production_order/production_order.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index 1217790113..60373972b9 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -218,7 +218,7 @@ $.extend(cur_frm.cscript, { project: doc.project }, callback: function(r) { - $.each(["description", "stock_uom", "bom_no"], function(i, field) { + $.each(["description", "stock_uom", "project", "bom_no"], function(i, field) { cur_frm.set_value(field, r.message[field]); }); diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 2d9a06711a..b9b10c159a 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -498,6 +498,7 @@ def get_item_details(item, project = None): frappe.throw(_("Default BOM for {0} not found for Project {1}").format(item, project)) frappe.throw(_("Default BOM for {0} not found").format(item)) + res['project'] = frappe.db.get_value('BOM', res['bom_no'], 'project') res.update(check_if_scrap_warehouse_mandatory(res["bom_no"])) return res From 9d9cb8b7b1501d3cf40b3aded49a2c050995df0d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 14:35:23 +0530 Subject: [PATCH 006/287] Revert "Add link field Package Code (fixes #8094)" --- erpnext/stock/doctype/item/item.json | 5868 ++++++++--------- .../stock/doctype/package_code/__init__.py | 0 .../doctype/package_code/package_code.js | 8 - .../doctype/package_code/package_code.json | 142 - .../doctype/package_code/package_code.py | 10 - .../doctype/package_code/test_package_code.py | 10 - 6 files changed, 2919 insertions(+), 3119 deletions(-) delete mode 100644 erpnext/stock/doctype/package_code/__init__.py delete mode 100644 erpnext/stock/doctype/package_code/package_code.js delete mode 100644 erpnext/stock/doctype/package_code/package_code.json delete mode 100644 erpnext/stock/doctype/package_code/package_code.py delete mode 100644 erpnext/stock/doctype/package_code/test_package_code.py diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 97e5748677..2273621560 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -1,3164 +1,3134 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:item_code", - "beta": 0, - "creation": "2013-05-03 10:45:46", - "custom": 0, - "default_print_format": "Standard", - "description": "A Product or a Service that is bought, sold or kept in stock.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 1, - "engine": "InnoDB", + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:item_code", + "beta": 0, + "creation": "2013-05-03 10:45:46", + "custom": 0, + "default_print_format": "Standard", + "description": "A Product or a Service that is bought, sold or kept in stock.", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 1, + "engine": "InnoDB", "fields": [ { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "name_and_description_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-flag", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "name_and_description_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-flag", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "naming_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Series", - "length": 0, - "no_copy": 0, - "options": "ITEM-", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "ITEM-", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "item_code", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Code", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_code", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "item_code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Code", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_code", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "variant_of", - "description": "If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified", - "fieldname": "variant_of", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Variant Of", - "length": 0, - "no_copy": 0, - "options": "Item", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 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": "variant_of", + "description": "If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified", + "fieldname": "variant_of", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Variant Of", + "length": 0, + "no_copy": 0, + "options": "Item", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "fieldname": "item_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "item_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Name", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Barcode", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Barcode", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "fieldname": "item_group", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Item Group", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_group", - "oldfieldtype": "Link", - "options": "Item Group", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "item_group", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Item Group", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_group", + "oldfieldtype": "Link", + "options": "Item Group", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "stock_uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Unit of Measure", - "length": 0, - "no_copy": 0, - "oldfieldname": "stock_uom", - "oldfieldtype": "Link", - "options": "UOM", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "stock_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Unit of Measure", + "length": 0, + "no_copy": 0, + "oldfieldname": "stock_uom", + "oldfieldtype": "Link", + "options": "UOM", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "column_break0", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_break0", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "disabled", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Disabled", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "disabled", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disabled", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "1", - "description": "", - "fieldname": "is_stock_item", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Maintain Stock", - "length": 0, - "no_copy": 0, - "oldfieldname": "is_stock_item", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "description": "", + "fieldname": "is_stock_item", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Maintain Stock", + "length": 0, + "no_copy": 0, + "oldfieldname": "is_stock_item", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:(doc.__islocal&&doc.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", - "fieldname": "opening_stock", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Opening Stock", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:(doc.__islocal&&doc.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", + "fieldname": "opening_stock", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Opening Stock", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:(doc.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", - "fieldname": "valuation_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Valuation Rate", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", + "fieldname": "valuation_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valuation Rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "fieldname": "standard_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Standard Selling Rate", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "standard_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Standard Selling Rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_fixed_asset", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Is Fixed Asset", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "is_fixed_asset", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Is Fixed Asset", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "device_package_code", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Device Package Code", - "length": 0, - "no_copy": 0, - "options": "Package Code", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_fixed_asset", + "fieldname": "asset_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Asset Category", + "length": 0, + "no_copy": 0, + "options": "Asset Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_fixed_asset", - "fieldname": "asset_category", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Asset Category", - "length": 0, - "no_copy": 0, - "options": "Asset Category", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "options": "image", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image", - "length": 0, - "no_copy": 0, - "options": "image", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_11", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_11", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "brand", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Brand", + "length": 0, + "no_copy": 0, + "oldfieldname": "brand", + "oldfieldtype": "Link", + "options": "Brand", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "brand", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Brand", - "length": 0, - "no_copy": 0, - "oldfieldname": "brand", - "oldfieldtype": "Link", - "options": "Brand", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "oldfieldname": "description", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "description", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "oldfieldname": "description", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "is_stock_item", + "columns": 0, + "depends_on": "is_stock_item", + "fieldname": "inventory", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inventory", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-truck", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "collapsible_depends_on": "is_stock_item", - "columns": 0, - "depends_on": "is_stock_item", - "fieldname": "inventory", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inventory", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-truck", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", + "description": "", + "fieldname": "default_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Warehouse", + "length": 0, + "no_copy": 0, + "oldfieldname": "default_warehouse", + "oldfieldtype": "Link", + "options": "Warehouse", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_stock_item", - "description": "", - "fieldname": "default_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Warehouse", - "length": 0, - "no_copy": 0, - "oldfieldname": "default_warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "2099-12-31", + "depends_on": "is_stock_item", + "fieldname": "end_of_life", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "End of Life", + "length": 0, + "no_copy": 0, + "oldfieldname": "end_of_life", + "oldfieldtype": "Date", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "2099-12-31", - "depends_on": "is_stock_item", - "fieldname": "end_of_life", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "End of Life", - "length": 0, - "no_copy": 0, - "oldfieldname": "end_of_life", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "depends_on": "eval:doc.is_stock_item", + "fieldname": "has_batch_no", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Has Batch No", + "length": 0, + "no_copy": 0, + "oldfieldname": "has_batch_no", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "depends_on": "eval:doc.is_stock_item", - "fieldname": "has_batch_no", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Has Batch No", - "length": 0, - "no_copy": 0, - "oldfieldname": "has_batch_no", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "depends_on": "eval:doc.is_stock_item", + "description": "Selecting \"Yes\" will give a unique identity to each entity of this item which can be viewed in the Serial No master.", + "fieldname": "has_serial_no", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Has Serial No", + "length": 0, + "no_copy": 0, + "oldfieldname": "has_serial_no", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "depends_on": "eval:doc.is_stock_item", - "description": "Selecting \"Yes\" will give a unique identity to each entity of this item which can be viewed in the Serial No master.", - "fieldname": "has_serial_no", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Has Serial No", - "length": 0, - "no_copy": 0, - "oldfieldname": "has_serial_no", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "has_serial_no", + "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", + "fieldname": "serial_no_series", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Serial Number Series", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "has_serial_no", - "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", - "fieldname": "serial_no_series", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Serial Number Series", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Purchase", + "fieldname": "default_material_request_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Material Request Type", + "length": 0, + "no_copy": 0, + "options": "Purchase\nMaterial Transfer\nMaterial Issue\nManufacture", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "Purchase", - "fieldname": "default_material_request_type", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Material Request Type", - "length": 0, - "no_copy": 0, - "options": "Purchase\nMaterial Transfer\nMaterial Issue\nManufacture", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", - "fieldname": "column_break1", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", + "fieldname": "column_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "depends_on": "is_stock_item", - "description": "", - "fieldname": "tolerance", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Allow over delivery or receipt upto this percent", - "length": 0, - "no_copy": 0, - "oldfieldname": "tolerance", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", + "description": "", + "fieldname": "tolerance", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow over delivery or receipt upto this percent", + "length": 0, + "no_copy": 0, + "oldfieldname": "tolerance", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_stock_item", - "fieldname": "valuation_method", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Valuation Method", - "length": 0, - "no_copy": 0, - "options": "\nFIFO\nMoving Average", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", + "fieldname": "valuation_method", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valuation Method", + "length": 0, + "no_copy": 0, + "options": "\nFIFO\nMoving Average", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:doc.is_stock_item", - "fieldname": "warranty_period", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Warranty Period (in days)", - "length": 0, - "no_copy": 0, - "oldfieldname": "warranty_period", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.is_stock_item", + "fieldname": "warranty_period", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Warranty Period (in days)", + "length": 0, + "no_copy": 0, + "oldfieldname": "warranty_period", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_stock_item", - "description": "", - "fieldname": "net_weight", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Net Weight", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "is_stock_item", + "description": "", + "fieldname": "net_weight", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Net Weight", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:doc.is_stock_item", - "fieldname": "weight_uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Weight UOM", - "length": 0, - "no_copy": 0, - "options": "UOM", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.is_stock_item", + "fieldname": "weight_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Weight UOM", + "length": 0, + "no_copy": 0, + "options": "UOM", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "depends_on": "is_stock_item", - "description": "", - "fieldname": "reorder_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Auto re-order", - "length": 0, - "no_copy": 0, - "options": "fa fa-rss", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "depends_on": "is_stock_item", + "description": "", + "fieldname": "reorder_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Auto re-order", + "length": 0, + "no_copy": 0, + "options": "fa fa-rss", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "description": "Will also apply for variants unless overrridden", - "fieldname": "reorder_levels", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Reorder level based on Warehouse", - "length": 0, - "no_copy": 0, - "options": "Item Reorder", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "Will also apply for variants unless overrridden", + "fieldname": "reorder_levels", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reorder level based on Warehouse", + "length": 0, + "no_copy": 0, + "options": "Item Reorder", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "depends_on": "", - "fieldname": "unit_of_measure_conversion", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Units of Measure", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "depends_on": "", + "fieldname": "unit_of_measure_conversion", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Units of Measure", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "description": "Will also apply for variants", - "fieldname": "uoms", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "UOMs", - "length": 0, - "no_copy": 1, - "oldfieldname": "uom_conversion_details", - "oldfieldtype": "Table", - "options": "UOM Conversion Detail", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "Will also apply for variants", + "fieldname": "uoms", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOMs", + "length": 0, + "no_copy": 1, + "oldfieldname": "uom_conversion_details", + "oldfieldtype": "Table", + "options": "UOM Conversion Detail", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "collapsible_depends_on": "attributes", - "columns": 0, - "depends_on": "", - "fieldname": "variants_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Variants", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "attributes", + "columns": 0, + "depends_on": "", + "fieldname": "variants_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Variants", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "0", - "depends_on": "eval:!doc.variant_of", - "description": "If this item has variants, then it cannot be selected in sales orders etc.", - "fieldname": "has_variants", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Has Variants", - "length": 0, - "no_copy": 1, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "depends_on": "eval:!doc.variant_of", + "description": "If this item has variants, then it cannot be selected in sales orders etc.", + "fieldname": "has_variants", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Has Variants", + "length": 0, + "no_copy": 1, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "Item Attribute", - "depends_on": "has_variants", - "fieldname": "variant_based_on", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Variant Based On", - "length": 0, - "no_copy": 0, - "options": "Item Attribute\nManufacturer", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Item Attribute", + "depends_on": "has_variants", + "fieldname": "variant_based_on", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Variant Based On", + "length": 0, + "no_copy": 0, + "options": "Item Attribute\nManufacturer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:doc.has_variants && doc.variant_based_on==='Item Attribute'", - "fieldname": "attributes", - "fieldtype": "Table", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Attributes", - "length": 0, - "no_copy": 1, - "options": "Item Variant Attribute", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.has_variants && doc.variant_based_on==='Item Attribute'", + "fieldname": "attributes", + "fieldtype": "Table", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Attributes", + "length": 0, + "no_copy": 1, + "options": "Item Variant Attribute", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "purchase_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Purchase Details", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-shopping-cart", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "purchase_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Purchase Details", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-shopping-cart", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "1", - "fieldname": "is_purchase_item", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Is Purchase Item", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "is_purchase_item", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Is Purchase Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "0.00", - "depends_on": "is_stock_item", - "description": "", - "fieldname": "min_order_qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Minimum Order Qty", - "length": 0, - "no_copy": 0, - "oldfieldname": "min_order_qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0.00", + "depends_on": "is_stock_item", + "description": "", + "fieldname": "min_order_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Minimum Order Qty", + "length": 0, + "no_copy": 0, + "oldfieldname": "min_order_qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "safety_stock", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Safety Stock", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "safety_stock", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Safety Stock", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "description": "Average time taken by the supplier to deliver", - "fieldname": "lead_time_days", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Lead Time in days", - "length": 0, - "no_copy": 0, - "oldfieldname": "lead_time_days", - "oldfieldtype": "Int", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "Average time taken by the supplier to deliver", + "fieldname": "lead_time_days", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Lead Time in days", + "length": 0, + "no_copy": 0, + "oldfieldname": "lead_time_days", + "oldfieldtype": "Int", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "description": "", - "fieldname": "buying_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Buying Cost Center", - "length": 0, - "no_copy": 0, - "oldfieldname": "cost_center", - "oldfieldtype": "Link", - "options": "Cost Center", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "", + "fieldname": "buying_cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Buying Cost Center", + "length": 0, + "no_copy": 0, + "oldfieldname": "cost_center", + "oldfieldtype": "Link", + "options": "Cost Center", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", - "description": "", - "fieldname": "expense_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Expense Account", - "length": 0, - "no_copy": 0, - "oldfieldname": "purchase_account", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "", + "fieldname": "expense_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Expense Account", + "length": 0, + "no_copy": 0, + "oldfieldname": "purchase_account", + "oldfieldtype": "Link", + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "last_purchase_rate", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Last Purchase Rate", - "length": 0, - "no_copy": 1, - "oldfieldname": "last_purchase_rate", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 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": "", + "fieldname": "last_purchase_rate", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Last Purchase Rate", + "length": 0, + "no_copy": 1, + "oldfieldname": "last_purchase_rate", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "manufacturer_part_numbers", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Manufacturer Part Numbers", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "manufacturer_part_numbers", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manufacturer Part Numbers", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "manufacturers", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Manufacturers", - "length": 0, - "no_copy": 0, - "options": "Item Manufacturer", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "manufacturers", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Manufacturers", + "length": 0, + "no_copy": 0, + "options": "Item Manufacturer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "depends_on": "", - "fieldname": "supplier_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Supplier Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "depends_on": "", + "fieldname": "supplier_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Supplier Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "default_supplier", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Supplier", - "length": 0, - "no_copy": 0, - "options": "Supplier", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "fieldname": "default_supplier", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Supplier", + "length": 0, + "no_copy": 0, + "options": "Supplier", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "delivered_by_supplier", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Delivered by Supplier (Drop Ship)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "delivered_by_supplier", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delivered by Supplier (Drop Ship)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "column_break2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Code for Suppliers", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "column_break2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Code for Suppliers", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "depends_on": "", - "fieldname": "supplier_items", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Supplier Items", - "length": 0, - "no_copy": 0, - "options": "Item Supplier", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "fieldname": "supplier_items", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Supplier Items", + "length": 0, + "no_copy": 0, + "options": "Item Supplier", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "foreign_trade_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Foreign Trade Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "foreign_trade_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Foreign Trade Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "country_of_origin", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Country of Origin", - "length": 0, - "no_copy": 0, - "options": "Country", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "country_of_origin", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Country of Origin", + "length": 0, + "no_copy": 0, + "options": "Country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_59", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_59", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "customs_tariff_number", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Customs Tariff Number", - "length": 0, - "no_copy": 0, - "options": "Customs Tariff Number", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customs_tariff_number", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customs Tariff Number", + "length": 0, + "no_copy": 0, + "options": "Customs Tariff Number", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "sales_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Sales Details", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-tag", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "sales_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sales Details", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-tag", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "1", - "fieldname": "is_sales_item", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Is Sales Item", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "is_sales_item", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Is Sales Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "0", - "description": "Publish Item to hub.erpnext.com", - "fieldname": "publish_in_hub", - "fieldtype": "Check", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Publish in Hub", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "description": "Publish Item to hub.erpnext.com", + "fieldname": "publish_in_hub", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Publish in Hub", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "0", - "fieldname": "synced_with_hub", - "fieldtype": "Check", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Synced With Hub", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "synced_with_hub", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Synced With Hub", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "income_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Income Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "fieldname": "income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Income Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "selling_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Selling Cost Center", - "length": 0, - "no_copy": 0, - "options": "Cost Center", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "fieldname": "selling_cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Selling Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "column_break3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Customer Item Codes", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "column_break3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Item Codes", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "depends_on": "", - "description": "", - "fieldname": "customer_items", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Customer Items", - "length": 0, - "no_copy": 0, - "options": "Item Customer Detail", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "description": "", + "fieldname": "customer_items", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Items", + "length": 0, + "no_copy": 0, + "options": "Item Customer Detail", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "max_discount", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Max Discount (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "max_discount", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", + "fieldname": "max_discount", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Max Discount (%)", + "length": 0, + "no_copy": 0, + "oldfieldname": "max_discount", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "item_tax_section_break", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Tax", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-money", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "item_tax_section_break", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Tax", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-money", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "Will also apply for variants", - "fieldname": "taxes", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Taxes", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_tax", - "oldfieldtype": "Table", - "options": "Item Tax", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Will also apply for variants", + "fieldname": "taxes", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Taxes", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_tax", + "oldfieldtype": "Table", + "options": "Item Tax", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "inspection_criteria", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inspection Criteria", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-search", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "inspection_criteria", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inspection Criteria", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-search", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "inspection_required_before_purchase", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inspection Required before Purchase", - "length": 0, - "no_copy": 0, - "oldfieldname": "inspection_required", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "inspection_required_before_purchase", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inspection Required before Purchase", + "length": 0, + "no_copy": 0, + "oldfieldname": "inspection_required", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "inspection_required_before_delivery", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Inspection Required before Delivery", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "inspection_required_before_delivery", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Inspection Required before Delivery", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:(doc.inspection_required_before_purchase || doc.inspection_required_before_delivery)", - "description": "Will also apply to variants", - "fieldname": "quality_parameters", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Quality Parameters", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_specification_details", - "oldfieldtype": "Table", - "options": "Item Quality Inspection Parameter", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.inspection_required_before_purchase || doc.inspection_required_before_delivery)", + "description": "Will also apply to variants", + "fieldname": "quality_parameters", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Quality Parameters", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_specification_details", + "oldfieldtype": "Table", + "options": "Item Quality Inspection Parameter", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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, - "depends_on": "is_stock_item", - "fieldname": "manufacturing", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Manufacturing", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "options": "fa fa-cogs", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "depends_on": "is_stock_item", + "fieldname": "manufacturing", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manufacturing", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-cogs", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "default_bom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default BOM", - "length": 0, - "no_copy": 1, - "oldfieldname": "default_bom", - "oldfieldtype": "Link", - "options": "BOM", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 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": "", + "fieldname": "default_bom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default BOM", + "length": 0, + "no_copy": 1, + "oldfieldname": "default_bom", + "oldfieldtype": "Link", + "options": "BOM", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "", - "description": "If subcontracted to a vendor", - "fieldname": "is_sub_contracted_item", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Supply Raw Materials for Purchase", - "length": 0, - "no_copy": 0, - "oldfieldname": "is_sub_contracted_item", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "description": "If subcontracted to a vendor", + "fieldname": "is_sub_contracted_item", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Supply Raw Materials for Purchase", + "length": 0, + "no_copy": 0, + "oldfieldname": "is_sub_contracted_item", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_74", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_74", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "customer_code", - "fieldtype": "Data", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Customer Code", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer_code", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer Code", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "website_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website", - "length": 0, - "no_copy": 0, - "options": "fa fa-globe", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "website_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website", + "length": 0, + "no_copy": 0, + "options": "fa fa-globe", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:!doc.variant_of", - "fieldname": "show_in_website", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Show in Website", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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.variant_of", + "fieldname": "show_in_website", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show in Website", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "variant_of", - "fieldname": "show_variant_in_website", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Show in Website (Variant)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "variant_of", + "fieldname": "show_variant_in_website", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show in Website (Variant)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "fieldname": "route", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Route", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "fieldname": "route", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Route", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "description": "Items with higher weightage will be shown higher", - "fieldname": "weightage", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Weightage", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "show_in_website", + "description": "Items with higher weightage will be shown higher", + "fieldname": "weightage", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Weightage", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "show_in_website", - "description": "Show a slideshow at the top of the page", - "fieldname": "slideshow", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Slideshow", - "length": 0, - "no_copy": 0, - "options": "Website Slideshow", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "description": "Show a slideshow at the top of the page", + "fieldname": "slideshow", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Slideshow", + "length": 0, + "no_copy": 0, + "options": "Website Slideshow", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "description": "Item Image (if not slideshow)", - "fieldname": "website_image", - "fieldtype": "Attach", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "description": "Item Image (if not slideshow)", + "fieldname": "website_image", + "fieldtype": "Attach", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "thumbnail", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Thumbnail", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "thumbnail", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Thumbnail", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "cb72", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cb72", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "description": "Show \"In Stock\" or \"Not in Stock\" based on stock available in this warehouse.", - "fieldname": "website_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website Warehouse", - "length": 0, - "no_copy": 0, - "options": "Warehouse", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "description": "Show \"In Stock\" or \"Not in Stock\" based on stock available in this warehouse.", + "fieldname": "website_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website Warehouse", + "length": 0, + "no_copy": 0, + "options": "Warehouse", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "description": "List this Item in multiple groups on the website.", - "fieldname": "website_item_groups", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website Item Groups", - "length": 0, - "no_copy": 0, - "options": "Website Item Group", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "description": "List this Item in multiple groups on the website.", + "fieldname": "website_item_groups", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website Item Groups", + "length": 0, + "no_copy": 0, + "options": "Website Item Group", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "collapsible_depends_on": "website_specifications", - "columns": 0, - "depends_on": "show_in_website", - "fieldname": "sb72", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website Specifications", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "website_specifications", + "columns": 0, + "depends_on": "show_in_website", + "fieldname": "sb72", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website Specifications", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "fieldname": "copy_from_item_group", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Copy From Item Group", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "fieldname": "copy_from_item_group", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Copy From Item Group", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "fieldname": "website_specifications", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website Specifications", - "length": 0, - "no_copy": 0, - "options": "Item Website Specification", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "fieldname": "website_specifications", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website Specifications", + "length": 0, + "no_copy": 0, + "options": "Item Website Specification", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "show_in_website", - "fieldname": "web_long_description", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "show_in_website", + "fieldname": "web_long_description", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_projected_qty", - "fieldtype": "Float", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Total Projected Qty", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_projected_qty", + "fieldtype": "Float", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Projected Qty", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-tag", - "idx": 2, - "image_field": "image", - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 1, - "modified": "2017-03-26 13:47:49.087140", - "modified_by": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "fa fa-tag", + "idx": 2, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 1, + "modified": "2017-03-24 15:46:18.569291", + "modified_by": "d.ottenbreit@eso-electronic.de", "module": "Stock", - "name": "Item", - "owner": "Administrator", + "name": "Item", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Item 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": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Stock Manager", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Stock User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "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": 0, - "print": 0, - "read": 1, - "report": 0, - "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": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "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": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Purchase 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": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "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": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Maintenance 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": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "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": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Accounts 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": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "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": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Manufacturing 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": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "search_fields": "item_name,description,item_group,customer_code", - "show_name_in_global_search": 1, - "sort_field": "idx desc, modified desc", - "sort_order": "DESC", - "title_field": "item_name", - "track_changes": 1, + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "item_name,description,item_group,customer_code", + "show_name_in_global_search": 1, + "sort_field": "idx desc, modified desc", + "sort_order": "DESC", + "title_field": "item_name", + "track_changes": 1, "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/stock/doctype/package_code/__init__.py b/erpnext/stock/doctype/package_code/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/stock/doctype/package_code/package_code.js b/erpnext/stock/doctype/package_code/package_code.js deleted file mode 100644 index 6bc1969dc0..0000000000 --- a/erpnext/stock/doctype/package_code/package_code.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Package Code', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/stock/doctype/package_code/package_code.json b/erpnext/stock/doctype/package_code/package_code.json deleted file mode 100644 index 48efbe1796..0000000000 --- a/erpnext/stock/doctype/package_code/package_code.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-03-23 13:33:14.884692", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "code", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Code", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "description", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2017-03-28 09:09:32.260877", - "modified_by": "Administrator", - "module": "Stock", - "name": "Package Code", - "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": "Stock 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": "Stock User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "search_fields": "code", - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "code", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/stock/doctype/package_code/package_code.py b/erpnext/stock/doctype/package_code/package_code.py deleted file mode 100644 index 1d989c0ae4..0000000000 --- a/erpnext/stock/doctype/package_code/package_code.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, 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 PackageCode(Document): - pass diff --git a/erpnext/stock/doctype/package_code/test_package_code.py b/erpnext/stock/doctype/package_code/test_package_code.py deleted file mode 100644 index 0e1b67de24..0000000000 --- a/erpnext/stock/doctype/package_code/test_package_code.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import frappe -import unittest - -class TestDevicePackageCode(unittest.TestCase): - pass From dc89916aa9751baba1ee088b444e1a1ce5e55502 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 17:18:58 +0530 Subject: [PATCH 007/287] [fix] salary component fix for abbr --- .../hr/doctype/salary_component/salary_component.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/erpnext/hr/doctype/salary_component/salary_component.py b/erpnext/hr/doctype/salary_component/salary_component.py index c02d952ac1..35d274cd60 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.py +++ b/erpnext/hr/doctype/salary_component/salary_component.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document -from frappe import _ +from frappe.model.naming import append_number_if_name_exists class SalaryComponent(Document): def validate(self): @@ -13,12 +13,10 @@ class SalaryComponent(Document): def validate_abbr(self): if not self.salary_component_abbr: - self.salary_component_abbr = ''.join([c[0] for c in self.salary_component.split()]).upper() + self.salary_component_abbr = ''.join([c[0] for c in + self.salary_component.split()]).upper() self.salary_component_abbr = self.salary_component_abbr.strip() - if self.get('__islocal') and len(self.salary_component_abbr) > 5: - frappe.throw(_("Abbreviation cannot have more than 5 characters")) - - if frappe.db.sql("select salary_component_abbr from `tabSalary Component` where name!=%s and salary_component_abbr=%s", (self.name, self.salary_component_abbr)): - frappe.throw(_("Abbreviation {0} already used for another salary component").format(self.salary_component_abbr)) \ No newline at end of file + self.salary_component_abbr = append_number_if_name_exists('Salary Component', + self.salary_component_abbr, 'salary_component_abbr', separator='_') \ No newline at end of file From 67a3e65f083cb87036a6f4797ef856b0b6199d91 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 27 Mar 2017 18:53:20 +0530 Subject: [PATCH 008/287] [Documentation] Added for custom roles for page and report, fixed some broken images --- .../docs/assets/img/accounts/pos-customer.png | Bin 64692 -> 63056 bytes .../docs/assets/img/accounts/pos-email.png | Bin 0 -> 42967 bytes .../img/{ => selling}/taxes-and-charges.gif | Bin ...reset-roles-permisison-for-page-report.png | Bin 0 -> 42298 bytes .../role-permission-for-page-and-report.png | Bin 0 -> 112218 bytes .../users-and-permissions/roles-for-page.png | Bin 0 -> 69145 bytes .../roles-for-report.png | Bin 0 -> 80523 bytes .../en/accounts/point-of-sale-pos-invoice.md | 7 ++++- .../users-and-permissions/index.txt | 1 + .../role-permisison-for-page-and-report.md | 25 ++++++++++++++++++ 10 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 erpnext/docs/assets/img/accounts/pos-email.png rename erpnext/docs/assets/img/{ => selling}/taxes-and-charges.gif (100%) create mode 100644 erpnext/docs/assets/img/users-and-permissions/reset-roles-permisison-for-page-report.png create mode 100644 erpnext/docs/assets/img/users-and-permissions/role-permission-for-page-and-report.png create mode 100644 erpnext/docs/assets/img/users-and-permissions/roles-for-page.png create mode 100644 erpnext/docs/assets/img/users-and-permissions/roles-for-report.png create mode 100644 erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md diff --git a/erpnext/docs/assets/img/accounts/pos-customer.png b/erpnext/docs/assets/img/accounts/pos-customer.png index c3cbb8a6083610ada0463312f9f3d872f9fc0494..20bce38920bd5f1afb1e2fc0e2158861a477efc0 100644 GIT binary patch literal 63056 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 qoA#8{fEyS+jFP^mk literal 64692 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 GeE$!+2VbNB diff --git a/erpnext/docs/assets/img/accounts/pos-email.png b/erpnext/docs/assets/img/accounts/pos-email.png new file mode 100644 index 0000000000000000000000000000000000000000..31aa086e9f0503834d96cace6698cc200f798759 GIT binary patch literal 42967 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/taxes-and-charges.gif b/erpnext/docs/assets/img/selling/taxes-and-charges.gif similarity index 100% rename from erpnext/docs/assets/img/taxes-and-charges.gif rename to erpnext/docs/assets/img/selling/taxes-and-charges.gif diff --git a/erpnext/docs/assets/img/users-and-permissions/reset-roles-permisison-for-page-report.png b/erpnext/docs/assets/img/users-and-permissions/reset-roles-permisison-for-page-report.png new file mode 100644 index 0000000000000000000000000000000000000000..aec9293dc7dfbafc486bc157186f5213fc99cdcc GIT binary patch literal 42298 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

2zfQ8CYAtn>&)uplR@DH1>ww^OHBYj%L)`^& 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%0ANbfWYuz8sA*GEQsGSMk z=hZs17#6JGo@d!k_o^>@wMGt}tSwvDYJ9+|$KZ$b<{oeGZok#A;Ij-HHB;{&4_?-X zYyK8~_RzOZ?O3hx!Ov5}H0claKk~|ao?5CgC7(Z>&liEEozCZvVS{HX zJA0>I9&Vq11}|_wCxzC{IRXeEfB*sr#FhYI*##Sqi*!lzCY9E9d9!cpA}eve`DbM- zvG8a1M(OgOC_UvG_3fW5t^aRjhs@MkH+GoDEZd^1Zn;BK9v`Y3Ki#SEkB!v2T&pQ} zt$sB6cUqa-Qjb0Se>Ap#XT7=RW%V1s)@|m=$5A?TVPH^SbhnsCLwb_%c{d~9n$8Kq(jaL6}S02(S>tp|} zZQORQ?RulGZIz@`>t|}%i>sxsw`tHWA_eLr;r=oe{qzaG>f*b#n06L@_fy;AaA7;v=txM`=4&qgOB}A zN1W>q-==Fn{XpYKKd&Rshh1CN`JiLrJI=;=}jr7q>Ll%4NUPgY*5L zO+L5JH@8h#ppEt!VeA8Us86ANzOc_?E3@r?jM?Xp>`&j)uu)?*H`k;7eZNy?rhG*0 lQwRYB5I_I{1fnYN{{eWojs~bAE$RRO002ovPDHLkV1kIgDB=JB literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/users-and-permissions/role-permission-for-page-and-report.png b/erpnext/docs/assets/img/users-and-permissions/role-permission-for-page-and-report.png new file mode 100644 index 0000000000000000000000000000000000000000..69b31d6ed3a276a50405269a76b5259c17a2df47 GIT binary patch literal 112218 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/users-and-permissions/roles-for-page.png b/erpnext/docs/assets/img/users-and-permissions/roles-for-page.png new file mode 100644 index 0000000000000000000000000000000000000000..f28c6d7ba0e0da05a42d9e68d1bee13ac781814f GIT binary patch literal 69145 zcmeFY^MB^awl*9aoup%{)3K9|ZQHhOCmnV=wr%5%ZQHhOznOjZ*=J_Y`~~ml$xoH4 zwQ9NWt?Lezl@@`A!GZw-0)iJ46_f`80xJgs0s)1B`0VNbICBO9!XPsf5RerU5Fn7X zw=p)eGy(!r4UBh#{-Lz7@WK7CI<%K^pk~Z4L2|=6AwaRfIm0Xz9R(L}C`uS87$&U1 z9~5UO9!C@?OA+rj=ppOn^KtRwllkEGaC7Rw<8oF%|9;xGu>Ml!0lcY88u$||%M=(2 z4u)6*+w_K=o$Y3O9rUX&5N;GW2+70b7itL!g-f1b^tjTwl+z^3x%k z6?sf?0}wbk<*bm}@Ash!gl%n#I(`q?yiJ+n25(bfx?Tg)n|wTAeJV0n~2^d1|zudm-?bf`DX~MOjt=ExLL5Sd_UyZcE#62_y6`^|9+P;kF98}JCv>m<<;J6WFe*2jJ8N1bD3;7D=4a3^W?2B&gZ?Q%5xP|tP z4UMuAeObtQVrBgvg1^DTK8-rfIDPU_?lNryv3qt0p_dWd17P_nZ7ce9X<>ydTm_ab zn#=9C|0=1=&9L~$ci<|g_6r<*p7MqXtB|Gxd`xJzj(8(r0@Dv-SmANMVM~%S+E-!} z{`+sKFhDM4Ydu3q91OSfprBB`5KEYrzSx(bNQRO%yhugBQdyAUe&AK$(wjgGC)@;I z^l+gg{C5bT^ZaTFurB z0@@34#p@sSg9Mgbz=M!$@M}#_8iC3nHjICFcCIW)97K8m4Zlj3{UM7YB$s~%zt^P2 zAr}+qo3FAQT^LMX$TmN8cAo6;cj`FkVYGVuz2EFV!-Pq5#%x8&b8D}MC zF^(C{fg$KfN8xU|kgFKVKs7qYtI#Eb47L=1K+^bAZn+zl>vS4iQnmW`=U`5@nnIIs z!%sPzy4(^vQayitCTfP$`fV-H!P_A+k?o@wf*~FLLm1WIr(LhB0TI1e5{@MKK6e4` zl3Z+(5Ea@;IBGuyp~npLNidf`S0Ht#vR-Pn*P`7i2tu$yPw3999oi3M8o0!tExs*& z7TtF{-|R+Q#W@kR(JCWd`XRS=uGk(=9)&%5ykRw)7{28-g1OSoB|LzsMwDBuFKAMvy5XOTU$pSx{J@ zo=D6qv1qe!vG@Ss09XJdXQmd67E}+C7t(v@do=`M1ZD)62*n5voSwAr()7|6d30jo3{lt{ATO*N@kRS4>x)+eX`S+whxXdsaK? zJ3G6KyRZi>-3wz4014N`wTeeAr552w=-1&_?N_x|>Q@I4P7q@d5pW8yAaHW9cyKSU z30P++8fa)(HmLNkB}ge~#;7dF5oi@(yeav=PJLk`ktbmw2t!puyF;h`a)v4pN*?kQ zvKM+6lG}^g=hX+>`{HciTzZPItX1bB>MzbOLByZKzuiVsn^$buYWRCsg&dgNq!_Lk zp;%`cW*T^!blS%7&?ww!+vwQHdoXOMd1QYGVGwEWb}wRRZrCdkJ@Fx~gXBZpkFQH| zE06zIcTi3Yky^F9ov;}1kP^9$nP{@ylKfNLH418Y7+{z_9wHu9NobC4j-zB_mSpyI zuA)@x0%?7xsnBqu@tMXc<{9;_x~p^>+qoAvhZ~FW6W7bgRQMOtMTRv&YUZIn~ zNhzR?MeU{iJ|?0>I$XMzrpzKMwPdASq|&6&Mb1XiC$YW3JMcZt&%X;Pz*rzWJ5(=d zD+(zwx<#&ODy=%kF5E5^IzIIGkWegQfqsGEj5}joagpLro6+l& zTe=Ni`=QPcPg6`B=hlbc$(%#!8gtHZO}I(B6?>%Lq}(e%jNfKl zO~!O-xo!+6--Uf24dE`wH+X5pYj3SJ8xU5AqaICviO5+UkV3ipmcz z63z)M1@8}j+ntvE?&xD`g+Y8>GJ{Hk>`nCQ)w>?j8nP$)GT0J)gaC7XOn#}4g?xlEqhM~|w z#wO#6eI~sk$@_@v-g0uO3+{J#jf3Ms&ctt%6eDGmE8~3QF%$ez?-b%p1=kE)?$=k< z3N!07a6ecR+A^Knrbh-Dj!KG5Mjle1;?CTxkC^@ZVg8Ely6(A=_Cy^m`bK#z62&-$ zaO#Nf@2dJb({@Tv=5FL3X6i@%^;s4MM)O8id*XY03v88zDp?fWl*ZPLtA}mH9<>1Z zoNIAZ2c>0dTgun@!j*~!$cv;^v!+tdhU<*Yw$~T92Zhq?Wi%p9`kHK5Iw&=;E#m1$tYju-2)0{7ZFH^1~T?wq^5#^v(%2sP<-_B(4 zPI#=(CXY?sbKdi|ijQZSrT4~DOu{BgTD~@)^QgFbcW6|%G>a4$0#x!F+HGWX3_65A za?zV<@encKIX%qYYiuU1FXy60CKo9qRc0zdwSDj-Ftj~T9?))BoPIi!n8Z2M9i|_) zl+gE82VXdCxOi1PT^g@?z1|2O_C6bKi);_1k!KWNn=Ks$VZJ4=%e-()c_TcvvZUSy zo=d!|L{~nvn|Yt4IHaY%O24;1?aaymG8gvu4m8lH(1p=K(H9cr6PFT3l;c#`m2s5| z=ZO~VPMWZDu@E{c>e79Z1Fr-R8F{KROw)CWCHX%KWZ@~zFMGgzz2hx zKrhH-aJ7bdPCOlfm4VB^a-jg{*z0R=AGo-PQ;CI&Y7F%bDG#xeWVF1i1*rGP84L<`&UTJYaIS4<>`|5)VH<0(alpRt2G2yq zOHZV2T%G;(F@r6jbs#^9Bhyal9L{RfvXfL7pBBnfL!RbO0rJa#YlhJ8=6-ZOFHDDkfP8s z4I$IU!R53s@f=wTi}~vSjRCzz*snr6t9ArbCFoawn2Gql z#FmAmk^bKDf))jljp16W!jj6}8_ODQQwz%j|3zjwO=WSVm*Rr@#_J|u&s(t4?>(u$ zG4RM54S9`7z*GGSr}C-pnW`JZeO=+rRqcF*$OLwCsk^<0z>DK^=o_u}F1%}-B1SJ9 z0(^X1m}@y(IPN*`w#3%itZ0AH^5J94jDfj9<_5ZV6<+W_>9^Bw%HL|a&)*lBjJTNT zz4V36jkgt+4zkpmmI7&&bk;hiyjpln*dDH4rtqnF@IE9n5!DH(-3jfOs+Zddo0^*1 z-d`uFVbu%jsow*+@8yNlOqOxg0u=c1S=}5LKX( zD^c*SxaM>6MpRBWs01*H*CBjz&TKyjHNsO{OWMuScuD~l9O@UhCcV zeh0kg=f-!`bw#)2IL54H|n>DvEV z0=Aj`QT5h-me zAFh2r&z`PeGAxNytQ2f~EgQBKtQoW=yoVocxtn5FGZN`08G$ZKoQa3RE{G4SM^Yy@ zCk^h|tXU7!=95<6UzN5`VteRqTGx-mt0G4u=G!>f_8+ykLEn1@uI5AihXnAM3yTUM z3VxYHcwN7p(x2RrURn$`L^VZS?BXNw(0 zZ)d?X_-SWz>QSXdpou)_=2XisVy-H+A_ji#gUODqiK2)xm74%#NII2*Yexy90CKo1k*kTTZIg+d9SoLnIZ4T=wgFhdx$Q0hTdMt<=pwFq*V{fE zI5(nST2lHVZR8%D_~B#tJs5Hu;ka>I>qYd*`u*I4vxqZ@tI`ekTKQi4!R-3?&CD(2 z`xx*5sFVLB-&q$Ke;t1UqEb|P6h{l^D3K*MC#$|puc_gxUPTXLu4Zm>Zg8X`j#P+U zIBKXC=R8)T+bV}PD<4(#9hecaXbKNo#w%w&#hoJ7QQWK9>d_Ws!?eQ0vk698F3-ac z2c3OOWk-N=#QoDQ?BlOuHxzKoL_=65no>=%6#ia61#b%1h5jAWvNIh;F}} zaQ%2);YNPd9Hv65Tz-Wnxq4*qQ1af&S->p3XhAF=tSRD@^d#HV-Q>v(kD;t_k+GtY zrBRJBmI;DMSIuq}O!a(Ca;;P?nZuxMxC5Gflie=|+8fUOvHhDx(uv4DA7Wb-I<4=# zi-Llhao^d=?&V**&LxnmV`$_lro*Ql7$%G=NAd?>zGF~|Q_z!JQTWJVDxImEtj<)d z0~!Q!H5^ne)IH?T5A~uQ5NtwNbLa{f^qBS-V_8`nplU{I%&Ri$NSB9JIM{lBXgixb zWY}k~(t35iZ^|to%Qvjl1p5~LUVy%U$W-FN{eT6g*9`TSP-MF3Z8j%x9lnAO6i_>W* z)M9gf8Eyk*j&q8Ke@X4ta9zI3{OTlk7jjFDUzA>p~PqHY_Riy!yQDlkbi zt<^o(jX8Q8r5rjPa$s6w2uF=N#*?S3g+F1A5Gotbo3l^?B2VRT1S628rN*Hv;H(Ys z%rlVITRcsipRO%nt6)6QJij|CFG>h%D9VOw<8)vX`z7WjFjIvSPQoTiU zP><}lS^=~Y-i(634P1=FyliV`;BRtc>@V;1U!3nnpSf+6u6T5tj72W#&~&oU5gqE= zIt-FANECUi3O?3{Z1vR18BZOFX!k+&_2XdkoTu}qE+&6X2$y0@4&sjY3?go0Cgz@@ z*Ench2CwI=2Z`sOqCCtQAVtc@S-?wZQKDPJD7NgFb1>OzmmHgFHi2jQ-8{CNFbzmX zI4g8%Hf+A}5P3d;Y)6!C!@|$-=J-Hxm%%Ve`j@?ctFsjXy|nN+a|P15dWJ)* zpJzc!-jf=56$qvOMqoSi$JeDVxoGH%<>Xrwm}E)>T9h~Z_l2A-{?Yoa@})5GCBK%b zop7!zmW%2oI201qDyKV_LdF{>ZgbqK^3&_f#;Ve5y%KY?XMTBU(~LkOYZA(btVke| zPI%hDWbSx_eQfjA>VA89+jF{ArXs(J>fz=zX51z3DJ-%35(U z1{B-}?5G6JA+<4ID;5$_QkJx=1H z=pJC{~(6}(t*w~xU(zCI#(b6%{GB8koQcyd%Sv%^vQd>I^|IZ}gn4!IdTyZ{UPW-fB&PWk*nGNNwRkMw^^SC(*7|*OHV^b`=7Z# zSvmjcWtTN`HL_F{G_x|YcKDRRO;69p%K0ybzYYDL$Um{F{U0kcJ@cPA|1|P%PEOiC zEclZ}|KqNI^?v$`8-|niKfdRNfkY@52Lj>+5)pH>tzHt#!nCIXUF%XQ8AX!y22`WJrWa)PxDP$HbNF zh3D^+6d%QFwCEuS;)|{6@p%RD*rw3Z}Kc?I@3OMkiYT$G0dBfqB~hKt%d9y@{e=-@=>-! z{PVmN=|BO>@#isB0{^6xF9@9a74v^-`fr6~kH9eMN*oh^;^zF_nokdb>14EQktdZ&k|Fbz5b=wyINB!qHvZg;B zsB}aF%^~=YT6Jcj>VW>U58|b>r1MXZ{)v${|4XCMsF1ZbxA$AUyklWEhg>Pzrse>& zHM>dhfO^%JkY`o`Dy4!V1!y0*B$oVP$ED>d^$ziB?wx-O!|_?|T9St~w>N&R^|D_+Py z@^4c9<-mAhU%pat2l7RvzvS_My#MPnjA+o@^8e}hGnpdRA8{PZ*A@BaI8uS2V%3GY z`M|itVT8SJfzo?OweBS;UC@7UCPYNtL^&KGaeu{@#wuB7s~YHo$vaie(^_~3g~<8n zy^G@TtNC-}|E<8KFZi+I>J|JCmrW{L*v4;=Voi1r*}e`I#(KRquC6U&8s52AcOpH6 zE>>la_LT7SD&fm+MFD%OZ^eq9nUtGQ{jn!kFJh%Ythg0xFulWrP+*N4M}BaNPuCcu z(m<^?m`DuoR-+y)m(tixg?GO@ihN5nb==Cg-N(7CQh&?+)el9Ye%P35kNP_ZO^j)) z%N4R$X47BZJRStwnxFYKDE5oxxG7Jgy`S%A&<#zlu)X_J3duL?cDz!{#UhOeY8a#vVG&*`h_#$&F-U(aI9-c$#^{6x4 zjZl_vGXqFb0!~vp>b$u7J#UGdBSSk+WEyH$l+!a?=}@37jC_K4@Ij0}X1sATQE6qf z`AWADJrDt_C%&p;TJ{#d)sP&bis$S^3TYn5#I@uT@m^UDwuuk(9mi=Jy?H7P$ltb& z|C}nHp_~)y)bdwkH!(3Z#IhyW$9VpE*GOCF?EZpA@<9*fEuGMVS@lqgUr(lX#7u^p z*TY!gJBNzt3%JtZZ4Q^mV#hI^!FAQczdREAg@`YK+(^b(Y5{F0D#{)y>Gn2vcPTWo z$@}OUPg+H+rXXe#?Z~bcWGqIJJC3^!kKHq{vEcnd6@W(9oMIh&p5%!}egxrqfW5W7 z1)Y8e$!}jhtq^Vh%o$UW$DdC&e;37)I;euJ)8bCrwP@uq-NV!9)m7rDrZ_N?=&j~+ z=vYK~U?~|PGCIVV5;#7laDNh>AT^5C&qRU~(bGg3LtpSbSH|q$0+~}GwK2!XP+3?E zNzUFVn%aDO^8>APT*WAbt*0d!AEdXjLhDv!rRzNP>e-D1r}osu!z%3DR8mGDf}NK9 zn+&nM{$BI9Ut3nJj_!4k-fj9Ei3@6J65;_qD3~-yyP?fS7~f3ePDpnyqKbpIl1Hiy z5~Gsm)H9B70ny1{BY%Rqd11`es~oHgkGClmA4HTfrAhn<%==XkPM5A>@CaEaEWsl) zl1(|WV>N^lNU6)wvwFs9YNGj)@fsrj;x;JS@-v)M#nodr5h>%LWQ~EY#NqR^kqb|x zT99=$%%9i&l3Lz3_wytsXAH&uIlrEP^O@p#5$xBHq8`>u&xhv%gZEcZ?k4reOV%&- zm-wzbDu*z0KTci2hplj7LN4ja)gBN`mIyX#;% zDkIk@$fxE&RGAbn#Zt(-&!#w0-~B3G8dff1y%AKu0Kb+UE6v!eWNQ8%dbxV;eOfd_ z`C0WN@E+T@S%qpMj9Z(d6_Zi>?Q7rLA($g(1nW8mJbq{;Nm*J5JvNmej)Vq12EA+E zy8K)mH1w1)Oj51*dGtw(` zKxf_3io8*RlDg4QOHccdgBt{eJ+138k*9wAmy+xN$_@7`lov-5sD^!6Vh}10?B&k} zxITp&e^iK7>PZfP*BUARYekc!^%suss5$paZ1L z15zTET1tY~Xv!mjY<^$~Wx#Y~J%Fg{jTYfque=y-mR?vrQg7|+3osu3tsm#vPg)nj ztbDeN1UGwhY&!hE@YFWs zvOm~qohM7VKB3IWbSWqpXIDlZiCp*YgR8oK$Bt~LgO^EUuv^UEX}J{OXIbW2hD^sE zuBT9}=(Fl>DUBrTG4^V^@8}9Yc*)HeYYtPdOOqHpBzL75eC=0~gEVOQ%W~HlfHWBG z)53~4fbW4Dr#p@43V7i?yICHpR1x1af_hH^K+ElC^tC_vT=r}GjK2FI*~&a2% zPX~B#+9F^qDEP|<_!(^>tHvCVk@_+#a9fvNcW+1mm(DO~UZ#;m{S;dpfCP~sjd*aC zAlOBMR(~VN^ddFAleJpX0a2#yAbxQb<*1pEg0>8-19|6!cHI-0)4!v#Ki;ESFra&P z8vv%9+kVGgk?f*^?CD@IP|5az2Bxg{;XieUd*7kBiQ=p;c+?-RVIZ(yeMAOPHveF1 z<$4e*d zGvS|7kPk6^Q1dkrxwcv|*}Wuv6f|@DN~{mEOfh{>>E|H6$b$kvp+%$l=KhNNXHS0>J|Vo0V36%%zAaJR5TZ8u$?c!M@H=_&ng+*U3L5 zupRRgjZ$+W$nq}-rj#reawj?qalMPJ9?C_3TEFs;b~?&MJVt?~vX8JuMgt{)W#A<$ zsl*zk=E=YD6gxcP*zN$xK_$2mb_y&nz7TEXIU>Z_BpQb3L8={O?-l8eaBp%9wX&y! zGAW+ar_9}GH1SBCtI;i_xEbbL_3d`N0;gjc>kSOx>jr27**rOxtwoQGOP}Mh`n0X3 zY-R*pbt|N2wb;Xy@@VTsX~ni;Lm%ZLT`vBR46un1g ziK6FLkwsy5#Nn)V0n53&^(w#!BmdD$*8p}%F%|!J0FoX!q+Qk5N!j4ih5-8O>i!=c zUW`Q49j3b~Jz0F9lk(o>vuB4#x)a@{w@{cISg|`YdUA&0PPq*_P{K|R@p@?tOp0#+ z`hJ7^va$IybHc0#EnUeKS+^+_@Ea3JCR2&cRAd0w@cRhcQ5DEy}u%Db{xpms) zS^1Q?xuA^i&kZ;zy#I`dNpfboHYkf2>&~6{fR=gM(>q8kz0z7$T8*J`Ye49Kyb_pf z1u&UO_8#C{bx*}v&R$hS2G{A8C*WO0|K(cQhz^oiSwQ$+XQrEk1@d@KX7S5Pd5w!M zPk{gdU&6OiW=H>I?Jnq)>W~vsKjwtra?t}AH|3(2kTcv2__y8UZM6``PZ(|?nlu_6 z77@!R(w==q$77_rYPfK_Ag`?90(ZM#xtY;e_#=w5 zTVoxm2$TFo5;6!7?tr+aa$^u19B{ldL{Az_<%FDZ?f6{eyyGP_Q$l3$1V|5 zSJ5vPK`@4DVW)<%0s3khR(K=mbwR7?(5aIcN7}dsy(mbC7#=WHiO| ztmqJ-aB=+}`cs1O?&0_@wA1PLpIpj-X9gSEI~U0mFOR6WwVdY*Ak(WX9l-p@-VmWr z0-_rFH%V_ScH@J0;%%s4pX92b^zU4->dsl_HCw5Gh5Uab1 zwe@*#zHGk`i?C^OGGsuZeYN^zf^+CZ_6t)EcM9IrRh&*5o4eT_5|k%mHV@}%R2d$S zNhe)U@n1KZY-69w*qzNHw|r89_Vr_t8jwfYV_y{-a|_{8x$uc^eBWGwPF7q3I=HdP zVraKIi?I(eVgf-SX~lepQQOy@svNFBEaQQ)YwHel$Y8}xBDTg5HLuR&M5^!Jm_y`_ z{G3*&a9E=h-D{GLxnci&bp37%3DU1A5t4hGK5KX?_ktkNSt557f6*Moi1#$p^LV+l z_n6mZSNF7rlYHCH6fR?--dqk5DjD_&7r=f@0?!{KEBz4?+kiDBIUuKw8b7gFRD?aH zF?`2(&DLLk$n!eqEMYs0+}OPFxy1*Q?bX`IY)MBGdQ*5_--uy8lj(3v>`HK7NIj;5 zrCN($TIUzFG@oDh{C~fxA|Gq zFrX&@^4+~DRVKxySga%1Oes)^NE-DXN~Uu!Zj)8H8f{q;6kW`JyIlwaS)VVrufLbq ziR4cCrb!epc9=DJ6+{8%ZpV_6l`c<}rMqgVo_OwD%HZO~me%r!8Gzj-P^)6ZmVYyZ zdJG@EJ+b48Jg_ol^Ve zohV$Hu_cg(?KbKk zrd&~XbfxY7L`zmWUiTHbvHS4Y;{W|=lY{!oU zBSm}PtyQmVcE1M3S?CI04x*FD7Dnx{r@oZq9w&_1;4Y!n4&lTpVy|U%S|s?!E336X z1?sK;Y9TQ-DR#kI$kTwQIq#8{z;(l6aj0R|HB!T6II}ry*-^4+`}xS!nU-%T?$@?cODsn)Dex8%cJ{@E!TLr^U%oV ziuIlb0Kz{V;ZNLX`)LBIc@|j#+h0bmruw`@^BRY+D&FCjbO^evGT=S2t=0iJ#QwG< z>y1d<8bApUH=YL$TmUrftDoQ+PzX3v`P;}p?D;DJEh{uJ|Wf3r+J^5;0dM~ z4|TmsKWj{|m+a4AWd<)Z?CynjD9FmC(E!o3F$bo3iMYc2OV-P3fpdBw2nGi_Ah`iE z#C#K#R^WC~4_n6%NEyl7z9<(+bP>scj=5Z-yg_<;#IcO$m9Y~#$cB8cM=Bh6%oXcL z@_d}Kdm>n@Xgr?pj4#oJ)<@N70%1vOH-%CE9eWu(;eu=#Gf|%Yp~6r|qU*F*f>V_Y z2N{-%sYlK!_V?Y#a9y7&X6bDP0Biv93YRpDDI{W2p;rQtvQdI#U@$O z#OoU)BUvdGAb&LUBr`E!O;n)#3E_dZwvx*gBu3ZkJ(!^w%W+kIIt`sHX1Dk;=6%Y6 z7MuhI&H2@8D`NieRh_VN!q=e1h0xds?jAR6fWE~yM9N`4D-`%exr}0vv!*zQdU&!? z&j>-io?pUk3iT`QE61?RwqI?55{nspJpIsch;^JA=nOD{i1nK!+dDXG(P9{tjd0ms0Udl>v9Yxpcv!^r z0!x)DSM69hnMGaKA>C59#{mczhoDYYi;%6xSfpojjdZ63!d44wC~uH3Qql{-R`Hz^ zElan2tEgJ#oKgP```4SA7VK<=(#UeqaF+Wsd1%Ow@8*Y_&(z4w(ekCrR*=l+TNEQ7 zlXrZsfJ8>^U-%(3*VT*dhf^10Y(Kb+X!;|U^pH zm!}1y4{%nNAFhk#@Q_ECqm_Al>7p2!>WB}g=rCjGa?b)w%&0Dl_nl+g1YMd}0C177 ze3N9hY9V)HLmUEIV90{5^rQfF8keY&@K+9vQ8Oa1T^Qz?&MT+8%U2#Y>9S!}11L`n zT!WXNQjMFVxF^~NFt%_-P$&CeVN(I4w@B^z5TQiL;C{Q|Skr?|2&Wuq8A9Ys{?)3k z*empsWxXz@?KrOwAE&kuXV%pR;7aAH(2kC(&(~xlSkSG51Fbu%)KZSi&*41wtl#o| z8S}$VrJfhcWI+Joo-gmCS_EhKRjd#+=UhnX$1NgsfNzTKN~wO(idK%`Oxr3HDXn*{ zU;}@TYPgD8p>}@2y;ZRnq>3V72};X_u4f z0xu#oz=PSYgWML~Uk32Uuy$ zI8MwHV0E%7okLo5OtS~I=u3&aPjj(UueAezO+?^d&!HT^ncv{AuJJSdV8n5MXkJSt zh{Kq#Y0<*m&x40|RaC-cxMWsCw3Nx*eZC7&!qsqAqW=`TevO29vT61VnLirKG=i-M z*7}lQ`Bdmu>Fnw@qLP$%Z#UQDD8M2S5Px$u1Mb_KIjInIe?;RT^p%WJ<`0$Bvc~E%OKa-p>Kx`E_==Ko z3Xy3nWtgOGp{em!f}_G8?<^E_Im9UzkeAuq-Lo9dz*(hda6-r5vUa```*UVt50%_3 zDo|YOC{<8I(gOQlP@)N9p^Tihra8Ok7m>g>1yWJHnWWrKSvyQ~mKIbsM~iSiEyM5m z!CH%ArN)x1!%oyS!9A#eWM$!z$zgux-(n`G6;4x~8I{f`zWgmi3dG0=OJEXf;s|PJ zYaMVF>=SVt401vT_4df7_2oZvkPD8%;iJXIiBE%O>S4_gUtPh(Hp&NTS}Sa&IYFom zk7iKQ_wuh|pB`R9sYkBdgnc*{$QIq>#v>i$y*?Y*srF6RUvuN6Oq z3TdC!8tSYQOfsjJ%MQ=_AQE?p+s3@+hjD(gtAY9}C0N)a`YRtGH9c_p!;ZllN=AiN z;2NT9NpTyn0XW^a+n6cGT-q5crNhXbr72T!joOJ*eFMPsw=2F{!XL7tP!TVyJ~xd>3ZxNo{~p2abo-wtnP;j8paIQN?JR%Wr9dBNOn2?_D7lYcU6>CuF3naFf6NMG0hxV z%@SEDj%y6T@xxW}z@;(gIEPy$1?sW#kX|2?_>k{}4uV6BsFC&-Tu`(;@qvhdZ`-D~ zK1!sGVnAlwg0U_wB6vbKUMofzx`0t7C%6DoQze;F(hbjNgZY`I$IViMLD7z|+IeeOlh$!@gT@~*i(und4^uu6nOzqsVn*+s8nvK z1~idv!BzSt3ZZXWKF5Ivc@-QPsTdIw7b08!qrpzRAbDe6ns$8WB&N$MO2*lLdFwil z|M!RH#WwSZGubS8=r~H#d{|e>>F0UkX-|r1n=z3Kgo_cuoqZrdWzKbPHPS9r>g3Qs zf039e#V>Dkx(DJf$xfPK*v<)_Fyv2k;7ry-S`b#Ch7F^9I5%62GS>aas;TXwog?3N zjcT)zX}(oq~25uBN&i zCPAO{cFbZmbz6?gU*{285;w|0jc$9Mg9IGtukW%vTy0=N@-c+WIZbG|i_)nnAxnWk zJH8%7OAMiUaqD{4Nf91d=LXLlmzB_4>KLQOI)A26IxJM=Z!KqY4MeZV=4Dp+%u8&MLdc*rvfvLzJYbd*etCh*E5< ztuptP(AuKz`oXeazN=>^3*0eHfY*!+ zA;bK;x^xD2H_oJac;N?f80yVK>OCfu~)fH!Z+36zj=I9Hp^B!utz*X8Q^(; zk#uU(VdQhmLPbHSn{U1V?+xd5<`T=1c-Aiu2~4R(P3Vlhu8m%KwuSPn@xrAP6b~k2 zpEY2UNi!%oO`#Rq1JjhM73~`jpof=8Yz+Vt10z?6#*j6}q(~7E>YG;-KrYV@w^BbL z8_=C9=?123g6+~-2ei!S99mo$l!0BsgpEEp5fq4a!o+OVKK6msPCr*H&(t4jntsn8 zMIr^RlU$){@CQY&C5g>`Ff(d6O9}6g7LDR9oR6R_@Vtisv9wr?+47!3_N4k+1@rm& zLT(Kvhi+X)vd80X_REmJJrxTCHVkChB+Ll6dsj-ElI%*Ip-Vc9&91|Ly*&PLCO!Yf z+Z3Q|&RrsxS>EHp(lc-AfwRi^6%Y`1JkNT-bYxhx5(EWD`Sp_Fj54++GQ(F*@7@nm zf<2CA^Ffu99n2nmkSKqz3W~~uzHZRHzI%oC>rDY-1LDsgWoo11$$4u7#tNV#trF6J z05~qWhP*mzT9+5XQ0ok+sybq;6@a0`cgdu880|B)L4nfE&>_Y|-Fbo+pr~R0)XRL$ zME$hSOT^1I&g*4#^NKECb-KiGM^o;Om{y^(E46;zn$w(m6M5wr((~||{{UUt^oE&zRvOmAr`zz2+f~Gv(>h4Iy-a8Uns>5AZ|WYP*OrOrfE%{0 z^h`!xTSI|QaZ|U^NKW=dTc`=&zx!Q<!anJ9b%)$_G4uTFXo+fM3! zXtu0(Q6fAw#Lny`Uaw{9`#S}f1ljwZmF%<0>^{CjkhGNN?(Sx%ecD&2_2s)+zBT5l zl~RJ1;V!&+rR2o%on@zy6T#7xP&Ky~bF28jUQB?%&4YNG`SxeayZQudc(_JTWQN)* zQk1o#;&go1G)k2}Mpz4#wjAPk<0E~t!!x^`a5xv-n1v;t>=lon>uW~9C^SV5v?VwB z!N>AwBWkL%ZUjdV`V5g!xp|G;tQBL2Q~lk!fn63|$kGjypV$G7BR4Z*RmT;%I@3Jq z9^`T)Y|?Jp8ppTCELZWBEu3=a(tmo*_-tkc!OWI`uLdwBQWO`Cx7o@)gtmBL7kQx@ z%)>Oeb!3!!qq}6byvzk(;}pWkCmt|0A^zoZ|33#L7otxT%am;rhgtUVyp!YkRwOVR z!?q~6Z;8Czo6;MCPZ`DC^6Y{~teMi?c+2&@sP**(vlg>guZ@lTG6tbY^p$IgNG2`m}T?f3d;TnUAuuY9|AA__=n>9*RG2q~$zc8`Sw*vdEB8SL7 zRfKuLXR$HgG~bl{`BL`3_cPvnv`?$#b?}@c{&raTq?wictaI~yrvo*Gzh>0`SS3#V z2g0zO^AzVFU6TCilDW~7@!EoavMOHv4`iE{+alXPx`go$mn1Kwn@IhWRTTA~R>ePG zS2_I04}VfH%NXXmEz|w{>v%uKA-0PU!eb80)Gm0CrMQ1@7t4NQC35R zpMP_oY%$oeV##_H<7Y)AgTsZ&J-W)2czKz){Jir5S@YDazZ-%C==M}oIl9@?b$dyj zP;rppE&5RpOjF71O`&#p9gE${zF^60?o4d!RxOoKH?#Ch7<6yx*RIb-GTr)ke+O|& zfX7^{vBb7_zY~zP{|d-tRA*V_Jf1X}MG;+Zgui-%zkFRJ+cc_Wc0Lgn%;!CZ6N=Ja z)~JRb8f)Ip=k{Z%ZxsFSoS9SlOtxcpBR6ek;jEP%J*bL{pJ}J1j}sX`1btfY`P6mE zQG=xo%@C@CBP1p%dd=@(l&mYSI?tt&^S z9)~Kgo__AK^}O6Q4tvSWrbf#;Ru3PU+O7o>+?vN2RSpVp_8=|#w!!X=(5y^zphHjc zO!?3sB6R$o^J$3{fjIoIFs z7KltVT9m1Ou+0TI;FA3qF}R~(XR_V`r6qGx{!L%y0fTl%&yRhY=n68_ur~E!Cu8|> zPZfd9Phuc8C($(?U^WT)Q}?pRY7T~X17u4eU2oA9EC?GJqolH1*4Lv)`7)}Xt4^HM z$Dv+gcUs`hUe2m<)*`&%ZnhoMHt}K{-ZO8^eV>I9XwC)N6*sX{9p6FsEHRe{b?iFE z{56miit4{=(mVu+2XsCPRtr~#@#Egg5c?*Itg9p@490LRAu9pKaxOY6zO(`%&0HmM zGakuAhP1mcm*u)<#@6;i37Yq5khjD0mFyd;lX?(ARXnZq+nA42U9;SnNPo6F4(*yW(Zpfa3v7_E=is_rVe<0 z)88P?%tC)G%=Y=EOKv5nC8(|hX=}uM{QiSrX#z9R%*pn6jUmAka_b1QSoPz1vDQ zG5%sfAkv2_;petCxozvnheRm$QFe}5w0}ZJ+xq2xbSB3CUQ+!9?x03wpg}J2MuYqN z372pAK^z~m4S}b{M={>Lz65_ z)@b8Z^u>48?~FI$m=shaVA#r5-p751DNMGM3-3xleQZOrtN0xt@+1aEGHw|(`ES09BwOGRac$T-Hv#ot%> zWN&O>M_P&sd4`kq4Sw>1+qDb&C*~HF@^knqy)wsUC$ypfqh0;T^d#=)zzIw1*-ONhb zU#qcfxcSpajNC!NWzp{XzC$qV*NxP$E`y%R-KCnh+PQ-*5>v0<-#@tgz-uHa=;B9c zqIG)1?fg3EG&imx{kSXz#Ep>|U8`ukn~*4U{l2qW^-i-9qBG3vyQS{s>TMQuwz;EX zNcd#o1syOz$;|$YC$u0WeS3wPn#P7oQD9J{47G(WG3nMyVd{*D&VjE~#ySZ1L9S2SbhK5;ijA{@ zH5#GHRHUi_oNb!t7%rK+ zwk&9`pf+N3J5(>E6(C_JK`s5UQdY&j5=b97FR*|z&2AQo`Tp!OW;u4w<%4k9_how? zPv@%&A4gIynsJ%HhaM9Z&L@KN+pRbJ(8UTiR^jos_c`=W;WJT2D8mK}oBr4p)-!C9 zY1e?3`3fl7jdK;kQ2rKuVGOlVviHHl)^&s693eEEJx2|4P5RQ>GH>RszV!F8LLf3JzJU4) zfIvQ?i_lp-hgG@1q&}vy?*)>1Hd;Z}Nr)qy%i0xc{BXEH9S&xmwT}@?=|5vuot)*3 zpH8>&wO*`BJuVB4&*TDJU(o*7Qu?mKdIJp@bJ|PWD8wluMwcF+2-0W&7gbvHR`%Z zf&%9X%P6@Uzs31thyPm3T@X?&M>)ux8+m9bYa8X#?|Zipt+cSjXH7-4A*oM zPs=-5Q;o9AZR#0$*t$!-i^|E@lN!;mQ%-BRg5~vEMrQKyjx-UouPEfDr)mh`->jtj ziE6P^ z)={HP+dQ2EdodbRW8Wi36D$=YHV~+HhUa09o;q+QsjB3X900>vpKY9&MdQH3D8AW+ zOWl6^jzpPQ5W0B1)X&PD)b5ii60sdHDc~(^7bN6^A~}-dyvFDF=M%dsm#b?JnAWy{9kMxmFLx{aS$tp+icm(!wLi>=RX@I8 z9VPFuimlt#-M%yTKkWS{y`+Jx@r=`Tkt-F+hDcJ4u3FC#(m)nz-wb8Q>%&*EbWO@> zRu`e1k`~4xiI0iUy|sst66Z=94G(ENUvgD$;F``*JSyZbo##0=tknolZNChAg+sCp zyk&LkR)pC?eW`<#Qde3WT!&EOnEubyB&Dn#RMG0zlr181b>kP#W_=nCI3-on9ocm{ z-*_pE>jHU!JhzdS>TD@EFZx+sJSW;rNJ)ovY8fA8GK{pAoT(fWnTf##sA6$W-nxG} zyysBa+6j^@tfrwczMdT#AljzrbXB1=QR6lt4V^}w@_!4<#*Kdl>E|0|$rMKljcnuP zEsa#BUK2?Fsu1$t8MD+|4mxGxD6;Lh^9%N~vft#2W-XM2ASXQWF^#*vQ~ZOyKbx^Q zg|$_us$#>KZlI};cW>;dL}zSrDi1q7(aovz+&2$s)2Sk8hXnpDPH6+^gS`9BBj6RS*<`!TYr^8KkrGi4CzJpc4y3VaYq$i<#hu}1%gYya$3QPXoHijSzL zQ2%1Tnfw<&>oadP18JZi3ZnQr!@6Vh6b2%aNGeUHdauNQooBz4Y z?ERT!*`Ozu`Cl*n{r$P$uS$xRST}I~Wjgsm0Q%=VNnEQR_dmnZU+>F4{4DYOHE0kj z^yz6;RDzZ+hGow0q=|wB=-z!DJH)Mu+C;4?;tbK|wp< zIV3kgWB9SMFhLP~pjbwjKJCWv@*#sLoIhXT!x7KRr}V7jF@xn4jJe3^Vl++9O1+9Z zyO+OZl?j0V;dRCO9BhB5XTfjx!JSJL=lwEO*0qAizr6NxxK)uS#UhtB{)A`T8d5^3 z>)X|cCpP}JDlmKgZ)Thy_F2Gj-tAK81=WzZj?SA@$m`#624}X)FXu8wN}MQXcd|;% zmXkrncsR$_az@q|foPrqbxAqSpQ0YKI;Wv<03IOSU%JCxw^Pe23}q{)CASf*2gIX z)3}Jaq_;8ECnwgPMJBj&wgBB?qjYHUUA(V;lz7!M!MF*FY!_v$f8 zUR;0LC#jEv7HzpLjkiOQh1hE+GrJ$|hYCQi#~0n0%gqifGrQ2X$M7k!6B8q@n;R=0 z^pk5dLh6vyad2PJ+cCTU)yGVIh(Qy@O5{4Z%-+}Qs*jQJgj?z|Lav6mmGkbyB|X{BN1f$t`39g!tztzRaLVJs zc-&KZ+&3f`zHiX`rB_7Q60_1`(GBqx36mwJA9x(XljExfyvhxX(}yR*mbMyn_e+OR zM|01=$;?dqXX_AW*F}U=;DKQE6bLT$RP(zypJ1wJ@bk|s+$gi3F%;$Y)mpEZ%O*BH zTJv2BaPkY}jtG*9J^GVN02R?j9w{Je_|EHyiu&DpNiNt|sgi-|?JyS2AdlS=`G=PUQ4s@dGS1!ZiXCL6V7?-FNMPQpnkQn7JDfhgyXScB zCIJ-zAS8jOWL%XT@>k{2QJ$ghHLS91rYqcd6kqj0FlPT~)>FY!c39Q@#lHTB=zF7? zx9wCae}Ga^i(gPwnqZ{<5C#A7kn5{HOec*Bed0g7 zP|pmozvLqRrw~~-`b8j2d``Osx}=Y9$KSI63XmY{cj@=tb5eO;CRqwm??%{rP;1qv zM58o162-c3tPh=6*-WF_z3M8PXHs1K4G5Y1tZ!cL0NAm6`Xg@&=0|8{4fW|ivwUj} z!v!P;415x?<{`nT7#R_bUY4I@Yss^yD_aF`qcN--y=5~ks~upW92QHN16+PKXUct=QP+1%d=oj$EC7EpjMkb4rLG}P`_Miks1ABJpUNXN>dn`O+n7m}Qi zi-qYS(|?v>f^ey{?_f%K%UN+fGJ@@wl#ZFr5|@axtnk7g3+MDJ?d$QDcbqNEvb{^O zvA3!ER<>g*p&L2NcG9|fr;nL?75OK`U67NH#Axgwc6?W=2+qEOV zArHE4JH+#?QG4Xi2>d2mZOv%iLjlBdpE*k}GIiw~JDLVQYL&fZFer^QibW_@CpdS# zIg*9#P>_LCMVh75VYmEqHo?3+sOb7;;#MZh4e+h=dDH;XWl}HmK5JOa-!1b?VOZPJ z@*XREujS-~)sNE=eCEdB!h3G3Kfl{Rrj8Z8$NAaUe{u27+Rq+_hryLF@xMLyUz?E4 zeE*Cy!7(eYzZ?5U6CfD!w#Km+LvnocV$jF%kGebgAd1lsC&a4A=+-Yd~Z={}jscRS%Ek z3`C(?6uMj2-1DcF%U~EV2y!>#gt>>xc(xnQQwlH3(SlrhvMm8ZCh1wO{JE%KJ?_{> znJTNV@+Uock!h?AJR;1uky<+uH+U+Qa&2{ue$7p$A?$q11NA7A70>ZiS5bkc?R-Hj zb8y6L=s|uJ%Cy^y+qx2?A`8(U0cCoT<_t&s`{Bn+7a~~n6n|C(ic4H;cKrDKoIXhF zqVq1s1n_1Dyc0zxC72Hz5Ge!h)jQv_h|0t}H`&U$(E5Q5O)lN?h_8Eoyl@wpz??j#g4@?v7!P zXo;*GZ}?n3a5{CB6PCc^E~7#pW8^O-_^KsHoaHE=Q1b4b3~l2(%CFE34#prl z0{0QJ%!+uFTsD_#^XCjWKh#Y_yEQFFN^5W}yguux@?AB5WCWN>Td|d~0s8J;cNw8> z>r4rBakAs~XCqG{pSM;Nq(nS^w3Cluy(-z|N7w>lQ2NFE(Gr9U=^xv~fgZn$am{d* z{pc1^ymy(2G_>}If#SnC_qvVwx_jAA7mBx3&L=5x7_FUzq^2g+L1mOaggWcJhIE(_ z9a1o&vBSBp_ReU5ex*6od9`z4%{&pSvq5Z!f9=v!o9`VO)-@tZUno6^USN(NDi-&! zz-VoZeXl4V<{lYSkHW}47WGo=eNrGCF6lDHTsEzb0)bi7a$FU~?KwhC=?G>hMRj?6 z!c+V9s1l@{fW`_@GmaW+={vFTlFCMf6H`2&<68d38A^Pa9^tu2S-+a-+nXSj$L8vT z1LN?tdbMVNHldno7?v>i1#_^T#QB~UMIAs!kng|Ap?2!zz zZRy7`H_|{TrKkk>MzLoL&Fp+#5DJF5c~rs3>LaM;B&7I8w$4^i7|Spa9&p;Sd7=c;E4Z0n_b^R48K!3(5lB} zhj=lJOWYDzvA0TFK*wxsAk_YU_n7<)PZJ z%{>Q>>okhg%e$2g{Lzj%4d1#KhhJ{>N%6_>iWSq z|9c33>8SM-DHEab#x>d~4PL*GS{VZSLHI0j<~i4XD*LA`VcPU0 z(pt)@;-ySoaef}C@)bLK#^*bWs2qIxre}G32jo5W9afF3ohL`~Clga{j11MZr=A?d z0`w-|XD-zhQ!a+{>yS}fKjG1SL`0Sp8UKb2D^jTTB*q(8h2=?&rd3EgD54SfAfyy#J8@L+?P7f_qXrLjDd}h%DvC>8Ljggf#Ls z`rn*)tk&|NuTrPod$O1kH>m1KNTuCj2VCfPvRE8<4%FTnLhPZ9BMv$B%cEaV37|;S=Z1ybD zvg0UFODe9c;sr2dT%bzIQPYy)Rfv?t=!;noc+&~+0^^l#>zSt=1{H=r9wJOXU9A9L z#Tg8JkD!ZJT`~}=%l{tPVneTM@O5oACNJ6Z8}ZKo*qNR8-^t2X3DENqMD=}a_=o9w z-NWRRQ+s>84{V?j*z4dBUUUJD(#Btkx_YDx}G;U|>uSqUOUn9yBQ8`Xs zljWwC6<$in4fyotU@@IQ4O|O3lTcxKzqtQ$VF@PJTu z(2)-Chzoff+cWt4X_(qDdw~@h91y46WLL%fJjHt`F8~W}8OMg(7K2TLW?$);d%M0A z)f(XJX(SQ&-7VmbZwHwZFRs&|+k#ns zVEpBiu@afj6l-G_(dn7q0)+V?OJ>h4JPg-jPMCU905|ntu^XZ7med2G<(Iytm>GR< zt=|7O%ZY6;<)`m3HE4@&m#4fDe3$GRa~G4GTWUR`x9+ybINEf3y(Q0Rg~#C5;r1HP z=kDyEVs|{RI$Nj};GE^FQU9BK9QyO$yQX+gyrr4DreGP6Zd?6Cuh&@p1Y9ECPHI42 zK|JjEHvQ@^M|OJm%xu$)E9jt$zIrdRy45G!*vrca;8=8>H%-Y>Tp$h=k6SW*m>Kp?g?xyt^MkApJXK_ta)z z2HR16gngA(g%XmCq4sds6=zbR@Or5MpRG{Bp@AQf<>bMInf(T=mGAb42D`h#c_QjJ~&5Owz9xQ(HRySI(7}`YH}?X8 zYeo;mh6ZrH&i0ea3qnga{>6uI-IKblH@ua(^J^3Ya|v`mRxzw}+-Qbtmh7BOcJ)Ku z=IyEXC6+vW5*}U9vxY(iri#<9m$nwa?`A8Xm}_&gHMhPgE7R~JsnmKpsXCc`N()UN zAZV^gY;1@58(PSwyn5yV11Q$9L=y#SS_L3aSil(N+3UPPU@*y4vR?N!EH+OjwPkA1 z_a^qbWy3s(Fd*Ahzz_#JykLZ5SY`}FAULlzfHshREh=k`VWl2qY=7`xX+Xn|)FEaF zH3S0oi6flk6z2Ym#j8+!J~>E<`uCKeVjR?RQxGIlw5$==n1oNNp@CEd95SFKC!=x?)N`9x!tVDm+ zX#k5f(Y5}uY6RQ@8Oddyju)PrfN(wG^p?EeIKXd(+4~76$i{chBuN6RRIH>hgfT0> z_9bL0z4mS;X}u0;UsJL(+J7>(9-XxPz%V6Xu4YQ_x_aX^?h~Qm<)^G_kg=y7`es+5 zKu}SEh*7B8G3@Pa(U!+a`4Xh$10~$2pzM=we~0&!X6+Qsfv^!p54rxsY1m{IrSmTM z8iD+f7Dd;3n-o@Gz=eI&vG4KsDv7>PqrqS%kBNiT_v=F3#CbKdg}EdShh9JF&TYQ> zr9NMgAzh+7%y=b@6UaXzZy$ngftwiCB%2bUOIbzs@%x1b&TQR6n`G{=$b45EY&>$!r*u^> z{acm8|144rt=H(8-imEAb@WPQi7y|bXjL8;-S2I_LKRDQ8%kV$Dy35Hi?l#`$02cS z^Z@6#=lP?-0G@Qsa_>CfXCPimEzwU7%`|L?JtC*Ue15DM#^7Bv!;T-CVO1UJ9x;`{tQ*D zu)}G~wEjda$J-S(w%f|OIl4il@)$htQZ6NdJ($5<5}FpMoQ@X^@lsfC zVQt}aOxKpDqJ6WOeQmApeeuM?570D0@!J^9Duut&aqzIijN>@#9hH%=oS^NQt&Dvf z@)KLEEYx4>W~6rz9@~r_AcH73@k&Bc?)mCtByq;Z`f^;! z6Ksx5tYjRk#3BsNSc9cTw^(g?M|96#8sm=Rv548>@E2Y(@1M_#LK3k)E|$uqW)@2^ zUZ_`#jDO0lz3y{YukAo5VTNuspGv4zpFP=)%i_x=@SXdWi^+Tk&HaoJTaqx(+d$?M zNpaZ~j>X8;BV3J&Fw5oew4#D0c~V%|rtWa_`>h<;4J0J=X1iK ziWG3zpo!>ILJf%MJNKR_5TtlgMBjj0q$2wj!v0f_NcrX&UO>7h{G9 zAfrbamB(9h)vbt@h2)+qV&lsjo8lB!4B>iToybQfHd^%}gXpkBJW_exB=TNbZY0@| zG7YZJv~IJ+_akq|oowf+8=)8+#=FFM(_0hfvnp~P6S;KJbnV==OMfj2g5c1Oi8!9? zoE|vHJH%@zVj)fyw`JF+v_&(i)#pOLu{8NZfBwzG!EoF&r=a( z4Ch|n&o^cf5;R3=`tm*NE2D#>{%)XfA%;>TX7%|hxH72}VhAvl-&Oo_q~CX?fdv%? z3`JsvMhH*nr_f2$LXg{_qbjhnlQUVyKP(kxoCX4ZbFj^E&#|(L;n+6@{dzC?qTt>g$joR1`lo z0NuC>sAw86X{rH?OPHY3+;g??*qLb6Y*bZKE4e%xEmANQph1VOu5iW(@p^+GfCdTm znv|4ZFrK)_5B6y*HA##dPhX2~%YezqrS^(dO0UCQP~Yh74k$woccq0c_%2e-vAR=KNrk4VE^ zUwVB-vY{b71k@Y;7Z6bHkPsC8t8>d35Kx@tk#UV`V{#OZH1h1Zhdm9?)vjYOlnO|J z6io_7Qf-9WvZ8oAk^13WQrtZ&$HED_yOM2y4~zQ?_MM~Qt&2r4Pc{4!kJh<@k^~NP z34-npY~b8M{3)?;c8SG}0r?51qBRZ67tn9LUqC)cW>Or<=W{AH9#So?xaW)Sd)+&S zg}ZKL!V#gA9M^V|jwjl0N`xPaj=cnzusm+KPMH;%D(D3eg)`iYgWOBdJLrB600aSu zj8o>Ok*|ymX?uZL4k_^1oFyoT+rU}lskG@F^Fr}6tV&IK<(}Jtck+&v z!EU+dEO1|sf@4vsW$=(s(IcO8amKYL@CD@Sx5HtO-&SxLM_W@A@C*V|><>gIx$6kl zOb+IW;wq8<$oQ9_ z-|%P3Ks8`i7xj*=hG6a9L&IMT_xjMKd&~E=SoAhr3tKQpKpytwZfgheE;N)-fHTdZ z-fTmFVqKi}wnB`q_?YuvLkY9topmgKj&Y|@F7k1r$~ z#x|DZbU#p3I=$`Nt$7+haC*pj$srp2pO^ounG{Hk#IfE&LK$o>w#n4-pWlqoa&^hJ(RXQ4V$LjUDzpnJ)|vR zagmd!pBVCVt3plTb||iJDJEu^hJt(vsi37**49SXkq(0gzvcV0)!=3EPO>uP7U+kU6_6lcRP&WRe8ql&@-taYe^^)@IhALmBt*D#%gKc9!U z+RpxLBhEU+(Kn!x6&UZlYjtPO;nTK^^4b1FLGhQsu2CdHxCf#Lmp>4(MD&)Eu$m z-=0^QyFENT-q0i7b&`^9S3+a4npgSodtr%w4jC!+@ONa^`|@tbW@3pR`#|U!SpvMh zC)#`AR50T3M{?GG@N%t@Uv;mboPXV|q88}*rNi-mo**dN9lKlOZ^BJO048O*^>L$> zmAT)v<~l@Eq*sfX)p0tE*^h;o9+LA^^GYBuxRo8CCb(CmC-X`bPR(b7d0jsA*(&eB z@Tpr6aoHVOxSARYO0=$5t>ai=7mc4$B#S$;i=pA}AlmuYK1{n&3w^Q)(!4&~lR5?B zJ>Ctbdy)%)F$MRxhagc_bS{aSR!Iyl1ATANC~ocSOz?i1TicsAa1vyXR)|CYOqgG-dX{ZwQ+3Fu-LZ**bUSN?jCZ5dxA3L1Yn(Ur; z%DoE>Ks>&MT(`$94Q9}7uIt81871AM4r=0x_u9L-#&f<4-;2?tgeOsC&*z<>%|;2> zIA4HA4b=9@mg#s!L}m12$SuvojR{zPkn*Q!{=nZ0P}aNQlc4DVcX{eMpq&WWj_sa_ z_av&mr|{6IV&SAPi1&R9KcAX*_<>ppo>jeagqM2WxSi#&ud?KLaidq^oSaaN#m3Qj z$y~;;IJ3y+20M50jbVln?56_Nw6o11#o;QdMSE<-XC!GmDu0@B0Bd=M(aruFJ^uor2IlMcI`MP~qe>8#2>|deI_66G%TH3#iX4h2uEzc!ll7E_!9AbNS zc>N@o$-JaC0Q_If{`=JjRqeN)o(D6TiddzSQ4w0BWPGeLQ0Ho!>KEndw~sWfJjL&Z z>mXmAc-^*OWIO&xhQFi+^MAkg=UtTTIsxhw5+-4^L1T^t#UFu6e3M$+g5Qhzsw00-d;L=5ih7DM<5D!+zJPUjRD z5fD1r=P>#$!dcXUk%l_SHt|ml>qQa{U9`&EMexx%y}HfuNqR=ML{zeuTmBXp!-Wqz z0_k|R%B?6!a8T!;1PI0|D02j(c(loh+!ztNE!^PFYq;{1;IGO!0@W6dU zOy2%s%Fto1ZqPC7{`ah8Dnl1-*eAh>kW&nvsuvS^*dkhRN+$2yPIu212$w9Fl2`?fS2bxt(+408|Jw1c)T3Ym*~uiOyL5>8^LW(mfu(wl~~(e0*V3rDX1=)L~1Q z)f@!a87;D56)cagrjb{-)Ez7DR%5RkA6!JjVmHV#koqR;i#oIZ>RR(=u?C>5kP!k5 zCzZi0gk$ufu<5PL)BFP7nJ0p*eR9}O9cOp}^(B^jHZ+C4XRJ(1vlJtV+_~DVEZR`3 zn0hcN=WEVMa=N~cG&xhOPxEaO!NGMpk8rx^SI7CUo{PxVn1?d)!>X+)A+ZW0>U zS|yt9W>+B$wrE7;$U>pSwA%CL6Qt6O#;9-|0jqCQShZcqLM$GzifbfQ2y8wQ8 z%(UPMe)%4zl)s(956_`GvfG_T@H zpVpMfoKp`6^Ec@fZVDls9Y#YQ0WLnRY`s#`D$C|1BY|J0tNj)Z%4E|ZgazQ{%X`}- zdcy_3pCM_Xa0_k6N^g-&$H0?SOZa;9qftIpzeYjTU}6sQ&|S3d!e&Uy16Or@+Yx+f z8@7hmjLYS{oLFAh#2KD?ko3rtP>b z%l(4mN`TC|Ak#*0X3aliTc)fP?BNJiB;H~8+1HAS=CUcPcCmmxgQdM{C?Q(;&mc0r z?E*EujG7mFPaKrtoQs43f5z)rVu2 z2Bn&1?-F*1c5*f5E01r4unIuA3FP*1lRO4kR-rwB6U^X<65ox70S z+hsr1fb}H1(bx9A{7Q$GQW9y?h-3~jC|w#DMXW-Y_(($}EqD^FGSs%o6)?m|Xx*j; zi9&jUlfQj5HVfpW$B62hQaP+j+U}#WnX5j*)dEF{yXg{7l^CxV2XkR#Rc9`PolI>D zx^42Q$KGQP_g?y4^@Q|MwJL2)Im~Z+po2TF8!9{CAaDiNhy<~`MtB2SmObm7=H6)B zKphu<3pM~;{*K2P5}}IkbnU@c9q~pc(6R0@xqa(Z!YH*yCecHDLb6}$uh@9Q>Nc>% zrBLlMF1NG^etqD%medY-BJ)fq{!--sTxBl(0d~aH-GC- z3Ux#Wi}-I;=&f-_>wiA*UsMU?N%73smNZat|BZR^4+nd_{KLZjLz8}XJD+6*)kEKXZ+HC??3mEQQ@Nn< z`+;p8(4)QA{)+s;8J2P@^C6znJQOgdyo1H`M0JOM^WV37+5@^ z-ilfpP`e+04#xORc?);Np_pEOb0Pgv1R^3XKQ&aztKp6>h0jc1MF{da{C#k$2>&%P z{H<@w4`n7jipntW2syaFlojP`{+?wZ#%IQ>yp|@u+SvlnmZ}Vxl6hNBYK6VStzgHq z`67qO?Q4ExfCWA}{!M*n?V=Zawt39eO0_vZhGaEdWD%yZtVba;c7Y>5L8kuH`A2a7ORW(YL3HQU zfN@N;^2+$sVgk4jnelVxPBTN(P@fWSMeUrt3|7rC^3I)prArwZDF%VGJcDWfB(05^ zqge>>^7V6-*o68(8a|cLiYBc_#+KBoB~9#vEx80r5Z8+X`0%HS!GjJQ!TEgp!lV2lYZ;z0&^^?LIFLJtD9?*Z;Si4Y;u!B4td<( zDkWPeIuL2tYu)z*gQ;l-0gwTt+bQs<=c~~)7Cm$dvok^D#v41Q>z58L zr*ZSWkCT0`<@}TCnBSZD5R{+lM~pU^l}&J0t-zwz*I4%K0k^2`VMT(PUoSMjW4R<7$by{%H$pc5CP&z zZ?&d-)tcrVt!QGF0DTBD_L5>_i5DG!*;=tyHog%X*kqT%o8)xt!@lqT8uh|JbFy;} zr{$NB<&mS|0cc8VUkZQJT6YN;uc?Euh}ZGaoIL(+7*b_lb{Xfq)z8$WizZ?!9(|Ma zMsMl}HqM2~KTKRM8J2Qm!%|r~y+?1el9T5f%VbKoCoJqI^J1ZjPb7997#+fF>@c8Va>Il74whH z(YI#d^HDfi$Bqtgt8io_1x*Y*URRM*)f&p{!J(zV5vG)yZL#7J8s{=}eb+NG(Hzw* zp+4^ScVNo7M^-lZD4j|0wZXBrN2}ta4E?~TZ-i^n>BG;*GQK{q;nxV_z3&2A%&&~Q zOf7wx(G%hv|I(0c_*iR@Waw<(RC==#x2t`LG%=yH8eLq|%l%#{WHT46S7HVJVR(mZ zU}mxjk><5=&&$zjSfYdW6ZbQ*pi0%wEgIu-?w$%|jw%-WlX7>N7nt0l9(d)(yh7muxL6JxZyuffhqdl`1U{-a% zywr8$y((WpX~}7NH%t%Z*mUEU?&%T7yO0jfW?ghyoLykbkLNqij4$mQ&*wUw7@0pP z-9(3#sBQYft~EWXcflo5yFIW`R#03feT=>}r1Q(U9b#Q?dAan?+dh4CwQDuvISV>+ zgH$rKyIHcD_!Fl)K_KeI*~|fG*5LHWJnEs#3w6`x{mwJig-crgzFk|hUOtJMQFOF-5Z|>4Z zJbXwPWa;WZk!Zbm*?g^8dPG_Fhan9^gS^oUcLX2P2X;$8)mH((tuXFhA+Ir8I3(8s zxO=N7ux@r$3B`}xK*jS5$?=>OGPt9U4Qar;vy}5yLvRu?To9KU^3$$mno_G!8SfoT z$&5R{!(`M~d*=NkB-+&3{k!!B0@u@Uk?NDrVg^2(dik2!U58r6X2t!!*>Tn4&@JvVb0rfsnQn?U%H;8Yf(K0MwsZ>2BkM0!Pe&` zXW^tw%?dF2M@)S0aM})l=iYI;zfj`&$|*$OY8!Te55)n`wp(wcHQuSAgeMs5xx(6D zaPmDM%Y$ptOVP_&FAPb=;)<~KVA4PM>XAOV`S4@&^(>HpA%j~`@~-SgE=kj)`2%wE zee7tEhD#|*>$A>*q~WTccqe+`q@xE)-GYz$24hIi346WvD3ZT!?-;_iW)GQVeCiKu z9Zn1(v~ZM6KCv@4da({~c2Lcy(I^q&QS)G7{0V~V7fQa$ z<&VeNn0R_#86>(5zpCCHsD<&T<}`f)RZN36rWClK1gX?~BjeXFOY)`&1r+oh5`w`YouFN(!HmjdisC(Zea?%P`)6F2##lGq5} zYX?vRgHmU$Ahp#dOB5gd{2Mkd@mShz_`#lDt?75uuBSp(8?t$p&39sG<(Ekv;%&v@^TE`0jM-y919`_DWAAFwdqU5ott$xJLTrxA5MbQn!1MM?_aW;6vFyc{0g@a zSV6`Q%R}@#=~b4Osn?41JBMY7nsWb-y{`<5s*CF$*?W# z!TgS8rRVjJ_?A~hDRPH0gnL%o5&FlCQ>pS}4V_cPai=rZYEFop&a$z*3CNZ{{>%)@ zP=Ucu za~69DlLFWHKs9@J*}i?1$j{+TKN?Q;iZMaV;ZgafZs2`4W^XhqF5kH3z*RlILWoc) z_HjULXU#_Z;fTJ0y{(E<**E6}N8sF_?#Uy{EUMwkk&z6`ccdKPv4&2Ef6Y1}X&iCT4Qne!C&rNgS@e}zHpXBwiz4MuzVpLmJ zRNG?G-8|;AL>DUhy(Uk}xQg{&u(nRS{79Q~@cSsP^GKP>Z_ImwWYcI@mD8(|x@3mM zOIE%O?}JuD!KHbqLV}djY}9s@H=RV7-dRwV>pFao1tTI1f^X3~ ztkHSTT4mbW>{5n%mDw_e<8c1GVIQBRaw((5D24ajEJ^*c5q+voxkix}U`VWTV706E z-0iy5`M8?*+7QWc!y z`69S|Q=+#|*M+^h_%f$6uDN2#A6_?ahsRFFFa=o|eaMC53&-_}3zQ-6Z~2W>Zm?1V z6(cZK>*Z5g$bHAOfF8l<^Un7lZ-{IBg`tBpX z-!tvpGG)7?57=1{#>&7PH!GQ~yK}8miD|T{y*8bL!m!%W9hP@fXcTYGjW?VpSopt( zY|lOU8IdhN2C6>?_n$Qb!5~7FSp$)L{vh3wBLq(}ajE_&HzG*JJ35nR&uIpFg1x>(;if<8GrBi#YdKVO5ZRN z`uxV@6(m8q*pG6zTfe=WHMBTr&M!IbW^@28vwCC>NS(8-|JjQ zSo1Zi&cY@PI_T%5)k|j;iwujSl$(EVdnPk96#dxtvH5WYU))^h>K7RNhMqc&nKzew zJX{x#ydYKEGP{*BR)r5&3`{;US2f>3;i2@iKDN*oI^hew zD!M0;lh0H_yY3H|?rCI;3kh^PKt=1?$A%{ohvY{7<_3+!bs7$h&kX{MCKIIRVFZ!M z`^VPsHDgcRCVz#hzrj2Y5un)Ru>>}!L_&M#7J@x_;gf)|ZjpHK*Y74N1*Ef0Q&LH< z7wcN$fBbRV#9X%TZKrd9o8L5&scbLQd&7QUZD=^Px%sqM9G#2>jtC104N1ny$*G0; z6Ty$G-PHeq$a;7`>!Tlp^Z#V>Kl&M+WuGJ-lawLbRyo z-GgZpY_!l_hBeEkrpWaL%?Q}#0(y0A`3Qqri;`MGEo2lGcjensvDBy0EZu2v=IBE@ z7gI-e@$#N&gR--Qu0>?s4f;K7P)sAY^=7GyRNQB5Buh!s{s&1#{*XMJ7p6ZaXD?7! z!LM?ZRRdmk(9yNh07+N>6bY0@MsHIRz}()I$X+<=N4hI|k>tVHw~+JHcJpX1q^!p~ z7*=-h)Cb;9*Yx-7_oC*nE(Ge<@T%FP2O{z6Udn7aqmFSNVx|w1Y*ek3230nF< zEK|>;%0>FWL-OD`^_$AE@KKrnNpVzmd4H0!yLqoFw2R^pjy@XR$aK zpLxEsT`QMDdW+dtS-dw~(pQ&jgw|sdL;OR5j4b&KN&tSCc>?FcVD>@h@X;D#?MNbpOHbc9_W&!; zn8*W2Z=tAMwcWtnS`rbb6c*VVnlqQ4mBr~Cc4Vs6sjVJ4*z{CyyKb%A+`3AI;VvH7 zu>-4}O{C`wpX69fTBL^UORrBotMzSDMMoz6B5hcbby*VS<+S^~pE>Pk(^)l|CDr*) z&$0>lnEI!b*31oHpuKsT_I~dPxUQnH1(Nl#GAWIV*{$`sy`JbaUJ|qZ@BC^x1$dFM zu3ualC_x2o0traUX6;k~M3Yoj^3*@WrwbKV2OXChF6ghC-XXFjmqGYhaM?Nm{ne>% zj8)-Ep^m#^IjvIWwg`rCcU;eEU#?z!wiB}bc4V-z`wC~t@fWNZAZF#VsNb+3gpZ`L z;8^L~qB1z1=Zvw?%k(z0Q!>T~ryfk5+*{1HuA@2F^*LyWOSc)SIj~=z!UKI>KrOEl z%>Ii@hK0Q+89%h!#F1ksaCK1Pb(dliXc*6|+vPx3)y={pg zw+OmDiK?32g{ufy+dXE{Sg3WjJV%#8pWsRk=HCXBj43l7G;{bcie!ER-{=#Y~E_khig`8KK)6(Z@U#Asl zIU(_F^{a8doiD@QN+f+syr5B$vfL{PdMxNJY%JvaKu^&@LxP6c$YJjB7V5FoEkRlm zwBLBaZzBw7rT{lQ7Y-CMah|7mioy?7rQJBm=HZT4-DSXnp86jdgww=Yxzey=1*>$F z;$5mr1MH|1#o%0vE1(wx$YZmH19Vg;_o$Km=bJE|^eW94Nl_4y+{T>G@T zyH6<6qs*nsJ&hY4>h;U8L=G(+@n$=)Xn|D0IVP$$G?x1+ba0A_A3oMv+ z*2=$}9lrWL-u%A3owGxD}I7JMlfb*Ky6rgyu*R3zY7& zY5#J|#WWrte?B^3uQi71;JA2A!LfC;caVG>wnAZ6CuT~$keol#qIkKO0WNyy6@S(v zBB7Zh5xzqdTiJrgkbRKLIyiDDwkmAFV-=f0Qd4_LPIuN^eY(TooKb?vE%SQ3+2RMG z@(-tUtqs2*Epw=OHclOr^nRsna)v+Y992A z;72Pn2;0|gUCK8ul7-Wk@kI0BvsJ89m|Cs8E@Y{&b<1o*7eG02Fy0vLMy?pLIBqXE z(Z_Kf>G9fnmGQ}oX;tZKSs~bIbcNKWi~D-F*x%iYTOVa>y!dv8PV#mU7GoECX}{F$ z&kY4MZiky!zuT(Yon&PSLGOj#@7(%^Z&iPA%}`U%${G@T19_G&ubkQ#?^>;k8Tn@M zD_Q4<+8MbHOWuMOlQBizF<5;?g8d>wB@_Q;{T#6Yw(udxPoQZGUt+^-BZc=br;ely zaLo3MGZvw%H614Q?7|7p2yh_1p~PD?5zwd9%L*pOpBkqG3m{f_hrgiZKPxmu50;O& z>w?0hz&GQ8UmKC@F;G~k0dfxrj= z^d6XoiiViTO_}|e&$1^lf2qVz2)~5_?z%=Y(k^R4*;2Y27dVGJvkLP+7`P~{tXfH~Ye-uRjl&;(6^@2P=ZsAR+Exei$>G!+n7nft|PEAcd@&8e+5?x_`^fndUw| zer8nW>p)5TQEAl?{@9_N#Bhtsc$Lp-W4KFL5b>JI*Qf9QDM?evClkmmm^muZ@^McT z5aC9q8so)fC>OVsJ9wx&nB{+&N~tHuw7M9w*w99Qs4RHPjS>#1)zhs}GLyE3N$FwMCkU@x;_%d{X%Oxj5v`_fdv(*J zSR1{7AQHO4wKa2s-C|(x&;bQ^#lP*u9TC@_4@8xUL|cY9VVR>#6fs~U2}UEYb~d@a z?&uW8;tXq>bpKA{cW*Mqg4aPo#u5E5jG-Uo3r7jFygn|{H0MzB$(Dq7l&mP18>uOd zv_A`aN)de#bPUfKT$9_deBYP>Fci?obs=@^nj^nUSU-30zWi;z7OV9J%c=~J&Ln?<BrG{mo^(})p(b8PfD>E z}=unrvwQy#G1gSWJ!+MfO5EP+e4Q3qvHjohw zMb4?-=d@(yZTR=&&$!OoNt_W$*euKihXREeJlX%i)irGvFui&r6J^)VXX*WY)k>&U$89wL#v3KUUNbXu%Ji~GU$*VD)&-LzO1`IIef({| zokr&HEE~s0y+TV3Q9({Wh?5L^N=$A2zo<9(=WuFUhPw8$2$k2>HER3zC)}F4g+O(U zy6bWH)+BA3u0hg)LfvP$Tw7ZCYijoE+ z%VlsX<&|u7R$2+r9>^K6rOr|}-Q-q+CLNdvp5lG9{@2-~8Qh+7DBIdqk#ahDSd_nN znjqDoFbTB4)GahwM@CVyR8YO0MT(WiB)*CUM>Up{Vy*Qt8x_BTE?A~4Fujt&1sWK%Qa~7DQz*)- zTJP{Tvde6XuR5ST*qq`DmclU1dzHjHk(B(cyQ1JdAFYNbWhSJwpi(f7JUJ3rdq4F-OiN+e6yUd?}6! z)pW@wfWKh{dk7GNvzB6 zdnYz>P>c12IO1y8<@R$mmknXPplr;G3%26?yqAPFAcGe|5n?9ev(PficwTuti7-Cp z6SIxH533(}abj%8+V1$GHy7Ltf6(5#-8+CnXs5EeVmXYB)ptZ&X%3n*VoRzMtAu0P zFUCtw1~wq?KFkktuZkTRwsbo|IIZO5t~E;y6Q7+@eISE!ZGWd`MlP_Z_Nnnx76YAR z8@WT46P%`R5ZX*Cx{`M%a>K7L61mt{3Uwam;Ix)h3k zA6mH^a*tM!T$OHk?{;2^(5#|wPN;V9L<|GuCqqX-7FSvhkBo zk^6R>q4QT%n~3gqh?omGS~D=IPHqY4FH9Dqq0by_O`Wwa^f_A0oGFlpWk%QazDJ0v z3nQvvu0}UEN14wl4uYqi;0Y9WgXO1->(0_|aM>!Dawp}d#EMN z;kA*VM?Jf5i1KVAFF9o@57q6lza*C=HF+ZlTp;8iPQz=0%#KApjA%4CZ%D9YXf)tI zdTmnA;T@gQCQMlft9b;o3l+_>FGSXR_w6SXIOI>;|hAM;GQ1Oq(Tm-W{m;ACUY574X^~0J;MfA?cPA&l+*-! z!epoAAl1SmX_-thoEGWdULv&GeO11UgEU~tcRH_$s=pO`O`P#5&yib`&9PG_RKEyl zxSF+}_^?R1W*8uly$ohD5&cA7mwRfz_dVPHnq8eJ=_cc4*LWPibk`o!+snSxsB1b+ zJ1MJTcMe-Py7mi>u<)r?E%FycZ{tJvkE~M+@&+;?{diyU_hlbL=s4VRC*xg*mb3JY zyPwv2nv{C|P3GKKHw5K1;!w_DE9X0%oS3W1l9tJzN$MD;?nR9v$@hnSu&(tC%kqOv zytCrSgcX7AUN z_Ci62xCe)q88)cxuK)eTJdgEjjd%I7T^~Xzo(P2FC}L#44@~%CP__UK6Em5T9UFb% z=X_A?fBg<`C1bqIMV9ws%vGT@+RBw`gViiYKFq6&-fF}%fBB5#WaH5hNyR1iRgyN2 zE*CL&(o>%dk%(|Dv2Qre)tSkb^}0&SZs?e2Nl@V8hJG0 z5b?e#d~8Z&^kC$3hEil%PQ~2Cm@%22;OxCneNXp^=3MDb^=TdfSdJ{1HmMgPE15VQ0MGvsyiZf1& z2rW$Fu&8$M5%MFLjCZx1s&)nm(;=%Qft>_*F-G*HU_5EKi&%DKs~?sg^C1C|jS8Em z;lv$HOd{G*6a_dcP{_J~w$1sr? z>IIt(deC;OP9TScRv{_lF+jv;OdcbaQ&kylPn|`ldX)K=Tnm_CEed)x5Zd2NUlT>( zr7m^`V_YY7(;rItn)SPS_A$}qJkROZ{?2CV`H;rIT|Txe7!Hom9-JmYK&2mqtmssu zvgiv(SfP1>!{+GejYtCPt5zAS8cr>wl;)RBNv>Y-CnA{)d4Jq$;Pr?`v9Ftf)%@L; z=;e!$L({2eq0RE9U2iwgqYWvw^JOn*FWQ-RXf%50X{SKnS*1xVE3i#pk$9ivt{pQG zv5n7ug8A6FE27WjpwZkGdFM{qat|Uur}Jm>4b13nd0m!=;)Cz3+KXQ!&>CA}FTPiw z4TR4?WYbn|u{nNqnV|x&uwW_xyg<2;_g-aOFDbzpacuHdLu`6*NAJBvqLN&PD4kvw zw_HS9OK^|p6QzWLw0Gf!J;$YKa18yk$S(f=+V@N$=BFaS`+6LCxD;x7((A>lEl-PrU)J0BD9&L)0?9p1A8kKd9asou>1?cjopQxRnEWH&js01qZgv_ zMJY!rf$2?Ja~jtoMBZ0B6;q4wj_O6SA1mC=1^;pVOc+Lf4-DgOn83EH5nbT5so{G3 zey+(+YM$%{$^#W4B_&PdZF}t@;B#I7j|xBoh}X^{KV8W+P)b?jvkl>)2MDvVNH7$d5A&u4e$?NK5eR zmmufroMXp+P7(7GIsnHqAq*nz-9nIxeO@zNR+vv(T&v195xz2QyzSK>%S%Qhl4TkzX0XXrRfF7H!|2h#H7dJgI zG4ZzZE7qSR{GW?+Njqa*x$#Y9t3LN=&e3qfC4Wf3_@Q97n{~4RP?3Sk*VSlWleK3w zO}}g?kU#uGZ;2il*e-v%$Sq`hjF|F>YffY=6t&lEYo70sFmUk0GtFt{u3mwfm4|hB zpVI%0p!bb$uT_^GXjdQU2_{xv%eU<5!e6%ZXL6weBo~p$)PHI6kB|TFTuA!0gF@z7 z8yJ=0gDOGB-4v}?j_w|VdHi8hRc|SIZ)hf^C4FVw>}o6?>r&OR7tOXxR#%E0&#h?8_c{uzFkR zLmuC;OEZDRx92N&^cjYTQb(3&QTAZCgd4EZi4;f{`yIrTMoUeXB(XTFq8F~W-Rk{C z@v}e3c6q3P#^PL*L3#F-VZCqDGZg#V9E=Y7+ho!I&}Ss5P-150Ys4;ThloDyZw3J; zZ&#cFD>G>(=7+Q|^gGc)4|@0@sSyOSW=yaBB4E&uP_dVR7qvKVbb-hpnyo~jnD4JW zgpzO5as93!bRr7=DYH@3z35pFkuNPck2VYDlxXtbL!is94c-)IC7roWmEsbKj53WW zDL9rBSt;omuAl57Z+`EZ?X` z0v~ecD60rlzSphDVDp4G?t0(AMa{}A=EtNMS%O5A&zDJqbw7u#SS?x^?}ifYTim8a z(nUzgNz1Lnxt$$f>kH)hQ&9v!o?nL)#Vs%3Th1A%@O5%2N2o5WoV zLYOUk`VlA-865pu={sMsUV6jl?A1*3F6l;08M7m7z+{m&p!~5Q7vLEkH(G!PYOw-f z5J4;@fKPCJfTZwJ$I}smIw14I>K=Is?~^adkjcDZc-1kF%Z|@1iD=v@pk<*|Av$#Qw zh@RzsrVU#{xmVXA9r_2_Qm~Z0i;e?*9@Pjrx|9W~2fW5cF93!uswdk<*WijdS13~* z@um_;9g@|C44G2Pf$WmEGnBP6V?kReqfYWtJ=`dt;@p2X_AseUJ2^~VIY~$u(W+Gp z7eD#fQx-;WV};NJZeI~A!MMb?uFEY%`bL6@TksPwjX^93{}72{*$TzrJJa+UW6RWHR_T_T9fc^efzkE{P#-@KYUu*dvSN{G*sVn%z%qKb#7c2klW5Lau3{(T~1!uXh z{eav1$~E{J;SlA@>ZY-o*s6*rdI$P~&|GlF;I#PvP@Zf5%7C)H1H~)MLUF6Xd>>^O zN!fA;+8F#BtpZqnaNO};kN(t)pAH(B(f>g?E74ex)+X>vUQE2ni*;xzS0f2jULRvqBeZr|CSjr9VsP=_zAB&&@GQ+qcHL0EpXi^f02Kn)&;Vq= zI1u0(SSw&n57W7S_CAU@Pt6q1! zk^3t{v0#kw;#7fXjWE%cT%B1lev2x-cqa9Mp4a{RgYYU3IM!tLJ$Krpw0EBfx7(#E z(_WU=h?3G8ItGX?$T`3Dvdfj35~RJg*dOFb%ebIe?>s;(683HEF;CfxSClba5^7mY zD5Wtt_*pCZ(e{#YZj{w+tA?LBb?9KDL}f1HvA+%)xEXvbCktfQgTs|zqeHKnDGemF z0%~?Z84=EJ(%w#eJH}hBH6_ZMj7uTgBOt_s^piVCCIW?ob#+%9Lx4f@+xBjS}E5?o#T=BHI+qg(m1ho>^l!IHfQsLWxHz)A10>N(Xz(loA^ zI`XT&71{&E3Ynk9ir$anMNo=L8AE-l7$~K-S~N3k_@KOl6jN(*&y= z<({gd3HkJuwgr5C$>|a}aoAiQd#yxo`?EH`J~`9E!)SHT%2X0?Fnl&}pd4&Y3uhyj zX~CP8E=!#g@m_Xj>Z=7xjnk$lS?P83DYKDfEm4)CJxl`;r&_#MEyIML3va@NKb5Yx z8ZM5282`}~#pH*{M=Xx?f`t$0!?CdqMn5l%8NHfT;Z49M&I&_DK9nw6ksT`dx(6+3 zdKazc)jUM`oC3$`lRjbwkKvp4%Xg9NE~QF#hmIe>&k|;tp)gYZrBs7K?qN>WJ2t$cM!Z2r&B62U%26bqOq^$*Yqd$?&|0&QWcmG zowf7Nm=ZOuq3QFafLVzX5SRu@cKu;<(5L|*A0w+{(wJ)e`pu_yNA0xI3M{MPl7}(I zG2qKlg6gk@65L1Ow4E=4dFRZK4<7@8~jLu4M3>TQe{D20fPsTy0*K=&Xp3k+QIH*Jo$?@qJ=|d zG_OVdBt5{Q-$g_d@Sf)PcDm^zj7vyo8{p8G1xF_uHQ7=`k3uMK`2>iz_N&d_+T zLPZEE!R|vxR`DkwhqPCzn_$25)#{L$Yv|vo9u0K+teRu1)@OBLD{F7_WiQPeKXP}d zm9(4s)%%a#ymVqG2=Plt!oofdaQx1VD@Kw5EyaTd#X}v`j6W+sdQ1OSe(2-Y#21|c zE1ST3^nS7GVl_>#PIA9xQY zF&F`^6P*Qk>3z~4i%P2X^zEPE2vFPHuAVNPQ-lHUZNgWGCt?ZGQg0-yv^!|0?DF;W z74`5+`bo#72c$Aq4;Xbwa8M2tJINXzn8)ZK=H%$q?-+_%tjl#zRYQnO`j211fe}62 zCAMg@G?(b(OoJJ7`d~e~Ippyay;&e@d-qQs3>|xNj-SZopa|3JJGSlc`PIAUj*2U>Ai;l*SlTkQK z9(VyVJU?@$_o?t%SMla}4=u1Og6ag$JO&16y6%8r*49(RwMMybJ)C26{>`=luU>|f zDjnUcWk7m6Cjtua1P#rLc-2tAaXFen*BVz%JwsBkn|r3-5-h&nl`ez#M^GRnrnz<5 zKsoT?*c}8r`!IbP0ynEuDM?x|E|z>voJ}M_I)($mvdyYVSU*z!a%DfVvrL5ZX_q}d zM;VP(bzV+)#p-rRT|kmpa9w8pHH3P57re3@x_=JSb)6x=X{+&q*H(HnzusO10iSq8 zmZ_f{I0XP_d-6%{@ad^Nz#bo`6>j_&rMesIdT=>TfP#-dGQ#1Vl+bcfY;NJ-JpdQz-9#-R(8ST3SPwmkqde=V%D8co%AWkZH z?@ZUNyM~jDPW(b)?gOv>b!))EKj*cKrS_^STU{%LL)npiy|14( zJ$hPt;h|KceIw8l=s`X{f)*L=RC62+jW~{%B`Cp50cT6C>To?00`mXIGpKSZfd{z* z14aUGxCs7*a2Q|1J8soFZMEbM>}rra$!Ig&F9Ikt>UT4MW2crmZ%<41U6m{urRe;b zm~JB<*CHO}o(1jr3+N+64M2*`=Y=%yBPmp_D%ebz)ZBiUNTp3+$~I{uzwcD}-MVtY znq>Hch3O38d&0I{KYNxfF%62Tg5&)+p}_AF*H>fHKXLGKY;zptZGhy$yOFyXifE(4(VS>aBGf6Zb6Yegu7&b00FD!kcKnJEVxXRT}4r|JPmQ_y=2cJXViqBNY4n7sN>8G$5pNV*tyvY z3o7|srLoSO(Qm)~bkI~CRL)6W%c^nO|1OZ-=S}lj3FX#RnGJ&`2xNCvSNnd(mH1`3 zum6iV^cNIzA|2wCX`d-{4Hc!N(zXJ?p$pkTfq_BY+p7jH9rTO)23#?Qs|K>{nO;H! z=}BZyMb%{lsyxU<7V7%0%r-1$$r4FPBe(41yJ~XBFCS?wp1(2P2t7XkzOucw&)L9* zjnS~C)?vq0uAf!?g{MmRXX~fm&8iY_BP$r$C+@7W!M}bFDa;lRm(8m9@`VORD7%QS zfDC9t6)7D5xeMWl15ACM+DKo4iVoIx-eN5aIh3q6h2QRlPd} zH#9M!A~qINyY^_JL;gYaS&m|>^)8TwueV|r|*ZR@uVReX6etaN|HUplNd% zc5BO~Zr}3ugick+&ON>SNiW}8&r$KXsp{JnOZgE3$oHSgf7e7G%tT8Ms6KwOOY~BA zzOh)6W8V|rUM$+!=5*Yq;QS>i*B6aIY3q*t7sK>XN1F)`#$HKgRr*GGUHOzxr?nTd zkbS#+n9uvrHEP9-G-)Y;Ni^u~InGuME6K*RGoDZ-``zvf-z%pLs`C${FOL;x6`FGP zs3?3D)Vcgd&1%3rLaoQXhoKKD+}?LWDtO$6uXW-722QWUaWBdcoHEJ&N*y z&IkzbMMqkucNrZu8TK9DWwOsvsmwhEb3F*`b5TW?4`x!{efy*#ZzCL`BX^CdEvx~f zrAKhE#2M2y#>db}(l^3hrhP_K-ukXqjhY+LR7&CeWVCJl#;x>MuZ+n(F)w%cF$>`I z&gn4sz8wh-epXSgX+(1I0|~pFghsSjT4E&Ut2M2fP=m{)w*2ZD?D)2yTA?IFq+#-d zwWnG-cDiUrFRLHz5t}HA5p~-d?&EhxJ-?gJOGBg}ntn{Nq$I<@v>z^%ICMSYx#$!J*NF|qoojzyObYTy zaJ*a3hgkq=NQ{F-`rT}JQ#W}(Q=wO^`f)+U=M58&ArSu>aDKNbUC802Q5&}RnbVUH z%zf8@hzj3KWgI8Ce(Q79O1zVd_s7!%$PYg4-G8j4An?snr;6w8cIa{)(Tfy^bl%Ucf ziit02zX#*m@W(-=vuW2_oW|@`+NMdGs#8wG*fXJO!!J`OpEDDj2J`}IK5e{=^;1+!iet1>1Kne*xUuP6{+b*?0~+2sve151w5+mNhJ0rx+rUW#Ro zNDVe*6=l)Fo~*IX#yiWMp*(ri<~kmPc7C~W)jV6v(EO>`X=m^4jNkCkYbrm3NyE=A zUl$s7gmO@s{J6vb@a^3R7G}`8$rNDIjb+ynw*T#7)VOA#UlOL1{A}ffZkPKm* z8dFDYm)Xqcu<5;&g5GV@@lQ=abU)?4<%k!!45EDiS@Rm0rmNp=a?B)EEJ#p9aQS_V z|8EPV^uq$_unv}^;uUVjZtbl1iu9(3qm63<0x>FarPk%deh$KiC&!`k=1rd#c1+|KOdCQp zL%_o;C9Mm-%Q?ei97La}eU+S^)D7Kz8_cD>>Cd*^Y2d+cwRJa`ee3(QF?(x;{2fNc z>hgRPEyefjiD?Sq?_6GR%C_O!L<)~~w5OOs$gHUf$*FM~g(@=T4(DMuJX4jLP3shu zA>kkDih8TT#m4(O=a;fWC+x~(AX=fvupsq6NoBGsi45csU#WcstwFcEj)1qtR_XzE7WC)qj>G8I(NK&@P?7 zP)^4nQwgdKe;O9hBqvCt+9?83(PM@ueKE&~I;G~(i_jyw{S>Ezs)I`TX<$Q>*iXe%rp+ z*YOP#5h*iNRN7rwCx@ExQ`Hamg<*-iE|zGpRz10TzBqMQc~O9XeAKf4&Yoj#VyN(5Q)*=w~k)$kT@xv6j=S!RO{0Gq03<9uZIy0PeT36-Y-i6#ysX zf#c}7`AO~Mb}X;R1lh&2#?Iv3O-zX+*dXnzsbG=p!PNE&yt_qWU5)?rxBaE^t8T81 z=%S#DN8CqGMzcH19T5;+c)h#h#_Fs6I@yZS5i4ypaoZi>U8_8!~`5Og%Q7DdZ?QkLV&KIgDoo@JFptktI*f?N_ef{;zaI@ za5(>a#d?=saVZWqc4DHyD^@kO*?9IE;g35vyNzbPaKm~Sy?tQr6B-)oWMOIPX=3sI zeJ{9pBfDUQOKB+1Ik++uu_o3;sdPG=z|bliak6}=PVz$5Eju|YCo%lAzYS<^K6v}~ z!yS1=M$vx_#B$m%-0T`;x~gmSGW?9Yc&=z4uj^jMD3q7lz^C};+n_u&0HQI zhSXW>f;!fI_p7>TCeUBj6*Bj<^~r?GYCrsIZ~W4YaU8%8`KKhAMn;}Im2p5YWzsA< zwEn{TyKnRFR_AVae<+c#&YStTb>|vBnX_?Gqv~grK&*L+@Fi|j(`$cqi&*t{g!=Dg z^fFm&xing^iR_23cy?M%@XCkmRm#*JumCaD0t#zCxAD;)YUj)uMtj#l-sV20~W6)AOlXjjw79s}#|XZ>0U8XRa*;V3M$FmAeS%JzW3nKS0Dyz^z8LSxbY zxaW^`KM+WiLoFPS=U(gA{laA0aUYK^L!0< zbzxZZquhJd#S4LYrR-m?+t9twfRjYevjHP?{5^01bkqsi-uCQh?m!$ZY;Z|~qci|rqog|o{GZrKNwTvLjx~&g5 zDf4Ah{&q|p2u6XfK9#DuE2!Kr{?_y|+?k`Vs)RUQA4H77IJv$p*Zs9npr*5dq59qA z+*C^H-tVjR2=gg&N2fF)heq=Ej96m3if{lD!YyLr_>$DJ^?w?oU5|J*zpkFVWp;iZ zK2FMnEAxS{(e*ZEKbT+rnnbCa1T+|Qcr>tq%4lG9rr0U!2Bu29oMD^iw-@$MEOiYZ z%hn7x>8J{kU*qGj_We@_4kQyTd`iK+VhDMIdZ^%0IHgrPLi1iojnfp{0nZm=W%>Sh zK7U^DkN9Rv5%8fECNz3~B}KpeIyE3qBe9r`n;ZG}=GZO^g@7$DO2qVC(5jaodhID~PPD*J+!H3jj zk&fPbU{igl)9#0=M@*PCfu`BdS!8eCEprb}%IXsN_}2C8AfluTu?!#T)os|5wFdgg z8>I8_3+-UoIV@hJ$p;Ugsgq!^?$-HoknQXWl$&*bTf~@Zf#mwVE;o9ixo3@kzH1wR zf>AW=?XJOem1gs)Ka)ex<@voDu9@Rg&Zxpoc&^e4H?!`noKauL53F|sE@4X`aXyB1ubAnYy5A zSwp%VVEg|RcOpH~`&5wHaoC6mAQpP0RB|Jy3h4Mfk}eWN2F|f6BU*Y@2Xjs~B2jLR z$L1HZ$OJ1NW{uc!d+ZQfbh$M85w)4fX^5#WFPNOx1!g9gs`$6A{G~T6i~?^Vi&3P# zd-29U=1x?gNyl7>`Q{@>rzbRN6ukSn6!)zTXqd6)9z=%tc6>hA?QX_r*U!Z*AUM|~ zMAoAqGe3oYC&fl))NlDL!W9%e%b;cd^8TE)X;UkcaZ(pE6xRNCpiw~z=-;n-Bz{AX zKvpeOFFBnVSndOkIcJOfZbA4U(g^u#xrEqmCgp&3dvh1ZR&7$G23KKs^?*xH8s7(p zrG=E|{H^6s`hI!a*No&g*V`%f#(2r4kKpJp+^v)r23?-0pYM@%9x9cAXEsil?P-&9 zt8>&}*_oVW=sM+o_$1EAZT^_Oh7HY)xu2G4<+%jpo@k`xT~9OuzjCwl2jY51WszkQ z3(_}M0PwLIt^;?Buk@RU0l#D;IMZSkQFq^(K3rBpRR=yS4J*5b%d_4LT6WlqE}8Qw zlM+^vK4^&5!_#yHcrRt>*NJ$Cw!!K=-_QrDSIz7R?@VaswqxnzJnNeWgpMr|ywLMZJw<}0D11X+I~zpv-$n#oF@-ucE;P1Pi& zK#Y18*IgDvENX2+Q9_k$O{-0z$rthC-AMD2PpTZ@gRkU?gxW>G9+RM!Z=hpx628 zNfw`HP~%}#KE-xwsj#gIp(IXl7xF6y43i|f@hN8^ZbmZQH9XsCF0l>;v4ZRtm-yD+ zTen!IMPCXk__m;aY*lCySj(j8xRv*=Gl~^;{4>MYUX-RlFqIH=@8N*nTZ=)l&Zr_q zT*sbQp%L~kJ7N^`r4rmTCr7tUHw@{P5XWCLItcUp6@?00Y_n5XQ>4L&ZTDX^7LTsFcqqxTScFOV-gR za*W^^mTAy_cyBkHVawmnT)4eZrkDg zjP!j2iX#WuUC};TPk9dA?O;{#gz+yYNAno4E)>1Wo`7Q&2uI5NBp0tMO_KAOT^aet zh7oY%qN(#5SzAVIG5tFN`VqRFJ_By#bZL3=?yo2OkV0Y*3Znr?g#Wp9?0-VDk`dFOQV7MzCPLUM~@yQvWLGrqcMpJ zA2Plk-9bx-PqwKWkQ)q5!mlxiBpUR#15NZCaB_-FqVdezv)s!5TyOz5$o=Jsq+DF6 zoEvS)sJo((8LHywA*hdd%>W=U6|3~dK2X>ao7Y1W_JT%KRfuTJec^=J=E2!?jD90p|zfa0l1ridj!eK>tn zxVAb^JdJy3ygD=JhM)71+XK#OZrz*D12H)=KbuSYFBAE@tK%&iHs0-q<_?ZNwGI{> zROM0T`FV9gw`czEq&d$Dz;KFO(+-U5g=c-T2_H#nNB!jw(f&3Tziwr)e4Thi>nIFu zP?pFPQEL#&r{RcBW=ugBgO(DO18>!mqB%i|zbuhmGUAEXsL3z>r#2j@0hwF&t33L$ zjk%}!rIth7<9kbLpJbJ~12yyOhg{Rm%SH^IIhYdvCD&gTjP<3P7(#ALdF7~viXAQM z5#`+tP~@Q_Jr}74tgc9{x5PVmKe-kD#W>O5sM)Xk5o8La0eecH>e!a8k|J7a$yc$9 z_u~R>t2}uwniqMl#7b+`z1L4a{)JBd+8FHJ6E+~H0u}@ z1zl1HqIo&g@JaEcoKcKUipx8WX^5b5QYK(FAN_&YJ4#$4B2eQ2 zlt9Arsiud$StV~e1Qpf==cBtx*-t~hR3?jaAI0wO!u_Y-2sC0pTqt_&*gy9xEfZGOj3n?F-5Keh`cMFfX$HfR6mro4@E zofRz(^^arG+w&GNsCm24lF<3;Rw|9vXiq0a?a#2`=SRf2L6{_kV%w6 zQBbLB6`FdQSvoGorG$^hAx%=XvD^9jX0-Q9CNlr4uCENMYgx7p?z)2o5AGJ+A-KD{ zJHcV$1b15m*Psh`2u|?e?i$?P-^#t`oSW>kAHVo9*EhRsc2$iYqpI5h=EPF2%&V*$ z?jM)V+om#bdRL|m6EHJER2W2FV=%G>H==BwoW z|6t?)xVq2^Iv9T2d&?hzo!JowIzb>ixLRg2vi|7;KOPqcL-|NMSboF;y^#ewWhIcA zgzuw>(SL0V71Q1n!2t`qZNNb|2uD(jV}hvaV8xFlB=o_Ga(Fd8=6kipNhcM4Bu;s6 z6xz+2Fd@D4pA*P=0dKg}UIk4ANWlYF3IK6^YrgoRZaoyp?&1FP@Jo#$28aA{xt>mg zC6a8RiRRO!WmIN80;Q|k=rhQ9p#XG!i;ERMHrM8wepV%6HI_e`=95kr30 zGEs!wgrBSucyDoM6|%!fwO1_)V(JH`X<=d{est}nm>XR_D6rgolF^Ht>nDA=mE^##Cfgix=ET@{4MM#+Q4w}SIzo< zIKlD%4S!ebpNmHuT-m${C6u(o&CXO+~Wo0UOnO0S0_2jTtWu|J9_(x5rP& z7qX$uCX>d!T~J$;-ynN^LcSla2}k%M!hWa`&o>lWn)T9c_re?&m+##y^H1@Ehb6;E zH_IvunCN`^|m4_4NIR1r|86 z-R}_5Pw3}4YTvjN#>0@#K$i-o^$L2v(1g|dYxo2j>>DO-eIOqtGQ_-brq&Gx-kb`s+3Xtk"+;j`yynWQN<8^a738O9|QH@bo@-0~WjXR<>xnAIajKn8YR@(U zFAh}xmJO_{!3%VD6D?E^>=-8r{xoZgjumDH+2#0J;jB9jfwF70@(6W$OwH~{T~`Qg z8x&u0IyjNYibmquK?0)EK+}SDKlP1OVfwWibe!P@=u)=&;rntZZ@q02&OSkkVw@*RX^VFGaFqTdC-T zn!@1*C>4%zFA{U6I|fL;=&-dj7W0pUJyA3UIk!0cIXj6~KD4$w#wc-L3Ah<7fQ^`i zy%zJEZT_0khWw0rzFkGECyePQJL*pz(eUWpbn}({v$*w9wIyefuvL<_=o@ z)?^%1-u`%}gC7KZ_{_G!%dDld>tWCIFN* ztTe$*T5?M4yKnd<^%WTtAHVm2 zN)GXnSa`n?Cb$jZL#BY&1`(5jUKj*}9rqgt9bzP=^FK%>a6m18>)1qEqJ9&V`76{o zB0(%=Gu3zaKDYSLQB(W>;-Z4$gk&7|v1gJ$Eqxx=VkJ~u#hov(+DL~!PIZoM0%4mm z9cP)c>M5IL=DO2ixYlSWdgNUElv<^1jBl(`rIDcAPmHQ^`ouPnjtV{;Pv&CvIZzNbr`^FUi5`F&Zx3;9I{)?b5M zc);+v#rRNbVYa5`7(Ybv*h`w~URIm^_Ory)1vY1io{xH)(Rk^N59N^(A*LckS&ZG% zbS}|cWd$~hc5*%XBX>PI&!3#HVmV~y;==-tkp@!D61I^BK&NV`p>j5+>Vg#pm3XY! zS(r{9js9{A43U<#{mDS~cD)3DpQht2%)#cZ25k8WxJeZ7XVmyNL{t<3?=Ub)`2Od< z=l`-|)8jAH@I2u=xXUk@+)fbD|a|lgb&jg>SBV0A(r6bPprKm`lpQ@cz2Ho9>4YX{!aOS zTkB67zQqCqpkmnAzimc;JzSg)Nl8}2#u}Gt_qoJg00N*V;_rY)57DiHxQqqiOgsB@ zXp!N3-F2$(fqP=++I@v2a8Hj={(#&&E){R7x_93QWF9IRxgyB;qL`K?}(d(+S zrJo`AGy(nBVe{)EGKWBYwWIu#@)V_#dlq*o* zn$JGZ3(gh7wj5#sHPBAVG3yyEp2zezX1a8A_#~Cw47^$*>?o%`m>ls)cjuiD8J10N zIN<--4UFeN$AHrEU_ictG?;5o0K#^yON^iVIAIDe=aj}V+jDr4pfAB+@Bs~@SB;cB zL-FdrJd9egqLck8BMwC`{SCCfteCL~;zMKenEs~Akixw0I(pm2)Yx^q)i$)9$5-q3N+l~c*_&z3W6>diVB8( z6VUtpmD~eU>>`ehM0axjp?s&l-r0~YmI=|Bg9}1ilzZpnJ(lk52^}Z*IS5PAz z`@yIbaCr;a@o>NU4w%2jU?%DeWT(Oq*w;fQHY8O0dMmtFJop93f;8A+P685rUwGVhxyO8Hsw52^AWO%A#f!{A3dmn%&RfMqSW$Tb}Fy;Px>8~ZCLQ!gxd z)@LdsYlUPCdl07OdeN46HshBQEV!%pUrctuX^^!)Gb|I_PE}%{S*w^#&a;V&!go*8p|Y%#)=o^4*K|E2)`k> z?h9DCI=~)~7q5BhIwW|&fBLBp<#>Y|qfKRKL1Fj3g?P$QemAB;-~4C^Al=P9+o?M0 zOaDxXAVJ|aH9JPqm9Lu7j>@(2w!S5V(5BJ2e}llI?n2x-rA+c^pQ<;j#q*=a1(4cS zK4G9e1x}lT!)PsbshV=*t)Xo9U+tUsP}B|cY0~OU$-zi`=J;;7w)Wv-Mm{l;a1y~ zcNc2spMJO@j6!t0a7tH{`8Ex!4iY@o+0hxBL8oz3;Y*+u8D6g1ez?618BV76?qGox z4FQIJ1@!>z(ZOvbIN z;X0#&IZ5kO!gD2`z*}aD2i$g|I>zrkjtyc`Cm8-1le)ke`$6pIabR@i$3Q@yfJ(OeH%TA%FI3966OHW{X&(};}w5@vq z)(^C6QIPxnez80Go^x<#%VcOK^K4KU^ed843Jvbp0Y*LBS`S9sWWG)eI*_Kfn}bHT zL)2`94R~rk;^;I;Ur&giz;`z79R#kEj%~p- zUv(Rp=UGU;5y|$2?Q-%ZeTw0&x3oyx-q zgGygBwu|i^jb|mFxO4BXQ5+?jOw(*4OxLO)TxXS>K**x1+opG!}Q&@^0-Zn_GI z+j|xIy2F6wqum*E6wF_H98MDb!mA49pNS->xaC)C3|?v)L;*UaK6ElVtSu#Pz_%|L z9B!Ud4ofooY$)$BVonX!&T5cc!)fmx?^x+gbbVJZa&2RzQp+xImJ-~6S~%Lb=3um; zBC4tsUIUd(Tb2uXO12cfKsQ;2KK+RaKfnh>4k$yA-uIv6(HIR9klzV}R+ZIcNw4`* z>k9Y6`8*E2p|-0Dd2&1s0nS!3KNJF`5j!R%wZi?1ofAJ+c)2B$0D&1B`-s~^g%q_? z0F&Gys$A%jClfvf9V6>#-I=Uuj2FWVcScSND}}?*cf%Ak29H{rpa5buK1vgTsIS9Y zxdIJ^UHmMC4uI%!4=&i(WjAr&lb7k*y;GA%O6})vU_&hihc$_^h8WpQ5gR2xRv@US zH9l?*)=1BrZWdunm|i;>z9Y1og}(S~PFqbGBtIqmt%DB(E!vAHm*QoMnJA)9&~KnC zE+tD$al--d{h@35T7P{g{;i#~L6QA!w}P(%BDrju`v$Hrk2f}8On~(tynbJO0*tG(yRqn`x6El0$_OMP@|4K2YvLj$CT^B&mqT8|HGg}h z+-^URDheg)>nYEu7t$UrQO#flmM zqfZs#Dvjhohv+kik24g33&$_MC-b@w_0gd%LtT0fX=f5~O@G@G;{ht$F=1*sk~&c^G>V{)P#yP`d~JCreQ*$yd@6U6VUVaZiIBpB=-voGrw zp~^Q5l=7!s4HlIn@7qKca*Clxm~I+D;V_$=`XWf;X>Ux7SHPp5M8vHF&eMJMHfUJG zYk;b7f)-yC2!xK}RR-7!jhyR1BKC52OP*41U+6jdo&)I$3CLgEd0Dqt<>D>Fr^|#i zF4fD&m$@adO$9;Uztl~9ZWx+g9f$P2z}c81T>A83_gzKCVys+Eg=$FD=;UIHFSgQ> zpKuI|&SFH*C%pM-nqt?9ceEb5tQlqu_Lk8%m>v(V?wG72(d)(n!GwYX#>Z5qJSKQz zbqO%QoTdA%{iae#lRt?&p=X?Nn01QO?v$q)dT(l^lHGTgMnm#q(@`b!3}gi%g43`s z&#Er8@3KKlk;@s83AaAp?*mG49^S@yw3tvoy2tgw`=~$Env=Q}4BWOoMb1ADx_oOh zOfe&$VR$z*6jvWnJHt#$N#QtkyR>9Wvq((jtnD$O~5w8Jh;Yoi`zs zT)_%r7_=bipks}YkBzwvHnwcMVVyl@RHOmR<=E9+`$&%qK-V~#7gX;scc-EX~c2yQ(_nOHux3c$ZO@nZVL$?a5! zq~hbh%l(w@>p@QTZjCrWY|^Zj0;dsEG#dGKz)MS_>a^%s^D1%M$yLmxgvvw#)2T(k zICHj0`q6M8P6%|*A%?9LTcf)BGYI3EC#PC|^^J$yUmP;LuROL^WoC+;$f%C}m7xq; z41(9pNng^6vgCpjr71IQ$eLZM@63+xms#$@D+YjKKaZc8J&g8x0)(_fR&qRqxt*;d zfRk>Mqk3EpUbwNYRnT(|L+-6O+kzU`l|&Tg!fWaC3AX;@4tk)GrJDbe`Kg; zUwk+9{xw38-Rk?6Cq15@61GHk&>j}>5yONG1H;%~R#quDYO`doS!d&jj@_tWZ=l$C z7xPgu2u<~Z_*_GlmjkAjs>8b3|INtV8Mj@MMm4LGM&?pN%C}T>gYwS3H4BrTmWf#< zqlQ)#=Tk>fWiz5S5+AtLR|T)?Jn-3oM$9)x_lz<*C01-2x-FJ?7C7TNg^R93y%MaM zjAP9(eFK~3a%S&VC0J3$eDw<&R9f5n4xXFg_ZIPPIYzr~TPNdpr<4kxU4@ShqUW8p zLK)jmLpx{)*ZRt=!o85e$$8GcdjqJ)GJT4ON=_(tz|MKKzeL!^^V8&->JyjQnYgBc zpeZ3=*ymcxE4&vz?}U!NzHQw*Xt-PjBsSv)!jN7}bVXaQ9Oxp{BO3i({srJ}JUFGg zhwOgO50e@d9?$O?U#rtAge#?q+!#m_Ae{6x8TWT%CX(-sm8c-yW6_datlaZM5F^S8 zbrt`m2%p&bDb(N2(UX;2TwGh)Qt!Bn&wgrk`T>m-1PEW(IJd_t6Q$dtzs5pKS&-hw zb0#OSX}WK(XUHrAY-p=Ch|E+qUgbya0&o6LQWg@|TWD}jiGoM4)u>+Gp)|Jbbs_IU zlgY#G;%TZgc9lFqLa4s`WPlAx1R&6}OWdZ@mBE9Nr!saPA>D&|G!b&g^8SM@?_9x9 zT#HN_)>iyOR6hJ-XOOC|KUj-qM%&uNZ6K~ZNKKK+w!AC@+Q^q4^hxw~4=l?yfBCd% z`q^u+c~w!`V8}PZ>GVSbBcFkNA*=n1)78iC9r(#g8ghEGee9}*EL0usd#5_&l+^h} z?@w$#6W{7Us?$oc|6DNgC`qB9O>NN-SCtZ79A~`G0v($PNme@pB%IKhgvmWtf~rn3 z*WDe^kP(xZ4lNYc9Z!_(>Jk-VUvQ_tk_EN|Z`?md#1=aSLh-omhco^t$ORHo81B$@ z<>fD0R-K?-ced47x@1?4TGAeWry}3zG@1cM#T@_yA$e{(zZ5Ml0hB#*T1(`Y_+M9z zYV6g~MILWLI&{AoCs@he&_vGS$<Gg7FGo{w<~pn zv#&1Nnb4arRLITMn)b?(Opp7cDCnw39%7*z89VZ$#~AI5 z;+WK|&2_C*J`Y)oN8amlkw&&>QzwX3%5keE9-SO3a@BNBsfaO9D5}1^_hm3?SO_TcEB$<^LN^z)K?+#zZSN4SCpXVT5o8;V|(`hh)1%D!(~&C)(QFC5h>i;DD92Hb;wlHFRW! z6&@%$seX#5us=>oAvdTNy3~cT;6xDGWEdzZm>Q^3cYhiO!xEs$@ zSHd05Ys5D>0hW#2bI9=lfTOTTHET*kU^@^^w0o#kyXn0m{Al`SIK&E%@oOR|bL-z4fqX!SwcsN(~{(VZgLp~~Sk?v8!8sDzdBUPj|+)ybK1t#JeUB)4~@gm@@qOxlEf&dzICjXqglQW>TD| z(epP7SXBw}TECUjMf1gZ3kW@&=ebqd+CeS@tR`17;k5BtQM;0YvnkOLx@(04;c;>n@t8( zNCzI=-y63tf5vrH2wtt=?N(Di)UY|meW%m@;#uzqH)*DtD0_&<=0@WCIF9#p82XoH z`w;8S`1%qN*@+El7rm8@9X;w(4u_3TjdOK{3`OXTDrj_~{pPR%3WgSH5F{1dZ5=?0 zcE4FmJX!6P9Q9LK3Ok7S23|r-i}@}Q(p5r;N##V<$x8Juq_1_X5t%0wIxDNo=fa$| zzE4fX9f3AERoif!ZS1`)z$VRGDk(VkIMeksYOQ@4@8E|q%qT2w1Sk)ieCo`$M6Jdh!d!;GADRG$dDQW% zxi_G+ELXw=9y~@Q6){SQaK~r-J#6X^5dRRO4)XjF7eDlN%IQ6UN=wI39Bj4J2CIp{ zV#^ES-pYCzKlsZ>ke`arCQ{lj1|Z^J->u!_;uK3LPs8DI`=aKN!(*Lq$|3`8?0Who zNu(xcT)w@IaXqS90{B@UtUK|0>RJ+v=Zt+pNy$#EZ&h1oZ-NE4R>IuCrH9Ztu$g#%hB`@%XfW0a*U6lSx8hdc-|{$o;%9VTP0ctgz4{;8!IgKX#m9vRU<|G+(~_ z5RlVCo9UJg-EVUE)u>qLM%v|z*njG8{U?*AnEtzJ+$9 z&V${x7Os4HQN7_BG@T_}rn5gY@;t(}Yh9R2Ya2WTRfe9Z_M7p3Q`=Od!7U1ETLapE zoA$pRDOJo#n1cGjg^nNnC5hl|@hDeo9^h4Cydx7}G&e$3KjM!gAg2oX0pk&VNdU_-P3K#fXJGb4t4(n&}*Tu8Q`BTubOwv@Y znjyOQ6`C-Gk*Wq*BKa>>6)caQDCQ`Wm0zIt8%IKe(%{_tsw70wb2>u!Sy~P07x7m3 z_r?jhl3m`WfacJs%=3g!L$Gn&Ozs<8a<2JtSxMku282f*EHe_G{W!=slcWMQV{dwM zDps44Jm2b|n#rJ;<5un%$Aa%^@X^l6SBQV3<+(E=alVj(S;bn$1IPiW{58p#=6I49 zVVK#Oc0IW|BfhuF3%#<$(Or@hbZ5I8o~O`l@=wC7P{6xi%}mm}GmyErE3p_pqU&>g z_*t-o+cR%CUE5?h1=k<&$TQR$Ee9sC`SP-3cU2R3Zi<|Jt9sG5=gfXAVuvjx;*>0}7_dZSz^-2J2?B z`E1;6dwU5FB4(fKY#8B+hKsg~OyjC!4$3o?c0DOFx{PD7#`=+O3dLhEs-qairdmu6 zpFV#2a~JAu1KlUJ%od=EeDZ}*oR6V8(w&qctz5cKv2RmuVr*$o0uOA{M!)TG;W6gz zABg*Zy%oG{+3CTZUNgC`C!GPcqwoM}ai+l!Z8DD?eUsTTNLL=~0i*VsK6`H(Ooz9H zvq_*Oza98%U9>cGewi?GWKYfQ!8=+@4FAc%T5Ye#vkb+%)yNt#oWmP5lifSeE3{Nh zOZaWNxFTVY{Lt`OQJlM6hg&lFrzlG4I$nXnn~bMz#nzNaHmAyDH?#phXEpmK?b!q6 zh17puq}IAQzvKhes{U$>w0BocNkp;Ntxh|EcsO+=isu%VGi`*(_uO1Avr*$GnRV%e zP;CJ=7H7w!qL>7%n*&+=VRAfC&dU111u0oEcjDJcUv0b+3=N?4(rTr}Kinzz6PW@UWSX0mY&^(<)kJKKB{<-5Zz){X6*&^6QpU2~Ohe<~3Fj%td} zkf@yGY87~%>Dd$TR2uG0165!7Okze#YYA{F6#{i+@;-4CQ@xBg`kd?hw7C!$N^C=2 z`T?ne3MOQjaaH4FE+jjLoNR}c9@?j!MybxP8>!GgFe4Mz)A&=JEl_=Gn$CsOM>(`C zAGn}*)Li7TY1GJSK9TLb*_HWEqod&xE7SHFTML^xu<$=i z6`YQmArAoYl_|U#85u|5JV0if9uyR$zS_Xl$hr#R2xz%`u2;6v)`E7$l&q<=M@@O( z&$02%g!gRhbkYnlhe*^52(MWp%QL4Oq$KZkZn3x2Lcs<}~*T^lSr_&Kr1g z7@o5@j&<`Z7yo95fBm}-giO{Bdj{6CLj4YxfAgLbp&V@q?G@n;%_K+^@tjWEJ}ggC z;dXi={e`*rA8B1fEt*b4Ov*v3pspNsx@nGid?Zc~zt!DqdqDPg;q z7*t0`$E0YaY7L<71otrHZM5FCBj!{H5Vy|SGMg*AQ5~V!f9C5l9dlDlo|K8kBk`s7 z%%JviYMyY}#VV0zByqs6+Qt72Qm766%=*9_O}nHKesPtc_y$>9?S)Kz&GSMQX7RSK z&^{VpcRgYXite?wC*f_A2?Tq$Gz>^rFXPy6;Iv6u{lD_rwTKYR)AX&_b(@lppRHv$ zxYh3_{L<4V**^_)FK^esU;8?@itUdnf)5o)^?z6`ZWrXJ>&;OUeeAveRxd47Ze)f} vt5e3)H~Md9`S;6&%E62uKK|yrfmh{up literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/users-and-permissions/roles-for-report.png b/erpnext/docs/assets/img/users-and-permissions/roles-for-report.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8fd4e6824afae55f74da3f6794c07ba05785cc GIT binary patch literal 80523 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

2<-?oVm=2_R`jo_-_ceqz7C* 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/user/manual/en/accounts/point-of-sale-pos-invoice.md b/erpnext/docs/user/manual/en/accounts/point-of-sale-pos-invoice.md index 64fa22c5b8..0c7e591c33 100644 --- a/erpnext/docs/user/manual/en/accounts/point-of-sale-pos-invoice.md +++ b/erpnext/docs/user/manual/en/accounts/point-of-sale-pos-invoice.md @@ -27,7 +27,7 @@ In ERPNext all Sales and Purchase transactions, like Sales Invoice, Quotation, S ### Customer -You can select one of the existing Customer from the Customer master. If Customer doesn't exist in the Customer master, enter Customer Name in the POS Invoice view itself. On creation of POS Invoice, Customer will be auto-created in the Customer master. +In POS, user can select the existing customer during making an order or create the new customer. This features works in the offline mode also. User can also add the customer details like contact number, address details etc on the form. The customer which has been created from the POS will be synced when the internet connection is active. POS Customer @@ -105,4 +105,9 @@ Credits: To see entries after “Submit”, click on “View Ledger”. +### Email +User can send email from the POS, after submission of an order, user has to click on menu > email +POS Payment +After sync of an order, email sent to the customer with the print of the bill in the attachment + {next} diff --git a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/index.txt b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/index.txt index b00f32ad32..74243df520 100644 --- a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/index.txt +++ b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/index.txt @@ -1,4 +1,5 @@ adding-users role-based-permissions user-permissions +role-permisison-for-page-and-report sharing diff --git a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md new file mode 100644 index 0000000000..dff5c0cd1a --- /dev/null +++ b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md @@ -0,0 +1,25 @@ +# Role Permission for Page and Report + +In ERPNext, user can make his custom UI using page and the custom report using report builder or query report. ERPNext has role based permission system where user can assign roles to the user and sames roles can assign to the page and report to access them. + +If user has enbaled the developer mode then, they can add the roles in the table of page and report. With this user can transfer the roles of page and report to the production server from the develop server. + +### For Page +Assign roles to the page + +### For Report +Assign roles to the report + +## Tool for custom roles assignment + +If developer mode is disabled then user can assign the roles to the page, report using tool Role Permission for Page and Report. The changes can be apply only for the respective database, it not make changes in the code base. + +To access, goto Setup > Permissions > Role Permission for Page and Report + +Tools to assign custom roles to the page + +### Reset to defaults + +Using reset to defaults button, user can remove the custom roles applied on the page or report and set the roles which has been alredy available on the respective page or report. + +Reset the default roles From cc8b2b2fdbd987aa960605079cfc2cd1b0bae64d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 12:44:29 +0530 Subject: [PATCH 009/287] [fix] [refactor] demo for v8 and remove purchase common --- erpnext/__init__.py | 8 + erpnext/accounts/doctype/gl_entry/gl_entry.py | 13 +- .../doctype/journal_entry/journal_entry.py | 21 +- .../purchase_invoice/purchase_invoice.py | 9 +- .../doctype/shipping_rule/shipping_rule.py | 5 +- erpnext/accounts/party.py | 7 - .../report/gross_profit/gross_profit.py | 15 +- .../buying/doctype/purchase_common/README.md | 1 - .../doctype/purchase_common/__init__.py | 1 - .../purchase_common/purchase_common.js | 372 ------------------ .../purchase_common/purchase_common.json | 26 -- .../purchase_common/purchase_common.py | 105 ----- .../doctype/purchase_order/purchase_order.py | 24 +- .../request_for_quotation.py | 36 +- .../supplier_quotation/supplier_quotation.py | 8 +- erpnext/buying/utils.py | 80 ++++ erpnext/controllers/accounts_controller.py | 6 +- erpnext/controllers/buying_controller.py | 15 +- erpnext/controllers/selling_controller.py | 8 +- erpnext/controllers/stock_controller.py | 30 +- erpnext/controllers/taxes_and_totals.py | 7 +- .../crm/doctype/opportunity/opportunity.py | 7 +- erpnext/demo/setup/setup_data.py | 4 + erpnext/demo/user/hr.py | 10 +- erpnext/hr/doctype/salary_slip/salary_slip.py | 11 +- erpnext/patches.txt | 3 +- erpnext/setup/doctype/company/company.py | 6 +- erpnext/setup/setup_wizard/setup_wizard.py | 2 + erpnext/setup/utils.py | 11 +- .../material_request/material_request.py | 11 +- .../purchase_receipt/purchase_receipt.py | 24 +- erpnext/stock/stock_ledger.py | 30 +- 32 files changed, 233 insertions(+), 683 deletions(-) delete mode 100644 erpnext/buying/doctype/purchase_common/README.md delete mode 100644 erpnext/buying/doctype/purchase_common/__init__.py delete mode 100644 erpnext/buying/doctype/purchase_common/purchase_common.js delete mode 100644 erpnext/buying/doctype/purchase_common/purchase_common.json delete mode 100644 erpnext/buying/doctype/purchase_common/purchase_common.py create mode 100644 erpnext/buying/utils.py diff --git a/erpnext/__init__.py b/erpnext/__init__.py index ce9a142fd1..95c8a309a9 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -25,6 +25,14 @@ def get_default_currency(): if company: return frappe.db.get_value('Company', company, 'default_currency') +def get_company_currency(company): + '''Returns the default company currency''' + if not frappe.flags.company_currency: + frappe.flags.company_currency = {} + if not company in frappe.flags.company_currency: + frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency') + return frappe.flags.company_currency[company] + def set_perpetual_inventory(enable=1): accounts_settings = frappe.get_doc("Accounts Settings") accounts_settings.auto_accounting_for_stock = enable diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index ce60298c17..304af37308 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -2,13 +2,12 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _ from frappe.utils import flt, fmt_money, getdate, formatdate from frappe.model.document import Document from erpnext.accounts.party import validate_party_gle_currency, validate_party_frozen_disabled from erpnext.accounts.utils import get_account_currency -from erpnext.setup.doctype.company.company import get_company_currency from erpnext.accounts.utils import get_fiscal_year from erpnext.exceptions import InvalidAccountCurrency @@ -19,7 +18,7 @@ class GLEntry(Document): self.flags.ignore_submit_comment = True self.check_mandatory() self.validate_and_set_fiscal_year() - + if not self.flags.from_repost: self.pl_must_have_cost_center() self.check_pl_account() @@ -32,7 +31,7 @@ class GLEntry(Document): if not from_repost: self.validate_account_details(adv_adj) check_freezing_date(self.posting_date, adv_adj) - + validate_frozen_account(self.account, adv_adj) validate_balance_type(self.account, adv_adj) @@ -56,7 +55,7 @@ class GLEntry(Document): elif account_type == "Payable": frappe.throw(_("{0} {1}: Supplier is required against Payable account {2}") .format(self.voucher_type, self.voucher_no, self.account)) - + # Zero value transaction is not allowed if not (flt(self.debit) or flt(self.credit)): frappe.throw(_("{0} {1}: Either debit or credit amount is required for {2}") @@ -116,7 +115,7 @@ class GLEntry(Document): validate_party_frozen_disabled(self.party_type, self.party) def validate_currency(self): - company_currency = get_company_currency(self.company) + company_currency = erpnext.get_company_currency(self.company) account_currency = get_account_currency(self.account) if not self.account_currency: @@ -124,7 +123,7 @@ class GLEntry(Document): if account_currency != self.account_currency: frappe.throw(_("{0} {1}: Accounting Entry for {2} can only be made in currency: {3}") - .format(self.voucher_type, self.voucher_no, self.account, + .format(self.voucher_type, self.voucher_no, self.account, (account_currency or company_currency)), InvalidAccountCurrency) if self.party_type and self.party: diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 06724b1cfc..a471c48c57 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -2,12 +2,11 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe, json +import frappe, erpnext, json from frappe.utils import cstr, flt, fmt_money, formatdate from frappe import msgprint, _, scrub from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.utils import get_balance_on, get_account_currency -from erpnext.setup.utils import get_company_currency from erpnext.accounts.party import get_party_account from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount from erpnext.hr.doctype.employee_loan.employee_loan import update_disbursement_status @@ -325,11 +324,11 @@ class JournalEntry(AccountsController): if d.account_currency == self.company_currency: d.exchange_rate = 1 elif not d.exchange_rate or d.exchange_rate == 1 or \ - (d.reference_type in ("Sales Invoice", "Purchase Invoice") + (d.reference_type in ("Sales Invoice", "Purchase Invoice") and d.reference_name and self.posting_date): - + # Modified to include the posting date for which to retreive the exchange rate - d.exchange_rate = get_exchange_rate(self.posting_date, d.account, d.account_currency, + d.exchange_rate = get_exchange_rate(self.posting_date, d.account, d.account_currency, self.company, d.reference_type, d.reference_name, d.debit, d.credit, d.exchange_rate) if not d.exchange_rate: @@ -656,7 +655,7 @@ def get_payment_entry(ref_doc, args): if args.get("party_account"): # Modified to include the posting date for which the exchange rate is required. # Assumed to be the posting date in the reference document - exchange_rate = get_exchange_rate(ref_doc.get("posting_date") or ref_doc.get("transaction_date"), + exchange_rate = get_exchange_rate(ref_doc.get("posting_date") or ref_doc.get("transaction_date"), args.get("party_account"), args.get("party_account_currency"), ref_doc.company, ref_doc.doctype, ref_doc.name) @@ -692,8 +691,8 @@ def get_payment_entry(ref_doc, args): bank_row.update(bank_account) # Modified to include the posting date for which the exchange rate is required. # Assumed to be the posting date of the reference date - bank_row.exchange_rate = get_exchange_rate(ref_doc.get("posting_date") - or ref_doc.get("transaction_date"), bank_account["account"], + bank_row.exchange_rate = get_exchange_rate(ref_doc.get("posting_date") + or ref_doc.get("transaction_date"), bank_account["account"], bank_account["account_currency"], ref_doc.company) bank_row.cost_center = cost_center @@ -746,7 +745,7 @@ def get_outstanding(args): if isinstance(args, basestring): args = json.loads(args) - company_currency = get_company_currency(args.get("company")) + company_currency = erpnext.get_company_currency(args.get("company")) if args.get("doctype") == "Journal Entry": condition = " and party=%(party)s" if args.get("party") else "" @@ -805,7 +804,7 @@ def get_account_balance_and_party_type(account, date, company, debit=None, credi if not frappe.has_permission("Account"): frappe.msgprint(_("No Permission"), raise_exception=1) - company_currency = get_company_currency(company) + company_currency = erpnext.get_company_currency(company) account_details = frappe.db.get_value("Account", account, ["account_type", "account_currency"], as_dict=1) if not account_details: @@ -853,7 +852,7 @@ def get_exchange_rate(posting_date, account=None, account_currency=None, company if not account_currency: account_currency = account_details.account_currency - company_currency = get_company_currency(company) + company_currency = erpnext.get_company_currency(company) if account_currency != company_currency: if reference_type in ("Sales Invoice", "Purchase Invoice") and reference_name: diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index dd3b4ba3c9..1972cc9da9 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -2,10 +2,9 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe.utils import cint, formatdate, flt, getdate from frappe import _, throw -from erpnext.setup.utils import get_company_currency import frappe.defaults from erpnext.controllers.buying_controller import BuyingController @@ -15,6 +14,7 @@ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import update_bille from erpnext.controllers.stock_controller import get_warehouse_account from erpnext.accounts.general_ledger import make_gl_entries, merge_similar_entries, delete_gl_entries from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt +from erpnext.buying.utils import check_for_closed_status form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -93,7 +93,7 @@ class PurchaseInvoice(BuyingController): super(PurchaseInvoice, self).set_missing_values(for_validate) def check_conversion_rate(self): - default_currency = get_company_currency(self.company) + default_currency = erpnext.get_company_currency(self.company) if not default_currency: throw(_('Please enter default currency in Company Master')) if (self.currency == default_currency and flt(self.conversion_rate) != 1.00) or not self.conversion_rate or (self.currency != default_currency and flt(self.conversion_rate) == 1.00): @@ -113,12 +113,11 @@ class PurchaseInvoice(BuyingController): def check_for_closed_status(self): check_list = [] - pc_obj = frappe.get_doc('Purchase Common') for d in self.get('items'): if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt: check_list.append(d.purchase_order) - pc_obj.check_for_closed_status('Purchase Order', d.purchase_order) + check_for_closed_status('Purchase Order', d.purchase_order) def validate_with_previous_doc(self): super(PurchaseInvoice, self).validate_with_previous_doc({ diff --git a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py index 80e4fb7415..7faaf11cef 100644 --- a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +++ b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py @@ -4,11 +4,10 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _, msgprint, throw from frappe.utils import flt, fmt_money from frappe.model.document import Document -from erpnext.setup.utils import get_company_currency class OverlappingConditionError(frappe.ValidationError): pass class FromGreaterThanToError(frappe.ValidationError): pass @@ -77,7 +76,7 @@ class ShippingRule(Document): overlaps.append([d1, d2]) if overlaps: - company_currency = get_company_currency(self.company) + company_currency = erpnext.get_company_currency(self.company) msgprint(_("Overlapping conditions found between:")) messages = [] for d1, d2 in overlaps: diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 8aedf78fef..f4c5c4d25c 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -151,13 +151,6 @@ def set_account_and_due_date(party, account, party_type, company, posting_date, } return out -def get_company_currency(): - company_currency = frappe._dict() - for d in frappe.get_all("Company", fields=["name", "default_currency"]): - company_currency.setdefault(d.name, d.default_currency) - - return company_currency - @frappe.whitelist() def get_party_account(party_type, party, company): """Returns the account for the given `party`. diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 48c6d9a8ab..9c5d56ee3c 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -12,7 +12,7 @@ from frappe.utils import flt def execute(filters=None): if not filters: filters = frappe._dict() - company_currency = frappe.db.get_value("Company", filters.company, "default_currency") + filters.currency = frappe.db.get_value("Company", filters.company, "default_currency") gross_profit_data = GrossProfitGenerator(filters) @@ -50,7 +50,7 @@ def execute(filters=None): for col in group_wise_columns.get(scrub(filters.group_by)): row.append(src.get(col)) - row.append(company_currency) + row.append(filters.currency) data.append(row) return columns, data @@ -224,7 +224,8 @@ class GrossProfitGenerator(object): else: average_buying_rate = get_incoming_rate(row) if not average_buying_rate: - average_buying_rate = get_valuation_rate(item_code, row.warehouse, allow_zero_rate=True) + average_buying_rate = get_valuation_rate(item_code, row.warehouse, + allow_zero_rate=True, currency=self.filters.currency) self.average_buying_rate[item_code] = average_buying_rate return self.average_buying_rate[item_code] @@ -235,7 +236,7 @@ class GrossProfitGenerator(object): select (a.base_rate / a.conversion_factor) from `tabPurchase Invoice Item` a where a.item_code = %s and a.docstatus=1 - and modified <= %s + and modified <= %s order by a.modified desc limit 1""", (item_code,self.filters.to_date)) else: last_purchase_rate = frappe.db.sql(""" @@ -253,7 +254,7 @@ class GrossProfitGenerator(object): conditions += " and posting_date >= %(from_date)s" if self.filters.to_date: conditions += " and posting_date <= %(to_date)s" - + if self.filters.group_by=="Sales Person": sales_person_cols = ", sales.sales_person, sales.allocated_amount, sales.incentives" sales_team_table = "left join `tabSales Team` sales on sales.parent = `tabSales Invoice`.name" @@ -269,7 +270,7 @@ class GrossProfitGenerator(object): `tabSales Invoice Item`.dn_detail, `tabSales Invoice Item`.delivery_note, `tabSales Invoice Item`.stock_qty as qty, `tabSales Invoice Item`.base_net_rate, `tabSales Invoice Item`.base_net_amount, `tabSales Invoice Item`.name as "item_row" {sales_person_cols} - from + from `tabSales Invoice` inner join `tabSales Invoice Item` on `tabSales Invoice Item`.parent = `tabSales Invoice`.name {sales_team_table} @@ -277,7 +278,7 @@ class GrossProfitGenerator(object): `tabSales Invoice`.docstatus = 1 and `tabSales Invoice`.is_return != 1 {conditions} {match_cond} order by `tabSales Invoice`.posting_date desc, `tabSales Invoice`.posting_time desc""" - .format(conditions=conditions, sales_person_cols=sales_person_cols, + .format(conditions=conditions, sales_person_cols=sales_person_cols, sales_team_table=sales_team_table, match_cond = get_match_cond('Sales Invoice')), self.filters, as_dict=1) def load_stock_ledger_entries(self): diff --git a/erpnext/buying/doctype/purchase_common/README.md b/erpnext/buying/doctype/purchase_common/README.md deleted file mode 100644 index bedec2a0e4..0000000000 --- a/erpnext/buying/doctype/purchase_common/README.md +++ /dev/null @@ -1 +0,0 @@ -Common scripts for purchase transactions. \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_common/__init__.py b/erpnext/buying/doctype/purchase_common/__init__.py deleted file mode 100644 index baffc48825..0000000000 --- a/erpnext/buying/doctype/purchase_common/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js deleted file mode 100644 index 6867dd0d5f..0000000000 --- a/erpnext/buying/doctype/purchase_common/purchase_common.js +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.provide("erpnext.buying"); - -cur_frm.cscript.tax_table = "Purchase Taxes and Charges"; - -{% include 'erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js' %} - -cur_frm.email_field = "contact_email"; - -erpnext.buying.BuyingController = erpnext.TransactionController.extend({ - setup: function() { - this._super(); - }, - - onload: function() { - this.setup_queries(); - this._super(); - - if(this.frm.get_field('shipping_address')) { - this.frm.set_query("shipping_address", function(){ - if(me.frm.doc.customer){ - return { - query: 'frappe.geo.doctype.address.address.address_query', - filters: { link_doctype: 'Customer', link_name: me.frm.doc.customer } - }; - } else - return erpnext.queries.company_address_query(me.frm.doc) - }); - } - }, - - setup_queries: function() { - var me = this; - - if(this.frm.fields_dict.buying_price_list) { - this.frm.set_query("buying_price_list", function() { - return{ - filters: { 'buying': 1 } - } - }); - } - - me.frm.set_query('supplier', erpnext.queries.supplier); - me.frm.set_query('contact_person', erpnext.queries.contact_query); - me.frm.set_query('supplier_address', erpnext.queries.address_query); - - if(this.frm.fields_dict.supplier) { - this.frm.set_query("supplier", function() { - return{ query: "erpnext.controllers.queries.supplier_query" }}); - } - - this.frm.set_query("item_code", "items", function() { - if(me.frm.doc.is_subcontracted == "Yes") { - return{ - query: "erpnext.controllers.queries.item_query", - filters:{ 'is_sub_contracted_item': 1 } - } - } else { - return{ - query: "erpnext.controllers.queries.item_query", - filters: {'is_purchase_item': 1} - } - } - }); - }, - - refresh: function(doc) { - frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'supplier', doctype: 'Supplier'}; - - this.frm.toggle_display("supplier_name", - (this.frm.doc.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier)); - - if(this.frm.doc.docstatus==0 && - (this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) { - this.set_from_product_bundle(); - } - - this._super(); - }, - - supplier: function() { - var me = this; - erpnext.utils.get_party_details(this.frm, null, null, function(){me.apply_pricing_rule()}); - }, - - supplier_address: function() { - erpnext.utils.get_address_display(this.frm); - }, - - buying_price_list: function() { - this.apply_price_list(); - }, - - price_list_rate: function(doc, cdt, cdn) { - var item = frappe.get_doc(cdt, cdn); - frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]); - - item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0), - precision("rate", item)); - - this.calculate_taxes_and_totals(); - }, - - discount_percentage: function(doc, cdt, cdn) { - this.price_list_rate(doc, cdt, cdn); - }, - - qty: function(doc, cdt, cdn) { - var item = frappe.get_doc(cdt, cdn); - if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && (doc.update_stock || doc.is_return))) { - frappe.model.round_floats_in(item, ["qty", "received_qty"]); - - if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "received_qty"])){ return } - - if(!item.rejected_qty && item.qty) { - item.received_qty = item.qty; - } - - 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); - }, - - received_qty: function(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(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["received_qty", "rejected_qty"])){ return } - - item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item)); - this.qty(doc, cdt, cdn); - }, - - validate_negative_quantity: function(cdt, cdn, item, fieldnames){ - if(!item || !fieldnames) { return } - - var is_negative_qty = false; - for(var i = 0; i 0 && qty > 0 && cur_frm.doc.items[i].item_code == d.item_code && !cur_frm.doc.items[i].material_request_item) - { - cur_frm.doc.items[i].material_request = d.mr_name; - cur_frm.doc.items[i].material_request_item = d.mr_item; - my_qty = Math.min(qty, d.qty); - qty = qty - my_qty; - d.qty = d.qty - my_qty; - cur_frm.doc.items[i].stock_qty = my_qty*cur_frm.doc.items[i].conversion_factor; - cur_frm.doc.items[i].qty = my_qty; - - frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + cur_frm.doc.items[i].idx + ")"); - if (qty > 0) - { - frappe.msgprint("Splitting " + qty + " units of " + d.item_code); - var newrow = frappe.model.add_child(cur_frm.doc, cur_frm.doc.items[i].doctype, "items"); - item_length++; - - for (key in cur_frm.doc.items[i]) - { - newrow[key] = cur_frm.doc.items[i][key]; - } - - newrow.idx = item_length; - newrow["stock_qty"] = newrow.conversion_factor*qty; - newrow["qty"] = qty; - - newrow["material_request"] = ""; - newrow["material_request_item"] = ""; - - } - - - - } - - }); - i++; - } - refresh_field("items"); - //cur_frm.save(); - } - }); - } -}); - -cur_frm.add_fetch('project', 'cost_center', 'cost_center'); - -erpnext.buying.get_default_bom = function(frm) { - $.each(frm.doc["items"] || [], function(i, d) { - if (d.item_code && d.bom === "") { - return frappe.call({ - type: "GET", - method: "erpnext.stock.get_item_details.get_default_bom", - args: { - "item_code": d.item_code, - }, - callback: function(r) { - if(r) { - frappe.model.set_value(d.doctype, d.name, "bom", r.message); - } - } - }) - } - }); -} - -erpnext.buying.get_items_from_product_bundle = function(frm) { - var dialog = new frappe.ui.Dialog({ - title: __("Get Items from Product Bundle"), - fields: [ - { - "fieldtype": "Link", - "label": __("Product Bundle"), - "fieldname": "product_bundle", - "options":"Product Bundle", - "reqd": 1 - }, - { - "fieldtype": "Currency", - "label": __("Quantity"), - "fieldname": "quantity", - "reqd": 1, - "default": 1 - }, - { - "fieldtype": "Button", - "label": __("Get Items"), - "fieldname": "get_items", - "cssClass": "btn-primary" - } - ] - }); - - dialog.fields_dict.get_items.$input.click(function() { - args = dialog.get_values(); - if(!args) return; - dialog.hide(); - return frappe.call({ - type: "GET", - method: "erpnext.stock.doctype.packed_item.packed_item.get_items_from_product_bundle", - args: { - args: { - item_code: args.product_bundle, - quantity: args.quantity, - parenttype: frm.doc.doctype, - parent: frm.doc.name, - supplier: frm.doc.supplier, - currency: frm.doc.currency, - conversion_rate: frm.doc.conversion_rate, - price_list: frm.doc.buying_price_list, - price_list_currency: frm.doc.price_list_currency, - plc_conversion_rate: frm.doc.plc_conversion_rate, - company: frm.doc.company, - is_subcontracted: frm.doc.is_subcontracted, - transaction_date: frm.doc.transaction_date || frm.doc.posting_date, - ignore_pricing_rule: frm.doc.ignore_pricing_rule - } - }, - freeze: true, - callback: function(r) { - if(!r.exc && r.message) { - for ( var i=0; i< r.message.length; i++ ) { - var d = frm.add_child("items"); - var item = r.message[i]; - for ( var key in item) { - if ( !is_null(item[key]) ) { - d[key] = item[key]; - } - } - if(frappe.meta.get_docfield(d.doctype, "price_list_rate", d.name)) { - frm.script_manager.trigger("price_list_rate", d.doctype, d.name); - } - } - frm.refresh_field("items"); - } - } - }) - }); - dialog.show(); -} diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.json b/erpnext/buying/doctype/purchase_common/purchase_common.json deleted file mode 100644 index fd08d08982..0000000000 --- a/erpnext/buying/doctype/purchase_common/purchase_common.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "creation": "2012-03-27 14:35:51", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "fields": [], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "modified": "2013-12-20 19:23:27", - "modified_by": "Administrator", - "module": "Buying", - "name": "Purchase Common", - "owner": "Administrator", - "permissions": [], - "read_only": 0, - "read_only_onload": 0 -} \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py deleted file mode 100644 index 844a6551ba..0000000000 --- a/erpnext/buying/doctype/purchase_common/purchase_common.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe, json -from frappe.utils import flt, cstr, cint -from frappe import _ - -from erpnext.stock.doctype.item.item import get_last_purchase_details -from erpnext.controllers.buying_controller import BuyingController - -class PurchaseCommon(BuyingController): - def update_last_purchase_rate(self, obj, is_submit): - """updates last_purchase_rate in item table for each item""" - - import frappe.utils - this_purchase_date = frappe.utils.getdate(obj.get('posting_date') or obj.get('transaction_date')) - - for d in obj.get("items"): - # get last purchase details - last_purchase_details = get_last_purchase_details(d.item_code, obj.name) - - # compare last purchase date and this transaction's date - last_purchase_rate = None - if last_purchase_details and \ - (last_purchase_details.purchase_date > this_purchase_date): - last_purchase_rate = last_purchase_details['base_rate'] - elif is_submit == 1: - # even if this transaction is the latest one, it should be submitted - # for it to be considered for latest purchase rate - if flt(d.conversion_factor): - last_purchase_rate = flt(d.base_rate) / flt(d.conversion_factor) - else: - frappe.throw(_("UOM Conversion factor is required in row {0}").format(d.idx)) - - # update last purchsae rate - if last_purchase_rate: - frappe.db.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""", - (flt(last_purchase_rate), d.item_code)) - - def validate_for_items(self, obj): - items = [] - for d in obj.get("items"): - if not d.qty: - if obj.doctype == "Purchase Receipt" and d.rejected_qty: - continue - frappe.throw(_("Please enter quantity for Item {0}").format(d.item_code)) - - # udpate with latest quantities - bin = frappe.db.sql("""select projected_qty from `tabBin` where - item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1) - - f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0} - if d.doctype in ('Purchase Receipt Item', 'Purchase Invoice Item'): - f_lst.pop('received_qty') - for x in f_lst : - if d.meta.get_field(x): - d.set(x, f_lst[x]) - - item = frappe.db.sql("""select is_stock_item, - is_sub_contracted_item, end_of_life, disabled from `tabItem` where name=%s""", - d.item_code, as_dict=1)[0] - - from erpnext.stock.doctype.item.item import validate_end_of_life - validate_end_of_life(d.item_code, item.end_of_life, item.disabled) - - # validate stock item - if item.is_stock_item==1 and d.qty and not d.warehouse and not d.delivered_by_supplier: - frappe.throw(_("Warehouse is mandatory for stock Item {0} in row {1}").format(d.item_code, d.idx)) - - items.append(cstr(d.item_code)) - - if items and len(items) != len(set(items)) and \ - not cint(frappe.db.get_single_value("Buying Settings", "allow_multiple_items") or 0): - frappe.throw(_("Same item cannot be entered multiple times.")) - - def check_for_closed_status(self, doctype, docname): - status = frappe.db.get_value(doctype, docname, "status") - - if status == "Closed": - frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError) - -@frappe.whitelist() -def get_linked_material_requests(items): - items = json.loads(items) - mr_list = [] - for item in items: - material_request = frappe.db.sql("""SELECT distinct mr.name AS mr_name, - (mr_item.qty - mr_item.ordered_qty) AS qty, - mr_item.item_code AS item_code, - mr_item.name AS mr_item - FROM `tabMaterial Request` mr, `tabMaterial Request Item` mr_item - WHERE mr.name = mr_item.parent - AND mr_item.item_code = %(item)s - AND mr.material_request_type = 'Purchase' - AND mr.per_ordered < 99.99 - AND mr.docstatus = 1 - AND mr.status != 'Stopped' - ORDER BY mr_item.item_code ASC""",{"item": item}, as_dict=1) - if material_request: - mr_list.append(material_request) - - return mr_list - - \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 796e0f2790..96351e355f 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -11,6 +11,8 @@ from erpnext.controllers.buying_controller import BuyingController from erpnext.stock.doctype.item.item import get_last_purchase_details from erpnext.stock.stock_balance import update_bin_qty, get_ordered_qty from frappe.desk.notifications import clear_doctype_notifications +from erpnext.buying.utils import (validate_for_items, check_for_closed_status, + update_last_purchase_rate) form_grid_templates = { @@ -37,9 +39,8 @@ class PurchaseOrder(BuyingController): super(PurchaseOrder, self).validate() self.set_status() - pc_obj = frappe.get_doc('Purchase Common') - pc_obj.validate_for_items(self) - self.check_for_closed_status(pc_obj) + validate_for_items(self) + self.check_for_closed_status() self.validate_uom_is_integer("uom", "qty") self.validate_uom_is_integer("stock_uom", ["qty", "required_qty"]) @@ -111,12 +112,12 @@ class PurchaseOrder(BuyingController): = d.rate = item_last_purchase_rate # Check for Closed status - def check_for_closed_status(self, pc_obj): + def check_for_closed_status(self): check_list =[] for d in self.get('items'): if d.meta.get_field('material_request') and d.material_request and d.material_request not in check_list: check_list.append(d.material_request) - pc_obj.check_for_closed_status('Material Request', d.material_request) + check_for_closed_status('Material Request', d.material_request) def update_requested_qty(self): material_request_map = {} @@ -155,7 +156,7 @@ class PurchaseOrder(BuyingController): if date_diff and date_diff[0][0]: msgprint(_("{0} {1} has been modified. Please refresh.").format(self.doctype, self.name), raise_exception=True) - + def update_status(self, status): self.check_modified_date() self.set_status(update=True, status=status) @@ -168,8 +169,6 @@ class PurchaseOrder(BuyingController): if self.is_against_so(): self.update_status_updater() - purchase_controller = frappe.get_doc("Purchase Common") - self.update_prevdoc_status() self.update_requested_qty() self.update_ordered_qty() @@ -177,7 +176,7 @@ class PurchaseOrder(BuyingController): frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total) - purchase_controller.update_last_purchase_rate(self, is_submit = 1) + update_last_purchase_rate(self, is_submit = 1) def on_cancel(self): if self.is_against_so(): @@ -186,8 +185,7 @@ class PurchaseOrder(BuyingController): if self.has_drop_ship_item(): self.update_delivered_qty_in_sales_order() - pc_obj = frappe.get_doc('Purchase Common') - self.check_for_closed_status(pc_obj) + self.check_for_closed_status() frappe.db.set(self,'status','Cancelled') @@ -197,7 +195,7 @@ class PurchaseOrder(BuyingController): self.update_requested_qty() self.update_ordered_qty() - pc_obj.update_last_purchase_rate(self, is_submit = 0) + update_last_purchase_rate(self, is_submit = 0) def on_update(self): pass @@ -303,7 +301,7 @@ def make_purchase_invoice(source_name, target_doc=None): target.amount = flt(obj.amount) - flt(obj.billed_amt) target.base_amount = target.amount * flt(source_parent.conversion_rate) target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty) - + item = frappe.db.get_value("Item", target.item_code, ["item_group", "buying_cost_center"], as_dict=1) target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \ or item.buying_cost_center \ diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index ab9efaed31..34a904f576 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -14,12 +14,14 @@ from frappe.core.doctype.communication.email import make from erpnext.accounts.party import get_party_account_currency, get_party_details from erpnext.stock.doctype.material_request.material_request import set_missing_values from erpnext.controllers.buying_controller import BuyingController +from erpnext.buying.utils import validate_for_items STANDARD_USERS = ("Guest", "Administrator") class RequestforQuotation(BuyingController): def validate(self): self.validate_duplicate_supplier() + validate_for_items(self) self.validate_common() self.update_email_id() @@ -28,10 +30,6 @@ class RequestforQuotation(BuyingController): if len(supplier_list) != len(set(supplier_list)): frappe.throw(_("Same supplier has been entered multiple times")) - def validate_common(self): - pc = frappe.get_doc('Purchase Common') - pc.validate_for_items(self) - def update_email_id(self): for rfq_supplier in self.suppliers: if not rfq_supplier.email_id: @@ -130,7 +128,7 @@ class RequestforQuotation(BuyingController): self.send_email(data, sender, subject, message, attachments) def send_email(self, data, sender, subject, message, attachments): - make(subject = subject, content=message,recipients=data.email_id, + make(subject = subject, content=message,recipients=data.email_id, sender=sender,attachments = attachments, send_email=True, doctype=self.doctype, name=self.name)["name"] @@ -250,26 +248,26 @@ def get_rfq_doc(doctype, name, supplier_idx): args = doc.get('suppliers')[cint(supplier_idx) - 1] doc.update_supplier_part_no(args) return doc - + @frappe.whitelist() def get_item_from_material_requests_based_on_supplier(source_name, target_doc = None): mr_items_list = frappe.db.sql(""" SELECT mr.name, mr_item.item_code FROM - `tabItem` as item, - `tabItem Supplier` as item_supp, - `tabMaterial Request Item` as mr_item, - `tabMaterial Request` as mr - WHERE item_supp.supplier = %(supplier)s - AND item.name = item_supp.parent - AND mr_item.parent = mr.name - AND mr_item.item_code = item.name - AND mr.status != "Stopped" - AND mr.material_request_type = "Purchase" - AND mr.docstatus = 1 + `tabItem` as item, + `tabItem Supplier` as item_supp, + `tabMaterial Request Item` as mr_item, + `tabMaterial Request` as mr + WHERE item_supp.supplier = %(supplier)s + AND item.name = item_supp.parent + AND mr_item.parent = mr.name + AND mr_item.item_code = item.name + AND mr.status != "Stopped" + AND mr.material_request_type = "Purchase" + AND mr.docstatus = 1 AND mr.per_ordered < 99.99""", {"supplier": source_name}, as_dict=1) - + material_requests = {} for d in mr_items_list: material_requests.setdefault(d.name, []).append(d.item_code) @@ -293,5 +291,5 @@ def get_item_from_material_requests_based_on_supplier(source_name, target_doc = ] } }, target_doc) - + return target_doc diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index 30899c81cc..1cb5a18662 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -8,6 +8,7 @@ from frappe.utils import flt from frappe.model.mapper import get_mapped_doc from erpnext.controllers.buying_controller import BuyingController +from erpnext.buying.utils import validate_for_items form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -24,7 +25,7 @@ class SupplierQuotation(BuyingController): validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) - self.validate_common() + validate_for_items(self) self.validate_with_previous_doc() self.validate_uom_is_integer("uom", "qty") @@ -50,11 +51,6 @@ class SupplierQuotation(BuyingController): } }) - - def validate_common(self): - pc = frappe.get_doc('Purchase Common') - pc.validate_for_items(self) - def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context list_context = get_list_context(context) diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py new file mode 100644 index 0000000000..28c757948a --- /dev/null +++ b/erpnext/buying/utils.py @@ -0,0 +1,80 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.utils import flt, cstr, cint +from frappe import _ + +from erpnext.stock.doctype.item.item import get_last_purchase_details +from erpnext.stock.doctype.item.item import validate_end_of_life + +def update_last_purchase_rate(doc, is_submit): + """updates last_purchase_rate in item table for each item""" + + import frappe.utils + this_purchase_date = frappe.utils.getdate(doc.get('posting_date') or doc.get('transaction_date')) + + for d in doc.get("items"): + # get last purchase details + last_purchase_details = get_last_purchase_details(d.item_code, doc.name) + + # compare last purchase date and this transaction's date + last_purchase_rate = None + if last_purchase_details and \ + (last_purchase_details.purchase_date > this_purchase_date): + last_purchase_rate = last_purchase_details['base_rate'] + elif is_submit == 1: + # even if this transaction is the latest one, it should be submitted + # for it to be considered for latest purchase rate + if flt(d.conversion_factor): + last_purchase_rate = flt(d.base_rate) / flt(d.conversion_factor) + else: + frappe.throw(_("UOM Conversion factor is required in row {0}").format(d.idx)) + + # update last purchsae rate + if last_purchase_rate: + frappe.db.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""", + (flt(last_purchase_rate), d.item_code)) + +def validate_for_items(doc): + items = [] + for d in doc.get("items"): + if not d.qty: + if doc.doctype == "Purchase Receipt" and d.rejected_qty: + continue + frappe.throw(_("Please enter quantity for Item {0}").format(d.item_code)) + + # update with latest quantities + bin = frappe.db.sql("""select projected_qty from `tabBin` where + item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1) + + f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0} + if d.doctype in ('Purchase Receipt Item', 'Purchase Invoice Item'): + f_lst.pop('received_qty') + for x in f_lst : + if d.meta.get_field(x): + d.set(x, f_lst[x]) + + item = frappe.db.sql("""select is_stock_item, + is_sub_contracted_item, end_of_life, disabled from `tabItem` where name=%s""", + d.item_code, as_dict=1)[0] + + validate_end_of_life(d.item_code, item.end_of_life, item.disabled) + + # validate stock item + if item.is_stock_item==1 and d.qty and not d.warehouse and not d.delivered_by_supplier: + frappe.throw(_("Warehouse is mandatory for stock Item {0} in row {1}").format(d.item_code, d.idx)) + + items.append(cstr(d.item_code)) + + if items and len(items) != len(set(items)) and \ + not cint(frappe.db.get_single_value("Buying Settings", "allow_multiple_items") or 0): + frappe.throw(_("Same item cannot be entered multiple times.")) + +def check_for_closed_status(doctype, docname): + status = frappe.db.get_value(doctype, docname, "status") + + if status == "Closed": + frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError) + diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 518f68632f..910c19c9ca 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -2,10 +2,10 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _, throw from frappe.utils import today, flt, cint, fmt_money, formatdate, getdate -from erpnext.setup.utils import get_company_currency, get_exchange_rate +from erpnext.setup.utils import get_exchange_rate from erpnext.accounts.utils import get_fiscal_years, validate_fiscal_year, get_account_currency from erpnext.utilities.transaction_base import TransactionBase from erpnext.controllers.recurring_document import convert_to_recurring, validate_recurring_document @@ -22,7 +22,7 @@ class AccountsController(TransactionBase): @property def company_currency(self): if not hasattr(self, "__company_currency"): - self.__company_currency = get_company_currency(self.company) + self.__company_currency = erpnext.get_company_currency(self.company) return self.__company_currency diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index a1c71852d8..5bc8bb38f8 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -6,9 +6,10 @@ import frappe from frappe import _, msgprint from frappe.utils import flt,cint, cstr -from erpnext.setup.utils import get_company_currency from erpnext.accounts.party import get_party_details from erpnext.stock.get_item_details import get_conversion_factor +from erpnext.buying.utils import validate_for_items +from erpnext.stock.stock_ledger import get_valuation_rate from erpnext.controllers.stock_controller import StockController @@ -40,9 +41,7 @@ class BuyingController(StockController): # self.validate_purchase_return() self.validate_rejected_warehouse() self.validate_accepted_rejected_qty() - - pc_obj = frappe.get_doc('Purchase Common') - pc_obj.validate_for_items(self) + validate_for_items(self) #sub-contracting self.validate_for_subcontracting() @@ -88,9 +87,8 @@ class BuyingController(StockController): def set_total_in_words(self): from frappe.utils import money_in_words - company_currency = get_company_currency(self.company) if self.meta.get_field("base_in_words"): - self.base_in_words = money_in_words(self.base_grand_total, company_currency) + self.base_in_words = money_in_words(self.base_grand_total, self.company_currency) if self.meta.get_field("in_words"): self.in_words = money_in_words(self.grand_total, self.currency) @@ -225,9 +223,8 @@ class BuyingController(StockController): "serial_no": rm.serial_no }) if not rm.rate: - from erpnext.stock.stock_ledger import get_valuation_rate - rm.rate = get_valuation_rate(bom_item.item_code, self.supplier_warehouse, - self.doctype, self.name) + rm.rate = get_valuation_rate(bom_item.item_code, self.supplier_warehouse, + self.doctype, self.name, currency=self.company_currency) else: rm.rate = bom_item.rate diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 5f50ae32a2..c235d3435a 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -4,11 +4,9 @@ from __future__ import unicode_literals import frappe from frappe.utils import cint, flt, cstr, comma_or -from erpnext.setup.utils import get_company_currency from frappe import _, throw from erpnext.stock.get_item_details import get_bin_details from erpnext.stock.utils import get_incoming_rate -from erpnext.stock.stock_ledger import get_valuation_rate from erpnext.stock.get_item_details import get_conversion_factor from erpnext.controllers.stock_controller import StockController @@ -113,13 +111,11 @@ class SellingController(StockController): def set_total_in_words(self): from frappe.utils import money_in_words - company_currency = get_company_currency(self.company) - disable_rounded_total = cint(frappe.db.get_value("Global Defaults", None, "disable_rounded_total")) if self.meta.get_field("base_in_words"): self.base_in_words = money_in_words(disable_rounded_total and - abs(self.base_grand_total) or abs(self.base_rounded_total), company_currency) + abs(self.base_grand_total) or abs(self.base_rounded_total), self.company_currency) if self.meta.get_field("in_words"): self.in_words = money_in_words(disable_rounded_total and abs(self.grand_total) or abs(self.rounded_total), self.currency) @@ -170,7 +166,7 @@ class SellingController(StockController): if d.meta.get_field("stock_qty"): if not d.conversion_factor: frappe.throw(_("Row {0}: Conversion Factor is mandatory").format(d.idx)) - d.stock_qty = flt(d.qty) * flt(d.conversion_factor) + d.stock_qty = flt(d.qty) * flt(d.conversion_factor) def validate_selling_price(self): def throw_message(item_name, rate, ref_rate_field): diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index add882cbbf..9f0534529f 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -54,9 +54,9 @@ class StockController(AccountsController): self.check_expense_account(item_row) - # If item is not a sample item + # If item is not a sample item # and ( valuation rate not mentioned in an incoming entry - # or incoming entry not found while delivering the item), + # or incoming entry not found while delivering the item), # try to pick valuation rate from previous sle or Item master and update in SLE # Otherwise, throw an exception @@ -96,25 +96,25 @@ class StockController(AccountsController): return process_gl_map(gl_list) def update_stock_ledger_entries(self, sle): - sle.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, - self.doctype, self.name) + sle.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, + self.doctype, self.name, currency=self.company_currency) sle.stock_value = flt(sle.qty_after_transaction) * flt(sle.valuation_rate) sle.stock_value_difference = flt(sle.actual_qty) * flt(sle.valuation_rate) - + if sle.name: frappe.db.sql(""" - update - `tabStock Ledger Entry` - set + update + `tabStock Ledger Entry` + set stock_value = %(stock_value)s, - valuation_rate = %(valuation_rate)s, - stock_value_difference = %(stock_value_difference)s - where + valuation_rate = %(valuation_rate)s, + stock_value_difference = %(stock_value_difference)s + where name = %(name)s""", (sle)) - + return sle - + def get_voucher_details(self, default_expense_account, default_cost_center, sle_map): if self.doctype == "Stock Reconciliation": return [frappe._dict({ "name": voucher_detail_no, "expense_account": default_expense_account, @@ -163,9 +163,9 @@ class StockController(AccountsController): def get_stock_ledger_details(self): stock_ledger = {} stock_ledger_entries = frappe.db.sql(""" - select + select name, warehouse, stock_value_difference, valuation_rate, - voucher_detail_no, item_code, posting_date, posting_time, + voucher_detail_no, item_code, posting_date, posting_time, actual_qty, qty_after_transaction from `tabStock Ledger Entry` diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 0e02df8d96..bec57f4efb 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -3,10 +3,9 @@ from __future__ import unicode_literals import json -import frappe +import frappe, erpnext from frappe import _, scrub from frappe.utils import cint, flt, round_based_on_smallest_currency_fraction -from erpnext.setup.utils import get_company_currency from erpnext.controllers.accounts_controller import validate_conversion_rate, \ validate_taxes_and_charges, validate_inclusive_tax @@ -38,7 +37,7 @@ class calculate_taxes_and_totals(object): def validate_conversion_rate(self): # validate conversion rate - company_currency = get_company_currency(self.doc.company) + company_currency = erpnext.get_company_currency(self.doc.company) if not self.doc.currency or self.doc.currency == company_currency: self.doc.currency = company_currency self.doc.conversion_rate = 1.0 @@ -327,7 +326,7 @@ class calculate_taxes_and_totals(object): self.doc.rounded_total = round_based_on_smallest_currency_fraction(self.doc.grand_total, self.doc.currency, self.doc.precision("rounded_total")) if self.doc.meta.get_field("base_rounded_total"): - company_currency = get_company_currency(self.doc.company) + company_currency = erpnext.get_company_currency(self.doc.company) self.doc.base_rounded_total = \ round_based_on_smallest_currency_fraction(self.doc.base_grand_total, diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index 913d2e4ae6..3c553a5da8 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -194,11 +194,12 @@ def make_quotation(source_name, target_doc=None): quotation.transaction_date) quotation.conversion_rate = exchange_rate - + # get default taxes taxes = get_default_taxes_and_charges("Sales Taxes and Charges Template") - quotation.extend("taxes", taxes) - + if taxes: + quotation.extend("taxes", taxes) + quotation.run_method("set_missing_values") quotation.run_method("calculate_taxes_and_totals") diff --git a/erpnext/demo/setup/setup_data.py b/erpnext/demo/setup/setup_data.py index 400b076746..c1a8bed64b 100644 --- a/erpnext/demo/setup/setup_data.py +++ b/erpnext/demo/setup/setup_data.py @@ -63,6 +63,10 @@ def complete_setup(domain='Manufacturing'): "language": "english" }) + company = erpnext.get_default_company() + company.db_set('default_payroll_payable_account', + frappe.db.get_value('Account', dict(account_name='Payroll Payable'))) + def setup_demo_page(): # home page should always be "start" website_settings = frappe.get_doc("Website Settings", "Website Settings") diff --git a/erpnext/demo/user/hr.py b/erpnext/demo/user/hr.py index 25366024c1..0b644c42d3 100644 --- a/erpnext/demo/user/hr.py +++ b/erpnext/demo/user/hr.py @@ -34,14 +34,16 @@ def work(): process_payroll.salary_slip_based_on_timesheet = 0 process_payroll.create_salary_slips() process_payroll.submit_salary_slips() - process_payroll.make_journal_entry(reference_date=frappe.flags.current_date, - reference_number=random_string(10)) + process_payroll.make_accural_jv_entry() + # process_payroll.make_journal_entry(reference_date=frappe.flags.current_date, + # reference_number=random_string(10)) process_payroll.salary_slip_based_on_timesheet = 1 process_payroll.create_salary_slips() process_payroll.submit_salary_slips() - process_payroll.make_journal_entry(reference_date=frappe.flags.current_date, - reference_number=random_string(10)) + process_payroll.make_accural_jv_entry() + # process_payroll.make_journal_entry(reference_date=frappe.flags.current_date, + # reference_number=random_string(10)) if frappe.db.get_global('demo_hr_user'): make_timesheet_records() diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 34b729f102..a4d6460a35 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -2,13 +2,12 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff, money_in_words from frappe.model.naming import make_autoname from frappe import msgprint, _ -from erpnext.setup.utils import get_company_currency from erpnext.hr.doctype.process_payroll.process_payroll import get_start_end_dates from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee from erpnext.utilities.transaction_base import TransactionBase @@ -33,7 +32,7 @@ class SalarySlip(TransactionBase): # if self.salary_slip_based_on_timesheet or not self.net_pay: self.calculate_net_pay() - company_currency = get_company_currency(self.company) + company_currency = erpnext.get_company_currency(self.company) self.total_in_words = money_in_words(self.rounded_total, company_currency) if frappe.db.get_single_value("HR Settings", "max_working_hours_against_timesheet"): @@ -348,7 +347,7 @@ class SalarySlip(TransactionBase): self.sum_components('earnings', 'gross_pay') self.sum_components('deductions', 'total_deduction') - + self.set_loan_repayment() self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.total_loan_repayment)) @@ -356,11 +355,11 @@ class SalarySlip(TransactionBase): self.precision("net_pay") if disable_rounded_total else 0) def set_loan_repayment(self): - employee_loan = frappe.db.sql("""select sum(principal_amount) as principal_amount, sum(interest_amount) as interest_amount, + employee_loan = frappe.db.sql("""select sum(principal_amount) as principal_amount, sum(interest_amount) as interest_amount, sum(total_payment) as total_loan_repayment from `tabRepayment Schedule` where payment_date between %s and %s and parent in (select name from `tabEmployee Loan` where employee = %s and repay_from_salary = 1 and docstatus = 1)""", - (self.start_date, self.end_date, self.employee), as_dict=True) + (self.start_date, self.end_date, self.employee), as_dict=True) if employee_loan: self.principal_amount = employee_loan[0].principal_amount self.interest_amount = employee_loan[0].interest_amount diff --git a/erpnext/patches.txt b/erpnext/patches.txt index cb8ba03d6b..3711bc82b2 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -381,4 +381,5 @@ erpnext.patches.v7_2.move_dates_from_salary_structure_to_employee erpnext.patches.v7_2.make_all_assessment_group erpnext.patches.v8_0.manufacturer_childtable_migrate erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom -erpnext.patches.v8_0.addresses_linked_to_lead \ No newline at end of file +erpnext.patches.v8_0.addresses_linked_to_lead +execute:frappe.delete_doc('DocType', 'Purchase Common') \ No newline at end of file diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index dd7bca9f73..26298bcc57 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -123,7 +123,7 @@ class Company(Document): {"company": self.name, "account_type": "Receivable", "is_group": 0})) frappe.db.set(self, "default_payable_account", frappe.db.get_value("Account", {"company": self.name, "account_type": "Payable", "is_group": 0})) - + def validate_coa_input(self): if self.create_chart_of_accounts_based_on == "Existing Company": self.chart_of_accounts = None @@ -294,7 +294,3 @@ def get_name_with_abbr(name, company): parts.append(company_abbr) return " - ".join(parts) - -def get_company_currency(company): - return frappe.local_cache("company_currency", company, - lambda: frappe.db.get_value("Company", company, "default_currency")) diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 26509ed901..922479c8ee 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -177,6 +177,7 @@ def set_defaults(args): selling_settings.cust_master_name = "Customer Name" selling_settings.so_required = "No" selling_settings.dn_required = "No" + selling_settings.allow_multiple_items = 1 selling_settings.save() buying_settings = frappe.get_doc("Buying Settings") @@ -184,6 +185,7 @@ def set_defaults(args): buying_settings.po_required = "No" buying_settings.pr_required = "No" buying_settings.maintain_same_rate = 1 + buying_settings.allow_multiple_items = 1 buying_settings.save() notification_control = frappe.get_doc("Notification Control") diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index cb638373b1..55a0fd3c01 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -3,19 +3,10 @@ from __future__ import unicode_literals import frappe -from frappe import _, throw +from frappe import _ from frappe.utils import flt from frappe.utils import get_datetime_str, nowdate -def get_company_currency(company): - currency = frappe.db.get_value("Company", company, "default_currency", cache=True) - if not currency: - currency = frappe.db.get_default("currency") - if not currency: - throw(_('Please specify Default Currency in Company Master and Global Defaults')) - - return currency - def get_root_of(doctype): """Get root element of a DocType with a tree structure""" result = frappe.db.sql_list("""select name from `tab%s` diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index ca25414241..82c4c19fdf 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -13,7 +13,7 @@ from frappe.model.mapper import get_mapped_doc from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty from erpnext.controllers.buying_controller import BuyingController from erpnext.manufacturing.doctype.production_order.production_order import get_item_details - +from erpnext.buying.utils import check_for_closed_status, validate_for_items form_grid_templates = { "items": "templates/form_grid/material_request_grid.html" @@ -72,12 +72,9 @@ class MaterialRequest(BuyingController): from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) - pc_obj = frappe.get_doc('Purchase Common') - pc_obj.validate_for_items(self) + validate_for_items(self) # self.set_title() - - # self.validate_qty_against_so() # NOTE: Since Item BOM and FG quantities are combined, using current data, it cannot be validated # Though the creation of Material Request from a Production Plan can be rethought to fix this @@ -112,9 +109,7 @@ class MaterialRequest(BuyingController): self.update_requested_qty() def on_cancel(self): - pc_obj = frappe.get_doc('Purchase Common') - - pc_obj.check_for_closed_status(self.doctype, self.name) + check_for_closed_status(self.doctype, self.name) self.update_requested_qty() diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index b89987c57e..1f8fd8d9cf 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -12,6 +12,7 @@ from frappe.utils import getdate from erpnext.controllers.buying_controller import BuyingController from erpnext.accounts.utils import get_account_currency from frappe.desk.notifications import clear_doctype_notifications +from erpnext.buying.utils import check_for_closed_status, update_last_purchase_rate form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -56,8 +57,7 @@ class PurchaseReceipt(BuyingController): self.validate_uom_is_integer("uom", ["qty", "received_qty"]) self.validate_uom_is_integer("stock_uom", "stock_qty") - pc_obj = frappe.get_doc('Purchase Common') - self.check_for_closed_status(pc_obj) + self.check_for_closed_status() if getdate(self.posting_date) > getdate(nowdate()): throw(_("Posting Date cannot be future date")) @@ -98,17 +98,16 @@ class PurchaseReceipt(BuyingController): return po_qty, po_warehouse # Check for Closed status - def check_for_closed_status(self, pc_obj): + def check_for_closed_status(self): check_list =[] for d in self.get('items'): - if d.meta.get_field('purchase_order') and d.purchase_order and d.purchase_order not in check_list: + if (d.meta.get_field('purchase_order') and d.purchase_order + and d.purchase_order not in check_list): check_list.append(d.purchase_order) - pc_obj.check_for_closed_status('Purchase Order', d.purchase_order) + check_for_closed_status('Purchase Order', d.purchase_order) # on submit def on_submit(self): - purchase_controller = frappe.get_doc("Purchase Common") - # Check for Approving Authority frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total) @@ -120,7 +119,7 @@ class PurchaseReceipt(BuyingController): self.update_billing_status() if not self.is_return: - purchase_controller.update_last_purchase_rate(self, 1) + update_last_purchase_rate(self, 1) # Updating stock ledger should always be called after updating prevdoc status, # because updating ordered qty in bin depends upon updated ordered qty in PO @@ -140,9 +139,7 @@ class PurchaseReceipt(BuyingController): frappe.throw(_("Purchase Invoice {0} is already submitted").format(self.submit_rv[0][0])) def on_cancel(self): - pc_obj = frappe.get_doc('Purchase Common') - - self.check_for_closed_status(pc_obj) + self.check_for_closed_status() # Check if Purchase Invoice has been submitted against current Purchase Order submitted = frappe.db.sql("""select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 @@ -157,7 +154,7 @@ class PurchaseReceipt(BuyingController): self.update_billing_status() if not self.is_return: - pc_obj.update_last_purchase_rate(self, 0) + update_last_purchase_rate(self, 0) # Updating stock ledger should always be called after updating prevdoc status, # because updating ordered qty in bin depends upon updated ordered qty in PO @@ -170,9 +167,6 @@ class PurchaseReceipt(BuyingController): bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.supplier_warehouse), as_dict = 1) d.current_stock = bin and flt(bin[0]['actual_qty']) or 0 - def get_rate(self,arg): - return frappe.get_doc('Purchase Common').get_rate(arg,self) - def get_gl_entries(self, warehouse_account=None): from erpnext.accounts.general_ledger import process_gl_map diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 948a626281..82f9bf1f8b 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _ from frappe.utils import cint, flt, cstr, now from erpnext.stock.utils import get_valuation_method @@ -258,14 +258,15 @@ class update_entries_after(object): if not self.valuation_rate and actual_qty > 0: self.valuation_rate = sle.incoming_rate - + # Get valuation rate from previous SLE or Item master, if item is not a sample item if not self.valuation_rate and sle.voucher_detail_no: is_sample_item = self.check_if_sample_item(sle.voucher_type, sle.voucher_detail_no) if not is_sample_item: - self.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, - sle.voucher_type, sle.voucher_no, self.allow_zero_rate) - + self.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, + sle.voucher_type, sle.voucher_no, self.allow_zero_rate, + currency=erpnext.get_company_currency(sle.company)) + def get_fifo_values(self, sle): incoming_rate = flt(sle.incoming_rate) actual_qty = flt(sle.actual_qty) @@ -291,11 +292,12 @@ class update_entries_after(object): # Get valuation rate from last sle if exists or from valuation rate field in item master is_sample_item = self.check_if_sample_item(sle.voucher_type, sle.voucher_detail_no) if not is_sample_item: - _rate = get_valuation_rate(sle.item_code, sle.warehouse, - sle.voucher_type, sle.voucher_no, self.allow_zero_rate) + _rate = get_valuation_rate(sle.item_code, sle.warehouse, + sle.voucher_type, sle.voucher_no, self.allow_zero_rate, + currency=erpnext.get_company_currency(sle.company)) else: _rate = 0 - + self.stock_queue.append([0, _rate]) index = None @@ -341,11 +343,11 @@ class update_entries_after(object): if not self.stock_queue: self.stock_queue.append([0, sle.incoming_rate or sle.outgoing_rate or self.valuation_rate]) - + def check_if_sample_item(self, voucher_type, voucher_detail_no): ref_item_dt = voucher_type + (" Detail" if voucher_type == "Stock Entry" else " Item") return frappe.db.get_value(ref_item_dt, voucher_detail_no, "is_sample_item") - + def get_sle_before_datetime(self): """get previous stock ledger entry before current time-bucket""" return get_stock_ledger_entries(self.args, "<", "desc", "limit 1", for_update=False) @@ -419,7 +421,8 @@ def get_stock_ledger_entries(previous_sle, operator=None, order="desc", limit=No "order": order }, previous_sle, as_dict=1, debug=debug) -def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, allow_zero_rate=False): +def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, + allow_zero_rate=False, currency=None): # Get valuation rate from last sle for the same item and warehouse last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` @@ -441,6 +444,11 @@ def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, allow_zer # syste does not found any SLE, then take valuation rate from Item valuation_rate = frappe.db.get_value("Item", item_code, "valuation_rate") + if not valuation_rate: + # try in price list + valuation_rate = frappe.db.get_value('Item Price', + dict(item_code=item_code, buying=1, currency=currency), 'price_list_rate') + if not allow_zero_rate and not valuation_rate \ and cint(frappe.db.get_value("Accounts Settings", None, "auto_accounting_for_stock")): frappe.local.message_log = [] From f0b4562a9508bf23504e503b4bcc7adbe628e778 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 12:53:05 +0530 Subject: [PATCH 010/287] [refactor] move purchase_common.js -> public/js/controllers/buying.js --- .../purchase_invoice/purchase_invoice.js | 3 +- .../doctype/purchase_order/purchase_order.js | 2 +- .../request_for_quotation.js | 2 +- .../supplier_quotation/supplier_quotation.js | 2 +- erpnext/public/js/controllers/buying.js | 372 ++++++++++++++++++ .../material_request/material_request.js | 2 +- .../purchase_receipt/purchase_receipt.js | 2 +- 7 files changed, 378 insertions(+), 7 deletions(-) create mode 100644 erpnext/public/js/controllers/buying.js diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 6ee9e66dd6..3762b4841c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -2,8 +2,7 @@ // License: GNU General Public License v3. See license.txt frappe.provide("erpnext.accounts"); -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; - +{% include 'erpnext/public/js/controllers/buying.js' %}; erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ setup: function(doc) { diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index 5b16cd6494..85a6329f51 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -3,7 +3,7 @@ frappe.provide("erpnext.buying"); -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; +{% include 'erpnext/public/js/controllers/buying.js' %}; frappe.ui.form.on("Purchase Order", { setup: function(frm) { diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index 59ad092724..92600b774c 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -2,7 +2,7 @@ // License: GNU General Public License v3. See license.txt -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; +{% include 'erpnext/public/js/controllers/buying.js' %}; cur_frm.add_fetch('contact', 'email_id', 'email_id') diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js index 5ed210ca98..1e2379e1a0 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js @@ -2,7 +2,7 @@ // License: GNU General Public License v3. See license.txt // attach required files -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; +{% include 'erpnext/public/js/controllers/buying.js' %}; frappe.ui.form.on('Suppier Quotation', { setup: function() { diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js new file mode 100644 index 0000000000..108aac1af8 --- /dev/null +++ b/erpnext/public/js/controllers/buying.js @@ -0,0 +1,372 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +frappe.provide("erpnext.buying"); + +cur_frm.cscript.tax_table = "Purchase Taxes and Charges"; + +{% include 'erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js' %} + +cur_frm.email_field = "contact_email"; + +erpnext.buying.BuyingController = erpnext.TransactionController.extend({ + setup: function() { + this._super(); + }, + + onload: function() { + this.setup_queries(); + this._super(); + + if(this.frm.get_field('shipping_address')) { + this.frm.set_query("shipping_address", function(){ + if(me.frm.doc.customer){ + return { + query: 'frappe.geo.doctype.address.address.address_query', + filters: { link_doctype: 'Customer', link_name: me.frm.doc.customer } + }; + } else + return erpnext.queries.company_address_query(me.frm.doc) + }); + } + }, + + setup_queries: function() { + var me = this; + + if(this.frm.fields_dict.buying_price_list) { + this.frm.set_query("buying_price_list", function() { + return{ + filters: { 'buying': 1 } + } + }); + } + + me.frm.set_query('supplier', erpnext.queries.supplier); + me.frm.set_query('contact_person', erpnext.queries.contact_query); + me.frm.set_query('supplier_address', erpnext.queries.address_query); + + if(this.frm.fields_dict.supplier) { + this.frm.set_query("supplier", function() { + return{ query: "erpnext.controllers.queries.supplier_query" }}); + } + + this.frm.set_query("item_code", "items", function() { + if(me.frm.doc.is_subcontracted == "Yes") { + return{ + query: "erpnext.controllers.queries.item_query", + filters:{ 'is_sub_contracted_item': 1 } + } + } else { + return{ + query: "erpnext.controllers.queries.item_query", + filters: {'is_purchase_item': 1} + } + } + }); + }, + + refresh: function(doc) { + frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'supplier', doctype: 'Supplier'}; + + this.frm.toggle_display("supplier_name", + (this.frm.doc.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier)); + + if(this.frm.doc.docstatus==0 && + (this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) { + this.set_from_product_bundle(); + } + + this._super(); + }, + + supplier: function() { + var me = this; + erpnext.utils.get_party_details(this.frm, null, null, function(){me.apply_pricing_rule()}); + }, + + supplier_address: function() { + erpnext.utils.get_address_display(this.frm); + }, + + buying_price_list: function() { + this.apply_price_list(); + }, + + price_list_rate: function(doc, cdt, cdn) { + var item = frappe.get_doc(cdt, cdn); + frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]); + + item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0), + precision("rate", item)); + + this.calculate_taxes_and_totals(); + }, + + discount_percentage: function(doc, cdt, cdn) { + this.price_list_rate(doc, cdt, cdn); + }, + + qty: function(doc, cdt, cdn) { + var item = frappe.get_doc(cdt, cdn); + if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && (doc.update_stock || doc.is_return))) { + frappe.model.round_floats_in(item, ["qty", "received_qty"]); + + if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "received_qty"])){ return } + + if(!item.rejected_qty && item.qty) { + item.received_qty = item.qty; + } + + 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); + }, + + received_qty: function(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(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["received_qty", "rejected_qty"])){ return } + + item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item)); + this.qty(doc, cdt, cdn); + }, + + validate_negative_quantity: function(cdt, cdn, item, fieldnames){ + if(!item || !fieldnames) { return } + + var is_negative_qty = false; + for(var i = 0; i 0 && qty > 0 && cur_frm.doc.items[i].item_code == d.item_code && !cur_frm.doc.items[i].material_request_item) + { + cur_frm.doc.items[i].material_request = d.mr_name; + cur_frm.doc.items[i].material_request_item = d.mr_item; + my_qty = Math.min(qty, d.qty); + qty = qty - my_qty; + d.qty = d.qty - my_qty; + cur_frm.doc.items[i].stock_qty = my_qty*cur_frm.doc.items[i].conversion_factor; + cur_frm.doc.items[i].qty = my_qty; + + frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + cur_frm.doc.items[i].idx + ")"); + if (qty > 0) + { + frappe.msgprint("Splitting " + qty + " units of " + d.item_code); + var newrow = frappe.model.add_child(cur_frm.doc, cur_frm.doc.items[i].doctype, "items"); + item_length++; + + for (key in cur_frm.doc.items[i]) + { + newrow[key] = cur_frm.doc.items[i][key]; + } + + newrow.idx = item_length; + newrow["stock_qty"] = newrow.conversion_factor*qty; + newrow["qty"] = qty; + + newrow["material_request"] = ""; + newrow["material_request_item"] = ""; + + } + + + + } + + }); + i++; + } + refresh_field("items"); + //cur_frm.save(); + } + }); + } +}); + +cur_frm.add_fetch('project', 'cost_center', 'cost_center'); + +erpnext.buying.get_default_bom = function(frm) { + $.each(frm.doc["items"] || [], function(i, d) { + if (d.item_code && d.bom === "") { + return frappe.call({ + type: "GET", + method: "erpnext.stock.get_item_details.get_default_bom", + args: { + "item_code": d.item_code, + }, + callback: function(r) { + if(r) { + frappe.model.set_value(d.doctype, d.name, "bom", r.message); + } + } + }) + } + }); +} + +erpnext.buying.get_items_from_product_bundle = function(frm) { + var dialog = new frappe.ui.Dialog({ + title: __("Get Items from Product Bundle"), + fields: [ + { + "fieldtype": "Link", + "label": __("Product Bundle"), + "fieldname": "product_bundle", + "options":"Product Bundle", + "reqd": 1 + }, + { + "fieldtype": "Currency", + "label": __("Quantity"), + "fieldname": "quantity", + "reqd": 1, + "default": 1 + }, + { + "fieldtype": "Button", + "label": __("Get Items"), + "fieldname": "get_items", + "cssClass": "btn-primary" + } + ] + }); + + dialog.fields_dict.get_items.$input.click(function() { + args = dialog.get_values(); + if(!args) return; + dialog.hide(); + return frappe.call({ + type: "GET", + method: "erpnext.stock.doctype.packed_item.packed_item.get_items_from_product_bundle", + args: { + args: { + item_code: args.product_bundle, + quantity: args.quantity, + parenttype: frm.doc.doctype, + parent: frm.doc.name, + supplier: frm.doc.supplier, + currency: frm.doc.currency, + conversion_rate: frm.doc.conversion_rate, + price_list: frm.doc.buying_price_list, + price_list_currency: frm.doc.price_list_currency, + plc_conversion_rate: frm.doc.plc_conversion_rate, + company: frm.doc.company, + is_subcontracted: frm.doc.is_subcontracted, + transaction_date: frm.doc.transaction_date || frm.doc.posting_date, + ignore_pricing_rule: frm.doc.ignore_pricing_rule + } + }, + freeze: true, + callback: function(r) { + if(!r.exc && r.message) { + for ( var i=0; i< r.message.length; i++ ) { + var d = frm.add_child("items"); + var item = r.message[i]; + for ( var key in item) { + if ( !is_null(item[key]) ) { + d[key] = item[key]; + } + } + if(frappe.meta.get_docfield(d.doctype, "price_list_rate", d.name)) { + frm.script_manager.trigger("price_list_rate", d.doctype, d.name); + } + } + frm.refresh_field("items"); + } + } + }) + }); + dialog.show(); +} diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 3a5a35131d..be0b4c2536 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -1,7 +1,7 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; +{% include 'erpnext/public/js/controllers/buying.js' %}; frappe.ui.form.on('Material Request', { setup: function(frm) { diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index f9370b4367..383de01e70 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -1,7 +1,7 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %}; +{% include 'erpnext/public/js/controllers/buying.js' %}; frappe.provide("erpnext.stock"); From 4b0381c820d9812473f5ea50c69888c6770ba7ff Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 14:13:35 +0530 Subject: [PATCH 011/287] [fix] tests --- .../doctype/request_for_quotation/request_for_quotation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index 34a904f576..9109239e93 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -22,7 +22,6 @@ class RequestforQuotation(BuyingController): def validate(self): self.validate_duplicate_supplier() validate_for_items(self) - self.validate_common() self.update_email_id() def validate_duplicate_supplier(self): From eae30e56420c05937bb4e394f62abd9e7f1a89e5 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Fri, 31 Mar 2017 17:46:12 +0530 Subject: [PATCH 012/287] [fix] Show project title in kanban view (#8268) - frappe/erpnext#8232 --- erpnext/projects/doctype/project/project_list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/project/project_list.js b/erpnext/projects/doctype/project/project_list.js index 437bf607ed..0f715bf691 100644 --- a/erpnext/projects/doctype/project/project_list.js +++ b/erpnext/projects/doctype/project/project_list.js @@ -1,5 +1,5 @@ frappe.listview_settings['Project'] = { - add_fields: ["status", "priority", "is_active", "percent_complete", "expected_end_date"], + add_fields: ["status", "priority", "is_active", "percent_complete", "expected_end_date", "project_name"], filters:[["status","=", "Open"]], get_indicator: function(doc) { if(doc.status=="Open" && doc.percent_complete) { From 04ab7dfd2f36be60f6cdc009cf67b6929d5b60c9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 31 Mar 2017 18:04:15 +0530 Subject: [PATCH 013/287] Update role-permisison-for-page-and-report.md --- .../role-permisison-for-page-and-report.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md index dff5c0cd1a..3a26a328f6 100644 --- a/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md +++ b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/role-permisison-for-page-and-report.md @@ -1,8 +1,8 @@ # Role Permission for Page and Report -In ERPNext, user can make his custom UI using page and the custom report using report builder or query report. ERPNext has role based permission system where user can assign roles to the user and sames roles can assign to the page and report to access them. +In ERPNext, user can make his custom user interface using Page and the custom report using Report Builder or Query Report. ERPNext has role-based-permission system where user can assign roles to the user. And the same role can be assigned to the page and report, to access them. -If user has enbaled the developer mode then, they can add the roles in the table of page and report. With this user can transfer the roles of page and report to the production server from the develop server. +If user has enabled the developer mode, then they can add the roles directly in the page and report record. But in that case, the permissions will also be reflected in the json file for the page / report. ### For Page Assign roles to the page @@ -12,7 +12,7 @@ If user has enbaled the developer mode then, they can add the roles in the table ## Tool for custom roles assignment -If developer mode is disabled then user can assign the roles to the page, report using tool Role Permission for Page and Report. The changes can be apply only for the respective database, it not make changes in the code base. +If developer mode is disabled, then user can assign the roles to the page and report, using "Role Permission for Page and Report" page. To access, goto Setup > Permissions > Role Permission for Page and Report @@ -20,6 +20,6 @@ To access, goto Setup > Permissions > Role Permission for Page and Report ### Reset to defaults -Using reset to defaults button, user can remove the custom roles applied on the page or report and set the roles which has been alredy available on the respective page or report. +Using "Reset to Default" button, user can remove the custom permissions applied on a page or report. Then default permissions will be applicable on that page or report. Reset the default roles From d991c8666cb588417d0c783e024d896c08f39f61 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 31 Mar 2017 18:49:57 +0600 Subject: [PATCH 014/287] bumped to version 8.0.4 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 95c8a309a9..69024178a8 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.3' +__version__ = '8.0.4' def get_default_company(user=None): '''Get default company for user''' From 0d6db6c42c3e1c1acb445ba0fb4b95115a15c82b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 31 Mar 2017 23:01:45 +0530 Subject: [PATCH 015/287] [fix] add user default role --- erpnext/hooks.py | 4 ++-- erpnext/portal/utils.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 erpnext/portal/utils.py diff --git a/erpnext/hooks.py b/erpnext/hooks.py index f4b87d2689..5b4e687b3b 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -148,8 +148,8 @@ doc_events = { "User": { "after_insert": "frappe.email.doctype.contact.contact.update_contact", "validate": "erpnext.hr.doctype.employee.employee.validate_employee_role", - "on_update": "erpnext.hr.doctype.employee.employee.update_user_permissions", - "on_update": "frappe.geo.address_and_contact.set_default_role" + "on_update": ["erpnext.hr.doctype.employee.employee.update_user_permissions", + "erpnext.portal.utils.set_default_role"] }, ("Sales Taxes and Charges Template", 'Price List'): { "on_update": "erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings.validate_cart_settings" diff --git a/erpnext/portal/utils.py b/erpnext/portal/utils.py new file mode 100644 index 0000000000..7dffd03341 --- /dev/null +++ b/erpnext/portal/utils.py @@ -0,0 +1,17 @@ +import frappe + +def set_default_role(doc, method): + '''Set customer, supplier, student based on email''' + if frappe.flags.setting_role or frappe.flags.in_migrate: + return + contact_name = frappe.get_value('Contact', dict(email_id=doc.email)) + if contact_name: + contact = frappe.get_doc('Contact', contact_name) + for link in contact.links: + frappe.flags.setting_role = True + if link.link_doctype=='Customer': + doc.add_roles('Customer') + elif link.link_doctype=='Supplier': + doc.add_roles('Supplier') + elif frappe.get_value('Student', dict(student_email_id=doc.email)): + doc.add_roles('Student') From 31334328ed4ed55b7fa77cc1a655a65229f3e7f3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 1 Apr 2017 19:32:55 +0600 Subject: [PATCH 016/287] bumped to version 8.0.5 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 69024178a8..dc2a0fa278 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.4' +__version__ = '8.0.5' def get_default_company(user=None): '''Get default company for user''' From 2c892c7e7f993e1a1a6398f4025fce74288dcdc3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 12:05:35 +0530 Subject: [PATCH 017/287] Indentation fixed in gross profit report --- erpnext/accounts/report/gross_profit/gross_profit.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 7dffd0a83e..a79f98d895 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -225,10 +225,10 @@ class GrossProfitGenerator(object): average_buying_rate = get_incoming_rate(row) if not average_buying_rate: average_buying_rate = get_valuation_rate(item_code, row.warehouse, - row.parenttype, row.parent, allow_zero_rate=True, - currency=self.filters.currency) + row.parenttype, row.parent, allow_zero_rate=True, + currency=self.filters.currency) - self.average_buying_rate[item_code] = average_buying_rate + self.average_buying_rate[item_code] = average_buying_rate return self.average_buying_rate[item_code] From 731efe3a958494126f21ed5a97e9a68052d7dce9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 12:11:36 +0530 Subject: [PATCH 018/287] Minor fix in gross profit report --- erpnext/accounts/report/gross_profit/gross_profit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index a79f98d895..4b28f1f35d 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -218,7 +218,8 @@ class GrossProfitGenerator(object): def get_average_buying_rate(self, row, item_code): if not item_code in self.average_buying_rate: if item_code in self.non_stock_items: - self.average_buying_rate[item_code] = flt(frappe.db.sql("""select sum(base_net_amount) / sum(qty * conversion_factor) + self.average_buying_rate[item_code] = flt(frappe.db.sql(""" + select sum(base_net_amount) / sum(qty * conversion_factor) from `tabPurchase Invoice Item` where item_code = %s and docstatus=1""", item_code)[0][0]) else: @@ -228,7 +229,7 @@ class GrossProfitGenerator(object): row.parenttype, row.parent, allow_zero_rate=True, currency=self.filters.currency) - self.average_buying_rate[item_code] = average_buying_rate + self.average_buying_rate[item_code] = flt(average_buying_rate) return self.average_buying_rate[item_code] From c469f2c954acdae358250cb3eb93ae7be45576e3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 13:01:11 +0530 Subject: [PATCH 019/287] Get POS profile fix --- erpnext/stock/get_item_details.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 958da16bac..9b4559e684 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -327,11 +327,10 @@ def get_pos_profile_item_details(company, args, pos_profile=None): @frappe.whitelist() def get_pos_profile(company): - condition = "and company = '%s'"%(company) if company else '' pos_profile = frappe.db.sql("""select * from `tabPOS Profile` where user = %s - {cond}""".format(cond=condition), (frappe.session['user']), as_dict=1) + and company = %s""", (frappe.session['user'], company), as_dict=1) - if not pos_profile and company: + if not pos_profile: pos_profile = frappe.db.sql("""select * from `tabPOS Profile` where ifnull(user,'') = '' and company = %s""", company, as_dict=1) From 17ddd8f3891690867fcc310646fbfc5926440469 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 13:48:13 +0600 Subject: [PATCH 020/287] bumped to version 8.0.6 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index dc2a0fa278..5b6f359981 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.5' +__version__ = '8.0.6' def get_default_company(user=None): '''Get default company for user''' From 2e47654f436be8b07ff435600d36579e03b897e2 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 3 Apr 2017 17:25:55 +0530 Subject: [PATCH 021/287] [fix] demo script for setup data --- erpnext/demo/setup/setup_data.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/demo/setup/setup_data.py b/erpnext/demo/setup/setup_data.py index c1a8bed64b..3675f0f4ea 100644 --- a/erpnext/demo/setup/setup_data.py +++ b/erpnext/demo/setup/setup_data.py @@ -64,8 +64,11 @@ def complete_setup(domain='Manufacturing'): }) company = erpnext.get_default_company() - company.db_set('default_payroll_payable_account', - frappe.db.get_value('Account', dict(account_name='Payroll Payable'))) + + if company: + company_doc = frappe.get_doc("Company", company) + company_doc.db_set('default_payroll_payable_account', + frappe.db.get_value('Account', dict(account_name='Payroll Payable'))) def setup_demo_page(): # home page should always be "start" From 2d132e32aa31fd848e8f60dcd7032483757492d0 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 17:25:38 +0530 Subject: [PATCH 022/287] Function name changed in company --- erpnext/setup/doctype/company/company.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 26298bcc57..c09255d506 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -79,7 +79,7 @@ class Company(Document): if not frappe.local.flags.ignore_chart_of_accounts: self.set_default_accounts() if self.default_cash_account: - self.mode_of_payment() + self.set_mode_of_payment_account() if self.default_currency: frappe.db.set_value("Currency", self.default_currency, "enabled", 1) @@ -166,7 +166,7 @@ class Company(Document): if account: self.db_set(fieldname, account) - def mode_of_payment(self): + def set_mode_of_payment_account(self): cash = frappe.db.get_value('Mode of Payment', {'type': 'Cash'}, 'name') if cash and not frappe.db.get_value('Mode of Payment Account', {'company': self.name}): mode_of_payment = frappe.get_doc('Mode of Payment', cash) From 8d8cba7faa9520be58bb3a81ffb89e627c583f68 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 17:26:22 +0530 Subject: [PATCH 023/287] Validate total advance against grand total considering write off amount --- erpnext/controllers/taxes_and_totals.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index bec57f4efb..40748df630 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -404,11 +404,14 @@ class calculate_taxes_and_totals(object): self.doc.total_advance = flt(total_allocated_amount, self.doc.precision("total_advance")) if self.doc.party_account_currency == self.doc.currency: - invoice_total = self.doc.grand_total - else: - invoice_total = flt(self.doc.grand_total * self.doc.conversion_rate, + invoice_total = flt(self.doc.grand_total - self.write_off_amount, self.doc.precision("grand_total")) - + else: + base_write_off_amount = flt(self.doc.write_off_amount * self.doc.conversion_rate, + self.doc.precision("base_write_off_amount")) + invoice_total = flt(self.doc.grand_total * self.doc.conversion_rate, + self.doc.precision("grand_total")) - base_write_off_amount + if invoice_total > 0 and self.doc.total_advance > invoice_total: frappe.throw(_("Advance amount cannot be greater than {0} {1}") .format(self.doc.party_account_currency, invoice_total)) From 9300013accfa7d2c8dbef1ee33e938fef2d03507 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 17:26:22 +0530 Subject: [PATCH 024/287] Validate total advance against grand total considering write off amount --- erpnext/controllers/taxes_and_totals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 40748df630..45ed3385f5 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -404,7 +404,7 @@ class calculate_taxes_and_totals(object): self.doc.total_advance = flt(total_allocated_amount, self.doc.precision("total_advance")) if self.doc.party_account_currency == self.doc.currency: - invoice_total = flt(self.doc.grand_total - self.write_off_amount, + invoice_total = flt(self.doc.grand_total - self.doc.write_off_amount, self.doc.precision("grand_total")) else: base_write_off_amount = flt(self.doc.write_off_amount * self.doc.conversion_rate, From 6f038bc1f376e6362c994e5e20e09ae60b770d72 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 3 Apr 2017 17:56:05 +0530 Subject: [PATCH 025/287] Validate total advance against grand total considering write off amount --- erpnext/controllers/taxes_and_totals.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 45ed3385f5..0355c269d0 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -404,10 +404,10 @@ class calculate_taxes_and_totals(object): self.doc.total_advance = flt(total_allocated_amount, self.doc.precision("total_advance")) if self.doc.party_account_currency == self.doc.currency: - invoice_total = flt(self.doc.grand_total - self.doc.write_off_amount, + invoice_total = flt(self.doc.grand_total - flt(self.doc.write_off_amount), self.doc.precision("grand_total")) else: - base_write_off_amount = flt(self.doc.write_off_amount * self.doc.conversion_rate, + base_write_off_amount = flt(flt(self.doc.write_off_amount) * self.doc.conversion_rate, self.doc.precision("base_write_off_amount")) invoice_total = flt(self.doc.grand_total * self.doc.conversion_rate, self.doc.precision("grand_total")) - base_write_off_amount From 0d114b4c31b116f4f0a5c521e78a1302495883b1 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Mon, 3 Apr 2017 21:20:53 +0530 Subject: [PATCH 026/287] Add `image` field to fetch in Customer List --- erpnext/selling/doctype/customer/customer_list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/selling/doctype/customer/customer_list.js b/erpnext/selling/doctype/customer/customer_list.js index 09c3e93c1c..38fc9ad1f1 100644 --- a/erpnext/selling/doctype/customer/customer_list.js +++ b/erpnext/selling/doctype/customer/customer_list.js @@ -1,3 +1,3 @@ frappe.listview_settings['Customer'] = { - add_fields: ["customer_name", "territory", "customer_group", "customer_type"], + add_fields: ["customer_name", "territory", "customer_group", "customer_type", "image"], }; From 2861955632cb371cf83899ea51dd3bd6318628eb Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 4 Apr 2017 09:59:29 +0530 Subject: [PATCH 027/287] [fix] Customer edit issue in offline POS --- erpnext/accounts/doctype/sales_invoice/pos.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 59766bd7b2..c659212d20 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -182,6 +182,7 @@ def get_customers_address(customers): address_data = address[0] address_data.update({'full_name': data.customer_name}) customer_address[data.name] = address_data + return customer_address def get_child_nodes(group_type, root): @@ -337,11 +338,14 @@ def add_customer(name): def make_address(args, customer): if not args.get('address_line1'): return - name = args.get('name') or get_customers_address(customer)[customer].get("name") + name = args.get('name') + + if not name: + data = get_customers_address(customer) + name = data[customer].get('name') if data else None if name: - address = frappe.get_doc('Address', name) - frappe.errprint(address) + address = frappe.get_doc('Address', name) else: address = frappe.new_doc('Address') address.country = frappe.db.get_value('Company', args.get('company'), 'country') From 93a990f00650fa988e8ab154dbb965968e37de24 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 4 Apr 2017 12:16:47 +0600 Subject: [PATCH 028/287] bumped to version 8.0.7 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 5b6f359981..881087a311 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.6' +__version__ = '8.0.7' def get_default_company(user=None): '''Get default company for user''' From ba6559c2e950b94fedd6bf2b7e682a2aea0b14d1 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 5 Apr 2017 11:52:23 +0530 Subject: [PATCH 029/287] Route to newsletter listview --- erpnext/schools/doctype/student_batch/student_batch.js | 3 --- erpnext/schools/doctype/student_group/student_group.js | 3 --- 2 files changed, 6 deletions(-) diff --git a/erpnext/schools/doctype/student_batch/student_batch.js b/erpnext/schools/doctype/student_batch/student_batch.js index 7fad5d7894..00b261e3a1 100644 --- a/erpnext/schools/doctype/student_batch/student_batch.js +++ b/erpnext/schools/doctype/student_batch/student_batch.js @@ -14,9 +14,6 @@ frappe.ui.form.on('Student Batch', { }); }); frm.add_custom_button(__("Newsletter"), function() { - frappe.route_options = { - email_group: frm.doc.name - } frappe.set_route("List", "Newsletter"); }); } diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 1dcbc3acfb..595fa08d9d 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -26,9 +26,6 @@ frappe.ui.form.on("Student Group", { }); }); frm.add_custom_button(__("Newsletter"), function() { - frappe.route_options = { - email_group: frm.doc.name - } frappe.set_route("List", "Newsletter"); }); } From ffc807cd57c729b8709ef99b286b7a6f9f1923b9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 5 Apr 2017 12:27:34 +0530 Subject: [PATCH 030/287] [minor] check below posting date in delivery note --- .../crm/doctype/opportunity/opportunity.json | 4 +- .../doctype/delivery_note/delivery_note.json | 62 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json index 90be78190e..3f7a814a53 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.json +++ b/erpnext/crm/doctype/opportunity/opportunity.json @@ -574,7 +574,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, "label": "Territory", "length": 0, @@ -1152,7 +1152,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-12 21:55:21.598112", + "modified": "2017-04-04 01:21:02.165730", "modified_by": "Administrator", "module": "CRM", "name": "Opportunity", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index dc6de955eb..5d544bb6b4 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -287,36 +287,6 @@ "unique": 0, "width": "150px" }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.docstatus==0", - "fieldname": "set_posting_time", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Edit Posting Date and Time", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -385,6 +355,36 @@ "unique": 0, "width": "100px" }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.docstatus==0", + "fieldname": "set_posting_time", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Edit Posting Date and Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -3288,7 +3288,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-29 04:55:45.044810", + "modified": "2017-04-03 03:13:58.051782", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", From 9264313f0e0d2a547059b383744d0cfa12350d7b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 5 Apr 2017 12:48:44 +0530 Subject: [PATCH 031/287] [fix] ordering for Edit Posting Time check --- erpnext/stock/doctype/item/item_list.js | 2 +- .../purchase_receipt/purchase_receipt.json | 62 +++++++++---------- .../doctype/stock_entry/stock_entry.json | 62 +++++++++---------- 3 files changed, 63 insertions(+), 63 deletions(-) diff --git a/erpnext/stock/doctype/item/item_list.js b/erpnext/stock/doctype/item/item_list.js index 40319e506c..cc46177f53 100644 --- a/erpnext/stock/doctype/item/item_list.js +++ b/erpnext/stock/doctype/item/item_list.js @@ -11,7 +11,7 @@ frappe.listview_settings['Item'] = { } else if (doc.end_of_life && doc.end_of_life < frappe.datetime.get_today()) { return [__("Expired"), "grey", "end_of_life,<,Today"]; } else if (doc.has_variants) { - return [__("Template"), "blue", "has_variants,=,Yes"]; + return [__("Template"), "orange", "has_variants,=,Yes"]; } else if (doc.variant_of) { return [__("Variant"), "green", "variant_of,=," + doc.variant_of]; } diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 73367e3fab..4c13a56da6 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -225,36 +225,6 @@ "unique": 0, "width": "50%" }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.docstatus==0", - "fieldname": "set_posting_time", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Edit Posting Date and Time", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -323,6 +293,36 @@ "unique": 0, "width": "100px" }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.docstatus==0", + "fieldname": "set_posting_time", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Edit Posting Date and Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2846,7 +2846,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-14 16:10:58.769483", + "modified": "2017-04-05 03:17:55.726121", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json index a6dd825501..5e73de9dae 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.json +++ b/erpnext/stock/doctype/stock_entry/stock_entry.json @@ -383,36 +383,6 @@ "unique": 0, "width": "50%" }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.docstatus==0", - "fieldname": "set_posting_time", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Edit Posting Date and Time", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -476,6 +446,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.docstatus==0", + "fieldname": "set_posting_time", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Edit Posting Date and Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -1654,7 +1654,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-14 16:11:11.741704", + "modified": "2017-04-05 03:18:05.437204", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry", From 08a42e00ae0679476235ba7332342806acc4a3b0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 5 Apr 2017 12:59:10 +0530 Subject: [PATCH 032/287] [fix] salary slip eval, remove access to globals, #8313 --- erpnext/hr/doctype/salary_slip/salary_slip.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index a4d6460a35..6840f2503c 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -76,7 +76,7 @@ class SalarySlip(TransactionBase): def eval_condition_and_formula(self, d, data): try: if d.condition: - if not eval(d.condition, None, data): + if not eval(d.condition, {}, data): return None amount = d.amount if d.amount_based_on_formula: From faf51d91b656bfbe820b91ab332a4c81ed02ffcc Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 4 Apr 2017 11:35:22 +0530 Subject: [PATCH 033/287] [fix] stock qty issue in purchase trends report --- erpnext/controllers/trends.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/erpnext/controllers/trends.py b/erpnext/controllers/trends.py index c5db2239b3..23bc531cf0 100644 --- a/erpnext/controllers/trends.py +++ b/erpnext/controllers/trends.py @@ -140,16 +140,20 @@ def period_wise_columns_query(filters, trans): else: trans_date = 'transaction_date' + qty_field = "t2.stock_qty" + if trans == 'Purchase Invoice': + qty_field = "t2.qty" + if filters.get("period") != 'Yearly': for dt in bet_dates: get_period_wise_columns(dt, filters.get("period"), pwc) - query_details = get_period_wise_query(dt, trans_date, query_details) + query_details = get_period_wise_query(dt, trans_date, query_details, qty_field) else: pwc = [_(filters.get("fiscal_year")) + " ("+_("Qty") + "):Float:120", _(filters.get("fiscal_year")) + " ("+ _("Amt") + "):Currency:120"] - query_details = " SUM(t2.stock_qty), SUM(t2.base_net_amount)," + query_details = " SUM(%s), SUM(t2.base_net_amount),"%(qty_field) - query_details += 'SUM(t2.stock_qty), SUM(t2.base_net_amount)' + query_details += 'SUM(%s), SUM(t2.base_net_amount)'%(qty_field) return pwc, query_details def get_period_wise_columns(bet_dates, period, pwc): @@ -160,10 +164,10 @@ def get_period_wise_columns(bet_dates, period, pwc): pwc += [_(get_mon(bet_dates[0])) + "-" + _(get_mon(bet_dates[1])) + " (" + _("Qty") + "):Float:120", _(get_mon(bet_dates[0])) + "-" + _(get_mon(bet_dates[1])) + " (" + _("Amt") + "):Currency:120"] -def get_period_wise_query(bet_dates, trans_date, query_details): - query_details += """SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', t2.stock_qty, NULL)), +def get_period_wise_query(bet_dates, trans_date, query_details, qty_field): + query_details += """SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', %(qty_field)s, NULL)), SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', t2.base_net_amount, NULL)), - """ % {"trans_date": trans_date, "sd": bet_dates[0],"ed": bet_dates[1]} + """ % {"trans_date": trans_date, "sd": bet_dates[0],"ed": bet_dates[1], "qty_field": qty_field} return query_details @frappe.whitelist(allow_guest=True) From fc11fce990d5aa3b8fff8e7f50fc249cce680a29 Mon Sep 17 00:00:00 2001 From: Javier Wong Date: Thu, 6 Apr 2017 17:26:44 +0800 Subject: [PATCH 034/287] [enhancement] Changed Issue Description and Resolution to Text Editor (#8346) --- erpnext/support/doctype/issue/issue.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/support/doctype/issue/issue.json b/erpnext/support/doctype/issue/issue.json index 476e3a8159..6ee0e85b5d 100644 --- a/erpnext/support/doctype/issue/issue.json +++ b/erpnext/support/doctype/issue/issue.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, "autoname": "naming_series:", @@ -285,7 +286,7 @@ "columns": 0, "depends_on": "", "fieldname": "description", - "fieldtype": "Text", + "fieldtype": "Text Editor", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -607,7 +608,7 @@ "columns": 0, "depends_on": "eval:!doc.__islocal", "fieldname": "resolution_details", - "fieldtype": "Small Text", + "fieldtype": "Text Editor", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -808,18 +809,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-ticket", "idx": 7, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-20 13:32:31.898423", + "modified": "2017-04-05 21:42:23.740187", "modified_by": "Administrator", "module": "Support", "name": "Issue", From d681c88d798597e14d95b837a6f1fc21db0d327b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 6 Apr 2017 13:09:40 +0530 Subject: [PATCH 035/287] validate returned qty only if there is reference qty --- .../controllers/sales_and_purchase_return.py | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 4ea2a5f341..d8f28af1d6 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -106,24 +106,25 @@ def validate_returned_items(doc): def validate_quantity(doc, args, ref, valid_items, already_returned_items): fields = ['qty'] - if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: + if doc.doctype in ['Purchase Receipt', 'Purchase Invoice']: 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 + returned_qty = flt(already_returned_data.get(column, 0)) if len(already_returned_data) > 0 else 0 + reference_qty = ref.get(column) + max_returnable_qty = flt(reference_qty) - returned_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) + if reference_qty: + if flt(args.get(column)) > 0: + frappe.throw(_("{0} must be negative in return document").format(label)) + elif returned_qty >= reference_qty and args.get(column): + frappe.throw(_("Item {0} has already been returned") + .format(args.item_code), StockOverReturnError) + elif abs(args.get(column)) > max_returnable_qty: + frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}") + .format(args.idx, reference_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 From aa6f00c403a115877ff43f329f1b4eaec8e8f320 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Thu, 6 Apr 2017 12:38:13 +0530 Subject: [PATCH 036/287] Added default 'All' option to filters to differentiate all and empty filter --- .../employee_attendance_tool.js | 1 + .../employee_attendance_tool.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js index de8e17c366..c0c0ef0fe0 100644 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +++ b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js @@ -4,6 +4,7 @@ frappe.ui.form.on("Employee Attendance Tool", { }, onload: function(frm) { + frm.doc.department = frm.doc.branch = frm.doc.company = "All"; frm.set_value("date", get_today()); erpnext.employee_attendance_tool.load_employees(frm); }, diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py index 7438737028..6ddb722c1b 100644 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py +++ b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py @@ -13,11 +13,18 @@ class EmployeeAttendanceTool(Document): @frappe.whitelist() -def get_employees(date, department=None, branch=None, company=None): +def get_employees(date, department = None, branch = None, company = None): attendance_not_marked = [] attendance_marked = [] - employee_list = frappe.get_list("Employee", fields=["employee", "employee_name"], filters={ - "status": "Active", "department": department, "branch": branch, "company": company}, order_by="employee_name") + filters = {"status": "Active"} + if department != "All": + filters["department"] = department + if branch != "All": + filters["branch"] = branch + if company != "All": + filters["company"] = company + + employee_list = frappe.get_list("Employee", fields=["employee", "employee_name"], filters=filters, order_by="employee_name") marked_employee = {} for emp in frappe.get_list("Attendance", fields=["employee", "status"], filters={"attendance_date": date}): From a906b3f11c81c5488554f7e631f1157fd3ed0ade Mon Sep 17 00:00:00 2001 From: Makis Etzoglou Date: Thu, 30 Mar 2017 10:39:29 +0300 Subject: [PATCH 037/287] add delivery date to print format Fix #8111 --- erpnext/selling/doctype/sales_order/sales_order.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index b118e5565d..36af20fe4c 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -371,7 +371,7 @@ "oldfieldname": "delivery_date", "oldfieldtype": "Date", "permlevel": 0, - "print_hide": 1, + "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, "remember_last_selected_value": 0, @@ -3516,7 +3516,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-29 04:38:25.247179", + "modified": "2017-03-30 03:23:30.487992", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", From 0d230afd22485f349938359ee1e84563a23cfc48 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 6 Apr 2017 17:02:03 +0600 Subject: [PATCH 038/287] bumped to version 8.0.8 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 881087a311..9d3e162d11 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.7' +__version__ = '8.0.8' def get_default_company(user=None): '''Get default company for user''' From 93656417774c8b48e1d9bc18225e1547e00982e4 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 6 Apr 2017 18:24:34 +0530 Subject: [PATCH 039/287] [added] frappe.safe_eval --- erpnext/controllers/status_updater.py | 4 ++-- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 ++-- erpnext/stock/doctype/stock_entry/test_stock_entry.py | 10 +++++----- erpnext/templates/pages/demo.html | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 55bcaf387f..0421580563 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt, comma_or, nowdate, getdate +from frappe.utils import flt, comma_or from frappe import _ from frappe.model.document import Document @@ -119,7 +119,7 @@ class StatusUpdater(Document): self.status = s[0] break elif s[1].startswith("eval:"): - if eval(s[1][5:]): + if frappe.safe_eval(s[1][5:]): self.status = s[0] break elif getattr(self, s[1])(): diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 6840f2503c..afd45b5367 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -76,12 +76,12 @@ class SalarySlip(TransactionBase): def eval_condition_and_formula(self, d, data): try: if d.condition: - if not eval(d.condition, {}, data): + if not frappe.safe_eval(d.condition, None, data): return None amount = d.amount if d.amount_based_on_formula: if d.formula: - amount = eval(d.formula, None, data) + amount = frappe.safe_eval(d.formula, None, data) if amount: data[d.abbr] = amount diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index 79df591349..b16dee940d 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -44,30 +44,30 @@ class TestStockEntry(unittest.TestCase): make_stock_entry(item_code=item_code, target=warehouse, qty=1, basic_rate=10) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] - self.assertEqual([[1, 10]], eval(sle.stock_queue)) + self.assertEqual([[1, 10]], frappe.safe_eval(sle.stock_queue)) # negative qty make_stock_entry(item_code=item_code, source=warehouse, qty=2, basic_rate=10) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] - self.assertEqual([[-1, 10]], eval(sle.stock_queue)) + self.assertEqual([[-1, 10]], frappe.safe_eval(sle.stock_queue)) # further negative make_stock_entry(item_code=item_code, source=warehouse, qty=1) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] - self.assertEqual([[-2, 10]], eval(sle.stock_queue)) + self.assertEqual([[-2, 10]], frappe.safe_eval(sle.stock_queue)) # move stock to positive make_stock_entry(item_code=item_code, target=warehouse, qty=3, basic_rate=20) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] - self.assertEqual([[1, 20]], eval(sle.stock_queue)) + self.assertEqual([[1, 20]], frappe.safe_eval(sle.stock_queue)) # incoming entry with diff rate make_stock_entry(item_code=item_code, target=warehouse, qty=1, basic_rate=30) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] - self.assertEqual([[1, 20],[1, 30]], eval(sle.stock_queue)) + self.assertEqual([[1, 20],[1, 30]], frappe.safe_eval(sle.stock_queue)) frappe.db.set_default("allow_negative_stock", 0) diff --git a/erpnext/templates/pages/demo.html b/erpnext/templates/pages/demo.html index 108319fcf1..f94a7c4591 100644 --- a/erpnext/templates/pages/demo.html +++ b/erpnext/templates/pages/demo.html @@ -44,7 +44,7 @@ $(document).ready(function() { {% endblock %} {% block title %} -{{ _("Login") }} +{{ _("ERPNext Demo") }} {% endblock %} {% block page_content %} From b58979fd3e2d1fbb33b7370fb93b8bc97d04272a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 6 Apr 2017 18:58:39 +0530 Subject: [PATCH 040/287] [added] frappe.safe_eval --- erpnext/controllers/status_updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 0421580563..f3019bf4d9 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -119,7 +119,7 @@ class StatusUpdater(Document): self.status = s[0] break elif s[1].startswith("eval:"): - if frappe.safe_eval(s[1][5:]): + if eval(s[1][5:]): self.status = s[0] break elif getattr(self, s[1])(): From 4782e8b7516bbb7577ef060d105a3b16e03bd5c2 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 7 Apr 2017 06:46:16 -0500 Subject: [PATCH 041/287] [minor] added safe_eval for status_updater and added getdate and nowdate (#8365) --- 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 f3019bf4d9..d58ba4b841 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt, comma_or +from frappe.utils import flt, comma_or, nowdate, getdate from frappe import _ from frappe.model.document import Document @@ -119,7 +119,7 @@ class StatusUpdater(Document): self.status = s[0] break elif s[1].startswith("eval:"): - if eval(s[1][5:]): + if frappe.safe_eval(s[1][5:], None, { "self": self.as_dict(), "getdate": getdate, "nowdate": nowdate }): self.status = s[0] break elif getattr(self, s[1])(): From 29ee26309388891a9a89379f3a3576ea32d9a573 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 10 Apr 2017 13:09:04 +0530 Subject: [PATCH 042/287] Fix in student attendacne tool --- .../doctype/student_attendance_tool/student_attendance_tool.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js index fd37a15578..3b0022fa0d 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js @@ -127,6 +127,8 @@ schools.StudentsEditor = Class.extend({ function() { //ifyes frappe.call({ method: "erpnext.schools.api.mark_attendance", + freeze: true, + freeze_message: "Marking attendance", args: { "students_present": students_present, "students_absent": students_absent, From 236f7aac7f60d0868877960990fc0d8101a670c5 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Mon, 10 Apr 2017 12:26:24 +0530 Subject: [PATCH 043/287] [minor] track changes for transaction documents --- erpnext/accounts/doctype/journal_entry/journal_entry.json | 7 ++++--- erpnext/accounts/doctype/payment_entry/payment_entry.json | 4 ++-- .../doctype/purchase_invoice/purchase_invoice.json | 4 ++-- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 4 ++-- erpnext/hr/doctype/expense_claim/expense_claim.json | 2 +- erpnext/manufacturing/doctype/bom/bom.json | 7 ++++--- .../doctype/production_order/production_order.json | 6 +++--- erpnext/selling/doctype/sales_order/sales_order.json | 4 ++-- erpnext/stock/doctype/delivery_note/delivery_note.json | 4 ++-- .../stock/doctype/purchase_receipt/purchase_receipt.json | 4 ++-- erpnext/stock/doctype/stock_entry/stock_entry.json | 4 ++-- 11 files changed, 26 insertions(+), 24 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json index deb252c0d5..fb93121a4c 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.json +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", @@ -1325,19 +1326,19 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-file-text", "idx": 176, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-02-17 16:17:48.991851", + "modified": "2017-04-10 12:07:44.599804", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry", @@ -1412,6 +1413,6 @@ "sort_field": "modified", "sort_order": "DESC", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json index 7fac377c02..7c6ed84b80 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.json +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json @@ -1675,7 +1675,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-14 17:12:48.816644", + "modified": "2017-04-10 12:06:22.176045", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Entry", @@ -1730,6 +1730,6 @@ "sort_field": "modified", "sort_order": "DESC", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 26c4fa9cca..6b97cdb0b3 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -3646,7 +3646,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-15 14:29:51.957287", + "modified": "2017-04-10 12:05:28.082020", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", @@ -3762,6 +3762,6 @@ "sort_order": "DESC", "timeline_field": "supplier", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ 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 df2f34da3b..35174ec4a0 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -4417,7 +4417,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-29 05:09:56.656338", + "modified": "2017-04-10 12:03:47.510384", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", @@ -4513,6 +4513,6 @@ "sort_order": "DESC", "timeline_field": "customer", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json index 5b41154919..6f74388a96 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.json +++ b/erpnext/hr/doctype/expense_claim/expense_claim.json @@ -934,7 +934,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-08 06:28:46.142302", + "modified": "2017-04-10 12:15:20.363859", "modified_by": "Administrator", "module": "HR", "name": "Expense Claim", diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index 9fa2a81701..c42403c010 100644 --- a/erpnext/manufacturing/doctype/bom/bom.json +++ b/erpnext/manufacturing/doctype/bom/bom.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "beta": 0, @@ -1574,18 +1575,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-sitemap", "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-21 13:10:27.394012", + "modified": "2017-04-10 12:13:59.630780", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM", @@ -1659,6 +1660,6 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 79ef969baf..882833fe7d 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -1316,7 +1316,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-28 19:19:08.559879", + "modified": "2017-04-10 12:13:09.312186", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", @@ -1369,6 +1369,6 @@ "show_name_in_global_search": 0, "sort_order": "ASC", "title_field": "production_item", - "track_changes": 0, + "track_changes": 1, "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 36af20fe4c..950150fd36 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -3516,7 +3516,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-30 03:23:30.487992", + "modified": "2017-04-10 12:13:03.136885", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", @@ -3652,6 +3652,6 @@ "sort_order": "DESC", "timeline_field": "customer", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 5d544bb6b4..9d3bbf48f6 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -3288,7 +3288,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-03 03:13:58.051782", + "modified": "2017-04-10 12:03:29.645642", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", @@ -3404,6 +3404,6 @@ "sort_order": "DESC", "timeline_field": "customer", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 4c13a56da6..3877028378 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -2846,7 +2846,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-05 03:17:55.726121", + "modified": "2017-04-10 12:02:07.434102", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", @@ -2962,6 +2962,6 @@ "sort_order": "DESC", "timeline_field": "supplier", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json index 5e73de9dae..b33c6b4149 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.json +++ b/erpnext/stock/doctype/stock_entry/stock_entry.json @@ -1654,7 +1654,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-05 03:18:05.437204", + "modified": "2017-04-10 12:01:40.888115", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry", @@ -1749,6 +1749,6 @@ "sort_field": "modified", "sort_order": "DESC", "title_field": "title", - "track_changes": 0, + "track_changes": 1, "track_seen": 0 } \ No newline at end of file From 3fc3305251162108183e5348b961c0ebee31700f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 11 Apr 2017 16:00:48 +0530 Subject: [PATCH 044/287] bom traversing: argument mutable issue --- erpnext/manufacturing/doctype/bom/bom.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index abb2817e4f..b8a8ae8aea 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -281,12 +281,15 @@ class BOM(WebsiteGenerator): return bom_list - def traverse_tree(self, bom_list=[]): + def traverse_tree(self, bom_list=None): def _get_children(bom_no): return [cstr(d[0]) for d in frappe.db.sql("""select bom_no from `tabBOM Item` where parent = %s and ifnull(bom_no, '') != ''""", bom_no)] count = 0 + if not bom_list: + bom_list = [] + if self.name not in bom_list: bom_list.append(self.name) From e0271a8331645f7e6a0af3e8ce9ee9680836310c Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 11 Apr 2017 17:35:25 +0530 Subject: [PATCH 045/287] [minor] ReferenceError:doc fixes for delivery note --- erpnext/stock/doctype/delivery_note/delivery_note.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 5d4537e44a..5236031e6d 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -39,7 +39,7 @@ frappe.ui.form.on("Delivery Note", { }); if (sys_defaults.auto_accounting_for_stock) { - frm.set_query('expense_account', 'items', function(frm) { + frm.set_query('expense_account', 'items', function(doc, cdt, cdn) { return { filters: { "report_type": "Profit and Loss", @@ -49,7 +49,7 @@ frappe.ui.form.on("Delivery Note", { } }); - frm.set_query('cost_center', 'items', function(frm) { + frm.set_query('cost_center', 'items', function(doc, cdt, cdn) { return { filters: { 'company': doc.company, From 075b299673122ad7f1bce3f18a09095a0657af90 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 11 Apr 2017 16:00:48 +0530 Subject: [PATCH 046/287] bom traversing: argument mutable issue --- erpnext/manufacturing/doctype/bom/bom.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index abb2817e4f..b8a8ae8aea 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -281,12 +281,15 @@ class BOM(WebsiteGenerator): return bom_list - def traverse_tree(self, bom_list=[]): + def traverse_tree(self, bom_list=None): def _get_children(bom_no): return [cstr(d[0]) for d in frappe.db.sql("""select bom_no from `tabBOM Item` where parent = %s and ifnull(bom_no, '') != ''""", bom_no)] count = 0 + if not bom_list: + bom_list = [] + if self.name not in bom_list: bom_list.append(self.name) From 9b9777be3fefe8c503c46e4d3535cd38ea454bc6 Mon Sep 17 00:00:00 2001 From: Dominik Ottenbreit Date: Tue, 11 Apr 2017 14:14:22 +0200 Subject: [PATCH 047/287] Fix mistranslation "Lieferantennauftrag" -> "Bestellung" There is the strange term of "Lieferantenauftrag" that has been used for "Purchase Order" which translates to "Supplier Order". This is not standard at all and should be fixed to "Bestellung". A Google search for "Bestellung" returns 97 million results, a search for "Lieferantenauftrag" returns 972 results so it should be clear what is standard. --- erpnext/translations/de.csv | 68 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 95d28377dc..d5d65ac6a4 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -49,7 +49,7 @@ apps/erpnext/erpnext/templates/includes/cart/cart_dropdown.html +18,Checkout,Aus apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +179,Accural Journal Entry Submitted,Accural Journal Entry Eingereicht DocType: Pricing Rule,Apply On,Anwenden auf DocType: Item Price,Multiple Item prices.,Mehrere verschiedene Artikelpreise -,Purchase Order Items To Be Received,Eingehende Lieferantenauftrags-Artikel +,Purchase Order Items To Be Received,Eingehende Bestellungs-Artikel DocType: SMS Center,All Supplier Contact,Alle Lieferantenkontakte DocType: Support Settings,Support Settings,Support-Einstellungen DocType: SMS Parameter,Parameter,Parameter @@ -325,7 +325,7 @@ apps/erpnext/erpnext/stock/doctype/item/item.py +710,Item {0} is cancelled,Artik apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +877,Material Request,Materialanfrage DocType: Bank Reconciliation,Update Clearance Date,Abwicklungsdatum aktualisieren DocType: Item,Purchase Details,Einkaufsdetails -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +348,Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1},"Artikel {0} in Tabelle ""Rohmaterialien geliefert"" des Lieferantenauftrags {1} nicht gefunden" +apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +348,Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1},"Artikel {0} in Tabelle ""Rohmaterialien geliefert"" der Bestellung {1} nicht gefunden" DocType: Employee,Relation,Beziehung DocType: Shipping Rule,Worldwide Shipping,Weltweiter Versand DocType: Student Guardian,Mother,Mutter @@ -784,7 +784,7 @@ The tax rate you define here will be the standard tax rate for all **Items**. If #### Description of Columns -1. Calculation Type: +1. Calculation Type: - This can be on **Net Total** (that is the sum of basic amount). - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - **Actual** (as mentioned). @@ -795,15 +795,15 @@ The tax rate you define here will be the standard tax rate for all **Items**. If 6. Amount: Tax amount. 7. Total: Cumulative total to this point. 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). -9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. +9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. - #### Hinweis + #### Hinweis Der Steuersatz, den sie hier definieren, wird der Standardsteuersatz für alle Artikel. Wenn es Artikel mit davon abweichenden Steuersätzen gibt, müssen diese in der Tabelle ""Artikelsteuer"" im Artikelstamm hinzugefügt werden. - #### Beschreibung der Spalten + #### Beschreibung der Spalten -1. Berechnungsart: +1. Berechnungsart: - Dies kann sein ""Auf Nettosumme"" (das ist die Summe der Grundbeträge). - ""Auf vorherige Zeilensumme/-Betrag"" (für kumulative Steuern oder Abgaben). Wenn diese Option ausgewählt wird, wird die Steuer als Prozentsatz der vorherigen Zeilesumme/des vorherigen Zeilenbetrags (in der Steuertabelle) angewendet. - ""Unmittelbar"" (wie bereits erwähnt). @@ -890,7 +890,7 @@ DocType: Production Order,Item To Manufacture,Zu fertigender Artikel apps/erpnext/erpnext/buying/doctype/purchase_common/purchase_common.py +81,{0} {1} status is {2},{0} {1} Status ist {2} DocType: Employee,Provide Email Address registered in company,Geben Sie E-Mail-Adresse in Unternehmen registriert DocType: Shopping Cart Settings,Enable Checkout,Aktivieren Kasse -apps/erpnext/erpnext/config/learn.py +202,Purchase Order to Payment,Vom Lieferantenauftrag zur Zahlung +apps/erpnext/erpnext/config/learn.py +202,Purchase Order to Payment,Von Bestellung zur Zahlung apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +48,Projected Qty,Geplante Menge DocType: Sales Invoice,Payment Due Date,Zahlungsstichtag apps/erpnext/erpnext/stock/doctype/item/item.js +340,Item Variant {0} already exists with same attributes,Artikelvariante {0} mit denselben Attributen existiert bereits @@ -1002,7 +1002,7 @@ apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +642,"For ' DocType: Job Opening,Publish on website,Veröffentlichen Sie auf der Website apps/erpnext/erpnext/config/stock.py +17,Shipments to customers.,Lieferungen an Kunden apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +623,Supplier Invoice Date cannot be greater than Posting Date,Lieferant Rechnungsdatum kann nicht größer sein als Datum der Veröffentlichung -DocType: Purchase Invoice Item,Purchase Order Item,Lieferantenauftrags-Artikel +DocType: Purchase Invoice Item,Purchase Order Item,Bestell-Artikel apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +130,Indirect Income,Indirekte Erträge DocType: Student Attendance Tool,Student Attendance Tool,Schülerteilnahme Werkzeug DocType: Cheque Print Template,Date Settings,Datums-Einstellungen @@ -1017,10 +1017,10 @@ DocType: Selling Settings,Allow user to edit Price List Rate in transactions,"Be DocType: Pricing Rule,Max Qty,Maximalmenge apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +30,"Row {0}: Invoice {1} is invalid, it might be cancelled / does not exist. \ Please enter a valid Invoice","Row {0}: Rechnung {1} ist ungültig, könnte es abgebrochen werden / nicht vorhanden. \ Bitte geben Sie eine gültige Rechnung" -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +120,Row {0}: Payment against Sales/Purchase Order should always be marked as advance,"Zeile {0}: ""Zahlung zu Kunden-/Lieferantenauftrag"" sollte immer als ""Vorkasse"" eingestellt werden" +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +120,Row {0}: Payment against Sales/Purchase Order should always be marked as advance,"Zeile {0}: ""Zahlung zu Kundenauftrag / Bestellung"" sollte immer als ""Vorkasse"" eingestellt werden" apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +16,Chemical,Chemische Industrie DocType: Salary Component Account,Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.,"Standard Bank / Geldkonto wird automatisch in Gehalts Journal Entry aktualisiert werden, wenn dieser Modus ausgewählt ist." -apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades. +apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades. Please check intervals {0} and {1} and try again",Die Intervalle für Grade-Code {0} überlappt mit der Note Intervalle für andere Typen. Bitte überprüfen Sie Intervalle {0} und {1} und versuchen Sie es erneut DocType: BOM,Raw Material Cost(Company Currency),Rohstoffkosten (Gesellschaft Währung) apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +715,All items have already been transferred for this Production Order.,Alle Artikel wurden schon für diesen Fertigungsauftrag übernommen. @@ -1290,7 +1290,7 @@ apps/erpnext/erpnext/stock/doctype/item/item.py +179,Website Image should be a p DocType: Student Applicant,AP,AP DocType: Purchase Invoice Item,BOM,Stückliste apps/erpnext/erpnext/setup/doctype/item_group/item_group.js +37,This is a root item group and cannot be edited.,Dies ist eine Root-Artikelgruppe und kann nicht bearbeitet werden. -DocType: Journal Entry Account,Purchase Order,Lieferantenauftrag +DocType: Journal Entry Account,Purchase Order,Bestellung DocType: Vehicle,Fuel UOM,Kraftstoff UOM DocType: Warehouse,Warehouse Contact Info,Kontaktinformation des Lager DocType: Payment Entry,Write Off Difference Amount,Write Off Differenzbetrag @@ -1541,7 +1541,7 @@ DocType: Sales Partner,Sales Partner Target,Vertriebspartner-Ziel DocType: Loan Type,Maximum Loan Amount,Maximale Darlehensbetrag DocType: Pricing Rule,Pricing Rule,Preisregel DocType: Budget,Action if Annual Budget Exceeded,Erwünschte Aktion bei überschrittenem jährlichem Budget -apps/erpnext/erpnext/config/learn.py +197,Material Request to Purchase Order,Von der Materialanfrage zum Lieferantenauftrag +apps/erpnext/erpnext/config/learn.py +197,Material Request to Purchase Order,Von der Materialanfrage zur Bestellung DocType: Shopping Cart Settings,Payment Success URL,Payment Success URL apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +80,Row # {0}: Returned Item {1} does not exists in {2} {3},Zeile # {0}: Zurückgegebener Artikel {1} existiert nicht in {2} {3} DocType: Purchase Receipt,PREC-,PREC- @@ -1552,7 +1552,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar DocType: C-Form,III,III apps/erpnext/erpnext/config/stock.py +305,Opening Stock Balance,Eröffnungsbestände apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +58,{0} must appear only once,{0} darf nur einmal vorkommen -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +359,Not allowed to tranfer more {0} than {1} against Purchase Order {2},Übertragung von mehr {0} als {1} mit Lieferantenauftrag {2} nicht erlaubt +apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +359,Not allowed to tranfer more {0} than {1} against Purchase Order {2},Übertragung von mehr {0} als {1} gegen Bestellung {2} nicht erlaubt apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py +59,Leaves Allocated Successfully for {0},Erfolgreich zugewiesene Abwesenheiten für {0} apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +40,No Items to pack,Keine Artikel zum Verpacken DocType: Shipping Rule Condition,From Value,Von-Wert @@ -1730,7 +1730,7 @@ DocType: Employee,Leave Encashed?,Urlaub eingelöst? apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +32,Opportunity From field is mandatory,"Feld ""Chance von"" ist zwingend erforderlich" DocType: Email Digest,Annual Expenses,Jährliche Kosten DocType: Item,Variants,Varianten -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +994,Make Purchase Order,Lieferantenauftrag erstellen +apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +994,Make Purchase Order,Bestellung erstellen DocType: SMS Center,Send To,Senden an apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +152,There is not enough leave balance for Leave Type {0},Es gibt nicht genügend verfügbaren Urlaub für Urlaubstyp {0} DocType: Payment Reconciliation Payment,Allocated amount,Zugewiesene Menge @@ -2333,7 +2333,7 @@ apps/erpnext/erpnext/public/js/financial_statements.js +82,End Year,Ende Jahr apps/erpnext/erpnext/hr/doctype/employee/employee.py +119,Contract End Date must be greater than Date of Joining,Vertragsende muss weiter in der Zukunft liegen als Eintrittsdatum sein DocType: Delivery Note,DN-,DN- DocType: Sales Partner,A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.,"Ein Drittanbieter/Händler/Kommissionär/verbundenes Unternehmen/Wiederverkäufer, der die Produkte auf Provisionsbasis verkauft." -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +364,{0} against Purchase Order {1},{0} zu Lieferantenauftrag {1} +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +364,{0} against Purchase Order {1},{0} zu Bestellung {1} DocType: SMS Settings,"Enter static url parameters here (Eg. sender=ERPNext, username=ERPNext, password=1234 etc.)","Statische URL-Parameter hier eingeben (z. B. Absender=ERPNext, Benutzername=ERPNext, Passwort=1234 usw.)" DocType: Task,Actual Start Date (via Time Sheet),Das tatsächliche Startdatum (durch Zeiterfassung) apps/erpnext/erpnext/portal/doctype/homepage/homepage.py +15,This is an example website auto-generated from ERPNext,"Dies ist eine Beispiel-Webseite, von ERPNext automatisch generiert" @@ -2346,7 +2346,7 @@ The tax rate you define here will be the standard tax rate for all **Items**. If #### Description of Columns -1. Calculation Type: +1. Calculation Type: - This can be on **Net Total** (that is the sum of basic amount). - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - **Actual** (as mentioned). @@ -2358,15 +2358,15 @@ The tax rate you define here will be the standard tax rate for all **Items**. If 7. Total: Cumulative total to this point. 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). 9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. -10. Add or Deduct: Whether you want to add or deduct the tax.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. +10. Add or Deduct: Whether you want to add or deduct the tax.","Standard-Steuer-Vorlage, die für alle Kauftransaktionen angewandt werden kann. Diese Vorlage kann eine Liste der Steuern und auch anderer Kosten wie ""Versand"", ""Versicherung"", ""Handhabung"" usw. enthalten. - #### Hinweis + #### Hinweis Der Steuersatz, den sie hier definieren, wird der Standardsteuersatz für alle Artikel. Wenn es Artikel mit davon abweichenden Steuersätzen gibt, müssen diese in der Tabelle ""Artikelsteuer"" im Artikelstamm hinzugefügt werden. - #### Beschreibung der Spalten + #### Beschreibung der Spalten -1. Berechnungsart: +1. Berechnungsart: - Dies kann sein ""Auf Nettosumme"" (das ist die Summe der Grundbeträge). - ""Auf vorherige Zeilensumme/-Betrag"" (für kumulative Steuern oder Abgaben). Wenn diese Option ausgewählt wird, wird die Steuer als Prozentsatz der vorherigen Zeilesumme/des vorherigen Zeilenbetrags (in der Steuertabelle) angewendet. - ""Unmittelbar"" (wie bereits erwähnt). @@ -2480,7 +2480,7 @@ apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +79,Row {0}: UOM C apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +17,Ref,Ref. DocType: Budget,Cost Center,Kostenstelle apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +36,Voucher #,Beleg # -DocType: Notification Control,Purchase Order Message,Lieferantenauftrags-Nachricht +DocType: Notification Control,Purchase Order Message,Bestellungs-Nachricht DocType: Tax Rule,Shipping Country,Zielland der Lieferung DocType: Selling Settings,Hide Customer's Tax Id from Sales Transactions,Ausblenden Kundensteuernummer aus Verkaufstransaktionen DocType: Upload Attendance,Upload HTML,HTML hochladen @@ -2490,7 +2490,7 @@ DocType: Serial No,Warehouse can only be changed via Stock Entry / Delivery Note DocType: Employee Education,Class / Percentage,Klasse / Anteil apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +96,Head of Marketing and Sales,Leiter Marketing und Vertrieb apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +34,Income Tax,Einkommensteuer -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +15,"If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.","Wenn für ""Preis"" eine Preisregel ausgewählt wurde, wird die Preisliste überschrieben. Der Preis aus der Preisregel ist der endgültige Preis, es sollte also kein weiterer Rabatt gewährt werden. Daher wird er in Transaktionen wie Kundenauftrag, Lieferantenauftrag etc., vorrangig aus dem Feld ""Preis"" gezogen, und dann erst aus dem Feld ""Preisliste""." +apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +15,"If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.","Wenn für ""Preis"" eine Preisregel ausgewählt wurde, wird die Preisliste überschrieben. Der Preis aus der Preisregel ist der endgültige Preis, es sollte also kein weiterer Rabatt gewährt werden. Daher wird er in Transaktionen wie Kundenauftrag, Bestellung etc., vorrangig aus dem Feld ""Preis"" gezogen, und dann erst aus dem Feld ""Preisliste""." apps/erpnext/erpnext/config/selling.py +174,Track Leads by Industry Type.,Leads nach Branchentyp nachverfolgen DocType: Item Supplier,Item Supplier,Artikellieferant apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +423,Please enter Item Code to get batch no,Bitte die Artikelnummer eingeben um die Chargennummer zu erhalten @@ -2580,7 +2580,7 @@ Examples: 1. Ways of addressing disputes, indemnity, liability, etc. 1. Address and Contact of your Company.","Allgemeine Geschäftsbedingungen, die bei Ver- und Einkäufen verwendet werden können. - Beispiele: + Beispiele: 1. Gültigkeit des Angebots. 2. Zahlungsbedingungen (Vorkasse, auf Rechnung, Teilweise Vorkasse usw.) @@ -2589,7 +2589,7 @@ Examples: 5. Garantie, falls vorhanden. 6. Rückgabebedingungen. 7. Lieferbedingungen, falls zutreffend. -8. Beschwerdemanagement, Schadensersatz, Haftung usw. +8. Beschwerdemanagement, Schadensersatz, Haftung usw. 9. Adresse und Kontaktdaten des Unternehmens." DocType: Attendance,Leave Type,Urlaubstyp DocType: Purchase Invoice,Supplier Invoice Details,Lieferant Rechnungsdetails @@ -2879,7 +2879,7 @@ DocType: Lead,Lower Income,Niedrigeres Einkommen apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +160,Source and target warehouse cannot be same for row {0},Ausgangs- und Eingangslager können nicht gleich sein für die Zeile {0} apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +243,"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry","Differenzkonto muss ein Vermögens-/Verbindlichkeiten-Konto sein, da dieser Lagerabgleich eine Eröffnungsbuchung ist" apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.py +107,Disbursed Amount cannot be greater than Loan Amount {0},Zahlter Betrag kann nicht größer sein als Darlehensbetrag {0} -apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +86,Purchase Order number required for Item {0},Lieferantenauftragsnummer ist für den Artikel {0} erforderlich +apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +86,Purchase Order number required for Item {0},Bestellnummer ist für den Artikel {0} erforderlich apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +871,Production Order not created,Fertigungsauftrag nicht erstellt apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +18,'From Date' must be after 'To Date',"""Von-Datum"" muss nach ""Bis-Datum"" liegen" apps/erpnext/erpnext/schools/doctype/student_applicant/student_applicant.py +29,Cannot change status as student {0} is linked with student application {1},Kann nicht den Status als Student ändern {0} ist mit Studenten Anwendung verknüpft {1} @@ -2986,7 +2986,7 @@ DocType: Lead,From Customer,Von Kunden apps/erpnext/erpnext/demo/setup/setup_data.py +314,Calls,Anrufe DocType: Project,Total Costing Amount (via Time Logs),Gesamtkostenbetrag (über Zeitprotokolle) DocType: Purchase Order Item Supplied,Stock UOM,Lagermaßeinheit -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +226,Purchase Order {0} is not submitted,Lieferantenauftrag {0} wurde nicht übertragen +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +226,Purchase Order {0} is not submitted,Bestellung {0} wurde nicht übertragen DocType: Customs Tariff Number,Tariff Number,Tarifnummer apps/erpnext/erpnext/stock/doctype/item/item.js +39,Projected,Geplant apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +218,Serial No {0} does not belong to Warehouse {1},Seriennummer {0} gehört nicht zu Lager {1} @@ -3086,7 +3086,7 @@ apps/erpnext/erpnext/accounts/utils.py +501,Please set default {0} in Company {1 DocType: Cheque Print Template,Starting position from top edge,Ausgangsposition von der Oberkante apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +29,Same supplier has been entered multiple times,Same Anbieter wurde mehrmals eingegeben apps/erpnext/erpnext/accounts/report/profitability_analysis/profitability_analysis.py +152,Gross Profit / Loss,Bruttogewinn / Verlust -DocType: Purchase Order Item Supplied,Purchase Order Item Supplied,Lieferantenauftrags-Artikel geliefert +DocType: Purchase Order Item Supplied,Purchase Order Item Supplied,Bestell-Artikel geliefert apps/erpnext/erpnext/public/js/setup_wizard.js +83,Company Name cannot be Company,Firmenname kann keine Firma sein apps/erpnext/erpnext/config/setup.py +27,Letter Heads for print templates.,Briefköpfe für Druckvorlagen apps/erpnext/erpnext/config/setup.py +32,Titles for print templates e.g. Proforma Invoice.,"Bezeichnungen für Druckvorlagen, z. B. Proforma-Rechnung" @@ -3103,7 +3103,7 @@ DocType: Manufacturer,Manufacturers used in Items,Hersteller im Artikel verwende apps/erpnext/erpnext/accounts/general_ledger.py +145,Please mention Round Off Cost Center in Company,Bitte Abschlusskostenstelle in Firma vermerken DocType: Purchase Invoice,Terms,Geschäftsbedingungen DocType: Academic Term,Term Name,Zeit Namen -DocType: Buying Settings,Purchase Order Required,Lieferantenauftrag erforderlich +DocType: Buying Settings,Purchase Order Required,Bestellung erforderlich ,Item-wise Sales History,Artikelbezogene Verkaufshistorie DocType: Expense Claim,Total Sanctioned Amount,Summe genehmigter Beträge ,Purchase Analytics,Einkaufsanalyse @@ -3842,7 +3842,7 @@ apps/erpnext/erpnext/controllers/recurring_document.py +136,Please find attached apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +34,Bank Statement balance as per General Ledger,Kontoauszug Bilanz nach Hauptbuch DocType: Job Applicant,Applicant Name,Bewerbername DocType: Authorization Rule,Customer / Item Name,Kunde / Artikelname -DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. +DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. The package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"". @@ -3876,7 +3876,7 @@ apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +76,Dispatch,Versand apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +71,Max discount allowed for item: {0} is {1}%,Max erlaubter Rabatt für Artikel: {0} ist {1}% apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +173,Net Asset value as on,Nettoinventarwert als auf DocType: Account,Receivable,Forderung -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +278,Row #{0}: Not allowed to change Supplier as Purchase Order already exists,"Zeile #{0}: Es ist nicht erlaubt den Lieferanten zu wechseln, da bereits ein Lieferantenauftrag vorhanden ist" +apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +278,Row #{0}: Not allowed to change Supplier as Purchase Order already exists,"Zeile #{0}: Es ist nicht erlaubt den Lieferanten zu wechseln, da bereits eine Bestellung vorhanden ist" DocType: Accounts Settings,Role that is allowed to submit transactions that exceed credit limits set.,"Rolle, welche Transaktionen, die das gesetzte Kreditlimit überschreiten, übertragen darf." apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +904,Select Items to Manufacture,Wählen Sie die Elemente Herstellung apps/erpnext/erpnext/accounts/page/pos/pos.js +909,"Master data syncing, it might take some time","Stammdaten-Synchronisierung, kann es einige Zeit dauern," @@ -3977,7 +3977,7 @@ DocType: BOM,Manufacturing User,Nutzer Fertigung DocType: Purchase Invoice,Raw Materials Supplied,Gelieferte Rohmaterialien DocType: Purchase Invoice,Recurring Print Format,Wiederkehrendes Druckformat DocType: C-Form,Series,Nummernkreise -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +61,Expected Delivery Date cannot be before Purchase Order Date,Voraussichtlicher Liefertermin kann nicht vor dem Datum des Lieferantenauftrags liegen +apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +61,Expected Delivery Date cannot be before Purchase Order Date,Voraussichtlicher Liefertermin kann nicht vor dem Datum der Bestellung liegen DocType: Appraisal,Appraisal Template,Bewertungsvorlage DocType: Item Group,Item Classification,Artikeleinteilung apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +93,Business Development Manager,Leiter der kaufmännischen Abteilung @@ -4195,7 +4195,7 @@ DocType: Purchase Invoice Item,Rejected Serial No,Abgelehnte Seriennummer apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +82,Year start date or end date is overlapping with {0}. To avoid please set company,Jahresbeginn oder Enddatum überlappt mit {0}. Um dies zu verhindern setzen Sie eine Firma. apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +157,Start date should be less than end date for Item {0},Startdatum sollte für den Artikel {0} vor dem Enddatum liegen DocType: Item,"Example: ABCD.##### -If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Beispiel: ABCD.##### +If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Beispiel: ABCD.##### Wenn ""Serie"" eingestellt ist und ""Seriennummer"" in den Transaktionen nicht aufgeführt ist, dann wird eine Seriennummer automatisch auf der Grundlage dieser Serie erstellt. Wenn immer explizit Seriennummern für diesen Artikel aufgeführt werden sollen, muss das Feld leer gelassen werden." DocType: Upload Attendance,Upload Attendance,Anwesenheit hochladen apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +302,BOM and Manufacturing Quantity are required,Stückliste und Fertigungsmenge werden benötigt @@ -4286,7 +4286,7 @@ apps/erpnext/erpnext/accounts/doctype/asset_movement/asset_movement.py +28,Sourc apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +517,Posting date and posting time is mandatory,Buchungsdatum und Buchungszeit sind zwingend erfoderlich apps/erpnext/erpnext/config/buying.py +76,Tax template for buying transactions.,Steuervorlage für Einkaufstransaktionen ,Item Prices,Artikelpreise -DocType: Purchase Order,In Words will be visible once you save the Purchase Order.,"""In Worten"" wird sichtbar, sobald Sie den Lieferantenauftrag speichern." +DocType: Purchase Order,In Words will be visible once you save the Purchase Order.,"""In Worten"" wird sichtbar, sobald Sie die Bestellung speichern." DocType: Period Closing Voucher,Period Closing Voucher,Periodenabschlussbeleg apps/erpnext/erpnext/config/selling.py +67,Price List master.,Preislisten-Vorlagen DocType: Task,Review Date,Überprüfungsdatum From 95108ac80b538b0bcf36c2e8eeadb1151689bbf2 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Tue, 11 Apr 2017 15:55:34 +0530 Subject: [PATCH 048/287] [Minor] Party validation for Employee --- erpnext/accounts/party.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index f4c5c4d25c..f0c29bc36e 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -341,7 +341,7 @@ def validate_party_frozen_disabled(party_type, party_name): elif party_type == "Employee": if frappe.db.get_value("Employee", party_name, "status") == "Left": - frappe.msgprint(_("{0} {1} is not active").format(party_type, party_name), PartyDisabled, alert=True) + frappe.msgprint(_("{0} {1} is not active").format(party_type, party_name), alert=True) def get_timeline_data(doctype, name): '''returns timeline data for the past one year''' From 87ad6d074ab10a14dd320575ce7b545070f1c39a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 10 Apr 2017 16:42:11 +0530 Subject: [PATCH 049/287] [enhance] Stock qty added in purchase invoice --- .../purchase_invoice_item.json | 64 ++++++++++++++++++- erpnext/controllers/trends.py | 16 ++--- erpnext/patches.txt | 3 +- ...ate_stock_qty_value_in_purchase_invoice.py | 9 +++ erpnext/startup/report_data_map.py | 2 +- 5 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 6102d3ea30..a96446f306 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "hash", @@ -335,6 +336,36 @@ "set_only_once": 0, "unique": 0 }, + { + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -419,6 +450,35 @@ "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock Qty", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -1869,17 +1929,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-02-17 16:28:26.719053", + "modified": "2017-04-11 13:44:17.460674", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/controllers/trends.py b/erpnext/controllers/trends.py index 23bc531cf0..c5db2239b3 100644 --- a/erpnext/controllers/trends.py +++ b/erpnext/controllers/trends.py @@ -140,20 +140,16 @@ def period_wise_columns_query(filters, trans): else: trans_date = 'transaction_date' - qty_field = "t2.stock_qty" - if trans == 'Purchase Invoice': - qty_field = "t2.qty" - if filters.get("period") != 'Yearly': for dt in bet_dates: get_period_wise_columns(dt, filters.get("period"), pwc) - query_details = get_period_wise_query(dt, trans_date, query_details, qty_field) + query_details = get_period_wise_query(dt, trans_date, query_details) else: pwc = [_(filters.get("fiscal_year")) + " ("+_("Qty") + "):Float:120", _(filters.get("fiscal_year")) + " ("+ _("Amt") + "):Currency:120"] - query_details = " SUM(%s), SUM(t2.base_net_amount),"%(qty_field) + query_details = " SUM(t2.stock_qty), SUM(t2.base_net_amount)," - query_details += 'SUM(%s), SUM(t2.base_net_amount)'%(qty_field) + query_details += 'SUM(t2.stock_qty), SUM(t2.base_net_amount)' return pwc, query_details def get_period_wise_columns(bet_dates, period, pwc): @@ -164,10 +160,10 @@ def get_period_wise_columns(bet_dates, period, pwc): pwc += [_(get_mon(bet_dates[0])) + "-" + _(get_mon(bet_dates[1])) + " (" + _("Qty") + "):Float:120", _(get_mon(bet_dates[0])) + "-" + _(get_mon(bet_dates[1])) + " (" + _("Amt") + "):Currency:120"] -def get_period_wise_query(bet_dates, trans_date, query_details, qty_field): - query_details += """SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', %(qty_field)s, NULL)), +def get_period_wise_query(bet_dates, trans_date, query_details): + query_details += """SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', t2.stock_qty, NULL)), SUM(IF(t1.%(trans_date)s BETWEEN '%(sd)s' AND '%(ed)s', t2.base_net_amount, NULL)), - """ % {"trans_date": trans_date, "sd": bet_dates[0],"ed": bet_dates[1], "qty_field": qty_field} + """ % {"trans_date": trans_date, "sd": bet_dates[0],"ed": bet_dates[1]} return query_details @frappe.whitelist(allow_guest=True) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 3711bc82b2..5bf0f3fdfe 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -382,4 +382,5 @@ erpnext.patches.v7_2.make_all_assessment_group erpnext.patches.v8_0.manufacturer_childtable_migrate erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom erpnext.patches.v8_0.addresses_linked_to_lead -execute:frappe.delete_doc('DocType', 'Purchase Common') \ No newline at end of file +execute:frappe.delete_doc('DocType', 'Purchase Common') +erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice \ No newline at end of file diff --git a/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py b/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py new file mode 100644 index 0000000000..be5cf3aed7 --- /dev/null +++ b/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py @@ -0,0 +1,9 @@ +# Copyright (c) 2017, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc('accounts', 'doctype', 'purchase_invoice_item') + frappe.db.sql("update `tabPurchase Invoice Item` set stock_qty = qty, stock_uom = uom") \ No newline at end of file diff --git a/erpnext/startup/report_data_map.py b/erpnext/startup/report_data_map.py index ffdc66d555..e4bbd8744e 100644 --- a/erpnext/startup/report_data_map.py +++ b/erpnext/startup/report_data_map.py @@ -241,7 +241,7 @@ data_map = { } }, "Purchase Invoice Item": { - "columns": ["name", "parent", "item_code", "(qty * conversion_factor) as qty", "base_net_amount"], + "columns": ["name", "parent", "item_code", "stock_qty as qty", "base_net_amount"], "conditions": ["docstatus=1", "ifnull(parent, '')!=''"], "order_by": "parent", "links": { From 0b665ac79142235caaaa9cc612d4f4f538b2c10b Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 11 Apr 2017 02:49:24 -0400 Subject: [PATCH 050/287] [minor] don't throw error for buying transactions if price list is not selected --- erpnext/stock/get_item_details.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 9b4559e684..3ada10ba6b 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -270,7 +270,7 @@ def validate_price_list(args): if not frappe.db.get_value("Price List", {"name": args.price_list, args.transaction_type: 1, "enabled": 1}): throw(_("Price List {0} is disabled or does not exist").format(args.price_list)) - else: + elif not args.get("supplier"): throw(_("Price List not selected")) def validate_conversion_rate(args, meta): From 8037a0e3d525cd70f51bbf9d149d3c17050b2f9f Mon Sep 17 00:00:00 2001 From: Julian Robbins Date: Mon, 10 Apr 2017 20:15:53 +0100 Subject: [PATCH 051/287] Update assignment.md A typo and improvement tom English --- erpnext/docs/user/manual/en/using-erpnext/assignment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/docs/user/manual/en/using-erpnext/assignment.md b/erpnext/docs/user/manual/en/using-erpnext/assignment.md index 72b03b7277..e78a1123d6 100644 --- a/erpnext/docs/user/manual/en/using-erpnext/assignment.md +++ b/erpnext/docs/user/manual/en/using-erpnext/assignment.md @@ -22,7 +22,7 @@ With assignment, you can also leave a comment for the review of assignee. ####ToDo List of Assignee -This transaction will appear in the To-do list of the ser in “Todo” section. +This transaction will appear in the To-do list of the user in “Todo” section. Assign @@ -32,6 +32,6 @@ User will be able to remove assignment by clicking on "Assignment Completed" but Assign -Once assignment is set as completed, Status of its ToDo record will be set as Closed. +Once assignment is set as completed, the Status of its ToDo record will be set as Closed. {next} From 768a888bf2f25dfd752bd2d523f5eb1b641c7a2c Mon Sep 17 00:00:00 2001 From: joezsweet Date: Tue, 11 Apr 2017 09:31:45 +0200 Subject: [PATCH 052/287] [fix] validate supplier invoice - modified to check for the selected supplier only --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 1972cc9da9..4d58f987ca 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -628,10 +628,12 @@ class PurchaseInvoice(BuyingController): pi = frappe.db.sql('''select name from `tabPurchase Invoice` where bill_no = %(bill_no)s + and supplier = %(supplier)s and name != %(name)s and docstatus < 2 and posting_date between %(year_start_date)s and %(year_end_date)s''', { "bill_no": self.bill_no, + "supplier": self.supplier, "name": self.name, "year_start_date": fiscal_year.year_start_date, "year_end_date": fiscal_year.year_end_date From 1ff136828032fcd89468bc330506aced90c1d1f1 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 10 Apr 2017 12:09:18 +0530 Subject: [PATCH 053/287] [fix] Vehicle expense report not working --- .../vehicle_expenses/vehicle_expenses.js | 12 ----- .../vehicle_expenses/vehicle_expenses.py | 48 +++++++++---------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js index 8a05c811ac..486d259227 100644 --- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js +++ b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js @@ -22,18 +22,6 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { query_report.trigger_refresh(); }); } - }, - { - "fieldname": "from_date", - "label": __("From Date"), - "fieldtype": "Date", - "default": frappe.defaults.get_user_default("year_start_date"), - }, - { - "fieldname": "to_date", - "label": __("To Date"), - "fieldtype": "Date", - "default": frappe.defaults.get_user_default("year_end_date"), } ] } diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py index a03b7f3e13..63e5f3c0a4 100644 --- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py +++ b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py @@ -3,41 +3,41 @@ from __future__ import unicode_literals import frappe +import erpnext from frappe import _ from frappe.utils import flt,cstr from erpnext.accounts.report.financial_statements import get_period_list def execute(filters=None): - period_list = get_period_list(2016, 2016,"Monthly") - for period in period_list: - pass columns, data = [], [] - columns=get_columns() - data=get_log_data(filters) - chart=get_chart_data(data,period_list) + if filters.get('fiscal_year'): + company = erpnext.get_default_company() + period_list = get_period_list(filters.get('fiscal_year'), filters.get('fiscal_year'),"Monthly", company) + columns=get_columns() + data=get_log_data(filters) + chart=get_chart_data(data,period_list) return columns, data, None, chart - + def get_columns(): columns = [_("License") + ":Link/Vehicle:100", _("Make") + ":data:50", - _("Model") + ":data:50", _("Location") + ":data:100", - _("Log") + ":Link/Vehicle Log:100", _("Odometer") + ":Int:80", - _("Date") + ":Date:100", _("Fuel Qty") + ":Float:80", - _("Fuel Price") + ":Float:100",_("Service Expense") + ":Float:100" + _("Model") + ":data:50", _("Location") + ":data:100", + _("Log") + ":Link/Vehicle Log:100", _("Odometer") + ":Int:80", + _("Date") + ":Date:100", _("Fuel Qty") + ":Float:80", + _("Fuel Price") + ":Float:100",_("Service Expense") + ":Float:100" ] return columns def get_log_data(filters): - conditions="" - if filters.from_date: - conditions += " and date >= %(from_date)s" - if filters.to_date: - conditions += " and date <= %(to_date)s" - data = frappe.db.sql("""select vhcl.license_plate as "License",vhcl.make as "Make",vhcl.model as "Model", - vhcl.location as "Location",log.name as "Log",log.odometer as "Odometer",log.date as "Date", - log.fuel_qty as "Fuel Qty",log.price as "Fuel Price" - from `tabVehicle` vhcl,`tabVehicle Log` log - where vhcl.license_plate = log.license_plate and log.docstatus = 1 %s - order by date""" % (conditions,),filters, as_dict=1) + fy = frappe.db.get_value('Fiscal Year', filters.get('fiscal_year'), ['year_start_date', 'year_end_date'], as_dict=True) + data = frappe.db.sql("""select + vhcl.license_plate as "License", vhcl.make as "Make", vhcl.model as "Model", + vhcl.location as "Location", log.name as "Log", log.odometer as "Odometer", + log.date as "Date", log.fuel_qty as "Fuel Qty", log.price as "Fuel Price" + from + `tabVehicle` vhcl,`tabVehicle Log` log + where + vhcl.license_plate = log.license_plate and log.docstatus = 1 and date between %s and %s + order by date""" ,(fy.year_start_date, fy.year_end_date), as_dict=1) dl=list(data) for row in dl: row["Service Expense"]= get_service_expense(row["Log"]) @@ -45,8 +45,8 @@ def get_log_data(filters): def get_service_expense(logname): expense_amount = frappe.db.sql("""select sum(expense_amount) - from `tabVehicle Log` log,`tabVehicle Service` ser - where ser.parent=log.name and log.name=%s""",logname) + from `tabVehicle Log` log,`tabVehicle Service` ser + where ser.parent=log.name and log.name=%s""",logname) return flt(expense_amount[0][0]) if expense_amount else 0 def get_chart_data(data,period_list): From 417145bec52c279137b43008f944812bd70ca193 Mon Sep 17 00:00:00 2001 From: Khairil Zhafri Date: Mon, 10 Apr 2017 00:10:02 +0800 Subject: [PATCH 054/287] Update employee.json Less binary gender options for Employee --- erpnext/hr/doctype/employee/employee.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/employee/employee.json b/erpnext/hr/doctype/employee/employee.json index 35a28078d0..c53e497f2e 100644 --- a/erpnext/hr/doctype/employee/employee.json +++ b/erpnext/hr/doctype/employee/employee.json @@ -417,7 +417,7 @@ "no_copy": 0, "oldfieldname": "gender", "oldfieldtype": "Select", - "options": "\nMale\nFemale", + "options": "\nMale\nFemale\nOther", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -2431,4 +2431,4 @@ "title_field": "employee_name", "track_changes": 1, "track_seen": 0 -} \ No newline at end of file +} From 46b6d4ea4756491f56772e5eb35b9b1591597c8c Mon Sep 17 00:00:00 2001 From: Khairil Zhafri Date: Mon, 10 Apr 2017 00:08:52 +0800 Subject: [PATCH 055/287] Update student.json Less binary gender option for Student --- erpnext/schools/doctype/student/student.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json index c685fcb1b6..1654c3bbaf 100644 --- a/erpnext/schools/doctype/student/student.json +++ b/erpnext/schools/doctype/student/student.json @@ -497,7 +497,7 @@ "label": "Gender", "length": 0, "no_copy": 0, - "options": "\nMale\nFemale", + "options": "\nMale\nFemale\nOther", "permlevel": 0, "precision": "", "print_hide": 0, @@ -1135,4 +1135,4 @@ "title_field": "title", "track_changes": 0, "track_seen": 0 -} \ No newline at end of file +} From 2f9703c20e444ad0863bbb183368a84f6bccb85b Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 11 Apr 2017 15:10:25 +0530 Subject: [PATCH 056/287] [minor] set company_currency as account_currency in general ledger if party type is employee --- erpnext/accounts/report/general_ledger/general_ledger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index d09ac707c4..5d1aabe54b 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -66,7 +66,8 @@ def set_account_currency(filters): if gle_currency: account_currency = gle_currency else: - account_currency = frappe.db.get_value(filters.party_type, filters.party, "default_currency") + account_currency = None if filters.party_type == "Employee" else \ + frappe.db.get_value(filters.party_type, filters.party, "default_currency") filters["account_currency"] = account_currency or filters.company_currency From b9d0e7622acb2518af7a059a3cb98d0ee00b05cb Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 4 Apr 2017 12:20:54 +0600 Subject: [PATCH 057/287] [translation] translation updates for - erpnext on 2017-04-04 --- erpnext/docs/license.html | 4 +- erpnext/translations/es.csv | 252 ++++++++++++++++----------------- erpnext/translations/fi.csv | 12 +- erpnext/translations/fr.csv | 244 +++++++++++++++---------------- erpnext/translations/hr.csv | 6 +- erpnext/translations/it.csv | 14 +- erpnext/translations/kn.csv | 4 +- erpnext/translations/pt-BR.csv | 10 +- erpnext/translations/pt.csv | 20 +-- 9 files changed, 285 insertions(+), 281 deletions(-) diff --git a/erpnext/docs/license.html b/erpnext/docs/license.html index 1d50b78b30..4740c5c145 100644 --- a/erpnext/docs/license.html +++ b/erpnext/docs/license.html @@ -640,8 +640,8 @@ attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

-
    <one line="" to="" give="" the="" program's="" name="" and="" a="" brief="" idea="" of="" what="" it="" does.="">
-    Copyright (C) <year>  <name of="" author="">
+
    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv
index bdf3ea633b..5e5ba7302a 100644
--- a/erpnext/translations/es.csv
+++ b/erpnext/translations/es.csv
@@ -65,7 +65,7 @@ apps/erpnext/erpnext/projects/doctype/project/project_dashboard.py +14,Material,
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +665,Quantity,Cantidad
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +534,Accounts table cannot be blank.,La tabla de cuentas no puede estar en blanco
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +152,Loans (Liabilities),Préstamos (pasivos)
-DocType: Employee Education,Year of Passing,Año de graduación
+DocType: Employee Education,Year of Passing,Año de fallecimiento
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +69,"Reference: %s, Item Code: %s and Customer: %s","Referencia:% s, Código del artículo:% s y el Cliente:% s"
 DocType: Item,Country of Origin,País de origen
 apps/erpnext/erpnext/templates/form_grid/stock_entry_grid.html +26,In Stock,En inventario
@@ -111,12 +111,12 @@ DocType: Rename Tool,"Attach .csv file with two columns, one for the old name an
 apps/erpnext/erpnext/accounts/utils.py +74,{0} {1} not in any active Fiscal Year.,{0} {1} no en cualquier año fiscal activa.
 DocType: Packed Item,Parent Detail docname,Detalle principal docname
 apps/erpnext/erpnext/public/js/setup_wizard.js +303,Kg,Kilogramo
-DocType: Student Log,Log,Iniciar sesión
+DocType: Student Log,Log,Log
 apps/erpnext/erpnext/config/hr.py +45,Opening for a Job.,Apertura de un puesto
 DocType: Item Attribute,Increment,Incremento
 apps/erpnext/erpnext/public/js/stock_analytics.js +62,Select Warehouse...,Seleccione Almacén ...
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +6,Advertising,Publicidad
-apps/erpnext/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.py +22,Same Company is entered more than once,Igual Company se introduce más de una vez
+apps/erpnext/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.py +22,Same Company is entered more than once,La misma Compañia es ingresada mas de una vez
 DocType: Employee,Married,Casado
 apps/erpnext/erpnext/accounts/party.py +38,Not permitted for {0},No está permitido para {0}
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +556,Get items from,Obtener artículos de
@@ -130,7 +130,7 @@ apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +40,Pension Funds,Fondo
 apps/erpnext/erpnext/accounts/doctype/asset/asset.py +87,Next Depreciation Date cannot be before Purchase Date,Siguiente Depreciación La fecha no puede ser anterior a la fecha de compra
 DocType: SMS Center,All Sales Person,Todos los vendedores
 DocType: Monthly Distribution,**Monthly Distribution** helps you distribute the Budget/Target across months if you have seasonality in your business.,** ** Distribución mensual ayuda a distribuir el presupuesto / Target a través de meses si tiene la estacionalidad de su negocio.
-apps/erpnext/erpnext/accounts/page/pos/pos.js +1598,Not items found,No artículos encontrados
+apps/erpnext/erpnext/accounts/page/pos/pos.js +1598,Not items found,No se encontraron artículos
 apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +178,Salary Structure Missing,Falta Estructura salarial
 DocType: Lead,Person Name,Nombre de persona
 DocType: Sales Invoice Item,Sales Invoice Item,Producto de factura de venta
@@ -152,7 +152,7 @@ apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +892,Select BOM,
 DocType: SMS Log,SMS Log,Registros SMS
 apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +27,Cost of Delivered Items,Costo de productos entregados
 apps/erpnext/erpnext/hr/doctype/holiday_list/holiday_list.py +38,The holiday on {0} is not between From Date and To Date,El día de fiesta en {0} no es entre De la fecha y Hasta la fecha
-DocType: Student Log,Student Log,Iniciar estudiante
+DocType: Student Log,Student Log,Bitácora del Estudiante
 DocType: Quality Inspection,Get Specification Details,Obtener especificaciones
 DocType: Lead,Interested,Interesado
 apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +170,Opening,Apertura
@@ -187,7 +187,7 @@ DocType: Naming Series,Prefix,Prefijo
 apps/erpnext/erpnext/public/js/setup_wizard.js +300,Consumable,Consumible
 DocType: Employee,B-,B-
 DocType: Upload Attendance,Import Log,Importar registro
-DocType: Production Planning Tool,Pull Material Request of type Manufacture based on the above criteria,Tire Solicitud de materiales de tipo Fabricación en base a los criterios anteriores
+DocType: Production Planning Tool,Pull Material Request of type Manufacture based on the above criteria,Traer Solicitud de materiales de tipo Fabricación en base a los criterios anteriores
 DocType: Training Result Employee,Grade,Grado
 DocType: Sales Invoice Item,Delivered By Supplier,Entregado por proveedor
 DocType: SMS Center,All Contact,Todos los Contactos
@@ -229,7 +229,7 @@ apps/erpnext/erpnext/config/manufacturing.py +62,Details of the operations carri
 DocType: Serial No,Maintenance Status,Estado del mantenimiento
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +57,{0} {1}: Supplier is required against Payable account {2},{0} {1}: se requiere un proveedor para la cuenta por pagar {2}
 apps/erpnext/erpnext/config/selling.py +52,Items and Pricing,Productos y precios
-apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +2,Total hours: {0},Total horas: {0}
+apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +2,Total hours: {0},Horas totales: {0}
 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +43,From Date should be within the Fiscal Year. Assuming From Date = {0},La fecha 'Desde' tiene que pertenecer al rango del año fiscal = {0}
 DocType: Customer,Individual,Individual
 DocType: Interest,Academics User,académicos usuario
@@ -238,7 +238,7 @@ DocType: Employee Loan Application,Loan Info,Información sobre préstamos
 apps/erpnext/erpnext/config/maintenance.py +12,Plan for maintenance visits.,Plan para las visitas
 DocType: SMS Settings,Enter url parameter for message,Introduzca el parámetro url para el mensaje
 DocType: POS Profile,Customer Groups,Grupos de clientes
-DocType: Guardian,Students,Los estudiantes
+DocType: Guardian,Students,Estudiantes
 apps/erpnext/erpnext/config/selling.py +91,Rules for applying pricing and discount.,Reglas para la aplicación de distintos precios y descuentos sobre los productos.
 apps/erpnext/erpnext/stock/doctype/price_list/price_list.py +14,Price List must be applicable for Buying or Selling,La lista de precios debe ser aplicable para las compras o ventas
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +79,Installation date cannot be before delivery date for Item {0},La fecha de instalación no puede ser antes de la fecha de entrega para el elemento {0}
@@ -265,7 +265,7 @@ DocType: Production Order Operation,Updated via 'Time Log',Actualizado a través
 apps/erpnext/erpnext/controllers/taxes_and_totals.py +414,Advance amount cannot be greater than {0} {1},cantidad de avance no puede ser mayor que {0} {1}
 DocType: Naming Series,Series List for this Transaction,Lista de secuencias para esta transacción
 DocType: Company,Default Payroll Payable Account,La nómina predeterminada de la cuenta por pagar
-apps/erpnext/erpnext/schools/doctype/student_batch/student_batch.js +7,Update Email Group,Grupo alerta por correo electrónico
+apps/erpnext/erpnext/schools/doctype/student_batch/student_batch.js +7,Update Email Group,Editar Grupo de Correo Electrónico
 DocType: Sales Invoice,Is Opening Entry,Es una entrada de apertura
 DocType: Customer Group,Mention if non-standard receivable account applicable,Indique si una cuenta por cobrar no estándar es  aplicable
 DocType: Course Schedule,Instructor Name,Nombre instructor
@@ -277,11 +277,11 @@ apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_p
 DocType: Delivery Note Item,Against Sales Invoice Item,Contra la factura de venta del producto
 ,Production Orders in Progress,Órdenes de producción en progreso
 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +39,Net Cash from Financing,Efectivo neto de financiación
-apps/erpnext/erpnext/accounts/page/pos/pos.js +2179,"LocalStorage is full , did not save","LocalStorage está lleno, no salvó"
+apps/erpnext/erpnext/accounts/page/pos/pos.js +2179,"LocalStorage is full , did not save","Almacenamiento Local esta lleno, no se guardó"
 DocType: Lead,Address & Contact,Dirección y Contacto
 DocType: Leave Allocation,Add unused leaves from previous allocations,Añadir las hojas no utilizados de las asignaciones anteriores
 apps/erpnext/erpnext/controllers/recurring_document.py +230,Next Recurring {0} will be created on {1},La próxima recurrencia {0} se creará el {1}
-DocType: Sales Partner,Partner website,sitio web de colaboradores
+DocType: Sales Partner,Partner website,Sitio web de colaboradores
 apps/erpnext/erpnext/stock/dashboard/item_dashboard.js +105,Add Item,Añadir artículo
 ,Contact Name,Nombre de contacto
 DocType: Course Assessment Criteria,Course Assessment Criteria,Criterios de evaluación del curso
@@ -316,7 +316,7 @@ DocType: Purchase Invoice,The unique id for tracking all recurring invoices. It
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +97,Software Developer,Desarrollador de Software.
 DocType: Item,Minimum Order Qty,Cantidad mínima de la orden
 DocType: Pricing Rule,Supplier Type,Tipo de proveedor
-DocType: Course Scheduling Tool,Course Start Date,Curso Fecha de Inicio
+DocType: Course Scheduling Tool,Course Start Date,Fecha de inicio del Curso
 ,Student Batch-Wise Attendance,Discontinuo asistencia de los estudiantes
 DocType: POS Profile,Allow user to edit Rate,Permitir al usuario editar Tasa
 DocType: Item,Publish in Hub,Publicar en el Hub
@@ -528,7 +528,7 @@ DocType: Stock Entry Detail,Difference Account,Cuenta para la Diferencia
 apps/erpnext/erpnext/projects/doctype/task/task.py +46,Cannot close task as its dependant task {0} is not closed.,No se puede cerrar la tarea que depende de {0} ya que no está cerrada.
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +433,Please enter Warehouse for which Material Request will be raised,"Por favor, ingrese el almacén en el cual la requisición de materiales sera despachada"
 DocType: Production Order,Additional Operating Cost,Costos adicionales de operación
-apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +20,Cosmetics,Productos cosméticos
+apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +20,Cosmetics,Cosméticos
 apps/erpnext/erpnext/stock/doctype/item/item.py +535,"To merge, following properties must be same for both items","Para fusionar, la siguientes propiedades deben ser las mismas en ambos productos"
 DocType: Shipping Rule,Net Weight,Peso neto
 DocType: Employee,Emergency Phone,Teléfono de emergencia
@@ -584,7 +584,7 @@ DocType: Project Task,Project Task,Tareas del proyecto
 DocType: C-Form Invoice Detail,Grand Total,Total
 DocType: Training Event,Course,Curso
 DocType: Timesheet,Payslip,recibo de sueldo
-apps/erpnext/erpnext/public/js/pos/pos.html +4,Item Cart,Cesta de artículos
+apps/erpnext/erpnext/public/js/pos/pos.html +4,Item Cart,Articulo de Carrito de Compras
 apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +38,Fiscal Year Start Date should not be greater than Fiscal Year End Date,La fecha de inicio no puede ser mayor que la fecha final del año fiscal
 DocType: Issue,Resolution,Resolución
 DocType: C-Form,IV,IV
@@ -611,7 +611,7 @@ DocType: Purchase Order Item,Billed Amt,Monto facturado
 DocType: Training Result Employee,Training Result Employee,Empleado Formación Resultado
 DocType: Warehouse,A logical Warehouse against which stock entries are made.,Un Almacén lógico contra el que se crean las entradas de inventario
 DocType: Repayment Schedule,Principal Amount,Cantidad principal
-DocType: Employee Loan Application,Total Payable Interest,El interés total a pagar
+DocType: Employee Loan Application,Total Payable Interest,Interés Total a Pagar
 DocType: Sales Invoice Timesheet,Sales Invoice Timesheet,Factura de venta de partes de horas
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +106,Reference No & Reference Date is required for {0},Se requiere de No. de referencia y fecha para {0}
 DocType: Process Payroll,Select Payment Account to make Bank Entry,Seleccionar la cuenta de pago para hacer la entrada del Banco
@@ -634,7 +634,7 @@ apps/erpnext/erpnext/accounts/utils.py +720,"Payment Gateway Account not created
 DocType: Sales Invoice,Sales Taxes and Charges,Impuestos y cargos sobre ventas
 DocType: Employee,Organization Profile,Perfil de la organización
 DocType: Student,Sibling Details,Detalles de hermanos
-DocType: Vehicle Service,Vehicle Service,Servicio en el vehículo
+DocType: Vehicle Service,Vehicle Service,Servicio del Vehículo
 apps/erpnext/erpnext/config/setup.py +101,Automatically triggers the feedback request based on conditions.,desencadena automáticamente la solicitud de realimentación sobre la base de condiciones.
 DocType: Employee,Reason for Resignation,Motivo de la renuncia
 apps/erpnext/erpnext/config/hr.py +147,Template for performance appraisals.,Plantilla para evaluaciones de desempeño.
@@ -690,7 +690,7 @@ apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +218,Maintenance
 DocType: Item,Material Transfer,Transferencia de material
 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +210,Opening (Dr),Apertura (Deb)
 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +39,Posting timestamp must be after {0},Fecha y hora de contabilización deberá ser posterior a {0}
-DocType: Employee Loan,Total Interest Payable,El interés total a pagar
+DocType: Employee Loan,Total Interest Payable,Interés total a pagar
 DocType: Landed Cost Taxes and Charges,Landed Cost Taxes and Charges,"Impuestos, cargos y costos de destino estimados"
 DocType: Production Order Operation,Actual Start Time,Hora de inicio real
 DocType: BOM Operation,Operation Time,Tiempo de operación
@@ -711,7 +711,7 @@ apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +60,Please enter ite
 DocType: Interest,Interest,Interesar
 apps/erpnext/erpnext/selling/doctype/customer/customer_dashboard.py +10,Pre Sales,Pre ventas
 DocType: Purchase Receipt,Other Details,Otros detalles
-apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +18,Suplier,suplier
+apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +18,Suplier,Proveedor
 DocType: Account,Accounts,Cuentas
 DocType: Vehicle,Odometer Value (Last),Valor del cuentakilómetros (Última)
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +71,Marketing,Marketing
@@ -749,7 +749,7 @@ DocType: Purchase Invoice,The date on which next invoice will be generated. It i
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +10,Current Assets,Activo circulante
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +87,{0} is not a stock Item,{0} no es un artículo en existencia
 DocType: Mode of Payment Account,Default Account,Cuenta predeterminada
-DocType: Payment Entry,Received Amount (Company Currency),Cantidad recibida (Compañía de divisas)
+DocType: Payment Entry,Received Amount (Company Currency),Cantidad recibida (Divisa de Compañia)
 apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +156,Lead must be set if Opportunity is made from Lead,La Iniciativa se debe establecer si la oportunidad está hecha desde las Iniciativas
 apps/erpnext/erpnext/hr/doctype/holiday_list/holiday_list.py +29,Please select weekly off day,Por favor seleccione el día libre de la semana
 DocType: Production Order Operation,Planned End Time,Tiempo de finalización planeado
@@ -852,7 +852,7 @@ apps/erpnext/erpnext/config/stock.py +153,Upload stock balance via csv.,Subir el
 DocType: Warehouse,Tree Details,Detalles del árbol
 DocType: Training Event,Event Status,Estado de eventos
 ,Support Analytics,Soporte analítico
-apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +339,"If you have any questions, please get back to us.","Si usted tiene alguna pregunta, por favor volver a nosotros."
+apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +339,"If you have any questions, please get back to us.","Si usted tiene alguna pregunta, por favor consultenos."
 DocType: Item,Website Warehouse,Almacén para el sitio web
 DocType: Payment Reconciliation,Minimum Invoice Amount,Volumen mínimo Factura
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +112,{0} {1}: Cost Center {2} does not belong to Company {3},{0} {1}: El centro de costos {2} no pertenece a la empresa {3}
@@ -896,10 +896,10 @@ apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +48,Projected Qty
 DocType: Sales Invoice,Payment Due Date,Fecha de pago
 apps/erpnext/erpnext/stock/doctype/item/item.js +340,Item Variant {0} already exists with same attributes,Artículo Variant {0} ya existe con los mismos atributos
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +95,'Opening','Apertura'
-apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +130,Open To Do,Abierto a hacer
+apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +130,Open To Do,Lista de tareas abiertas
 DocType: Notification Control,Delivery Note Message,Mensaje en nota de entrega
 DocType: Expense Claim,Expenses,Gastos
-DocType: Item Variant Attribute,Item Variant Attribute,Artículo Variant Atributo
+DocType: Item Variant Attribute,Item Variant Attribute,Atributo de Variante de Producto
 ,Purchase Receipt Trends,Tendencias de recibos de compra
 DocType: Process Payroll,Bimonthly,Bimensual
 DocType: Vehicle Service,Brake Pad,Pastilla de freno
@@ -995,7 +995,7 @@ DocType: Program Fee,Program Fee,tarifa del programa
 DocType: Salary Slip,Total in words,Total en palabras
 DocType: Material Request Item,Lead Time Date,Hora de la Iniciativa
 DocType: Guardian,Guardian Name,Nombre tutor
-DocType: Cheque Print Template,Has Print Format,Formato de impresión tiene
+DocType: Cheque Print Template,Has Print Format,Tiene Formato de Impresión
 DocType: Employee Loan,Sanctioned,Sancionada
 apps/erpnext/erpnext/accounts/page/pos/pos.js +72, is mandatory. Maybe Currency Exchange record is not created for ,es obligatorio. Posiblemente el registro de cambio de divisa no ha sido creado para
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +103,Row #{0}: Please specify Serial No for Item {1},"Línea #{0}: Por favor, especifique el número de serie para el producto {1}"
@@ -1047,7 +1047,7 @@ apps/erpnext/erpnext/controllers/selling_controller.py +159,Order Type must be o
 DocType: Lead,Next Contact Date,Siguiente fecha de contacto
 apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +35,Opening Qty,Cant. de apertura
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +424,Please enter Account for Change Amount,"Por favor, introduzca la cuenta para el Cambio Monto"
-DocType: Student Batch,Student Batch Name,Lote Nombre del estudiante
+DocType: Student Batch,Student Batch Name,Nombre de Lote del Estudiante
 DocType: Holiday List,Holiday List Name,Nombre de festividad
 DocType: Repayment Schedule,Balance Loan Amount,Saldo del Préstamo Monto
 apps/erpnext/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js +14,Schedule Course,Calendario de Cursos
@@ -1086,7 +1086,7 @@ DocType: Repayment Schedule,Interest Amount,Cantidad de interés
 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.js +115,You are the Expense Approver for this record. Please Update the 'Status' and Save,"Usted es el supervisor de gastos para este registro. Por favor, actualice el estado y guarde"
 DocType: Serial No,Creation Document No,Creación del documento No
 DocType: Issue,Issue,Asunto
-DocType: Asset,Scrapped,desechado
+DocType: Asset,Scrapped,Desechado
 apps/erpnext/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.py +28,Account does not match with Company,La cuenta no coincide con la empresa
 apps/erpnext/erpnext/config/stock.py +195,"Attributes for Item Variants. e.g Size, Color etc.","Atributos para  Elementos variables. por ejemplo, tamaño, color, etc."
 DocType: Purchase Invoice,Returns,Devoluciones
@@ -1178,7 +1178,7 @@ apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +24,POS Profile
 DocType: Sales Invoice Item,UOM Conversion Factor,Factor de Conversión de Unidad de Medida
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +24,Please enter Item Code to get Batch Number,"Por favor, introduzca el código de artículo para obtener el número de lote"
 DocType: Stock Settings,Default Item Group,Grupo de artículos predeterminado
-DocType: Employee Loan,Partially Disbursed,parcialmente Desembolso
+DocType: Employee Loan,Partially Disbursed,Parcialmente Desembolsado
 DocType: Grading Structure,Grading System Name,Nombre del sistema de clasificación
 apps/erpnext/erpnext/config/buying.py +38,Supplier database.,Base de datos de proveedores.
 DocType: Account,Balance Sheet,Hoja de balance
@@ -1200,7 +1200,7 @@ apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +8,Item 1,Elemento 1
 DocType: Holiday,Holiday,Vacaciones
 DocType: Support Settings,Close Issue After Days,Cerrar Problema Después Días
 DocType: Leave Control Panel,Leave blank if considered for all branches,Dejar en blanco si se considera para todas las sucursales
-apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +21,C-form is not applicable for Invoice: {0},C-forma no es aplicable para la factura: {0}
+apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +21,C-form is not applicable for Invoice: {0},Formulario-C no es aplicable para la factura: {0}
 DocType: Payment Reconciliation,Unreconciled Payment Details,Detalles de pagos no conciliados
 DocType: Global Defaults,Current Fiscal Year,Año fiscal actual
 DocType: Purchase Order,Group same items,Grupo mismos artículos
@@ -1223,7 +1223,7 @@ apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +71,View Ledger,Mo
 DocType: Grading Scale,Intervals,intervalos
 apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.py +41,Earliest,Primeras
 apps/erpnext/erpnext/stock/doctype/item/item.py +509,"An Item Group exists with same name, please change the item name or rename the item group","Existe un grupo de elementos con el mismo nombre , por favor, cambie el nombre del artículo , o cambiar el nombre del grupo de artículos"
-apps/erpnext/erpnext/schools/report/absent_student_report/absent_student_report.py +46,Student Mobile No.,Nº de Estudiantes móvil
+apps/erpnext/erpnext/schools/report/absent_student_report/absent_student_report.py +46,Student Mobile No.,Número de Móvil del Estudiante.
 apps/erpnext/erpnext/setup/setup_wizard/setup_wizard.py +473,Rest Of The World,Resto del mundo
 apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +81,The Item {0} cannot have Batch,El producto {0} no puede contener lotes
 ,Budget Variance Report,Variación de Presupuesto
@@ -1235,7 +1235,7 @@ DocType: Stock Reconciliation,Difference Amount,Diferencia
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +170,Retained Earnings,UTILIDADES RETENIDAS
 DocType: Vehicle Log,Service Detail,Detalle del servicio
 DocType: BOM,Item Description,Descripción del producto
-DocType: Student Sibling,Student Sibling,hermano del estudiante
+DocType: Student Sibling,Student Sibling,Hermano del Estudiante
 DocType: Purchase Invoice,Is Recurring,Es recurrente
 DocType: Purchase Invoice,Supplied Items,Productos suministrados
 DocType: Student,STUD.,SEMENTAL.
@@ -1308,7 +1308,7 @@ apps/erpnext/erpnext/stock/get_item_details.py +132,Item {0} must be a Sub-contr
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +41,Capital Equipments,BIENES DE CAPITAL
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +31,"Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.","La 'regla precios' es seleccionada primero basada en el campo 'Aplicar En' que puede ser un artículo, grupo de artículos o marca."
 DocType: Hub Settings,Seller Website,Sitio web del vendedor
-DocType: Item,ITEM-,ÍT-
+DocType: Item,ITEM-,ITEM-
 apps/erpnext/erpnext/controllers/selling_controller.py +152,Total allocated percentage for sales team should be 100,Porcentaje del total asignado para el equipo de ventas debe ser de 100
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +112,Production Order status is {0},El estado de la orden de producción es {0}
 DocType: Appraisal Goal,Goal,Meta/Objetivo
@@ -1362,11 +1362,11 @@ apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +68
 apps/erpnext/erpnext/demo/setup/setup_data.py +315,Food,Comida
 apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +51,Ageing Range 3,Rango de antigüedad 3
 DocType: Maintenance Schedule Item,No of Visits,Número de visitas
-apps/erpnext/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +102,Mark Attendence,Marcos Attendence
+apps/erpnext/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +102,Mark Attendence,Marcar Asistencia
 apps/erpnext/erpnext/schools/doctype/student_applicant/student_applicant.js +32,Enrolling student,estudiante que se inscribe
 apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +33,Currency of the Closing Account must be {0},La divisa / moneda de la cuenta de cierre debe ser {0}
 apps/erpnext/erpnext/hr/doctype/appraisal_template/appraisal_template.py +21,Sum of points for all goals should be 100. It is {0},La suma de puntos para los objetivos debe ser 100. y es {0}
-DocType: Project,Start and End Dates,Las fechas de inicio y fin
+DocType: Project,Start and End Dates,Fechas de Inicio y Fin
 ,Delivered Items To Be Billed,Envios por facturar
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +16,Open BOM {0},Abrir la lista de materiales {0}
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +60,Warehouse cannot be changed for Serial No.,Almacén no se puede cambiar para el N º de serie
@@ -1391,7 +1391,7 @@ DocType: Supplier,Name and Type,Nombre y Tipo
 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +56,Approval Status must be 'Approved' or 'Rejected',"El estado de esta solicitud debe ser ""Aprobado"" o ""Rechazado"""
 DocType: Purchase Invoice,Contact Person,Persona de contacto
 apps/erpnext/erpnext/projects/doctype/task/task.py +37,'Expected Start Date' can not be greater than 'Expected End Date','Fecha esperada de inicio' no puede ser mayor que 'Fecha esperada de finalización'
-DocType: Course Scheduling Tool,Course End Date,Curso Fecha de finalización
+DocType: Course Scheduling Tool,Course End Date,Fecha de finalización del curso
 DocType: Holiday List,Holidays,Vacaciones
 DocType: Sales Order Item,Planned Quantity,Cantidad planificada
 DocType: Purchase Invoice Item,Item Tax Amount,Total impuestos de producto
@@ -1400,7 +1400,7 @@ apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +203,Stock Entries
 DocType: Employee,Prefered Email,preferido por correo electrónico
 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +33,Net Change in Fixed Asset,Cambio neto en activos fijos
 DocType: Leave Control Panel,Leave blank if considered for all designations,Dejar en blanco si es considerado para todos los puestos
-apps/erpnext/erpnext/accounts/doctype/account/account.py +176,Warehouse is mandatory for non group Accounts of type Stock,Almacén es obligatorio para las cuentas no grupales de tipo de archivo
+apps/erpnext/erpnext/accounts/doctype/account/account.py +176,Warehouse is mandatory for non group Accounts of type Stock,Almacén es obligatorio para las cuentas no grupales de tipo Stock
 apps/erpnext/erpnext/controllers/accounts_controller.py +669,Charge of type 'Actual' in row {0} cannot be included in Item Rate,Cambiar a tipo 'Actual' en la línea {0} no puede ser incluido en el precio
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +243,Max: {0},Máximo: {0}
 apps/erpnext/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py +24,From Datetime,A partir de fecha y hora
@@ -1428,7 +1428,7 @@ DocType: GL Entry,GL Entry,Entrada GL
 DocType: HR Settings,Employee Settings,Configuración de empleado
 ,Batch-Wise Balance History,Historial de saldo por lotes
 apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +73,Print settings updated in respective print format,Los ajustes de impresión actualizados en formato de impresión respectivo
-DocType: Package Code,Package Code,Código paquete
+DocType: Package Code,Package Code,Código de paquete
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +67,Apprentice,Aprendiz
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +103,Negative Quantity is not allowed,No se permiten cantidades negativas
 DocType: Purchase Invoice Item,"Tax detail table fetched from item master as a string and stored in this field.
@@ -1447,14 +1447,14 @@ DocType: Purchase Invoice,Total Taxes and Charges (Company Currency),Total impue
 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +60,Show unclosed fiscal year's P&L balances,Mostrar P & L saldos sin cerrar el año fiscal
 DocType: Shipping Rule,Shipping Account,Cuenta de envíos
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}: La cuenta {2} está inactiva
-apps/erpnext/erpnext/utilities/activation.py +83,Make Sales Orders to help you plan your work and deliver on-time,Hacen pedidos de cliente para ayudarle a planificar su trabajo y entrega del tiempo de funcionamiento
+apps/erpnext/erpnext/utilities/activation.py +83,Make Sales Orders to help you plan your work and deliver on-time,Hacer Ordenes de Ventas para ayudar a planificar tu trabajo y entregar en tiempo
 DocType: Quality Inspection,Readings,Lecturas
 DocType: Stock Entry,Total Additional Costs,Total de costos adicionales
 DocType: Course Schedule,SH,SH
 DocType: BOM,Scrap Material Cost(Company Currency),El costo del desecho de materiales (Compañía de divisas)
 apps/erpnext/erpnext/public/js/setup_wizard.js +300,Sub Assemblies,Sub-Ensamblajes
 DocType: Asset,Asset Name,Nombre de activos
-DocType: Project,Task Weight,Peso de tareas
+DocType: Project,Task Weight,Peso de la Tarea
 DocType: Shipping Rule Condition,To Value,Para el valor
 DocType: Asset Movement,Stock Manager,Gerente de almacén
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +135,Source warehouse is mandatory for row {0},El almacén de origen es obligatorio para la línea {0}
@@ -1467,7 +1467,7 @@ DocType: Workstation Working Hour,Workstation Working Hour,Horario de la estaci
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +87,Analyst,Analista
 DocType: Item,Inventory,inventario
 DocType: Item,Sales Details,Detalles de ventas
-DocType: Quality Inspection,QI-,qi
+DocType: Quality Inspection,QI-,QI-
 DocType: Opportunity,With Items,Con productos
 apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +36,In Qty,En cantidad
 DocType: Notification Control,Expense Claim Rejected,Reembolso de gastos rechazado
@@ -1487,7 +1487,7 @@ DocType: Leave Type,Is Leave Without Pay,Es una ausencia sin goce de salario
 apps/erpnext/erpnext/stock/doctype/item/item.py +237,Asset Category is mandatory for Fixed Asset item,Categoría activo es obligatorio para la partida del activo fijo
 apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +145,No records found in the Payment table,No se encontraron registros en la tabla de pagos
 apps/erpnext/erpnext/schools/utils.py +19,This {0} conflicts with {1} for {2} {3},Este {0} conflictos con {1} de {2} {3}
-DocType: Student Attendance Tool,Students HTML,Los estudiantes HTML
+DocType: Student Attendance Tool,Students HTML,HTML de Estudiantes
 apps/erpnext/erpnext/public/js/setup_wizard.js +60,Financial Year Start Date,Inicio del ejercicio contable
 DocType: POS Profile,Apply Discount,Aplicar Descuento
 DocType: Employee External Work History,Total Experience,Experiencia total
@@ -1563,7 +1563,7 @@ DocType: Products Settings,"If checked, the Home page will be the default Item G
 DocType: Quality Inspection Reading,Reading 4,Lectura 4
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +498,Default BOM for {0} not found for Project {1},BOM por defecto para {0} no encontrado para Proyecto {1}
 apps/erpnext/erpnext/config/hr.py +127,Claims for company expense.,Peticiones para gastos de compañía
-apps/erpnext/erpnext/utilities/activation.py +119,"Students are at the heart of the system, add all your students","Los estudiantes están en el corazón del sistema, se suman todos sus estudiantes"
+apps/erpnext/erpnext/utilities/activation.py +119,"Students are at the heart of the system, add all your students","Los estudiantes son el corazón del sistema, agrega todos tus estudiantes"
 apps/erpnext/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py +81,Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Fila # {0}: Fecha de Liquidación {1} no puede ser anterior Cheque Fecha {2}
 DocType: Company,Default Holiday List,Lista de vacaciones / festividades predeterminadas
 apps/erpnext/erpnext/projects/doctype/timesheet/timesheet.py +187,Row {0}: From Time and To Time of {1} is overlapping with {2},Fila {0}: Del tiempo y Tiempo de {1} se solapan con {2}
@@ -1614,7 +1614,7 @@ apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +18
 DocType: Party Account,Party Account,Cuenta asignada
 apps/erpnext/erpnext/config/setup.py +122,Human Resources,Recursos humanos
 DocType: Lead,Upper Income,Ingresos superior
-DocType: Item Manufacturer,Item Manufacturer,artículo Fabricante
+DocType: Item Manufacturer,Item Manufacturer,Fabricante del artículo
 apps/erpnext/erpnext/schools/doctype/student_applicant/student_applicant.js +13,Reject,Rechazar
 DocType: Journal Entry Account,Debit in Company Currency,Divisa por defecto de la cuenta de débito
 DocType: BOM Item,BOM Item,Lista de materiales (LdM) del producto
@@ -1623,7 +1623,7 @@ apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.js +41,Make Disburse
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +126,Row {0}: Advance against Supplier must be debit,Fila {0}: Avance contra el Proveedor debe debitar
 DocType: Company,Default Values,Valores predeterminados
 DocType: Expense Claim,Total Amount Reimbursed,Monto total reembolsado
-apps/erpnext/erpnext/hr/doctype/vehicle/vehicle_dashboard.py +5,This is based on logs against this Vehicle. See timeline below for details,Esto se basa en los registros contra este vehículo. Ver cronología abajo para más detalles
+apps/erpnext/erpnext/hr/doctype/vehicle/vehicle_dashboard.py +5,This is based on logs against this Vehicle. See timeline below for details,Esta basado en registros contra este Vehículo. Ver el cronograma debajo para más detalles
 apps/erpnext/erpnext/schools/doctype/fees/fees.js +41,Collect,Recoger
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +82,Against Supplier Invoice {0} dated {1},Contra factura de proveedor {0} con fecha{1}
 DocType: Customer,Default Price List,Lista de precios por defecto
@@ -1636,7 +1636,7 @@ apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +42,
 apps/erpnext/erpnext/config/accounts.py +142,Update bank payment dates with journals.,Actualización de las fechas de pago del banco con los registros.
 apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +21,Pricing,la fijación de precios
 DocType: Quotation,Term Details,Detalles de términos y condiciones
-apps/erpnext/erpnext/schools/doctype/student_group/student_group.py +40,Cannot enroll more than {0} students for this student group.,No se puede inscribir más de {0} estudiantes de este grupo de estudiantes.
+apps/erpnext/erpnext/schools/doctype/student_group/student_group.py +40,Cannot enroll more than {0} students for this student group.,No se puede inscribir más de {0} estudiantes para este grupo de estudiantes.
 apps/erpnext/erpnext/accounts/doctype/asset_category/asset_category.py +15,{0} must be greater than 0,{0} debe ser mayor que 0
 DocType: Manufacturing Settings,Capacity Planning For (Days),Planificación de capacidad para (Días)
 apps/erpnext/erpnext/buying/doctype/supplier/supplier_dashboard.py +10,Procurement,Obtención
@@ -1650,7 +1650,7 @@ DocType: Pricing Rule,Applicable For,Aplicable para.
 DocType: Accounts Settings,Unlink Payment on Cancellation of Invoice,Desvinculación de Pago en la cancelación de la factura
 apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py +16,Current Odometer reading entered should be greater than initial Vehicle Odometer {0},Lectura actual del odómetro entrado debe ser mayor que el cuentakilómetros inicial {0}
 DocType: Shipping Rule Country,Shipping Rule Country,Regla de envio del país
-apps/erpnext/erpnext/hr/doctype/employee/employee_dashboard.py +10,Leave and Attendance,Deja y Asistencia
+apps/erpnext/erpnext/hr/doctype/employee/employee_dashboard.py +10,Leave and Attendance,Ausencia y Asistencia
 DocType: Maintenance Visit,Partially Completed,Parcialmente completado
 DocType: Leave Type,Include holidays within leaves as leaves,Incluir las vacaciones y ausencias únicamente como ausencias
 DocType: Sales Invoice,Packed Items,Productos Empacados
@@ -1662,7 +1662,7 @@ DocType: Employee,Permanent Address,Dirección permanente
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +248,"Advance paid against {0} {1} cannot be greater \
 						than Grand Total {2}",El anticipo pagado para {0} {1} no puede ser mayor que el total {2}
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +148,Please select item code,"Por favor, seleccione el código del producto"
-DocType: Student Sibling,Studying in Same Institute,Estudiar en el mismo Instituto
+DocType: Student Sibling,Studying in Same Institute,Estudian en el mismo Instituto
 DocType: Territory,Territory Manager,Gerente de Territorio
 DocType: Packed Item,To Warehouse (Optional),Para almacenes (Opcional)
 DocType: Payment Entry,Paid Amount (Company Currency),Monto pagado (Divisa por defecto)
@@ -1671,7 +1671,7 @@ DocType: Selling Settings,Selling Settings,Configuración de ventas
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +39,Online Auctions,Subastas en línea
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +98,Please specify either Quantity or Valuation Rate or both,"Por favor indique la Cantidad o el Tipo de Valoración, o ambos"
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order_dashboard.py +14,Fulfillment,Cumplimiento
-apps/erpnext/erpnext/templates/generators/item.html +67,View in Cart,Ver Carrito
+apps/erpnext/erpnext/templates/generators/item.html +67,View in Cart,Ver en Carrito
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +101,Marketing Expenses,GASTOS DE PUBLICIDAD
 ,Item Shortage Report,Reporte de productos con stock bajo
 apps/erpnext/erpnext/stock/doctype/item/item.js +256,"Weight is mentioned,\nPlease mention ""Weight UOM"" too","El peso está definido,\nPor favor indique ""UDM Peso"" también"
@@ -1715,7 +1715,7 @@ apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_repo
 DocType: Program Course,Required,Necesario
 DocType: Job Applicant,Applicant for a Job,Solicitante de Empleo
 DocType: Production Plan Material Request,Production Plan Material Request,Producción Solicitud Plan de materiales
-apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +235,No Production Orders created,No existen órdenes de producción (OP)
+apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +235,No Production Orders created,No se crearon Ordenes de Producción
 DocType: Stock Reconciliation,Reconciliation JSON,Reconciliación JSON
 apps/erpnext/erpnext/accounts/report/financial_statements.html +3,Too many columns. Export the report and print it using a spreadsheet application.,Hay demasiadas columnas. Exportar el informe e imprimirlo mediante una aplicación de hoja de cálculo.
 DocType: Purchase Invoice Item,Batch No,Lote No.
@@ -1754,7 +1754,7 @@ apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +188,Please set
 DocType: Packing Slip,The net weight of this package. (calculated automatically as sum of net weight of items),El peso neto de este paquete. (calculado automáticamente por la suma del peso neto de los materiales)
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +82,Please create an Account for this Warehouse and link it. This cannot be done automatically as an account with name {0} already exists,Por favor crea una cuenta para este almacén y vincularlo. Esto no se puede hacer automáticamente como una cuenta con el nombre {0} ya existe
 DocType: Sales Order,To Deliver and Bill,Para entregar y facturar
-DocType: Student Batch,Instructors,Los instructores
+DocType: Student Batch,Instructors,Instructores
 DocType: GL Entry,Credit Amount in Account Currency,Importe acreditado con la divisa
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +510,BOM {0} must be submitted,La lista de materiales (LdM) {0} debe ser validada
 DocType: Authorization Control,Authorization Control,Control de Autorización
@@ -1779,12 +1779,12 @@ DocType: Hub Settings,Hub Node,Nodo del centro de actividades
 apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +78,You have entered duplicate items. Please rectify and try again.,Ha introducido elementos duplicados . Por favor rectifique y vuelva a intentarlo .
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +91,Associate,Asociado
 DocType: Asset Movement,Asset Movement,Movimiento activo
-apps/erpnext/erpnext/accounts/page/pos/pos.js +2031,New Cart,nuevo carro
+apps/erpnext/erpnext/accounts/page/pos/pos.js +2031,New Cart,Nuevo Carrito
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +44,Item {0} is not a serialized Item,El producto {0} no es un producto serializado
 DocType: SMS Center,Create Receiver List,Crear lista de receptores
 DocType: Vehicle,Wheels,ruedas
 DocType: Packing Slip,To Package No.,Al paquete No.
-DocType: Production Planning Tool,Material Requests,Las solicitudes de materiales
+DocType: Production Planning Tool,Material Requests,Solicitudes de Material
 DocType: Warranty Claim,Issue Date,Fecha de emisión
 DocType: Activity Cost,Activity Cost,Costo de Actividad
 DocType: Sales Invoice Timesheet,Timesheet Detail,Detalle de parte de horas
@@ -1881,14 +1881,14 @@ apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_p
 DocType: Item Attribute,Attribute Name,Nombre del Atributo
 DocType: BOM,Show In Website,Mostrar en el sitio web
 DocType: Shopping Cart Settings,Show Quantity in Website,Cantidad mostrar en la Página Web
-DocType: Employee Loan Application,Total Payable Amount,La cantidad total a pagar
+DocType: Employee Loan Application,Total Payable Amount,Monto Total a Pagar
 DocType: Task,Expected Time (in hours),Tiempo previsto (en horas)
 DocType: Item Reorder,Check in (group),El proceso de registro (grupo)
 ,Qty to Order,Cantidad a solicitar
 DocType: Period Closing Voucher,"The account head under Liability or Equity, in which Profit/Loss will be booked","El cabezal cuenta bajo pasivo o patrimonio, en el que será reservado Ganancia / Pérdida"
 apps/erpnext/erpnext/config/projects.py +25,Gantt chart of all tasks.,Diagrama Gantt de todas las tareas.
 DocType: Opportunity,Mins to First Response,Minutos hasta la primera respuesta
-DocType: Pricing Rule,Margin Type,Tipo margen
+DocType: Pricing Rule,Margin Type,Tipo de margen
 apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +15,{0} hours,{0} horas
 DocType: Course,Default Grading Scale,Escala de Calificación por defecto
 DocType: Appraisal,For Employee Name,Por nombre de empleado
@@ -1911,7 +1911,7 @@ apps/erpnext/erpnext/public/js/setup_wizard.js +303,Pair,Par
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +887,Select BOM and Qty for Production,Seleccione la lista de materiales y de Unidades de Producción
 DocType: Asset,Depreciation Schedule,Programación de la depreciación
 DocType: Bank Reconciliation Detail,Against Account,Contra la cuenta
-apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +71,Half Day Date should be between From Date and To Date,Medio día de la fecha debe estar entre De la fecha y Hasta la fecha
+apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +71,Half Day Date should be between From Date and To Date,Fecha de medio día debe estar entre la fecha desde y fecha hasta
 DocType: Maintenance Schedule Detail,Actual Date,Fecha Real
 DocType: Item,Has Batch No,Posee número de lote
 apps/erpnext/erpnext/public/js/utils.js +90,Annual Billing: {0},Facturación anual: {0}
@@ -1958,7 +1958,7 @@ apps/erpnext/erpnext/accounts/doctype/account/account.js +53,Group to Non-Group,
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +50,Sports,Deportes
 DocType: Loan Type,Loan Name,Nombre del préstamo
 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +56,Total Actual,Total Actual
-DocType: Student Siblings,Student Siblings,Los hermanos de los estudiantes
+DocType: Student Siblings,Student Siblings,Hermanos del Estudiante
 apps/erpnext/erpnext/public/js/setup_wizard.js +303,Unit,Unidad(es)
 apps/erpnext/erpnext/stock/get_item_details.py +122,Please specify Company,"Por favor, especifique la compañía"
 ,Customer Acquisition and Loyalty,Compras y Lealtad de Clientes
@@ -2020,7 +2020,7 @@ DocType: Request for Quotation,Manufacturing Manager,Gerente de producción
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +192,Serial No {0} is under warranty upto {1},Número de serie {0} está en garantía hasta {1}
 apps/erpnext/erpnext/config/stock.py +158,Split Delivery Note into packages.,Dividir nota de entrega entre paquetes.
 apps/erpnext/erpnext/hooks.py +87,Shipments,Envíos
-DocType: Payment Entry,Total Allocated Amount (Company Currency),Total asignado (Compañía de divisas)
+DocType: Payment Entry,Total Allocated Amount (Company Currency),Monto Total asignado (Divisa de la Compañia)
 DocType: Purchase Order Item,To be delivered to customer,Para ser entregado al cliente
 DocType: BOM,Scrap Material Cost,Costo de materiales de desecho
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +223,Serial No {0} does not belong to any Warehouse,El número de serie {0} no pertenece a ningún almacén
@@ -2049,7 +2049,7 @@ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +94,Sales Orde
 DocType: Purchase Invoice Item,Rate (Company Currency),Precio (Divisa por defecto)
 DocType: Student Guardian,Others,Otros
 DocType: Payment Entry,Unallocated Amount,Monto sin asignar
-apps/erpnext/erpnext/templates/includes/product_page.js +69,Cannot find a matching Item. Please select some other value for {0}.,Si no encuentra un artículo a juego. Por favor seleccione otro valor para {0}.
+apps/erpnext/erpnext/templates/includes/product_page.js +69,Cannot find a matching Item. Please select some other value for {0}.,No se peude encontrar un artículo que concuerde.  Por favor seleccione otro valor para {0}.
 DocType: POS Profile,Taxes and Charges,Impuestos y cargos
 DocType: Item,"A Product or a Service that is bought, sold or kept in stock.","Un producto o un servicio que se compra, se vende o se mantiene en stock."
 apps/erpnext/erpnext/hr/page/team_updates/team_updates.js +44,No more updates,No hay más actualizaciones
@@ -2073,7 +2073,7 @@ apps/erpnext/erpnext/config/stock.py +315,Serialized Inventory,Inventario Serial
 DocType: Employee Loan,Account Info,Informacion de cuenta
 DocType: Activity Type,Default Billing Rate,Monto de facturación predeterminada
 DocType: Sales Invoice,Total Billing Amount,Importe total de facturación
-apps/erpnext/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.py +17,There must be a default incoming Email Account enabled for this to work. Please setup a default incoming Email Account (POP/IMAP) and try again.,"Tiene que haber un defecto de entrada cuenta de correo electrónico habilitado para que esto funcione. Por favor, configurar una cuenta de correo electrónico entrante por defecto (POP / IMAP) y vuelve a intentarlo."
+apps/erpnext/erpnext/hr/doctype/daily_work_summary_settings/daily_work_summary_settings.py +17,There must be a default incoming Email Account enabled for this to work. Please setup a default incoming Email Account (POP/IMAP) and try again.,Tiene que haber una cuenta de correo electrónico habilitada por defecto para que esto funcione. Por favor configure una cuenta entrante de correo electrónico por defecto (POP / IMAP) y vuelve a intentarlo.
 apps/erpnext/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +59,Receivable Account,Cuenta por cobrar
 apps/erpnext/erpnext/controllers/accounts_controller.py +559,Row #{0}: Asset {1} is already {2},Fila # {0}: {1} de activos ya es {2}
 DocType: Quotation Item,Stock Balance,Balance de Inventarios.
@@ -2149,9 +2149,9 @@ apps/erpnext/erpnext/config/setup.py +61,Printing and Branding,Impresión y marc
 DocType: Bin,Actual Quantity,Cantidad real
 DocType: Shipping Rule,example: Next Day Shipping,ejemplo : Envío express
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +188,Serial No {0} not found,Numero de serie {0} no encontrado
-apps/erpnext/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +41,Student Batch,lote estudiante
+apps/erpnext/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +41,Student Batch,Lote de Estudiante
 apps/erpnext/erpnext/public/js/setup_wizard.js +242,Your Customers,Sus clientes
-apps/erpnext/erpnext/utilities/activation.py +120,Make Student,hacer Estudiante
+apps/erpnext/erpnext/utilities/activation.py +120,Make Student,Crear Estudiante
 apps/erpnext/erpnext/projects/doctype/project/project.py +190,You have been invited to collaborate on the project: {0},Se le ha invitado a colaborar en el proyecto: {0}
 DocType: Leave Block List Date,Block Date,Bloquear fecha
 apps/erpnext/erpnext/templates/generators/student_admission.html +23,Apply Now,Aplica ya
@@ -2220,7 +2220,7 @@ DocType: Grade Interval,Grade Description,grado Descripción
 DocType: Stock Entry,Purchase Receipt No,Recibo de compra No.
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +30,Earnest Money,GANANCIAS PERCIBIDAS
 DocType: Process Payroll,Create Salary Slip,Crear nómina salarial
-apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +34,Traceability,trazabilidad
+apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +34,Traceability,Trazabilidad
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +135,Source of Funds (Liabilities),Origen de fondos (Pasivo)
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +372,Quantity in row {0} ({1}) must be same as manufactured quantity {2},La cantidad en la línea {0} ({1}) debe ser la misma que la cantidad producida {2}
 DocType: Appraisal,Employee,Empleado
@@ -2270,7 +2270,7 @@ DocType: Shipping Rule,Shipping Rule Label,Etiqueta de regla de envío
 apps/erpnext/erpnext/public/js/conf.js +28,User Forum,Foro de Usuarios
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +248,Raw Materials cannot be blank.,'Materias primas' no puede estar en blanco.
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +444,"Could not update stock, invoice contains drop shipping item.","No se pudo actualizar valores, factura contiene los artículos del envío de la gota."
-apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +459,Quick Journal Entry,Asiento Rápida
+apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +459,Quick Journal Entry,Asiento Contable Rápido
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +142,You can not change rate if BOM mentioned agianst any item,No se puede cambiar el precio si existe una Lista de materiales (LdM) en el producto
 apps/erpnext/erpnext/schools/doctype/student_batch/student_batch.py +24,Student Group exists with same name,Grupo de Estudiantes existe con el mismo nombre
 DocType: Employee,Previous Work Experience,Experiencia laboral previa
@@ -2309,7 +2309,7 @@ DocType: Purchase Receipt,Get Current Stock,Verificar inventario actual
 apps/erpnext/erpnext/config/manufacturing.py +46,Tree of Bill of Materials,Árbol de lista de materiales
 DocType: Student,Joining Date,Dia de ingreso
 ,Employees working on a holiday,Los empleados que trabajan en un día festivo
-apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +151,Mark Present,Marcos Presente
+apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +151,Mark Present,Marcar Presente
 DocType: Project,% Complete Method,% Método completado
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +201,Maintenance start date can not be before delivery date for Serial No {0},La fecha de inicio del mantenimiento no puede ser anterior de la fecha de entrega para {0}
 DocType: Production Order,Actual End Date,Fecha Real de Finalización
@@ -2320,7 +2320,7 @@ DocType: Stock Entry,Purpose,Propósito
 DocType: Company,Fixed Asset Depreciation Settings,Configuración de depreciación de los inmuebles
 DocType: Item,Will also apply for variants unless overrridden,También se aplicará para las variantes menos que se sobre escriba
 DocType: Purchase Invoice,Advances,Anticipos
-DocType: Production Order,Manufacture against Material Request,Fabricación contra pedido Material
+DocType: Production Order,Manufacture against Material Request,Fabricación contra Pedido de Material
 DocType: Item Reorder,Request for,solicitud de
 apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +32,Approving User cannot be same as user the rule is Applicable To,El usuario que aprueba no puede ser igual que el usuario para el que la regla es aplicable
 DocType: Stock Entry Detail,Basic Rate (as per Stock UOM),Precio base (según la UdM)
@@ -2337,7 +2337,7 @@ DocType: Sales Partner,A third party distributor / dealer / commission agent / a
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +364,{0} against Purchase Order {1},{0} contra la orden de compra {1}
 DocType: SMS Settings,"Enter static url parameters here (Eg. sender=ERPNext, username=ERPNext, password=1234 etc.)","Introduzca los parámetros de URL aquí (Ej. sender = ERPNext , nombre de usuario = ERPNext , contraseña = 1234 etc )"
 DocType: Task,Actual Start Date (via Time Sheet),Fecha de inicio real (a través de hoja de horas)
-apps/erpnext/erpnext/portal/doctype/homepage/homepage.py +15,This is an example website auto-generated from ERPNext,Este es un sitio web ejemplo generado automáticamente por ERPNext
+apps/erpnext/erpnext/portal/doctype/homepage/homepage.py +15,This is an example website auto-generated from ERPNext,Este es un sitio web de ejemplo generado automáticamente por ERPNext
 apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +37,Ageing Range 1,Rango de antigüedad 1
 DocType: Purchase Taxes and Charges Template,"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.
 
@@ -2448,17 +2448,17 @@ apps/erpnext/erpnext/config/manufacturing.py +74,Replace Item / BOM in all BOMs,
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +52,Receipt document must be submitted,documento de recepción debe ser presentado
 DocType: Purchase Invoice Item,Received Qty,Cantidad recibida
 DocType: Stock Entry Detail,Serial No / Batch,No. de serie / lote
-apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +310,Not Paid and Not Delivered,"No satisfechos, y no entregados"
+apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +310,Not Paid and Not Delivered,No pago y no entregado
 DocType: Product Bundle,Parent Item,Producto padre / principal
 DocType: Account,Account Type,Tipo de cuenta
 DocType: Delivery Note,DN-RET-,DN-RET-
-apps/erpnext/erpnext/templates/pages/projects.html +58,No time sheets,De listas de asistencia
+apps/erpnext/erpnext/templates/pages/projects.html +58,No time sheets,No hay hojas de tiempo
 apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +123,Leave Type {0} cannot be carry-forwarded,Deja tipo {0} no se pueden reenviar-llevar
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +216,Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',"El programa de mantenimiento no se genera para todos los productos. Por favor, haga clic en 'Generar programación'"
 ,To Produce,Producir
 apps/erpnext/erpnext/config/hr.py +93,Payroll,Nómina de sueldos
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +171,"For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included","Para la línea {0} en {1}. incluir {2} en la tasa del producto, las lineas {3} también deben ser incluidas"
-apps/erpnext/erpnext/utilities/activation.py +102,Make User,hacer usuario
+apps/erpnext/erpnext/utilities/activation.py +102,Make User,Crear Usuario
 DocType: Packing Slip,Identification of the package for the delivery (for print),La identificación del paquete para la entrega (para impresión)
 DocType: Bin,Reserved Quantity,Cantidad Reservada
 DocType: Landed Cost Voucher,Purchase Receipt Items,Productos del recibo de compra
@@ -2473,10 +2473,10 @@ DocType: Stock Reconciliation Item,Current Qty,Cant. Actual
 DocType: BOM Item,"See ""Rate Of Materials Based On"" in Costing Section",Consulte 'tasa de materiales en base de' en la sección de costos
 DocType: Appraisal Goal,Key Responsibility Area,Área de Responsabilidad Clave
 apps/erpnext/erpnext/utilities/activation.py +128,"Student Batches help you track attendance, assessments and fees for students","Los lotes de los estudiantes ayudan a realizar un seguimiento de asistencia, evaluaciones y cuotas para los estudiantes"
-DocType: Payment Entry,Total Allocated Amount,Total asignado
+DocType: Payment Entry,Total Allocated Amount,Monto Total Asignado
 DocType: Item Reorder,Material Request Type,Tipo de requisición
 apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +273,Accural Journal Entry for salaries from {0} to {1},Entrada de diario Accural para salarios de {0} a {1}
-apps/erpnext/erpnext/accounts/page/pos/pos.js +768,"LocalStorage is full, did not save","LocalStorage está llena, no salvó"
+apps/erpnext/erpnext/accounts/page/pos/pos.js +768,"LocalStorage is full, did not save","Almacenamiento Local esta lleno, no se guardó"
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +79,Row {0}: UOM Conversion Factor is mandatory,Línea {0}: El factor de conversión de (UdM) es obligatorio
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +17,Ref,Referencia
 DocType: Budget,Cost Center,Centro de costos
@@ -2508,7 +2508,7 @@ apps/erpnext/erpnext/config/selling.py +36,Manage Customer Group Tree.,Administr
 DocType: Supplier Quotation,SQTN-,SQTN-
 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +22,New Cost Center Name,Nombre del nuevo centro de costes
 DocType: Leave Control Panel,Leave Control Panel,Panel de control de ausencias
-DocType: Project,Task Completion,La terminación de la tarea
+DocType: Project,Task Completion,Completitud de Tarea
 apps/erpnext/erpnext/templates/form_grid/stock_entry_grid.html +26,Not in Stock,No disponible en stock
 DocType: Appraisal,HR User,Usuario de recursos humanos
 DocType: Purchase Invoice,Taxes and Charges Deducted,Impuestos y cargos deducidos
@@ -2534,7 +2534,7 @@ apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +113,Local,Local
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +26,Loans and Advances (Assets),INVERSIONES Y PRESTAMOS
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +12,Debtors,DEUDORES VARIOS
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +161,Large,Grande
-DocType: Homepage Featured Product,Homepage Featured Product,Página de inicio Producto destacado
+DocType: Homepage Featured Product,Homepage Featured Product,Producto destacado en página de inicio
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +198,All Assessment Groups,Todos los grupos de evaluación
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse_tree.js +15,New Warehouse Name,Almacén nuevo nombre
 apps/erpnext/erpnext/accounts/report/financial_statements.py +218,Total {0} ({1}),Total {0} ({1})
@@ -2600,8 +2600,8 @@ apps/erpnext/erpnext/stock/doctype/item/item_list.js +8,Shortage,Escasez
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +188,{0} {1} does not associated with {2} {3},{0} {1} no asociada a {2} {3}
 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +18,Attendance for employee {0} is already marked,Asistencia para el empleado {0} ya está marcado
 DocType: Packing Slip,If more than one package of the same type (for print),Si es más de un paquete del mismo tipo (para impresión)
-,Salary Register,salario Registro
-DocType: Warehouse,Parent Warehouse,Almacén de los padres
+,Salary Register,Registro de Salario
+DocType: Warehouse,Parent Warehouse,Almacén Padre
 DocType: C-Form Invoice Detail,Net Total,Total Neto
 apps/erpnext/erpnext/config/hr.py +163,Define various loan types,Definir varios tipos de préstamos
 DocType: Bin,FCFS Rate,Cambio FCFS
@@ -2670,13 +2670,13 @@ DocType: Training Event,Theory,Teoría
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +757,Warning: Material Requested Qty is less than Minimum Order Qty,Advertencia: La requisición de materiales es menor que la orden mínima establecida
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +212,Account {0} is frozen,La cuenta {0} está congelada
 DocType: Company,Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.,Entidad Legal / Subsidiario con un Catalogo de Cuentas separado que pertenece a la Organización.
-DocType: Payment Request,Mute Email,Silenciar Email
+DocType: Payment Request,Mute Email,Email Silenciado
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +29,"Food, Beverage & Tobacco","Alimentos, bebidas y tabaco"
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +623,Can only make payment against unbilled {0},Sólo se puede crear el pago contra {0} impagado
 apps/erpnext/erpnext/controllers/selling_controller.py +131,Commission rate cannot be greater than 100,El porcentaje de comisión no puede ser superior a 100
 DocType: Stock Entry,Subcontract,Sub-contrato
 apps/erpnext/erpnext/public/js/utils/party.js +161,Please enter {0} first,"Por favor, introduzca {0} primero"
-apps/erpnext/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py +64,No replies from,No hay respuestas desde
+apps/erpnext/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py +64,No replies from,No hay respuestas de
 DocType: Production Order Operation,Actual End Time,Hora final real
 DocType: Production Planning Tool,Download Materials Required,Descargar materiales necesarios
 DocType: Item Manufacturer,Manufacturer Part Number,Número de componente del fabricante
@@ -2704,7 +2704,7 @@ apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.htm
 DocType: Rename Tool,Rename Log,Cambiar el nombre de sesión
 DocType: HR Settings,Maintain Billing Hours and Working Hours Same on Timesheet,Mantener Horas y horas de trabajo de facturación igual en parte de horas
 DocType: Maintenance Visit Purpose,Against Document No,Contra el Documento No
-DocType: BOM,Scrap,Chatarra
+DocType: BOM,Scrap,Desecho
 apps/erpnext/erpnext/config/selling.py +110,Manage Sales Partners.,Administrar socios de ventas.
 DocType: Quality Inspection,Inspection Type,Tipo de inspección
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +237,Warehouses with existing transaction can not be converted to group.,Complejos de transacción existentes no pueden ser convertidos en grupo.
@@ -2734,7 +2734,7 @@ apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +183,Probationary Pe
 DocType: Customer Group,Only leaf nodes are allowed in transaction,Sólo las sub-cuentas son permitidas en una transacción
 DocType: Expense Claim,Expense Approver,Supervisor de gastos
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +124,Row {0}: Advance against Customer must be credit,Fila {0}: Avance contra el Cliente debe ser de crédito
-apps/erpnext/erpnext/accounts/doctype/account/account.js +66,Non-Group to Group,No al Grupo Grupo
+apps/erpnext/erpnext/accounts/doctype/account/account.js +66,Non-Group to Group,No-Grupo a Grupo
 DocType: Purchase Receipt Item Supplied,Purchase Receipt Item Supplied,Recibo de compra del producto suministrado
 DocType: Payment Entry,Pay,Pagar
 apps/erpnext/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py +24,To Datetime,Para fecha y hora
@@ -2761,7 +2761,7 @@ apps/erpnext/erpnext/accounts/doctype/account/account.py +132,Account with child
 DocType: Purchase Invoice Item,Accepted Warehouse,Almacén Aceptado
 DocType: Bank Reconciliation Detail,Posting Date,Fecha de contabilización
 DocType: Item,Valuation Method,Método de valoración
-apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +202,Mark Half Day,Medio Día Marcos
+apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +202,Mark Half Day,Marcar Medio Día
 DocType: Sales Invoice,Sales Team,Equipo de ventas
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +85,Duplicate entry,Entrada duplicada
 DocType: Program Enrollment Tool,Get Students,Obtener estudiantes
@@ -2770,7 +2770,7 @@ apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +511,[Error
 DocType: Sales Order,In Words will be visible once you save the Sales Order.,En palabras serán visibles una vez que guarde el pedido de ventas.
 ,Employee Birthday,Cumpleaños del empleado
 DocType: Student Batch Attendance Tool,Student Batch Attendance Tool,Herramienta de lotes de Asistencia del Estudiante
-apps/erpnext/erpnext/controllers/status_updater.py +198,Limit Crossed,límite cruzadas
+apps/erpnext/erpnext/controllers/status_updater.py +198,Limit Crossed,Límite Cruzado
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +55,Venture Capital,Capital de riesgo
 apps/erpnext/erpnext/schools/doctype/academic_term/academic_term.py +40,An academic term with this 'Academic Year' {0} and 'Term Name' {1} already exists. Please modify these entries and try again.,"Un término académico con esto 'Año Académico' {0} y 'Nombre término' {1} ya existe. Por favor, modificar estas entradas y vuelva a intentarlo."
 apps/erpnext/erpnext/stock/doctype/item/item.py +466,"As there are existing transactions against item {0}, you can not change the value of {1}","Como hay transacciones existentes contra el elemento {0}, no se puede cambiar el valor de {1}"
@@ -2805,7 +2805,7 @@ apps/erpnext/erpnext/accounts/utils.py +494,Payment Entries {0} are un-linked,La
 DocType: GL Entry,Voucher No,Comprobante No.
 DocType: Leave Allocation,Leave Allocation,Asignación de vacaciones
 DocType: Payment Request,Recipient Message And Payment Details,Mensaje receptor y formas de pago
-DocType: Training Event,Trainer Email,entrenador correo electrónico
+DocType: Training Event,Trainer Email,Correo electrónico del entrenador
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +546,Material Requests {0} created,Requisición de materiales {0} creada
 DocType: Production Planning Tool,Include sub-contracted raw materials,Incluya materias primas subcontratados
 apps/erpnext/erpnext/config/selling.py +164,Template of terms or contract.,Configuración de las plantillas de términos y condiciones.
@@ -2854,7 +2854,7 @@ apps/erpnext/erpnext/config/selling.py +169,Tax template for selling transaction
 DocType: Sales Invoice,Write Off Outstanding Amount,Balance de pagos pendientes
 DocType: Student Batch Creation Tool,Student Batch Creation Tool,Herramienta de Creación de lotes estudiante
 DocType: Stock Settings,Default Stock UOM,Unidad de Medida (UdM) predeterminada para Inventario
-DocType: Asset,Number of Depreciations Booked,Número de reserva Depreciaciones
+DocType: Asset,Number of Depreciations Booked,Cantidad de Depreciaciones Reservadas
 apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.py +32,Against Employee Loan: {0},Préstamo contra del empleado: {0}
 DocType: Landed Cost Item,Receipt Document,la recepción de documentos
 DocType: Production Planning Tool,Create Material Requests,Crear requisición de materiales
@@ -2868,7 +2868,7 @@ apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +170,Closed orde
 DocType: Student Guardian,Father,Padre
 apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,'Actualización de Inventario' no se puede comprobar en venta de activos fijos
 DocType: Bank Reconciliation,Bank Reconciliation,Conciliación bancaria
-DocType: Attendance,On Leave,en licencia
+DocType: Attendance,On Leave,De licencia
 apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +7,Get Updates,Obtener actualizaciones
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +97,{0} {1}: Account {2} does not belong to Company {3},{0} {1}: La cuenta {2} no pertenece a la empresa {3}
 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +132,Material Request {0} is cancelled or stopped,Requisición de materiales {0} cancelada o detenida
@@ -2972,7 +2972,7 @@ DocType: Hub Settings,Publish Items to Hub,Publicar artículos al Hub
 apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +44,From value must be less than to value in row {0},El valor debe ser menor que el valor de la línea {0}
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +144,Wire Transfer,Transferencia bancaria
 apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +131,Check all,Marque todas las
-DocType: Vehicle Log,Invoice Ref,Ref factura
+DocType: Vehicle Log,Invoice Ref,Referencia de Factura
 DocType: Purchase Order,Recurring Order,Orden recurrente
 DocType: Company,Default Income Account,Cuenta de ingresos por defecto
 apps/erpnext/erpnext/selling/page/sales_analytics/sales_analytics.js +33,Customer Group / Customer,Categoría de cliente / Cliente
@@ -3016,7 +3016,7 @@ apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +18,Net Cash from Op
 apps/erpnext/erpnext/public/js/setup_wizard.js +230,e.g. VAT,por ejemplo IVA
 apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +26,Item 4,Elemento 4
 DocType: Student Admission,Admission End Date,La entrada Fecha de finalización
-apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +21,Sub-contracting,La subcontratación
+apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +21,Sub-contracting,Subcontratación
 DocType: Journal Entry Account,Journal Entry Account,Cuenta de asiento contable
 apps/erpnext/erpnext/schools/doctype/academic_year/academic_year.js +3,Student Group,Grupo de Estudiantes
 DocType: Shopping Cart Settings,Quotation Series,Series de Presupuestos
@@ -3037,7 +3037,7 @@ DocType: Assessment Plan,Examiner,Examinador
 DocType: Student,Siblings,Los hermanos
 DocType: Journal Entry,Stock Entry,Entradas de inventario
 DocType: Payment Entry,Payment References,Referencias de pago
-DocType: C-Form,C-FORM-,C-FORM
+DocType: C-Form,C-FORM-,Formulario-C
 DocType: Vehicle,Insurance Details,Detalles de Seguros
 DocType: Account,Payable,Pagadero
 apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.py +113,Please enter Repayment Periods,"Por favor, introduzca plazos de amortización"
@@ -3096,7 +3096,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +192,Valuat
 DocType: POS Profile,Update Stock,Actualizar el Inventario
 apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +100,Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM.,Unidad de Medida diferente para elementos dará lugar a Peso Neto (Total) incorrecto. Asegúrese de que el peso neto de cada artículo esté en la misma Unidad de Medida.
 apps/erpnext/erpnext/stock/report/item_prices/item_prices.py +39,BOM Rate,Coeficiente de la lista de materiales (LdM)
-DocType: Asset,Journal Entry for Scrap,Entrada de diario de la chatarra
+DocType: Asset,Journal Entry for Scrap,Entrada de diario para desguace
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +83,Please pull items from Delivery Note,"Por favor, extraiga los productos de la nota de entrega"
 apps/erpnext/erpnext/accounts/utils.py +471,Journal Entries {0} are un-linked,Los asientos contables {0} no están enlazados
 apps/erpnext/erpnext/config/crm.py +74,"Record of all communications of type email, phone, chat, visit, etc.","Registro de todas las comunicaciones: correo electrónico, teléfono, chats, visitas, etc."
@@ -3156,13 +3156,13 @@ apps/erpnext/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +530,Please select Posting Date before selecting Party,"Por favor, seleccione Fecha de entrada antes de seleccionar la fiesta"
 DocType: Program Enrollment,School House,Casa de la escuela
 DocType: Serial No,Out of AMC,Fuera de CMA (Contrato de mantenimiento anual)
-apps/erpnext/erpnext/accounts/doctype/asset/asset.py +81,Number of Depreciations Booked cannot be greater than Total Number of Depreciations,Número de Depreciaciones reserva no puede ser mayor que el número total de amortizaciones
+apps/erpnext/erpnext/accounts/doctype/asset/asset.py +81,Number of Depreciations Booked cannot be greater than Total Number of Depreciations,Número de Depreciaciones Reservadas no puede ser mayor que el número total de Depreciaciones
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +45,Make Maintenance Visit,Crear visita de mantenimiento
 apps/erpnext/erpnext/selling/doctype/customer/customer.py +177,Please contact to the user who have Sales Master Manager {0} role,"Por favor, póngase en contacto con el usuario gerente de ventas {0}"
 DocType: Company,Default Cash Account,Cuenta de efectivo por defecto
 apps/erpnext/erpnext/config/accounts.py +56,Company (not Customer or Supplier) master.,Configuración general del sistema.
-apps/erpnext/erpnext/schools/doctype/student/student_dashboard.py +6,This is based on the attendance of this Student,Esto se basa en la presencia de este Estudiante
-apps/erpnext/erpnext/stock/dashboard/item_dashboard.js +166,Add more items or open full form,Añadir más elementos o forma totalmente abierta
+apps/erpnext/erpnext/schools/doctype/student/student_dashboard.py +6,This is based on the attendance of this Student,Basado en la asistencia de este estudiante
+apps/erpnext/erpnext/stock/dashboard/item_dashboard.js +166,Add more items or open full form,Añadir más elementos o abrir formulario completo
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +108,Please enter 'Expected Delivery Date',"Por favor, introduzca 'la fecha prevista de entrega'"
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +197,Delivery Notes {0} must be cancelled before cancelling this Sales Order,La nota de entrega {0} debe ser cancelada antes de cancelar esta orden ventas
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +77,Paid amount + Write Off Amount can not be greater than Grand Total,"El total de la cantidad pagada + desajuste, no puede ser mayor que el gran total"
@@ -3247,7 +3247,7 @@ DocType: Material Request Item,For Warehouse,Para el almacén
 DocType: Employee,Offer Date,Fecha de oferta
 apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.py +33,Quotations,Presupuestos
 apps/erpnext/erpnext/accounts/page/pos/pos.js +665,You are in offline mode. You will not be able to reload until you have network.,Usted está en modo fuera de línea. Usted no será capaz de recargar hasta que tenga conexión a red.
-apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +31,No Student Groups created.,No hay grupos de estudiantes crearon.
+apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +31,No Student Groups created.,No se crearon grupos de estudiantes.
 DocType: Purchase Invoice Item,Serial No,Número de serie
 apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.py +119,Monthly Repayment Amount cannot be greater than Loan Amount,Cantidad Mensual La devolución no puede ser mayor que Monto del préstamo
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +144,Please enter Maintaince Details first,Por favor ingrese primero los detalles del mantenimiento
@@ -3266,10 +3266,10 @@ DocType: Sales Partner,Sales Partner Name,Nombre de socio de ventas
 apps/erpnext/erpnext/hooks.py +111,Request for Quotations,Solicitud de Presupuestos
 DocType: Payment Reconciliation,Maximum Invoice Amount,Importe Máximo Factura
 DocType: Item,Device Package Code,Dispositivo Código Paquete
-DocType: Student Language,Student Language,idioma del estudiante
+DocType: Student Language,Student Language,Idioma del Estudiante
 apps/erpnext/erpnext/config/selling.py +23,Customers,Clientes
 DocType: Student Sibling,Institution,Institución
-DocType: Asset,Partially Depreciated,parcialmente depreciables
+DocType: Asset,Partially Depreciated,Despreciables Parcialmente
 DocType: Issue,Opening Time,Hora de apertura
 apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +92,From and To dates required,Desde y Hasta la fecha solicitada
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +46,Securities & Commodity Exchanges,Cambios de valores y bienes
@@ -3311,7 +3311,7 @@ DocType: Department,Days for which Holidays are blocked for this department.,Dí
 apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +121,Created Salary Slips,Nóminas creadas
 DocType: Item,Item Code for Suppliers,Código del producto para proveedores
 DocType: Issue,Raised By (Email),Propuesto por (Email)
-DocType: Training Event,Trainer Name,Nombre entrenador
+DocType: Training Event,Trainer Name,Nombre del entrenador
 DocType: Mode of Payment,General,General
 apps/erpnext/erpnext/public/js/setup_wizard.js +171,Attach Letterhead,Adjuntar membrete
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +346,Cannot deduct when category is for 'Valuation' or 'Valuation and Total',No se puede deducir cuando categoría es para ' Valoración ' o ' de Valoración y Total '
@@ -3338,7 +3338,7 @@ apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
 					using Stock Reconciliation",El producto serializado {0} no se puede actualizar / reconciliar stock
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +29,New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt,El número de serie no tiene almacén asignado. El almacén debe establecerse por entradas de inventario o recibos de compra
 DocType: Lead,Lead Type,Tipo de iniciativa
-apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +133,You are not authorized to approve leaves on Block Dates,Usted no está autorizado para aprobar las hojas de bloquear las fechas
+apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +133,You are not authorized to approve leaves on Block Dates,Usted no está autorizado para aprobar ausencias en fechas bloqueadas
 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +364,All these items have already been invoiced,Todos estos elementos ya fueron facturados
 apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py +37,Can be approved by {0},Puede ser aprobado por {0}
 DocType: Item,Default Material Request Type,El material predeterminado Tipo de solicitud
@@ -3349,13 +3349,13 @@ apps/erpnext/erpnext/accounts/page/pos/pos.js +633,Point of Sale,Punto de Venta
 DocType: Payment Entry,Received Amount,Cantidad recibida
 DocType: Production Planning Tool,"Create for full quantity, ignoring quantity already on order","Crear para la cantidad completa, haciendo caso omiso de la cantidad que ya están en orden"
 DocType: Account,Tax,Impuesto
-apps/erpnext/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +45,Not Marked,no Marcado
+apps/erpnext/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +45,Not Marked,No Marcado
 DocType: Production Planning Tool,Production Planning Tool,Planificar producción
 DocType: Quality Inspection,Report Date,Fecha del reporte
 DocType: Student,Middle Name,Segundo nombre
 DocType: C-Form,Invoices,Facturas
 DocType: Job Opening,Job Title,Título del trabajo
-apps/erpnext/erpnext/utilities/activation.py +100,Create Users,crear usuarios
+apps/erpnext/erpnext/utilities/activation.py +100,Create Users,Crear usuarios
 apps/erpnext/erpnext/public/js/setup_wizard.js +304,Gram,Gramo
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +393,Quantity to Manufacture must be greater than 0.,La cantidad a producir debe ser mayor que 0.
 apps/erpnext/erpnext/config/maintenance.py +17,Visit report for maintenance call.,Reporte de visitas para mantenimiento
@@ -3433,7 +3433,7 @@ DocType: Journal Entry,Pay To / Recd From,Pagar a / Recibido de
 DocType: Naming Series,Setup Series,Configurar secuencias
 DocType: Payment Reconciliation,To Invoice Date,Para Factura Fecha
 DocType: Supplier,Contact HTML,HTML de Contacto
-,Inactive Customers,Los clientes inactivos
+,Inactive Customers,Clientes Inactivos
 DocType: Landed Cost Voucher,LCV,LCV
 DocType: Landed Cost Voucher,Purchase Receipts,Recibos de compra
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +27,How Pricing Rule is applied?,¿Cómo se aplica la regla precios?
@@ -3453,7 +3453,7 @@ DocType: GL Entry,Remarks,Observaciones
 DocType: Payment Entry,Account Paid From,De cuenta de pago
 DocType: Purchase Order Item Supplied,Raw Material Item Code,Código de materia prima
 DocType: Journal Entry,Write Off Based On,Desajuste basado en
-apps/erpnext/erpnext/utilities/activation.py +66,Make Lead,hacer plomo
+apps/erpnext/erpnext/utilities/activation.py +66,Make Lead,Hacer una Iniciativa
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +110,Print and Stationery,Impresión y papelería
 DocType: Stock Settings,Show Barcode Field,Mostrar Campo de código de barras
 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +762,Send Supplier Emails,Enviar mensajes de correo electrónico del proveedor
@@ -3497,13 +3497,13 @@ DocType: Bank Reconciliation,Payment Entries,Las entradas de pago
 DocType: Production Order,Scrap Warehouse,Almacén de chatarra
 DocType: Program Enrollment Tool,Get Students From,Recibe estudiantes de
 DocType: Hub Settings,Seller Country,País de vendedor
-apps/erpnext/erpnext/config/learn.py +273,Publish Items on Website,Publicar artículos por página web
+apps/erpnext/erpnext/config/learn.py +273,Publish Items on Website,Publicar artículos en la página web
 apps/erpnext/erpnext/utilities/activation.py +127,Group your students in batches,Agrupar sus estudiantes en lotes
 DocType: Authorization Rule,Authorization Rule,Regla de Autorización
 DocType: Sales Invoice,Terms and Conditions Details,Detalle de términos y condiciones
 apps/erpnext/erpnext/templates/generators/item.html +85,Specifications,Especificaciones
 DocType: Sales Taxes and Charges Template,Sales Taxes and Charges Template,Plantilla de impuestos (ventas)
-apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +59,Total (Credit),Crédito total)
+apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +59,Total (Credit),Total (Crédito)
 DocType: Repayment Schedule,Payment Date,Fecha de pago
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +10,Apparel & Accessories,Ropa y Accesorios
 apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +67,Number of Order,Número de orden
@@ -3551,7 +3551,7 @@ apps/erpnext/erpnext/accounts/doctype/account/account.py +55,Account {0}: Parent
 DocType: Program Enrollment Tool,Student Applicants,Los solicitantes de los estudiantes
 apps/erpnext/erpnext/setup/doctype/company/company.js +61,Successfully deleted all transactions related to this company!,Todas las transacciones relacionadas con esta compañía han sido eliminadas correctamente.
 apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +21,As on Date,A la fecha
-DocType: Appraisal,HR,HORA
+DocType: Appraisal,HR,HR
 DocType: Program Enrollment,Enrollment Date,Fecha de inscripción
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +62,Probation,Período de prueba
 apps/erpnext/erpnext/config/hr.py +115,Salary Components,componentes de sueldos
@@ -3570,7 +3570,7 @@ DocType: Payment Request,Payment Gateway Details,Pasarela de Pagos detalles
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +235,Quantity should be greater than 0,Cantidad debe ser mayor que 0
 DocType: Journal Entry,Cash Entry,Entrada de caja
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse_tree.js +17,Child nodes can be only created under 'Group' type nodes,Los nodos hijos sólo pueden ser creados bajo los nodos de tipo "grupo"
-DocType: Leave Application,Half Day Date,Medio Día Fecha
+DocType: Leave Application,Half Day Date,Fecha de Medio Día
 DocType: Academic Year,Academic Year Name,Nombre Año Académico
 DocType: Sales Partner,Contact Desc,Desc. de Contacto
 apps/erpnext/erpnext/config/hr.py +65,"Type of leaves like casual, sick etc.","Tipo de vacaciones como, enfermo, casual, etc."
@@ -3578,7 +3578,7 @@ DocType: Email Digest,Send regular summary reports via Email.,Enviar informes re
 DocType: Payment Entry,PE-,EDUCACIÓN FÍSICA-
 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +243,Please set default account in Expense Claim Type {0},"Por favor, establece de forma predeterminada en cuenta Tipo de Gastos {0}"
 DocType: Assessment Result,Student Name,Nombre del estudiante
-DocType: Brand,Item Manager,Administración de elementos
+DocType: Brand,Item Manager,Administración de artículos
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +141,Payroll Payable,nómina por pagar
 DocType: Buying Settings,Default Supplier Type,Tipos de Proveedores
 DocType: Production Order,Total Operating Cost,Costo Total de Funcionamiento
@@ -3596,7 +3596,7 @@ apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_
 DocType: Purchase Invoice,Taxes and Charges Added,Impuestos y cargos adicionales
 ,Sales Funnel,"""Embudo"" de ventas"
 apps/erpnext/erpnext/setup/doctype/company/company.py +45,Abbreviation is mandatory,La abreviatura es obligatoria
-DocType: Project,Task Progress,Grupo de Progreso
+DocType: Project,Task Progress,Progreso de Tarea
 ,Qty to Transfer,Cantidad a transferir
 apps/erpnext/erpnext/config/selling.py +13,Quotes to Leads or Customers.,Cotizaciones enviadas a los clientes u oportunidades de venta.
 DocType: Stock Settings,Role Allowed to edit frozen stock,Rol que permite editar inventario congelado
@@ -3609,10 +3609,10 @@ apps/erpnext/erpnext/accounts/doctype/account/account.py +49,Account {0}: Parent
 DocType: Purchase Invoice Item,Price List Rate (Company Currency),Tarifa de la lista de precios (Divisa por defecto)
 DocType: Products Settings,Products Settings,productos Ajustes
 DocType: Account,Temporary,Temporal
-DocType: Program,Courses,cursos
+DocType: Program,Courses,Cursos
 DocType: Monthly Distribution Percentage,Percentage Allocation,Porcentaje de asignación
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +90,Secretary,Secretaria
-DocType: Global Defaults,"If disable, 'In Words' field will not be visible in any transaction","Si desactivado, "en las palabras de campo no será visible en cualquier transacción"
+DocType: Global Defaults,"If disable, 'In Words' field will not be visible in any transaction","Si se desactiva, el campo 'En Palabras' no será visible en ninguna transacción."
 DocType: Serial No,Distinct unit of an Item,Unidad distinta del producto
 DocType: Pricing Rule,Buying,Compras
 DocType: HR Settings,Employee Records to be created by,Los registros de empleados se crearán por
@@ -3724,7 +3724,7 @@ DocType: Batch,Batch ID,ID de lote
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +368,Note: {0},Nota: {0}
 ,Delivery Note Trends,Evolución de las notas de entrega
 apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +113,This Week's Summary,Resumen de la semana.
-,In Stock Qty,En stock Cantidad
+,In Stock Qty,En Cantidad de Stock
 apps/erpnext/erpnext/accounts/general_ledger.py +111,Account: {0} can only be updated via Stock Transactions,Cuenta: {0} sólo puede ser actualizada mediante transacciones de inventario
 DocType: Student Group Creation Tool,Get Courses,Obtener Cursos
 DocType: GL Entry,Party,Tercero
@@ -3770,7 +3770,7 @@ DocType: Project Task,Pending Review,Pendiente de revisar
 apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +106,"Asset {0} cannot be scrapped, as it is already {1}","Activos {0} no puede ser desechada, como ya lo es {1}"
 DocType: Task,Total Expense Claim (via Expense Claim),Total reembolso (Vía reembolso de gastos)
 apps/erpnext/erpnext/accounts/report/sales_register/sales_register.py +70,Customer Id,ID del cliente
-apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +176,Mark Absent,Marcos Ausente
+apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +176,Mark Absent,Marcar Ausente
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +133,Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Fila {0}: Divisa de la lista de materiales # {1} debe ser igual a la moneda seleccionada {2}
 DocType: Journal Entry Account,Exchange Rate,Tipo de cambio
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +530,Sales Order {0} is not submitted,La órden de venta {0} no esta validada
@@ -3832,7 +3832,7 @@ DocType: Item Group,Default Expense Account,Cuenta de gastos por defecto
 apps/erpnext/erpnext/schools/doctype/student_attendance/student_attendance.py +27,Student Batch or Course Schedule is mandatory,Lote estudiante o Horario del curso es obligatoria
 DocType: Employee,Notice (days),Aviso (días)
 DocType: Tax Rule,Sales Tax Template,Plantilla de impuesto sobre ventas
-apps/erpnext/erpnext/accounts/page/pos/pos.js +2298,Select items to save the invoice,Seleccione artículos para ahorrar la factura
+apps/erpnext/erpnext/accounts/page/pos/pos.js +2298,Select items to save the invoice,Seleccione artículos para guardar la factura
 DocType: Employee,Encashment Date,Fecha de cobro
 DocType: Training Event,Internet,Internet
 DocType: Account,Stock Adjustment,Ajuste de existencias
@@ -3872,14 +3872,14 @@ apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +123,Warehouse can not
 DocType: Company,Distribution,Distribución
 apps/erpnext/erpnext/schools/doctype/fees/fees.js +27,Amount Paid,Total Pagado
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +95,Project Manager,Gerente de proyectos
-,Quoted Item Comparison,Citado artículo Comparación
+,Quoted Item Comparison,Comparación de artículos de Cotización
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +76,Dispatch,Despacho
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +71,Max discount allowed for item: {0} is {1}%,Descuento máximo permitido para el producto: {0} es {1}%
 apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +173,Net Asset value as on,El valor neto de activos como en
 DocType: Account,Receivable,A cobrar
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +278,Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Fila # {0}: No se permite cambiar de proveedores como la Orden de Compra ya existe
 DocType: Accounts Settings,Role that is allowed to submit transactions that exceed credit limits set.,Rol autorizado para validar las transacciones que excedan los límites de crédito establecidos.
-apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +904,Select Items to Manufacture,Seleccionar artículos al Fabricación
+apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +904,Select Items to Manufacture,Seleccionar artículos para Fabricación
 apps/erpnext/erpnext/accounts/page/pos/pos.js +909,"Master data syncing, it might take some time","Maestro sincronización de datos, que podría tomar algún tiempo"
 DocType: Item,Material Issue,Expedición de material
 DocType: Hub Settings,Seller Description,Descripción del vendedor
@@ -3910,7 +3910,7 @@ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py
 DocType: Employee Loan,Disbursement Date,Fecha de desembolso
 DocType: Vehicle,Vehicle,Vehículo
 DocType: Purchase Invoice,In Words,En palabras
-DocType: POS Profile,Item Groups,los grupos de artículos
+DocType: POS Profile,Item Groups,Grupos de productos
 apps/erpnext/erpnext/hr/doctype/employee/employee.py +217,Today is {0}'s birthday!,Hoy el cumpleaños de {0} !
 DocType: Production Planning Tool,Material Request For Warehouse,Requisición de materiales para el almacén
 DocType: Sales Order Item,For Production,Por producción
@@ -3928,7 +3928,7 @@ apps/erpnext/erpnext/projects/doctype/project/project.py +192,Join,Unirse
 apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +20,Shortage Qty,Cantidad faltante
 apps/erpnext/erpnext/stock/doctype/item/item.py +666,Item variant {0} exists with same attributes,Existe la variante de artículo {0} con mismos atributos
 DocType: Employee Loan,Repay from Salary,Pagar de su sueldo
-DocType: Leave Application,LAP/,REGAZO/
+DocType: Leave Application,LAP/,LAP/
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +334,Requesting payment against {0} {1} for amount {2},Solicitando el pago contra {0} {1} para la cantidad {2}
 DocType: Salary Slip,Salary Slip,Nómina salarial
 DocType: Lead,Lost Quotation,Presupuesto perdido
@@ -3949,7 +3949,7 @@ DocType: Salary Slip,Net Pay,Pago Neto
 DocType: Account,Account,Cuenta
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +213,Serial No {0} has already been received,El número de serie {0} ya ha sido recibido
 ,Requested Items To Be Transferred,Artículos solicitados para ser transferidos
-DocType: Expense Claim,Vehicle Log,Iniciar vehículo
+DocType: Expense Claim,Vehicle Log,Bitácora del Vehiculo
 apps/erpnext/erpnext/controllers/stock_controller.py +91,"Warehouse {0} is not linked to any account, please create/link the corresponding (Asset) account for the warehouse.","Almacén {0} no está vinculada a ninguna cuenta, por favor crear / enlazar la cuenta correspondiente (Activo) para el almacén."
 DocType: Purchase Invoice,Recurring Id,ID recurrente
 DocType: Customer,Sales Team Details,Detalles del equipo de ventas.
@@ -3995,7 +3995,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +961,Please
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +778,Batch {0} of Item {1} has expired.,El lote {0} del producto {1} ha expirado.
 DocType: Sales Invoice,Commission,Comisión
 apps/erpnext/erpnext/config/manufacturing.py +27,Time Sheet for manufacturing.,Hoja de tiempo para la fabricación.
-apps/erpnext/erpnext/templates/pages/cart.html +37,Subtotal,Total parcial
+apps/erpnext/erpnext/templates/pages/cart.html +37,Subtotal,Subtotal
 DocType: Salary Detail,Default Amount,Importe por defecto
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +93,Warehouse not found in the system,El almacén no se encuentra en el sistema
 apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +116,This Month's Summary,Resumen de este mes
@@ -4055,7 +4055,7 @@ DocType: Employee Leave Approver,Employee Leave Approver,Supervisor de ausencias
 apps/erpnext/erpnext/stock/doctype/item/item.py +498,Row {0}: An Reorder entry already exists for this warehouse {1},Línea {0}: Una entrada de abastecimiento ya existe para el almacén {1}
 apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +82,"Cannot declare as lost, because Quotation has been made.","No se puede declarar como perdida, porque se ha hecho el Presupuesto"
 apps/erpnext/erpnext/hr/doctype/training_event/training_event.js +13,Training Feedback,Formación de votos
-DocType: Vehicle Log,Make Expense Claim,Hacer de Gastos
+DocType: Vehicle Log,Make Expense Claim,Crear Gasto
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +449,Production Order {0} must be submitted,La orden de producción {0} debe ser validada
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +150,Please select Start Date and End Date for Item {0},"Por favor, seleccione Fecha de inicio y Fecha de finalización para el elemento {0}"
 apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +35,Course is mandatory in row {0},Por supuesto es obligatorio en la fila {0}
@@ -4102,7 +4102,7 @@ DocType: Purchase Receipt Item,Received and Accepted,Recibidos y aceptados
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +287,You cannot credit and debit same account at the same time,No se pueden registrar Debitos y Creditos a la misma Cuenta al mismo tiempo
 DocType: Naming Series,Help HTML,Ayuda 'HTML'
 DocType: Student Group Creation Tool,Student Group Creation Tool,Herramienta de creación de grupo de alumnos
-DocType: Item,Variant Based On,En variante basada
+DocType: Item,Variant Based On,Variante basada en
 apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +53,Total weightage assigned should be 100%. It is {0},Peso total asignado debe ser de 100 %. Es {0}
 apps/erpnext/erpnext/public/js/setup_wizard.js +265,Your Suppliers,Sus proveedores
 apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +56,Cannot set as Lost as Sales Order is made.,"No se puede definir como pérdida, cuando la orden de venta esta hecha."
@@ -4354,7 +4354,7 @@ DocType: HR Settings,"If checked, Total no. of Working Days will include holiday
 DocType: Purchase Invoice,Total Advance,Total anticipo
 apps/erpnext/erpnext/schools/doctype/academic_term/academic_term.py +23,The Term End Date cannot be earlier than the Term Start Date. Please correct the dates and try again.,"La fecha final de duración no puede ser anterior a la fecha de inicio Plazo. Por favor, corrija las fechas y vuelve a intentarlo."
 ,BOM Stock Report,La lista de materiales de Informe
-DocType: Stock Reconciliation Item,Quantity Difference,Cantidad Diferencia
+DocType: Stock Reconciliation Item,Quantity Difference,Diferencia de Cantidad
 apps/erpnext/erpnext/config/hr.py +311,Processing Payroll,Procesando nómina
 DocType: Opportunity Item,Basic Rate,Precio base
 DocType: GL Entry,Credit Amount,Importe acreditado
@@ -4410,7 +4410,7 @@ DocType: Item,"Selecting ""Yes"" will give a unique identity to each entity of t
 DocType: Guardian,Guardian,guardián
 apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +42,Appraisal {0} created for Employee {1} in the given date range,La evaluación {0} creado para el empleado {1} en el rango de fechas determinado
 DocType: Employee,Education,Educación
-DocType: Selling Settings,Campaign Naming By,Ordenar campañas por
+DocType: Selling Settings,Campaign Naming By,Nombrar campañas por
 DocType: Employee,Current Address Is,La dirección actual es
 apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +51,"Optional. Sets company's default currency, if not specified.","Opcional. Establece moneda por defecto de la empresa, si no se especifica."
 apps/erpnext/erpnext/config/accounts.py +61,Accounting journal entries.,Asientos en el diario de contabilidad.
@@ -4449,13 +4449,13 @@ DocType: Hub Settings,Hub Settings,Ajustes del Centro de actividades
 DocType: Project,Gross Margin %,Margen bruto %
 DocType: BOM,With Operations,Con operaciones
 apps/erpnext/erpnext/accounts/party.py +250,Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.,Ya se han registrado asientos contables en la divisa {0} para la empresa {1}. Por favor seleccione una cuenta por cobrar o por pagar con divisa {0}.
-DocType: Asset,Is Existing Asset,Es existente de activos
+DocType: Asset,Is Existing Asset,Es Activo Existente
 ,Monthly Salary Register,Registar salario mensual
 DocType: Warranty Claim,If different than customer address,Si es diferente a la dirección del cliente
 DocType: BOM Operation,BOM Operation,Operación de la lista de materiales (LdM)
 DocType: Purchase Taxes and Charges,On Previous Row Amount,Sobre la línea anterior
 DocType: Student,Home Address,Direccion de casa
-apps/erpnext/erpnext/accounts/doctype/asset/asset.js +260,Transfer Asset,Activos transferencia
+apps/erpnext/erpnext/accounts/doctype/asset/asset.js +260,Transfer Asset,Transferir Activo
 DocType: POS Profile,POS Profile,Perfil de POS
 DocType: Training Event,Event Name,Nombre del evento
 apps/erpnext/erpnext/config/schools.py +43,Admission,Admisión
@@ -4479,7 +4479,7 @@ apps/erpnext/erpnext/config/selling.py +292,Send mass SMS to your contacts,Envia
 DocType: Program,Program Name,Nombre del programa
 DocType: Purchase Taxes and Charges,Consider Tax or Charge for,Considerar impuestos o cargos por
 apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +57,Actual Qty is mandatory,La cantidad real es obligatoria
-apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +48,Student Groups created.,Grupos estudiantiles creados.
+apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +48,Student Groups created.,Grupos de Estudiante Creado
 DocType: Employee Loan,Loan Type,Tipo de préstamo
 DocType: Scheduling Tool,Scheduling Tool,Herramienta de programación
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +142,Credit Card,Tarjetas de credito
@@ -4488,7 +4488,7 @@ apps/erpnext/erpnext/config/stock.py +179,Default settings for stock transaction
 DocType: Purchase Invoice,Next Date,Siguiente fecha
 DocType: Employee Education,Major/Optional Subjects,Principales / Asignaturas Optativas
 DocType: Sales Invoice Item,Drop Ship,Nave de la gota
-DocType: Training Event,Attendees,Los asistentes
+DocType: Training Event,Attendees,Asistentes
 DocType: Employee,"Here you can maintain family details like name and occupation of parent, spouse and children","Aquí usted puede ingresar los detalles de la familia como el nombre y ocupación de los padres, cónyuge e hijos"
 DocType: Academic Term,Term End Date,Plazo Fecha de finalización
 DocType: Hub Settings,Seller Name,Nombre de vendedor
@@ -4527,7 +4527,7 @@ apps/erpnext/erpnext/config/selling.py +163,Terms and Conditions Template,Planti
 DocType: Serial No,Delivery Details,Detalles de la entrega
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +484,Cost Center is required in row {0} in Taxes table for type {1},Centro de costos requerido para la línea {0} en la tabla Impuestos para el tipo {1}
 DocType: Program,Program Code,Código de programa
-DocType: Terms and Conditions,Terms and Conditions Help,Términos y Condiciones Ayuda
+DocType: Terms and Conditions,Terms and Conditions Help,Ayuda de Términos y Condiciones
 ,Item-wise Purchase Register,Detalle de compras
 DocType: Batch,Expiry Date,Fecha de caducidad
 ,Supplier Addresses and Contacts,Libreta de direcciones de proveedores
@@ -4538,13 +4538,13 @@ apps/erpnext/erpnext/controllers/status_updater.py +197,"To allow over-billing o
 DocType: Global Defaults,Do not show any symbol like $ etc next to currencies.,No volver a mostrar cualquier símbolo como $ u otro junto a las monedas.
 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +459, (Half Day),(Medio día)
 DocType: Supplier,Credit Days,Días de crédito
-DocType: Student Batch Creation Tool,Make Student Batch,Hacer lotes Estudiante
+DocType: Student Batch Creation Tool,Make Student Batch,Hacer Lote de Estudiantes
 DocType: Leave Type,Is Carry Forward,Es un traslado
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +778,Get Items from BOM,Obtener productos desde lista de materiales (LdM)
 apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +41,Lead Time Days,Días de iniciativa
 apps/erpnext/erpnext/controllers/accounts_controller.py +562,Row #{0}: Posting Date must be same as purchase date {1} of asset {2},Fila # {0}: Fecha de contabilización debe ser la misma que la fecha de compra {1} de activos {2}
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +129,Please enter Sales Orders in the above table,"Por favor, introduzca los pedidos de cliente en la tabla anterior"
-apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +186,Not Submitted Salary Slips,No Enviado a salarios resbalones
+apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +186,Not Submitted Salary Slips,No Envió Salarios
 ,Stock Summary,Resumen de la
 apps/erpnext/erpnext/config/accounts.py +236,Transfer an asset from one warehouse to another,Transferir un activo de un almacén a otro
 DocType: Vehicle,Petrol,Gasolina
diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv
index 5c202a4efb..9df26ba7aa 100644
--- a/erpnext/translations/fi.csv
+++ b/erpnext/translations/fi.csv
@@ -818,7 +818,7 @@ apps/erpnext/erpnext/stock/doctype/item/item.py +205,Warning: Invalid Attachment
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +744,No Permission,Ei oikeuksia
 DocType: Company,Default Bank Account,oletus pankkitili
 apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +50,"To filter based on Party, select Party Type first",Valitse osapuoli tyyppi saadaksesi osapuolen mukaisen suodatuksen
-apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +48,'Update Stock' can not be checked because items are not delivered via {0},"'Päivitä varastotase' ei voida käyttää tuotteille, joita ei ole toimitettu {0} kautta"
+apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +48,'Update Stock' can not be checked because items are not delivered via {0},"'Päivitä varasto' ei voida käyttää tuotteille, joita ei ole toimitettu {0} kautta"
 DocType: Vehicle,Acquisition Date,Hankintapäivä
 apps/erpnext/erpnext/public/js/setup_wizard.js +303,Nos,Nos
 DocType: Item,Items with higher weightage will be shown higher,tuotteet joilla on korkeampi painoarvo nätetään ylempänä
@@ -1235,7 +1235,7 @@ DocType: Purchase Invoice,Rejected Warehouse,Hylätty varasto
 DocType: GL Entry,Against Voucher,kuitin kohdistus
 DocType: Item,Default Buying Cost Center,ostojen oletuskustannuspaikka
 apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +6,"To get the best out of ERPNext, we recommend that you take some time and watch these help videos.","Saadaksesi kaiken irti ERPNextistä, Suosittelemme katsomaan nämä ohjevideot."
-apps/erpnext/erpnext/accounts/page/pos/pos.js +73, to ,että
+apps/erpnext/erpnext/accounts/page/pos/pos.js +73, to ,lle
 DocType: Item,Lead Time in days,"virtausaika, päivinä"
 apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +58,Accounts Payable Summary,maksettava tilien yhteenveto
 apps/erpnext/erpnext/hr/doctype/process_payroll/process_payroll.py +332,Payment of salary from {0} to {1},Palkanmaksu välillä {0} ja {1}
@@ -1636,7 +1636,7 @@ DocType: Leave Type,Include holidays within leaves as leaves,sisältää vapaap
 DocType: Sales Invoice,Packed Items,Pakatut tuotteet
 apps/erpnext/erpnext/config/support.py +27,Warranty Claim against Serial No.,Takuuvaatimus sarjanumerolle
 DocType: BOM Replace Tool,"Replace a particular BOM in all other BOMs where it is used. It will replace the old BOM link, update cost and regenerate ""BOM Explosion Item"" table as per new BOM","korvaa BOM kaikissa muissa BOM:ssa, jossa sitä käytetään, korvaa vanhan BOM linkin, päivittää kustannukset ja muodostaa uuden ""BOM tuote räjäytyksen"" tilaston uutena BOM:na"
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +59,'Total','Kaikki yhteensä'
+apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +59,'Total','Yhteensä'
 DocType: Shopping Cart Settings,Enable Shopping Cart,aktivoi ostoskori
 DocType: Employee,Permanent Address,Pysyvä osoite
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +248,"Advance paid against {0} {1} cannot be greater \
@@ -2381,7 +2381,7 @@ apps/erpnext/erpnext/controllers/accounts_controller.py +286, or ,tai
 DocType: Sales Order,Billing Status,Laskutus tila
 apps/erpnext/erpnext/public/js/conf.js +32,Report an Issue,Raportoi asia
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +118,Utility Expenses,Hyödykekulut
-apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +64,90-Above,90-yli
+apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +64,90-Above,90 ja yli
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +213,Row #{0}: Journal Entry {1} does not have account {2} or already matched against another voucher,Rivi # {0}: Päiväkirjakirjaus {1} ei ole huomioon {2} tai jo sovitettu toista voucher
 DocType: Buying Settings,Default Buying Price List,"oletus hinnasto, osto"
 DocType: Process Payroll,Salary Slip Based on Timesheet,Palkka tuntilomakkeen mukaan
@@ -2814,7 +2814,7 @@ apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_item
 DocType: Asset,Double Declining Balance,Double jäännösarvopoisto
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +170,Closed order cannot be cancelled. Unclose to cancel.,Suljettu järjestys ei voi peruuttaa. Unclose peruuttaa.
 DocType: Student Guardian,Father,Isä
-apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,Päivitä Stock "ei voida tarkistaa käyttöomaisuushankintoihin myytävänä
+apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,'Päivitä varasto' ei voida valita käyttöomaisuuden myynteihin
 DocType: Bank Reconciliation,Bank Reconciliation,pankin täsmäytys
 DocType: Attendance,On Leave,lomalla
 apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +7,Get Updates,hae päivitykset
@@ -3950,7 +3950,7 @@ DocType: Salary Detail,Default Amount,oletus arvomäärä
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +93,Warehouse not found in the system,Varastoa ei löydy järjestelmästä
 apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +116,This Month's Summary,Tämän kuun yhteenveto
 DocType: Quality Inspection Reading,Quality Inspection Reading,Laarutarkistuksen luku
-apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +24,`Freeze Stocks Older Than` should be smaller than %d days.,Jäädytä varasto joka on vanhempi kuin % päivää
+apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +24,`Freeze Stocks Older Than` should be smaller than %d days.,Kylmävarasto pitäisi olla vähemmän kuin % päivää
 DocType: Tax Rule,Purchase Tax Template,Myyntiverovelkojen malli
 ,Project wise Stock Tracking,"projekt työkalu, varastoseuranta"
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +166,Maintenance Schedule {0} exists against {0},huoltoaikataulu {0} on olemassa kohdistettuna{0}
diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv
index 96c00deaca..3f6779d10d 100644
--- a/erpnext/translations/fr.csv
+++ b/erpnext/translations/fr.csv
@@ -40,7 +40,7 @@ DocType: Sales Invoice,Customer Name,Nom du Client
 DocType: Vehicle,Natural Gas,Gaz naturel
 apps/erpnext/erpnext/setup/setup_wizard/setup_wizard.py +130,Bank account cannot be named as {0},Compte Bancaire ne peut pas être nommé {0}
 DocType: Account,Heads (or groups) against which Accounting Entries are made and balances are maintained.,Titres (ou groupes) sur lequel les entrées comptables sont faites et les soldes sont maintenus.
-apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +197,Outstanding for {0} cannot be less than zero ({1}),Exceptionnelle pour {0} ne peut pas être inférieur à zéro ({1})
+apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +197,Outstanding for {0} cannot be less than zero ({1}),Solde pour {0} ne peut pas être inférieur à zéro ({1})
 DocType: Manufacturing Settings,Default 10 mins,10 minutes Par Défaut
 DocType: Leave Type,Leave Type Name,Nom du Type de Congé
 apps/erpnext/erpnext/templates/pages/projects.js +63,Show open,Afficher ouverte
@@ -69,7 +69,7 @@ DocType: Employee Education,Year of Passing,Année de passage
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +69,"Reference: %s, Item Code: %s and Customer: %s","Référence:% s, Code de l'article:% s et le client:% s"
 DocType: Item,Country of Origin,Pays d'origine
 apps/erpnext/erpnext/templates/form_grid/stock_entry_grid.html +26,In Stock,En Stock
-apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +46,Open Issues,Questions ouvertes
+apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +46,Open Issues,Ouvrir les Questions
 DocType: Production Plan Item,Production Plan Item,Article du plan de Fabrication
 apps/erpnext/erpnext/hr/doctype/employee/employee.py +144,User {0} is already assigned to Employee {1},Utilisateur {0} est déjà attribué à l'employé {1}
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +31,Health Care,Soins de Santé
@@ -100,7 +100,7 @@ apps/erpnext/erpnext/controllers/recurring_document.py +135,New {0}: #{1},Nouvea
 apps/erpnext/erpnext/hr/doctype/salary_component/salary_component.py +21,Abbreviation cannot have more than 5 characters,L'abbréviation ne peut pas avoir plus de 5 caractères
 DocType: Payment Request,Payment Request,Requête de paiement
 DocType: Asset,Value After Depreciation,Valeur après amortissement
-DocType: Employee,O+,O +
+DocType: Employee,O+,O+
 apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt_dashboard.py +17,Related,En Relation
 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +41,Attendance date can not be less than employee's joining date,Date de présence ne peut pas être inférieure à la date se joindre à l'employé
 DocType: Grading Scale,Grading Scale Name,Nom de l'Échelle de Notation
@@ -112,7 +112,7 @@ apps/erpnext/erpnext/accounts/utils.py +74,{0} {1} not in any active Fiscal Year
 DocType: Packed Item,Parent Detail docname,DocName Détail Parent
 apps/erpnext/erpnext/public/js/setup_wizard.js +303,Kg,Kg
 DocType: Student Log,Log,Journal
-apps/erpnext/erpnext/config/hr.py +45,Opening for a Job.,Ouverture d'un emploi.
+apps/erpnext/erpnext/config/hr.py +45,Opening for a Job.,Ouverture d'un Emploi.
 DocType: Item Attribute,Increment,Incrément
 apps/erpnext/erpnext/public/js/stock_analytics.js +62,Select Warehouse...,Sélectionnez Entrepôt ...
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +6,Advertising,Publicité
@@ -158,7 +158,7 @@ DocType: Lead,Interested,Intéressé
 apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +170,Opening,Ouverture
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +27,From {0} to {1},Du {0} au {1}
 DocType: Item,Copy From Item Group,Copier Depuis un Groupe d'Articles
-DocType: Journal Entry,Opening Entry,Entrée ouverture
+DocType: Journal Entry,Opening Entry,Écriture d'Ouverture
 apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +25,Account Pay Only,Compte Bénéficiaire Seulement
 DocType: Employee Loan,Repay Over Number of Periods,Rembourser Over Nombre de périodes
 DocType: Stock Entry,Additional Costs,Frais Supplémentaires
@@ -244,7 +244,7 @@ apps/erpnext/erpnext/stock/doctype/price_list/price_list.py +14,Price List must
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +79,Installation date cannot be before delivery date for Item {0},Date d'installation ne peut pas être avant la date de livraison pour l'article {0}
 DocType: Pricing Rule,Discount on Price List Rate (%),Remise sur la Liste des Prix (%)
 DocType: Offer Letter,Select Terms and Conditions,Sélectionnez Termes et Conditions
-apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +51,Out Value,Valeur hors
+apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +51,Out Value,Valeur Sortante
 DocType: Production Planning Tool,Sales Orders,Commandes clients
 DocType: Purchase Taxes and Charges,Valuation,Valorisation
 ,Purchase Order Trends,Tendances Bon de commande
@@ -293,7 +293,7 @@ apps/erpnext/erpnext/templates/generators/bom.html +85,No description given,Pas
 apps/erpnext/erpnext/config/buying.py +13,Request for purchase.,Demande d'achat.
 apps/erpnext/erpnext/projects/doctype/project/project_dashboard.py +6,This is based on the Time Sheets created against this project,Ceci est basé sur les feuilles de temps créées contre ce projet
 apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +371,Net Pay cannot be less than 0,Salaire net ne peut pas être inférieur à 0
-apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +224,Only the selected Leave Approver can submit this Leave Application,Seul l'approbateur de congé sélectionné peut soumettre cette demande de congé
+apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +224,Only the selected Leave Approver can submit this Leave Application,Seul l'Approbateur de Congé sélectionné peut soumettre cette Demande de Congé
 apps/erpnext/erpnext/hr/doctype/employee/employee.py +116,Relieving Date must be greater than Date of Joining,La date de relève doit être postérieure à la date de l'adhésion
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +190,Leaves per Year,Congés par Année
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +118,Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,Ligne {0}: S'il vous plaît vérifier 'Est Avance' sur compte {1} si c'est une entrée avance.
@@ -358,7 +358,7 @@ DocType: Accounts Settings,Settings for Accounts,Réglages pour les comptes
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +643,Supplier Invoice No exists in Purchase Invoice {0},No de Facture du Fournisseur existe dans Factures d'Achat {0}
 apps/erpnext/erpnext/config/selling.py +118,Manage Sales Person Tree.,Gérer l'arborescence des vendeurs
 DocType: Job Applicant,Cover Letter,Lettre de Motivation
-apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +37,Outstanding Cheques and Deposits to clear,Chèques et Dépôts restant à compenser
+apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +37,Outstanding Cheques and Deposits to clear,Chèques et Dépôts en suspens à compenser
 DocType: Item,Synced With Hub,Synchronisé avec Hub
 DocType: Vehicle,Fleet Manager,Gestionnaire de Flotte
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +505,Row #{0}: {1} can not be negative for item {2},# Ligne {0}: {1} ne peut pas être négatif pour l'élément {2}
@@ -464,7 +464,7 @@ DocType: Journal Entry Account,Sales Order,Commande client
 apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +71,Avg. Selling Rate,Moy. Taux de vente
 DocType: Assessment Plan,Examiner Name,Nom de l'Examinateur
 apps/erpnext/erpnext/utilities/transaction_base.py +148,Quantity cannot be a fraction in row {0},La quantité ne peut pas être une fraction à la ligne {0}
-DocType: Purchase Invoice Item,Quantity and Rate,Quantité et Prix
+DocType: Purchase Invoice Item,Quantity and Rate,Quantité et Taux
 DocType: Delivery Note,% Installed,Installé%
 apps/erpnext/erpnext/public/js/setup_wizard.js +383,Classrooms/ Laboratories etc where lectures can be scheduled.,Les Salles de Classe / Laboratoires etc. où des conférences peuvent être programmées.
 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +46,Please enter company name first,S'il vous plaît entrez en premier le nom de l'entreprise
@@ -479,7 +479,7 @@ apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +57,'To Case No.
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +108,Non Profit,À but non lucratif
 DocType: Production Order,Not Started,Pas commencé
 DocType: Lead,Channel Partner,Partenaire de Canal
-DocType: Account,Old Parent,Parent Vieux
+DocType: Account,Old Parent,Grand Parent
 DocType: Notification Control,Customize the introductory text that goes as a part of that email. Each transaction has a separate introductory text.,Personnaliser le texte d'introduction qui fera partie de cet Email. Chaque transaction a une introduction séparée.
 apps/erpnext/erpnext/config/manufacturing.py +84,Global settings for all manufacturing processes.,Paramètres globaux pour tous les processus de fabrication.
 DocType: Accounts Settings,Accounts Frozen Upto,Comptes Gelés Jusqu'au
@@ -535,7 +535,7 @@ DocType: Shipping Rule,Net Weight,Poids net
 DocType: Employee,Emergency Phone,Téléphone d'Urgence
 apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +29,Buy,Acheter
 ,Serial No Warranty Expiry,Expiration de Garantie du N° de Série
-DocType: Sales Invoice,Offline POS Name,Hors ligne POS Nom
+DocType: Sales Invoice,Offline POS Name,Nom du PDV Hors-ligne`
 DocType: Sales Order,To Deliver,A Livrer
 DocType: Purchase Invoice Item,Item,Article
 apps/erpnext/erpnext/accounts/page/pos/pos.js +2342,Serial no item cannot be a fraction,Un article avec un Numéro de série ne peut pas être une fraction
@@ -548,7 +548,7 @@ apps/erpnext/erpnext/setup/doctype/company/company.py +57,Account {0} does not b
 apps/erpnext/erpnext/setup/doctype/company/company.py +48,Abbreviation already used for another company,Abréviation déjà utilisée pour une autre société
 DocType: Selling Settings,Default Customer Group,Groupe de Clients par Défaut
 DocType: Global Defaults,"If disable, 'Rounded Total' field will not be visible in any transaction","Si coché, le champ ""Total arrondi"" ne sera pas visible et les montants ne seront pas arrondis."
-DocType: BOM,Operating Cost,Coût d'exploitation
+DocType: BOM,Operating Cost,Coût d'Exploitation
 DocType: Sales Order Item,Gross Profit,Bénéfice Brut
 apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +49,Increment cannot be 0,Incrément ne peut pas être 0
 DocType: Production Planning Tool,Material Requirement,Exigence Matériel
@@ -605,7 +605,7 @@ DocType: Authorization Rule,Customer or Item,Client ou Article
 apps/erpnext/erpnext/config/selling.py +28,Customer database.,Base de données Clients.
 DocType: Quotation,Quotation To,Devis Pour
 DocType: Lead,Middle Income,Revenu intermédiaire
-apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +217,Opening (Cr),Ouverture ( Cr )
+apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +217,Opening (Cr),Ouverture (Cr)
 apps/erpnext/erpnext/stock/doctype/item/item.py +816,Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,L’Unité de Mesure par Défaut pour l’Article {0} ne peut pas être modifiée directement parce que vous avez déjà fait une (des) transaction (s) avec une autre unité de mesure. Vous devez créer un nouvel article pour utiliser une UDM par défaut différente.
 apps/erpnext/erpnext/accounts/utils.py +353,Allocated amount can not be negative,Le montant alloué ne peut être négatif
 DocType: Purchase Order Item,Billed Amt,Mnt Facturé
@@ -633,7 +633,7 @@ DocType: Timesheet,Billed,Facturé
 DocType: Batch,Batch Description,Description du Lot
 apps/erpnext/erpnext/accounts/utils.py +720,"Payment Gateway Account not created, please create one manually.","Paiement Gateway Account ne crée pas, s'il vous plaît créer un manuellement."
 DocType: Sales Invoice,Sales Taxes and Charges,Taxes et frais de vente
-DocType: Employee,Organization Profile,Profil de l'organisme
+DocType: Employee,Organization Profile,Profil de l'Organisation
 DocType: Student,Sibling Details,Détails Sibling
 DocType: Vehicle Service,Vehicle Service,Entretien des véhicules
 apps/erpnext/erpnext/config/setup.py +101,Automatically triggers the feedback request based on conditions.,Déclencher automatiquement la demande de retour d'expérience en fonction des conditions.
@@ -694,7 +694,7 @@ apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +39,Posting timest
 DocType: Employee Loan,Total Interest Payable,Total des intérêts à payer
 DocType: Landed Cost Taxes and Charges,Landed Cost Taxes and Charges,Taxes et Frais du Coût au Débarquement
 DocType: Production Order Operation,Actual Start Time,Heure de Début Réelle
-DocType: BOM Operation,Operation Time,Temps de fonctionnement
+DocType: BOM Operation,Operation Time,Heure de l'Opération
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +134,Finish,Terminer
 apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +386,Base,Base
 DocType: Timesheet,Total Billed Hours,Total des heures facturées
@@ -711,10 +711,10 @@ DocType: Manufacturing Settings,Backflush Raw Materials Based On,Enregistrer les
 apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +60,Please enter item details,"Pour signaler un problème, passez à"
 DocType: Interest,Interest,Intérêt
 apps/erpnext/erpnext/selling/doctype/customer/customer_dashboard.py +10,Pre Sales,Prévente
-DocType: Purchase Receipt,Other Details,Autres détails
+DocType: Purchase Receipt,Other Details,Autres Détails
 apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +18,Suplier,suplier
 DocType: Account,Accounts,Comptes
-DocType: Vehicle,Odometer Value (Last),Valeur compteur kilométrique (dernier)
+DocType: Vehicle,Odometer Value (Last),Valeur Compteur Kilométrique (Dernier)
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +71,Marketing,Marketing
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +277,Payment Entry is already created,Paiement entrée est déjà créé
 DocType: Purchase Receipt Item Supplied,Current Stock,Stock Actuel
@@ -725,15 +725,15 @@ DocType: Account,Expenses Included In Valuation,Frais Inclus dans la Valorisatio
 DocType: Hub Settings,Seller City,Ville du vendeur
 ,Absent Student Report,Rapport des Absences
 DocType: Email Digest,Next email will be sent on:,Le prochain Email sera envoyé le :
-DocType: Offer Letter Term,Offer Letter Term,Terme lettre de proposition
+DocType: Offer Letter Term,Offer Letter Term,Terme de la Lettre de Proposition
 apps/erpnext/erpnext/stock/doctype/item/item.py +631,Item has variants.,L'article a des variantes.
 apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +65,Item {0} not found,Article {0} introuvable
 DocType: Bin,Stock Value,Valeur du Stock
 apps/erpnext/erpnext/accounts/doctype/account/account.py +26,Company {0} does not exist,Société {0} n'existe pas
 apps/erpnext/erpnext/buying/page/purchase_analytics/purchase_analytics.js +88,Tree Type,Type d' arbre
-DocType: BOM Explosion Item,Qty Consumed Per Unit,Qté consommée par unité
+DocType: BOM Explosion Item,Qty Consumed Per Unit,Qté Consommée Par Unité
 DocType: Serial No,Warranty Expiry Date,Date d'expiration de la garantie
-DocType: Material Request Item,Quantity and Warehouse,Quantité et entrepôt
+DocType: Material Request Item,Quantity and Warehouse,Quantité et Entrepôt
 DocType: Sales Invoice,Commission Rate (%),Taux de Commission (%)
 DocType: Project,Estimated Cost,Coût Estimé
 DocType: Purchase Order,Link to material requests,Lien vers les demandes matérielles
@@ -764,7 +764,7 @@ apps/erpnext/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.j
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +140,You can not enter current voucher in 'Against Journal Entry' column,Vous ne pouvez pas entrer coupon courant dans «Contre Journal Entry 'colonne
 apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +50,Reserved for manufacturing,Réservé pour la fabrication
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +25,Energy,Énergie
-DocType: Opportunity,Opportunity From,De opportunité
+DocType: Opportunity,Opportunity From,Opportunité De
 apps/erpnext/erpnext/config/hr.py +98,Monthly salary statement.,Fiche de salaire mensuel.
 DocType: BOM,Website Specifications,Site Web Spécifications
 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +24,{0}: From {0} of type {1},{0}: Du {0} de type {1}
@@ -826,7 +826,7 @@ DocType: Shopping Cart Settings,Default settings for Shopping Cart,Paramètres p
 apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +128,Asset scrapped via Journal Entry {0},Actif mis au rebut via Écriture de Journal {0}
 DocType: Employee Loan,Interest Income Account,Compte de revenu d'intérêt
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +13,Biotechnology,Biotechnologie
-apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +107,Office Maintenance Expenses,Entretient et dépense bureau
+apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +107,Office Maintenance Expenses,Dépenses d'Entretien du Bureau
 apps/erpnext/erpnext/config/learn.py +47,Setting up Email Account,Configurer un compte de messagerie
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js +115,Please enter Item first,S'il vous plaît entrer l'article en premier
 DocType: Account,Liability,Responsabilité
@@ -862,7 +862,7 @@ apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +6
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +262,Timesheet {0} is already completed or cancelled,Timesheet {0} est déjà terminée ou annulée
 apps/erpnext/erpnext/templates/pages/projects.html +42,No tasks,Aucune tâche
 DocType: Purchase Invoice,"The day of the month on which auto invoice will be generated e.g. 05, 28 etc","Le jour du mois où la facture automatique sera généré par exemple 05, 28 etc"
-DocType: Asset,Opening Accumulated Depreciation,Ouverture Amortissement cumulé
+DocType: Asset,Opening Accumulated Depreciation,Amortissement Cumulé d'Ouverture
 apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.js +49,Score must be less than or equal to 5,Score doit être inférieur ou égal à 5
 DocType: Program Enrollment Tool,Program Enrollment Tool,Outil du programme d'inscription
 apps/erpnext/erpnext/config/accounts.py +294,C-Form records,Enregistrements Formulaire-C
@@ -914,20 +914,20 @@ DocType: Pricing Rule,Price or Discount,Prix ou Réduction
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +75,Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total des frais applicables en Achat Table des reçus Les articles doivent être le même que Total des taxes et frais
 DocType: Sales Team,Incentives,Incitations
 DocType: SMS Log,Requested Numbers,Numéros demandés
-DocType: Production Planning Tool,Only Obtain Raw Materials,Seulement obtenir des matières premières
+DocType: Production Planning Tool,Only Obtain Raw Materials,Obtenir seulement des Matières Premières
 apps/erpnext/erpnext/config/hr.py +142,Performance appraisal.,L'évaluation des performances.
 apps/erpnext/erpnext/accounts/doctype/tax_rule/tax_rule.py +95,"Enabling 'Use for Shopping Cart', as Shopping Cart is enabled and there should be at least one Tax Rule for Shopping Cart","Activation de 'Utiliser pour Panier', comme le Panier est activé et qu'il devrait y avoir au moins une Règle de Taxes pour le Panier"
 apps/erpnext/erpnext/controllers/accounts_controller.py +353,"Payment Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice.","Paiement entrée {0} est lié contre l'ordonnance {1}, vérifier si elle doit être tirée en avance dans la présente facture."
 DocType: Sales Invoice Item,Stock Details,Détails du Stock
 apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +29,Project Value,Valeur du projet
 apps/erpnext/erpnext/config/selling.py +321,Point-of-Sale,Point-de-vente
-DocType: Vehicle Log,Odometer Reading,Relevé du compteur kilométrique
+DocType: Vehicle Log,Odometer Reading,Relevé du Compteur Kilométrique
 apps/erpnext/erpnext/accounts/doctype/account/account.py +120,"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Le solde du compte est déjà Créditeur, vous n'êtes pas autorisé à mettre en 'Solde Doit Être' comme 'Débiteur'"
 DocType: Account,Balance must be,Solde doit être
 DocType: Hub Settings,Publish Pricing,Publier la Tarification
 DocType: Notification Control,Expense Claim Rejected Message,Message de Note de Frais Rejetée
 ,Available Qty,Qté Disponible
-DocType: Purchase Taxes and Charges,On Previous Row Total,Le total de la rangée précédente
+DocType: Purchase Taxes and Charges,On Previous Row Total,Le Total de la Rangée Précédente
 DocType: Purchase Invoice Item,Rejected Qty,Qté rejeté
 DocType: Salary Slip,Working Days,Jours ouvrables
 DocType: Serial No,Incoming Rate,Taux d'entrée
@@ -980,7 +980,7 @@ apps/erpnext/erpnext/config/accounts.py +210,Define budget for a financial year.
 DocType: Mode of Payment Account,Default Bank / Cash account will be automatically updated in POS Invoice when this mode is selected.,Le compte par défaut de Banque / Caisse sera automatiquement mis à jour dans la Facture PDV lorsque ce mode est sélectionné.
 DocType: Lead,LEAD-,LEAD-
 DocType: Employee,Permanent Address Is,Adresse permanente est
-DocType: Production Order Operation,Operation completed for how many finished goods?,Opération terminée pour combien de produits finis?
+DocType: Production Order Operation,Operation completed for how many finished goods?,Opération terminée pour combien de produits finis ?
 apps/erpnext/erpnext/public/js/setup_wizard.js +167,The Brand,La Marque
 DocType: Employee,Exit Interview Details,Entretient de Départ
 DocType: Item,Is Purchase Item,Est-Item
@@ -988,7 +988,7 @@ DocType: Asset,Purchase Invoice,Facture achat
 DocType: Stock Ledger Entry,Voucher Detail No,Détail du bon No
 apps/erpnext/erpnext/accounts/page/pos/pos.js +709,New Sales Invoice,Nouvelle Facture de Vente
 DocType: Stock Entry,Total Outgoing Value,Valeur totale sortante
-apps/erpnext/erpnext/public/js/account_tree_grid.js +225,Opening Date and Closing Date should be within same Fiscal Year,Date d'ouverture et date de clôture devraient être dans le même exercice
+apps/erpnext/erpnext/public/js/account_tree_grid.js +225,Opening Date and Closing Date should be within same Fiscal Year,Date d'Ouverture et Date de Clôture devraient être dans le même Exercice
 DocType: Lead,Request for Information,Demande de renseignements
 apps/erpnext/erpnext/accounts/page/pos/pos.js +723,Sync Offline Invoices,Synchronisation Factures hors connexion
 DocType: Payment Request,Paid,Payé
@@ -1046,7 +1046,7 @@ apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +7,There was an
 apps/erpnext/erpnext/templates/pages/cart.html +5,My Cart,Mon panier
 apps/erpnext/erpnext/controllers/selling_controller.py +159,Order Type must be one of {0},Type de Commande doit être l'un des {0}
 DocType: Lead,Next Contact Date,Date du prochain contact
-apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +35,Opening Qty,Quantité d'ouverture
+apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +35,Opening Qty,Quantité d'Ouverture
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +424,Please enter Account for Change Amount,S'il vous plaît entrez compte pour le changement Montant
 DocType: Student Batch,Student Batch Name,Student Batch Nom
 DocType: Holiday List,Holiday List Name,Nom de la Liste de Vacances
@@ -1094,7 +1094,7 @@ DocType: Purchase Invoice,Returns,Retours
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order_calendar.js +42,WIP Warehouse,WIP Entrepôt
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +196,Serial No {0} is under maintenance contract upto {1},Budget ne peut être réglé pour les centres de coûts du Groupe
 apps/erpnext/erpnext/config/hr.py +35,Recruitment,Recrutement
-DocType: Lead,Organization Name,Nom de l'organisation
+DocType: Lead,Organization Name,Nom de l'Organisation
 DocType: Tax Rule,Shipping State,Etat de livraison
 ,Projected Quantity as Source,Quantité projetée comme Source
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +58,Item must be added using 'Get Items from Purchase Receipts' button,L'article doit être ajouté à l'aide du bouton 'Obtenir des éléments de reçus d'achat'
@@ -1112,14 +1112,14 @@ apps/erpnext/erpnext/config/stock.py +310,Making Stock Entries,Faire des entrée
 DocType: Packing Slip,Net Weight UOM,Unité de mesure Poids Net
 apps/erpnext/erpnext/hr/doctype/training_result/training_result.py +18,{0} Results,{0} Résultats
 DocType: Item,Default Supplier,Fournisseur par Défaut
-DocType: Manufacturing Settings,Over Production Allowance Percentage,Surproduction Allocation Pourcentage
+DocType: Manufacturing Settings,Over Production Allowance Percentage,Pourcentage d'Allocation en cas de Surproduction
 DocType: Employee Loan,Repayment Schedule,Échéancier de remboursement
 DocType: Shipping Rule Condition,Shipping Rule Condition,Condition règle de livraison
 DocType: Holiday List,Get Weekly Off Dates,Obtenir les Dates de Congés
 apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +33,End Date can not be less than Start Date,La date de Fin ne peut pas être antérieure à la Date de Début
 DocType: Sales Person,Select company name first.,Sélectionnez en premier le nom de la société.
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +154,Dr,Dr
-apps/erpnext/erpnext/config/buying.py +23,Quotations received from Suppliers.,Devis reçus des fournisseurs.
+apps/erpnext/erpnext/config/buying.py +23,Quotations received from Suppliers.,Devis reçus des Fournisseurs.
 apps/erpnext/erpnext/controllers/selling_controller.py +24,To {0} | {1} {2},A {0} | {1} {2}
 apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.py +40,Average Age,Âge Moyen
 DocType: Opportunity,Your sales person who will contact the customer in future,Votre commercial prendra contact avec le client ultérieurement
@@ -1131,7 +1131,7 @@ DocType: Expense Claim,From Employee,De l'Employé
 apps/erpnext/erpnext/controllers/accounts_controller.py +413,Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Attention : Le système ne vérifie pas la surfacturation depuis montant pour objet {0} dans {1} est nulle
 DocType: Journal Entry,Make Difference Entry,Calculer l'entrée par différence
 DocType: Upload Attendance,Attendance From Date,Présence Depuis
-DocType: Appraisal Template Goal,Key Performance Area,Domaine essentiel de performance
+DocType: Appraisal Template Goal,Key Performance Area,Domaine Essentiel de Performance
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +54,Transportation,transport
 apps/erpnext/erpnext/controllers/item_variant.py +94,Invalid Attribute,Attribut invalide
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +201,{0} {1} must be submitted,{0} {1} doit être soumis
@@ -1146,7 +1146,7 @@ DocType: Sales Partner,Distributor,Distributeur
 DocType: Shopping Cart Shipping Rule,Shopping Cart Shipping Rule,Règles de Livraison du Panier
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +224,Production Order {0} must be cancelled before cancelling this Sales Order,L'ordre de Fabrication {0} doit être cancellé avant de canceller cette Commande Client
 apps/erpnext/erpnext/public/js/controllers/transaction.js +52,Please set 'Apply Additional Discount On',S'il vous plaît mettre «Appliquer réduction supplémentaire sur '
-,Ordered Items To Be Billed,Articles commandés à facturer
+,Ordered Items To Be Billed,Articles Commandés À Facturer
 apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +46,From Range has to be less than To Range,La Plage Initiale doit être inférieure à la Plage Finale
 DocType: Global Defaults,Global Defaults,Valeurs par Défaut Globales
 apps/erpnext/erpnext/projects/doctype/project/project.py +202,Project Collaboration Invitation,Invitation de collaboration de projet
@@ -1160,7 +1160,7 @@ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py
 DocType: Lead,Consultant,Consultant
 DocType: Salary Slip,Earnings,Bénéfices
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +382,Finished Item {0} must be entered for Manufacture type entry,Le Produit Fini {0} doit être saisi pour une écriture de type de Fabrication
-apps/erpnext/erpnext/config/learn.py +87,Opening Accounting Balance,Solde d'ouverture de comptabilité
+apps/erpnext/erpnext/config/learn.py +87,Opening Accounting Balance,Solde d'Ouverture de Comptabilité
 DocType: Sales Invoice Advance,Sales Invoice Advance,Avance facture de vente
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +548,Nothing to request,Pas de requête à demander
 apps/erpnext/erpnext/accounts/doctype/budget/budget.py +34,Another Budget record '{0}' already exists against {1} '{2}' for fiscal year {3},Un autre enregistrement de Budget '{0}' existe déjà pour {1} '{2}' pour l'exercice {3}
@@ -1240,10 +1240,10 @@ DocType: Student Sibling,Student Sibling,Student Sibling
 DocType: Purchase Invoice,Is Recurring,Est récurrent
 DocType: Purchase Invoice,Supplied Items,Articles fournis
 DocType: Student,STUD.,GOUJON.
-DocType: Production Order,Qty To Manufacture,Quantité à fabriquer
+DocType: Production Order,Qty To Manufacture,Quantité À Fabriquer
 DocType: Email Digest,New Income,Nouveau revenu
 DocType: Buying Settings,Maintain same rate throughout purchase cycle,Maintenir le même taux tout au long du cycle d'achat
-DocType: Opportunity Item,Opportunity Item,Article occasion
+DocType: Opportunity Item,Opportunity Item,Article de l'Opportunité
 ,Student and Guardian Contact Details,Étudiant et Guardian Détails de contact
 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +42,Row {0}: For supplier {0} Email Address is required to send email,Row {0}: Pour le fournisseur {0} Adresse e-mail est nécessaire pour envoyer des e-mail
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +70,Temporary Opening,Ouverture temporaire
@@ -1357,7 +1357,7 @@ DocType: Salary Component,Earning,Revenus
 DocType: Purchase Invoice,Party Account Currency,Compte Parti devise
 ,BOM Browser,Explorateur LDM
 DocType: Purchase Taxes and Charges,Add or Deduct,Ajouter ou Déduire
-apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +81,Overlapping conditions found between:,condition qui se coincide touvée
+apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +81,Overlapping conditions found between:,Conditions qui coincident touvées entre :
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +188,Against Journal Entry {0} is already adjusted against some other voucher,L'Écriture de Journal {0} est déjà ajustée par un autre bon
 apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +68,Total Order Value,Ordre Valeur totale
 apps/erpnext/erpnext/demo/setup/setup_data.py +315,Food,Alimentation
@@ -1369,7 +1369,7 @@ apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_vouc
 apps/erpnext/erpnext/hr/doctype/appraisal_template/appraisal_template.py +21,Sum of points for all goals should be 100. It is {0},Somme des points pour tous les objectifs devraient être 100. Il est {0}
 DocType: Project,Start and End Dates,Dates début et fin
 ,Delivered Items To Be Billed,Articles Livrés à Facturer
-apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +16,Open BOM {0},Ouvrir BOM {0}
+apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +16,Open BOM {0},Ouvrir LDM {0}
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +60,Warehouse cannot be changed for Serial No.,Entrepôt ne peut être modifié pour le numéro de série
 DocType: Authorization Rule,Average Discount,Remise Moyenne
 DocType: Purchase Invoice Item,UOM,UOM
@@ -1382,7 +1382,7 @@ apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +89,Appli
 DocType: Activity Cost,Projects,Projets
 DocType: Payment Request,Transaction Currency,Devise de la transaction
 apps/erpnext/erpnext/controllers/buying_controller.py +24,From {0} | {1} {2},Du {0} | {1} {2}
-DocType: Production Order Operation,Operation Description,Description de l'opération
+DocType: Production Order Operation,Operation Description,Description de l'Opération
 DocType: Item,Will also apply to variants,Se appliquera également aux variantes
 apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +34,Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Impossible de modifier les dates de début et de fin d'exercice une fois que l'exercice est enregistré.
 DocType: Quotation,Shopping Cart,Panier
@@ -1461,7 +1461,7 @@ DocType: Shipping Rule Condition,To Value,To Value
 DocType: Asset Movement,Stock Manager,Responsable des Stocks
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +135,Source warehouse is mandatory for row {0},Entrepôt Source est obligatoire à la ligne {0}
 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js +814,Packing Slip,Bordereau de livraison
-apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +108,Office Rent,Loyer du bureau
+apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +108,Office Rent,Loyer du Bureau
 apps/erpnext/erpnext/config/setup.py +111,Setup SMS gateway settings,paramètres de la passerelle SMS de configuration
 apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.js +60,Import Failed!,Importation a échoué!
 apps/erpnext/erpnext/public/js/templates/address_list.html +21,No address added yet.,Aucune adresse encore ajouté.
@@ -1469,7 +1469,7 @@ DocType: Workstation Working Hour,Workstation Working Hour,Workstation heures de
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +87,Analyst,Analyste
 DocType: Item,Inventory,Inventaire
 DocType: Item,Sales Details,Détails ventes
-DocType: Quality Inspection,QI-,Qi-
+DocType: Quality Inspection,QI-,QI-
 DocType: Opportunity,With Items,Avec Articles
 apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +36,In Qty,En Qté
 DocType: Notification Control,Expense Claim Rejected,Note de Frais Rejetée
@@ -1493,7 +1493,7 @@ DocType: Student Attendance Tool,Students HTML,Les étudiants HTML
 apps/erpnext/erpnext/public/js/setup_wizard.js +60,Financial Year Start Date,Date de Début de l'Exercice Financier
 DocType: POS Profile,Apply Discount,Appliquer Réduction
 DocType: Employee External Work History,Total Experience,Total Experience
-apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +70,Open Projects,Projets Ouverts
+apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +70,Open Projects,Ouvrir les Projets
 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +267,Packing Slip(s) cancelled,Bordereau(x) annulé
 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +31,Cash Flow from Investing,Flux de Trésorerie des Investissements
 DocType: Program Course,Program Course,Cours du programme
@@ -1553,7 +1553,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar
 ,Lead Name,Nom du Prospect
 ,POS,Points de Ventes
 DocType: C-Form,III,III
-apps/erpnext/erpnext/config/stock.py +305,Opening Stock Balance,Ouverture Stock Solde
+apps/erpnext/erpnext/config/stock.py +305,Opening Stock Balance,Solde d'Ouverture des Stocks
 apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +58,{0} must appear only once,{0} doit apparaître qu'une seule fois
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +359,Not allowed to tranfer more {0} than {1} against Purchase Order {2},Non autorisé à tranférer plus que {0} {1} contre Purchase Order {2}
 apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py +59,Leaves Allocated Successfully for {0},Congés Attribués avec Succès pour {0}
@@ -1578,7 +1578,7 @@ apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +141,The
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +20,Resend Payment Email,Renvoyer Paiement E-mail
 apps/erpnext/erpnext/templates/pages/projects.html +27,New task,Nouvelle tâche
 apps/erpnext/erpnext/utilities/activation.py +75,Make Quotation,Faire soumission
-apps/erpnext/erpnext/config/selling.py +216,Other Reports,Autres rapports
+apps/erpnext/erpnext/config/selling.py +216,Other Reports,Autres Rapports
 DocType: Dependent Task,Dependent Task,Tâche Dépendante
 apps/erpnext/erpnext/stock/doctype/item/item.py +406,Conversion factor for default Unit of Measure must be 1 in row {0},Facteur de conversion de l'Unité de Mesure par défaut doit être 1 dans la ligne {0}
 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +208,Leave of type {0} cannot be longer than {1},Les Congés de type {0} ne peuvent pas être plus long que {1}
@@ -1597,7 +1597,7 @@ apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_st
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +246,Quantity must not be more than {0},Quantité ne doit pas être plus de {0}
 apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +107,Previous Financial Year is not closed,Précédent Année financière est pas fermé
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +44,Age (Days),Âge (Jours)
-DocType: Quotation Item,Quotation Item,Article de la soumission
+DocType: Quotation Item,Quotation Item,Article du Devis
 DocType: Account,Account Name,Nom du Compte
 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +40,From Date cannot be greater than To Date,La Date Initiale ne peut pas être postérieure à la Date Finale
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +194,Serial No {0} quantity {1} cannot be a fraction,N ° de série {0} quantité {1} ne peut pas être une fraction
@@ -1670,7 +1670,7 @@ DocType: Packed Item,To Warehouse (Optional),A l'entrepôt (Facultatif)
 DocType: Payment Entry,Paid Amount (Company Currency),Montant payé (Devise Société)
 DocType: Purchase Invoice,Additional Discount,Remise Supplémentaire
 DocType: Selling Settings,Selling Settings,Réglages de vente
-apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +39,Online Auctions,Enchères en ligne
+apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +39,Online Auctions,Enchères en Ligne
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +98,Please specify either Quantity or Valuation Rate or both,S'il vous plaît spécifier Quantité ou l'évaluation des taux ou à la fois
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order_dashboard.py +14,Fulfillment,Accomplissement
 apps/erpnext/erpnext/templates/generators/item.html +67,View in Cart,Voir Panier
@@ -1704,14 +1704,14 @@ DocType: Announcement,Instructor,Instructeur
 DocType: Employee,AB+,AB+
 DocType: Item,"If this item has variants, then it cannot be selected in sales orders etc.","Si cet article a des variantes, alors il ne peut pas être sélectionné dans les commandes, etc."
 DocType: Lead,Next Contact By,Contact suivant par
-apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +254,Quantity required for Item {0} in row {1},Quantité requise pour l'article {0} à la ligne {1}
+apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +254,Quantity required for Item {0} in row {1},Quantité requise pour l'Article {0} à la ligne {1}
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +114,Warehouse {0} can not be deleted as quantity exists for Item {1},Entrepôt {0} ne peut pas être supprimé car il existe une quantité pour l'article {1}
-DocType: Quotation,Order Type,Type d'ordre
+DocType: Quotation,Order Type,Type de Commande
 DocType: Purchase Invoice,Notification Email Address,Adresse E-mail de notification
 ,Item-wise Sales Register,Registre des ventes par Article
 DocType: Asset,Gross Purchase Amount,Montant d'Achat Brut
 DocType: Asset,Depreciation Method,Méthode d'Amortissement
-apps/erpnext/erpnext/accounts/page/pos/pos.js +686,Offline,Hors ligne
+apps/erpnext/erpnext/accounts/page/pos/pos.js +686,Offline,Hors Ligne
 DocType: Purchase Taxes and Charges,Is this Tax included in Basic Rate?,Est-ce Taxes incluses dans le taux de base?
 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +56,Total Target,Cible total
 DocType: Program Course,Required,Obligatoire
@@ -1730,7 +1730,7 @@ DocType: Naming Series,Set prefix for numbering series on your transactions,Déf
 DocType: Employee Attendance Tool,Employees HTML,Employés HTML
 apps/erpnext/erpnext/stock/doctype/item/item.py +420,Default BOM ({0}) must be active for this item or its template,LDM par défaut ({0}) doit être actif pour ce produit ou son modèle
 DocType: Employee,Leave Encashed?,Laisser Encaissé ?
-apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +32,Opportunity From field is mandatory,Opportunité champ est obligatoire
+apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +32,Opportunity From field is mandatory,Le champ Opportunité De est obligatoire
 DocType: Email Digest,Annual Expenses,Dépenses Annuelles
 DocType: Item,Variants,Variantes
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +994,Make Purchase Order,Faire un bon de commande
@@ -1794,7 +1794,7 @@ DocType: Purchase Receipt Item Supplied,Consumed Qty,Qté Consommée
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +52,Telecommunications,télécommunications
 DocType: Packing Slip,Indicates that the package is a part of this delivery (Only Draft),Indique que le package est une partie de cette livraison (Seuls les projets)
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +36,Make Payment Entry,Effectuer une entrée de paiement
-apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +126,Quantity for Item {0} must be less than {1},Quantité de l'article {0} doit être inférieur à {1}
+apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +126,Quantity for Item {0} must be less than {1},Quantité de l'article {0} doit être inférieure à {1}
 ,Sales Invoice Trends,Tendances des Factures de Vente
 DocType: Leave Application,Apply / Approve Leaves,Appliquer / Approuver les Congés
 apps/erpnext/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html +23,For,Pour
@@ -1845,7 +1845,7 @@ apps/erpnext/erpnext/controllers/accounts_controller.py +248,Multiple fiscal yea
 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +233,{0} created,{0} créé
 DocType: Delivery Note Item,Against Sales Order,Pour la Commande Client
 ,Serial No Status,Statut du No de série
-DocType: Payment Entry Reference,Outstanding,Exceptionnel
+DocType: Payment Entry Reference,Outstanding,Solde
 ,Daily Timesheet Summary,Récapitulatif Quotidien des Feuilles de Présence
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +138,"Row {0}: To set {1} periodicity, difference between from and to date \
 						must be greater than or equal to {2}","Row {0}: Pour régler {1} périodicité, différence entre partir et à ce jour \
@@ -1869,7 +1869,7 @@ DocType: Asset,Sold,Vendu
 ,Item-wise Purchase History,Historique des achats (par Article)
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +231,Please click on 'Generate Schedule' to fetch Serial No added for Item {0},"S'il vous plaît cliquez sur "" Générer Calendrier ' pour récupérer le série n ° ajouté pour l'article {0}"
 DocType: Account,Frozen,Gelé
-,Open Production Orders,Commandes de Production Ouvertes
+,Open Production Orders,Ouvrir les Ordres de Fabrication
 DocType: Sales Invoice Payment,Base Amount (Company Currency),Montant de Base (Devise de la Société)
 DocType: Payment Reconciliation Payment,Reference Row,Rangée de référence
 DocType: Installation Note,Installation Time,Temps d'installation
@@ -1887,7 +1887,7 @@ DocType: Shopping Cart Settings,Show Quantity in Website,Afficher Menge Site
 DocType: Employee Loan Application,Total Payable Amount,Montant total à payer
 DocType: Task,Expected Time (in hours),Durée Prévue (en heures)
 DocType: Item Reorder,Check in (group),Enregistrement (groupe)
-,Qty to Order,Quantité à commander
+,Qty to Order,Quantité à Commander
 DocType: Period Closing Voucher,"The account head under Liability or Equity, in which Profit/Loss will be booked","Le compte tête sous la responsabilité ou l'équité, dans lequel Profit / perte sera comptabilisée"
 apps/erpnext/erpnext/config/projects.py +25,Gantt chart of all tasks.,Diagramme de Gantt de toutes les tâches.
 DocType: Opportunity,Mins to First Response,Minutes avant la Première Réponse
@@ -1926,7 +1926,7 @@ apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +182,Please set 'Ass
 ,Maintenance Schedules,Programmes d'entretien
 DocType: Task,Actual End Date (via Time Sheet),Date de Fin Réelle (via la Feuille de Temps)
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +346,Amount {0} {1} against {2} {3},Montant {0} {1} pour {2} {3}
-,Quotation Trends,Tendances de Soumission
+,Quotation Trends,Tendances des Devis
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +157,Item Group not mentioned in item master for item {0},Le groupe d'articles n'est pas mentionnés dans la fiche de l'article pour l'article {0}
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +330,Debit To account must be a Receivable account,Le compte de débit doit être un compte Débiteur
 DocType: Shipping Rule Condition,Shipping Amount,Montant de livraison
@@ -2011,10 +2011,10 @@ DocType: Authorization Rule,Applicable To (User),Applicable À (Utilisateur)
 DocType: Purchase Taxes and Charges,Deduct,Déduire
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +188,Job Description,Description de l'Emploi
 DocType: Student Applicant,Applied,Appliqué
-DocType: Sales Invoice Item,Qty as per Stock UOM,Qté en stock pour Emballage
+DocType: Sales Invoice Item,Qty as per Stock UOM,Qté par UDM du Stock
 apps/erpnext/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +52,Guardian2 Name,Nom Guardian2
 apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py +130,"Special Characters except ""-"", ""#"", ""."" and ""/"" not allowed in naming series","Caractères spéciaux sauf ""-"", ""#"", ""."" et ""/"" pas autorisés à nommer série"
-DocType: Campaign,"Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment.","Garder une trace des campagnes de vente. Gardez une trace des prospections, devis, vente etc. Pour mesurer le retour sur investissement."
+DocType: Campaign,"Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment.","Garder une Trace des Campagnes de Vente. Garder une trace des Prospects, Devis, Commandes Client etc. depuis les Campagnes pour mesurer le Retour sur Investissement."
 DocType: Expense Claim,Approver,Approbateur
 ,SO Qty,SO Quantité
 DocType: Guardian,Work Address,Adresse de travail
@@ -2050,7 +2050,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliat
 apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +125,Cost of New Purchase,Coût du Nouvel Achat
 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +94,Sales Order required for Item {0},Commande client requise pour l'article {0}
 DocType: Purchase Invoice Item,Rate (Company Currency),Prix (Monnaie de la société)
-DocType: Student Guardian,Others,autres
+DocType: Student Guardian,Others,Autres
 DocType: Payment Entry,Unallocated Amount,Montant Unallocated
 apps/erpnext/erpnext/templates/includes/product_page.js +69,Cannot find a matching Item. Please select some other value for {0}.,Impossible de trouver un article similaire. Veuillez sélectionner une autre valeur pour {0}.
 DocType: POS Profile,Taxes and Charges,Impôts et taxes
@@ -2063,7 +2063,7 @@ apps/erpnext/erpnext/utilities/activation.py +109,Add Timesheets,Ajouter les feu
 DocType: Vehicle Service,Service Item,service de l'article
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +39,Please click on 'Generate Schedule' to get schedule,"S'il vous plaît cliquez sur "" Générer Calendrier » pour obtenir le calendrier"
 apps/erpnext/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py +55,There were errors while deleting following schedules:,Il y avait des erreurs lors de la suppression des horaires suivants:
-DocType: Bin,Ordered Quantity,Quantité commandée
+DocType: Bin,Ordered Quantity,Quantité Commandée
 apps/erpnext/erpnext/public/js/setup_wizard.js +52,"e.g. ""Build tools for builders""","e.g. ""Construire des outils pour les constructeurs"""
 DocType: Grading Scale,Grading Scale Intervals,Intervalles de l'Échelle de Notation
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +126,{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: L'entrée comptable pour {2} ne peut être faite en devise: {3}
@@ -2090,7 +2090,7 @@ DocType: Employee,Blood Group,Groupe Sanguin
 DocType: Production Order Operation,Pending,En attente
 DocType: Course,Course Name,Nom du Cours
 DocType: Employee Leave Approver,Users who can approve a specific employee's leave applications,Les utilisateurs qui peuvent approuver les demandes de congé d'un employé en particulier
-apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +50,Office Equipments,Équipement de bureau
+apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +50,Office Equipments,Équipements de Bureau
 DocType: Purchase Invoice Item,Qty,Qté
 DocType: Fiscal Year,Companies,Sociétés
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +24,Electronics,Électronique
@@ -2108,7 +2108,7 @@ DocType: Stock Entry,Total Incoming Value,Valeur entrante total
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +324,Debit To is required,Compte de Débit Requis
 apps/erpnext/erpnext/utilities/activation.py +110,"Timesheets help keep track of time, cost and billing for activites done by your team","Timesheets aider à suivre le temps, le coût et la facturation des activités effectuées par votre équipe"
 apps/erpnext/erpnext/stock/report/item_prices/item_prices.py +39,Purchase Price List,Liste prix d'achat
-DocType: Offer Letter Term,Offer Term,Offre à terme
+DocType: Offer Letter Term,Offer Term,Terme de la Proposition
 DocType: Quality Inspection,Quality Manager,Responsable Qualité
 DocType: Job Applicant,Job Opening,Offre d’Emploi
 DocType: Payment Reconciliation,Payment Reconciliation,Rapprochement des paiements
@@ -2116,7 +2116,7 @@ apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedu
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +51,Technology,technologie
 apps/erpnext/erpnext/public/js/utils.js +92,Total Unpaid: {0},Total non rémunéré: {0}
 DocType: BOM Website Operation,BOM Website Operation,Opération de LDM du Site Internet
-apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.js +13,Offer Letter,lettre de proposition
+apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.js +13,Offer Letter,Lettre de Proposition
 apps/erpnext/erpnext/config/manufacturing.py +18,Generate Material Requests (MRP) and Production Orders.,Générer des Demandes de Matériel (MRP) et des Ordres de Fabrication.
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +65,Total Invoiced Amt,Total facturé Amt
 DocType: BOM,Conversion Rate,Taux de Conversion
@@ -2225,7 +2225,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar
 DocType: Process Payroll,Create Salary Slip,Créer une Fiche de Paie
 apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +34,Traceability,Traçabilité
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +135,Source of Funds (Liabilities),Source des fonds ( Passif )
-apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +372,Quantity in row {0} ({1}) must be same as manufactured quantity {2},Quantité alignée {0} ({1}) doit être égale a la quantité fabriquée {2}
+apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +372,Quantity in row {0} ({1}) must be same as manufactured quantity {2},Quantité à la ligne {0} ({1}) doit être égale a la quantité fabriquée {2}
 DocType: Appraisal,Employee,Employé
 apps/erpnext/erpnext/schools/doctype/grading_scale/grading_scale.py +20,Please define grade for treshold 0%,S'il vous plaît définir note pour 0% treshold
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +232,{0} {1} is fully billed,{0} {1} est entièrement facturé
@@ -2273,7 +2273,7 @@ DocType: Shipping Rule,Shipping Rule Label,Étiquette de la Règle de Livraison
 apps/erpnext/erpnext/public/js/conf.js +28,User Forum,Forum de l'utilisateur
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +248,Raw Materials cannot be blank.,Matières premières ne peuvent pas être vide.
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +444,"Could not update stock, invoice contains drop shipping item.","Impossible de mettre à jour de stock, facture contient un élément en livraison directe."
-apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +459,Quick Journal Entry,Entrée rapide dans le journal
+apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +459,Quick Journal Entry,Écriture Rapide dans le Journal
 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +142,You can not change rate if BOM mentioned agianst any item,Vous ne pouvez pas modifier le taux si BOM mentionné agianst un article
 apps/erpnext/erpnext/schools/doctype/student_batch/student_batch.py +24,Student Group exists with same name,Groupe étudiant existe avec le même nom
 DocType: Employee,Previous Work Experience,L'expérience de travail antérieure
@@ -2301,7 +2301,7 @@ apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +768,Item or Wareh
 apps/erpnext/erpnext/config/stock.py +189,Unit of Measure,Unité de mesure
 DocType: Fiscal Year,Year End Date,Date de Fin de l'exercice
 DocType: Task Depends On,Task Depends On,Tâches dépendent de
-DocType: Supplier Quotation,Opportunity,Occasion
+DocType: Supplier Quotation,Opportunity,Opportunité
 ,Completed Production Orders,Ordres de Fabrication Terminés
 DocType: Operation,Default Workstation,Station de Travail par Défaut
 DocType: Notification Control,Expense Claim Approved Message,Message d'une Note de Frais Approuvée
@@ -2316,7 +2316,7 @@ apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_too
 DocType: Project,% Complete Method,% Méthode complète
 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +201,Maintenance start date can not be before delivery date for Serial No {0},Entretien date de début ne peut pas être avant la date de livraison pour série n ° {0}
 DocType: Production Order,Actual End Date,Date de Fin Réelle
-DocType: BOM,Operating Cost (Company Currency),Coût d'exploitation (Société Monnaie)
+DocType: BOM,Operating Cost (Company Currency),Coût d'Exploitation (Devise Société)
 DocType: Purchase Invoice,PINV-,PINV-
 DocType: Authorization Rule,Applicable To (Role),Applicable À (Rôle)
 DocType: Stock Entry,Purpose,But
@@ -2418,7 +2418,7 @@ apps/erpnext/erpnext/hr/doctype/training_event/training_event.js +7,Training Res
 DocType: Purchase Invoice,Is Paid,Est payé
 DocType: Salary Structure,Total Earning,Total Revenus
 DocType: Purchase Receipt,Time at which materials were received,Heure à laquelle les matériaux ont été reçus
-DocType: Stock Ledger Entry,Outgoing Rate,Taux sortant
+DocType: Stock Ledger Entry,Outgoing Rate,Taux Sortant
 apps/erpnext/erpnext/config/hr.py +224,Organization branch master.,Organisation principale des branches.
 apps/erpnext/erpnext/controllers/accounts_controller.py +286, or ,ou
 DocType: Sales Order,Billing Status,Statut de la Facturation
@@ -2438,7 +2438,7 @@ DocType: Payment Entry,Cheque/Reference Date,Chèque/Date de Référence
 DocType: Purchase Invoice,Total Taxes and Charges,Total Taxes et frais
 DocType: Employee,Emergency Contact,Contact en cas d'Urgence
 DocType: Bank Reconciliation Detail,Payment Entry,Paiement Entrée
-DocType: Item,Quality Parameters,Paramètres de qualité
+DocType: Item,Quality Parameters,Paramètres de Qualité
 ,sales-browser,Navigateur de ventes
 apps/erpnext/erpnext/accounts/doctype/account/account.js +56,Ledger,Grand Livre
 DocType: Target Detail,Target  Amount,Montant Ciblé
@@ -2474,7 +2474,7 @@ DocType: Payment Request,Amount in customer's currency,Montant dans la devise du
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +783,Delivery,Livraison
 DocType: Stock Reconciliation Item,Current Qty,Qté Actuelle
 DocType: BOM Item,"See ""Rate Of Materials Based On"" in Costing Section",Voir «Taux de matériaux à base de« coûts dans la section
-DocType: Appraisal Goal,Key Responsibility Area,Domaine à responsabilités principal
+DocType: Appraisal Goal,Key Responsibility Area,Domaine de Responsabilités Principal
 apps/erpnext/erpnext/utilities/activation.py +128,"Student Batches help you track attendance, assessments and fees for students","Batchs étudiants vous aider à suivre la fréquentation, les évaluations et les frais pour les étudiants"
 DocType: Payment Entry,Total Allocated Amount,Montant total alloué
 DocType: Item Reorder,Material Request Type,Type de demande de matériel
@@ -2560,7 +2560,7 @@ DocType: Sales Person,All Sales Transactions can be tagged against multiple **Sa
 ,S.O. No.,S.O. Non.
 apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +163,Please create Customer from Lead {0},Merci de créer un Client à partir du Prospect {0}
 DocType: Price List,Applicable for Countries,Applicable pour les Pays
-apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +52,Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,Seulement demandes d'autorisation avec le statut « approuvé » et « Rejeté » peut être soumis
+apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +52,Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,Seules les Demandes de Congés avec le statut 'Appouvée' ou 'Rejetée' peuvent être soumises
 apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +38,Student Group Name is mandatory in row {0},Étudiant Nom de groupe est obligatoire dans la ligne {0}
 DocType: Homepage,Products to be shown on website homepage,Produits destinés à être affichés sur le site Web page d'accueil
 apps/erpnext/erpnext/setup/doctype/customer_group/customer_group.js +13,This is a root customer group and cannot be edited.,Il s'agit d'un groupe de clients de la racine et ne peut être modifié .
@@ -2622,10 +2622,10 @@ DocType: BOM Item,Scrap %,Scrap%
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +45,"Charges will be distributed proportionately based on item qty or amount, as per your selection","Les frais seront distribués proportionnellement à la qté ou au montant de l'article, selon votre sélection"
 DocType: Maintenance Visit,Purposes,Buts
 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +105,Atleast one item should be entered with negative quantity in return document,Au moins un article doit être saisi avec quantité négative dans le document de retour
-apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +71,"Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Opération {0} plus longtemps que les heures de travail disponibles dans poste de travail {1}, briser l'opération en plusieurs opérations"
+apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +71,"Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Opération {0} plus longue que toute heure de travail disponible dans le poste {1}, séparer l'opération en plusieurs opérations"
 ,Requested,demandé
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +85,No Remarks,Pas de remarques
-DocType: Purchase Invoice,Overdue,En retard
+DocType: Purchase Invoice,Overdue,En Retard
 DocType: Account,Stock Received But Not Billed,Stock reçus mais non facturés
 apps/erpnext/erpnext/accounts/doctype/account/account.py +88,Root Account must be a group,Compte racine doit être un groupe
 DocType: Fees,FEE.,HONORAIRES.
@@ -2633,7 +2633,7 @@ DocType: Employee Loan,Repaid/Closed,Remboursé / Fermé
 DocType: Item,Total Projected Qty,Nombre total prévu
 DocType: Monthly Distribution,Distribution Name,Nom de Distribution
 DocType: Course,Course Code,Code de Cours
-apps/erpnext/erpnext/controllers/stock_controller.py +320,Quality Inspection required for Item {0},Inspection de la qualité requise pour l'article {0}
+apps/erpnext/erpnext/controllers/stock_controller.py +320,Quality Inspection required for Item {0},Inspection de la Qualité requise pour l'Article {0}
 DocType: Quotation,Rate at which customer's currency is converted to company's base currency,Taux à laquelle la devise du client est converti en devise de base de la société
 DocType: Purchase Invoice Item,Net Rate (Company Currency),Taux Net (Devise Société)
 DocType: Salary Detail,Condition and Formula Help,Aide Condition et Formule
@@ -2734,7 +2734,7 @@ DocType: Sales Invoice,Time Sheet List,Time Sheet Liste
 DocType: Employee,You can enter any date manually,Vous pouvez entrer une date manuellement
 DocType: Asset Category Account,Depreciation Expense Account,Compte de Dotations aux Amortissement
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +183,Probationary Period,Période De Probation
-DocType: Customer Group,Only leaf nodes are allowed in transaction,Seuls les noeuds feuilles sont autorisées dans une transaction
+DocType: Customer Group,Only leaf nodes are allowed in transaction,Seuls les noeuds feuilles sont autorisés dans une transaction
 DocType: Expense Claim,Expense Approver,Approbateur des Frais
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +124,Row {0}: Advance against Customer must be credit,Row {0}: Advance contre le Client doit être crédit
 apps/erpnext/erpnext/accounts/doctype/account/account.js +66,Non-Group to Group,Non-Groupe à groupe
@@ -2825,9 +2825,9 @@ DocType: Stock Settings,Freeze Stock Entries,Geler les Entrées de Stocks
 DocType: Asset,Expected Value After Useful Life,Valeur Attendue Après Utilisation Complète
 DocType: Item,Reorder level based on Warehouse,Niveau de réapprovisionnement basée sur Entrepôt
 DocType: Activity Cost,Billing Rate,Taux de Facturation
-,Qty to Deliver,Quantité à livrer
+,Qty to Deliver,Quantité à Livrer
 ,Stock Analytics,Analytics stock
-apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +435,Operations cannot be left blank,Les opérations peuvent ne pas être laissées vides
+apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +435,Operations cannot be left blank,Les opérations ne peuvent pas être laissées vides
 DocType: Maintenance Visit Purpose,Against Document Detail No,Pour le Détail du Document N°
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +79,Party Type is mandatory,Type de partie est obligatoire
 DocType: Quality Inspection,Outgoing,Sortant
@@ -2871,7 +2871,7 @@ apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +170,Closed orde
 DocType: Student Guardian,Father,Père
 apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,«Mise à jour du stock» ne peut être vérifié pour la vente d'actifs immobilisés
 DocType: Bank Reconciliation,Bank Reconciliation,Réconciliation Bancaire
-DocType: Attendance,On Leave,En congé
+DocType: Attendance,On Leave,En Congé
 apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +7,Get Updates,Obtenir les Mises à jour
 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +97,{0} {1}: Account {2} does not belong to Company {3},{0} {1}: compte {2} ne fait pas partie de la société {3}
 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +132,Material Request {0} is cancelled or stopped,Demande de Matériel {0} est annulé ou arrêté
@@ -2891,7 +2891,7 @@ DocType: Asset,Fully Depreciated,Complètement Déprécié
 ,Stock Projected Qty,Quantité Stock projeté
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +390,Customer {0} does not belong to project {1},Le Client {0} ne fait pas parti du projet {1}
 DocType: Employee Attendance Tool,Marked Attendance HTML,Présence marquée HTML
-apps/erpnext/erpnext/utilities/activation.py +74,"Quotations are proposals, bids you have sent to your customers","Les citations sont des propositions, les offres que vous avez envoyé à vos clients"
+apps/erpnext/erpnext/utilities/activation.py +74,"Quotations are proposals, bids you have sent to your customers","Les devis sont des propositions, offres que vous avez envoyées à vos clients"
 DocType: Sales Order,Customer's Purchase Order,N° de Bon de Commande du Client
 apps/erpnext/erpnext/config/stock.py +112,Serial No and Batch,N ° de série et lot
 DocType: Warranty Claim,From Company,De la Société
@@ -2901,7 +2901,7 @@ apps/erpnext/erpnext/buying/page/purchase_analytics/purchase_analytics.js +95,Va
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +402,Productions Orders cannot be raised for:,Les Commandes de Fabrications ne peuvent pas être élevés pour:
 apps/erpnext/erpnext/public/js/setup_wizard.js +304,Minute,Minute
 DocType: Purchase Invoice,Purchase Taxes and Charges,Taxes et frais pour achats
-,Qty to Receive,Quantité à recevoir
+,Qty to Receive,Quantité à Recevoir
 DocType: Leave Block List,Leave Block List Allowed,Liste de Blocage des Congés Autorisée
 DocType: Grading Scale Interval,Grading Scale Interval,Intervalle de l'Échelle de Notation
 apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py +49,Expense Claim for Vehicle Log {0},Note de Frais pour Indémnité Kilométrique {0}
@@ -2911,7 +2911,7 @@ apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +107,
 apps/erpnext/erpnext/buying/page/purchase_analytics/purchase_analytics.js +128,All Supplier Types,Tous les Types de Fournisseurs
 DocType: Global Defaults,Disable In Words,"Désactiver ""En Lettres"""
 apps/erpnext/erpnext/stock/doctype/item/item.py +44,Item Code is mandatory because Item is not automatically numbered,Le code de l'article est obligatoire car l'article n'est pas numéroté automatiquement
-apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +101,Quotation {0} not of type {1},La soumission {0} n'est pas du type {1}
+apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +101,Quotation {0} not of type {1},Le devis {0} n'est pas du type {1}
 DocType: Maintenance Schedule Item,Maintenance Schedule Item,Article calendrier d'entretien
 DocType: Sales Order,%  Delivered,Livré%
 DocType: Production Order,PRO-,PRO-
@@ -2922,7 +2922,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar
 DocType: Purchase Invoice,Edit Posting Date and Time,Modifier l'affichage Date et heure
 apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +94,Please set Depreciation related Accounts in Asset Category {0} or Company {1},S'il vous plaît mettre amortissement Comptes liés à Asset Catégorie {0} ou {1} Société
 DocType: Academic Term,Academic Year,Année Académique
-apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +167,Opening Balance Equity,Ouverture équité en matière d'équilibre
+apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +167,Opening Balance Equity,Ouverture de la Balance des Capitaux Propres
 DocType: Lead,CRM,CRM
 DocType: Appraisal,Appraisal,Estimation
 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +137,Email sent to supplier {0},Email envoyé au fournisseur {0}
@@ -2995,9 +2995,9 @@ DocType: Customs Tariff Number,Tariff Number,tarif Nombre
 apps/erpnext/erpnext/stock/doctype/item/item.js +39,Projected,Projeté
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +218,Serial No {0} does not belong to Warehouse {1},No de série {0} ne fait pas partie de l’entrepôt {1}
 apps/erpnext/erpnext/controllers/status_updater.py +162,Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0,Remarque : Le système ne vérifie pas sur - livraison et la sur- réservation pour objet {0} que la quantité ou le montant est égal à 0
-DocType: Notification Control,Quotation Message,Message du devis
+DocType: Notification Control,Quotation Message,Message du Devis
 DocType: Employee Loan,Employee Loan Application,Demande de Prêt d'un Employé
-DocType: Issue,Opening Date,Date d'ouverture
+DocType: Issue,Opening Date,Date d'Ouverture
 apps/erpnext/erpnext/schools/api.py +69,Attendance has been marked successfully.,La présence a été marquée avec succès.
 DocType: Journal Entry,Remark,Remarque
 DocType: Purchase Receipt Item,Rate and Amount,Taux et le montant
@@ -3022,7 +3022,7 @@ DocType: Student Admission,Admission End Date,Date de Fin de l'Admission
 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +21,Sub-contracting,Sous-traitant
 DocType: Journal Entry Account,Journal Entry Account,Compte d’Écriture de Journal
 apps/erpnext/erpnext/schools/doctype/academic_year/academic_year.js +3,Student Group,Groupe étudiant
-DocType: Shopping Cart Settings,Quotation Series,Série soumission
+DocType: Shopping Cart Settings,Quotation Series,Séries de Devis
 apps/erpnext/erpnext/setup/doctype/item_group/item_group.py +58,"An item exists with same name ({0}), please change the item group name or rename the item","Un article existe avec le même nom ({0}), veuillez changer le nom du groupe d'article ou renommer l'article"
 apps/erpnext/erpnext/accounts/page/pos/pos.js +1868,Please select customer,S'il vous plaît sélectionner client
 DocType: C-Form,I,I
@@ -3136,7 +3136,7 @@ apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +19
 apps/erpnext/erpnext/hr/doctype/job_opening/job_opening.py +28,Current Job Openings,Offres d'Emploi Actuelles
 DocType: Company,Stock Adjustment Account,Compte d'ajustement de stock
 DocType: Journal Entry,Write Off,Effacer
-DocType: Timesheet Detail,Operation ID,ID. de l'opération
+DocType: Timesheet Detail,Operation ID,ID de l'Opération
 DocType: Employee,"System User (login) ID. If set, it will become default for all HR forms.","L'utilisateur du système (login) ID. S'il est défini, il sera par défaut pour toutes les formes de ressources humaines."
 apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +16,{0}: From {1},{0}: De {1}
 DocType: Task,depends_on,Dépend de
@@ -3174,7 +3174,7 @@ apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +149,Note
 DocType: Training Event,Seminar,Séminaire
 DocType: Program Enrollment Fee,Program Enrollment Fee,Programme Frais d'inscription
 DocType: Item,Supplier Items,Fournisseur Articles
-DocType: Opportunity,Opportunity Type,Type d'opportunité
+DocType: Opportunity,Opportunity Type,Type d'Opportunité
 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +16,New Company,Nouvelle Société
 apps/erpnext/erpnext/setup/doctype/company/delete_company_transactions.py +17,Transactions can only be deleted by the creator of the Company,Transactions ne peuvent être supprimés que par le créateur de la Société
 apps/erpnext/erpnext/accounts/general_ledger.py +21,Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,Nombre incorrect de General Ledger Entrées trouvées. Vous avez peut-être choisi le bon compte dans la transaction.
@@ -3247,8 +3247,8 @@ DocType: Account,Bank,Banque
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +9,Airline,Compagnie Aérienne
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +790,Issue Material,Problème matériel
 DocType: Material Request Item,For Warehouse,Pour l’Entrepôt
-DocType: Employee,Offer Date,Date de l'offre
-apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.py +33,Quotations,Soumissions
+DocType: Employee,Offer Date,Date de la Proposition
+apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.py +33,Quotations,Devis
 apps/erpnext/erpnext/accounts/page/pos/pos.js +665,You are in offline mode. You will not be able to reload until you have network.,Vous êtes en mode hors connexion. Vous ne serez pas en mesure de recharger jusqu'à ce que vous avez réseau.
 apps/erpnext/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +31,No Student Groups created.,Aucun groupe d'étudiants créés.
 DocType: Purchase Invoice Item,Serial No,N ° de série
@@ -3273,7 +3273,7 @@ DocType: Student Language,Student Language,Langue des étudiants
 apps/erpnext/erpnext/config/selling.py +23,Customers,Clients
 DocType: Student Sibling,Institution,Institution
 DocType: Asset,Partially Depreciated,Partiellement dépréciées
-DocType: Issue,Opening Time,Horaire d'ouverture
+DocType: Issue,Opening Time,Horaire d'Ouverture
 apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +92,From and To dates required,Les date Du et Au sont requises
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +46,Securities & Commodity Exchanges,Valeurs mobilières et des bourses de marchandises
 apps/erpnext/erpnext/stock/doctype/item/item.py +642,Default Unit of Measure for Variant '{0}' must be same as in Template '{1}',L’Unité de mesure par défaut pour la variante '{0}' doit être la même que dans le Modèle '{1}'
@@ -3306,7 +3306,7 @@ apps/erpnext/erpnext/accounts/doctype/account/account.py +220,Child account exis
 apps/erpnext/erpnext/setup/doctype/territory/territory.py +19,Either target qty or target amount is mandatory,Soit la qté cible soit le montant cible est obligatoire
 apps/erpnext/erpnext/stock/get_item_details.py +501,No default BOM exists for Item {0},Pas de nomenclature par défaut existe pour l'article {0}
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +334,Please select Posting Date first,S'il vous plaît sélectionnez Date de publication abord
-apps/erpnext/erpnext/public/js/account_tree_grid.js +211,Opening Date should be before Closing Date,Date d'ouverture devrait être avant la date de clôture
+apps/erpnext/erpnext/public/js/account_tree_grid.js +211,Opening Date should be before Closing Date,Date d'Ouverture devrait être antérieure à la Date de Clôture
 DocType: Leave Control Panel,Carry Forward,Reporter
 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +30,Cost Center with existing transactions can not be converted to ledger,Un Centre de Coûts avec des transactions existantes ne peut pas être converti en grand livre
 DocType: Department,Days for which Holidays are blocked for this department.,Jours pour lesquels les Vacances sont bloquées pour ce département.
@@ -3361,7 +3361,7 @@ DocType: C-Form,Invoices,Factures
 DocType: Job Opening,Job Title,Titre de l'Emploi
 apps/erpnext/erpnext/utilities/activation.py +100,Create Users,Créer des Utilisateurs
 apps/erpnext/erpnext/public/js/setup_wizard.js +304,Gram,Gramme
-apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +393,Quantity to Manufacture must be greater than 0.,Quantité à fabriquer doit être supérieur à 0.
+apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +393,Quantity to Manufacture must be greater than 0.,Quantité à Fabriquer doit être supérieur à 0.
 apps/erpnext/erpnext/config/maintenance.py +17,Visit report for maintenance call.,Rapport de visite pour l'appel de maintenance
 DocType: Stock Entry,Update Rate and Availability,Mettre à jour prix et disponibilité
 DocType: Stock Settings,Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.,Pourcentage que vous êtes autorisé à recevoir ou de livrer plus sur la quantité commandée. Par exemple: Si vous avez commandé 100 unités. et votre allocation est de 10% alors que vous êtes autorisé à recevoir 110 unités.
@@ -3375,7 +3375,7 @@ DocType: Serial No,AMC Expiry Date,Date d'Expiration CMA
 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +795,Receipt,Quittance
 ,Sales Register,Registre des ventes
 DocType: Daily Work Summary Settings Company,Send Emails At,Envoyer Emails A
-DocType: Quotation,Quotation Lost Reason,Perdu la raison de la Soumission
+DocType: Quotation,Quotation Lost Reason,Raison de la Perte du Devis
 apps/erpnext/erpnext/public/js/setup_wizard.js +14,Select your Domain,Sélectionnez votre domaine
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +340,Transaction reference no {0} dated {1},Référence de la transaction ne {0} daté {1}
 apps/erpnext/erpnext/setup/doctype/supplier_type/supplier_type.js +5,There is nothing to edit.,Il n'y a rien à modifier.
@@ -3414,7 +3414,7 @@ DocType: Expense Claim,More Details,Plus de détails
 DocType: Supplier Quotation,Supplier Address,Adresse du fournisseur
 apps/erpnext/erpnext/accounts/doctype/budget/budget.py +128,{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0} Le budget du compte {1} contre {2} {3} est {4}. Il dépassera de {5}
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +665,Row {0}# Account must be of type 'Fixed Asset',Row {0} # Le compte doit être de type 'Asset fixe'
-apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +36,Out Qty,out Quantité
+apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +36,Out Qty,Qté Sortante
 apps/erpnext/erpnext/config/accounts.py +278,Rules to calculate shipping amount for a sale,Règles de calcul du montant de l'expédition pour une vente
 apps/erpnext/erpnext/selling/doctype/customer/customer.py +51,Series is mandatory,Série est obligatoire
 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +28,Financial Services,Services Financiers
@@ -3473,7 +3473,7 @@ apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
 apps/erpnext/erpnext/controllers/item_variant.py +216,Invalid attribute {0} {1},attribut non valide {0} {1}
 apps/erpnext/erpnext/schools/doctype/assessment_plan/assessment_plan.py +13,Please select Student Group or Student Batch,S'il vous plaît sélectionner Groupe étudiant ou lot étudiant
 DocType: Salary Slip,Earning & Deduction,Revenus et Déduction
-apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +36,Optional. This setting will be used to filter in various transactions.,Facultatif. Ce paramètre sera utilisé pour filtrer différentes écritures.
+apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +36,Optional. This setting will be used to filter in various transactions.,Facultatif. Ce paramètre sera utilisé pour filtrer différentes transactions.
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +108,Negative Valuation Rate is not allowed,Négatif évaluation Taux n'est pas autorisé
 DocType: Holiday List,Weekly Off,Hebdomadaire Off
 DocType: Fiscal Year,"For e.g. 2012, 2012-13","Par exemple: 2012, 2012-13"
@@ -3515,7 +3515,7 @@ DocType: Item Group,HTML / Banner that will show on the top of product list.,HTM
 DocType: Shipping Rule,Specify conditions to calculate shipping amount,Préciser les conditions pour calculer le montant de l'expédition
 DocType: Accounts Settings,Role Allowed to Set Frozen Accounts & Edit Frozen Entries,Rôle autorisés à geler des comptes et modifier le contenu
 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +28,Cannot convert Cost Center to ledger as it has child nodes,Conversion impossible du Centre de Coûts en livre car il possède des nœuds enfants
-apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +47,Opening Value,Valeur d'ouverture
+apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +47,Opening Value,Valeur d'Ouverture
 DocType: Salary Detail,Formula,Formule
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +37,Serial #,# Série
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +92,Commission on Sales,Commission sur les Ventes
@@ -3526,7 +3526,7 @@ DocType: Purchase Order Item,Expected Delivery Date,Date de Livraison Prévue
 apps/erpnext/erpnext/accounts/general_ledger.py +132,Debit and Credit not equal for {0} #{1}. Difference is {2}.,Débit et Crédit non égaux pour {0} # {1}. La différence est de {2}.
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Entertainment Expenses,Frais de Représentation
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +47,Make Material Request,Effectuer une demande de matériel
-apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +19,Open Item {0},Article ouvert {0}
+apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +19,Open Item {0},Ouvrir l'Article {0}
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +205,Sales Invoice {0} must be cancelled before cancelling this Sales Order,Facture de vente {0} doit être annulé avant l'annulation de cette commande client
 apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +60,Age,Âge
 DocType: Sales Invoice Timesheet,Billing Amount,Montant de Facturation
@@ -3541,7 +3541,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar
 DocType: Sales Partner,Logo,Logo
 DocType: Naming Series,Check this if you want to force the user to select a series before saving. There will be no default if you check this.,Cochez cette case si vous voulez forcer l'utilisateur à sélectionner une série avant de l'enregistrer. Il n'y aura pas de série par défaut si vous cochez cette case.
 apps/erpnext/erpnext/stock/get_item_details.py +116,No Item with Serial No {0},Aucun Item avec le Numéro de Série {0}
-DocType: Email Digest,Open Notifications,Notifications ouvertes
+DocType: Email Digest,Open Notifications,Ouvrir les Notifications
 DocType: Payment Entry,Difference Amount (Company Currency),Écart de Montant (Devise de la Société)
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +77,Direct Expenses,Dépenses Directes
 apps/erpnext/erpnext/controllers/recurring_document.py +213,"{0} is an invalid email address in 'Notification \
@@ -3602,7 +3602,7 @@ DocType: Purchase Invoice,Taxes and Charges Added,Taxes et redevances Ajouté
 apps/erpnext/erpnext/setup/doctype/company/company.py +45,Abbreviation is mandatory,Abréviation est obligatoire
 DocType: Project,Task Progress,progression de la tâche
 ,Qty to Transfer,Qté à Transférer
-apps/erpnext/erpnext/config/selling.py +13,Quotes to Leads or Customers.,Devis à Prospects ou Clients.
+apps/erpnext/erpnext/config/selling.py +13,Quotes to Leads or Customers.,Devis de Prospects ou Clients.
 DocType: Stock Settings,Role Allowed to edit frozen stock,Rôle autorisés à modifier stock gelé
 ,Territory Target Variance Item Group-Wise,Variance de région cible selon le groupe d'article
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +105,All Customer Groups,Tous les Groupes Client
@@ -3635,7 +3635,7 @@ DocType: Attendance,ATT-,ATT-
 apps/erpnext/erpnext/stock/doctype/item/item.py +449,Barcode {0} already used in Item {1},Le Code Barre {0} est déjà utilisé dans l'article {1}
 DocType: Lead,Add to calendar on this date,Ajouter cette date au calendrier
 apps/erpnext/erpnext/config/selling.py +86,Rules for adding shipping costs.,Règles pour l'ajout de frais de port.
-DocType: Item,Opening Stock,Stock d'ouverture
+DocType: Item,Opening Stock,Stock d'Ouverture
 apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +20,Customer is required,Client est requis
 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +20,{0} is mandatory for Return,{0} est obligatoire pour le retour
 DocType: Purchase Order,To Receive,A Recevoir
@@ -3649,14 +3649,14 @@ DocType: Production Order Operation,"in Minutes
 Updated via 'Time Log'","Mise à jour en quelques minutes 
  via 'Log Time'"
 DocType: Customer,From Lead,Du Prospect
-apps/erpnext/erpnext/config/manufacturing.py +13,Orders released for production.,Commandes validé pour la production.
+apps/erpnext/erpnext/config/manufacturing.py +13,Orders released for production.,Commandes validées pour la production.
 apps/erpnext/erpnext/public/js/account_tree_grid.js +67,Select Fiscal Year...,Sélectionnez Exercice ...
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +512,POS Profile required to make POS Entry,Profil PDV nécessaire pour faire une entrée PDV
 DocType: Program Enrollment Tool,Enroll Students,Inscrire des Étudiants
 DocType: Hub Settings,Name Token,Nom du jeton
 apps/erpnext/erpnext/patches/v4_0/create_price_list_if_missing.py +21,Standard Selling,Vente standard
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +129,Atleast one warehouse is mandatory,Au moins un entrepôt est obligatoire
-DocType: Serial No,Out of Warranty,Hors garantie
+DocType: Serial No,Out of Warranty,Hors Garantie
 DocType: BOM Replace Tool,Replace,Remplacer
 DocType: Production Order,Unstopped,débouchées
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +348,{0} against Sales Invoice {1},{0} contre la facture de vente {1}
@@ -3677,9 +3677,9 @@ DocType: BOM Replace Tool,The BOM which will be replaced,La nomenclature qui ser
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +44,Electronic Equipments,Equipements Électroniques
 DocType: Account,Debit,Débit
 apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +49,Leaves must be allocated in multiples of 0.5,"Les Congés doivent être alloués par multiples de 0,5"
-DocType: Production Order,Operation Cost,Coût de l'opération
+DocType: Production Order,Operation Cost,Coût de l'Opération
 apps/erpnext/erpnext/config/hr.py +29,Upload attendance from a .csv file,Télécharger les participations à partir d'un fichier .csv
-apps/erpnext/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +39,Outstanding Amt,Exceptionnelle Amt
+apps/erpnext/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +39,Outstanding Amt,Montant en suspens
 DocType: Sales Person,Set targets Item Group-wise for this Sales Person.,Fixer des objectifs élément de groupe-sage pour cette personne des ventes.
 DocType: Stock Settings,Freeze Stocks Older Than [Days],Geler les Articles plus Anciens que [Jours]
 apps/erpnext/erpnext/controllers/accounts_controller.py +541,Row #{0}: Asset is mandatory for fixed asset purchase/sale,Row # {0}: Asset est obligatoire pour les immobilisations achat / vente
@@ -3734,7 +3734,7 @@ apps/erpnext/erpnext/accounts/general_ledger.py +111,Account: {0} can only be up
 DocType: Student Group Creation Tool,Get Courses,Obtenir les Cours
 DocType: GL Entry,Party,Intervenants
 DocType: Sales Order,Delivery Date,Date de Livraison
-DocType: Opportunity,Opportunity Date,Date de possibilité
+DocType: Opportunity,Opportunity Date,Date d'Opportunité
 DocType: Purchase Receipt,Return Against Purchase Receipt,Retour contre Reçu d'achat
 DocType: Request for Quotation Item,Request for Quotation Item,Article de L'Appel d'offre
 DocType: Purchase Order,To Bill,A facturer
@@ -3811,7 +3811,7 @@ DocType: Assessment Result Tool,Assessment Result Tool,Outil de Résultat d'Éva
 DocType: BOM Scrap Item,BOM Scrap Item,Article Mis au Rebut LDM
 apps/erpnext/erpnext/accounts/page/pos/pos.js +845,Submitted orders can not be deleted,commandes passées ne peuvent pas être supprimés
 apps/erpnext/erpnext/accounts/doctype/account/account.py +118,"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Le solde du compte est déjà débiteur, vous n'êtes pas autorisé à définir 'Solde Doit Être' comme 'Créditeur'"
-apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +80,Quality Management,Gestion de la qualité
+apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +80,Quality Management,Gestion de la Qualité
 apps/erpnext/erpnext/accounts/doctype/asset/asset.py +40,Item {0} has been disabled,L'article {0} a été désactivé
 DocType: Employee Loan,Repay Fixed Amount per Period,Rembourser montant fixe par période
 apps/erpnext/erpnext/buying/doctype/purchase_common/purchase_common.py +47,Please enter quantity for Item {0},S'il vous plaît entrer la qté de l'article {0}
@@ -3878,7 +3878,7 @@ apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +123,Warehouse can not
 DocType: Company,Distribution,Distribution
 apps/erpnext/erpnext/schools/doctype/fees/fees.js +27,Amount Paid,Montant Payé
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +95,Project Manager,Chef de projet
-,Quoted Item Comparison,Comparaison d'article soumissionné
+,Quoted Item Comparison,Comparaison d'Article Soumis
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +76,Dispatch,Envoi
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +71,Max discount allowed for item: {0} is {1}%,Réduction maximum autorisée pour l'article: {0} est de {1} %
 apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +173,Net Asset value as on,La valeur nette d'inventaire que sur
@@ -3898,7 +3898,7 @@ apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +36,Motion Picture & Vi
 apps/erpnext/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js +5,Ordered,Commandé
 DocType: Salary Detail,Component,Composant
 DocType: Assessment Criteria,Assessment Criteria Group,Groupe de Critère d'Évaluation
-apps/erpnext/erpnext/accounts/doctype/asset/asset.py +71,Opening Accumulated Depreciation must be less than equal to {0},Ouverture Amortissement cumulé doit être inférieur ou égal à {0}
+apps/erpnext/erpnext/accounts/doctype/asset/asset.py +71,Opening Accumulated Depreciation must be less than equal to {0},Amortissement Cumulé d'Ouverture doit être inférieur ou égal à {0}
 DocType: Warehouse,Warehouse Name,Nom de l'entrepôt
 DocType: Naming Series,Select Transaction,Sélectionner Transaction
 apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +30,Please enter Approving Role or Approving User,S'il vous plaît entrer approuver ou approuver Rôle utilisateur
@@ -4005,7 +4005,7 @@ apps/erpnext/erpnext/templates/pages/cart.html +37,Subtotal,Sous-Total
 DocType: Salary Detail,Default Amount,Montant par Défaut
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +93,Warehouse not found in the system,Entrepôt pas trouvé dans le système
 apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +116,This Month's Summary,Résumé de ce mois-ci
-DocType: Quality Inspection Reading,Quality Inspection Reading,Libellé du contrôle de qualité
+DocType: Quality Inspection Reading,Quality Inspection Reading,Libellé du Contrôle de Qualité
 apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +24,`Freeze Stocks Older Than` should be smaller than %d days.,`Figer les stocks datant de plus` doit être inférieur que %d jours.
 DocType: Tax Rule,Purchase Tax Template,Modèle de taxes pour achats
 ,Project wise Stock Tracking,Projet sage Stock Tracking
@@ -4022,11 +4022,11 @@ apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +24,Root cannot
 apps/erpnext/erpnext/public/js/stock_analytics.js +58,Select Brand...,Sélectionnez une marque ...
 apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +149,Accumulated Depreciation as on,Amortissement Cumulé depuis
 DocType: Sales Invoice,C-Form Applicable,Formulaire-C Applicable
-apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +398,Operation Time must be greater than 0 for Operation {0},Temps de fonctionnement doit être supérieure à 0 pour l'opération {0}
+apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +398,Operation Time must be greater than 0 for Operation {0},Temps de l'Opération doit être supérieur à 0 pour l'Opération {0}
 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +100,Warehouse is mandatory,Entrepôt est obligatoire
 DocType: Supplier,Address and Contacts,Adresse et Contacts
 DocType: UOM Conversion Detail,UOM Conversion Detail,Détail de conversion Unité de mesure
-apps/erpnext/erpnext/public/js/setup_wizard.js +172,Keep it web friendly 900px (w) by 100px (h),"Merci de conserver le format de l'image web convivial , ex.. 900px par 100px"
+apps/erpnext/erpnext/public/js/setup_wizard.js +172,Keep it web friendly 900px (w) by 100px (h),Garder le compatible avec le web 900px par 100px
 DocType: Program,Program Abbreviation,Abréviation du programme
 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +386,Production Order cannot be raised against a Item Template,Ordre de production ne peut être soulevée contre un modèle d'objet
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +51,Charges are updated in Purchase Receipt against each item,Les frais sont mis à jour dans le Reçu d'Achat pour chaque article
@@ -4047,11 +4047,11 @@ apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +4
 DocType: SMS Settings,Eg. smsgateway.com/api/send_sms.cgi,Eg. smsgateway.com / api / send_sms.cgi
 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +28,Transaction currency must be same as Payment Gateway currency,Devise de la transaction doit être la même que la monnaie paiement passerelle
 DocType: Payment Entry,Receive,Recevoir
-apps/erpnext/erpnext/templates/pages/rfq.html +75,Quotations: ,Soumission:
+apps/erpnext/erpnext/templates/pages/rfq.html +75,Quotations: ,Devis :
 DocType: Maintenance Visit,Fully Completed,Entièrement Complété
 apps/erpnext/erpnext/projects/doctype/project/project_list.js +6,{0}% Complete,{0}% complète
 DocType: Employee,Educational Qualification,Qualification pour l'Éducation
-DocType: Workstation,Operating Costs,Coûts d'exploitation
+DocType: Workstation,Operating Costs,Coûts d'Exploitation
 DocType: Budget,Action if Accumulated Monthly Budget Exceeded,Action si le Budget Mensuel Cumulé est Dépassé
 DocType: Purchase Invoice,Submit on creation,Soumettre sur la création
 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +442,Currency for {0} must be {1},Devise pour {0} doit être {1}
@@ -4076,7 +4076,7 @@ DocType: Price List,Price List Name,Nom Liste des prix
 apps/erpnext/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py +31,Daily Work Summary for {0},Récapitulatif Quotidien de Travail pour {0}
 DocType: Employee Loan,Totals,Totaux
 DocType: BOM,Manufacturing,Fabrication
-,Ordered Items To Be Delivered,Articles commandés à livrer
+,Ordered Items To Be Delivered,Articles Commandés à Livrer
 DocType: Account,Income,Revenu
 DocType: Industry Type,Industry Type,Secteur d'activité
 apps/erpnext/erpnext/templates/includes/cart.js +149,Something went wrong!,Quelque chose a mal tourné !
@@ -4090,7 +4090,7 @@ apps/erpnext/erpnext/stock/stock_ledger.py +369,{0} units of {1} needed in {2} o
 DocType: Fee Structure,Student Category,étudiant Catégorie
 apps/erpnext/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py +14,Mandatory feild - Get Students From,feild obligatoire - Obtenir des étudiants de
 DocType: Announcement,Student,Élève
-apps/erpnext/erpnext/config/hr.py +229,Organization unit (department) master.,Unité d'organisation (département) maître .
+apps/erpnext/erpnext/config/hr.py +229,Organization unit (department) master.,Base d'unité d'organisation (département).
 apps/erpnext/erpnext/setup/doctype/sms_settings/sms_settings.py +26,Please enter valid mobile nos,S'il vous plaît entrez No mobiles valides
 apps/erpnext/erpnext/selling/doctype/sms_center/sms_center.py +75,Please enter message before sending,S'il vous plaît entrer le message avant d'envoyer
 DocType: Email Digest,Pending Quotations,Soumissions en attente
@@ -4166,7 +4166,7 @@ DocType: Notification Control,Sales Invoice Message,Message de la facture de ven
 apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +27,Closing Account {0} must be of type Liability / Equity,Le Compte Clôturé {0} doit être de type Passif / Capitaux Propres
 apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +320,Salary Slip of employee {0} already created for time sheet {1},Slip de salaire de l'employé {0} déjà créé pour la feuille de temps {1}
 DocType: Vehicle Log,Odometer,Odomètre
-DocType: Sales Order Item,Ordered Qty,Quantité commandée
+DocType: Sales Order Item,Ordered Qty,Qté Commandée
 apps/erpnext/erpnext/stock/doctype/item/item.py +694,Item {0} is disabled,Article {0} est désactivé
 DocType: Stock Settings,Stock Frozen Upto,Stock gelé jusqu'au
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +876,BOM does not contain any stock item,LDM ne contient aucun article en stock
@@ -4186,7 +4186,7 @@ DocType: Landed Cost Voucher,Landed Cost Voucher,Référence de Coût au Débarq
 apps/erpnext/erpnext/public/js/queries.js +39,Please set {0},S'il vous plaît définir {0}
 DocType: Purchase Invoice,Repeat on Day of Month,Répétez le Jour du Mois
 DocType: Employee,Health Details,Détails de Santé
-DocType: Offer Letter,Offer Letter Terms,Offrez Conditions Lettre
+DocType: Offer Letter,Offer Letter Terms,Termes de la Lettre de Proposition
 DocType: Payment Entry,Allocate Payment Amount,Allouer le Montant du Paiement
 DocType: Employee External Work History,Salary,Salaire
 DocType: Serial No,Delivery Document Type,Type de Document de Livraison
@@ -4225,7 +4225,7 @@ DocType: Selling Settings,Settings for Selling Module,Paramètres module vente
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +77,Customer Service,Service Client
 DocType: BOM,Thumbnail,Vignette
 DocType: Item Customer Detail,Item Customer Detail,Détail de l'article client
-apps/erpnext/erpnext/config/hr.py +50,Offer candidate a Job.,Offrir un Emploi au Candidat
+apps/erpnext/erpnext/config/hr.py +50,Offer candidate a Job.,Proposer un Emploi au candidat
 DocType: Notification Control,Prompt for Email on Submission of,Prompt for Email relative à la présentation des
 apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +88,Total allocated leaves are more than days in the period,Nombre de feuilles alloués sont plus de jours de la période
 DocType: Pricing Rule,Percentage,Pourcentage
@@ -4297,7 +4297,7 @@ DocType: Period Closing Voucher,Period Closing Voucher,Bon clôture de la pério
 apps/erpnext/erpnext/config/selling.py +67,Price List master.,Liste de prix principale.
 DocType: Task,Review Date,Date de révision
 DocType: Purchase Invoice,Advance Payments,Paiements Anticipés
-DocType: Purchase Taxes and Charges,On Net Total,Sur le total Net
+DocType: Purchase Taxes and Charges,On Net Total,Sur le Total Net
 apps/erpnext/erpnext/controllers/item_variant.py +92,Value for Attribute {0} must be within the range of {1} to {2} in the increments of {3} for Item {4},Valeur pour l'attribut {0} doit être dans la gamme de {1} à {2} dans les incréments de {3} pour le poste {4}
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +152,Target warehouse in row {0} must be same as Production Order,Entrepôt cible à la ligne {0} doit être le même que l'ordre de fabrication
 apps/erpnext/erpnext/controllers/recurring_document.py +217,'Notification Email Addresses' not specified for recurring %s,«notification adresse e-mail non spécifiés pour% s récurrents
@@ -4417,7 +4417,7 @@ apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +42,Appraisal {0} created
 DocType: Employee,Education,Education
 DocType: Selling Settings,Campaign Naming By,Campagne Nommée Par
 DocType: Employee,Current Address Is,L'Adresse Actuelle est
-apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +51,"Optional. Sets company's default currency, if not specified.",Optionnel. La devise par défaut de la société sera définie si le champ est laissé vide.
+apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +51,"Optional. Sets company's default currency, if not specified.","Optionnel. Défini la devise par défaut de l'entreprise, si non spécifié."
 apps/erpnext/erpnext/config/accounts.py +61,Accounting journal entries.,Les écritures comptables.
 DocType: Delivery Note Item,Available Qty at From Warehouse,Qté Disponible Depuis l'Entrepôt
 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +295,Please select Employee Record first.,S'il vous plaît sélectionnez dossier de l'employé en premier.
@@ -4458,7 +4458,7 @@ DocType: Asset,Is Existing Asset,Est Actif existant
 ,Monthly Salary Register,Registre mensuel des salaires
 DocType: Warranty Claim,If different than customer address,Si différente de l'adresse du client
 DocType: BOM Operation,BOM Operation,Opération LDM
-DocType: Purchase Taxes and Charges,On Previous Row Amount,Le montant rangée précédente
+DocType: Purchase Taxes and Charges,On Previous Row Amount,Le Montant de la Rangée Précédente
 DocType: Student,Home Address,Adresse du Domicile
 apps/erpnext/erpnext/accounts/doctype/asset/asset.js +260,Transfer Asset,Transfert d'actifs
 DocType: POS Profile,POS Profile,Profil PDV
@@ -4557,7 +4557,7 @@ apps/erpnext/erpnext/config/learn.py +217,Bill of Materials,Liste de Matériaux
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +91,Row {0}: Party Type and Party is required for Receivable / Payable account {1},Row {0}: Type et le Parti est nécessaire pour recevoir / payer compte {1}
 apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +94,Ref Date,Réf. date
 DocType: Employee,Reason for Leaving,Raison du départ
-DocType: BOM Operation,Operating Cost(Company Currency),Coût d'exploitation (Société Monnaie)
+DocType: BOM Operation,Operating Cost(Company Currency),Coût d'Exploitation (Devise Société)
 DocType: Employee Loan Application,Rate of Interest,Taux d'intérêt
 DocType: Expense Claim Detail,Sanctioned Amount,Montant approuvé
 DocType: GL Entry,Is Opening,Est l'ouverture
diff --git a/erpnext/translations/hr.csv b/erpnext/translations/hr.csv
index e391c36fc8..ba84c4ec67 100644
--- a/erpnext/translations/hr.csv
+++ b/erpnext/translations/hr.csv
@@ -639,7 +639,7 @@ DocType: Vehicle Service,Vehicle Service,usluga vozila
 apps/erpnext/erpnext/config/setup.py +101,Automatically triggers the feedback request based on conditions.,Automatski aktivira se zahtjev povratne informacije na temelju uvjeta.
 DocType: Employee,Reason for Resignation,Razlog za ostavku
 apps/erpnext/erpnext/config/hr.py +147,Template for performance appraisals.,Predložak za ocjene rada .
-DocType: Sales Invoice,Credit Note Issued,Kreditne Napomena Izdano
+DocType: Sales Invoice,Credit Note Issued,Odobrenje kupcu izdano
 DocType: Project Task,Weight,Težina
 DocType: Payment Reconciliation,Invoice/Journal Entry Details,Račun / Temeljnica Detalji
 apps/erpnext/erpnext/accounts/utils.py +84,{0} '{1}' not in Fiscal Year {2},{0} '{1}' nije u fiskalnoj godini {2}
@@ -2396,7 +2396,7 @@ DocType: Salary Component Account,Salary Component Account,Račun plaća Kompone
 DocType: Global Defaults,Hide Currency Symbol,Sakrij simbol valute
 apps/erpnext/erpnext/config/accounts.py +289,"e.g. Bank, Cash, Credit Card","npr. banka, gotovina, kreditne kartice"
 DocType: Lead Source,Source Name,source Name
-DocType: Journal Entry,Credit Note,Kreditne Napomena
+DocType: Journal Entry,Credit Note,Odobrenje kupcu
 DocType: Warranty Claim,Service Address,Usluga Adresa
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +47,Furnitures and Fixtures,Namještaja i rasvjete
 DocType: Item,Manufacture,Proizvodnja
@@ -3559,7 +3559,7 @@ DocType: Program Enrollment,Enrollment Date,Datum registracije
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +62,Probation,Probni rad
 apps/erpnext/erpnext/config/hr.py +115,Salary Components,Plaća Komponente
 DocType: Program Enrollment Tool,New Academic Year,Nova akademska godina
-apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +769,Return / Credit Note,Povratak / kreditne Napomena
+apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +769,Return / Credit Note,Povrat / odobrenje kupcu
 DocType: Stock Settings,Auto insert Price List rate if missing,"Ako ne postoji, automatski ubaciti cjenik"
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +25,Total Paid Amount,Ukupno uplaćeni iznos
 DocType: Production Order Item,Transferred Qty,prebačen Kol
diff --git a/erpnext/translations/it.csv b/erpnext/translations/it.csv
index 5b8cb2ac1e..0406c92ffa 100644
--- a/erpnext/translations/it.csv
+++ b/erpnext/translations/it.csv
@@ -163,7 +163,7 @@ apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_templat
 DocType: Employee Loan,Repay Over Number of Periods,Rimborsare corso Numero di periodi
 DocType: Stock Entry,Additional Costs,Costi aggiuntivi
 apps/erpnext/erpnext/accounts/doctype/account/account.py +142,Account with existing transaction can not be converted to group.,Account con transazioni registrate non può essere convertito a gruppo.
-DocType: Lead,Product Enquiry,Prodotto Inchiesta
+DocType: Lead,Product Enquiry,Richiesta di informazioni sui prodotti
 DocType: Academic Term,Schools,scuole
 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +35,No leave record found for employee {0} for {1},Nessun record congedo trovato per dipendente {0} per {1}
 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +23,Please enter company first,Inserisci prima azienda
@@ -242,7 +242,7 @@ DocType: Guardian,Students,Alunni
 apps/erpnext/erpnext/config/selling.py +91,Rules for applying pricing and discount.,Le modalità di applicazione di prezzi e sconti .
 apps/erpnext/erpnext/stock/doctype/price_list/price_list.py +14,Price List must be applicable for Buying or Selling,Prezzo di listino deve essere applicabile per l'acquisto o la vendita di
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +79,Installation date cannot be before delivery date for Item {0},Data di installazione non può essere prima della data di consegna per la voce {0}
-DocType: Pricing Rule,Discount on Price List Rate (%),Sconto Listino Tasso (%)
+DocType: Pricing Rule,Discount on Price List Rate (%),Sconto su Prezzo di Listino (%)
 DocType: Offer Letter,Select Terms and Conditions,Selezionare i Termini e Condizioni
 apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +51,Out Value,Valore out
 DocType: Production Planning Tool,Sales Orders,Ordini di vendita
@@ -1063,7 +1063,7 @@ DocType: Company,Default Terms,Predefinito Termini
 DocType: Packing Slip Item,Packing Slip Item,Distinta di imballaggio articolo
 DocType: Purchase Invoice,Cash/Bank Account,Conto Cassa/Banca
 apps/erpnext/erpnext/public/js/queries.js +88,Please specify a {0},Si prega di specificare un {0}
-apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +71,Removed items with no change in quantity or value.,Elementi rimossi senza variazione di quantità o valore.
+apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +71,Removed items with no change in quantity or value.,Eliminati elementi senza variazione di quantità o valore.
 DocType: Delivery Note,Delivery To,Consegna a
 apps/erpnext/erpnext/stock/doctype/item/item.py +649,Attribute table is mandatory,Tavolo attributo è obbligatorio
 DocType: Production Planning Tool,Get Sales Orders,Ottieni Ordini di Vendita
@@ -2553,7 +2553,7 @@ DocType: Currency Exchange,Specify Exchange Rate to convert one currency into an
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +149,Quotation {0} is cancelled,Preventivo {0} è annullato
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +26,Total Outstanding Amount,Importo totale Eccezionale
 DocType: Sales Partner,Targets,Obiettivi
-DocType: Price List,Price List Master,Listino Maestro
+DocType: Price List,Price List Master,Listino Principale
 DocType: Sales Person,All Sales Transactions can be tagged against multiple **Sales Persons** so that you can set and monitor targets.,Tutte le transazioni di vendita possono essere etichettati contro più persone ** ** di vendita in modo da poter impostare e monitorare gli obiettivi.
 ,S.O. No.,S.O. No.
 apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +163,Please create Customer from Lead {0},Si prega di creare il Cliente dal Lead {0}
@@ -3369,7 +3369,7 @@ apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +194,
 DocType: BOM,Website Description,Descrizione del sito
 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +42,Net Change in Equity,Variazione netta Patrimonio
 apps/erpnext/erpnext/accounts/doctype/asset/asset.py +152,Please cancel Purchase Invoice {0} first,Si prega di annullare Acquisto Fattura {0} prima
-apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.py +42,"Email Address must be unique, already exists for {0}","Indirizzo e-mail deve essere unico, esiste già per {0}"
+apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.py +42,"Email Address must be unique, already exists for {0}","Indirizzo e-mail deve essere univoco, esiste già per {0}"
 DocType: Serial No,AMC Expiry Date,AMC Data Scadenza
 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +795,Receipt,Ricevuta
 ,Sales Register,Registro Vendite
@@ -4032,7 +4032,7 @@ DocType: Appraisal,Start Date,Data di inizio
 apps/erpnext/erpnext/config/hr.py +75,Allocate leaves for a period.,Allocare le foglie per un periodo .
 apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +42,Cheques and Deposits incorrectly cleared,Assegni e depositi cancellati in modo non corretto
 apps/erpnext/erpnext/accounts/doctype/account/account.py +51,Account {0}: You can not assign itself as parent account,Account {0}: non è possibile assegnare se stesso come conto principale
-DocType: Purchase Invoice Item,Price List Rate,Prezzo di listino Vota
+DocType: Purchase Invoice Item,Price List Rate,Prezzo di Listino
 apps/erpnext/erpnext/utilities/activation.py +73,Create customer quotes,Creare le citazioni dei clienti
 DocType: Item,"Show ""In Stock"" or ""Not in Stock"" based on stock available in this warehouse.",Mostra "Disponibile" o "Non disponibile" sulla base di scorte disponibili in questo magazzino.
 apps/erpnext/erpnext/config/manufacturing.py +38,Bill of Materials (BOM),Distinte materiali (BOM)
@@ -4164,7 +4164,7 @@ apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_vouc
 apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +320,Salary Slip of employee {0} already created for time sheet {1},Salario Slip of dipendente {0} già creato per foglio di tempo {1}
 DocType: Vehicle Log,Odometer,Odometro
 DocType: Sales Order Item,Ordered Qty,Quantità ordinato
-apps/erpnext/erpnext/stock/doctype/item/item.py +694,Item {0} is disabled,Voce {0} è disattivato
+apps/erpnext/erpnext/stock/doctype/item/item.py +694,Item {0} is disabled,Articolo {0} è disattivato
 DocType: Stock Settings,Stock Frozen Upto,Giacenza Bloccate Fino
 apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +876,BOM does not contain any stock item,BOM non contiene alcun elemento magazzino
 apps/erpnext/erpnext/controllers/recurring_document.py +172,Period From and Period To dates mandatory for recurring {0},Periodo Dal periodo e per date obbligatorie per ricorrenti {0}
diff --git a/erpnext/translations/kn.csv b/erpnext/translations/kn.csv
index 6fc1c3ec10..3b707f3767 100644
--- a/erpnext/translations/kn.csv
+++ b/erpnext/translations/kn.csv
@@ -2182,7 +2182,7 @@ apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +52,Invali
 DocType: Purchase Invoice,PINV-RET-,PINV-RET-
 DocType: Sales Invoice Advance,Advance Amount,ಅಡ್ವಾನ್ಸ್ ಪ್ರಮಾಣ
 DocType: Manufacturing Settings,Capacity Planning,ಸಾಮರ್ಥ್ಯವನ್ನು ಯೋಜನೆ
-apps/erpnext/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py +43,'From Date' is required,' ದಿನಾಂಕದಿಂದ ' ಅಗತ್ಯವಿದೆ
+apps/erpnext/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py +43,'From Date' is required,ಇಂದ ದಿನಾಂಕ ಬೇಕು
 DocType: Journal Entry,Reference Number,ಉಲ್ಲೇಖ ಸಂಖ್ಯೆ
 DocType: Employee,Employment Details,ಉದ್ಯೋಗದ ವಿವರಗಳು
 DocType: Employee,New Workplace,ಹೊಸ ಕೆಲಸದ
@@ -2885,7 +2885,7 @@ apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
 apps/erpnext/erpnext/hr/doctype/employee_loan/employee_loan.py +107,Disbursed Amount cannot be greater than Loan Amount {0},ಪಾವತಿಸಲಾಗುತ್ತದೆ ಪ್ರಮಾಣ ಸಾಲದ ಪ್ರಮಾಣ ಹೆಚ್ಚು ಹೆಚ್ಚಿರಬಾರದು {0}
 apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +86,Purchase Order number required for Item {0},ಪರ್ಚೇಸ್ ಆರ್ಡರ್ ಸಂಖ್ಯೆ ಐಟಂ ಅಗತ್ಯವಿದೆ {0}
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +871,Production Order not created,ಪ್ರೊಡಕ್ಷನ್ ಆರ್ಡರ್ ರಚಿಸಿಲ್ಲ
-apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +18,'From Date' must be after 'To Date',' ದಿನಾಂಕದಿಂದ ' ' ದಿನಾಂಕ ' ನಂತರ ಇರಬೇಕು
+apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +18,'From Date' must be after 'To Date',"ಇಂದ ದಿನಾಂಕ, ಗೆ ದಿನಾಂಕದ ಆಮೇಲೆ ಬರಬೇಕು"
 apps/erpnext/erpnext/schools/doctype/student_applicant/student_applicant.py +29,Cannot change status as student {0} is linked with student application {1},ಅಲ್ಲ ವಿದ್ಯಾರ್ಥಿಯಾಗಿ ಸ್ಥಿತಿಯನ್ನು ಬದಲಾಯಿಸಬಹುದು {0} ವಿದ್ಯಾರ್ಥಿ ಅಪ್ಲಿಕೇಶನ್ ಸಂಬಂಧ ಇದೆ {1}
 DocType: Asset,Fully Depreciated,ಸಂಪೂರ್ಣವಾಗಿ Depreciated
 ,Stock Projected Qty,ಸ್ಟಾಕ್ ಪ್ರಮಾಣ ಯೋಜಿತ
diff --git a/erpnext/translations/pt-BR.csv b/erpnext/translations/pt-BR.csv
index 063c2ff475..4173c3eaa5 100644
--- a/erpnext/translations/pt-BR.csv
+++ b/erpnext/translations/pt-BR.csv
@@ -337,7 +337,7 @@ DocType: Item,Show in Website (Variant),Mostar no Site (variante)
 DocType: Employee,Health Concerns,Preocupações com a Saúde
 DocType: Process Payroll,Select Payroll Period,Selecione Período de Pagamento
 DocType: Process Payroll,Select Payroll Period,Selecione Período de Pagamento
-DocType: Packing Slip,From Package No.,De No. Package
+DocType: Packing Slip,From Package No.,Do nº do pacote
 DocType: Item Attribute,To Range,Para a Faixa
 apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +82,Total leaves allocated is mandatory,Total de folhas alocados é obrigatória
 DocType: Job Opening,Description of a Job Opening,Descrição de uma vaga de emprego
@@ -833,6 +833,7 @@ DocType: Support Settings,Close Issue After Days,Fechar Incidente Após Dias
 DocType: Leave Control Panel,Leave blank if considered for all branches,Deixe em branco se considerado para todos os ramos
 apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +21,C-form is not applicable for Invoice: {0},C-forma não é aplicável para a fatura: {0}
 DocType: Payment Reconciliation,Unreconciled Payment Details,Detalhes do Pagamento não Conciliado
+DocType: Global Defaults,Disable Rounded Total,Desativar total arredondado
 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +436,'Entries' cannot be empty,'Entradas' não pode estar vazio
 apps/erpnext/erpnext/config/hr.py +296,Setting up Employees,Configurando Colaboradores
 DocType: Sales Order,SO-,OV-
@@ -885,7 +886,7 @@ DocType: Employee,Place of Issue,Local de Envio
 DocType: Email Digest,Add Quote,Adicionar Citar
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +843,UOM coversion factor required for UOM: {0} in Item: {1},Fator de Conversão de Unidade de Medida é necessário para Unidade de Medida: {0} no Item: {1}
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +77,Row {0}: Qty is mandatory,Linha {0}: Qtde é obrigatória
-apps/erpnext/erpnext/accounts/page/pos/pos.js +714,Sync Master Data,Sincronizar com o servidor
+apps/erpnext/erpnext/accounts/page/pos/pos.js +714,Sync Master Data,Sincronizar com o Servidor
 apps/erpnext/erpnext/public/js/setup_wizard.js +288,Your Products or Services,Seus Produtos ou Serviços
 DocType: Mode of Payment,Mode of Payment,Forma de Pagamento
 apps/erpnext/erpnext/stock/doctype/item/item.py +179,Website Image should be a public file or website URL,Site de imagem deve ser um arquivo público ou URL do site
@@ -988,6 +989,7 @@ DocType: Warranty Claim,Warranty / AMC Status,Garantia / Status do CAM
 DocType: GL Entry,GL Entry,Lançamento GL
 DocType: HR Settings,Employee Settings,Configurações de Colaboradores
 ,Batch-Wise Balance History,Balanço por Histórico de Lotes
+DocType: Package Code,Package Code,Código do pacote
 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +103,Negative Quantity is not allowed,Negativo Quantidade não é permitido
 DocType: Purchase Invoice Item,"Tax detail table fetched from item master as a string and stored in this field.
 Used for Taxes and Charges",Detalhe da tabela de imposto obtido a partir do cadastro do item como texto e armazenado neste campo. Usado para Tributos e Encargos
@@ -1225,7 +1227,7 @@ apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +91,Associate,Associ
 DocType: Asset Movement,Asset Movement,Movimentação de Ativos
 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +44,Item {0} is not a serialized Item,Item {0} não é um item serializado
 DocType: SMS Center,Create Receiver List,Criar Lista de Receptor
-DocType: Packing Slip,To Package No.,Para Pacote Nº.
+DocType: Packing Slip,To Package No.,Até nº do pacote
 DocType: Production Planning Tool,Material Requests,Requisições de Material
 DocType: Warranty Claim,Issue Date,Data do Incidente
 DocType: Sales Invoice Timesheet,Timesheet Detail,Detalhes do Registro de Tempo
@@ -1746,6 +1748,7 @@ apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +79,Row {0}: UOM C
 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +17,Ref,Referência
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +36,Voucher #,Comprovante #
 DocType: Notification Control,Purchase Order Message,Mensagem do Pedido de Compra
+DocType: Selling Settings,Hide Customer's Tax Id from Sales Transactions,Esconder CPF/CNPJ em transações de vendas
 DocType: Upload Attendance,Upload HTML,Upload HTML
 DocType: Employee,Relieving Date,Data da Liberação
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +12,"Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.","Regra de preços é feita para substituir Lista de Preços / define percentual de desconto, com base em alguns critérios."
@@ -2049,6 +2052,7 @@ DocType: Leave Block List,Leave Block List Allowed,Deixe Lista de Bloqueios admi
 apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py +49,Expense Claim for Vehicle Log {0},Reembolso de Despesa para o Log do Veículo {0}
 DocType: Sales Partner,Retailer,Varejista
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +107,Credit To account must be a Balance Sheet account,Para crédito de conta deve ser uma conta de Balanço
+DocType: Global Defaults,Disable In Words,Desativar por extenso
 apps/erpnext/erpnext/stock/doctype/item/item.py +44,Item Code is mandatory because Item is not automatically numbered,Código do item é obrigatório porque Item não é numerada automaticamente
 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +101,Quotation {0} not of type {1},O Orçamento {0} não é do tipo {1}
 DocType: Maintenance Schedule Item,Maintenance Schedule Item,Ítem da Programação da Manutenção
diff --git a/erpnext/translations/pt.csv b/erpnext/translations/pt.csv
index c103a66b68..de1bccf3be 100644
--- a/erpnext/translations/pt.csv
+++ b/erpnext/translations/pt.csv
@@ -1035,7 +1035,7 @@ apps/erpnext/erpnext/public/js/setup_wizard.js +168,Upload your letter head and
 DocType: Timesheet Detail,Bill,Fatura
 apps/erpnext/erpnext/accounts/doctype/asset/asset.py +84,Next Depreciation Date is entered as past date,A Próxima Data de Depreciação é inserida como data passada
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +170,White,Branco
-DocType: SMS Center,All Lead (Open),Todos Pot. Clientes (Abertos)
+DocType: SMS Center,All Lead (Open),Todos Potenciais Clientes (Abertos)
 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +222,Row {0}: Qty not available for {4} in warehouse {1} at posting time of the entry ({2} {3}),Linha {0}: A qtd não está disponível para {4} no armazém {1} no momento da postagem do registo ({2} {3})
 DocType: Purchase Invoice,Get Advances Paid,Obter Adiantamentos Pagos
 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +763,Make ,Efetuar
@@ -1187,7 +1187,7 @@ apps/erpnext/erpnext/accounts/page/pos/pos.js +2304,"Payment Mode is not configu
 DocType: Opportunity,Your sales person will get a reminder on this date to contact the customer,O seu vendedor receberá um lembrete nesta data para contatar o cliente
 apps/erpnext/erpnext/buying/doctype/purchase_common/purchase_common.py +75,Same item cannot be entered multiple times.,Mesmo item não pode ser inserido várias vezes.
 apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +28,"Further accounts can be made under Groups, but entries can be made against non-Groups","Podem ser realizadas outras contas nos Grupos, e os registos podem ser efetuados em Fora do Grupo"
-DocType: Lead,Lead,Pot Clie
+DocType: Lead,Lead,Potenciais Clientes
 DocType: Email Digest,Payables,A Pagar
 DocType: Course,Course Intro,Introdução do Curso
 apps/erpnext/erpnext/stock/dashboard/item_dashboard.js +157,Stock Entry {0} created,Registo de Stock {0} criado
@@ -1549,7 +1549,7 @@ apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +80,Row # {0}: Ret
 DocType: Purchase Receipt,PREC-,RECC-
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +16,Bank Accounts,Contas Bancárias
 ,Bank Reconciliation Statement,Declaração de Conciliação Bancária
-,Lead Name,Nome de Pot Client
+,Lead Name,Nome de Potencial Cliente
 ,POS,POS
 DocType: C-Form,III,III
 apps/erpnext/erpnext/config/stock.py +305,Opening Stock Balance,Saldo de Stock Inicial
@@ -2433,7 +2433,7 @@ DocType: Notification Control,Sales Order Message,Mensagem de Pedido de Vendas
 apps/erpnext/erpnext/config/setup.py +15,"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Definir Valores Padrão, como a Empresa, Moeda, Ano Fiscal Atual, etc."
 DocType: Payment Entry,Payment Type,Tipo de Pagamento
 DocType: Process Payroll,Select Employees,Selecionar Funcionários
-DocType: Opportunity,Potential Sales Deal,Negócio de Vendas Potencial
+DocType: Opportunity,Potential Sales Deal,Potenciais Negócios de Vendas
 DocType: Payment Entry,Cheque/Reference Date,Data do Cheque/Referência
 DocType: Purchase Invoice,Total Taxes and Charges,Impostos e Encargos Totais
 DocType: Employee,Emergency Contact,Contacto de Emergência
@@ -3341,7 +3341,7 @@ apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
 					using Stock Reconciliation","O Item em Série {0} não pode ser atualizado utilizando \
 a Reconciliação de Stock"
 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +29,New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt,O Novo Nr. de Série não pode ter um Armazém. O Armazém deve ser definido no Registo de Compra ou no Recibo de Compra
-DocType: Lead,Lead Type,Tipo Pot. Cliente
+DocType: Lead,Lead Type,Tipo Potencial Cliente
 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +133,You are not authorized to approve leaves on Block Dates,Não está autorizado a aprovar licenças em Datas Bloqueadas
 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +364,All these items have already been invoiced,Todos estes itens já foram faturados
 apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py +37,Can be approved by {0},Pode ser aprovado por {0}
@@ -3457,7 +3457,7 @@ DocType: GL Entry,Remarks,Observações
 DocType: Payment Entry,Account Paid From,Conta Paga De
 DocType: Purchase Order Item Supplied,Raw Material Item Code,Código de Item de Matéria-prima
 DocType: Journal Entry,Write Off Based On,Liquidação Baseada Em
-apps/erpnext/erpnext/utilities/activation.py +66,Make Lead,Faça chumbo
+apps/erpnext/erpnext/utilities/activation.py +66,Make Lead,Crie um Potencial Cliente
 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +110,Print and Stationery,Impressão e artigos de papelaria
 DocType: Stock Settings,Show Barcode Field,Mostrar Campo do Código de Barras
 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +762,Send Supplier Emails,Enviar Emails de Fornecedores
@@ -3648,7 +3648,7 @@ apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +232,Atte
 DocType: Production Order Operation,"in Minutes
 Updated via 'Time Log'","em Minutos
 Atualizado através do ""Registo de Tempo"""
-DocType: Customer,From Lead,Do Pot. Cliente
+DocType: Customer,From Lead,Do Potencial Cliente
 apps/erpnext/erpnext/config/manufacturing.py +13,Orders released for production.,Pedidos lançados para a produção.
 apps/erpnext/erpnext/public/js/account_tree_grid.js +67,Select Fiscal Year...,Selecione o Ano Fiscal...
 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +512,POS Profile required to make POS Entry,É necessário colocar o Perfil POS para efetuar um Registo POS
@@ -3966,7 +3966,7 @@ DocType: Purchase Invoice,Recurring Id,ID Recorrente
 DocType: Customer,Sales Team Details,Dados de Equipa de Vendas
 apps/erpnext/erpnext/accounts/page/pos/pos.js +1252,Delete permanently?,Eliminar permanentemente?
 DocType: Expense Claim,Total Claimed Amount,Montante Reclamado Total
-apps/erpnext/erpnext/config/crm.py +17,Potential opportunities for selling.,Oportunidades potenciais de venda.
+apps/erpnext/erpnext/config/crm.py +17,Potential opportunities for selling.,Potenciais oportunidades de venda.
 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +211,Invalid {0},Inválido {0}
 apps/erpnext/erpnext/setup/setup_wizard/install_fixtures.py +52,Sick Leave,Licença de Doença
 DocType: Email Digest,Email Digest,Email de Resumo
@@ -3997,7 +3997,7 @@ DocType: Maintenance Visit Purpose,Maintenance Visit Purpose,Objetivo da Visita
 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.js +16,Period,Período
 apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.js +18,General Ledger,Razão Geral
 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +33,Employee {0} on Leave on {1},Employee {0} em licença {1}
-apps/erpnext/erpnext/selling/doctype/campaign/campaign.js +10,View Leads,Ver Pot. Clientes
+apps/erpnext/erpnext/selling/doctype/campaign/campaign.js +10,View Leads,Ver Potenciais Clientes
 DocType: Program Enrollment Tool,New Program,Novo Programa
 DocType: Item Attribute Value,Attribute Value,Valor do Atributo
 ,Itemwise Recommended Reorder Level,Nível de Reposição Recomendada por Item
@@ -4199,7 +4199,7 @@ DocType: Process Payroll,Submit all salary slips for the above selected criteria
 apps/erpnext/erpnext/hub_node/doctype/hub_settings/hub_settings.py +93,{0} Items synced,{0} Itens sincronizados
 DocType: Sales Order,Partly Delivered,Parcialmente Entregue
 DocType: Email Digest,Receivables,A Receber
-DocType: Lead Source,Lead Source,Fonte de Pot. Cliente
+DocType: Lead Source,Lead Source,Fonte de Potencial Cliente
 DocType: Customer,Additional information regarding the customer.,Informações adicionais acerca do cliente.
 DocType: Quality Inspection Reading,Reading 5,Leitura 5
 DocType: Maintenance Visit,Maintenance Date,Data de Manutenção

From d1fda1ff2b6ece302abeebadbe6a92f5dbd2d66d Mon Sep 17 00:00:00 2001
From: Nabin Hait 
Date: Tue, 11 Apr 2017 19:44:12 +0600
Subject: [PATCH 058/287] bumped to version 8.0.9

---
 erpnext/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 9d3e162d11..93478c24c1 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 import frappe
 
-__version__ = '8.0.8'
+__version__ = '8.0.9'
 
 def get_default_company(user=None):
 	'''Get default company for user'''

From 141c244ece2175da94bc31b2092fce108434f51a Mon Sep 17 00:00:00 2001
From: Makarand Bauskar 
Date: Wed, 12 Apr 2017 13:02:28 +0530
Subject: [PATCH 059/287] [minor] added order by args to get_*_list methods
 (#8413)

---
 erpnext/controllers/website_list_for_contact.py | 2 +-
 erpnext/projects/doctype/project/project.py     | 2 +-
 erpnext/schools/doctype/fees/fees.py            | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/erpnext/controllers/website_list_for_contact.py b/erpnext/controllers/website_list_for_contact.py
index 6ca20c3506..b078036cb8 100644
--- a/erpnext/controllers/website_list_for_contact.py
+++ b/erpnext/controllers/website_list_for_contact.py
@@ -18,7 +18,7 @@ def get_list_context(context=None):
 		"get_list": get_transaction_list
 	}
 
-def get_transaction_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20):
+def get_transaction_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by="modified"):
 	from frappe.www.list import get_list
 	user = frappe.session.user
 	key = None
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 289b7dd185..37734f1876 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -214,7 +214,7 @@ def get_timeline_data(doctype, name):
 			and docstatus < 2
 			group by date(from_time)''', name))
 
-def get_project_list(doctype, txt, filters, limit_start, limit_page_length=20):
+def get_project_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="modified"):
 	return frappe.db.sql('''select distinct project.*
 		from tabProject project, `tabProject User` project_user
 		where
diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py
index d2540f79bc..7e660af520 100644
--- a/erpnext/schools/doctype/fees/fees.py
+++ b/erpnext/schools/doctype/fees/fees.py
@@ -18,7 +18,7 @@ class Fees(Document):
 			self.total_amount += d.amount
 		self.outstanding_amount = self.total_amount
 
-def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20):
+def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="modified"):
 	user = frappe.session.user
 	student = frappe.db.sql("select name from `tabStudent` where student_email_id= %s", user)
 	if student:

From 2192c244c0cb98e60fd0aacef8b0fdfb172e3d8b Mon Sep 17 00:00:00 2001
From: Rohit Waghchaure 
Date: Wed, 12 Apr 2017 13:19:05 +0530
Subject: [PATCH 060/287] [fix] POS, Due Date cannot be before Posting Date

---
 erpnext/accounts/doctype/sales_invoice/pos.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index c659212d20..419c5579e0 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -296,9 +296,9 @@ def make_invoice(doc_list={}, email_queue_list={}, customers_list={}):
 			if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
 				validate_records(doc)
 				si_doc = frappe.new_doc('Sales Invoice')
-				si_doc.due_date = doc.get('posting_date')
 				si_doc.offline_pos_name = name
 				si_doc.update(doc)
+				si_doc.due_date = doc.get('posting_date')
 				submit_invoice(si_doc, name, doc)
 				name_list.append(name)
 			else:
@@ -404,4 +404,5 @@ def save_invoice(e, si_doc, name):
 	if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
 		si_doc.docstatus = 0
 		si_doc.flags.ignore_mandatory = True
+		si_doc.due_date = si_doc.posting_date
 		si_doc.insert()

From 66272a168de90760aab6d13465db354e6f1241b4 Mon Sep 17 00:00:00 2001
From: Rushabh Mehta 
Date: Wed, 12 Apr 2017 14:31:57 +0530
Subject: [PATCH 061/287] [minor] README.md + encode query parameter in search

---
 README.md                                          |  8 ++++++++
 .../includes/projects/project_search_box.html      | 14 +++++++-------
 erpnext/templates/pages/product_search.html        |  2 +-
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index 4f59339b2f..2a813cf68c 100644
--- a/README.md
+++ b/README.md
@@ -38,6 +38,14 @@ The ERPNext code is licensed as GNU General Public License (v3) and the Document
 
 ---
 
+## Contributing
+
+1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Pull-Request-Guidelines)
+1. [Translations](https://translate.erpnext.com)
+1. [Chart of Accounts](https://charts.erpnext.com)
+
+---
+
 ## Logo and Trademark
 
 The brand name ERPNext and the logo are trademarks of Frappe Technologies Pvt. Ltd.
diff --git a/erpnext/templates/includes/projects/project_search_box.html b/erpnext/templates/includes/projects/project_search_box.html
index ab02f0c143..96eb10cf93 100644
--- a/erpnext/templates/includes/projects/project_search_box.html
+++ b/erpnext/templates/includes/projects/project_search_box.html
@@ -1,19 +1,19 @@
 
 
 
 

From 16d92e72709571aa3b4618e5fdec48c5181b7113 Mon Sep 17 00:00:00 2001
From: Nabin Hait 
Date: Thu, 13 Apr 2017 18:44:33 +0530
Subject: [PATCH 074/287] Update update_supplier_address_in_stock_entry.py

---
 erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py b/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
index e4032a2d1a..a2173048fd 100644
--- a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
+++ b/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
@@ -19,4 +19,4 @@ def execute():
 		se.address_display = stock_entry.get("supplier_address")
 		se.supplier_address = frappe.db.get_value("Purchase Order", stock_entry.get("purchase_order"),"supplier_address") or None
 
-		se.save(ignore_permissions=True)
\ No newline at end of file
+		se.db_update()

From ed8ad9cfee553b23621b20172296c7e394819407 Mon Sep 17 00:00:00 2001
From: mbauskar 
Date: Thu, 13 Apr 2017 18:45:09 +0530
Subject: [PATCH 075/287] [minor] fides for add to card button issue

---
 erpnext/templates/includes/product_page.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index b37f7aadfc..4d1446b374 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -12,7 +12,7 @@ frappe.ready(function() {
 			item_code: get_item_code()
 		},
 		callback: function(r) {
-			$(".item-cart").toggleClass("hide", (!!!r.message.price || !!!r.message.stock));
+			$(".item-cart").toggleClass("hide", (!!!r.message.price || !!!r.message.in_stock));
 			if(r.message && r.message.price) {
 				$(".item-price")
 					.html(r.message.price.formatted_price + " per " + r.message.uom);

From 2f3585f949172049e474d2a387a811d784074ecd Mon Sep 17 00:00:00 2001
From: Nabin Hait 
Date: Thu, 13 Apr 2017 18:47:25 +0530
Subject: [PATCH 076/287] Update salary_slip.js

---
 erpnext/hr/doctype/salary_slip/salary_slip.js | 34 +++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index b6be5d2909..09c5337b50 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -129,15 +129,15 @@ var calculate_earning_total = function(doc, dt, dn, reset_amount) {
 	var tbl = doc.earnings || [];
 	var total_earn = 0;
 	for(var i = 0; i < tbl.length; i++){
-			if(cint(tbl[i].depends_on_lwp) == 1) {
-				tbl[i].amount =  Math.round(tbl[i].default_amount)*(flt(doc.payment_days) /
-					cint(doc.total_working_days)*100)/100;
-				refresh_field('amount', tbl[i].name, 'earnings');
-			} else if(reset_amount) {
-				tbl[i].amount = tbl[i].default_amount;
-				refresh_field('amount', tbl[i].name, 'earnings');
-			}
-			total_earn += flt(tbl[i].amount);
+		if(cint(tbl[i].depends_on_lwp) == 1) {
+			tbl[i].amount =  Math.round(tbl[i].default_amount)*(flt(doc.payment_days) /
+				cint(doc.total_working_days)*100)/100;
+			refresh_field('amount', tbl[i].name, 'earnings');
+		} else if(reset_amount) {
+			tbl[i].amount = tbl[i].default_amount;
+			refresh_field('amount', tbl[i].name, 'earnings');
+		}
+		total_earn += flt(tbl[i].amount);
 	}
 	doc.gross_pay = total_earn;
 	refresh_many(['amount','gross_pay']);
@@ -149,14 +149,14 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) {
 	var tbl = doc.deductions || [];
 	var total_ded = 0;
 	for(var i = 0; i < tbl.length; i++){
-			if(cint(tbl[i].depends_on_lwp) == 1) {
-				tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100;
-				refresh_field('amount', tbl[i].name, 'deductions');
-			} else if(reset_amount) {
-				tbl[i].amount = tbl[i].default_amount;
-				refresh_field('amount', tbl[i].name, 'deductions');
-			}
-			total_ded += flt(tbl[i].amount);
+		if(cint(tbl[i].depends_on_lwp) == 1) {
+			tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100;
+			refresh_field('amount', tbl[i].name, 'deductions');
+		} else if(reset_amount) {
+			tbl[i].amount = tbl[i].default_amount;
+			refresh_field('amount', tbl[i].name, 'deductions');
+		}
+		total_ded += flt(tbl[i].amount);
 	}
 	doc.total_deduction = total_ded;
 	refresh_field('total_deduction');

From d20ec25c92788764275faf9bdf90fecdefd234b4 Mon Sep 17 00:00:00 2001
From: CH 
Date: Thu, 6 Apr 2017 19:14:58 +0200
Subject: [PATCH 077/287] Removal of double brackets to setup the chart of
 accounts in the setup wizard

---
 erpnext/setup/setup_wizard/setup_wizard.py | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py
index 922479c8ee..f68ac343ec 100644
--- a/erpnext/setup/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/setup_wizard/setup_wizard.py
@@ -89,7 +89,7 @@ def create_fiscal_year_and_company(args):
 			'default_currency':args.get('currency'),
 			'country': args.get('country'),
 			'create_chart_of_accounts_based_on': 'Standard Template',
-			'chart_of_accounts': args.get(('chart_of_accounts')),
+			'chart_of_accounts': args.get('chart_of_accounts'),
 			'domain': args.get('domain')
 		}).insert()
 
@@ -607,5 +607,3 @@ def create_room(args):
 				room.save()
 			except frappe.DuplicateEntryError:
 				pass
-
-

From 8e92250798cdf34eb6f42602649dacec95ffa4d5 Mon Sep 17 00:00:00 2001
From: CH 
Date: Thu, 6 Apr 2017 20:03:36 +0200
Subject: [PATCH 078/287] Correction of issue #8354

---
 erpnext/stock/dashboard/item_dashboard_list.html  | 4 ++--
 erpnext/stock/page/stock_balance/stock_balance.js | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/erpnext/stock/dashboard/item_dashboard_list.html b/erpnext/stock/dashboard/item_dashboard_list.html
index c1792a9b96..63f248043c 100644
--- a/erpnext/stock/dashboard/item_dashboard_list.html
+++ b/erpnext/stock/dashboard/item_dashboard_list.html
@@ -22,7 +22,7 @@
 							
 						
 					
-					
+					
 						
 							{{ d.actual_qty }} {{ (d.pending_qty > 0) ? ("(" + d.pending_qty+ ")") : "" }}
 						
@@ -54,4 +54,4 @@
 			
 		
 	
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js
index 3cf93fa4ea..16a85fa922 100644
--- a/erpnext/stock/page/stock_balance/stock_balance.js
+++ b/erpnext/stock/page/stock_balance/stock_balance.js
@@ -48,7 +48,7 @@ frappe.pages['stock-balance'].on_page_load = function(wrapper) {
 				{fieldname: 'projected_qty', label: __('Projected qty')},
 				{fieldname: 'reserved_qty', label: __('Reserved for sale')},
 				{fieldname: 'reserved_qty_for_production', label: __('Reserved for manufacturing')},
-				{fieldname: 'actual_qty', label: __('Acutal qty in stock')},
+				{fieldname: 'actual_qty', label: __('Actual qty in stock')},
 			]
 		},
 		change: function(sort_by, sort_order) {
@@ -93,4 +93,4 @@ frappe.pages['stock-balance'].on_page_load = function(wrapper) {
 	});
 
 
-}
\ No newline at end of file
+}

From b81244342f96b590a70a6ec7f5e3cae699a5fff3 Mon Sep 17 00:00:00 2001
From: joezsweet 
Date: Thu, 30 Mar 2017 20:26:48 +0200
Subject: [PATCH 079/287] Create en-GB.csv

- added for compatibility with frappe languages
---
 erpnext/translations/en-GB.csv | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 erpnext/translations/en-GB.csv

diff --git a/erpnext/translations/en-GB.csv b/erpnext/translations/en-GB.csv
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/erpnext/translations/en-GB.csv
@@ -0,0 +1 @@
+

From 1e05077b1f832672e5e8d41652bd1667adf686d8 Mon Sep 17 00:00:00 2001
From: mbauskar 
Date: Fri, 14 Apr 2017 09:10:41 +0530
Subject: [PATCH 080/287] [minor] sales register report fixes

---
 erpnext/accounts/report/sales_register/sales_register.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/erpnext/accounts/report/sales_register/sales_register.py b/erpnext/accounts/report/sales_register/sales_register.py
index 4dc8f8c1c6..1ef17ac9a5 100644
--- a/erpnext/accounts/report/sales_register/sales_register.py
+++ b/erpnext/accounts/report/sales_register/sales_register.py
@@ -7,7 +7,7 @@ from frappe.utils import flt
 from frappe import msgprint, _
 
 def execute(filters=None):
-	if not filters: filters = {}
+	if not filters: filters = frappe._dict({})
 
 	invoice_list = get_invoices(filters)
 	columns, income_accounts, tax_accounts = get_columns(invoice_list)

From 1c685094260d1028e99e8e276c60dce5c12e0110 Mon Sep 17 00:00:00 2001
From: Rohit Waghchaure 
Date: Thu, 13 Apr 2017 19:51:14 +0530
Subject: [PATCH 081/287] [enhance] Report for prospects engaged but not
 converted

---
 erpnext/config/crm.py                         |  6 ++
 .../__init__.py                               |  0
 .../prospects_engaged_but_not_converted.js    | 25 +++++++
 .../prospects_engaged_but_not_converted.json  | 29 ++++++++
 .../prospects_engaged_but_not_converted.py    | 74 +++++++++++++++++++
 5 files changed, 134 insertions(+)
 create mode 100644 erpnext/crm/report/prospects_engaged_but_not_converted/__init__.py
 create mode 100644 erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
 create mode 100644 erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.json
 create mode 100644 erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py

diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py
index 9935aeffb7..ee3b9c1ec1 100644
--- a/erpnext/config/crm.py
+++ b/erpnext/config/crm.py
@@ -44,6 +44,12 @@ def get_data():
 					"doctype": "Opportunity",
 					"is_query_report": True
 				},
+				{
+					"type": "report",
+					"name": "Prospects Engaged But Not Converted",
+					"doctype": "Lead",
+					"is_query_report": True
+				},
 				{
 					"type": "report",
 					"is_query_report": True,
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/__init__.py b/erpnext/crm/report/prospects_engaged_but_not_converted/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
new file mode 100644
index 0000000000..6f37719f63
--- /dev/null
+++ b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.query_reports["Prospects Engaged But Not Converted"] = {
+	"filters": [
+		{
+			"fieldname": "lead",
+			"label": __("Lead"),
+			"fieldtype": "Link",
+			"options": "Lead"
+		},
+		{
+			"fieldname": "no_of_interaction",
+			"label": __("Number of Interaction"),
+			"fieldtype": "Int",
+			"default": 1
+		},
+		{
+			"fieldname": "lead_age",
+			"label": __("Minimum Lead Age (Days)"),
+			"fieldtype": "Int",
+			"default": 60
+		},
+	]
+}
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.json b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.json
new file mode 100644
index 0000000000..9a21e0b56f
--- /dev/null
+++ b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.json
@@ -0,0 +1,29 @@
+{
+ "add_total_row": 0, 
+ "apply_user_permissions": 1, 
+ "creation": "2017-04-04 08:25:40.491063", 
+ "disabled": 0, 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "idx": 0, 
+ "is_standard": "Yes", 
+ "modified": "2017-04-04 10:00:10.253224", 
+ "modified_by": "Administrator", 
+ "module": "CRM", 
+ "name": "Prospects Engaged But Not Converted", 
+ "owner": "Administrator", 
+ "ref_doctype": "Lead", 
+ "report_name": "Prospects Engaged But Not Converted", 
+ "report_type": "Script Report", 
+ "roles": [
+  {
+   "role": "Sales User"
+  }, 
+  {
+   "role": "Sales Manager"
+  }, 
+  {
+   "role": "System Manager"
+  }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py
new file mode 100644
index 0000000000..36a4ad64ca
--- /dev/null
+++ b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py
@@ -0,0 +1,74 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from frappe.utils import add_days, now
+
+def execute(filters=None):
+	columns, data = [], []
+	set_defaut_value_for_filters(filters)
+	columns = get_columns()
+	data = get_data(filters)
+
+	return columns, data
+
+def set_defaut_value_for_filters(filters):
+	if not filters.get('no_of_interaction'): filters["no_of_interaction"] = 1
+	if not filters.get('lead_age'): filters["lead_age"] = 60
+
+def get_columns():
+	return [
+		_("Lead") + ":Link/Lead:100",
+		_("Name") + "::100",
+		_("Organization") + "::100",
+		_("Reference Document") + "::150",
+		_("Reference Name") + ":Dynamic Link/"+_("Reference Document")+":120",
+		_("Last Communication") + ":Data:200",
+		_("Last Communication Date") + ":Date:180"
+	]
+
+def get_data(filters):
+	lead_details = []
+	lead_filters = get_lead_filters(filters)
+
+	for lead in frappe.get_all('Lead', fields = ['name', 'lead_name', 'company_name'], filters=lead_filters):
+		data = frappe.db.sql("""
+			select 
+				`tabCommunication`.reference_doctype, `tabCommunication`.reference_name, 
+				`tabCommunication`.content, `tabCommunication`.communication_date
+			from 
+				(
+					(select name, lead from `tabOpportunity` where lead = %(lead)s)
+				union 
+					(select name, lead from `tabQuotation` where lead = %(lead)s)
+				union
+					(select name, lead from `tabIssue` where lead = %(lead)s and status!='Closed')
+				union
+					(select %(lead)s, %(lead)s)
+				)
+				as ref_document, `tabCommunication`
+			where
+				`tabCommunication`.reference_name = ref_document.name and
+				`tabCommunication`.sent_or_received = 'Received'
+			order by
+				ref_document.lead, `tabCommunication`.creation desc limit %(limit)s""",
+			{'lead': lead.name, 'limit': filters.get('no_of_interaction')})
+
+		for lead_info in data:
+			lead_data = [lead.name, lead.lead_name, lead.company_name] + list(lead_info)
+			lead_details.append(lead_data)
+
+	return lead_details
+
+def get_lead_filters(filters):
+	lead_creation_date = get_creation_date_based_on_lead_age(filters)
+	lead_filters = [["status", "!=", "Converted"], ["creation", ">", lead_creation_date]]
+
+	if filters.get('lead'):
+		lead_filters.append(["name", "=", filters.get('lead')])
+	return lead_filters
+
+def get_creation_date_based_on_lead_age(filters):
+	return add_days(now(), (filters.get('lead_age') * -1))
\ No newline at end of file

From cca55ddc33ba362e225be89156f29416ca2cfa65 Mon Sep 17 00:00:00 2001
From: mbauskar 
Date: Fri, 14 Apr 2017 13:48:55 +0530
Subject: [PATCH 082/287] [minor][hot] fixes for KeyError: from_date for stock
 balance report

---
 erpnext/stock/report/stock_balance/stock_balance.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 2db741dc8c..d14dba4e34 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -63,7 +63,7 @@ def get_conditions(filters):
 		frappe.throw(_("'From Date' is required"))
 
 	if filters.get("to_date"):
-		conditions += " and sle.posting_date <= '%s'" % frappe.db.escape(filters["to_date"])
+		conditions += " and sle.posting_date <= '%s'" % frappe.db.escape(filters.get("to_date"))
 	else:
 		frappe.throw(_("'To Date' is required"))
 
@@ -108,8 +108,8 @@ def get_stock_ledger_entries(filters):
 
 def get_item_warehouse_map(filters):
 	iwb_map = {}
-	from_date = getdate(filters["from_date"])
-	to_date = getdate(filters["to_date"])
+	from_date = getdate(filters.get("from_date"))
+	to_date = getdate(filters.get("to_date"))
 
 	sle = get_stock_ledger_entries(filters)
 
@@ -174,7 +174,7 @@ def get_item_details(filters):
 	value = ()
 	if filters.get("item_code"):
 		condition = "where item_code=%s"
-		value = (filters["item_code"],)
+		value = (filters.get("item_code"),)
 
 	items = frappe.db.sql("""select name, item_name, stock_uom, item_group, brand, description
 		from tabItem {condition}""".format(condition=condition), value, as_dict=1)

From 9b11d9b45db3820f73a71e82295a2520cf8c45c9 Mon Sep 17 00:00:00 2001
From: Javier Wong 
Date: Fri, 14 Apr 2017 18:24:04 +0800
Subject: [PATCH 083/287] [fix] Stock Entry - Change "Is Sample Item" to "Allow
 Zero Valuation Rate"

---
 .../purchase_invoice_item.json                    |  9 +++++----
 .../sales_invoice_item/sales_invoice_item.json    |  6 +++---
 erpnext/controllers/stock_controller.py           |  4 ++--
 erpnext/patches.txt                               |  3 ++-
 ...is_sample_item_to_allow_zero_valuation_rate.py | 12 ++++++++++++
 .../delivery_note_item/delivery_note_item.json    |  6 +++---
 .../purchase_receipt_item.json                    |  9 +++++----
 .../stock_entry_detail/stock_entry_detail.json    |  9 +++++----
 erpnext/stock/stock_ledger.py                     | 15 ++++++++-------
 9 files changed, 45 insertions(+), 28 deletions(-)
 create mode 100644 erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py

diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
index 6102d3ea30..2a8d8559f5 100755
--- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
+++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 0, 
  "allow_rename": 0, 
  "autoname": "hash", 
@@ -1366,7 +1367,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "is_sample_item", 
+   "fieldname": "allow_zero_valuation_rate", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1375,7 +1376,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Is Sample Item", 
+   "label": "Allow Zero Valuation Rate", 
    "length": 0, 
    "no_copy": 1, 
    "permlevel": 0, 
@@ -1869,17 +1870,17 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 1, 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2017-02-17 16:28:26.719053", 
+ "modified": "2017-04-05 23:24:13.702820", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Purchase Invoice Item", 
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
index 721785e82c..205b61e882 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
@@ -1552,7 +1552,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "is_sample_item", 
+   "fieldname": "allow_zero_valuation_rate", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1561,7 +1561,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Is Sample Item", 
+   "label": "Allow Zero Valuation Rate", 
    "length": 0, 
    "no_copy": 1, 
    "permlevel": 0, 
@@ -2094,7 +2094,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2017-03-30 16:26:36.507924", 
+ "modified": "2017-04-05 23:28:13.520429", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Sales Invoice Item", 
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 9f0534529f..54c181ac1d 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -54,14 +54,14 @@ class StockController(AccountsController):
 
 						self.check_expense_account(item_row)
 
-						# If item is not a sample item
+						# If the item does not have the allow zero valuation rate flag set
 						# and ( valuation rate not mentioned in an incoming entry
 						# or incoming entry not found while delivering the item),
 						# try to pick valuation rate from previous sle or Item master and update in SLE
 						# Otherwise, throw an exception
 
 						if not sle.stock_value_difference and self.doctype != "Stock Reconciliation" \
-							and not item_row.get("is_sample_item"):
+							and not item_row.get("allow_zero_valuation_rate"):
 
 							sle = self.update_stock_ledger_entries(sle)
 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 3711bc82b2..27504c48a7 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -382,4 +382,5 @@ erpnext.patches.v7_2.make_all_assessment_group
 erpnext.patches.v8_0.manufacturer_childtable_migrate
 erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom
 erpnext.patches.v8_0.addresses_linked_to_lead
-execute:frappe.delete_doc('DocType', 'Purchase Common')
\ No newline at end of file
+execute:frappe.delete_doc('DocType', 'Purchase Common')
+erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
new file mode 100644
index 0000000000..744cfed998
--- /dev/null
+++ b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
@@ -0,0 +1,12 @@
+from __future__ import unicode_literals
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+	
+	doc_list = ["Purchase Invoice Item", "Stock Entry Detail", "Delivery Note Item", 
+		"Purchase Receipt Item", "Sales Invoice Item"]
+	
+	for doctype in doc_list:
+		frappe.reload_doctype(doctype)
+		rename_field(doctype, "is_sample_item", "allow_zero_valuation_rate")
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
index 2bae099aa1..2649c49c08 100644
--- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
+++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
@@ -1648,7 +1648,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "is_sample_item", 
+   "fieldname": "allow_zero_valuation_rate", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1657,7 +1657,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Is Sample Item", 
+   "label": "Allow Zero Valuation Rate", 
    "length": 0, 
    "no_copy": 1, 
    "permlevel": 0, 
@@ -1894,7 +1894,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2017-03-30 19:34:42.305637", 
+ "modified": "2017-04-05 23:26:03.390869", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Delivery Note Item", 
diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
index 5159625700..91d1791cc7 100755
--- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
+++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 0, 
  "allow_rename": 0, 
  "autoname": "hash", 
@@ -1633,7 +1634,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "is_sample_item", 
+   "fieldname": "allow_zero_valuation_rate", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1642,7 +1643,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Is Sample Item", 
+   "label": "Allow Zero Valuation Rate", 
    "length": 0, 
    "no_copy": 1, 
    "permlevel": 0, 
@@ -1968,17 +1969,17 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 1, 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2017-02-20 13:31:59.778417", 
+ "modified": "2017-04-05 23:27:10.785444", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Purchase Receipt Item", 
diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
index 9b808f0435..6d99dc45c2 100644
--- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
+++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
  "allow_import": 0, 
  "allow_rename": 0, 
  "autoname": "hash", 
@@ -1043,7 +1044,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "is_sample_item", 
+   "fieldname": "allow_zero_valuation_rate", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1052,7 +1053,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Is Sample Item", 
+   "label": "Allow Zero Valuation Rate", 
    "length": 0, 
    "no_copy": 1, 
    "permlevel": 0, 
@@ -1214,17 +1215,17 @@
    "unique": 0
   }
  ], 
+ "has_web_view": 0, 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 1, 
  "image_view": 0, 
  "in_create": 0, 
- "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2017-02-20 13:31:25.233622", 
+ "modified": "2017-04-05 23:25:26.885642", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Stock Entry Detail", 
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 82f9bf1f8b..d5f64b1298 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -259,10 +259,11 @@ class update_entries_after(object):
 			if not self.valuation_rate and actual_qty > 0:
 				self.valuation_rate = sle.incoming_rate
 
-			# Get valuation rate from previous SLE or Item master, if item is not a sample item
+			# Get valuation rate from previous SLE or Item master, if item does not have the 
+			# allow zero valuration rate flag set
 			if not self.valuation_rate and sle.voucher_detail_no:
-				is_sample_item = self.check_if_sample_item(sle.voucher_type, sle.voucher_detail_no)
-				if not is_sample_item:
+				allow_zero_valuation_rate = self.check_if_allow_zero_valuation_rate(sle.voucher_type, sle.voucher_detail_no)
+				if not allow_zero_valuation_rate:
 					self.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse,
 						sle.voucher_type, sle.voucher_no, self.allow_zero_rate,
 						currency=erpnext.get_company_currency(sle.company))
@@ -290,8 +291,8 @@ class update_entries_after(object):
 			while qty_to_pop:
 				if not self.stock_queue:
 					# Get valuation rate from last sle if exists or from valuation rate field in item master
-					is_sample_item = self.check_if_sample_item(sle.voucher_type, sle.voucher_detail_no)
-					if not is_sample_item:
+					allow_zero_valuation_rate = self.check_if_allow_zero_valuation_rate(sle.voucher_type, sle.voucher_detail_no)
+					if not allow_zero_valuation_rate:
 						_rate = get_valuation_rate(sle.item_code, sle.warehouse,
 							sle.voucher_type, sle.voucher_no, self.allow_zero_rate,
 							currency=erpnext.get_company_currency(sle.company))
@@ -344,9 +345,9 @@ class update_entries_after(object):
 		if not self.stock_queue:
 			self.stock_queue.append([0, sle.incoming_rate or sle.outgoing_rate or self.valuation_rate])
 
-	def check_if_sample_item(self, voucher_type, voucher_detail_no):
+	def check_if_allow_zero_valuation_rate(self, voucher_type, voucher_detail_no):
 		ref_item_dt = voucher_type + (" Detail" if voucher_type == "Stock Entry" else " Item")
-		return frappe.db.get_value(ref_item_dt, voucher_detail_no, "is_sample_item")
+		return frappe.db.get_value(ref_item_dt, voucher_detail_no, "allow_zero_valuation_rate")
 
 	def get_sle_before_datetime(self):
 		"""get previous stock ledger entry before current time-bucket"""

From 6681b0d2aa83d091e5d7173e51509a2d3ba01d27 Mon Sep 17 00:00:00 2001
From: Rohit Waghchaure 
Date: Fri, 14 Apr 2017 16:49:22 +0530
Subject: [PATCH 084/287] Documentation

---
 erpnext/config/crm.py                         |  18 ++++----
 .../docs/assets/img/crm/report/__init__.py    |   0
 .../report/customer_address_and_contact.png   | Bin 0 -> 77834 bytes
 .../img/crm/report/inactive_customers.png     | Bin 0 -> 58312 bytes
 erpnext/docs/assets/img/crm/report/lead.png   | Bin 0 -> 83066 bytes
 .../crm/report/minutes_to_first_response.png  | Bin 0 -> 67712 bytes
 .../prospects_engaged_but_not_converted.png   | Bin 0 -> 78731 bytes
 .../assets/img/crm/report/sales_funnel.png    | Bin 0 -> 43124 bytes
 .../docs/user/manual/en/CRM/crm_reports.md    |  41 ++++++++++++++++++
 erpnext/docs/user/manual/en/CRM/index.txt     |   1 +
 10 files changed, 51 insertions(+), 9 deletions(-)
 create mode 100644 erpnext/docs/assets/img/crm/report/__init__.py
 create mode 100644 erpnext/docs/assets/img/crm/report/customer_address_and_contact.png
 create mode 100644 erpnext/docs/assets/img/crm/report/inactive_customers.png
 create mode 100644 erpnext/docs/assets/img/crm/report/lead.png
 create mode 100644 erpnext/docs/assets/img/crm/report/minutes_to_first_response.png
 create mode 100644 erpnext/docs/assets/img/crm/report/prospects_engaged_but_not_converted.png
 create mode 100644 erpnext/docs/assets/img/crm/report/sales_funnel.png
 create mode 100644 erpnext/docs/user/manual/en/CRM/crm_reports.md

diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py
index ee3b9c1ec1..7a55cc606d 100644
--- a/erpnext/config/crm.py
+++ b/erpnext/config/crm.py
@@ -32,18 +32,18 @@ def get_data():
 			"label": _("Reports"),
 			"icon": "fa fa-list",
 			"items": [
+				{
+					"type": "report",
+					"is_query_report": True,
+					"name": "Lead Details",
+					"doctype": "Lead"
+				},
 				{
 					"type": "page",
 					"name": "sales-funnel",
 					"label": _("Sales Funnel"),
 					"icon": "fa fa-bar-chart",
 				},
-				{
-					"type": "report",
-					"name": "Minutes to First Response for Opportunity",
-					"doctype": "Opportunity",
-					"is_query_report": True
-				},
 				{
 					"type": "report",
 					"name": "Prospects Engaged But Not Converted",
@@ -52,9 +52,9 @@ def get_data():
 				},
 				{
 					"type": "report",
-					"is_query_report": True,
-					"name": "Lead Details",
-					"doctype": "Lead"
+					"name": "Minutes to First Response for Opportunity",
+					"doctype": "Opportunity",
+					"is_query_report": True
 				},
 				{
 					"type": "report",
diff --git a/erpnext/docs/assets/img/crm/report/__init__.py b/erpnext/docs/assets/img/crm/report/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/erpnext/docs/assets/img/crm/report/customer_address_and_contact.png b/erpnext/docs/assets/img/crm/report/customer_address_and_contact.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f92edb19c1400204487e36ba6d42ef497eaea0d
GIT binary patch
literal 77834
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 M3*n0HBju2noqc z2npfKJJ_09d^G_8P!CFSgJf6PSoq+5SRLL=KhQ8`oFKm8o)Ds3;GSU-iHn6vG8QKY z5)Kzt5)4i>mP{lJlBY~^8}g9%^7*)U@yU5`d$>7u5|(YV;DjJpyrY0v@?LCxn>0} zd40aNabBQ?7QmGfG3*o;;4ax`9m2)758fGKS`=@03oEdcl+d-h9ex-X;GR|3%tc@S z5;a?>CUnK;@#@{jv+eCpg3#@wpUY^8)>UU?G8RB__QRg@{Q(jE%X>+Tj(E{E0hXq1 z6h>Mzp5eJtSMhOC{e4Zdt$>hCbMkgGa2B%$LY9 zl5mdI4cQa6WRkdMYXq;vR@>CLGuu;9xTg0rJd`brGP4`-7gx-*_xm(#Wc_z=z3b~a zHbHtsi&Bp%-X=IMZUt+EuKRt6Vo^KW((b5X+qWrmJe(Uo&Rx3`nsFeA><7XVt&78+ z3coy`0Z^&7geHy}LUpFG!Fjtu)Ni*i&dhJUzj~F_Y(s!gw=j$!GMFNTQ=0BNhSb*PqN&CZG%J?Uu)0cg@C@A;cmiv6B~`@P7~HToSP+%GD20f{Izzc=xK&Z6}~)zrSI5Cmarpeh%r!d|<*>yB+u|gf|ph4~s9Fjlb0v z?c)~eI~F9;O59}$+ljT!dnn!pALlg6G}H9SN2SZOE!gha9hgCONN*EspsbxZ^3uWz zS)>{?M;wn^l>aJ;%gu=7C^=w_bJqnn9$#higmq}^0UibPKUkq>{qy2aAAq)NL@v*c)f^yLl{W3P;N&#Uv5nN%i{d6x8I|K}k5Iw;h^${ur zz61t@egWu|`b49?@9 zE$B6Ab;!dE{N}5wKpzg(AG$3FnO7)3LQaziIfB}Vw-?137%obZKc4HLAX17|YB@_Z z%QP!Bi+;>x2?$0{G6r+=1F?p&0$8hOyar7=*l0_c9h}ymYRlcYQm@D8lDflxARlA0 z!yJ;B7k28Kxyvnq6ZJFlGhrKyPLz#MH-ER-M4pd9D7tJUyC{lLpnadK5g~&_Dz-Gm zK5sG3l0rhN2sP?xB+39KfyWHwNeGWWPY_LyszFAr*P{I?5L}2+Z`jVPJt{jQElf&a zyKlRn)z7;fQu|R?Np5&u)an?Q0r0JzD~`vLM^R5cZ>Vlj0Vx9UJV^tAEdd0PI9UZj z1-U6928mkHTp|dhS;!_3zMuAjw0ZH9vaV8(5)u-v5sE?6;nOLM(TpkAsC!5w4~bOD zx5|dfoXWJyTgqmoRSGOhoyE@*#E3zm>B44)=vOecnTwLxB(zFQ@=}Ue3Lf%!1>*%( z#pfmOl0pJR;sqj(zNG1-A^Ws4@V}^OKr6pg!qJ4WCbPygMSlzZ<`?ZJ8$9k$8+(qt z=G<1|G;_=DPTa4>biHK8`c zJ~}L0B6~Rdh+YYIMyQy&I*3E9NWDZIkV}ZP?9U zd)7NyJ3G5fyU+*iKNo&AH%YmstW`bgsI-edLcWf?>b`2c(!4qXaRZqGiGfmr1cOq5 zB!PN?OhA8wpoN5l=77jTE<;F1HAP`Xj7F{c;!P!pJoSZxSdo|!KO98`^$v~Z%NdGL z7)9t)=w8@eXh9!JzgItW-^(|nZ{??O%Q_7n;{K9?QiOu}g4> z#w_vd>s(d2%mu>wPHTzrM9VX+bNn;PU2SKFht7lUI#=BrpR>Z3f3GL9mW zvb_>#p_B5a23C!iuKW1tGTBJkdfE!B+>El7O0jCQ5*GzqWuKI;X78Z)Oh5l02mz)- zk$GVT!CSEiDRJ!zty7t`@%EAS8IVa~QNtn$@WqD3#xw3riD|VO#Ykm9S`(6t}R{Kz!r#Bo7m`(nxp z9mgSOrX#vzqC=#;=YHS$?uqhAq+^o{t+Vc8Ni&_tMqz}%RQ%|s_tsm;10PS1H~wZ% zZvZp61o%app*D_ob$e9;wYW$jC>v3;XETQj&cn@l4i7U=9k(g>9M6QCtlM{wtef>Pg$-jh`RsAEv%S{3`golPoo~p}a$Ur8KErk9Kx? zp|0YJLyH7+LQ5h0L!`UY^5jlF=GN#$*JU#(w20n>uU>uYp&g-n;x9w(AxCiFIOpMr z5t3o);qx(F?jT-$Z{nj0T?K^h#Hw>IBCeN-x6QG zkIyicILg^(UvbW4Ri%0#QQv=^T>1eM6WctetZ_GQLC`ZXP z+m843RlUl><_y#i+KjG3@3!@kQI4ycGKYze#OHfYLGDNVe$j|v)z5~XbE91;dO8d( ziaNx~iAs?)(d6&yhI-TXDo>Vf6do3uM+1$yRz@cCCf0kBdwUBU)g@}Vls~CVZCX|j zJHLC>H!0>{OQJZcEYsLgz0Q}cR5gQNq^?@DmU}i|XK!}CzQ8;vmFFFo9=BrVq}OVe zEO&A4v?aSYKEJ>d<7r!MS`B#&-O_i)O{OlkEFrHoOkz)SzYM)hxsLuwW~+>@1h!VS zUOOW_lfymXvpJhQHh0f|FWmZmJkut-H=b@5K2g?=+;+~V=IY(8RomVs_PwM@t*E)n zR!+~TTlAv8jW3jqqXLv+=gr_FyJO_V;UxrK4bsx3qP+7hV}} zxTg-*jN71dsdu%w>W3~1?~`=L%#2sr_pYa%S-Ga1h5fw)EmUeWQ8Zw*g=EE)rQ}i7 zL^V!T9MzI}!Ug-2R;+xiyKZUk&NZ0TRTzReiIr*~dPN0YU4YjXFn}pY05IYhBKeD5 zy>4h2>mnS0MWOgfGi9ty-=-hthC%kHuBuSD{+vY|Nqkq-&N#oQvp_n@gcx?%>(Ql< zt&q52Lx9a77v!>eI>J0Bo{m5&K;@u$kO1=?40X2;TwElnCBnqDhWmz9hdPz{DMrZ8 z)MQn@t9o^ZlvZ^ts1S+VG|g+_bX4VMx4&xyX!a@?4GH(m_KZz%uWe`VQI(runQC!x zLBH^a%tR;2PGoLeWH@RpcYpiRf++sg2Ju`IcRm}ule<%bm$l2|)%A_wqt>^$XH)?4 z2QNW#NaAou-s7aLLBLiNf=OIjh*1GhepWO(j!KL|xC(bMVu|xA@jAf|CWh0#u)>N2 zl3^F6bfxxbFu6`H9_M|j=a_nEjEDnNMzlIr$H{{<2Nym1mcwipYQE;&Yel84`cYuD z;D~{6Gs%6aEh}jg!@cDN9ZEu5hINF$_ttsubTqB zZy_pCdoumMKx68(6t!ZSo*GxURZsQL)ZG~G8%l1j>gTJ(Ca~Jd-5orHUYwr8-sp69 zVO=|w(feTFV3Rt-T`M^vanAX-rMAvy#Rp244+WE{l9)1Y`flvgw2BHW@3hVUe_c6I_Bp=3SCX0?<4xh(4 zCc`Uv`l`0w(`4zc(LK8Y(+X)2@fdL-xy<0#_wLuC zLMD?{#8)I(D_YAf6)lr-3UfTOFL9on&)7|ETzKMN>o=XyC`M?Nc(f0CO?Xxlt;6w7 zcPV$(dw0Iy0q*&^2^{^nBG?t8HU1@^J=s{3vc*OePq+qmA|fFMjlIP=g4&BLS&5dZw76g)`U9qC5LoY;N)o! zx&ck)+W%S#x{WRhZCpFMz8@;U7Z4WE|1?o-`z zyKEyvN9X%?E-a&;ZXUM*b!IfG*n@t4t>Plas!9iZ5OP0MUP4_gWxTlzjg*i~z4%Ld zRa#djK>|bYaK=))NR~=sRG4*^S9(ECeO!5bdn#EBTL_(%8mCV@e;~euxLm55t45(z zgFLnJsvTPnh@_#YgZOcnQ|FlTl6EV*n;IyJNQGgHVpClKRK|$a91u$kPu;Ql-Bjls z=21GYX4|qLXG0tRL&kCFEf@NKx`mTjFE@h6-2a}VxP?qHs3H=JwLd))_% z>!_QVTk!W^fP=u!{*wY{Kga|d1e4)aVzXko+PTLFzw&ak8OrsU8?PEv^}-iu7o-)0 z#3*CSgxW``O$^KoRqau-qFDPtZbzFMpvZ80@ZD@{C` zp=TEGJ+M3K?SEBuYEq59f7*q9jQH+`1o}0_7+Qt4Tw8%Wo)VQ}t9?XO(j`h>R6#aC zIQ|)SA%l#{R<*OG(OYb{>Za52;l&c&D(m?ABm|QlUIYs^eKkFXr)_q6@wv+ShCwf6 z9OvZ`L^=xUuqs#U-=(Oi3MK9#5?i}n*=P+)ZyVx7A1EDqNal}(hKT3J! z-NqA+O}Rb_;E?dO^vjHR79f5B*f0|wK#w3mPdtQgB@};F1qgY7B*0V7qlXW__;#3> zgRE%}u&^I@yhS>Y8L=ZTjACr$HJCZb+a{5E$RUA(IMOh@P~MC1O0X{OGB-WlE zXPB|uTd7Ja9&13s7NaXflvsH_@Kpcd0=j!7WPDtsAwdNxE8L2I?`EXEnSJ%8=Och8 z4rugGzx+tUBz@5qLG^s*66yj$rB;PTM9?sbzUtYgSy=Jn1OaGs_$k>*j;XuJlNml^ zdDBu;Ws|Qab*7kRaArU1c59$&=j+nyW$MWshwLI9Q5{_Rd$!;K79$w+% z=wsLYX6cyikhe$KA!iVz#4M-(${^Kp=b{N*+dP^k^ zF~nBvf@2yB$upA4hMt#d>b7rtxFT`w`&kM11btEWsB1Pyd}rFIhXTpQ?evdP1(6h~ z;A)9Py)FVBj&Cm`oxm)K&PlK@8GTx=%Xc}*&I)&-w={6ZFkv0%9v(+)Pw;PeI%cX} zlRoWNz++N$Wz^PHg;n!auoZlZ58^ePJR7#Sqe!2T}&%@#oE*BsWN;2#;(FwG{CR;4naXB-aL&%Uzn9KV){|0{dBN z6s?b|KVOTv2y&`~O*0PZg7N@d9W>GBQz&0BRG3O~NMzL|dnE1#KO8u$3@nVYZDJ{T z+&inpEX%ys@Z9jr$>S*f(D{%H<14yo?3hy$MV3b76UHcks_DEXD^*j>sRFieG@`7` zIAj%!jS;S8Ho|(lr`flsYb)p)C{I*RawpYADPb*T`AA*tZY(0dl)~ivl;VURqZLE4 zqp-s+l-!D*g|pvZMfXB5?{F=g%R9R;4bqKi@T|pffOSxK+`LSHfqMf)YX{V%Ii(NA zIH+%_-{QDvM)y0cn{<-jOhQNpFUFx>wzaeIHhIzamv;s(&iCTZ+&0QrJbs$}idoX5 z?O~-SJT$a(93o?sD)m+uerycg>TOUkojMZJ?T6?ez{cV`&*INmOhZnNl;KDV=1uYp zChBA%;+83Qevl5p!Sr{)th5{!AgHpv= zdTDU1A7OS(9e%1pVg)BtC+IZNl%^0=;XKheKhFA5wyqxaUjc%kL;wLrE{Qq{XNx@f ziv;gN%_UyNapZc%W~5I9+r?dyb^YHtguW2P)kaEW9ML!;L$gV-onWxCeY1vRkQE(g zsX{o{%y#VX^DJ&Je9{1|0iyEX29buI^HsIo9|Xrl+{@At0t@7E2SWBCc;aXb`%^@ zn?NyiMGBr|!qXNiXU7}lW1GKT|BIp!9NZ3^Z4^w*HTyM76EW@ar%~>N#~{36_l4RH z<|F*+Yv0qDhRsNrbj?W3%J)1cXu4hTbL8zR<&Um=38S|6%iD^wOp^D2QJUD?sqV^; zZ6a1VeBgcfirqU|i*yeKE_xqH`}fn5Us)pt52L~5gmS`MWSsPlolng?r#=|Hh92kk zFQb}KiDoW-4zlw0$@L^$DU}`t${kJ&ns$57eW0?aUB2DMT;{a#rR-PJrP6h1+-hiR zhpVS+eA77Bn9}&JPEr+IabHbQu~+4#$EHcAskc(I*75}XzV~=CK-yr@?B-?lCe*oW z+*}PGDv1R!cDTPUM*v`V0I)c;xT;OHyt+y*8XwgRzzlx++Fb9oFbNdHKk;vrO*k;fOZbuhtap=G9}C**~~$H(V(FgE2> z6c+uD`sXhmLUSi4J5D+}7Z(>=7baR;2QxYb4h{}FdPX`%Mw-tSG>&dIP6nXv~_mkAtd}g(0@OF<1}%#_}@r2j{h<1(?Gi4Pv{tE z>FNI4_opiNZz-p|g{#R|bzuu@6C20RF?d;7Ik^97|NnaOzY+h?)cBt!6ASa7ntwd` zk0v+WZv*}?=x=ZRCH-_4FBCW3e_hWDHSA}z0RX@cAR#QE>_x$m}LAV1- z@PjKHDA`=>*KD-J-kG?=b@BtJF4P@zx`k!(`&EP<`_+xVMLNb{hw=yo-I3Y|oFo|? zim?GjDg@~^=!Gv(0R!{B&-}VaaGC)am?^*MzDBk2y{<=Pwtu0~FG$Gwk8l2#`(cvxh?+$a?PL8LO*6Rvsui1pyn3X^!}(GHJ8b}@vUsj; zr~Bo-rGHapx>{;gG2OMJ-b`StCyrm+_1MXAZ})Eie#c*GmJX4DFFN_&`49N{W?dZ1 zWpUWykxCK$HX1dxTjSubPS@yq6LMZC!y=JZ#B*u6Z&+FV>Y0Ay(!aTFyR>Vv*y;r% zm1Ak-2Qpr$YK<@P*m zXwBiXO^Jq%x_6Z)LrKR9ns;>#iDFuJUo!*#)1B`xyb!a%Pjt$no2d8I(Lak5SL*^{ z@kDl)MGlu6s7G!~Z%<27TMo(B!}X$M&x_T{y>-()kfqQ%qY}C?cF)+c%L~W~DpmH% zuPoHjc|WX(xAhJ!z!6_CkkqJKRm`qe#npf^hxEtP@Q z>dwChIO&7^&%{y}}9p1!dBtpzP zvoTQW(;U-TfaBWd)z}lY2P2hFfhe^_m3Ic3yvs|DKRaB{r!pNJ8z_GBHI`c^ByxJv z^z^zQ<43F)|)Z|H+xpPpp+$^qB|Ld7Cle-Q>AT-cBs4 z1*%JlIq+Cr)FMkD5whB&kIH^;g^OUo)YpANm=8xK2qF(Fdpz#+500kdyT0TH zviiI-{2jdClh2n5sdSDdYr$tRDuMa3Q!K!QKcdO?ItWD_ryc_EPV(xE7Sj)$_Gg2i z&eVM#8H3N&7yLb@%!+|JCN)&@=FW2j^MyN#ve}7Lu6L4-w<#NJ87}asiv$R=-f7^^ zoDLVJ-o|mjP*FJohY`Chu6o2;H+uC;hxe{EHE94-qVCALyCddZRHf_DTLC#wJJyu3 z9b7t!gqH;`(71QhVd(@3a6@Du=7BlT53j?7z0S1ktS`%vFbnmdldDQZ4=HQLcJF}# zMgzHPQE#d3uS%tOS;2d@-9fzFZ-LsB%J)wDgf^PY_d68A106vYUM!24cTmysZyK7O zIAnYgL;*8c1%nR;0rk>fJpX!?>@0v9kB>UClOUO)dtMv|cgz^v<2KB0GpH^zGr&NZ z)mhH8SwjxD)}pKMRI~+XX^3n(0+7s?tr(jsypeOrJfo{0yuu4^gbm*(@tt5Z zf~#WS;yMzV&4y%|GkK@IMq#jZ#(YB&OhUc|Rl6)3oekT_mC z_jZ$RY5B0^k`2Evp|vP#lU)>vX)N^a7F`&)in$nD`-Dm21~%`*#YN8fl2FBRdDE7n z33=^fdCGKeF^Lfkg;+9MfJNhKN6Nux_ripOw;4XQiG#FAkiCZdvyNEK9V)Zj79X|d z*n8o-$?k*VpF}*=T0CJvEY=7h_E&O&73ACcru|4E834hK@qGsCG-x~zKQImTF@8na zBeY+U{Q4Hk9kjM{MNU)f>2dFx$+Ws@G%c+n6fPbng#JbaZLKhE!;TuoAvSX&Wq(U# zA2ct~{lv-nl*Fd9Ci9x(z;SLanJwEmd)Jr4dng1}f<2^&vpCqpwTx^{QAy9~Okm@U z9%-pe&fRcZy@1Zj?i~A=@;7>7phiol5t~r~bw;C5V|lPKR~$Z^%!mZEb8#g*884>* z9M~}qG7DHtaMI035MD16+I#q@J~)%X=5{kJm>dSI96V1X(0;NSc1t9np_5jU1}g4V z8-nQKt$t0p-dqA(;}r(xAl|(4(^_S-DdtYFN}DX99|>EF3lMf=>Eiz$ANwjo4~DK##73bdQ-fhbbG_kv)@@#mBb1FWFQWH=v+gm+DS z?@E%&kw?VxNGB{+5gN|5I@*Dq>(pXz^ZL$gt)prFI3gmtQ`$827Rid0)he5{gW9!J zhifPmvV_7D4PWN&(LYRJR z%az`RpQm05wm$E>DbQn^V|2#L$lYj}xmu5!GvgdLU7&<_{XM&PB&K_SrY_dj#3zDH zZKgQCJbrW*p})`B^e^`0he;}5o;~i{J-MG7vweA=&71nskgDsWRk1AWno)cxIpeDS zz{-o)1ejM@ZFC~JtbTi7@$HG%0G4TYJB>dGq)k>Y%1)T*+^hCV6wSQ(Vf)E-Hlzs= z_G?6A`7jnGZDUcC)9nq5*Fyb+A>%VLo>7T{6g|fQY@f)OVsSn2m-l-|^DQ;W3|CqM zrCI8)C{IVAHjfo3qU+KeZAi(sp?xa~Q|g?0x11czXLs1D-JiL=h}#je;;W?1t4YUD zPl6OyN)aOI^tKc;LS@}s(!+H~Tbi`URt0<4qg?JExcu$sW)JymCuGhfmvsNxnEdMna9_#BTsg2O|^Jh@+Z zo?V+tXh}X80gZrEyzV0%SH7uMddz(M67vdK^}kcTq+e|%Dige!w~V6Ao{j@mr;Xyx zYAMd)O2Hx=d6!Y*)$OvpZBB$zo2epni76Jv3XMd>$W~Tt(o|07-LzOH?j?L&ZSe3ez`za zSGTq_nrxOz4bOu`v5J^#Def$yrjLvO6`GP%bGT4+i%?RM5_QG_SW8j=%M&IMN}UUo z+U!LFQi}vs)QsLu{^Znl>_CleaYI{&c0p->a^zFNPqNyszbp99uKpLxq9ptzSRzi3 zn150!U!6}XWq}r{4e_UxU*tEH3Wd`%`g6D%Xuyo9are99Etkr9+N3SPRNqFBJ|?p4 z&KH!&)^5FBorkW6moyih>s5!(ee_hMXJ27ur5v(qb;zuDMi+6*fszCtOz&ze%R>yT;CxN^9_o2W8vF7PRoR~7f}nN0@jCCNnMwR*+E)U7w1SyrC_CLh$s^za*>4hiL$r9f+r&oe?2;Wo&>xNZ}oe!+~Ye`d}<`_6CY=PLeYs^OtX|Kr5Jnf3osu>4+egfvX; z(}9_PQuE(TIK|i4=^NCk{MsvA3LVu8xAyl=I5K=Jsl6Ks3dqpXzoSBif2P}o4kb@TZ*We~l8V7{?I%|7FXz%=JCk3Cb{J3LUEgU$yio2mfDuh!YJWJ3anCAh z{Q^U%bYQaVUUEVa4zKemITfU91Ti{1@fvU>&4JMYutncK;#MHLW7OHpu z9()S@q|@O{ppkU0IBrxU{HRZb*Sb!Zz288YxR7i!0j~ z_q9<$qmqlyf66N$a(gT*aToh%alk^66p!E_eoGW}1ycx8tWy^<{2jE2_+Z&j2A7f- z^pZ~h!p@DIF>AzB-j;$BB)MF@lH}*qGF)?8d&P&ID!K$pV+VyO-}`&;jZQTVd*X0%BlzcKb^Ow+U{+OY!g`Lv z3!rsrp;HU5C`N2i|3E=+WRuk&e3wQ>hm*ivhrq$~=Z{GT(s|jNFZ0S9?+M|WR@h!g zOdy5jx7MTyGE1nv86p{0SV+E|7DwtdR$V{Gg}}X5yEQjh8y(21-`MOWTG*Pe!qSC1 zQUv}vd(>B#|4X)dWB6H=fqiYNO-Rbge2aFk#r+v1-T`XVL5rQyi5Q#j7FOEP90p09 zyud~b4c~r{E&Rt3*afQYWxTO=c)|vb;596CHnJ6_iYqL}(n6f~aAG=38b_2DL`#k5 z1q$KS2@H?u+Nf997JqT~aVmHe&)QT^!27VJjAfwbdGx^UQH8gBUSkfMX0t`Wz962R zUKOuohC`eFhf2v#FCB8gOxC~|tFAe-@0<3H`D$UeXd)(F9ub~yG!+J%Q`0ht|S>pxM9qhWYYE_oqI%3=K zX!P%NXQMi8jz?miah`x|bH;^pjzW&z05DjyN^N?rea__hn~w^{5p%!|p8A`Q2#187 zB9?I-FHG3ou*QWS;ktfqeTPuoT)h5Qa=Z{}ODL``i0j(`#)Y0yyY-;4V2+B2IGirM zoBIp3XIe`_6`h_yAItWTy#uc(>uS{YlznlXAN?4WXh0e7!I3w&pQDSVhyh)_Jbld^ zCQE7e5OVTx0Puh7=h6g>Pl%86)_^_Z$*q->3WUM(ZL*Q%xD<^^E@F3Y1Mu68f^&AV zbz;fEP)o5LesUt#I}&C>-sMq1mkd|)z!8i079L=Eda^G#XwoSOL3mEV&y-sdqbuYm z>kb~`%@DIaurXg_0KggAaZ(;jmH)6=*+YnY9Su+nGZW9j9?o|%9&2-R&7I&s*%&XU zP$kJgdyc{m@^&gN!btN8!$=F>?Zzp;}b=V0L;uPJ-xaTqst2xlsR%ixM0-H%qYQ*dE_qYKDbWj2~37rhfJOn}$rg1a>;b~jMtY8ZZjYc_USRsafiS2o5gQe;!Z4Yd+G-LXxmjInMc(ff;F zuynm&iAD8Zl=0s_^U?D&7>}`xox&$5e5-Z98Q;!@zVYZqk^-0GVbEz-f{{E(+LLC% zj2pJ)iRum-AI-D*a0J6lZ*f+KC01>ceU%{uO!%>s8wQTKIpCUATT5oKUz^93QnFzv~yt-1v=al-3++ zPT}x~>>N>DSMpe0L&>Aow>@G;aUY8d%iK4as7NNaM;%w_?|gbZH|555(*@L72k-H; zMZezsU}p7(HfQ6fJ$i678(q0R=;|b@=S|6{G-hw9=F_dJJ!7oJXvM)w7JzZ>3huKc zin`p7*y=f}l`U?ra_I76pDWdowA6D4vbGIZQKG73^;i!B%D{ZY-`I$DIs!?kb~rJP zm|Hwps%50%T<8`~xb`h~(r8KkTpAl*Fw{o-JrBNX&lznCko3?x@n6n@%tq z@2V*~PpQIxndfN<-}3cc zF(8GkH81e&JM^;SbVMLMdyvfhqRj5Eo^e~BBILc%va(d?=lP1Mr5+yu(R-UPu#vfV zLrm%EnOf^nGjZ1Rd+Si|UQzx18`ODDW{a@RkU*?h>Wh!pP%bdlgS4CpDcwY{vo`(Z zmb}#a(|~D!lFnPI@!9Lm0wbFu|rpB4_#IEp8)4Kr>-5Zo@j50 zJr~DJL-=$RuI-Sxm&l@Ur^FtK5!C|h`A&PT&iHPDQ39pI&j_tQtF9K3_D)b9@!Poh z9Z2DScFj7LR_8!Z{j8_yH0GIw0|o~x(0hQpOuiN3d8;SNj^6k2&dhGli*4h{YW8*l z(9K2;hYKI{Rc4#6HjuAdCKSE8ypj3aiPhde&8O5@7WFEYVEe>KUesSxuy+*|ZZa z)_$XD3+$K3<<$8um9c>gy3VhG8-FK**yJVp@qY1zH_t~xBN*v)go(SD1%t?tI-kK{ zmYkc<2H9;^M2tp+l7p5SG)pqp_Q)@9A|^l0U%qIf+&^=IYc05sk4mW+tY5mPpc^1QY1og#sRH^2$0frJ zF0*=jCGEnroJj&Xf`*i_B6_hyJe@FK?Rf|%no&vz4V=hU$)&!PQP9_QZiopvcc|_I zy`D6^di&RgRK@~luwC!-yc(;?a{?z8yQk!KD(juo>s=$}wQmq=wwb*MTf z8!i_i7MBD838~^r5d z#-1UOuN!vP9u7Vc{O4X5Jt4y<6gkPQ61$EOnT4ab$&{uOYsEKn=8;F`^40e|RLyxCw+C^x; z%Adu2=V?9SAL3!^Bbid{WU^v3+ z>dkdkTm;bgi<4y+6mjncN$`-2{w&E#_ku(= z^E0MDgs~UU{D84K9v$6V?Yv#9k}|W^)O5_kCL-14U?PkUri7<5>oS8F11PD#=e-W`;|r>#Axld8l?JVyq-X{sk%uIlk_2l}TRy48kk`6UbwWOmY6!dTp zOdr2{!X;&^|Ey6rp__?|h5;k>x1W~ouYM@yrZP8h5v2XktN3w|VpWReH4;VGpwfsFEaXw)!1 z1ss-x?XQ3+`L&H&XaUKo+k6)0*LSJic-lh*M1Ni8Gc~&>?z-yoDZ))}_e=B3TPGr5 zIp_;MzTl~buJYY`=S*&w1XCi;T!fLxNk-B(BCiuC1krAl^U-JC!yp?Rp4hjDREzk9 z5U_8MjFcI2BS?0i3lCUMHCNqtruEl7GGiCKaQ=@$`soj-d+V2CZM-=os-iuu?Z9OH zwOl-d=UvQS#^DjjW03}m4UdiwY{R7}1Db#`DpGmd=lCVHgL-W-Brk$`9YJj;)l%SK z!C_aRN79(>cW1NHlhubJ&ES;tCPyWS(__H3-@dXn;Oqj8?t0yU48It}H>1~EteH$h zF4=uOU5SRV(BVn4goscolcca&CABq!-h7C!YihPx3p~YSl*TiUK?}LdU8({yHp>z- z@UnF>_k7 z{ZZM2Iaybze|cW?*#dF(5haJ%f<6~fRt=fCIHvJj`vLmmo4MMBntNKVGuwt|%)U+c zR%D?*_oTqmDna;kiQ0&BKVCB3FZtUGza6{}bAyF)Fpb;%LMHb9(IyNL!>y^jtklZY zSg9Fz48FqrLJgkGiQ!%xgFrBDu)VBN!S(bgxWXvMVKylFSZAo=yY#%vRnXn(bmt4c zm;8u2<&kB~Q13#Q)Wyk^mG@R2%-8t5F-6zh6|Wl*t(EJSoN<(w3n4jPX)7kV$z?+p z#2uHO6Te{jjpD{3l(60c8ZSwSih5O}jd5b9BA2cN!?L)aLOQ^oyUKKJD}!_!{`(|p z(V7Q5!DNDNGF)jEm${>yJ}}F8 zs26nuah}jibVKiRi-?XWt4>fJBbGQ@QwCLGX2&oX1@*k!8RmA_I=mvQiA-5nmae&2 z8`}%wFZGL!5JA1VU8jrzibgiC??W_=0Lv?_?5>f?7*kR%!RpYGP3Acvc(LVqbfemp z6%h$*cBB?7?|an{s=TKv4(*dYo1XH^Zk1B&xp8&!QfLOxQV|CISh4gm0pKnKqgrr3 z)oo5ckb@;7bQ_0?j@oVvAFwLD&^fQ|JfBVMz1CD89DW21Y>6nFG6lnNgowE*wK12OBX4ogVP&@{@rd!0qu4M;ZdAIKKylvV zt0L25GjUhnC|LudzqJ>V8pYB<2_SnpKw^KC%6pBRTDg5HH?e9_c9)X!_QsSt$yT{F zRJrGNhV_y><|1jfP_u6OYS;AcCk$5M-k z$Flu~t{xx{o)^p!Ba_mJA)dnBbDadFzDcN;!HZx63Sp7+ak zIz@>*ANZI5ZLFD%bBfh@GvQ0V|CO2^!8IIaDM_u7nBksiw<0}=m|h*fH}1GNmV?8pj*{Nb@ilV^Z_@X5k(ja1M=@5?!Ov1mq#-A;VG^K2C}Zn3>lWJ(57f zTtrvHjGU`@BfHPD|5v+kI&>Z*{RE6elD+bQ9KI}eulpETzmar*2T*hSkYfM-<-!4# zS3blfsu4qw)&pn@%CvcAO~mN_in*59Brn|L6|E>BmRlcd#Sc;4sNlNx^I(hZQNZHJ)9mxNm%?sn;u>mj7o zq<1l_x5SSrQ4<%t*^_T6)zHUgQy&+TA11|sUc3^zD|$~e@`9u7eeAY2()3)x7Ka5# zS4S;E8M3;b-Tqg{)w`tMl6iGzdm_)vqiLzyW1OFJsXMRY zWY=vd4a~?z3+>|_%%;%=B7(VC+7i#2t@2$@^+0$2&cqtwOdZXtg1lv_?U^idb+ZC)Sn{St|0C(PeRv>YgdI{y zGCPSnXZjRflrDSPU4G9oEQ-QM2gdY7_bgnoyHS63sd%(v20Xb;hsSLuqN@mKI7?s8 zW`M1%?~qw`%!t#QvG0G@Hcp@ZTIOD} zeMT_`K&ju^Z{gsbzf!Uf3BL5Kot0UTtvM)r9__e*&n+!3pc|l0Jou}IRFJ7_;>ISr zvIBqSbbCN5KI;=DDyi%Ue^w%VX@2(`gnRI>!beT`XI5R+U|aa#S@kcmT{9L^fSLa( zi2hUkP!{E1?zCBmDN_43_~N;i9+R?uKzV&;jo)+K2$&6QZ1TkE8~e4CaC8C86)yJk zuifrR}H5)jwy-yoy;gFeLaPuOl0)GG!$ zJsv8kDx(X_)T(hi(p_^+9CIk=h7?w`ibOdD43n#oAZqXBwChy5P@`lGeBZ(VoZ)VTyx7=61n=5aBd8W`2$uCLw~mI+oXNKq^XjPexcDo2 zMQS`xYV1zsS(2-9@aMM()w`V4*}s*hS6(-=chYiaT5CSDXa1l_g(A|J)oJ*#yg78% z*c3G$AH8=%9nZW0mt5^eJB~Pd?TjjsZVNuTz>Q`W*7z3$h9X)hms$K{-OoQIN3ZLO zB`G5=2ab-eN+sWDb6FoY70>8G z?XJq)a-C2_4#^# z6B-6(`169C`tS9Dgb{n<&t*fO?LVbr9iX>UReZF6-TmqTk%km+Utl_{7ys`Cr@w1X z{4xl!k>j7Y4p~&Zv#8i;n6Rp5*Ez|2F{{3eHU|T49BgZJJ!k;1czPt;!UA_q^w)b{ z)B{*P-hZwN3r_PjUs_!MEK>n~mae>^{#kGS8sh)Y<-lB7gh@*P>#Q<`{-nG%OYHAm zD9y#sYAnRf#~?y(YRxcfUKcLjIy|2@KG?|t%Ol4FZU*#685#pvr$#K%N(`QJw+@Z2 zZQW;akyR7}_h(Hxxl8}2-tl|Min@Nx6v+5er5Qv^HCmV;DN|Q((sqUuIhNenu zt@_ZpZ>pIC%8h4nVyG4#Mx6w-8=srB_mSJk)+DujcXhz+S~0&V?YH+{DU077>(7dd z@#ejAkvPF@$EZ1DGsdzdO@)kvmg`e9#ivnJTP_Gt49&k5-`UUKyc$dA@oGD3a8Z3Z zuuQofCccqTBs#csVRzNX+K#rO_XvMdmPIO$*J8YnQV)E%JvZNErq8S)pw=TpwtON*d8>hkBz(3(gv(A3u7&p)3L};?sGY5z0x`FV zSGl`1K7Fzy&$R@SamOa5zU#U7k@J;wZBpjFWR|e~^}Xy3KzQO5NRBP;nQ*_#2MsUA zbveC4)B;G9_D3CWWtj?ifj{Xko01dO@wyVFgqT^OL0{BPgk3_g(<%z3argWYJVB-cZFY_cI4 zWZ{gUVJaT-@;Jmk<=t#PTZFFMWwrx&q+s4GUZDV3PlZma4 zZQHi3FZX%hXPx_5>wLe@-@U4Z;5VDkkyD>WJJ#fawTQNXtZNum@0+kbS*ErkAD!9c}bkGD&c%P z!PLMzdkQz#-?UKqAgopzo#?!A1ye9ImBtyJiID7kBWOO^qzIocT9-zzZ?%0B65> z$LuvURa{5Bz4cZD_}HK)iS5Z3v91#NWiks~tt53vvn||a<|a-%yBHyP!l%4E+M&}s z#BhRE_pJ-5g=%5dOL=(551Dsu#vDv8Xo;1Q`zg!h;weWYheC70{vXyl7*WTc#o<{T zc;zq20@~5{dpwL!*($-ZIsWhuF;hM;a!CQ6kRh`8J-bU{`B~Kikv)T=dkN_h;41q-CskyvD;n+2WXP+bgx>xHtRCeOUpv^k^*X6pafM~P25cv} z7t(_yTukszZojcqm3rjvN-@(hW)UUVkNO9V_N<7OyR4{?SuB#dn-L0$n}qH#@=J}8 zJX4ny+YeG>j7ar|2PfL`ul?ekKX@SSLp@d}D~GMukaE;b(+@Vt_Sg)m^j6ZM1FGqI za$N2d9b3i|{M*5X$CLH>O#WhPElYGBJ zF*UdpY-jb`sKg$;&Or1rktqbASWyXD-TFDGnUu| z?kD?Y?1RANbpM9KL@FV=Sy!nfvcjd=jjFO40Ez!c@Xih1us_&drvcws zI9R=rr>TP8(0-oX1f8F#Ya2p#;Hwgw3`?3zT$Jik1#r+t3!rJAjkE;;$jf!7UhxMe zqF;!JmBQ_q%)_0CDj#&dBYw&u-(IE=Q+V(+a)4H(!v2o-{!+c##;rV9@St>I3>1?G zcI}Lsuh_v{ekDehz^_+-AUC994#FO}DHr$>)nE+Vr4spib2!fJ=E=!BoUF_9V|!#hZ>%H3$80Q(k>m8n3Yg+0x{jb zihz1`s4K{)Yx!9T2TZ%Qn&;hh>3|f0WAQ7XBVYC?8yO2u*+$Q<(|*;-)O1#{ zS-W=_<%18ib7VU?=%f{y&bL2`8Vt^3I(Qb*48#j6NEtror;voa$uKyDEJU0;oyH7Z z8>(s7;py&|BP_9FDsf`TVevE{=9Q>haCKajt?5hlj)btYC(hrAd(yrt2}?}6ZCJ8C zy)6j>(CM+j@|lQ5`RUnmH>9r%(L`bB$D~jAD=|-fTJm`?WQXM%ac49CxMo%9iHsTK zn1-^GG#cJ&spAr!ZT))CL=uY?XiwvHkfnI1^WbFi8wKc4UI{t;Bk$k|NBa;7c5d0C z_3mpRiXbKlTJz%6tpepW#*odDLiNg_c>H~?*6e7$!rkQc-I#M$`lQ5LAA#7m7in<3 zhCigaiP?UZG2c(=MTMo)7!!uP$X7GkwgjL8qA5ap(wWe_pAwT9DIy26z@*cQF;HE49DWiFpC6 za8(|K&43NE-H$w->+bHUs z31BJV!G);EPO0{TQc(lxxbo#BMrZ)(;5?<4)1R@Su3wPm$00qLyUI*H*bh{?%c9aU zfnKRx0nRt?XVajkT+SC4Iv)AF0G^D1v7@?#r1Y5atZ z;kq!XQf>^hG^}uX5vzis6fSwnZ{|N$fdU5~n}~C>ae4+cNxxBE_}~tMH%3>`A%J2A z#*pwr4nEi~p5R?rj3`-ceP+98_2R^k$>*RmpnpNc~2 z7!L`fr3xx@bxHviRzHxch}UwyXC+f=rcm{}JI z@F7lgJjkczr|HkNXTAYYycW2s^&OTDFK}sH%FCCPfJ#t&#Q>R>b2T7z)En_4-G{*gSb$Zb^f_>mh(iBfU z+|!9^9-X7&1KWrG7)V-8?_h&2+%MKlENXwqjby-h3X?hut3mg=9*w$X)o#Y$uz(I@ z$BqGm5E7Cn=r51N$_T)?VOmo1hJzB01kZC6sc z4qsv_W$^eVH&afZoz?c<>MWlyi32h+9i7F2veOX!t^3o`PiYFgnnY&R`#?5Tr^{?| zH8!AjOKf@0c51m73WB*P{=^NcEhT0=xN0-~5uni-!S_;Bk(%@ly^;>o#w6wadb*dM zYQE$Lio6(=%nUSDaxeWAVc{nK+L4Wle=MiRnkadw01APbn3xOqRf8$=C6yUyzL$oI zO=TKU5Ex3_cIA4a1*;2Nkcy{+sONB-2fz+&q)FMO+Ntr+ZP;}4+f}m0LbdVsb4Uk4 zv1j^^n{|X`o0=$wH?65bU0EhG^7xMWmNh*i+TlP0BA$;=mp-;iHA6l%*U#pg{Aq;J z&z`cb@V2qYQzU3ACJgFON;iS5$iT$@2@XYztMxZ(nm^-Ds@V>EBfbsC%PjVHeHyJ2 z8&ghbwOSChfu$lm`4h&;xl*bnTi&HfU8eV$Tv7`;IOyMmYSkRMAZFdqX$c3&y}9J@ zR!%8p3%)tW=XU^NnTj0k)*EqZo4sP&!JcX^#BYpvymG zj*Aqo4%WXQ6(_~F#V=dAYMuIDgY#7X1h}Xi>`ng#wYIZBi{#05+co{IJisPbgjgya z8y_>l*~7o7z9eU>j= z|C9gvPc-QNmQo9y@=uXV_QQ_Z0Xxu;PT1v!82Y}qxyZDxv@gak#+|e-)NIc1gJrCN zwK(1&N7_|9IKX=uOwt`58-C}WMcd>zqf;Q{e{hB!7x;*r z0+r3?h<6L8^>-vP_0=g>EM}u{$haS3@I%AND5&TtxQgb>4&=`q+W~W5Jjr}X(+{fl zuHN64Wz&Bjri`Yy{-{HMfX4bs)NOPc@Pfy{^tD*jBXZjkk5D5I(W`-2X6G4hq$S=7 zVuHtPDpi`*$g$Q({^pcn{ye6jaL+F@YS$%ey?1bTidir@?{7i#V&Z=HL!6t#gHRJA z_I3nv{XFuU9-PpDhlo=ic_8@d$E9~VgDUD~M|AY|)fb3%XTQB<-XG#7{&lSBUgk1{ zZCM7P5@T6rPLFQz($=r6@V=M&EYxs+sm_^<6gs2JyYDKUBg7UN;v=LuaiH;`ubLXM z+<9@DHTlgc4W~UmKG&j~OU0-u*Y(PTq&%|(>?GmTFN zJV$SlCH`Uz)oe@NY&l~RbJl@MOcn_h=esH|A7_5gU&+Z?dfPB6ps1WlTx32*_qBxrR=$PBahtWra$d%yot{P8GNaJ zVQZDl-wgDK4T8!!ufV>o)d=qoR1KiS&74wqnL*XMwCEil#h(|dU~Imt zt%CY`Dmu`(4!mI|T=h=i5GHNFR`-#SKYi@q|CSXgg?8nVzhWe=>&C~G9)r?F;k z>dADuk*l18oBoS87t>~h{74k})VfV~?Nyh^yu?a99)9_;oorLlS{Gq9ztF8`+z>== z64QN^oEq!f!_OEXrJB4W3vUhfi(F3c;2a3*y*U)i{jUZLm}IY?FHaJ%7l(<9|LqcQd7-+t>i3}imMQor`mmrKT(0uJ9O ztu;x53=L14984Lw_E_Q!{V|^3F~Y4z1(l$h7;`n$pO9kW3`0%dRxR9!q3|*iZ?WBEvp(^C+wV3UWaOU zvDwQ5&UjNLEDAwy{Y=BaBLZPmEb^(aN71bvl7OqdiyD&yWIjys4~!4Q z=3iVX_j81nJ!72Y(O5Q2ayiQpU|0BkFepQX!ajRWTiT@~0zU(L$v0|_7ZR@XX$wmy zMQd^)lv1Ga9I)>;^E8t=28o=$&}RwsC3&SB>uYTXsJ%B`89!&X5Xk1MlK7#8ha7dO z7wMF0;Xf!SLY%D%6OKjUTbg(N5tbY3jEN&qx^+=qsDbsopgH#EWg&A95r zSPF@L3HLU<@Ge;)He-5$c8jTLD6K$()nZBXIpJgXf4!fx4RmNv9!(ueYbA!gB&5CX zFC9fpzzy!&4m6&hUH&42Qx`WB9SuCkJKbOsZ>|Qi3lHX(YD0_Bt_OAu_14&c{C?TC z5E=JO!o>nNhNi2{==7h3^^KVQD>QCy=Uua#>+0?sW4^F~qRJDk_fD?o?t&i5h78KZ zNdpumM$!7Vy+=YT0~hOq8X=ik&*b^Z3z5}Zqv+h9Ps23aMWsy>I_KDTSlwGQ6tw;I z%=y>5kO9t-Ctfu^^htt0HisX^r@cwInaEH>sM?mm=l-YERb=xTu+|TG`~`|ZB12u) z6j<}p>TUkvZP*j6;Htj9YlO&&c4=iVT+5Vi*zxOS(ddK=qW^r{V1!Z81xif+)G8OR z!$cX56)Wrp={MrttGhFCwb|E6HF5BL4+MlWLsWO7%U3VI-fO@xN8;ABsw~LN zQ@TOM?9*V4gU?POu^rh-xS?G~)J#x&;n{Y?^OI3N|89clRYPLQ32LZrZIN)BJI#Z7 zes7yffwpy^0tEAzbR2btks669i$@bdZdeFul-$oZ!<`fl6{lOJoaD|(b3P=izPFyP zBbMhO#5UG_ziZr^rz;L*h6E#iXQ4*}=+C>w_oQVAB9m7UZe>GR8BA^$=-wL1d*&eH z7M*~cRB>oRQg5`B@m$D-+OI-hpIXNoiRU?3t>Hvf4bBdJ6)7PL83(HnzYcB$D}5jE z&-*MFNXR1I(OE=p$Lze6T)!oYnz6?D-3+-15k8N*UUTg9lKCUi>b~QlF<4S{qT&(B zK1poa!yqGk>WzWRH|#t=p4 z%#^OrqS(IHkZjC*(n3+S89cR@z~nvGXlApo?P8D&UKTM|wdkLb6WL)v?vQ1pM)8Hq zfpbX>`8xYoxCK#e5*hhMg_g8U@T59B86LECPlRYNb5e`LR6een{?i4Z_PAl*e@iMw zuk?7OdDvuiJ8W=jN$sH>l*V6#D@OW zc?X>JZK%Si3A+y*;)J1x0+L}mosgmB?H*>9#pZAaE?3Eo%%+?)?yyaH_DPqAx~(Mv zLiWisFQ9=wbyP7$0V+a!_D-m2cgvq5ct=980}=K`TeEXxHNksm224wdj4Y4ec2h+U z`}6ajItb4G;{IWQY)_wj`xulKCwm}W<64JQ2|pj~acq$5=#YqIR{3NQ;Uoh*tQqP` zQr|t}oD^}y@pc5|gu!fDhnFT*Y?VAN_Hba(*je38iElrDm^<{oy;33hcbwkc(#{&h zuv5nG*r}8+6sKQ}{YyMvim}W=%BZBt=n!ux1~03*7P^#*kHCLwNL{hoq~@IF85sV- z;hhpA8R4G`l|}a#4Fc9{osn(a4^qua``&J_13-8d6Zb)P7YA<8#a^5u-7;aVByN(hWYml2wOVpaVd z6#0l%b`+B6N&56{u;=or3Mv7)WvTr(etED!^mVC};t~Mf+KXeBXQ27`IY0i@fVl8q(sx&jlJzM0_fgd7cq` z)oz_dedGr7C8r;Zla3urjWPf-tYiF>+i1ZqmWMqqwl z_E|}RWvNYwIX%Z`S1~zL&BC8Yb~`X_dfu75TQr+O=rM*qE_%}0wC6WxhMH4nk?J{! z&z~W#jT;*gE^jO&%6|rHZ7PNp0HN%xUgUxIv{DgkGl}eW=4F@dBq`EMk^Q4TsLZoG z&legK{jziY!Q@Lb(5s@#si%)9`>R}Z&BG?zmwM`q=8K)i^$jIT`oB>2f}N5A$OXSpU2@z{?29+fvQ&r^XKG04ja^hLS_k}YdYrJiG)!kU;YfTw!wI`K#PKHx;#RG5Dd$hM}O zz2!JpAMz=vDqyH$eBWx+nZ&;yx{seC{QAELEqDIb4I(yAG(4)BAAFbAn2%K3NiC&H zQmq<7*?=SOsmf`>pGdGjIVaq*CkhW+_Dr0QB_kv-Sc1cKHO&?5-wTsaznXHRO~zi6S@rZ<-Bz+U)*+^+KlEtope0->1;Eu7vIK_BRyLR~D*EU8r}4$CW@l4 zcw!)f`tyZCK zP1*i~-M@c18>ib1V5T#Z%fw8-#iZoP^y()-qok%LK~mGToswffH300u&b{a8Z}o6C zmH*)P)<9dN!IC=kMcP-bUj~ZkCBI1+%DIk$4Veq;M0j8sZkbT*f&Yo*iHHB0ysvCF zXXVJ&s*uynD!u&Ysq-`4KIVV$cK6OdX*@clKgZg38x_BkSh#?JQmRQLBF={YN0W^e z?cTj~8L|Xl`tN2AdX(=L4|?gavwvGYD836nN|PWHGyj$C3uyc9S($93#jC>km%$<{ z*uNp+SnShg{TqRk%KquVs#@F}jo?&=PN{YpnQLI9)mJ8-beX($q4&sW3O%rr>TjK- zNveK#couloH*JwmaaCSZvc{(F9D=Ii)a+Eww^%x}CLr)p?W2m$tXJJ0&ri zZ%hOVJvUj~BKCz%ihSc-nOWK`^b|V}@=4UbTNiSR6g!x)W?mGt$XYSLH|dd1I%#A0 zFVX|=ACQlS2CM#0&&hw_|M!k!Se+#S^f||byHDaL@`xbTBq+mfWc67*49NoDHC7h zjiU7v|4qNN1`A~I)Ryi}MNPp3&!T=VjGxU01Ko3*wsL%EOw|}P^p8*+4q23H6$*`m z!YABJen786Lrh^vN8XWS60aT-z8r%&Go~FmCb=F|fG<2#**HoV^AMIXUg>Tr2Hiwa z73TL4S@ZcTHaYR&Ok(zrukN>|jKYip6(e+g09Y|ENmf~8FiPM)<+8@d4q`BKUD^_N z;)R!=SS#h{;KPip2Ed1vI+zrjIi`=yWAKM|X#*uby+eK>$@eu!elXu{?4%_sbaJa` zNs3De)NM3wv-RVbrh@w%$3F4t1a4kbK&s|``Qn!$5!~V~h7N8Yu0=jzL?Mu$j05hhVnt>8%aR{VrtJaBFE-1xR$WQ^mb34k9hr%N-| zrb0ugix|8{FFyZzbLTXAs#2MjDjWnLMP1|LQ_h~Tp=GRnYZGaSJy?%guqC01i8DI= zJ93tpR9nJZ&$b4JOq|u&K%;d6O?|XfE8tZ-)i-3T2dgYtki7DF)T%RMHU%sF zaY_?vjDYk!m?B}{Fd@809=p5K)RE@fj0cu+BE~Mw6&$F;0Drg|K?;YrQ6C4H>o^`^ zy!NiZmXjJl0ZLyE$A=CFaF7~VdRE9TOy@e21W?N&Ansl;~E7cY8c;Ob{YGm6CxZbdba;$e*Vay6&4 znib5+OEQ}8H&-|eL!An`F4vcWrM&M2TkM6)Fs+;5yRymJOO##XJ;vftg$bAV)rcUN zgkh-ZN67x!?l@7u%%Fnrm}~csI&LzZ2j#8ZoVbUb&9=70nm&JYWFyKvp?8nPio%b_ z!6)DKJMJoRs({l9AqOfV{*?LK;P9=9pYzN zV9}DE6a5Tg5x*Hk_uzHGMr{}S7oq6(@%KrjBPuR~kdrqLR#tbN-w@%m;p~V>c$t>l z;Ie5gq?La3xKo|&B&iRV=uE2eufL+6fc3>ODCvkB`2HkYwDH_@q_BC^**Rgf4eVOs z!|D;S^C%>V<>I+^W5m?>=%6bRN^3JC^~i!LB9k&>KJeQ1+5OCPER@^WiyoZ=Js)zB z?L5|$vILKBxu9h10Bz>3P@cscx`}k=d6#%+J)m-a_QunT#Ck@Bn?I_fogTP5B*S9n z_#WX6Q=Ff)`qzzU5xMmsjbb?@_6(kCwvi)gijlzT`w701*oeeW+D|;OQ>vA;_H+-V zRMSjFOQn$qR#F{gB}=WkUQ4)i7_gI76o&@;;N8T;d6C6H{hY-uYy_Nx;{P zdjtA1ncPL0i(A556p_OFezb|x7QCerJ8n7`QA4L7+cOILA6S7$vWOm(5+}Z{^ml>n zMI;pZC)-GH9M>;cS%Ue<{(tH2b7R{?sO%n~QTjM!vJY|Dd<60hPXf2v%82Ri*f8h= z273iJ!!qm9X2b{*sAu~LuCBL&a)hAod8enSV|aMW-P~|5|0W zCdXqjn(>T=L(*HgT&`*h?onKe*L)8?pMlMY{L*HV!VY$djZ|7M_a1Z6{5xKNx&iK; zo8`~2}exNw8cqLyx~mi5#VwOCB#MZS`$sG-SE;{xUtr`9hFg zmE;BNx2dIgwloSoTUF21uM*@KIVt8*3g=uPn{xS>&q`s*vq@|qhp0FGLebt#-Hvu_ zwsxM?B9F<0{*$Npe0!!y$=!q&gwYYzKMsT`2)&3E#Q4|je@z4ql$mNv12|RHNNvX3 zNddQH`R{K}9E=j$hJ+{GLBul`RxPmnu&|kQA3-HQPN1}zd_I2lli!QoLlRiL1d1tB z|1L(3e7tVQl=&JBB#7J})8M>ltuyC7bshWF9INOt>Dqhi!XAO$bVQ8Ip;r_h)qqP@ zelFyVj2@k4dFRP_=OgRfZ=j`LHWyZMWV+zbNJ?qm?@UCN>MX`!Xg}IhFAjMU4ZE`4 zAqakA)#F(mM;~*!q@(+;A1f$wsU$Kx-+{UcvDbMVd;Ku8Ae*|T=x0H6xdCi3;&1De zHjlijgW5$1KcQdZn)Hfu<9t*H{^~4-nGLl_*59f5HR)M0k?CHTE;dx6A~mPuCWYT* zi$HBGP)H6L2!Y))GH?nYCQOXOO29pK ziJU=uO;@!o^=A@puk1l(V3)Ws3<%YpdX+j)q<^xOshYY0ajodjxAIRa!w6@PT%VdPF99R=Nft;q0gFHJTGAAyk6A4xo&wqRoOeQ*fNO_b}QVy3(^_0}E;#U#A5?fNtoT8D*9R*vR?LVAS z$@k*If<`tc#P(l7X6YXa#)Z=m8<8Vg+q5uMq7fdx*U%GH&h1+F9X{hNO9aG~&^rit zhhQJ#D_$|Nl*X~zU6KW!BSxMsr=0rCYQ8xp@TB#!V4e*o-YN1v;t$DS6T~k1Uy)O= z+szs5-enIj^H&Z~!C%(0t>LrKZyyKQNSJKY(CO;ZGtqi{Agiag=eS*e^71tV#uq0u z1#ws+h%`e)j}no%Y*^SBL3@BU69MDW;X=T=3~fG0ZzI=}Md`%`*-NuIl)NTbgY+Ab zS!*T%n|v`Xnu=*}`rlW*U}=oc8!REi1^nN9whrvqP`lG1R&v}fF`Pw{3N=sk;(lNA z!#xnV1)rtfVkIKc*O3aP(#`(NdMCP0!snUQWkmPQybqLnyu~q$s*}wr)PnatSWsGb z?vXs~x32I{4|qEFoPq}B5HRUYK|5o!EEdM;W7@i-)@_LJRT z(?(wk`TG(H2}snN&ay$z_oI(X(B>eBR9!K*3$-l9Ollc*rJ}ob{s5m>dNHzO+4Qi9 zXh9AA7oKcEq5utPm|10p88=Xi1h0Fn#Gbz=qc*^`)^jFWIu`*86(zI1P8pu^$zxFX zH{6He%yJP$=;HL>4b$(2FWlwp7R~nF(1_?P-9-VLklFa*bU4j>yp=&IZy`LqBPiJO zb%}gJ7DWO$s?_IJZO&4TX*p-FMkIEyq=i(8fIuX<&Dt8a+7@1M?@RHS>I>l-p9vGs zN_A;zAZPF>mA@1ZXXu;e3WB;S2tx+v<&ZKj?Y1MbglcxwYiaovIeVX;2Irv<-Mx^j zX;h07GyyF>9hOb|HjnQ-HnUvy0&Vytx{t!F-vm&ocPxG9?OOM-jxTw10d026iKC}M ze+H%r05t&0_-Ukk4Pn6bWUYFX-nAHZN>91g;Z;BC+`nK zy2t4|!m(=YxJ%Xzxy-2HvQ6}o;Vq?XTt2;+1_FAi%IPPFlW_!sIef@51|#?_`&8@h zT)8a1H*vRHSPj_yl{xeElRLg!?eqa>c*lP{9cWF>1+LR=v=bXjMus8H>XK1n__Iep zWug|Qo!io?p1ivw>qxPt3&2^P&<^~g6)aXK@5$-izc~xr{54X2oSAtM{iM;N;vcFD z)#zut+pnwCFG@I3kt4Jeokte7I)4Q8SDzu%CTtsFU5tTG9Ha}&6Lds*%zu`%oVZr( zTct3Ia{~ie?OV;vmD>^GuzI2*;#7=Nwbr4UivKP`11};QP*w|fR0)6`$0|6ubqaO? zrA|m!B>G)s`hq><7@3rDY_&i)X9R$D4pD{_WEH~99M#gOxA|iVj&5qG)hgv2I?pOR z6lfl1f#p33iksyh!j=ucNnOSFFQVqVqxAm|+lT2F1=x|brDlarWv3~fTMWrJEi{&X z@SS0?1)kjCzU-=^(?8j}*5!7!w}l3;Y)|mRq4UOP4Brtp`*zy=o7VZh7?N1WnnMn> zb0Sy<{;_go>UC+_kENT8+b|J*+dhDHO-jEF=qP29P8tAmfvof7gEJFgHj7xcTNkdv zxnQK+|Ee0B2mWSstbmxe{#|Zd_1y<7r|t*b^6{^vOBvWd-WFgJ0NB6gQz!eIC5n9o zHD90vxI(?WSeiGu+6JqEEVs+>sLz~48NV!Mh2veklmN`1`1G8dtvXC5E`W7f-Ju4W z7ubBOvAY7;rijP71_!!1%6iR;L@HOMg4-M|Mit|#-UdBU3&LQ$~BU8xI zY?+e+HgUjzTfF=5PJIjTsaQTF&(`7w6UptJ=aWy_Uq;O7_11Mw^kT$-lNesnK2zRg{B?)T_#J4YPdg;PN50$FB}zinasGYG z%l?8efcf7>w{Nh>2pz%X)f4K!2241J}tk~(q7`mv17LK}dAr>D7vc4hM3I9jD#GZm`ZqM6F+v(=p zb>PjghcArY@kvpWm`e|*Bp*%mB(S##xEVT|ds-6fsx=F0Hk;?CW5;|Sh$wew$!(P~ zcqzG6sfj({+LBcdQz)q95E;IU1wj$!3qrR`1Hv!Ur5fT@e5zNtk|$$ezvkQZBkC+i ztzYai!0#Ku(0{X0ZBI!8Ti8wslDgkox&ky)P4%ZWQSYhnlo^SK<0r`b*Lf$L#&6X& zj!&K;2QTj)hi(Mqd_*rnp2%!_>au=pi93)a5xg6c>nPYp1y}}H@MLvFGDYUuKqk{s zMwxd`VgS`7wtlF;S7>>3Ca#e`}ox?U$}SH3!?57w1Ha7Y)K(;AeSq zpnG!H2<4Y~S`GXwK68`slIuDl<3`1henwAq;RZOl2x!`J_v-onetPF1K@Tw{o>z_w zT$Zq2%ZYi$T5a!c9ign6kEfZE6`K#WwvK~d7?mv$Kg^UOA#uTgC$>z?*WsR2#nETe zW36!@Z!Yc3DL0$nkGWYul=0Lr4G-P15G&f3IK6LG6?xle19SrN&DR9o zgFAxy6$MU9MF#WpHB>(z#2Zf^9Q@3}ooXGi({+vW zsf|bh)h_vgCLh*Nb{rG5fc0uPZtdY|{}+{_!xVE)nqrBJcI=R$6#|VRGqY30kC<{f z>nsKt7aNpLD(8y?F{{w--!m0+W)w#eAjJUJQA<}>?C8TbNr3}d-r6;3~S9p>2Xu+71&dr%S1 z6hiV-Cl{rbn>|zOsY$`OZnqki54>oAUT|^!W*?hiZwxf*!O?b9&R&g^6?1|3JPDO2 z5p=nXq6e;Vsx25M_ImmwyqfcLLoeg6xZHsVOIdViiM>W}3>kg2Kb7~| zWk=)|()y{9J|G{p2IG+THhIiHOSdpob)$>wuvZ%A`)My(2I z5xmLefB}>CPBug4R1Dnk_7zDScv-TElPGuma-#lWcvX0kV#~j3kHbZN zDUtG02gAz_vYqB+E(ksS+FLd_T`B^zr{@VTuGQX=!~-~~LRQsPzuyFRx4@gCkx7iU zg#Q-WG=4RHJ2dG}h8Oz9{jgI16{2F8$82_kO(cxnD>)*e%?sU%bxtuPipQa-rx=ZS zdIV$~c%#xx3@T=pf7+b?XEV<0o!E$YQxHoXNlaI|vo+YWe$)@>u85dv7-(&=^3wlv z4YYF7tI$bs`i~oKJu2j=Nd=?^eDxL}x>4E*G2xbL9k)6!67tx2!v+oFceUQT zwhu3ibomx6RpOfl#qkD-!wG>>>rF`;r~{1{araiz8d|~vhS3<`_%KM!KtE*rmZ4q?2 z6uNHEnGzx{Pm&rX+X`EvIa)Tvu6+xYfeE1>N4dlROvZPj7D5$89 zr0{FGVvFmpH1&hQvqJfmnUBwle5*pZ&S%NA`y+bh9`B~$YK%4IJ#(_Q<&n02W%euf z`g`QK+m{8ZbXbW?oS#M?%jmlT4@Ul@1la46Y94B~To-VXQBp|bPDY!@efMzGdq zJ^csDJ3WFsOmlofZa##t#}vX!EEaVh2zwun*UwghEhS-CJ`daw5D z=WD(I(Wq>y6Z3Gy5p<#P2g=bRGwtI|E@vl}naMuie6Q9T-<0J%J4p7BIHj{R{$Jld zYF(M9C!j5D&r`E}v5j3N2PbJH z=Rap!T?>VoD2EKO{nrtN1`O~RaE@k^QSVC&$Owb3Y$@%SUFb2B1@55<+c8U?Ul^lZ zTot{JE!S2ZylFwb{or+E9l?fpGvkI-2Z5O2eCy&xX6rdphce7L`ewV5h-w*pFYjuU zus)6^km0GTqcM?F#w{Z`^c2sE{P=GWEbm&lz|=za3Ul!Wx*$)<>3>#Nr95SIw>c<; zJ}9C$o!;t^auPz|-a42dQchp|rge`*nx8d|Z8ocCa8Mt}&b-hEa`i%|IwbaZ*hfj9 z@xyk6l>dDHAu3n?sj5dpi0fxA1u{xmnQ=X1(k4zqVDF}Ae|Q)_kkrd}JhwWJ@DAE* z4J}lZEiQlcg^#YgF5<}-k@1&cxK{SgRE_?ryG04cWedmt;gyXn2qj!c2{sbhM-K9L zd&jx>^BiGo8DH26C)+;LJG*$)+WSH{Afw*_qukW#L2#7-+}OXclF|y>ACB!b1*ni4 zIqTMb#%xA=#_ZF`(8)N^9uyPVLu1!jvpZ$tS3!9I&5`%BE*w3 zjqCI#CSQjGVo^O1i=i|_q**8W9=mQtKf=F}#GvO`g|j6@Q8D@&Y#@gBu*9eILyaqi|jjiBt3J2kq_ zlDb=pi-a~3J13$4Xas}@gTbB2C7iZAbzz#}^an8Hf8j9-*fsyL!Q+Ps(FakiP=Pz3 z<$e4WoB--VgVQB}oSGQ>qgJ4ruJ^7-JLc*jM5J2{@%iWwYleuB2*!`=z4$SX0wj#d z*h#PZaBOW`c_)9GVnMs7Pu1tVt+1*C62~aSvOR?Q5)auh@6`J;==~5H)sqN@y=rH~ z597IPuuy>uqSnxhX^RRmmru&9lf@gn?}98Rt8#d-^rd*bFUec{E4&yd(P6=wq3F&o zJuY+?nYzqs_gl=rcXmwjo^^RO+IVel!&mEtng^?v-QUcg(4@SB9JCLOgN;}aJR)az z(eFug5qCdT?_s<2(rT;5>;&i5us!;!5LljtB)y>72|fp%8j|e*gpTs;RVP=gjx`_8 z;ff&%aT>N8`-gqM$Lnk#e*HN;i8RY)lP~c5&UJ^rDn03n^@bV2PEXR(^pCTZbG{c^ zN=?80Qj2=&+-c0{1mDun)0>79i>Ilf<3<}myWey`FtnW48`S*RF|?yJ_#A`Q$~!p4 zsD*^ri>Vvcws$7^0+|@oe(Ibw#wCu>^i%sULz#TQx{}utTW^R57Q2 zxjbJo=Pkxkfp^G1wo=kB0y{qD(xXy8&5pN++F;Kx=zZd1ch$@Hn3KJH`;T}UtS)b$ z3T7o^{ z*uC6+pJ+*Lbh=taqWN+Pt9ts7`(y|Ft7V<9KKAn$m|2gd zW=$D&Cr&Jh)q5Z?=-iHV?u68wx2RvVkoXhlOCTG>0JC!|sP*g{>C|i&ZTK7~Cn_;w zf6(ThEC-q`6)MfGT6i|Gv<{`(8d2iQ`Vw!2a88+6H)id;jvF;fibJ_)c$8lot*G>s zZ_;*+U)R;DuOPZED(8$^579%L$Po>#PoH|($5ufGy9;Q?BdkK?Y?V^C`#Rt~7?5fl zL5pTq@_`%rtln*pT=3~F>03jJi0|5zovQa)Dg*>Zm#F(mBa$H{KuLj-1LPw7S-E*M zXdm(Q29+-lRnKrYc4qdy2oAaSeayrKMw{!UC1xp*;{Tt`v(bQHN|$(OS`+Cb{6z$a z3IBH-8OTaR06Tk;l1;MyzlLdqzlYVx86~U!Yxw`Z^-qa=Cl|V^rFSFKqUPN7szJNA zgu2N@CBPz8^PS-1IWywvhb{VZ~RFQsZLZ><#cjI`mBnWdm`l2q3D$2F8oSEu5 z_q&@Db-#kP{(b{$N-p*;_O`(RT04}B)u+;5m|N-ea$6JY4Q@YU`|@}C0+7q^7t;|D z9#~1wb|hg?ZSgSG7E^p{M4kJN|oH1s+fn<7TsZe-q?-M zWi^b9+|FXYd@u4qWQFI`bXzQGy|UecS>o6To_N{=+;(%as5GEk~;xy>cMYHci zag?)S85|vT@yDZZp5ljz(%r>k;k^J9Zz-*KODc#hrHlV0TH7Iu_J?xuy_3wEhW~Uk zG7|e@RJ{UNtgSmtts>JkcLSI$Lc;%H>m9=*TeP+94m#@C=-4(o?AW%|v2EKO+ji2i zZQHhOeU-KMI%lo(z5nW(Kju|6W@+5>9?!Tc={Z3tCDIFTK(ddD6za~&KAamn#`nsC z7J1^9X~b32XMK14;*xV02>hLk2TeYsYQ|WWE7f6EzqJm0lqaRYO%L_{)rQj{jVrDO zBdLBKw&k4(hCSe`edJ;O+;l;QE4;N1Xh~J>+W1QEwIGg3fODhi>H@*+j`F242^r+Tzx0!hf}sR zlwRsl*WE~LuFj+kQj{tTE5l3CyXpd+fVhz+|5q?J3w^w~4R?1;0s&8Rn zm~#?-8TY=CUZD;+a+_;t3fU#5SLmE1TiW9_+XE`d~Y zi0_(C`0!J<#AbV!cy)Hc+3|tIg9C~FB?8*Rawa z_Hg@x=bfSm_}OT8sWXxn6Yn_@bIpIa(9z&?ry1O+a!C)4`mzrgy)?sR(OTOq;Yt*G zlJqm4iCVJYF=p5b8savemtqIGHF5-#O~q64zcx^&9-?OZE$^hafmBId|NPMw21fe( zwou@ayQ_~CZLL{2P)AG-iVwG(|HvuDsEmmgq~-&bv*)y zKEZnAgn*|mWCcqj0TGRaI`4-9#78i+&a2+3SQI}U6rEKl#MWAO1THP%NiMc^ZsKij z1F&@r*g@(EjgF!z=6dEqKr8kYn`mw&ry02(AjgJJ49YQ|MhKT8SuhhqFn=z(ni$Cg zl|)ZjjIF$%OJqqNa^iQB$~95V?TuhJr}k!HSlVr5c8O1Dtq%3R1$k#!*ml){Up)GI z50FG^3y8z*^7#JEW_-wEY&&8`{?{aG==qm$U84%E;RZ(WLO+dI7&yYq8@)t&Rln4 zpnpCZE0ZY}THjj%JTD3HC(^4jxLe=?UFB5;Mew$^702*|3n?5BSE>F%VTEAKkHbK` z*C-S89h1W2o+Yfl9Q_~MqN=bHxc-q^BYhm2Ac`oxzrZ88+Xdz-$MeB24JE)hi))$BTq4cC zit;p1401gWDTe|t&1L#GQy&n9*~cW%TLVIglt&-gaa?13I1>%8j)>q8gmqun|x(c@tixo7zqEbu_|W3W5P7}S^X3tn?~XcFmyLVVAtV|ucWhp3Ps z+8o2Ef`^`O@=AeM?O#a!_p^Z5+?AmCfQ=i$#`(xL{7K$%AGwbrqh|_=`^}Hw?hfy) z?5?y*AY$Qkv7>ro{Yq(XN_D9~wcPA7!^}1K`r{ zy`rXV;@z)vW4$-T1SByajijfAdhCW4g(I{kPwJptxrPtC5Rs;gQ`azcy{r1P$v059 zssj@Df*fNazRb~0aczxEsrjWrSSw(&8O7rVR9Zpdf03shHu3s*%VD>i9c=< z`UgE{Cu*f)Ubr0(l=yMD54_lxao|~}&^{lE{Z@qltyuLX=Q9Ew-G01PjM$aa^@7lK z4%`}EJ4&REMQMxyzog?Ug~z zm`$bUNT`8si!%yPj_$lq4WJHtRd~bXPKfI7FJ@mEyHNCh0Ev7LqC;nX&7Cgp$VB(0 z|7LU@0((Ik&^2QR0c_MU{373|rs*pgw-tvXezj_?>>QCE2HJf1=Z_R7OaXn^^zSM? zRM)iU7z6h!t<_(RFnZ~bSO`dLm|V9B@$BICc6^WOBPOkpK`Xg5=)2rW290oeBl)g7 zuXB4U7X;Ait24!JdKB-^a|&G0u;@r=L8sNLwPRJC)>d!ar1VJSE`$jEko;s-Lq1Hm64Mc2m#d<-&%o#xDmk&zc!>IGhL@>c7D}Z^;!w7CcYZ6}h?aGDmQ~L0$#o&j8=4C=< zpP-&yZ6iG&;?0g)F9TC0$+7PP5?IgD)X&sxVzak=p!uJyk5QvMvHNx2oipD7n&N|v~1IxT1ckk{f>guRnpzI&g$tn`gyW^*)7T32o2 zeCl`anl(mbu=+i#1^&*QDVKQs?bGI|+ni)*z3rJ19f>7$rF_*JIu0v__gBTFf+Twd zPImi&jgw)r%0ger2RRRY7NL z@Fy+56+Ih3y~ifS>HT1|%(Pjskj3QaQrP*Ej1Ym!h2?90vH6TwdTuUC z{`g0cnl2`*hWzq5E7Wlxd&rj1+rZV4B>d7fAl&;8hG(H~+bIS^+(RD0?U5-qx$eq( zOf0>NPUj1wKP`L`O7j!xZ2M4O>l%DZrV)3`A_h{e*tRCXZ=XlQVa-|`?y+G`7k&5( z4+wTe+jz;6bkN;qju43s34fCMH%v=gjV>roOa9!^+C>so@qM;ueJiQBiV!NwjvJzF z5k#@dmE-A&+q&hmn{QMdwt$Dp;jymB+M=*;6){y0Fv=?1bOE~h$sET>Z+wMlQ%JJ+ zDmA*#JMTYBjebJ}Grb(^Y-k&}RreYXu?P)}+H(Tc1K!dga3#-$B6Cdf8y9ziD+3zM z?joF;M|Ncej`BCBP02u`=XuDep*8tAxI~3!OuOYSyH*f5=yKurCrm}5mOkz( z+_R~Jj(eTulbNQ68bq$=rcS%y0)O@C?1;PN{rI>_i{ZJ>xscNdjF^le$dz<;$ zBd7-Np^`#MN7@Mf8vC`=_33hm8Mpz1Udtb48SWjjuFx~v3pj^)>MBwUaOgViP`-X`4!xctdi?IJvZE@!bQ0`(#~8ZLPNz>!(l96TrT{Rs7W z5)X%|sydHaIy=>Zky zdVcuzBW7y?Hl%+#Nl#oIhm4l^x7vFG27>LY`wtWV#fC1~cuJnSo%W1m8pno$3(Ckr z(m`^lx%nwcSn44=b{fhZ87U+3a(-B6O3WHQ(^Ia*L2x@Zf*bO)P@prXaK-}c0aWt| zga@NmM7og@v2mhL64&rBZgmwzw#~iK$L(vC@tUE;_=239l$y$y2SLNY_!2FS!?j=Dz+&g1N5^Orh3=X)bv+f6d;p=pC*0nj~ z2qUks`E;cq{G1*?ii`ZftKS2LkGRvfzE+#IR4D9QoHdx&Ci&;BtfwOidrn90}_11rmbq+UYUCX>Q6U4RlXV`g&fW!}6za>WKl`oCB zANroxLq8MeK9+TdmCjK@Bk7Z42a#=F{N1zz-cOnRg6!M#xp&jzi>@j6%a9c>;!7VQ zy!<0ACDbyFTdlTAQnT~0foBk9oAJPA3cgQ5akAsIpoSF1z9YA^r)aI~J{oI%-M2ZP z2Hbw>757faw`O3h$Gf%S# z&atguKJ53m^FOX~j5_rY-4L6sWR0w_aK>Y%M~tJjfwP0HpDie=*T*i)20*yZW+xm~ zddH@}F>(s3KZH~BIG1}$O=<`kTBs5XC1i*{0b2fx-F)Wjwi<;2P6U0FRkQNIL5>13 z#RUj{6{8K7n@Ixd5*lMS5A5D?F69}Dr(n)siGvykxdBF3eN zphZLf$ytEZ1%Cnvz}_9Ef)ew4CbD_FDu}jbgf_^A<{sd!UQbNDN4aOV09bfrX!JjtBrMsmP_#oZ%SLW?jB+rN3(Uj!%1jsWnK z$H~z|Kh5- zS-V1Lxf)QoSnfQCpNL()`WG+WM-;%1+&pY+?5%}Qy6%EW3U1aTs{7Z?ToUcAm zKs0%L73I^G6cer!r4&=GFX5`n&|syc@CW8YpMlN&ToeGicFpr6$Qfv;LqHE23kVTdDAp^0%Q)SJVIg! zk@}XCe7ZyW+n(vCPr=n!_+{lN;d>d}@ibA*k2g z=r}bQxzBEbK!b`ZfOj_vpO@zmT=|~P?kdbcARPB8U0KXbr3dnJJQ54woz-^@xnQbE;4jzCbEVJ8Qq0^N0zyIH<=@9{L$1&%8ByBxcu&ZX9~`?RHEnW7w>%_9Rl zY%z-M^s9NCD1ql((d(9#{kzA&R0Z)K%=mjJ6f&g+O)J**i{l7P&P|bVjJ$NPGt-NO z?^xXs@~uvuFsjL@kZ$L5PX~FCGvP5*ie#(3 z5_2+sb_NP^Ubz0Fx1gg(;?kEXzmVa=I>&3BHr?9L#T#rUW#-TnHH6});gC>ie}2hy z4u|SWL(`OL=R&-Cg4&LWsb(Yw_9*(5aBBXewtJhw;R~=_JN6enqsp9S^eZL_Po8;j zZX{A5ZKIu4F52UN*h?61GVr){@O|A$O`1V=Mz-*EP3U%f1>4oy%xzBZdjwG9-v@Y3 zgY@^dMXi5DXH_+9otOsY)Md|pMMG#J0K%a3l}*VE=zJuk=w|h54Zn3LUSyrby?N8H ziFHqZX`z##nvrX_V?F_C^DbU&qCgjXQm^J*0N|MGoSmN&qL+?x_@=M9H@&Y>@(7)S z({+SH5Gz!u*wKR$q5i^spYm5fGv*CzDP^!IOC(G|yOi1&qvPvOscC3%eq0g1ak%|@ z010@9Jx(zWk9>zf3CbnvDC#UV7D1lk){`M8^NltS3MBqV*a8H`G<*TK^rzEgFJjI? zbKDqm9je!Bje|i)f-dbq$){tFTH-lUw52rv^eEUX(3&d*^9f_BahF8n5vj6~a{jN` z1ff{iKHY?8JjW5vB&5UlKQKmqVFoA*U-8`^9dvn9d=E-PvA#YyFqf49T}~SM3Vi$` zpBE!+Q>P+f;gtCby;0`?Jp1zUvistI5x1Y-odwF0--C{;_v_tlUYSs*e1^57LlF4JU7a8m2cfiFd%7$IwwV0WmihcaB_>I8cKfC7 zudT3L%gksULaVjfJ`~&{xAl$d@FJ@xuskmmfy2Uu2 zsJ{k;=IYtDleVm#cvQ!E=i9{LNzm3+cPOYjz^ zizK@;6Eo;Z|Iu``B}wXaO-QmEm||Ps2(XZx;yv1=G^C9bct7AW1lA;k@4`*5TY|<= zCcKoH*g2B{T1^N8#;)sFlKF{V`Ae>!%?Mu><$H`1w+d}epk)~&4ayYK zTbBIS@=TECAG+_`BIatGu$HGrQ2>t!qgt@Elo)68%#_NB-qXt>@SLZC2WtyMb+Kv!ixQUaU7Zk}#( z1CcU&ar9wrRStYoaxdX|{3?25bM-hNm|+Q>vbB_f>kDX}JMNc3xS9}3vO#39{r|W< zVq=A0Raofb2yfQqMuBzRnF@3}CfOB)8{k^GpzFS+o49Ty;WjXDL`-)YjnddYbIl#r z*WhkROCJhabhkcL)sUIRM~$Yuyhye$6cyi#)V(2|sXU|zMg zp);@Yj6C_2e9~>AvbQLKf#pT+2Q_7q}4tZ9T?VU~6)1v-}zs?6>05qpLebRDd0jn2YTXSDB! z`25dO{VQQlNXf8Kq-8*JoN&9|U3Fy`LLhV3M9ux9`tA|32Zz%AfjE<8TK5%u8(O$k ztEd4#^7UV-Pew{zfE?)ZTWD^|jC{=h%hB@*A=7@aRBrw&`NFcCMe z@jZp;&B9=gicmGo+@5aSdPhCAskZ2KG#aV`8)$UC9HL$RN2>uF@%B`J-!J~ERuQl1 z`|!v9HNV04_)pCvfeUkj(CvV-+XWyNh;&DHmE&)<26;vpurmm~Uy4WGmo1$oJ{@^| zSk_g)y&}d_3iAOBu$D(V6SSY27{zqvXo8cGvS_}^ z?`9^o&G!8&TRVF&OlEvmMFmdZN^JB9sU?UcSZjW_(&Oq=gRk~^^=@YeN&A$lurw)a zCh644<_-xgYApkE?$|Kx6&+C2Sg112+jDMI1l-h{JNv$iTpQyAHI8|KBu{i2!mS>{VzIwmH^e(0#1{BrS{5IWt1+?P8#*|qo4Q&b2SD8$2XT+EVy>pSWxq)e zFj6W1&I~_$_wr{vxjwbB={K1!Yc=5jTnLMSQB$$Y+RH+15IaP+CRR~c2nf4@`_b?2 zxOnY+_^6|6Q>D!MV|4W{G6o)EWN0fwkYdWB;e%!mPaRpm8L2Mf~-tHya)OSEF)Dg zo!I2+g{B$I zrm)l3{XaC7XI|>c6Sh;0!@iRk5`(i$C_$k`6n`scVcgIKeB1cTG^c@v=k_A3tkKVAwM(P-Z$CcC0k4KqFlK=XYl zf1F!X2gLqmte`#-BSLYt=v_p%d2SRKSTA1*MHP-~rG^Wr2c9_2l7uCFHj!Y#5o`5A z?GIrF^h#aQl*NFZUZw)&v4K_N>pG*g6?$Q{mpc!k)A!G63&(F0a{wkFjPL{TPn8uc zD+);a{K?{rq(iBJagw-bBC!c;bm^wwxBSRcs|T#GmN|fOvR;n()ILKniTR{ zR^srn1lSsG9cZfI?leNiHLG{ERn}th%P9?#CkX;pgccOlh0BSMCYodQ1&Winu1dzasM*g#Z22vLQ zkbvolxw=L`r%rvnKqajiv0=ztwG|}S&O)W}hveTR;QyE**-mI%^(WQjfZm=V@j4#h zPlKALa{TbjcUP1)dN|+qT3TeDzDx1yZ1UQu=rTv!l>@Z@0W|+Or`TU2$Qn42)4%$6 z_OG9%K-T*$@b6Mse3oM6I)3%vr9l2Hg?unCBK|*Lb7%c$DVp4^7IyljQHn|`f^1h_ z4LB}P^3%VntDbsJnj1f}m|T#3hj!o|-FWedkGtrJJM6JiFBYByC?U`Ck~i#r`iDXm zZ#{)KKr+@HLB2Y?06L(!ZGn_j57;30;kc-A`{mi&oR44<5pW}U{F7e)Ck?f(h?LjLz-U zY>-=$@ZKJbK0V@^MM;+^D>edg|kGMh2GhaUleQDe!a}8M{Ky^X861!&L(Zl z&4ge;dB$sJebImVxFw-JDSMAQds6}RZg=qr{o$EFB7 zR$MLO5NEa3NS-on#BI2;8pPqL7JcuBQg>2p4!Dcj0Lm?C()1CSTE}ur;SAfWiR&Jo zR~*(5JA$2VD^kTSNSo;Wrf;-ku31`YrY>|{#c|EtO6S5tf@I}$#7Nt>ISVI5v!b-Y zKe5LCruL5iqNqb+$!YJ33k@Vpu0K9T-j4R_9VX9TO0 z9{$!mq+~qtn^eG62a|}m%oq=Td<{C%zkPA;+2cHGAym#-- zKMGINKE~h{HT_G6sg7yp@Ax6FL4orNAI<;VpAI1I-b}e=NNr1=#9-bP5w?$7%9uaL zG+W*u$1m;7&$%sV+%0lBA;@`NcDo&k)5%S~-U#lNhjph`4(Kmr3q%yQ%+Dk<)XH_- zBQrS(M~w@(2F=L*%XVq$!TOEjhzLsM%I**a?Q@~R^9c5+yNmQwiyZ!@OBnrVQIzb$ zm;tkP?uMRVM5$-$cxn#HO@4R%>|NG_1Sb?t=DqZ?-adlK)-b;G@bIf^-(Z|^w+E0 zFN^Sjm8&4E6Z*?_#Ia}2vFTvf-2o~=M_zn}0?FR8Ug}%JO6DuAS;C8mr9p~U*!&>4 z%|q2TQhy}lVJt8>m<`-!^DNM@hMpgm4?JSciNFyrJlxcEdm!CFRaI=_qw*5T}bD!GHTcT|B_3Z3dk1COSDk1B=fpPsxU z@yM%-BJ^r1621_wHM=Tni0mi3T&va;*?mO59rq+eQifU4pt_n;;d15L3ga&NIpmb$ zRM+}QH#zaGN7h&VqnNA3^_fT<)LM4PMog1My>g_NjjQwlHt`}-*nD1ho8N<}d}^ft zGeINippWUeI8OS$hI{Oi2|u5oCVr;H*cw>WOU(ZQNoo?(2;!iKT$CKbqZT&bm7Dqs z|MqOs;*k1T*DeRHSh6ge|D+dM2~EzB=56*h7)b;LlTNDfX-6 zL0YOUqOH*1jdYE7_I#V_Tj)Ix8J;!p_c4?uQ1jD_u3zve5vwWb(~#6jUKb#VD>hqj zrSMZ6{*pB+KJpjHFsid>&U&k1X1A~H*}XKl0{nIGQLxxJZj6?Gotq7VDtQ|W(z zVW3AuP0Rn@boy2uePbQkA0NEki<2`z%LUW2U9i2I4c+>-=e0qK1|~oCJyfvBWqPV5zT?I27BZx#0{J*`8Xy)C zhQp7zGZp7P=z!kvYE{$yMt0Sq)gR8W_J8@3JOFxDc8wm9SKZz?bj6X{JZd*@>mKvx zdj`*>NX8!}Mq8^%yp3v%>OR0^RUJ?27u%pveYOxUrnObO5oPYBa+gmY=t?B!+!7XZ} zYFwZ{O3mhx4seRpx5SVkSxK&eowkPlnZ_Hw#n3BgpSewvcxguj_>`nz`t|e6?^ux! z1E$315S6t8jBUx(Q$?_*6Ljv$&7ke;6UDKzLg(c1Wu;z2`M#N<2e(k|w3!qKQM#;N z8!tM<{OafEKMaTgpD>K^HL8Z2H|jcejY`GI6IpG6H&Kb>+_79+wSt$o2I8_j_j2v_ zQ=V?TVLkuNfS>0h8QmUU(HPJcEqZf&wDBEO?b10{2clNnVc!z15sLBnolg{Lonhb# zCgq=BnZEB5&~<%4*3etkmy2MJP!YE38y*>+q1=U>FN7z&MykuZg6UB8T=d&mC3G~Y z2Yj31_6dQ2`wq!^aTN^p3q2!@haQ&tdMb~=Ra15UG?VrcZxiM89mDxtRM|NaC!_?# zXwZdNDx)C7MfZyol%`N2pF|NZXWJWmjs6ca237y=Z!L$qX$%SK5YQp(t>y`th{AqR zuEP;wSALWpFjgF|4d4z|Bl!EzEtg#Zb{(pVe+H%d7~QE#v9N?`>(ETRP`2KRWN7(W%GZlPY#NFlg31L9lC<{$X4<$Fw8KX5sZeRqlfsm_m>6qNor1+lAKsOVxcEDl=%P?oK)D?Pyckv^SZPi+9XssBYlY(<0!j6K(t zMV3NL%!xp@3hni7CQ)&$MVc+H<-Xo_Wn-tDcK8gM1tNW?`giQvoXgz2hQwmuns z_yl@r!{oSEOPg5FE#mqrqBN~{QQu!)kTaGGk~FS}DFP+AcIWWkh!hd5nt#6qZxZVO zMMM|Yhs&3n97k&`(XTl;bFQklt4ET}E0@~GoAq=E^gOmL-x|`2LcZmF3O~snn$Gxj z^j3xpC9YXdo~wQtcALJY?nQ->SSc7SYT^kW(?U@0yy!S;$N9NarL1zjvHOpcM$GSx zZJl53aUS9_Dul>;4tv~Y=pJw+3Ej}dq&RG&3PIMrwpq#0EZWTVWY}SO$;@O^k-(ZJ zm>L}zmCRbesf<%7HSRI z+E~aqKL8-3hKVPP+PDY5CB8RK;d7nZ6Az*FE=8H_3_jlZ&YlU{sJ&+8x{u zb>EJ_id~~3nw?$JlONRsIx_2|=|SBG4bCuEI3x} zTmC$_N&O6Cq-#5bP1r_o47TD5*po?Nx(9F%*4a{(^IW$!*|^Ywkwq&-vm}p=I6Hv^x;hyqaqWraKOVSXuxNzLX#gSSvTCIa#IcwZ+ zm@wjZZI8LjQ&8h_(h;}wx3gnl*`ycJw*Tug2~?uZB{asH{G~GGiX=SB+?23OJDF?pSrQH?&6mN2w`tipcUr9m%4I3*F@#ZR&TOW z%;9A8TIY~P`B+;|(grqUJbZ_5{gZ?d|JIkN0~b(W58Yv7I|~DV^j3zRlCOSQ!=YMm zj!r`ISSgTlrkh2J_#HR#x*Cjr-*`J9UM)I_jK;5EYXK}Gv#rd(49!^l9?-Cm!6XGM z^k&#K|jUnby;G$uE~)Up=ePcmn7hdl}ckAcM~d;9}N zD=i%Qh@IBnuNUkBib~BbX9#SL-;Y z8X7B%$*{J|?ASjVh=~BJ(Rg3$Tmb`<2mFxCTNmH5L*YwZH#}J>49ql;6e5MoC~wU%e1GM0BoX3F5~#p9-dJf z7IiOIaKK}51{=394P4$991el=_}bCEIUAEbz{bOv;_MY!%a8WdCh5xB^tdjNe#j{^ z=i7E&YkrF%gWHW{S@pwujGjRUqNe$F#Ut zJKKO&YAqQ_4lG#eahijJ+}&&A+l{@uvaxV#>XT;s#ck7*Vnt09^Gs(4z1M{(g8!UO}rW@!k?v~sSy~)kJ9!w;Ul0vsD zm|j$JqP39c&1FJ!OrkkSCH2{8K(YagmmbdZQYT(w_t(#zX$?@@}LEKaITUfnQY-L31K4f#F0DVKqM$h9j`YEMN;3vEQLy}OBEZM6H0RLALy-)@i}=+n6c;@^(9zh5!U8yU@$_GV}G@3IiW;2zD} zeuITuEM5`rB6f+R3^HFj|g6l+fXIXguoW!icbih{(75t zY;!{RXl~soeG`CPAVW*QE|fnbGM@|d=>IYufYzXl^+>l}tdw{3LqDBb)1EQTeAjCk zS=XGA3t&a{u6qhWOUTn+(77{J0^dBkkWwR8@++(gxvsY4DpYDaNQVm&p_jaVJq zx220n^Q8@_ET#xp?;9clWJ2yEwfcxWY-1jIte&jjXs-ndL`ZjBan%i zN0QJKYU6-}yIP6ppIO+CN-U^{I*0E4 zj@9G6JcVy6-h?W_yPCS?;LLpUH~sqGuwCot;vCw;%VVq#2-W3g#Xtd~PXbqZx%uGy zAIP1-7`aBjh5hhK4u-ltAoU8$O;Tpq&V>my4-CHH7a*0G#n}-(E&VViC%OpK2x0Lv z`v;zRxoN61d z@i%ES09E5`vusLo{}*okoZ2%6L_{5$b15+t{tK;!{Nw=eM#@9j8t6+yV1)?7?L%L&|S#uK={}AY+%_k@A!u*%IRR<|MP5I9k(1{BFiJnDdum5+F5#Xj}#S(r> zXf$|$aMphgIja8z6ucf!aLDhUhkc|X0mYI0YQJ(@aHS@TS$XjkYC(p&Y*K%|a#vK^ z>U(_rTpw>%|A&RMRkC1(&j_o;(^!@Il5p>3lIYqRv%bE4O)34#TBhxzyxu7*Ww@oy z0lm>}aSz6R5RhgNPcWG?rTQib+fCXQdZ4}EAzDpFQQ08JqRv|{=i8~wXH!vOqP53| zs+D4Wa8uBv=A~S}r`UQstdzt&WBzsTW%}xs5+9v|64+;kU&WH*-s=Xhy-+P`HLDn6 zRcV?^Q|U=&ctOA%Ft7~b)KG~hI;VV8#KO5#DVHG0h3aFQ@3J1xsLsqqI=p^W>98}G z_v22klrhfY`rZ*H)HZ5UjRUpHVhUrQX>rs;6SA8`qR+@^nH@ZNFx7!`g1z2DzbTT0 zff2lNjp>lGdEt8hcJa_dcUHmNidTqb*fCL8{Ef}MW>pD?SI3?On2!MAA?Dk-MU>F2 zFV!w~q_=*}*Rl`Y4MWw*V(Ge$F+<}S{)UhXf~y9pst$4Td@688R@|<%KFB1-{;-;T z6lBYA0r%S$^m-m_OKd@z8v8|FBXFiDVZd3ob#Gopp40*^)kJ@-ZNTYu46b~tT>b>c zWE_7)N)l6LL3D4KXBr$nb*?M6;7G5VQ>9T2qo8yS-zom4J|kEs>`GHCLofRZ&){#k zzS>Smv=s31(UGH&@8~)S7nTj>a~Mvg10@@FN%hiu$%hOtT_WnJkVbGGnZ{th3m6zj zCTH5ynGR1(Sm6xq7k4eVhNIB3FGX1D(`Di5XGoIcBoF{=-K6#kp-{3QD z`|b%7719429wj658Kvd!xXV^Q=8U3?VW`y?$j;ocGNUyKX<%^S>y1(zjJ{VMRP&eB zrIq|?b=8PW1w!~+v8_Wi$%W>LB9JMpQ5P5#5HL4XkC|z+y4LmR$5wy1>Z54xi489- z6PIWGD-_F#?$?xccJ+_WxvwB;-#0m{ct)1GmWD*#?r9UNxCj)m%whqdT0&tgWCm^s zIPnn#2+>(+cRXzSfC0ZZxrkW7M45*(Eg@MwMK%8h%a5xo`Jc|{Bmi4z#{o0%W zVDLKco7x7RiX)pymA$F(hg|u@92c^Mp>xsT+|$u-gB#k ztyPTU{;|F!BnFhIx00i_8(K7zES$e3FjIdrvQvx4=H+bTa`dqOalnS@vCzE)h$l2? znU0}HYU3_6$|KL>Y88%ibdHP5RWeqL73$J2#x-(2!>58t&%=sG7*Jnw@mMi}MvNWn zi$;!R6l^dQVLrY^!GPT}#^h0-`P69t$~E8AS^UTwDk}kk51Y(S7DR7*)ZEQ$i%6aA z>YtT~_`@&*^PN@J@vZDwv>`7w!eFm29pX>}zV;Yf=$?Si$1%w8b|YDmyV~>fGV7>_ zLUSr0>)r_efamr*&a6NOFTSf;$ALY}KE(2s+{)d&M~=9rFVhFuNaq({8)RdvvS_VO zp(7eCrII?>5K~d3{IJ?cKh+_jnctCyw|-m!g|3x)}FN6 z3%vwvNu~SDZi*QHRJIC8m;FHE$9git0=`t#K6pv8Cxv#f0S|;!_MACFuJgcxQtPYt zXwbP!kZm{St+v0JxvMAjq`j+jgx&&Xv&o22c-{3bzX!WE3jtuS;g3YzagwL^OUG?r zlOkGoHrRGH*S!oCIT~a=4l@xAZWNsFBc3;?cJAc=FW+lNSpiJzSCa^m+knl zd{-r{N{`XEh$HYRXj8h>U4gJETuJ7}l~>qG<6A9Lutz9!QR#oOqg;Wvg<4jTF4EgB z-7(YnK44POL!XH1OSVvl)r&_sNrI|+d67#^uc7YcaS$r$Ly5Y@B-n*=Lb>w~EM_@^ z(+(qm_&wko2<1EqCnlXOTBq$>iPy|W0YdjrZ*W6(XG(2V9$?f5`-B4$e6;hyLD9ad z^`F?vxB3`j%U*`x3!>olH#oqxNFB69R57p0Ndct%NZD(y@f$4%&Jy(5dKi_ z1rXHF7}|Y(C3JPPblDVc&`Z91sCgSOi80CNym9tZ!3&A$W8Qx&=XdCR>0Cj7M`#tw5nKLNqi0Xp3`gfI^en-#+T5iitBhdM-2QCwE;VJ+z-j~j#X+J8k>Biwa>kX1n0W0 zoM_K%=6bHxn?16L2s#(YR{nMu7s?sWm^O5nZ*yUNz08wf0Gq>3zNtJQy$Gw#0|cxC1Qj;!^6eg|85Ws-i)XWfXH^}mEKevgwo7;6;Vvtj80YdeoG{I4adBeAKxt1K!1i47Y6J2ptEXKW&~(Bq*5 zJPg?r?RM3uSfo(6U&mW5XR73Lrl!_CjC%}78r~-QAQA}Y-1^4aC-tK=sYeR4BdR}J zl>rmZaAM3#@IST~|M|yGV+G~k*+}ezKP*SZk~XlkN|($o-@YEpr?a3o2o~lv`r_N1 zO9N!F5uj5zIEN}ssO0xQzNp4c&jE{`HJAqR4V!>PRNyHIbrC1?hqJB_`Wz|p?-{sXdX(00 z@;E<24O8aE49^%-B@lgRg1iN#54=O7MaaF-WUCQGrh6ESR4IU0)fjKf5rn}1Jx*iU0^yMRU5Mi6D4g|mA;@0)H?6R})`pbZ=stBT7^8&2tI zOZC83+#?!RU#7G8pn|)j0!c6z5vG$Kz?@FA_T)QS@@cI9TMN4iBwfMSrW};+cleOaWiT1r8HyH~5Z7{NEdoo}iyBTaT@YdQc+;3+F` zMD;G8)jH9QBd+Fs7NK0Grw zxDH;&FVfr)CZH1HPrG<#OnaoG-l0BPF0_lI24&@hEc=#nIg0iq2g@hQwIS;6Fu0F% z-15Hj95EBHiXYkiRL`aGs#%+lIg3|+-N4UiwIEn}k-IvkoNEs!2#|mM{r@$0-p_Dw zZyS#i>_hbET@anc>b(=a_a1d4(N~G6(O2~7C3=&$Gf&V1iI z|G|5HKIcByJ#*&FnQP`;pQoUq;Stjtl*6Y~o&2I$*yI-HJg4Vj3lZm&g`M7N|jrv6_qo$fTaO|#5w+;V-nwKW`PM)hx zC5cEcfW!vF%F=z;U@Vy&%XV#v3>3w&ePOA~{!Q)EqpjKum+jV*lY+Y@nhUwIW`>Jn zbX7k*^Q(SgdXP`Zx734NnXZA1FO1H9=ykcl>N7|)$FVo_dQMfgU?#EnxnvlDUNVCG zxUnl&`HQGL?~zn8emcyWm8cT@I>3KYxxfFzs&DRV#bZg;Yf^_%Wi= z#njiIdqwHEhCSLf!8bR|3_GhHSHU+i?KVdgcM#Or_=3#80LgCA`P#fL*-n1|>w7Rc z9u#Am5Su{%z}uNKJ+S>KTHwI{!{EKJ4SS#fdWUhxR1f`M!x+58wj~Dm=8n`44QGjm zU6Z~J-9&byvkXmK1*b2naX?tNNl%FEe{3=h4*s%6xFl!1OQ12zD;q$&`kc4U{QSr} z@$=19L1#71jNN`ya^2L3*I#B!_mqXs!FL-6?w;}!;Co4>%C`LVilMn1lMwj~_?1<% z8z8v!;G+N8!fQ8?XiKlm8s`dW@6F>&zj}44>nI>`Xds0voqt zS6}(G`1KP_OElqaV@waFsb3_-CqSKz3!OhCtWcgyL!+VWm~oLp7Gl`zChU;v@wp8* zM`K@>(0agdAfR>-=;$2vqkF-NWQVtxMYcSCOkvcb62$5A%t1EJKcfhjmblBlD=PK% zF9GTVRRfZ11l>qkAb)|P7cZOBt($tzPE$h2T(t3<%U2wHr(FpNsuAh%rt;Tx4t+p8 z3@Mw32&1W)J74DHK(`NOBnf5S9}((la&05^GCFOqghucgi#3VKMq(#J*2fe8Q=~2)!{Vo%+z$6YS9YeG5}l z=s6Y1E(`d6w(p8@+VOSt>Rh{mQjC1WOK9uYCVFdK2ct}>=JXm~_@Y0~=8W5X>ZDLG zeY)fm;geebfY?NlmqR>r3zms{ydY1vG7QQZ1|f+Z;TM$?CE0Nvh13Pde;b);o78(- zo5iC}yh4fTos{{`Bo1MIZH)UOPM_W9UG{c}c$x>&Xm|YuT}LN6Gz9KDo?O-F!}9SA zLDtzR&?>#6=GOc7eZ#w?fdtesmzQ1@Q4I1;KFiF}4JOvdi9{0xzVx$-U!E`B1{( z2}ozbrERuD?iA~N-mTp6D#%$@Aga$^S`ha(1wMmPtqmQ(R`%P`9Cfm-<%xA|tCfaWHTFi|!8LFdaPwF- zAE$$&dvnO+W60F!>^DUtZyCu8FVTgT8NZJfw&IV&2)6L8eCm;6lK}%EH`^r=*(9oj zX~ElIV6@6m$-3yelsS?JKXE1hqSkb{d9tc3#FDf++poT&`leW0V*xZ2z&`%?nOc8? z$jaNh}uqmYnW2rxVjlgS1r71Iuj^7MP=(oN%q#sLtr{MA;PNwM)Abx zshF)56jjb;7hq4E9?cH1hzTs3!dF(|7TJJcNM zxRl426+R*V%2TnjzzA>s(yV7?4gIZ+iLivu(ik&eNXp%InVad?^3Q5?@~X*t$a`b} z#C0O)TfP!B)~~Of`WqD4JVrAGJB)bL+!)e>6$^2AIhz-PfnuqmdhZ)JNiSQp?6wc2 zw`ZiI(UYM{UXwU+qT$;vBcXF^_41FSm_eL?nJV+`HfdEMbdU=l3zpFF(@)@exzP>U z*9|=h-?Q0IpGFqm0h7JA#ZoppUdb&n_weXRuNSgLG!q}U7b{&X#_ut;YLHV@dkxQ)?@KeceFykMbueztopf5P`R~vmH_xtwM6iPwg-1P}CCDKHMP^)92 zp>>Z3GLmnIV;RDCcT&;x_u@qu+=*Jte0taGsLq}HW}c#xIdlbLA2e|v(;hYcG1sZISrPxT^}N0gN4}@sZU}& zpn=uIoC*7j*!bu3=&YK>l+^Inyf$YRY{+IjLL=3s~0we(u#u;(46n{NjDnh5R!NU9Ly1KsD^gd)|rQfjj zDZnelEj~sK8;3Dbf|Z! zU+AfQj0tofQ4jb1AP*}Zujn_jcRxuztJdlq(MKAmbi9?=DQ81ym**ztJy##iJ6Ybu z;_v?PJvGU`o2p!A;`8Ca&oew` zQzW2Tb86y+z~5ExK4ffeH1J_~rfHaol0A9^fT}CW8`i6S<7%~pz3hCaGj7!#9(m?n zBnp)a0%|!e&ApKtT?_Ztfob2*_Aewq zVrPzMfLE1a&gv;z{Ng%eM_Fw$-}vV!i7{A?kp8)U4KE;6FzgYDu82hGVoT=ss?S1z zWd*s&D;4)3(bHE4H;<<6KJ!T^V*L-Lfu;S0R; z<0|ca-l^TFALNj^OqMGeO_!Inu^rysrMQvdf`09o7BOT8Y z>@^d+OSN!oRn7C$iNJ`LpJ>y8xDva_qw=%of#$=Ty<=+ShTdTXwzqt*ACFZA#!>3N zN0+3>l!lp*E^4}b6le}VFS4-dBf1&0%Ktr3Sa~MK+pWKb-|@cdf|n}ZT4x`D8Spt| zVufL2CsNstc1-!JmT75=#V?h%HP;}djZ#hH1cepwNG}s(SLEAaeJ?II8-dx^W9`Ra zl7&`^Lu5ojF?@hwvu?%q8<h-TO|Axix$7ba;r67LFy~nGAurS@#w-Y~Nu{YB zku%$P^*-u1Q#rXqTYdkFYsEwytYQlt?rQ5kL8kB;i+Gq4<1225A3BVvsMe%6atHn8 zdU0+A{9EeRNme`jncSh+talviJe7fD8AzpXsTYQAT%>v}67LroQPw)iTay%02Pn-@ zCPfh>2tdP_wzjbNJ$e7_Q_jQSz{CSc$A!26hAiMF(Y#~Wg0k^zB*^GOzl8Qsb&VmL ztrkM~<|odKZ37*jya=^Fb-hPfXU#0qx%KvNe~8Lgp%@xts>q-m_^4;{2p=*G_VO`h zW`Cc=^dRR8CdC1=ya*c zp`mMOH|Pite3n|?vT($HrB!l9AEObbg<1e1kLu$ zGoc8V(Sf+Mycfi2bv{QG>ikjvQqo{NK(;6-jey+pePc8OqNLaVdmzcj7SWE|4Dhpa zkL&#I{rM53Dnj)(_LBuP!B-AEOk(;f39dtFGI=LgqwZDrVh$zVb-1d@=t~_i^zQT& zXzID5C`SDaNhC??_LGVDDp3RS(Pthi6&RAdF^H%2V}K0h>{3lyD^>c5H7;RXcSnbo zX2Kz+?g?TUQj&fZB7bCz5A^Sn3-ZBj%>B%}En1V_KJvK)!7Cl($Y%8u8Nj8eU_G!% zMO7*#<5tw!${I5kQ!ucI3lA{dJ=xHwKcQIU-!f5hlbI9e!XFYcYr;MXW6t7S<_J?TnjQPYnc^c z?Q!QMiwqS{MX0uGqK=Os0|)15i*Ktv|2*Z3a++LFH%3$!h-m+h22wlO&BAWqb+=d( z-2WOoRdQ_(UcZ6MUa@-_u;^JD%Mp?5no@GGce^|n`tdbAXE>RhV>-fRyVxe~4yhRf zmI*s;0f~E|2i1OP(4w`U{aEU(8@=pBa10b?g9eU-MYik-7}qKET`?C%KE-u|-7&TiAtGt&=S;*SS(liC}g-|TJ0 z5ebwEXD;h25c!r)p_G9zI39g5YvWRlRHMz?m>24$igvE)K=l9@tVG;X;mdKBsSjHx zbHl;phn1!3J=Ee=G9S>Ci>)5lx9O+WG7)s_%*ECZ$6^?@&5ez03e{v|A*6z%z>NIw z))Oqr&vSjdkUbkRiGd#&lCOno`#z)&Kii^@^$J9&FK4H#5S>q@Gf678*OP)K>3uaT zd$Oj(lUAt$)wC~pLtd(=W)k9F1l`x>=G~!WthE_a9e7kQZLZg*-E9UxILnD35J{`cT^Ed!dg{jfr)Ysd4e zQEj{hqsW>YPgcxHsZA^_IkjcN527|_7%~Y_m-_vyv>>Y9oq^oQcb#NnONTL}Yr@Az zFHKh6{nFa$G-FQHtcmBd;Hbsq$NU`r+wm3|I{pUim&G1$>cMM3UiKio2LB+_*<$)V z6j)F{68&?14;Jf#?}Mc{O8u|R<^b^e7c?-T@LuMPjqP)M^E+!dw3}JxvZKRoU`cVF zca6>d_GHep8XHf;7Vo47cf~3&)luSB``#J)6l{|7B~@=yQ( literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/crm/report/lead.png b/erpnext/docs/assets/img/crm/report/lead.png new file mode 100644 index 0000000000000000000000000000000000000000..92a3d70ec40b4a1b6c3b1e048f2e0a08691334e8 GIT binary patch literal 83066 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/crm/report/minutes_to_first_response.png b/erpnext/docs/assets/img/crm/report/minutes_to_first_response.png new file mode 100644 index 0000000000000000000000000000000000000000..1831382aa0d04ef41ce0ed088223f1e4f726a71f GIT binary patch literal 67712 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/crm/report/prospects_engaged_but_not_converted.png b/erpnext/docs/assets/img/crm/report/prospects_engaged_but_not_converted.png new file mode 100644 index 0000000000000000000000000000000000000000..8406b68901fc770ae1728bc92b0f3abafc4c117f GIT binary patch literal 78731 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
h4+v+sUqXpHghHac}P(+Qw%jIUFq~qZgM>2@` zLxDJG8O~j{nMfRdckjI2_2aB0KYgnFA@`Mj$Hj#3wFEeDP@VU;z{`4#gAjOEsrXha zHj=&0C;uqCKGeuTf^}`_N3YsyV5w?TT7f>So`2eeW!F9w2he?ZQB#BZ0}v7pYHy%x{2u84~mDEekWn_0GBfn}n z!jCp4$-k`Y5Y%+Xr!~;H-a{oQ8H(NL+E(Hc_~y*Z>;tKuJ#8z6555RZ8xdAS($kOJ zaNfsLPl)2SzcL4VGj$%*X?8={slxRNEmuFY^J1U4?t0Pk_Xc~@fDH+ebPflxLep=g zb~>Idy!t%%r>}%qZdj}cdi)V?hl844ixNZ{8OJVEp@Tfu5(Z?hu;ebk#pxr3P<=XJ z$BZulD*?>BjM{^0l%uCcaVi;lI0lclfc0k4k$a^+7qrvsKXf*gYhLJxLbx}qG>T2# zw(8wO-wU#HWv>%Y;OxmwDo*!y*yj2+_UB@kX+=%0S4Eu+T8ONgGFtz<$bhjt3qQ}U z0UD2d?SC1@Q!M!i0AFU=@mT}{aMuZfMJCHp76G^l`7%j6% z2E#g*|0FVTc|kEdPybQ{-B!EPvjvDE8Y3Qg*T7Ae3rBLrsMtp}oAymg{b-d}mPT3R zAmKM8L)1l$xs6oN!S|!Ew#&}Qs}mV3T6Eb@EMFA7>iGTF)7rFe)Ts#g$cBTV1IZSC z{w_CAfG(soO0fNmJyx^B}~= zO))y1@(5h1sdK`xj~(-sC=~0+*%rJe;D^_VEa3CAE)>=84NBr~IJEUF}ywyP;_g zrYCb(!RUn&7OPQanc1yCi5cT!-Tk7`3s01#GeR}%QNz&AO+MsxLG^Q(4+B)tLSyNK zMz<}C0y$}Z?QQvY62Wei=&d<07>#Fo4%~>{S7%}Kly>1{Tmvc5M*tIP_BV5}3S><{ zjGyLo(U^P|^2gJuo)x7=HFiQ1m&tliMj;W?4O%$1`7#vRVV;C;HfHvZte{&5alWkrO5JiD@#ksf6mxHmKGP}%qpKK|5UeWy2V#8 zz8Z$F7kMjh3ZoBJFI`tI8%x`LBJz05Hgm^I4b02KCp6G~c*)5Kj)L%&(~xby5wAf7 z{94hXd+1}PS?;&zPuxhbis17#LJh5`JK#_mFFG{Dwo>alF}^nM@8HF8>bwpRZmrF9XTkApLp zlT&`H>?VABoqq6UnJCz+rB1f-diafCFTpN-FMJr#1QsP|H{hhN^isvcQCI4OvTvKW z2c46Q=uKC8vWvS0A?FBdr$FCW_4+ zjX37DYt8w=yT>>^EIH^?1hoWwQ=In1Q8pW{%7>Kcj>~x+fj?#lefqmDjS%^4BF2=a zkJ;L&@VF5EGS&u3kN~V3G6bk_%8-&x?s>fKNY|FFVvm%zT5iCL$q6s%V^Olkq~OMU z>XjA#7IQQ?Bpxp&pB{K7o-Kl?=&q-c4$9{@0cxa1C_*pho8L_-&Am3(T zkV>O^tTnubk9#R0sQ=iL^Gr*x)+YAu45o5glvE8oZ=&|toXMh8s=Pk_he0cfBfZyT zbN$Dl^-|x%g3O045h>Fb;16$KvLO{!60@H&NmzgQkO%)38dpP*TnLk1BYEuVZT4p^)=Hib@MeSm8_G`8%7vz8 zbeM)XwZsk1*!D$rP|=LO+vBXKA6|`Ah&)XDv9wO@9pLW|he`*)7?=oDQd&NXi|F}& zH$93TD>tMri79bpDdFI^D+G=^-hE4RFA05KxNg8)F1?y+Bl4}jNPKB+BOn4pMkT}1 z2hQhSW8TPET=!dDEphz1lh`Da?uL>3f92Ifn~TK_049>u8XK;S#;*pll`Xc@>BO9@ zUio@g4v3gROr{h4^Qrup8w_nf0-UOIIDTV6D$8?`G`q15DZ5$8#U_M@GFRR4Foar# zR@E`Fg7Yl-QHpZI#nfI|!pa22Pz+CA>k#7)x5q%fp1`oYCdV$FDOIr$N1|J*)8iQ< zCl_%0i_i&@&Z)Uv9OkhgNfEj=1O}XR+utqbX#PR2`gvRX53rI4wzwR)h@cAZEWt;n zuD_F3Z#z3?q_DLiQ%{{zV4{$K_-?R(B;f522>;Mxz=*4znv3tavB0I8jGZ$|ElA6LG920B-5+9 zG`xQn_ovE0<@SJh4Gg-!3jV9|W&mo)@}iyGKd$1hoj@KW|((fhU)V~D_j8)R^efW56MKa;9(}i`)(+^MC*?Q{9g2}{ zGwrwf^MWfEu@YBis_JG$Dw$zi=%0t~W5Qe{das~3TX$nSqD)AT|5_snD58GlQqhdv z4-a$6{no@;U;mgOL##4n(fj)3(c7cx;o{vZSIBpMgL!5boz<}z7^NwQE#KqSb0VC_ z!e||-{8I`NP3y=P$zXPfejL;Lz#l;X9(#0zNy_Wcir)H109*bW<5%jF>aucOM!p6F&J+j~WVce9Q^h}uVm(3p2 z2pmer)vG2oX#;EIUl-)yOhnrUKn1b zazwmMs=u&a%!`2;T)jP}8ij%1OLq;j4wRU?uR6dMgR?Xt`+@EC+F+3M@%WR}m;3`P z9!}yfaHLu2E+TJ~mVvCt@NLUATs3{*bOKKxoZ$~l0pD)xesc8SgG9hDGx(fNLIhX8 zv3940#j*?lT&(qd!l3|_&#aS0cYUDnb;u7OC%+quCMGCMfGd_hTuq|nzG^-HW|Bb- zyCj^ed)Gi5a%v;_0U3~h;Q?vhCzlzLd{4d!ze#0`aYp|(A*A$ES=<&;F%;cQ$VE}&?0yG*&~WGCr1jYRMtjptZ6n^Ocfnq z0%Az?nDkxP{^sbh{`z5y$a}E(dl9}@jm_Pl-d4p-d+YXn?@L!eCN*RxAa1SM2KgSv z3yr6P%ZJd)&ti@FdX3CO5^aRQETVYd)E`(yu$VudxnN}Y>K;FD z5&2~B+ylv8|5>RBPJn+14tzJ#3D7U*&1-ZzF?R~VKD_FnG=O>^37X%x>|6!7c%*cH zW>NJlyKQb2WI?|SQO_}pZ9z`>2Ol*>)-bg1AwNY?v-1=NXqn=)IHqK#h;}*5VUbv=hA_@LpI5S%!fSPmR1&@qGFVf2gUsy5u;yl1 zrq^L`%-G`Blk;M%#T50m5azg(sq;C71LG~;?W-mXok%OOc3`{YXtwvq5F)vVHxl>; z0k+*P2CvxOeR=twZd0g$bY3y;i#Q{}U<7^-J%#%u>Rzy*pI{(UhuX)~D$hCFeK@RO zgRao^DO-X!&zUij0-AlAeJ#FStW(<#x=0IP>k?E%JNF>3t)K8-?_EoH2z#NmONhu& zNM%cZ6j>8_CLSxND5@wwF2?q*N+OFA1$PRy9zpn(;0|2HGpL-ad{W_4VOCjFF)1on&x4htWp#Y8Bja>ea^s8gteH<@LzhZ&g=%W%rDm_oS|xuff& zoI;#@qkQFpM*Ns#4)K;9n+hE!&)>LFxCy#p-@d*5bgOo2i}b}eQzW=Eox(ReAUplz z=VyboL#Ex^y#)pQQ29ib-7b2I- z)9X{i6V4NlpGH5Ye`5X^-T!cPAse9=A-Uc7-#x#hci%Y~IF;;UE$Gy`OZiEQ%DfWI z5&hZvx+bsKu*ER)mpUCRok=l9F;=nO1lk1b1l5GK;kHqP(NCjYBd@-&{-(jreyqM{ z8|NEQ{nG=UNrXvP@$Ii6(!L^{@7MA~!@mXPe14@-rDQAd4%n|sr)MUWtT?Z96Mu?} z9}!kRz?OiNfUhb(%{tBhb#?0X)ctgMiR{s{mG#C#!_kIYX2;LB_!m{JE$%v3x-0wz zorNM3v=i4^{S`ae8ee(yslIL$I*RR;)Yo!r+_hbPj`}JWAy>m(YLS)tb+Jsc!lcky z(OShjsSWHE_?YJF*ZIufSS%tt^kdLk%(JA}X2r(ww5rdx5w@wQ389hw;&Ipop9%~o z-8kZtt27Gcwd_TpW3foht;hxUc4g z`^kJB{Nc6s5PT&p*x?2E(b474iTn=vsOgh7sdhzkc^spZcpf4TCD;SZ>r8rec9<#1 zDOfFFEHEuN>MG}2?4Ev>a;bJTa-MNAe%ybOd@+5}x_!4iI#w}e-M{(`k^(XI5d*3M zgvPiknL~v7go~KI@L${5=!LjQDfP`!OpDD2Z}w6Dnoyv1@HPbzQJ#LC#Akl)_3GZU zdnKeLWJBt%uQ_-J3z_sV?0L9!XiC^jbekK3XZM5DpkiBYZ**Jqcv$0e^zTjI>tC)5 zC%Ra&j{wT|->fx2PPR@aPPTq-;l6yni`)2o{duoEQCg8yj@&C6%ybogjV}>$m$HX) zu`-P@rwr4SbsVyMOf;Z}_`BkfN%lf}dFzZ5zRC3RFJ3#0mzHDmofwf3)%FfsIiry# zDMo50C&u~4!zScIUMZBB$}Sl;LihI{%FV0}5Pi{2SW5NI8?V{r`77u%IfSXai#u|& zAfGq$2Sm%i)qa~EY)jJ9VQWy*d94z!9KjSt`}pCL-h{2{jkznGyP4)rPhFOUfzgZ+ zXhV8qW0tp~P(6$O8-uY`!_szZv3pIuQqHL~zP;)KlMTcDOyOcV82RYSl38Pk2lzDO zN9+9^#+7nO_HNN`BXMR*m1f~W8{c|UqFdeV9rkN-ZHpfkeeQkdtgW$QU*;O-@s?}H zUQP(y_1%rT40a~+ltq=ngVaFF2h<1hWP8F^2V=XYZaI&6YsI^hO>!F}DJEf~Uz_oo z4u#cSyxO&@nwunx3+vVM!EM&^dIs$hkX*th7BXxiOaXVZ$7<^_tK;dI!Ld1pX!Xeo zcwKMuC?Z{V+$(}JZpQ$p*Cz4ywcF|2&0pERR|OwAt~z^G-W(e*dETGB-R{0M{3-df zH;pc%_|$BEC+NjP@{0VOkgONhO$&GGdElYUqk3$`RhyaDUW$EM>b=}!+s*ove0}EZ z=Ejy50VAOVAw1!1qEga);-Ff*I-eS;TH(yAS=+rvk{ptY_V-?`%NR>b7!ZhDZj_0+$~%7~TYRRz5?pCDdc|W(T1ZQ660o7dFT4lkU$g zXJ=`~ccD^R{oVa)eXS}$x&hh)bve~yHP80oqVkqmRZ8)*`WY?Kmhzm8=0^>G%`QcQ zzPBAy9Ydo6%Re(V7)p#tjJ0_A(eHr4lTitBqiL&0srDKR?M^ri&!sG_o*!zG&14|A z3beix;%;-lcX^*3=lO9Dxsv4~r zrYcbIywGv!^$JBN2itykXkKX?Rll=xigNP=l6)(_pyQ^@ZFCL#i|{Q1cEV~k`?0NL zJ7+!ChV2YzMqzN)sgm+q%^@&&sGbjx7j*tRi3R z2opFJ6BfdH(zz4MW7=Xr28AYSBnNh<3^_%6#>ah@iE<~Ge|d!8R-j{jO^84j=n{bc zHsY<$_ndAH=hejR&uNJggU9`cvG$4B%2LXVieHtz%1=ccy|C5N4Jsmnl8t@Tnl72r zb(dLgUErC;G$;iP_;H;l0X1ElRRpMsG^L+Q<3LIv`T6_>8osx@w{Pb8_6{d)##fI# z0H^x(drV5_<87@)q3m_2}vhrXiL|B~BqB*RkeZB%UOg zC%bynn)~D3$)rrWNk*Xayg<^ngfsTl(vIxj*&f&}nV;;xI<}V9$Ddi4?7q6$0v{REq6j3f^mD3|=3XqR zwqOV1eMifVtB#@nY%0qnBPLrTb(d0}+?GZW#}?F|I-eq*t{NX13QG4($<3^ZE&1I1 zg(jLOn8iY!&-*hl0Ps#q{)@VcMxIQq0;9^34NoS5^d|{BsohYA)*;7v?Z!8*>WKK_ zrJtge>Z^0nQU@%i;kcp&t9L(KjJHk`@1zK6HZ6$q)iwdI3RmJEvpV6sUQ)^%h^({4 zX)B|1q-m76`US>Pm2A+INbJ2QA=l#K&si>dkPXg_>XCadca%1GiAZ?`8F&mv{)x5Q z@Kfhb>c;Bv&|RQNAV{#nmGo5YQuoU2H1cfn9Qkn=win*fZ%pK%lSZ^wG!a`hCOw9~ zSzzdurH}y6C;4tu!=;bqUD&zWxyiY~(JC)xLu@1PLv;jZh?88G_;q2Z-uyzp4lj1aMYK#Z zL|0`l(N?7WOiw_!);ypl?Hs8fp(yA7_VX>~Y$^?dwOVUKotNaV^0QX^t2=Wdi}c;o zyW z9iLHr%Fux6r3keC(l9rf*Y4gxsh^>ec5=oY@NazuKAWY$nY^|a!cdBdI7Ko=c=$p2 zA$XfYQ3|&oTP%B0N@xx%G8ceHE={uG%NJ_s`cS0$g`C?zca7ZzB~r2^2Y&qf_AHTG z1nTG5x=$3P)ZAE$eqBEzY)xz{jy)*aXX@v-(#hTGdQ-a*b>a zjeVa@ggt>>qiwi7%bCFD@aEYZ)oApFH>Hg_s}3!2?(JLccv?Q1OQrkHLz(AQpP7~D zCn6^7*+-2k2J`#wXo(o4>DlN&^xlduR1ehmmL|(r>cL{UTJ|3-G~E>mw?D?(V_Apr ze*2(H2Jh$ASFNJ) z_>QFRca-lvFG++C(}AgT$#{tovb@PbLJ1y0l&xHpLX&J-TP+KSbpmy838Lc++c~{d z&+=c+k|j2)vMv)9TeeTzo2<3HA0BTq!Q_l=8vd0yQJ;);Q0Uxb*mUMDdAo(&hAr1h zOrGJz55aPiCo)OH`@){qpR9VDcw6H@r=Rc6WZUX!@Hjhgd7B%vERWpai!g^?>O&X; z%lm_18!i)oCiRltzfXaA3d2*BE!RQuW0BGn>w9F9&QKeU7GE_n$=tp1JtC&}^u{O* zVS-Vlod@6X*G{hW?_mPb#9?8@k11R7rt&?2`Jxvgrtj{hNaedEC*SXhHcL4t>iRwM zis4YkRzrv30ccXz=3CG~K8rX&k z!JEg)B_NzDqg$hYL8A)LVK@`LEEH(=i~ZE1RDzc9HGF}|@#SgxLQ$OzzjBgB#YD$^ z$VkKJd5&vketKQ$aAkUpXHstVWVoj;^C0qbZ3?B3MHy_WQ4edh%ylmW$WLI6K8}(Y z7S=kJbtFdg>6=ro`q#|6&_%hu+C>lwz0A|LGaUe?EEgwp^qWv|=$cTQlx%p6GPSz^ zG8Jsf6n0L#UPb=gENRM5H%i=q$FJvcW4I{UwF+P2^~UxVE^uq*&ez=*IqJHm{=S)< zc+VZ)yB&orFP0hVEbE}R>$q>?F%Dt(?7N=cJdOktP);6w>*W^emhXr=Q7+mEkl!Bd zHE#Esh7fS6A3vN&A7?fRCv8@+d|_$PIM>kD4*QUz;iPe>F|JYkfvP;H^s<7kbfer; zk4KY5Q*W_yx#0%=apQWghq~4b?CNRpAlCZJ5L|&BB25A_w7t10PXS}I1vA$-x1`Om zu(U)g@i`I3q53cc?9fOO3SfM+HVX{E(gcBif0M(%b5y7cc7#P?LGnEexA7tP2 z8CZjuKN?zpGGcZC*+5GQFfalxe9%Xbk;6xT3&_&Sp3g<_)xUc1L7#uWW_bnpR~H8h z!B-z-6#!z^c18d$W=>|-S3+n206@Ub(3nr@t;D~FL;n+eW$NHy!^gtn?Ci|!%)xAJ zXTrk9%gf8c%Fe>h&IIkjWbbO_@X>|I%AWFni2Oz8t&zQfotce;nY9(*H{Fk)tQ{Q$ zU%mQ0(SJVw!>5sp*?(uUvj6w8pbKRA-NM4g%*yf~+R&i_zu)pHn7J5Pet2sJGP1IV z&LPCc%E>G6uL1vP`tOuahHCtGC>Ph8rz4-V{ClJT%kLFDS<(N9>tAo7@)AN5VEK>i zh0xxjEaJkz0Ab#}6;W}4-Cssd!xLZVJux99AV`exsRY2G(T98zMeO zvXiK@;|16_e=oW4D@VQCcUlyH4-DMjzJQ2`>vJ!_~ClWWjCv$KqzCiwU1VBqKg9S)&*+i&Gy{}}8G zK*2FY5oH-edOF*0qDnv?fEb#?tHM8d1mYl|up?v>n!^8c7GMkoB44cXAIt**C~ycb z{Kn90|1mut4xldvF1?TLPZ{AL!1`f`Y$GoGV|p|w$5Os>zwrK)5sDv-ND$y04)l-d z5uqIC0cq^e{-y<}QV>L-i^OsB<^FT}7&s`$N?EwPh=0n(51_z>5?N$Qa_Xh`X;8ha zib<3USZ+}_k8{oXuT0O^Uh^g$+-cjAau3{`pNbmc>!4wKMVC` z`OYMkX@M$cm`cqP=sQ&kROzTH&CZOq8eEchYScA+k%X@3E@IK{`w`YS$X#9&hy2Hk zejt4IY6@T{O5rvK`uJiyd_%w+nlO>eY#pHYIAo9!5{xDZ81--)u%G#B#lTb4*PbyV z%CGzMrP{D{tHB>K8wb)dy0(Pog+=;j9|spnH31z^JKgP~HD2?ksZ2x=u zPFz4APK!{s_+PaDV(WE2Q~`PW+{BT8z4^CTfycj1rb6EI*`KuD(Lqgyt~pZTPglSZ zfa4lp6Em&sF3x>J%3f`=bo-ib zSScpBBMrlDg6#c#zXDoc-q@Tlrm{Nu4Qqbo+103cHmd>YvRhVjJrer3eweWq6+2y! z8rk+K%h43iE247XbZZ_LEL-_PuUK4T2Gn6n;-Z9n6syk7QoXa{F7N$$%W2zYLW)E% z>#Y82iNV;_IudLvd|p-T&)1;7Da5nVBf!;$_h?+H{o-?wMa1)se3wk#uCa)OKJ*dn)>F zH9#x-3$@YeXSzNVTi4m#WZ|B~Xxa0-e>+ z8C->HUAIOv4So?PF?Sc<$~NLW2?`+8H{C)+r21UD8*pMh?_C~~g{ zJ8`>xdriVWw0K)}!o5}p5(%7-jyQ(HFczz5p0;{9K4{#|IZoZar)d%1mTELfo~BQE zmBY70{{@T20|$w3^#K>K~2Ar|mM~hlB^WjHVNA zPyA?UP?|W3ZjS~J|IpIA$i#o(@UD*}=N&f&A6SFsnx=!u%r3hlljcfX5sj%xa~sb3 z%#A#QF~J{AFl#>g2Q4O;kbZP^Ww2E2>Omk1JA~C0|H~C{fB-8vGkn87_bW4oCY)&|j6ns-xox_fArE8fO#ov}SL#UIyZ zjJeD$bRc8XO=R=ad|)p3Gvt~!+`}rli?BCBEct=J;!KeBnDAzgI@9bOqlRMU(z`lH$S6|#QTqf5VL|S62;MSl9fTtjrwXUUHz;C_0IczlCnGlJa00Mm80JJ zQIAE7kWUqE6w3wFwI=#;R|5w%h$ z;r&#E`I2pjT{tT5`c}&nhF+~Y5nTy6dFvuQQIE2` zRq_`jp2iWfqhzLW%sXp>3~f1St+xw#@8U{9382%PRl4mT4~Z`Q+)yj}bvCD_-ighj zEzvW^;1=kG3~udOeY!8jp!l9^#$`wGglVK~ZNOTxs1j>wu?V(|*+@ML7NuG}_3EpM zwCYpRpWgkYxz2|s<}!&RitoCbcX-rVzu-Qv1^;nz=oBvXVhADiINEi_^$SndY0pi# zSGoxU-k8F}v|Xucc#j&3^WBW=3Nbb%wTpk*2zN0!$*=NzDpK~rH|cfmmAySNWXGdl zglEGwNLunP8W>$iJH%@6*pr(2g`@RXbe9D`1kzV~GX&ZahP`{xEnLa@2(btC49^H$ z+FzjMflhR-HW2~R*AH~pjzN((l5LTmUz@oe-^~l~F2Y;zLmq!|4^%BJfdpf(`X{-6 z&g>WmV>(&{4c)y;SygOTN8e9q&SX7n?jr$X2%@o4-x4u6Uf+@}|JUE81d;;F)G(=Do{D<$kQvFh01O%d@!EEN@%8sAs^t zKh{lwl!0ZPLd!1d7u1Z~H!;tNFYDwm>OG!&NuV)$tx5=RFY;mRt|NAAE-WFgAjz1_ z50SflD7>gxD6-`cbvGmxo{=!Yzq+gGppKsU(bm4f*jJ;Ws~{)RkPJyRDdXEbI=?&X zTVHWnv7U<1VyUMQqN~IzjH(|uak6VqQhbQIEz>?J7F;838Wn#Zcl_=;^uH$^Fb8ph zzE7du%-$NO?vo^SR}Vh-D(=y*wkD<^U1j0|S%!P#41#*CTF|E7XW|xtVDXh71t+n( z;y3o7sUIiY6|G6ng$hRNeS8=BdvAq>hHFK|T$1mWXh|Sb0@j`(?`8_uFDsnue0dVO zEXtTP>nQChyt8K)f>zSbCI&VIQcn^I1zya!7Fvc(IBh(fKkL)WmT#ZmNA6t=88fS> z><14YAF__G{$|8%*uCt_YUWqO`td=OYWa*x#TD}Qp)Z`Be6GH=>0aI~$MX^6{;ls* zvAAzD#&rQh8U65`^wm<23Q=0$hC9IXaAh=W)2!@u*52kO|GkBB71-&9=mWSb2 zuF7O~pjvQ);YhWBb%OhYMlEIKGv*)5Zbw2a9Wi^Jaf_|0Gnb$<%h=72D*bg<$SK2V z4w=K38C#I!0-o6=iv!erWGplS5A&MVqrhfoG<3}X@}yoA7dT$`%L_QvNl|Yrf$8us zMpw45K{;NOVGj@U2IM3Mh-3FnWR1nq>UUA^)1~(BkLqPNcDRhQcp^<*x9uyUJ*#?Y zFPx_asogBv$22uS|-xPkEvK+RL7_UGC)2VElq_~ z5;8#w=XI4D)gRe9M$Q1Yu#!*Po1TA5M6f+j3gwS8B;Ch8k=G4!*>!EgNk# zNtSxwnR-j|EZAB1D78L>3zx65d%b!R!vpUT*z4V>yrz?M&j{_kYNHM`liEJAX}zt3 z7_)G6G~>RNllzYR`etRB>?<@{N}N#)QKmbNsv6g#We?60Nejp=;r=?R>kzzPRxuz@ z|NZ#Nq!9N^PpX^k-r%HW2rl8ak-?r}9_K&1Ocp!h1VdbBQu*f%M50d|pQ6RHzFDi; z3fHvgOId1aEj@D~^|eFkKE5iP%ccHF^qnk?=V@XA(DbdPZH~fGT_b#*y(>UF6T>^M)PAX^A{3q)FEDta!QKzq&*BiPS z=c~8S$)^7G(AJ$;p=qF1Z&|D$xE}%3K!_L567jN%(;29CU8-NRC+E?mkHSG2FcHep z5cqG@gpvi6MtA|YEgkn%p1)To#qXP!$sFq>*n|3yuwMZxIoJcDl)yg(1gu7dhW+(q zxvhUK@~;jEDo~LE`Gbrpo|xJ1#u!Uz4)?jN*OcXHVDdX9fyIYrFk?~K8h_GyoeIrh z4ENX;!vCWFR|W%w>KdWez?9%mTK&|}3})Uf;_|7L{~nF=|9dIGX#nSSIIl2L_KSZc z-mnPt03fv(;_)2*e>~+c!*fD0w7eLIDijd?>&<@^n1c(5qu}GY{6~{73RH2=08jM) z?=0MR8=CvQ-RjZ(Q`P_+3aI4Z0t)}xkPg+t_R<{sKUjP9o0iWp-ai_keD&d^leqtB z13th2C@mD6j6b#G19X5|M~=M#%RhWH1nP-6u-}yb*#HG+#2l>l|FlgQxMxsWuYfLL ze^?C++&I)~Lq;N7|0}_NKLJFcv=C6_pZx=@;DZWsys?V#PeVg_3k5zxVAkmV*+2so z_;mLRDFaSYHqTM; zL`Q=1r-ESM-cc#+Bx4*fzo9AaFlBt|cz8@5b)MtQEnz@DR24UBv1LKcMKVwMx}(fT zNxnw=@+X^pUc68Fjw2|ubmQ)*9cDmwoe8{?+NiRsfff(VtbL*j?lH;KnA%M*lRl^X*32)@uh@GhdOv`Muu6RkkZQyq%qH?ene^IPzV$9NIhH)^$a_~qxogaX#zu7N=|?SR zQJ5s$Lo=ls>zD43hpRG^(Tv2*Oucfqfu@t8WDcDN;m2zO4d>8#r%aF2P#w>UX*J#4 zVh37sO`^NQ=A&roB?nyGy6DVIKAExom$I zY;MareM*Ul$|PMkx_cusb%m@6ju%spU%4zao6kn8SghKc{R+DdpGX@JW9rM4%Cm^v zC5g{xIjoa9x8grqv)Sv+aPH=sx!-!V!tHXbU$PVVLIuxKLE%Rf|6!&1^jD1pdes4~ z4Y@^@50xE{C()qfX{e^^hckuS=d9Ozt z^>Cq1!fqJya5L)dbVTm9oy~uswL-|w!EsPGt4qnB(_)ivnRzX5#D-};U6}N6yGv4k zUt%3L@0axSAO(cLA(p5eO_kQQKUif(v`>HKDYA~l+O3_uGxE$3h)8WMOowosyD!-9tZ3=KfF@SowIn zy!p_Mg>KHi0~R@8#cDh!P&S=!`doRQ360%!A!I~Rgj9HYO`htc@N1tY(yGTk`bB=eUw`M8_&N%@0J$bBI`9^Qv$r-S`?WjR#O5ta59y!(kQ zoB3)Z<_|eS%1Gft=xE*Nhs(_hS<;!Agt{)Bo5QJFaEt@L#u|$(7i#;b9p^p<&+pII z$R@KT={P0dy~Lls#E}M)8@iA-a?yhBJU1cxxv}0@()Ol*0})jevUXyF-JR1K%Khs0 z=N_O^t0|C8T~JlmF@juqL%{2iwB%-hV(UTYWk+@Q+nqvLctOwba*^^(x-0{85=>@( zr+rgBkCQpJ`4xC`6rHUMecB-6A0VM`cdTft>M)dwov!6JTb zQCTW-Q(TzQq&)Bl0xug=N=9K!lRN@DqbB8rm*bz=jENuzw&S~%UP9Key-@^b;mcOD zF6qPd*S-bTLmuxIbHu~Z(kH*L8SDp=K1u4!|5y zUGcoqA*8jHfAy%OZ&1;CX}4AG>*O+i{+zVpV^E&8Ldi;26-(1FjaK)^zBHiH3JAepK=hEp%&2+cDMZ?yP()X@&N-)_i)P zu34|$>(T1_%#_a` zso~a1=U@svN1S&nZUJKon9r5O23KV4kyxZ>vICe~jzybK2N=S2YC0+k8#0OeGF>;5 znQ^kMcU3FejMSU0TQAhWsUzZ}_zq*dbjl*WB#1&&x^-gnFU<>)+P{kV|2)p|30qO` z5WU#G-(WWyzyo_;*FPEv193C*f3$<=Q=M|x=|dD%d_)$xEM|rfiO%PoXAIf{+6w^D zx2KUjD>hq2J`=86=_Y9GwU+Y}YUSEH3nlxgFK7pWTOOT=gbhRS>bkDqFH+OW8#jqf z@)!~EFPe9isRJ?aRAQpj;wdP^gaLN_R7nk<4u@`f6%0k$26XTe%3k+ps)@lu?gO>7 zrul_z4bsCS z4!Vz~R3n~C!gJ-<5~^o-Kf3Y&1$K*am#A+qHO2kC@I41hMZO}1HRbw+u|Gd-+#;J4 zBF3Bjsyf)JJ9Ueba+vK4o;c#_(5^F2NY!Q4?|>l;X*g=T(@qSSxSK84*+WW$9yrA% z@>?Xbu1Bp`+At#i8*Uf7jrQA1jWs0tdmdacYL@{@XIIP4dSI7LmiGIf1Oom=f4)=y|<~v^@Y+U^SY^dzZa~9(yp$ht8*7$56d}?|8qz zzuyO@Ki8heM5EqmaS%%RnM23u)zOh@o?VPZKda~MS%hh)d@K%&fJmi+r!uxB;tOk} zV)`|p!16ki!YHh0`^`YL!YVc?-xQz2_K#ap4UVtMz6{vPM43N#c&@S!%4t$;V(Q&o9Sd{i3fZ4*y7#;qnc$i3?H8Ulu~*L^=pb)VPx@GW#L5-zI8_C&P~8l?i6$I8t)rsNuZ55ZXmF zrwWgX+DAlIdr-ehe_FT zFYmkKOtiWCha+!ro97+Di-55on(#K5L*Wbq&rwFv=&bl#%e4%5vGB2l?<+}u3^sT} z9+~4hMqi?=>Ji*}+=x&@1U-XZg}1j0aSW8BuvA}!SCgvrM3WzRsDRU^u<#Mp?tfN{ zXKihOn)M`cyb>S11Eozjbm8w7J*=NeF%gJ81+;wiQMX5)A?sezxLa?dFdR4~I9{2O z#`Q29==mFZE@~+e_#=6u;h6fA_Y(gyv;CeEhIDnyt+6U?(bigkVVYIEgX{gUr?<>A z?lmTYjuJ#D`)&+Ian&$Mt=1-s9fmU>xQA~FEYA{mVb%W@fEq}kssaGQADV^<_f0pU zHXY>dqOqVEZ_8nxPU-NS%idcxA8Zo1OmSl3WA>@yp`fy)5N8*|(hqEpar!sfZ!JJi zhfO%Tl&F&>`_V>5R7CD?;eHIegiNd&N{Y=6sqZ0g9_!g>(`jl)0@*R78PE`DOGF)q zQ@93=D7UcyXb!aYU3!$1)fs&ec;029eFp=lOIMRym$j2}3{!-$nZw7UAIw15*i!NN zq@ha%KPkSysa1=WTb}sr_Y_I!#2u?^DxXhvW@)j}Q)FTq_Zs zC>M;f4RE!|f}%6W?>TXZ1y1>t6J|t3!%s9Y*0!7s$-#Sj-90VB!xJ**eAWo<|`Da2Vn{0=_>7-Suft=Ef1>N85V<&eD;aW<1pGEOoV zz7y*0&s3T&)|U+qDX4|a@Q=B{-QsF+s{S-(fzNB`Y%O?aswgHqt-uQGJqsUF1&39` z-~q!J7j%_z?{oD1gwUJzzK7Cem}90 z_Q*~3Fje*N^D6LG43@AAvS#x3dhuF#aKXv@4)B0s7$X8~PIqWIumgU#UVQ%Aa^Z=H zfz{~S#5%LP^kwn~ASU-rg?+jmK@e_uPG>pNa1*`(W0=w@7wsjX2S$bR>aGQADZqaQ zWvoMelC<_Z6Dhdq&Tn&@0gx?{!~UG}O}db$TlNLoJs&^nwKe>`U{k%9iJ6}Xki7D${ za@kHgX21{dcgW6c$<}U{Vy;Bv&hvq<3jFcKwj;b-4L~K^NszQfvv(=r5#yHwD!KHt z393x5L*WgYC&wC!N;S~1=j2gc?{Jx-JeBG3I&RFtM7Ge>q0hHorVwO-u2S0%-3FW` z$9^bTyzI`oPJY&eZ)iB4=8D;b?=$wzLo?47nuRb=cD92G{NT4Tz1tR5R~1UONt}lB z)lX(cY~)+oYv;1VkSd#MeD&O}4iAvp_%e_(>CsqQ9&h*fF{hSOSM(k`R77I>a^7Pb zNpDBt^CcFTUyCcV*AnGb!*H6;Wa%vynNmn$c1%Zg`Xe`slRM60U>+t^W#vR5Ba+?Q zL66g>i)ZI;?U4)R9TLBMw4FbW!88|LVBX)JD{mFFsljX{YFXJjpC7Nz+9N96H#wG@ zA1ynt9z4=&z1=!A$)Ys?`l2o;a(J|&&YRMQRZ}_yV;f1)_GOtp8_;}n^DA!I4foL& z{|z0Je-CzxDR~)FwtiqHMYc~UoT7Q^W6`#Kp*StR&3G+pdR%+!3QO6+0(B8pm;Z7V zy*P~4%{)`w{uZGgs{Wwq^C!aJp&F|;!Cr*OQ%>yVb&aT5z?oJS)jl3`x`1+Kxjsy} zA&=w9vW)TkK!c%0&nnu18J{Xyr25)QJVY?Px$1Q{TsNOdmR(GORvp0NwY?fv^)8M& z8`jH3t5(jRz)__qs2ccb+Nn-_lipmO)<*TLwxgQ zq-(EZQIWD$Z^-gR@NUG=0E)1aE188L+6yxj-5EX^3wPJ3%pwpxx#5R)m(W(P9+*WX z1(&MNZ((g;KE*0nooPbX3j~elBb|KVp#dwc8lcjG{hDb8()~)g`u^%^nH2^u^w}5} zFKkfv2YWn(&l-T^WDKFhQE+XwU!{A7W<@Py_L^c~gL#c~?#*qqmz@$!ArC8GA$ir`*yO zc5M1F4(@Qwe&tzdO>?j2g+s}!0V)}>7v-J{H#+h@Of-(Zaegx7Cv%pC6&!}G$tDa+ zUK()1i2Yiy@_0l-t!CyqgiiQx3AqHE#q9nkSr)CAxeG-|&?}4Y06Xk2?njCj4$UDH zfA1Rvr)|-T6ZaKIio-W=*ib=uICE*me9I%^psP_u*_!@B0zVR0Q;v zBU4OmGRAHKpX6%BM0!{MlVU)ODQtNaF4M>fjueycFD!P4eXA0lE2%QFHOnW_UeRk< z9j)1u@~VFctrqT`ppGa_tJ$!f*5e0`lEhXaP57r}K)?Yacll`jEj+=8Y0Znt6*w3K zoDf|=F~qN~Zve)1B7d+k;TSBg8}lCcTR+-d z;A2X`%zibZ(NfAVltbU2|LQMXw@X@aL4Nu-yBwhCsB_@0oP$iP|87|J>sbNS0P+B(0hE@wam(#qbd68oA z$>^=%69_6Vts|(euJnY8VVGTM*S$A>k46r~*AQ2#6_V=$iCbE@&oSIXep-72iXtv? zali%zq}a0}Oo#w3*k9CNE%@;}Us;*m*z=uJZ2k96qz|wW;dHk4+)Cp{x$*MjZ&%D> zgey+!uY4%2!6w#AJToDAV!ab`J{B9bdv@(Y2Hpyoevp5L`Ua&6mdC zTW$tB9<401b0}ZBYur8F9f3yDc%AmEdNnV0r=4?t!(^pdSshJI2j(wcyx?ygMMuG- zikT1zx;SgEc7*JjCac!tIUcq^vDUu?2-HNioKG|3lDq#_oeGx!dbR?^AeW&*z7rH1 z3tI4mq92RUtX|)7Zw9lKVAwyI!(<^lm;idm4f>mUC0mhhI+YI(Y`>a=kXD(MFEF49Jm{_(NZ%D z5tvmw(jq{ve-hRMHV_>^FZW=&W-w(y551J2i<$$=4N8r}XtF)7R>JVpIfLj%m@cX$ z?N5517YWNYU6_|w?T}^YiJ5_>3W35GL2wvQm@MsXMi&+nb5k;c=;JLl1PakOSEz3T z+2(HAArBR;P-KN|nD))>cJ4u(ypSy{5*HhkSN8W`SUV9lP*}UO;3td1=x5!j5=Oxz zkA({ZS2SAF=6lLFoV+|w6fceUAyaQP1?#4v8#HjYIddUnIUKG7nq*ID6lGwc=i8yWZo}{Yok8c(!K8eVN!{xEtE`}-LHE&5+XR)DEn%fokED>8Y%aSyfScJq}uH!M~2%hTJYeqOnUrnRM@ z#d>CmZ#NVqH5m9rySwOCrct?-;l2Qko??Ly5Z@9oX&RPkft_Iee}ffgW45ZCq-#*H z#3`D~MP0wkI>`^89*vu}@&tDKwcL6G50H#=kLCQrBOx+4c;(L}*@VZo9>o6EZA;>PFB~L~7(q-ig+N ztluO+gtXKJzb6hx&Y8f=_v%0jWNY ze&;BMv?JpnHpUn$%|V8A5tA?O}G!RjsbPi1#bP% z`wmihtPhcPiQ^fvvP%*1jQ}3Mkv*K&QK7pzqa>ZpYBH#LH&>1(^1}y(t{<*em-&#< z-V2=eQ5N_@vPAr~$3*5aAh)ya+6Df*L~m@e79~L^$iD`HzVJJjliV}(jhCpi@Fe6y zu}Eey5s~m?U^qe7xt_A1c?HtFrn9I93N(?7IKmsyTD9qjR&z}M@x;?gH(tT52G=>tj2M80j=q-A5u-OL}Yb1OWT|g z_FE*>w);~Vt!AgPMcLI32G;CA%&zbP+#<`lN{ai9SL791;1SGH)ugs$;gfFMWv2o5 zF+8lg{!yDTlHWKB;_KSVpHN_4J;^rfJ))6t%kek##MIQi-7yse%pu5iuW%E;pu_f9 zr$btmL2pwrz>4yS1reRIE?dC4SwV1s@tA|=5{iita-w3tzrNV3`x%w(^Ud>W*#s?P zTMn;U6}SO48OLyI^WC8T$JckqQ~Cb?bDYC5v$D!cc1C4O4zgz%WhNtJrL62jMyYrg z6~ZBV@4X5U(XsbRWsk}p`Ca!x_4)qs`|theeY?+fJ+Ie%Ua!~dE;?N@wl>$ZRM1FK zyuUH>x%2X_!$Q~F(Do0j5sjaF=~cot2;D4e3A79Q5dJFrEZ@lfiL{V3gC(hX)_qwv zW!9F92M?Lkw?d7>{jS3bPST z^%)2jj&Qe?9v;lQ+Q;>R zL1|tO={0M^&KY^L(>2R#_oX&GhMo8(@Y@fN1n71j>>7D|_=FQ8aBbLaz;q@ph-Wt0 zffON58=#Y@)2+$T>LRmq30r?YJlxap@gG@frcJ)L&yib39{tGzn8&w2%Lu({ckmGOc2 zfYYx<$!lAwJ=%duA{A#JZo=_n`TRbAB%$nhoHMe9j6R?exzpWz~DX8Gh+m zz2gJ_4_PeC*X>n!7A)H7oY9|`6y-?$f3)2HEHj{WdD{xyRDK?f7hbOUrS&Q)$&EXz z3#EDjUGmXN$79|<@6`O8I2M_9!@mJ*N^L-%@AOG?N~eA&8Ff)XNTQX}5o2=lso+L!Ih{_rSNykM*D&0u#oWW0nK;)ML+vN{`#wU(bs+5d zqTqvwmRKd%nayh%8#PyUy2phR=AL-&oG0KJwLYS}9ja*jLd3 zlj-F*Nx!<^KaX0YQpsiuswy?CCvr6Pn_io{)%mv=hfM(C+L3KP;rViY*VHnmbcEI$ zS)1<2cTHrq-{(MGu(AoFoW;%i@C^Asqk|C|(TkBi0`wmEf(TsrLBAO`Xq!!&Y4Hw6L*h?dN zc}B)&O>N}osMUoHe>yj^0~t+3C2)8n67=`XTdc>`$xgq3;d7BJt2;Tsgf}!aBt0gOoJ?d==To`cZ`#OVOEX{q| za}o_s!OdQi{L4Cd-OU8w4MXu}`SK5X{SCm!nA~luUr()%_nW7S<&#SAPbc1#C-&#{ zmLu?suYY{bbwTB%e^rS0HFW)%2r9#9y2jqhk4lUzQ%b`IyFw-v*!b%pLRP>JYxVL> zsDjzWe8ep0^f*3u+@7uIT{7$>`;!u|IU-zhjd?k>-XRW5&eR8Q-i&D0CV$A%!k#p z%JwL;E%jTiR+qW&S~{+Or`b#YA2H&DyFSgfH&t^$tS!|RF|MUoB$rZytLN*ZBQ?)Z zM#z*USK{^M@9Wu)LkiVKrHiF@T|;lq{>>ZikUE&$>|r9?>&UVi&|0F&O(_Ni3o+Gi z<*)Xz_MX)|sS}wb7epwn$&r!5b^ivOS}?LKhU|I&fseQ-Q`B8oihpygOK?|5^#FF3 zqLF#MRZIn5P#IPaKUaaWQcG^n=t>6?uFaNvk#TSNhD2p>-=~dhU&P-^K$xKo*YE}8v%i4vVjuSAx9A=bQCD=n{=~ld>cAA??#knGILM< zA8}&G*c+PmT!WJ2HafP}f?6V`H=cH`@o}Y zW7%IiKg`3E_>Xwuq0NywhCOZfgm%v}JWVd+`^$j`8q(6{F z3l;=wF3#=UP|M#Ft4!)^H8f~5sQIT25VeQs|0Z5w8Y=Yk04)InZ=g)Yiy=#Gur8@f zjuP-Z_0RU3karzp8El>b?7K)KKk5)xZ+k3Tm)dvmHokQDm$ml+Y=)gphtRIrv_BClA9Ly{}G%vZj8N_sW)z;R@9*4RnghhzwP7I z#b&|d;{{8JG7YfrEHW*#Q|F%6O*g9a2e9uaGuTlB!cvOlY@b!c1D3}O>tf}kQfiaF(A zE@G6Xj%WLyzrZlyn_5zv^ALuDIv=)Gpgnp8;S{G_9{HA(86xa&{Yy)JqR6dmxctUd zoEAc?n`Bkr2T{GOZ906tfYAM)E(`NGyn&ZK)If5FKy9~P0nvfyu(0&o-$EyIg2(=b z)ZM12fvBpo6zE_-o&$xpgtg+!Ilm1!E!D~HB$NDs0PPC+)|5QnLj*`csjl3K<g0*i?;~+EE1J!^({I4$HGv3*xwPEuS;8_5sJQ)IW+q=lsb$v2xtU

hq5@1d$Cq0f6My+JqQ4j*su+4&nw99U!iW{(D~bt44MK;KATw- zuhhs4#cFzkLqlI61{Q-WZC0%6UcFM+QtLlu=e+z4q84rL0^ER9OGwJQVShXe02m^d z-wbc=e$(-`UUzc2Ow#w4;XE6JiWsgRY%kYT4N2=(f(#uWFfz#&{JUBM37$Sf;e>8w?7FNa8Tgnd6rYhF>Y3gS& z9@ozq+IpLLlnV?+y$E>gg8chd4DsSM(TTcK9*_D)Qthy@O5TvOdrcDgky5uanZHMt zi^G_ncAqQ%uLDb|3CKeb3#a&qL!s9s041^^;+-5v$OyN+hvp=eB<-=y2tZkrp1$!* ze0L({WAqpq&SRdvg1ICA?7iHZhCZUwvWpX@;e>x5XCj_uioE86etJrL_)BwmE}*Xr z%AHKxJ3I3{Q%CG|YLA)F+H3#Aga*CZ+Xqa;$Q#M~i+~U;1uRv|C-h^=uwc}xpQVM1 z0ex~A26BV)`)GwsbzSLFaI%lE&N-%fz{Cj>+z!`zW z|5n-Uj@Z>#>OQ9{KZ9u2S;l*#WN&YedUIM6&ZhuQFR(9PcBur;`d{N;Y1ey+sxsN# zpU7q%>Y_QgBcKfK?`8|l!WFN+lmitqrgV)LKVPy0rARNCeb>4Kc~$|5cYT%;T$JT9 zgK|cLYIjHP^}g%5AU7>@8oL7+x?(C0r9ov@Un{@{R(RLS6OoJ<%7xGMq`%@{5sm6d`rU{9d zbKzSj@AsGY&gWynEJugv+KZd?-oJ|_H#(#D1+vxFCLDinj5wFscAfFw{`M+YIf7+b zVt1)L5vsNzD3|O4T1*Byvo}F72rs8`Yy_Lb7y^Fr0EfjBM6w?K^f36I1!t% zDz}T)lss%n)4PgjB!Zh3`LVV2u26RFu=3~iD%qtk{s+5>zI#7fz_z8l=Tcvphy@m1 z5IOl3%E!?JrRwYUd=JO@@33kz8rJ*Oj^rDa-dTQ~=(m%(|10sp)zNMsFFyWW8?QmS z7V~Dp1v!X^_g=0{uig3*z5(%ei%;6GrsVMC45^&zS82UGAb&TrLy+LwMjJkMOlYVs#8c(gJw!y0i58J^W_g+}E0|_#Fh*E$2Me zj1#NGd>~@=nY>iD^@X(jBUDOwL27Sl`w{5#NF+^3oWC$POTAvyj&RI$p>-|uqmoE0~E5Baw7nZbNC2`lCmHeI|(6lQIR*+lcre= zIPr0o2Vbe^@vtJ4pj6}~8ivb8bB#*d{0{a#ddlw4bh`OJ9##&Q;bTZjMuox1NSs=~ zMqf8`d51voLDhHzPW~>f>O!@>fUsUDVg}^yeE-`UwO*y|4mtr-pcbOwv+TiWt^fFg znV3MbtQUc(2XKbDm&*JhBW7ZITybJwEOtK+k23VD>Hl?U(E`{EwK`v;U7b^_txwvV z)J7u?mYmhqWIl{eyo#>UG!)0uJ~Vc&6)o9*&Z(XQu4a;Eeg}cFxNh>ab(4v1`>xj3 zby6|s@kOx#5p?%s!r``SJh|Y?pA4?404A3Mk~^>cy$+W`y&q`&Bj@wudU%2J^6uhA z4;B(UTWq~WGfDYV*@lSGmfFgFA3jdProhoVT%JM9kYG0P8;Tia!G@X4cG@Z&tsy- z{wb^;)DhvArIBqZg1zFmtR`m?^BJ8;sz{bA1I?$#zOpYb=%IOju=n&izfl%xSE^>9|aW5a-0`=)Vk(AxTaX{ zKZg}RFnZM>#MEkE6_~~`TS#ZESBA3cYB14dFBuO^quA;>L7U7=0+y%T;qC z3H=-AW(0sP3s=WiTB+W<@#%b568sIz9*uJERR$uB22gSY^|l3d&Fzuc^3C70_<(%u z#oX`+pY6?jVLW>N5^~Bpos1yY5);fA%|1nh1ZC%oy}H_NJ^TF7)Skl@t(03&$%4d65lck?!#^QNBNu*y#ifbLi5WSTaEc5G&tL44V!M zNZr15J#H-Xc9&?%vn`zVf9)ax*Z&*$oJFAqT&qCQ&^@6jqnT?RTiuDb)@Rz0u-Zl30QL=Xr> z2}_`pLS{o?g6#fUPo9>hq0a5#$8@*!ggJd!{o@JC(VMT*EO_`8JPLHo!i>q z!Gg~Eo3DJ~EU;Nm74!Jnt!Q!!(sZS&xF~QPoCpoiGV`6S07)$cYT>yna%YD zY|ho-k^DJQ-<>sHy@)jJD3LJ15*K1^T8WCOkW(gN3R}0^ZtJkg$vsR@@M@zyd!yoR zQgz?kWwoSa1dE$8(wbqb{2g?+v;_4A=%=E0+J)*JOsia7^6jpwA{T8WZgPZYMiz1pIUEid}pH5&phi#@u&0n3MV$VKY!yx({A$ct9U5l*P}7l48dEU zO^g_NDSr~f)dle`hg<~u8oVNe9}!j#(&Joc*iuGyb-d@Z_=(v8ywb3=Ke;C|>MX`y z+_dp3?hngAcPes_dn%1o`9?h70zp4tY|tNjPsxk17c;Fse9|5Co(|rk3RBiJE-U3X z$|JsFYzsg33<0Pgu&UcVrKfNW0_LH3q_WEe$lkZlUYR=G%yT}SA=bt4ccqT7-P=M% zLd!J-6wp6{#^DQ~cQ)|nTGoCXVJdG4RJ3)tE6^irUwYKLI|9;F;#5%yfe z$(p6G9xkRogjC8~)O42p;%=O>(NYz8&yO`p8?X_K1|Tb<9%cR%>z1|P7;(s}A-rpK zyg@vCK*C&rk@+w{Ks<-YpdoJI6_$J3sT&h+qb_HJndKFZ!N`SE|(HF_YCRaec+7(Bct8cKpg{yui5LG(t|n#c?&Cn|*cqe+|LeO*%+ z*}<^U8aVUQ#y?LYXNT1X%yE*5#t}h7Z(zlJfUeH%Ta_L9d}@I(O;hC03_BG?^vgbj z;hK--H$Tab{naRbh1 zy9QRg{@-;Ihm~(LglRJWyqy!xaqs8i*vN`%s_qvP2;_%IkP1_NA7r&!`!C+&Ca>sU z-ywmYR|?f;9d~W#c5g~eeU)=}54y=$%PexJXi&l~3dpEAqj22G>-Yh9zloE6Vi6}} za2Se-gY~fdm5H;}0eQKuPZe>+GGT}9V z#seKvnxV_6-C*(y?ieai#|&SwJdy-FP%>qE-S?5N^!A38z1R|TRSM$-IAE$csy>(u zCHc8Z7yWG?N2vtZXHg08+|U0n-l}5iv4gLF2caw#fJ2)_mZ8%lMD{qL*L<8!~WG=pWDw09x>Y9E@Jq ztv1TttRMXtkx=))FK5U4T@C4A@$$b`60HQGE=Lc{8D>*Qa(L6{Gu6whs8=t8o@gGO zGg}8p`cv$AaAV6*4seG5K72S&S-RNeBP4yxx)fCstn}yA9|5t%ZK`l6!xkJsQ3oXm zvtGtVkQcg@#)wg6XeFIL(hN!oG*k9Phb6o;Rd}AIEhP+jwiM7ms$;&2;=jLSbv*V9 zy8c(v*P>ybTchtd|t9^D|WQWCKb#^n})I5?do zyhm-$A8@qw1IV)F-+1mcac7=#*N)!FE+%D6x%dcZOdzaU=wrcyph|0N1mh4h&K zWQ@~_J3d7;3E-<#2ILPx+=4*-{Q)f{U&ikqGs`rg zMl;wV7#|S>##&_lURxwD)!nC+ls%SxwzCbT+F^mv4GT&h-fE?Syk9`ky*iatmcuec z_HO>9(XlHnq_ZtJ)AP~{MW>Ksnt1}+o+{YhbJuHYwdct8VM9W7B|N`nuf;K@f#Ti>of5orAV!&*5?E&Ul=1N5}#;h~=D#exHiR$|Q|@OX2fsm|e(fIv_m z|DX4^@fEBjlkHmYl;@nwrXPV+@CP-}RI?&ggB8-+{IXB5%M_~pjw19&3%LaD0cVXu z4sHE5>|I9ck=~IJ>-}keU%egWM)LGn zwJi|$3~YvD@kfh_Zm^9*qD_4cz!CT^$ge^@OO(`$#*Xz!@7O4*E6#@7zoI0>*>F6_ z%m!#7jcAN62{(Ngx1wsrtdlMszxX|@A^JJ%Q6?=G zxs-er91$=K;G8P(2F^_}U4noNgr>1D>{DhKtV#ZKm7d*vf+~IV;g5}-f>jxGiIUwQ69QFvp7e^Z@agq|@we0wok@Qr?mf&Tj&@^`5p0-J z1Uwel&w=lt9ha%F*kamx8)-g(J$oo~-D;Ti=VZILgbm5;`sUt%u?A=3A>S}y{m6MW zh$!K9S#-7LS+fL=qmTim(ojw3GH^DD9=B#T$}1ogkXwunD4jb&#A2g-E|0pvpzF9f zL4_ONG<-JpAx@Gg9RTMKul9%aRo(GtzJn00Otr>H1s}m3NeDBvzvwtEsoOoNA*l#f z$F>a=O6B)ujX}mWp^Uf!OBc2yJwY|lPck*VnuPjkD1D&qO(>)9ObMPKFHBuGgkR8! zmp_UdRBoX|+AlhMMA3O`ObLGP1#fMJ>{cPg)6F@P3D0^@*1(-Vr~y4?Inq;Ab|633 zTy+bWDmV8P7Dtr+$MaNRZiy02V&$217}t3Q6d`N*$-k%2!}LKmFsSK3ow0d6h&X6ia#d*5^8?0qUx>BMi#%I2yk$ z*P}}64ByiAd%L-_4a;*JsSuka!c`#2p5!oMxw{0OoInNXsl)EiME_NkTq}n<4Jixx3E0FVw~Z zJpRa-Fn%8MdtpzAic1Lq#Tc}+O>FVWQznW}#p&S88QdqPub9o$Z@DT6DJ z%$`?h$rpi|2!s2>sb#!zifjZuyhnjQI)GTuG||rfb47bm)@?+N^`XneoPn;5uSEEU z(_)+7GcMeF>=QwMycT@oS>XK$5)lA(wslA?YA=(2V(jzw49m?a7ZqOmW7#Ol&{g~w z9GVfEL~qZR;KFydG{`eWy=Z%n$jclM+~bY-^IFhE0mF^+W^;oyc&v`RDQ3y#z|6V0{{a_4)22c@+Z06k7X0g7)fz#PUqPz=+nVW0_NdnUKOW z#cfF;^CJr_8Pr%%!Je`(S*XtgmxrV~n!FYH6IOlhb3ro!2=dxIM7W_t_XM!5o>zI@ z@Kp1J%3z@ch{kaO2PzHh118rH0+5aPA^@yUO>ky?Bx-jzba3El>usKg?~h70uH7(C zY-Zf(qby>$RuL{K3Kolr1lA{5!jsw=UC-)KXzlRDlHS>7{*Vv_gUENp4~C|Nh~;$; z=a-`b;S5Wh$k;{)n!$88<%PmCq&Qjvl5_(6{kVFMY~P+ED~yMK6Np|NT$YAUXSy({ ztWK=FM1x0)=#VjBL&Ju$FFKClIT^;F?omM3_;7j1jkzl9h<-`t)9hYJkvwV;>sATy zU+Bpwmehyfg;EP)G8Qfa%n*Ts!z~3mv__7U^3hv=!!&_E4Te{i>ua)wZgZMT(t2) zhj*EjHu(D^e*Ne7zxdE*;lM#=0RtO2e9^8ukF(vsoGahN#yG1OX%*`#nT~5BihK`? zIdx%alV#fB)lN=r)cdhdnb6BPNmfPgJ-SrG=!|dr@J&&gQq2j4{Uh0n!~+;=1+e2| zPeZDLEC5T#Uw-3y$0%Moba-CM>SBs+;?Y!~Oimqd{j^-E2xEgZgZz79;1wvy@A1?# zdN;|LUwQh{B_o>eNVV9m!uE_4c=LItv(U*`T4bLjrTg!r9uW6^z;yeR%ZQszs z771HtWwGF&FGO0gNrx&Op5G*KuknAk+J(#ul`oUwzz&9>T6|X=fP7+C;DIudzj&mi z7#_6!c6k*Kof#xj-DY6xB?m}2J!T1b^J>VOmxtOy;Sum|B#V_2jo&HQ!`V%D6MsQ* zp&AH}lg=`aXX~N4s}tXq@2G9}CMk_a z0~Fc*Bmivja3+EF0!7H5$M3wk4>2dnP@>Kxx}jRp&{0Xmz4!X`@$67{r`|2SxM2#F;=& z4=&A-wDU}I#PK-eq!m z8b;1ejEhw-MT^a}Kf=kLo(3>OCx2P4s8MEY4^kRmkF%qRMtx?-9ZI(b=EFRhv2=hP zwO#+x8$key4m&W+d`&H#(d>8a42s(%&b1ttDYGrXx5UMls@~8*Cw;tR%mw&8Rt5)B zCW88orjbaQ(b{`fy$&x`gKS z=*H_3X&Wt2;0X-!7hs0?oVE^@#)#k0_Em2FNcT1m!M}auHiNs|)vNGmHm8iR3ikPv zqIceBog2%KWv~=+dc<0*>hnvf*o5XH8#Se7jcV^}leO=4Lo~&)9lnnqe+j(UfJZca9ZfB?P+V@ zd03mh2IcUm1|s}Ak`4T5u3sEFX8j|A!zQtbK`yw286SS;491?HfQ(92Yz%_hhZ6Jr z9g$w_r+ifY%2`KCp)AIq*_~ZD>3z?mQ^)RfN-&?oa$pu`hENIc469Zekf zQFYJ(27?tOQO=*fI0I9ERypXP-5HlEcc?ze>{w6o^}N)sS%F%dT&!LVkRxPuv6J$L zz4#DsM{_6qrw8iU;fEMdVQ^RSzS5{e3JKjw0!k!{18c^4(O*KJm%WWrWQ$iLd56<* z2?1;=yVFQ|@!;DY)iV;{$JkIXy$f(2!-rM==(&;h&3YPd+>=0UjRNd#VsUH=9!wIf zm7OR|Wa=fV`FTq2f~IJYu^~GXZngA?oxF&VVg3w@yXVE5pf$nu1Jpt=x1Uvv&{pJ5 z%!(yW6Cdu2(w4d+_qqM;7laWwpzpDxI28nG?HVP~|2-`)@d-9Il6plC!`0B;Ri4Ct zFgB?BB)~tWiu?~+6+0DJ#o0$Grvwlz2@;c0I zgpBvJ)Pe+&Ph=Kv#MR_wlO|CfeITV1JS(|TF#RSxJOHKiGJ&&T)^xFiyG;R!xcmmALxdwK(kVJ4^I zHObMCM@WJ&qqR$+St2I8@upyNciGOFKH(^apoZ-aG&`)<1phb7ACEg?o+o(GWWg>o z84qZ;>WNM#w!C%WIYe#rcHj2;Wb6Dx8Dm9Jg=&>chkA4e zeO~muH<#*3g^U*(GtkC}fY{z;BYrqp-|(2!sc6f6eEGNf{lkyh&?8*QdrKpan8$j= zR`0iR;U#HyVb_Mc(&cqck8U7wu{0jq2h8HguxCG-d*lbGr}xgchCS3UGes$mg3~Ww zYH6!n^hx%-OIxMNdg!TCNbfGG>*7*A z6x#_Pg7{*XkbDn!Y;|>0}*ji+krDB}0+e?dyh+x;paWjq{B5*Q?^Fn1(9vLeCMGcHo4oaC{`CzUZ=pzerOL^;jXzo zq7g@b<^z=GOycnAc1CnaZd~qS*Mh@!aXPds7ccxUBfN-C&UMMIUv=VN>gTX=>^=&N zW00$EPF!k>G*bBc+5?>AdlA=XsntVq>jpg4G=uqM2M`5d@R4A}BuSm;QsttTp>6AP}!YD2G!3SG7qD5C%v5@|;E5GeS6GZZ--C zPyCnZ=3A6EF8qFb+uP#SEQv2J$_Xn%O_zSEPE#BTsKZ${T9W{|kU;RMArb*$m&G}E zHOH$-jgwo4%I2zu8n|HEGl<(KB~J>7v`8{P7sgZb_zBxdR}~{ubXD1L6fXJ+yvpg( z$OhxNjn`Ck(zr-zix0&alwTvlauyvU?SFR?&A0` z%;;ts9~R7Z2$3zgxa2b}J_78nDu@;Yt%Gj7q2}>rvorPvFHL_gFN}L>0;*io#r}1( z0RIDN+(}k&1Gu~;+0Q7$sekY(pJ69E+=&s%-KTfv-W}S%Wu(r>NiD&!COI@ZoTjWw zC>$mAnn@nAq-Xer%}qaz$F*2Q{O3!6bpe0f-~y!av^M3`NrTBe0&PAAywiuA3EBWq zb4KV@4hYi#T^QK~iD-&I7fth>uQBd=(@XD;cOZuvI12_=9`5e0KJZT0FDjUHA}_g2 z<JRH4;6tUE3kU*_f>Inyi51jz0(vpa{va71lVh<1=izC zSs+^j_+(Yll_#CZH{M_Bhg?JzJDU`s-GhXW4lAlWz#?{dWPxXZo55H;mWZbsth7&$ z{yo!IR(uK^)eBk}lv&I3V6E*(nFROK+<51y-;a0U`by9RBsw1{`#*IHO~BV=yyYM{Q<0BxS_!t_ZcrXTgaIUST-#@L9K8Sk6^tcF8-iI;x^|A_sWeJ+To`QNmp3I zUG}nF08d}x>T?wtfR(RFo*U5YW`Q0BrPz1_4C6@Lf6AQ%);lAH!-*SCVOG&#wlH&r z2adBul+oL!^xNkV8b+H9%`>d?a0mS#Yf67k4#` z)r0P`&B;Fw2k=U?&d)~5V*2pIWA7gN65OlOq>iEBVDO*;WkPdU{w;-sEf4X zSZzj67Y)Vx{&8dEs>g0@62kuy`r*pU2C6<{@1)0f2+ND)MF0W;Be1u3EH-?e^AVO8 zUvb4@5(ADkGLv?fJrdpURyVJ3Q0up$HR`C@<0+`$xa74VdIM(z*eIFsFOvszMY}d3 z(El|m4Gk?+S5cCj$Nf(@sIYqSUn4Mj*N%)H+eJWTTYYabLt1fSeGR*r+CVC2V7my_ zVO-I`lw5W)zJ0&FEi5&D8A@N0=)t+I@umd@Q*OyB?*EBrDB1AyPU5T4CE;=$D@eUQ z=q-k!++jh>>Vw`V&%t8inY@?SJd*vCz=k3lDY{*2x8iB;RN@Uft3_yT`xSZA0HGB=hxtk0osr-;_5W}V57j_}6-DC{jvuD#x1cEH(@?5&Co)P%)5uq{kF4|T zLln*vA)_3hjC_y;_dk-4*VT3;5vA&6pWhaVC6*Cj%PjK z5(T_znyDe~&^z)0YkY;XXRUY=X2UGqrgoh zdX&@QRhOem;!^=ide@MU?_5>Is4I-RYuFSjCwkgJB`c@~Imj7kkgx|EPfm}ty&seF z3WY+JNV>^4iD^eU{1xC{!&H*z(u`rg%i4oG|G4AUT+~X{>%I=_!j{pjZYIct1RNV# z($t0-KBeHIo313#PhnI8?)$z#90vc%96+92?`di?(@419dT+L*EE;5K#}4K1Y}~NW z-Vck>aD6h#cPUg55NH%JFoGGbR1UA*=)F`NQ@|RpdbA zf9ADo)nZ7))>ZD|uWqB=-A^4T5zwBb@#9C_p4l8l;g7+sS(rutT(K@}>?OCO@d@Bx zj)0oQpgw-DaE$*bz%Sj}(vJHbc{Z?O<({GkyrG9 z%LwC2aH{6iDV4ZY>T3w^&ds5O$`T^uQT1-;vtxiG9?C4lc_Y*yz!hn%G^fpmSU&CJ zz&6cgi`y+1e&@I2I5sQ~h*DRFjEskd`KR|OG6NB%jHlH}r=aaJ5oiD_%)ZZ^hhzX{44F*M#uX}_$cDb=AW~PW!%DiyT)de@hvq?6oF*-T zryj~Qt_elLg6IVbJopJ1rQ{%!@*fpL$%n;wMEIGWn^K3LaX@i_hpm#EE+fAhPRc52 zb^fA~JdFOzU~jUEPg?rpu;W1j*8;@9rGeN)T0>Ih9D3eey{|$Wu3i!Y^DS`b8r#uW=Ry)sSOrJUZXGTNJ&%h&UdDTtYpW-EF|O z7Z$(|t8LpI431MXB@UIqL4TPRTNwjv3I$Fqkc-AZ7JRE$jp1+pZ`2=Fg4zzLaIC12 z>LzqO>_S3s09mlr4xORAi<%56qN2DWcj$wuC*OS9#pyX7dIN;~wiBT?RCnbk8-ht4 ztYx|7*`dZHwxT}-Lu(!WEUp0&r3B&C)TD)^H8B5C5&mg|R*di&l$BjE!u&YB7$45@ z6g6|`#|G;`va~C1aRN>vD7^i;crhh5Ij}_z4?0ObgeygV0rHXMj9vG1$S;d&p0N?_`F4adbe1 zL1-Z3wZ}4!GWQ2-UDOVnp}MPqu~6;qUr&pDS6D&`=BGW>!>sI7P*S-^m*xw&p{?b z13=t?DYlwv9!E;B3%h?Ubl<7U(`u5Zgs@^jxIXKve0hvj5e>k~-E8qGz$*2`Sx0;A zKUksZXUlk<$cq8jt zFN6VuO*GR%>4ttA@&u8_?@YPRE;i3Tv zE^q*r#K2rjohh&w)`WuonP-DPAWjGclM2my?ask~TRV~stBQX)+Lb!;6~|;?L*(zq zrJ5aTdUT7xi|n3qS9H z^2*n!h@A?@*bV`Hj+gFLxXXme7XXdR@4C+cLT$_H$E5t}mzK~9(R7oej3B_ggmXxi zU~>{LDc{RsieU=$oQq3pbm+w#j(lZ2v@Md%kfvCl6r2OoP}(cpnzteDhPCZ90s0cj zsCU!Qar6=>&>(qnaGS#m!ViBF&R}&{i2KSzR64vfPPpU4z^Zn&ZdeT^c`gvo2M7WI9e`JA>kDx@x1Jsh#d70%wg8acOROC28)(*JO;e1FC!S_Hs z|4!D}NU4DsO$G6D@qnNEj}*KC{hsu6uV;JPK!vsS6pb7lx6LFdS18F$wM6=`6|7aX ze{ye`#Qm7%!D`#;g62u$gz(4!EO}zylrIgstP<3yMJtH2-4)yI~0$@_~^KV*@ zXRQ4u22>Mn0f5XTdQtXPy1eAb(mbF!v^07%OP)u=;m{dSp49iLXQh?+(|8yEJ>RrO zurQFT-8VnZ)hJi52dEMH``R(%rymguAUeoQp#&-5mY~j6`eM=hfV^74o<1_TN&r^R zQ{c-;XlcUJ%t_f0e+`%4b9<(S`z`3+r{5iAZw5XCi5;a`6 zh0bPLtTM+E93Iqa5_r7kB#`BX6Q3)(Eu_IsZ&SCH2US=~K&PA3OyRMS`3f;Uqkf~!ge0@9idmige@cXK4*$A3pBw#feD=XqlRb*JMkV=RfK_<#!x0#m%!ZhUP&(^+ z12uCY{+ND3VeZ0wig@10C_{4k`y|2A#C)|R6{#GAcRUrgQe#HsDF3DebPlO3U1tIZ z$7B?0s5`}xZ{|3eWV1vkoSHU}4K+5nP4)q*nFD@u>nyf8-5rXPVO)0|=kPaH$}X5+ zrGYr$Rdhh-Eui0&qY8I+_ z#WxN$%Ytt#-2V3M+mM)zw8wG@m^Iu2HMfj_!C*yxGD2Yq;IO*dC1sQ_nrH$#fdc)Q zoBSgVq1@21`jC*BT5j|QDsEpo+aiyL_C<;;4&QPX?|tx@jCaX0Rnc^_@cN8jsrRPS zO5<|sE3-QTrXHqMg`oL%@Ou4@{_ZE6%P)S9ZT*;Ds-D=-WA<5nH#gz-^&Ob_X9s#0 zpKW%7ee|#?-`O2o@w1`f(ooqST%HiBU3<>#w>7m9D!cb?L7`gOWA!7L(DzwOcHh-| zDwuxbj$Glv-i)kxrB$)xc+C)n)GV7f*phF!be!klfG>W()m>TTD`BW{INdWzap#sV zC`gy{;1V9+)SkOj&c1HAId3prSzq5$CF>W>ydzug<-c~LzUO}Bpk6$NFA&V{YybW8 zRlR34NykWTUfu>F!|l%rOTJ;y5Vhr{^gBTzAtB$ZZ?AhU^yivYLtV+@x9Z&+6jx2 zw}UVh-W!W{e$DZk=N3Z>%(Bw79wF{D=&U0uG*nJZwb^9HP72Dy($$NN#q`LP>%A*`($>K_|;9n zZL=1v&|1;~IGO0{R|`CUSgbS_sO^@{HI`kr@^JMEOjFI^n|#clS1{EW>g_l$3-z{+ z`Ry)^W0ZewfaYDh-416z=-YvX1QZet&^ItnNfaz0?5^h;S<7yJ)Yc$?gU{Hk5)#L1 z+hNxtlvy4$K@D09ec7)}J*R@r^yQ=?Z=Xo;{6Z{bpzmq|1|81XsHv%G1PP5*dz3>X zrC7iq^6KsHaZ7#IZiUkCHc*I4W) zl^lzMwE;=J`Ynou9m|VO|L)(e#!}bj{_+AA%d27r$c{QvSG%wg-Cy-{yDkzyol6An z4rCt`f5s2#512)Tft{g=E*b8-K@K`zuQZYyM$Q+ z9a&{y@};4srsh2FigPZ0((f8Dn$x}C&?YreH%ICj;q3&kd0rvHZ$C+IZUu@rr)~$R z>?mGBmHG_+u7(c0_ai``O+@-%|l|Q^yyK-F$Tqo;v$93WA|%#-N3F&UiaJud2&2X0K)>VdpT8#G1ucQOnrKdFQhLf{ z9m|v~7yLbr&RcIifRI@4M?t=3ACiV!s|1WIT^TQl`0~ZVSzO<@2K3&#cZd$W&SDp7 zxC>?vc#&Sd)7Jci@nX%stHyp;!(%aW+SwVX8TyojPH7;a`?VfO3N1s$8IsX4CS-&U@PDw{z$-3DzaW9hH87*U-Crp>FnV6FUTbXDF#0G` z1q8eE0A-8p35w-AjR(7F8M;`1I0@gXR^!e-%gx&Z#LiUD$DNt zH;`xcRxT6_ZFtagTEtXAAGxEGkj1A`nr)e-9pms*#qsgx?!m#}>tTqZu@(_@VH6AT8Zf!ck;jR{a$1+OLVr->stL`4;sSiBbtGZh~A z%dTM+`s@Auog0*bIKd~H%JWR`*Q0F1gMKQEBS63-ElG5RjR7XUDf!81@Rx;fAg3CL z``)i+!aTE?ZXqba8GaR7F6?vt6Kk zaBurp?Huf}Vi3aUtz0x=>>aFEq+B!+=&Y}?E0Bx3Y`)OwyRZbDbdvbGe0gGTsHY|Z zOG~IPHXHN{d=IGh#JG{i6!#j?gYR;kZ=78S5a%l&FJ6?!|BQE6pWx%k=xn5?Xb( zoT1L=yZN2pZ~yG^*kgZu_qjawc|BjR&-?wQI>S#+J?-{-kEpGA3S~3P^O@v|Q9AHZ z9LA^4!$OCZF$LUvx=R0ZgTp{uP!=_GmUydQ!msR^S9Ot`|E*yKOGfW!OP6DbaiVx^oV#eC#>SPSz#g*w+ z>ntp&h>+g>6Ja**)K+Y_AbMFS4yGyUcyQkZ{88;{+~!8Jp0lI<{}NHEJopCVkc^T) zZs%HO2}kow$itrYHb6>{bz$rx`*~xb?o{-_v|}6V9jwYQcJ$_xz@FC`*P0VntoR2b z2H?%hcumBvIYMrggCk$=chF+%jYY~jXu>tMaWZsF8|QHlRA(VQ?ls#(3RK);1Qp?x zjhF~WzjF=Ccz*-ZJNKr3LGz`pf9Y1;2Zy|FmR2K<%NqcNj$_3PW+X8$2Vvk=2#UH4 znp^qSw5hem(?lcoN_mT*7V~F>Wh){ZVTxI`EG_*2cZR>#(#sst@tk0{jPnbSu7RJo^q>2_KCF&n7ROIesT|_|?nJe)fif zsG$`!f0}ur;Pd1R+-zo&4*PZek%{*_r`~$5$(ijr&QS5IK*$g%RZ5iMSaIU*Y_u>A zv^kX1r59R8K0+o;lbv`m&nV+eS=n7-&0}m4D0ut{p?U)xyWV4q&j#*!V}%5B%&B2w zh{etsqYMiiw|F{7MLUvyw#qBF-8#VWDc$PU;22%0=0QAPRgcvqBovRo*K8J-PGe{Y zd%trrdASH>9H)4?wTFs85m*AyPqCd}FB)l8@)6z_P6YcO`0yq4Ze(`g6!&%6COQ?U zZP>3a_GI!`*yB2zsezBodv;%oIBJkK=$2R4-G4i6m~rt)e**Nu4*8Q!L5n^YxdVA- z&*vvw$%T<`u~&n9{oW}P2!zxN*~Gb0(a2q4SG+chh3Q1qGTmD>^O*s}`Efe3X=ePC z87bepslV#2N?hC6W^xeuMDtiDGB1#(VeiJQFgt+bRQKn$V;>U2G_UpicFgDN%dm~J z{{EKZ3Uj-073HEy>*o*l_UY3cI`q}ymDq-$%9iOKjFTP1i2AMmBiPo&;O*#F1L)7i zccd~ItqOz!(tY<^d2rZEH=t!R(sxjS(#D^bw^eYp7LuU4f_VLKfPdiT5n1^lGvO9! zvhs&nqqfp7a)kwWjC^53?o^Uzf=P*T&YA2N)j9SQPyKdF6BX;l1LXi5t-S4It*P{C3mG2{SqI*YNQ^8Sj+kfny=qF_Z(QRnLlGcVf?`C&o30CQ(T63M zI`I02U;vI9jgT}bAJzx*%Fk1PS|oZ_X`Z^$d`+gG3Ybm+x-rE?~G zk5ciea8mq;UCw{8CKVzMyv3g{t0lUHZwaPJucomNVOLPqO&{1OJhEE_2!L5DyyP~l+c-lt9ZSm$}` zKs~)*qWxtx|2DIeU69l$r*k+$8o>kE&4$yw3`p!_*S$Y4Fyd(l@Y7_6_jM^i?*Ml7 z0C_C^e^8_>_v_%RyzmU=(dY9TQpyq`b#$GXIoNpU$?Jq!nu>R&U@gKp}r+tn%{ zZTE47)wQeUQEDENw1=%Zx6UBmfeC_54^0hmV4Z@8y$9K*`@czXlc8)Wde4Wp_nu0H z`~eV`8ur-snPn)xz%4}Q;YJk!0_I=5G_WjgLDotVd9xaPf34q=lfGXW>3)jdcD{E( z2>9PAUBJAYMz4nqHdx`KFG9l(m5m?aJ)(3H_&q#T*B5LZ4Sk9!A-_w@9}$8NUvBmpzrEd!dce?s#S< zEpa;>gYm68oiy7%{GZb6^4_vPN%IeVf#8|b7wbT(rToDI7z8dsjK~fI&LlA+;D(tB ZdQY-)&+A0p#maz}r|Yq!cU;1$e*&QTsnq}g literal 0 HcmV?d00001 diff --git a/erpnext/docs/user/manual/en/CRM/crm_reports.md b/erpnext/docs/user/manual/en/CRM/crm_reports.md new file mode 100644 index 0000000000..490cd5ab10 --- /dev/null +++ b/erpnext/docs/user/manual/en/CRM/crm_reports.md @@ -0,0 +1,41 @@ +CRM module's reports helps users to get the information about the prospects. Using Following reports, user can analyze the data about prospect's history with a company and will helps user to build strong relationships with them. + +###Lead Details +It has data about the leads and their contact and address detail. +Lead Details + +###Sales Funnel +By using the sales funnel, and by quantifying the number of prospects at each stage of the process, you can predict the number of prospects who will, in time, become customers. + +More than this, by looking at the way these numbers change over time, you can spot problems in the sales pipeline and take corrective action early. + +For example, if you spot that very few communication with the prospects has taken place in month which decreased the sales. From the next month organization should make sure that more communication has to take place with the prospects + +Lead Details + +###Prospects Engaged But Not Converted +Using this report user gets the information about the leads who has shown interest in the business with you but due to some reason they were not converted into the customers. + +Lead Details + +###Minutes to First Response for Opportunity +Immediacy is so important – and so valued +Customer main priority is not finding the best product, their priority is improving their situation as quickly as possible +This report gives you an information about the first response time given to the opportunities or issues. With this report organization can improve their first response to the prospects which helps to improve the sales of an organization + +Lead Details + +###Customer Addresses And Contacts +It has data about the customers and their contact and address detail. +Lead Details + +###Inactive Customers +This report shows the list of customers who has not purchased since long time. + +Lead Details \ No newline at end of file diff --git a/erpnext/docs/user/manual/en/CRM/index.txt b/erpnext/docs/user/manual/en/CRM/index.txt index 204123ae69..2fe3f4d6d5 100644 --- a/erpnext/docs/user/manual/en/CRM/index.txt +++ b/erpnext/docs/user/manual/en/CRM/index.txt @@ -3,4 +3,5 @@ customer opportunity contact newsletter +crm_reports setup \ No newline at end of file From 307543f968300f9042a4d7e9bb06a38b9879d5c1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 14 Apr 2017 18:02:37 +0600 Subject: [PATCH 085/287] bumped to version 8.0.11 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 2df935477a..9e6707a262 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.10' +__version__ = '8.0.11' def get_default_company(user=None): '''Get default company for user''' From e3c117e32cc64e471930d9368d31397da00338a7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sat, 15 Apr 2017 16:59:17 +0530 Subject: [PATCH 086/287] [fix] validate preferred email if set in employee.py --- erpnext/hr/doctype/employee/employee.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index 13aa524465..a078ef2033 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -157,7 +157,7 @@ class Employee(Document): delete_events(self.doctype, self.name) def validate_prefered_email(self): - if not self.get(scrub(self.prefered_contact_email)): + if self.prefered_contact_email and not self.get(scrub(self.prefered_contact_email)): frappe.msgprint(_("Please enter " + self.prefered_contact_email)) From 83c8ed082737e73071073838bb42d9825064d5c6 Mon Sep 17 00:00:00 2001 From: pawan Date: Mon, 17 Apr 2017 01:02:56 +0530 Subject: [PATCH 087/287] =?UTF-8?q?=E2=80=9D[fix]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/campaign_efficiency/__init__.py | 0 .../campaign_efficiency.js | 21 ++++++ .../campaign_efficiency.json | 30 ++++++++ .../campaign_efficiency.py | 69 +++++++++++++++++++ .../report/lead_owner_efficiency/__init__.py | 0 .../lead_owner_efficiency.js | 21 ++++++ .../lead_owner_efficiency.json | 30 ++++++++ .../lead_owner_efficiency.py | 69 +++++++++++++++++++ 8 files changed, 240 insertions(+) create mode 100644 erpnext/crm/report/campaign_efficiency/__init__.py create mode 100644 erpnext/crm/report/campaign_efficiency/campaign_efficiency.js create mode 100644 erpnext/crm/report/campaign_efficiency/campaign_efficiency.json create mode 100644 erpnext/crm/report/campaign_efficiency/campaign_efficiency.py create mode 100644 erpnext/crm/report/lead_owner_efficiency/__init__.py create mode 100644 erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js create mode 100644 erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.json create mode 100644 erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py diff --git a/erpnext/crm/report/campaign_efficiency/__init__.py b/erpnext/crm/report/campaign_efficiency/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js new file mode 100644 index 0000000000..74a18512bc --- /dev/null +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js @@ -0,0 +1,21 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +frappe.require("assets/erpnext/js/financial_statements.js", function() { + frappe.query_reports["Campaign Efficiency"] = { + "filters": [ + { + "fieldname": "from_date", + "label": __("From Date"), + "fieldtype": "Date", + "default": frappe.defaults.get_user_default("year_start_date"), + }, + { + "fieldname": "to_date", + "label": __("To Date"), + "fieldtype": "Date", + "default": frappe.defaults.get_user_default("year_end_date"), + } + ] + } +}); + diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.json b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.json new file mode 100644 index 0000000000..986d9f3518 --- /dev/null +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.json @@ -0,0 +1,30 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "creation": "2017-04-17 00:20:27.248275", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "letter_head": "", + "modified": "2017-04-17 00:20:27.248275", + "modified_by": "Administrator", + "module": "CRM", + "name": "Campaign Efficiency", + "owner": "Administrator", + "ref_doctype": "Lead", + "report_name": "Campaign Efficiency", + "report_type": "Script Report", + "roles": [ + { + "role": "Sales User" + }, + { + "role": "Sales Manager" + }, + { + "role": "System Manager" + } + ] +} \ No newline at end of file diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py new file mode 100644 index 0000000000..6bf8bd8a66 --- /dev/null +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py @@ -0,0 +1,69 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.utils import flt,cstr +from erpnext.accounts.report.financial_statements import get_period_list + +def execute(filters=None): + columns, data = [], [] + columns=get_columns() + data=get_lead_data(filters) + return columns, data + +def get_columns(): + columns = [_("Campaign Name") + ":data:130", _("Lead Count") + ":Int:80", + _("Opp Count") + ":Int:80", + _("Quot Count") + ":Int:80", _("Order Count") + ":Int:100", + _("Order Value") + ":Float:100",_("Opp/Lead %") + ":Float:100", + _("Quot/Lead %") + ":Float:100",_("Order/Quot %") + ":Float:100" + ] + return columns + +def get_lead_data(filters): + conditions="" + if filters.from_date: + conditions += " and date(creation) >= %(from_date)s" + if filters.to_date: + conditions += " and date(creation) <= %(to_date)s" + data = frappe.db.sql("""select campaign_name as "Campaign Name", count(name) as "Lead Count" from `tabLead` where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) + dl=list(data) + for row in dl: + is_quot_count_zero = False + row["Quot Count"]= get_lead_quotation_count(row["Campaign Name"]) + row["Opp Count"] = get_lead_opp_count(row["Campaign Name"]) + row["Order Count"] = get_quotation_ordered_count(row["Campaign Name"]) + row["Order Value"] = get_order_amount(row["Campaign Name"]) + row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 + row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 + #Handle div by zero and reset count to zero + if row["Quot Count"] == 0: + row["Quot Count"] = 1 + is_quot_count_zero = True + row["Order/Quot %"] = row["Order Count"] / row["Quot Count"] * 100 + if is_quot_count_zero == True: + row["Quot Count"] = 0 + return dl + +def get_lead_quotation_count(campaign): + quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` + where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + return flt(quotation_count[0][0]) if quotation_count else 0 + +def get_lead_opp_count(campaign): + opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` + where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + return flt(opportunity_count[0][0]) if opportunity_count else 0 + +def get_quotation_ordered_count(campaign): + quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` + where status = 'Ordered' and lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 + +def get_order_amount(campaign): + ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` + where prevdoc_docname in (select name from `tabQuotation` + where status = 'Ordered' and lead in (select name from `tabLead` where campaign_name = %s))""",campaign) + return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file diff --git a/erpnext/crm/report/lead_owner_efficiency/__init__.py b/erpnext/crm/report/lead_owner_efficiency/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js new file mode 100644 index 0000000000..217070b28e --- /dev/null +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js @@ -0,0 +1,21 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +frappe.require("assets/erpnext/js/financial_statements.js", function() { + frappe.query_reports["Lead Owner Efficiency"] = { + "filters": [ + { + "fieldname": "from_date", + "label": __("From Date"), + "fieldtype": "Date", + "default": frappe.defaults.get_user_default("year_start_date"), + }, + { + "fieldname": "to_date", + "label": __("To Date"), + "fieldtype": "Date", + "default": frappe.defaults.get_user_default("year_end_date"), + } + ] + } +}); + diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.json b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.json new file mode 100644 index 0000000000..b6dadef4c4 --- /dev/null +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.json @@ -0,0 +1,30 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "creation": "2017-04-17 00:39:39.885905", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "letter_head": "", + "modified": "2017-04-17 00:45:10.139004", + "modified_by": "Administrator", + "module": "CRM", + "name": "Lead Owner Efficiency", + "owner": "Administrator", + "ref_doctype": "Lead", + "report_name": "Lead Owner Efficiency", + "report_type": "Script Report", + "roles": [ + { + "role": "Sales User" + }, + { + "role": "Sales Manager" + }, + { + "role": "System Manager" + } + ] +} \ No newline at end of file diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py new file mode 100644 index 0000000000..0c63c951a4 --- /dev/null +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py @@ -0,0 +1,69 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.utils import flt,cstr +from erpnext.accounts.report.financial_statements import get_period_list + +def execute(filters=None): + columns, data = [], [] + columns=get_columns() + data=get_lead_data(filters) + return columns, data + +def get_columns(): + columns = [_("Lead Owner") + ":data:130", _("Lead Count") + ":Int:80", + _("Opp Count") + ":Int:80", + _("Quot Count") + ":Int:80", _("Order Count") + ":Int:100", + _("Order Value") + ":Float:100",_("Opp/Lead %") + ":Float:100", + _("Quot/Lead %") + ":Float:100",_("Order/Quot %") + ":Float:100" + ] + return columns + +def get_lead_data(filters): + conditions="" + if filters.from_date: + conditions += " and date(creation) >= %(from_date)s" + if filters.to_date: + conditions += " and date(creation) <= %(to_date)s" + data = frappe.db.sql("""select lead_owner as "Lead Owner", count(name) as "Lead Count" from `tabLead` where 1 = 1 %s group by lead_owner""" % (conditions,),filters, as_dict=1) + dl=list(data) + for row in dl: + is_quot_count_zero = False + row["Quot Count"]= get_lead_quotation_count(row["Lead Owner"]) + row["Opp Count"] = get_lead_opp_count(row["Lead Owner"]) + row["Order Count"] = get_quotation_ordered_count(row["Lead Owner"]) + row["Order Value"] = get_order_amount(row["Lead Owner"]) + row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 + row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 + #Handle div by zero and reset count to zero + if row["Quot Count"] == 0: + row["Quot Count"] = 1 + is_quot_count_zero = True + row["Order/Quot %"] = row["Order Count"] / row["Quot Count"] * 100 + if is_quot_count_zero == True: + row["Quot Count"] = 0 + return dl + +def get_lead_quotation_count(leadowner): + quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` + where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + return flt(quotation_count[0][0]) if quotation_count else 0 + +def get_lead_opp_count(leadowner): + opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` + where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + return flt(opportunity_count[0][0]) if opportunity_count else 0 + +def get_quotation_ordered_count(leadowner): + quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` + where status = 'Ordered' and lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 + +def get_order_amount(leadowner): + ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` + where prevdoc_docname in (select name from `tabQuotation` + where status = 'Ordered' and lead in (select name from `tabLead` where lead_owner = %s))""",leadowner) + return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file From 22cedeb0063c4209809ddd7cd5799902b03802d6 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Mon, 17 Apr 2017 12:24:11 +0530 Subject: [PATCH 088/287] [minor] POS & RFQ format_number fixes --- erpnext/accounts/page/pos/pos.js | 2 +- .../accounts/print_format/point_of_sale/point_of_sale.json | 4 ++-- erpnext/public/js/payment/pos_payment.html | 4 ++-- erpnext/templates/includes/rfq.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 3697174e87..670a577c4e 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -1356,7 +1356,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ discount_percentage: d.discount_percentage || 0.0, actual_qty: me.actual_qty_dict[d.item_code] || 0.0, projected_qty: d.projected_qty, - rate: format_number(d.rate, me.frm.doc.currency), + rate: format_currency(d.rate, me.frm.doc.currency), enabled: me.pos_profile_data["allow_user_to_edit_rate"] ? true : false, amount: format_currency(d.amount, me.frm.doc.currency), selected_class: (me.item_code == d.item_code) ? "active" : "" 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 f7d5f630a3..6b603c80e2 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 @@ -7,10 +7,10 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "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\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\t\t\t\t{{ __(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t
\n\n\n
\n

{{ terms }}

\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, null,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\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\t\t\t\t{{ __(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t
\n\n\n
\n

{{ terms }}

\n

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

", "idx": 0, "line_breaks": 0, - "modified": "2017-01-12 14:56:12.571032", + "modified": "2017-04-17 12:12:00.153763", "modified_by": "Administrator", "module": "Accounts", "name": "Point of Sale", diff --git a/erpnext/public/js/payment/pos_payment.html b/erpnext/public/js/payment/pos_payment.html index e94f3a52ae..7700b24374 100644 --- a/erpnext/public/js/payment/pos_payment.html +++ b/erpnext/public/js/payment/pos_payment.html @@ -10,11 +10,11 @@

Outstanding

{%= format_currency(outstanding_amount, currency) %}

-

Change +

Change

-

Write off +

Write off

diff --git a/erpnext/templates/includes/rfq.js b/erpnext/templates/includes/rfq.js index 46357d4348..3b45cbe506 100644 --- a/erpnext/templates/includes/rfq.js +++ b/erpnext/templates/includes/rfq.js @@ -34,7 +34,7 @@ rfq = Class.extend({ me.qty = parseFloat($(this).val()) || 0; me.rate = parseFloat($(repl('.rfq-rate[data-idx=%(idx)s]',{'idx': me.idx})).val()); me.update_qty_rate(); - $(this).val(format_number(me.qty, 2)); + $(this).val(format_number(me.qty, doc.number_format, 2)); }) }, @@ -45,7 +45,7 @@ rfq = Class.extend({ me.rate = parseFloat($(this).val()) || 0; me.qty = parseFloat($(repl('.rfq-qty[data-idx=%(idx)s]',{'idx': me.idx})).val()); me.update_qty_rate(); - $(this).val(format_number(me.rate, 2)); + $(this).val(format_number(me.rate, doc.number_format, 2)); }) }, From 361e7f6ddc9d2dc433a47778f58048a2043513c0 Mon Sep 17 00:00:00 2001 From: Julian Robbins Date: Fri, 14 Apr 2017 17:23:39 +0100 Subject: [PATCH 089/287] Remove typos and use better English --- .../user/manual/en/manufacturing/production-order.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/docs/user/manual/en/manufacturing/production-order.md b/erpnext/docs/user/manual/en/manufacturing/production-order.md index 2f0fef34d2..3abf80f6cc 100644 --- a/erpnext/docs/user/manual/en/manufacturing/production-order.md +++ b/erpnext/docs/user/manual/en/manufacturing/production-order.md @@ -1,7 +1,7 @@ Production Order -Production Order (also called as Work Order) is a document that is given to +A Production Order (also known as a Work Order) is a document that is given to the manufacturing shop floor by the Production Planner as a signal to produce -a certain quantity of a certain Item. Production Order also helps to generate +a certain quantity of a certain Item. The Production Order also helps to generate the material requirements (Stock Entry) for the Item to be produced from its **Bill of Materials**. @@ -66,8 +66,8 @@ by: * Progress in the Production Order can be tracked using [Timesheet]({{docs_base_url}}/user/manual/en/projects/timesheet/timesheet-against-production-order.html) * Timesheet's time slots are created against Production Order Operations. -* Drafts of Timesheet is created based on the scheduled operations when an Production Order is Submitted. -* To create more Timesheet against an operation click 'Make Timesheet' button. +* Drafts of Timesheet are created based on the scheduled operations when an Production Order is Submitted. +* To create more Timesheets against an operation click 'Make Timesheet' button. Make timesheet against PO @@ -88,7 +88,7 @@ by: ### Stopping a Production Order * When you stop a Production Order its status is changed to Stop indicating that all production process against that Production Order is to be ceased. -* To stop the Production Order click on the 'stop' Button +* To stop the Production Order click on the 'Stop' Button 1. On Submitting the Production Order, the system will reserve a slot for each of the Production Order Operations serially after the planned start date based on the workstation availability. The Workstation availability depends on the Workstation timings, holiday list and if some other Production Order Operation was scheduled in that slot. You can mention the number of days for the system to try scheduling the operations in the Manufacturing Settings. This is set to 30 Days by default. If the operation requires time exceeding the available slot, system shall ask you to break the operations. Once the scheduling is done system shall create Time Logs and save them. You can Modify them and submit them later. 2. You can also create additional time logs against an Operation. For doing so select the respective operation and click on 'Make Time Log' @@ -98,7 +98,7 @@ by: PO - stop -* You can Also re-start a stopped Production Order. +* You can also re-start a stopped Production Order. > Note : In order to make a Production Order against an Item you must specify 'Yes' to "Allow Production Order" on the Item form. From 8371c1c4cd88a173421c3dfce6c29211416d685f Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Mon, 17 Apr 2017 11:12:21 +0530 Subject: [PATCH 090/287] Text overflow fix for product text in portal --- erpnext/public/css/website.css | 16 +++++++++------- erpnext/public/less/website.less | 14 ++++++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/erpnext/public/css/website.css b/erpnext/public/css/website.css index 0370dd023b..0245675225 100644 --- a/erpnext/public/css/website.css +++ b/erpnext/public/css/website.css @@ -26,8 +26,6 @@ background-size: cover; background-repeat: no-repeat; background-position: center top; - border-radius-top: 4px; - border-radius-right: 4px; } .product-image.missing-image { width: 100%; @@ -36,8 +34,6 @@ background-size: cover; background-repeat: no-repeat; background-position: center top; - border-radius-top: 4px; - border-radius-right: 4px; position: relative; background-color: #EBEFF2; } @@ -45,9 +41,6 @@ font-size: 32px; color: #d1d8dd; } -.product-text { - padding: 15px 0px; -} .product-search { margin-bottom: 15px; } @@ -246,6 +239,15 @@ padding: 15px; word-wrap: break-word; height: 75px; + display: block; + /* Fallback for non-webkit */ + display: -webkit-box; + max-width: 100%; + margin: 0 auto; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; } .product-image-wrapper { padding-bottom: 40px; diff --git a/erpnext/public/less/website.less b/erpnext/public/less/website.less index b733dabaf7..79a89a050a 100644 --- a/erpnext/public/less/website.less +++ b/erpnext/public/less/website.less @@ -36,8 +36,6 @@ background-size: cover; background-repeat: no-repeat; background-position: center top; - border-radius-top: 4px; - border-radius-right: 4px; } .product-image.missing-image { @@ -51,10 +49,6 @@ color: @border-color; } -.product-text { - padding: 15px 0px; -} - .product-search { margin-bottom: 15px; } @@ -316,6 +310,14 @@ padding: 15px; word-wrap: break-word; height: 75px; + display: block; /* Fallback for non-webkit */ + display: -webkit-box; + max-width: 100%; + margin: 0 auto; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; } .product-image-wrapper { From 8a2e6f427b7aa091c0c4a47a6e0c89ca64656469 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 14 Apr 2017 17:50:32 +0530 Subject: [PATCH 091/287] [minor] if address is not found then set the address_field to '' instead of None --- erpnext/public/js/utils/party.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js index d132f92f78..19fe2775b3 100644 --- a/erpnext/public/js/utils/party.js +++ b/erpnext/public/js/utils/party.js @@ -90,7 +90,7 @@ erpnext.utils.get_address_display = function(frm, address_field, display_field, } }) } else { - frm.set_value(display_field, null); + frm.set_value(display_field, ''); } }; From 5e25731188fd48acdac73ca7e81be3ea15b6efc2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 17 Apr 2017 14:13:20 +0530 Subject: [PATCH 092/287] Update crm_reports.md --- erpnext/docs/user/manual/en/CRM/crm_reports.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/erpnext/docs/user/manual/en/CRM/crm_reports.md b/erpnext/docs/user/manual/en/CRM/crm_reports.md index 490cd5ab10..4ff9aa598d 100644 --- a/erpnext/docs/user/manual/en/CRM/crm_reports.md +++ b/erpnext/docs/user/manual/en/CRM/crm_reports.md @@ -1,36 +1,35 @@ CRM module's reports helps users to get the information about the prospects. Using Following reports, user can analyze the data about prospect's history with a company and will helps user to build strong relationships with them. ###Lead Details -It has data about the leads and their contact and address detail. +It has data about the leads and their contact and address details. Lead Details ###Sales Funnel -By using the sales funnel, and by quantifying the number of prospects at each stage of the process, you can predict the number of prospects who will, in time, become customers. +By using the sales funnel report, and by quantifying the number of prospects at each stage of the process, you can get an idea of your potential customers. -More than this, by looking at the way these numbers change over time, you can spot problems in the sales pipeline and take corrective action early. +More than this, by looking at the way these numbers change over time, you can identify problems in the sales pipeline and take any corrective action at the early stage. -For example, if you spot that very few communication with the prospects has taken place in month which decreased the sales. From the next month organization should make sure that more communication has to take place with the prospects +For example, if you notice that very few communications with the prospects has taken place in a month which might indicate a decrease in the sales. From the next month, organization should make sure that more communications has to take place with the prospects. Lead Details ###Prospects Engaged But Not Converted -Using this report user gets the information about the leads who has shown interest in the business with you but due to some reason they were not converted into the customers. +Using this report, user gets the information about the leads who has shown interest in the business with you but due to some reason they were not converted into the customers. Lead Details ###Minutes to First Response for Opportunity Immediacy is so important – and so valued -Customer main priority is not finding the best product, their priority is improving their situation as quickly as possible -This report gives you an information about the first response time given to the opportunities or issues. With this report organization can improve their first response to the prospects which helps to improve the sales of an organization +In this internet area, we all expect a quicker response time to any of our query. This report gives you the information about the first response time given to an opportunities or issues. Using this report, the organization can improve their first response time to the prospects which can help to the better sales in the future. Lead Details ###Customer Addresses And Contacts -It has data about the customers and their contact and address detail. +It has data about the customers and their contact and address details. Lead Details @@ -38,4 +37,4 @@ It has data about the customers and their contact and address detail. This report shows the list of customers who has not purchased since long time. Lead Details \ No newline at end of file + src="{{docs_base_url}}/assets/img/crm/report/inactive_customers.png"> From 346928f2bc0c8b6b886a0c6faec3325597744b12 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 12 Apr 2017 19:16:58 +0530 Subject: [PATCH 093/287] changes in program enrollment and tool --- .../doctype/program_enrollment/program_enrollment.json | 4 ++-- .../program_enrollment_tool/program_enrollment_tool.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json index b1941c7441..ae60472311 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json @@ -205,7 +205,7 @@ "in_global_search": 1, "in_list_view": 0, "in_standard_filter": 0, - "label": "Batch Name", + "label": "Batch", "length": 0, "no_copy": 0, "options": "Student Batch Name", @@ -412,7 +412,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-29 15:30:03.359985", + "modified": "2017-04-06 15:21:43.137852", "modified_by": "Administrator", "module": "Schools", "name": "Program Enrollment", diff --git a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py index 1747bade4b..d80f2f5c6b 100644 --- a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py +++ b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py @@ -11,11 +11,11 @@ from erpnext.schools.api import enroll_student class ProgramEnrollmentTool(Document): def get_students(self): if not self.get_students_from: - frappe.throw(_("Mandatory feild - Get Students From")) + frappe.throw(_("Mandatory field - Get Students From")) elif not self.program: - frappe.throw(_("Mandatory feild - Program")) + frappe.throw(_("Mandatory field - Program")) elif not self.academic_year: - frappe.throw(_("Mandatory feild - Academic Year")) + frappe.throw(_("Mandatory field - Academic Year")) else: if self.get_students_from == "Student Applicants": students = frappe.db.sql("select name as student_applicant, title as student_name from \ From a6d1876958a1ecec96efc87de39d44875f53de1e Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 12 Apr 2017 19:18:43 +0530 Subject: [PATCH 094/287] Changes in course and program --- erpnext/schools/doctype/course/course.js | 24 +++++------ erpnext/schools/doctype/course/course.json | 42 ++++++++++++++++--- erpnext/schools/doctype/program/program.js | 31 +++++++------- erpnext/schools/doctype/program/program.json | 7 ++-- erpnext/schools/doctype/program/program.py | 8 +--- .../program_course/program_course.json | 42 ++++--------------- 6 files changed, 75 insertions(+), 79 deletions(-) diff --git a/erpnext/schools/doctype/course/course.js b/erpnext/schools/doctype/course/course.js index c667eca2b7..284658f23d 100644 --- a/erpnext/schools/doctype/course/course.js +++ b/erpnext/schools/doctype/course/course.js @@ -1,30 +1,30 @@ frappe.ui.form.on("Course", "refresh", function(frm) { if(!cur_frm.doc.__islocal) { frm.add_custom_button(__("Program"), function() { - frappe.route_options = { - "Program Course.course": frm.doc.name - } + // frappe.route_options = { + // "Program Course.course": frm.doc.name + // } frappe.set_route("List", "Program"); }); frm.add_custom_button(__("Student Group"), function() { - frappe.route_options = { - course: frm.doc.name - } + // frappe.route_options = { + // course: frm.doc.name + // } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Course Schedule"), function() { - frappe.route_options = { - course: frm.doc.name - } + // frappe.route_options = { + // course: frm.doc.name + // } frappe.set_route("List", "Course Schedule"); }); frm.add_custom_button(__("Assessment Plan"), function() { - frappe.route_options = { - course: frm.doc.name - } + // frappe.route_options = { + // course: frm.doc.name + // } frappe.set_route("List", "Assessment Plan"); }); } diff --git a/erpnext/schools/doctype/course/course.json b/erpnext/schools/doctype/course/course.json index d1ca26181c..ad4c60ee9a 100644 --- a/erpnext/schools/doctype/course/course.json +++ b/erpnext/schools/doctype/course/course.json @@ -1,8 +1,9 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, - "autoname": "field:course_name", + "autoname": "field:course_code", "beta": 0, "creation": "2015-09-07 12:39:55.181893", "custom": 0, @@ -24,7 +25,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Course Name", "length": 0, @@ -53,7 +54,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, "label": "Course Code", "length": 0, @@ -65,6 +66,35 @@ "read_only": 0, "remember_last_selected_value": 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": "parent_course", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Parent Course (Leave blank, if this isn't part of Parent Course)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, @@ -110,7 +140,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Course Abbreviation", "length": 0, @@ -304,18 +334,18 @@ "unique": 0 } ], + "has_web_view": 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, "menu_index": 0, - "modified": "2017-02-17 17:22:36.450073", + "modified": "2017-04-10 14:54:59.943676", "modified_by": "Administrator", "module": "Schools", "name": "Course", diff --git a/erpnext/schools/doctype/program/program.js b/erpnext/schools/doctype/program/program.js index 7b9f92042e..c251f1e005 100644 --- a/erpnext/schools/doctype/program/program.js +++ b/erpnext/schools/doctype/program/program.js @@ -1,43 +1,42 @@ // Copyright (c) 2015, Frappe Technologies and contributors // For license information, please see license.txt -cur_frm.add_fetch("course", "course_code", "course_code"); cur_frm.add_fetch('fee_structure', 'total_amount', 'amount'); frappe.ui.form.on("Program", "refresh", function(frm) { if(!frm.doc.__islocal) { frm.add_custom_button(__("Student Applicant"), function() { - frappe.route_options = { - program: frm.doc.name - } + // frappe.route_options = { + // program: frm.doc.name + // } frappe.set_route("List", "Student Applicant"); }); frm.add_custom_button(__("Program Enrollment"), function() { - frappe.route_options = { - program: frm.doc.name - } + // frappe.route_options = { + // program: frm.doc.name + // } frappe.set_route("List", "Program Enrollment"); }); frm.add_custom_button(__("Student Group"), function() { - frappe.route_options = { - program: frm.doc.name - } + // frappe.route_options = { + // program: frm.doc.name + // } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Fee Structure"), function() { - frappe.route_options = { - program: frm.doc.name - } + // frappe.route_options = { + // program: frm.doc.name + // } frappe.set_route("List", "Fee Structure"); }); frm.add_custom_button(__("Fees"), function() { - frappe.route_options = { - program: frm.doc.name - } + // frappe.route_options = { + // program: frm.doc.name + // } frappe.set_route("List", "Fees"); }); } diff --git a/erpnext/schools/doctype/program/program.json b/erpnext/schools/doctype/program/program.json index cac29649db..3b0a92e933 100644 --- a/erpnext/schools/doctype/program/program.json +++ b/erpnext/schools/doctype/program/program.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, "autoname": "field:program_name", @@ -82,7 +83,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Program Abbreviation", "length": 0, @@ -276,18 +277,18 @@ "unique": 0 } ], + "has_web_view": 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, "menu_index": 0, - "modified": "2017-02-17 17:22:14.107052", + "modified": "2017-04-07 17:57:37.392266", "modified_by": "Administrator", "module": "Schools", "name": "Program", diff --git a/erpnext/schools/doctype/program/program.py b/erpnext/schools/doctype/program/program.py index 0ece961cba..f626880b2a 100644 --- a/erpnext/schools/doctype/program/program.py +++ b/erpnext/schools/doctype/program/program.py @@ -7,10 +7,4 @@ import frappe from frappe.model.document import Document class Program(Document): - def validate(self): - self.validate_course() - - def validate_course(self): - for d in self.courses: - if not d.course_code: - d.course_code = frappe.db.get_value("Course", d.course, "course_code") + pass \ No newline at end of file diff --git a/erpnext/schools/doctype/program_course/program_course.json b/erpnext/schools/doctype/program_course/program_course.json index c19b61387e..8c82666591 100644 --- a/erpnext/schools/doctype/program_course/program_course.json +++ b/erpnext/schools/doctype/program_course/program_course.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -41,36 +42,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "academic_term", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Academic Term", - "length": 0, - "no_copy": 0, - "options": "Academic Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -104,7 +75,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "course_code", + "fieldname": "course_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, @@ -113,9 +84,10 @@ "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, - "label": "Course Code", + "label": "Course Name", "length": 0, "no_copy": 0, + "options": "course.course_name", "permlevel": 0, "precision": "", "print_hide": 0, @@ -140,7 +112,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Required", "length": 0, @@ -158,18 +130,18 @@ "unique": 0 } ], + "has_web_view": 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, "menu_index": 0, - "modified": "2017-02-17 17:16:10.315691", + "modified": "2017-04-07 17:59:12.504949", "modified_by": "Administrator", "module": "Schools", "name": "Program Course", From 79683d087119eb79a0bf7a045ced9ca31b04ba36 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 5 Apr 2017 14:55:06 +0530 Subject: [PATCH 095/287] Added school setting --- erpnext/config/schools.py | 4 + .../doctype/school_settings/__init__.py | 0 .../school_settings/school_settings.js | 8 + .../school_settings/school_settings.json | 151 ++++++++++++++++++ .../school_settings/school_settings.py | 10 ++ 5 files changed, 173 insertions(+) create mode 100644 erpnext/schools/doctype/school_settings/__init__.py create mode 100644 erpnext/schools/doctype/school_settings/school_settings.js create mode 100644 erpnext/schools/doctype/school_settings/school_settings.json create mode 100644 erpnext/schools/doctype/school_settings/school_settings.py diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index 7e9760272f..b498f50099 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -205,6 +205,10 @@ def get_data(): { "type": "doctype", "name": "Academic Year" + }, + { + "type": "doctype", + "name": "School Settings" } ] }, diff --git a/erpnext/schools/doctype/school_settings/__init__.py b/erpnext/schools/doctype/school_settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/school_settings/school_settings.js b/erpnext/schools/doctype/school_settings/school_settings.js new file mode 100644 index 0000000000..2707c42876 --- /dev/null +++ b/erpnext/schools/doctype/school_settings/school_settings.js @@ -0,0 +1,8 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('School Settings', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/schools/doctype/school_settings/school_settings.json b/erpnext/schools/doctype/school_settings/school_settings.json new file mode 100644 index 0000000000..5bdb65e1b5 --- /dev/null +++ b/erpnext/schools/doctype/school_settings/school_settings.json @@ -0,0 +1,151 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-04-05 13:33:04.519313", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "current_academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Current 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, + "remember_last_selected_value": 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": "current_academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Current Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "attendance_freeze_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Attendance Freeze Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2017-04-05 13:34:57.493516", + "modified_by": "Administrator", + "module": "Schools", + "name": "School Settings", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "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": 0, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/school_settings/school_settings.py b/erpnext/schools/doctype/school_settings/school_settings.py new file mode 100644 index 0000000000..a5f68e87da --- /dev/null +++ b/erpnext/schools/doctype/school_settings/school_settings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, 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 SchoolSettings(Document): + pass From 54c4240d9c96daa9666083785a263e9e084ceb2b Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 12 Apr 2017 19:24:12 +0530 Subject: [PATCH 096/287] Changes in the program enrollment --- erpnext/schools/doctype/course/course.json | 76 ++++---- .../course_schedule/test_course_schedule.py | 10 +- erpnext/schools/doctype/program/program.json | 84 ++++----- .../schools/doctype/program/test_records.json | 4 +- .../program_enrollment/program_enrollment.js | 66 +++++-- .../program_enrollment.json | 162 +++++++++++++++--- .../program_enrollment/program_enrollment.py | 25 ++- .../program_enrollment_course/__init__.py | 0 .../program_enrollment_course.json | 101 +++++++++++ .../program_enrollment_course.py | 10 ++ .../school_settings/school_settings.py | 18 +- .../schools/doctype/student/test_records.json | 6 +- .../doctype/student_group/test_records.json | 8 +- erpnext/schools/utils.py | 8 +- 14 files changed, 440 insertions(+), 138 deletions(-) create mode 100644 erpnext/schools/doctype/program_enrollment_course/__init__.py create mode 100644 erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json create mode 100644 erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py diff --git a/erpnext/schools/doctype/course/course.json b/erpnext/schools/doctype/course/course.json index ad4c60ee9a..b6eda12e80 100644 --- a/erpnext/schools/doctype/course/course.json +++ b/erpnext/schools/doctype/course/course.json @@ -47,18 +47,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "course_code", - "fieldtype": "Data", + "fieldname": "department", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Course Code", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Department", "length": 0, "no_copy": 0, + "options": "Department", "permlevel": 0, "precision": "", "print_hide": 0, @@ -66,7 +67,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -128,6 +129,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "course_code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Course Code", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -157,36 +187,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -345,7 +345,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-10 14:54:59.943676", + "modified": "2017-04-12 20:44:42.048564", "modified_by": "Administrator", "module": "Schools", "name": "Course", @@ -396,7 +396,7 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, - "search_fields": "department", + "search_fields": "course_name", "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", diff --git a/erpnext/schools/doctype/course_schedule/test_course_schedule.py b/erpnext/schools/doctype/course_schedule/test_course_schedule.py index e9fce4b45f..795486a888 100644 --- a/erpnext/schools/doctype/course_schedule/test_course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/test_course_schedule.py @@ -24,28 +24,28 @@ class TestCourseSchedule(unittest.TestCase): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1) + student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_room_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1) + student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_no_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002") + student_group="TC1-TP2-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002") def make_course_schedule_test_record(**args): args = frappe._dict(args) course_schedule = frappe.new_doc("Course Schedule") - course_schedule.student_group = args.student_group or "TC-TP-2014-2015-2014-2015 (_Test Academic Term)" - course_schedule.course = args.course or "_Test Course" + course_schedule.student_group = args.student_group or "TC-TP1-2014-2015-2014-2015 (_Test Academic Term)" + course_schedule.course = args.course or "TC100" course_schedule.instructor = args.instructor or "_T-Instructor-00001" course_schedule.room = args.room or "RM0001" diff --git a/erpnext/schools/doctype/program/program.json b/erpnext/schools/doctype/program/program.json index 3b0a92e933..9d6ba1ccbb 100644 --- a/erpnext/schools/doctype/program/program.json +++ b/erpnext/schools/doctype/program/program.json @@ -3,7 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, - "autoname": "field:program_name", + "autoname": "field:program_code", "beta": 0, "creation": "2015-09-07 12:54:03.609282", "custom": 0, @@ -25,7 +25,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Program Name", "length": 0, @@ -47,47 +47,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "program_code", - "fieldtype": "Data", + "fieldname": "department", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 1, - "in_standard_filter": 0, - "label": "Program Code", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_abbreviation", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Program Abbreviation", + "in_standard_filter": 1, + "label": "Department", "length": 0, "no_copy": 0, + "options": "Department", "permlevel": 0, "precision": "", "print_hide": 0, @@ -133,19 +105,47 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "department", - "fieldtype": "Link", + "fieldname": "program_code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Program Code", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "program_abbreviation", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 1, - "in_standard_filter": 1, - "label": "Department", + "in_standard_filter": 0, + "label": "Program Abbreviation", "length": 0, "no_copy": 0, - "options": "Department", "permlevel": 0, "precision": "", "print_hide": 0, @@ -288,7 +288,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-07 17:57:37.392266", + "modified": "2017-04-12 20:40:53.542488", "modified_by": "Administrator", "module": "Schools", "name": "Program", @@ -319,7 +319,7 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, - "search_fields": "department", + "search_fields": "program_name", "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", diff --git a/erpnext/schools/doctype/program/test_records.json b/erpnext/schools/doctype/program/test_records.json index b2374d6c1f..e5eda70982 100644 --- a/erpnext/schools/doctype/program/test_records.json +++ b/erpnext/schools/doctype/program/test_records.json @@ -1,10 +1,12 @@ [ { "program_name": "_Test Program", - "program_abbreviation": "TP" + "program_code": "_TP1", + "program_abbreviation": "TP1" }, { "program_name": "_Test Program 2", + "program_code": "_TP2", "program_abbreviation": "TP2" } ] diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.js b/erpnext/schools/doctype/program_enrollment/program_enrollment.js index 96c8f96dc6..f117ee2f49 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.js +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.js @@ -3,7 +3,35 @@ cur_frm.add_fetch('fee_structure', 'total_amount', 'amount'); -frappe.ui.form.on("Program Enrollment", { +frappe.ui.form.on("Program Enrollment", { + onload: function(frm, cdt, cdn){ + frm.set_query("academic_term", "fees", function(){ + return{ + "filters":{ + "academic_year": (frm.doc.academic_year) + } + }; + }); + + frm.fields_dict['fees'].grid.get_field('fee_structure').get_query = function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + return { + filters: {'academic_term': d.academic_term} + } + }; + + if (frm.doc.program) { + frm.set_query("course", "courses", function(doc, cdt, cdn) { + return{ + query: "erpnext.schools.doctype.program_enrollment.program_enrollment.get_program_courses", + filters: { + 'program': frm.doc.program + } + } + }); + } + }, + program: function(frm) { if (frm.doc.program) { frappe.call({ @@ -18,28 +46,32 @@ frappe.ui.form.on("Program Enrollment", { } } }); + frm.trigger.onload() } }, student_category: function() { frappe.ui.form.trigger("Program Enrollment", "program"); }, - - onload: function(frm, cdt, cdn){ - cur_frm.set_query("academic_term", "fees", function(){ - return{ - "filters":{ - "academic_year": (frm.doc.academic_year) + + get_courses: function(frm) { + if (frm.doc.program) { + frm.set_value("courses",[]); + frappe.call({ + method: "get_courses", + doc:frm.doc, + callback: function(r) { + if(r.message) { + frm.set_value("courses", r.message); + } + else { + frappe.msgprint(__("There is no mandatory course for the program {0}",[frm.doc.program])); + } } - }; - }); - - cur_frm.fields_dict['fees'].grid.get_field('fee_structure').get_query = function(doc, cdt, cdn) { - var d = locals[cdt][cdn]; - return { - filters: {'academic_term': d.academic_term} - } - }; - + }) + } + else { + frappe.throw(__("Select the Program to fetch mandatory courses.")) + } } }); diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json index ae60472311..988af05091 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json @@ -78,7 +78,37 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "student_category", + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 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, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -87,10 +117,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Student Category", + "label": "Academic Term", "length": 0, "no_copy": 0, - "options": "Student Category", + "options": "Academic Term", "permlevel": 0, "precision": "", "print_hide": 0, @@ -108,8 +138,9 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "school_house", - "fieldtype": "Link", + "default": "Today", + "fieldname": "enrollment_date", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -117,10 +148,9 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "School House", + "label": "Enrollment Date", "length": 0, "no_copy": 0, - "options": "School House", "permlevel": 0, "precision": "", "print_hide": 0, @@ -128,7 +158,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -192,7 +222,7 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, @@ -226,19 +256,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "academic_year", + "fieldname": "student_category", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Academic Year", + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Category", "length": 0, "no_copy": 0, - "options": "Academic Year", + "options": "Student Category", "permlevel": 0, "precision": "", "print_hide": 0, @@ -246,7 +276,37 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "school_house", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "School House", + "length": 0, + "no_copy": 0, + "options": "School House", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -256,9 +316,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "default": "Today", - "fieldname": "enrollment_date", - "fieldtype": "Date", + "fieldname": "enrolled_courses", + "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -266,7 +325,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Enrollment Date", + "label": "Enrolled courses", "length": 0, "no_copy": 0, "permlevel": 0, @@ -276,7 +335,66 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "get_courses", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Get Courses", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "courses", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Courses", + "length": 0, + "no_copy": 0, + "options": "Program Enrollment Course", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -295,7 +413,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "", + "label": "Fees", "length": 0, "no_copy": 0, "permlevel": 0, @@ -412,7 +530,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-06 15:21:43.137852", + "modified": "2017-04-12 12:12:10.148274", "modified_by": "Administrator", "module": "Schools", "name": "Program Enrollment", diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.py b/erpnext/schools/doctype/program_enrollment/program_enrollment.py index 02c6fe71b6..feb4c2f60e 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.py +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe from frappe import msgprint, _ from frappe.model.document import Document +from frappe.desk.reportview import get_match_cond, get_filters_cond from frappe.utils import comma_and class ProgramEnrollment(Document): @@ -53,4 +54,26 @@ class ProgramEnrollment(Document): if fee_list: fee_list = ["""
%s""" % \ (fee, fee) for fee in fee_list] - msgprint(_("Fee Records Created - {0}").format(comma_and(fee_list))) \ No newline at end of file + msgprint(_("Fee Records Created - {0}").format(comma_and(fee_list))) + + def get_courses(self): + return frappe.db.sql('''select course, course_name from `tabProgram Course` where parent = %s and required = 1''', (self.program), as_dict=1) + + +@frappe.whitelist() +def get_program_courses(doctype, txt, searchfield, start, page_len, filters): + if filters.get('program'): + return frappe.db.sql("""select course, course_name from `tabProgram Course` + where parent = %(program)s and course like %(txt)s {match_cond} + order by + if(locate(%(_txt)s, course), locate(%(_txt)s, course), 99999), + idx desc, + `tabProgram Course`.course asc + limit {start}, {page_len}""".format( + match_cond=get_match_cond(doctype), + start=start, + page_len=page_len), { + "txt": "%{0}%".format(txt), + "_txt": txt.replace('%', ''), + "program": filters['program'] + }) diff --git a/erpnext/schools/doctype/program_enrollment_course/__init__.py b/erpnext/schools/doctype/program_enrollment_course/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json new file mode 100644 index 0000000000..5c5e220f26 --- /dev/null +++ b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json @@ -0,0 +1,101 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-04-10 19:28:19.616308", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "course", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Course", + "length": 0, + "no_copy": 0, + "options": "Course", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "course_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Course Name", + "length": 0, + "no_copy": 0, + "options": "course.course_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-04-12 11:49:50.433280", + "modified_by": "Administrator", + "module": "Schools", + "name": "Program Enrollment Course", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py new file mode 100644 index 0000000000..e1f564eff0 --- /dev/null +++ b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, 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 ProgramEnrollmentCourse(Document): + pass diff --git a/erpnext/schools/doctype/school_settings/school_settings.py b/erpnext/schools/doctype/school_settings/school_settings.py index a5f68e87da..5a1c6fe4a6 100644 --- a/erpnext/schools/doctype/school_settings/school_settings.py +++ b/erpnext/schools/doctype/school_settings/school_settings.py @@ -4,7 +4,23 @@ from __future__ import unicode_literals import frappe +import frappe.defaults from frappe.model.document import Document +school_keydict = { + # "key in defaults": "key in Global Defaults" + "academic_year": "current_academic_year", + "academic_term": "current_academic_term", +} + class SchoolSettings(Document): - pass + def on_update(self): + """update defaults""" + for key in school_keydict: + frappe.db.set_default(key, self.get(school_keydict[key], '')) + + # clear cache + frappe.clear_cache() + + def get_defaults(self): + return frappe.defaults.get_defaults() diff --git a/erpnext/schools/doctype/student/test_records.json b/erpnext/schools/doctype/student/test_records.json index e280794ce6..36da06f02d 100644 --- a/erpnext/schools/doctype/student/test_records.json +++ b/erpnext/schools/doctype/student/test_records.json @@ -3,7 +3,7 @@ "first_name": "_Test", "middle_name": "Student", "last_name": "Name", - "program": "_Test Program", + "program": "TC101", "date_of_birth": "2000-01-01", "gender": "Male", "blood_group": "A+" @@ -13,7 +13,7 @@ "first_name": "_Test", "middle_name": "Student", "last_name": "Name 1", - "program": "_Test Program", + "program": "TC101", "date_of_birth": "2000-01-01", "gender": "Male", "blood_group": "A+" @@ -23,7 +23,7 @@ "first_name": "_Test", "middle_name": "Student", "last_name": "Name 2", - "program": "_Test Program", + "program": "TC101", "date_of_birth": "2000-01-01", "gender": "Male", "blood_group": "A+" diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json index 27cd181bd1..06cb086c20 100644 --- a/erpnext/schools/doctype/student_group/test_records.json +++ b/erpnext/schools/doctype/student_group/test_records.json @@ -1,13 +1,13 @@ [ { - "program": "_Test Program", - "course": "_Test Course", + "program": "_TP1", + "course": "TC100", "academic_year": "2014-2015", "academic_term": "2014-2015 (_Test Academic Term)" }, { - "program": "_Test Program", - "course": "_Test Course 2", + "program": "_TP2", + "course": "TC101", "academic_year": "2014-2015", "academic_term": "2014-2015 (_Test Academic Term)" } diff --git a/erpnext/schools/utils.py b/erpnext/schools/utils.py index 3adbae4b5e..2ca46d5542 100644 --- a/erpnext/schools/utils.py +++ b/erpnext/schools/utils.py @@ -9,9 +9,9 @@ from frappe import _ class OverlapError(frappe.ValidationError): pass def validate_overlap_for(doc, doctype, fieldname, value=None): - """Checks overlap for specified feild. + """Checks overlap for specified field. - :param fieldname: Checks Overlap for this feild + :param fieldname: Checks Overlap for this field """ existing = get_overlap_for(doc, doctype, fieldname, value) @@ -20,9 +20,9 @@ def validate_overlap_for(doc, doctype, fieldname, value=None): doc.meta.get_label(fieldname) if not value else fieldname , value or doc.get(fieldname)), OverlapError) def get_overlap_for(doc, doctype, fieldname, value=None): - """Returns overlaping document for specified feild. + """Returns overlaping document for specified field. - :param fieldname: Checks Overlap for this feild + :param fieldname: Checks Overlap for this field """ existing = frappe.db.sql("""select name, from_time, to_time from `tab{0}` From ae30026005f8fc898ba8b1e9838e58d355097adc Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 17 Apr 2017 11:52:35 +0530 Subject: [PATCH 097/287] Calender view fix for course schedule --- erpnext/config/schools.py | 2 +- erpnext/schools/doctype/course/course.js | 12 ------------ erpnext/schools/doctype/program/program.js | 15 --------------- 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index b498f50099..c88a8ccf4b 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -106,7 +106,7 @@ def get_data(): { "type": "doctype", "name": "Course Schedule", - "route": "Calendar/Course Schedule" + "route": "List/Course Schedule/Calendar" }, { "type": "doctype", diff --git a/erpnext/schools/doctype/course/course.js b/erpnext/schools/doctype/course/course.js index 284658f23d..f84c59fcd2 100644 --- a/erpnext/schools/doctype/course/course.js +++ b/erpnext/schools/doctype/course/course.js @@ -1,30 +1,18 @@ frappe.ui.form.on("Course", "refresh", function(frm) { if(!cur_frm.doc.__islocal) { frm.add_custom_button(__("Program"), function() { - // frappe.route_options = { - // "Program Course.course": frm.doc.name - // } frappe.set_route("List", "Program"); }); frm.add_custom_button(__("Student Group"), function() { - // frappe.route_options = { - // course: frm.doc.name - // } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Course Schedule"), function() { - // frappe.route_options = { - // course: frm.doc.name - // } frappe.set_route("List", "Course Schedule"); }); frm.add_custom_button(__("Assessment Plan"), function() { - // frappe.route_options = { - // course: frm.doc.name - // } frappe.set_route("List", "Assessment Plan"); }); } diff --git a/erpnext/schools/doctype/program/program.js b/erpnext/schools/doctype/program/program.js index c251f1e005..cc09d0ef4d 100644 --- a/erpnext/schools/doctype/program/program.js +++ b/erpnext/schools/doctype/program/program.js @@ -6,37 +6,22 @@ cur_frm.add_fetch('fee_structure', 'total_amount', 'amount'); frappe.ui.form.on("Program", "refresh", function(frm) { if(!frm.doc.__islocal) { frm.add_custom_button(__("Student Applicant"), function() { - // frappe.route_options = { - // program: frm.doc.name - // } frappe.set_route("List", "Student Applicant"); }); frm.add_custom_button(__("Program Enrollment"), function() { - // frappe.route_options = { - // program: frm.doc.name - // } frappe.set_route("List", "Program Enrollment"); }); frm.add_custom_button(__("Student Group"), function() { - // frappe.route_options = { - // program: frm.doc.name - // } frappe.set_route("List", "Student Group"); }); frm.add_custom_button(__("Fee Structure"), function() { - // frappe.route_options = { - // program: frm.doc.name - // } frappe.set_route("List", "Fee Structure"); }); frm.add_custom_button(__("Fees"), function() { - // frappe.route_options = { - // program: frm.doc.name - // } frappe.set_route("List", "Fees"); }); } From ad65be8250f2eb6ca5f6807cef045d0d60929ef6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 17 Apr 2017 15:42:17 +0600 Subject: [PATCH 098/287] bumped to version 8.0.12 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 9e6707a262..afa61319c9 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.11' +__version__ = '8.0.12' def get_default_company(user=None): '''Get default company for user''' From e2431fd5e9244f97a54d70b92337c9796a95682f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 17 Apr 2017 15:35:36 +0530 Subject: [PATCH 099/287] minor fix --- .../doctype/purchase_invoice_item/purchase_invoice_item.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 0dcae82d82..bf370c8684 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -1939,7 +1939,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-11 13:44:17.460674", + "modified": "2017-04-17 13:44:17.460674", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", From 4d1cf534660be763c2cf067f839fb17bf82fee9d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 17 Apr 2017 16:06:58 +0600 Subject: [PATCH 100/287] bumped to version 8.0.13 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index afa61319c9..3f6504d795 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.12' +__version__ = '8.0.13' def get_default_company(user=None): '''Get default company for user''' From dc981dc546a798bdd9306d70e3c33dbf115d4607 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 3 Apr 2017 14:17:08 +0530 Subject: [PATCH 101/287] [fix] Auto serial no fecthed on the invoice even if stock update is disabled issue --- erpnext/controllers/accounts_controller.py | 8 +++++--- erpnext/patches.txt | 3 ++- ...ll_to_serial_nos_for_disabled_sales_invoices.py | 14 ++++++++++++++ erpnext/public/js/controllers/transaction.js | 10 +++++++--- erpnext/stock/get_item_details.py | 13 ++++++++++++- 5 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 910c19c9ca..ecbf59da1b 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -192,11 +192,13 @@ class AccountsController(TransactionBase): if (item.get(fieldname) is None or fieldname in force_item_fields): item.set(fieldname, value) - elif fieldname == "cost_center" and not item.get("cost_center"): + elif fieldname in ['cost_center', 'conversion_factor'] and not item.get(fieldname): item.set(fieldname, value) - elif fieldname == "conversion_factor" and not item.get("conversion_factor"): - item.set(fieldname, value) + elif fieldname == "serial_no": + stock_qty = item.get("stock_qty") * -1 if item.get("stock_qty") < 0 else item.get("stock_qty") + if stock_qty != len(item.get('serial_no').split('\n')): + item.set(fieldname, value) if ret.get("pricing_rule"): # if user changed the discount percentage then set user's discount percentage ? diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 9c2b1c49ad..522c4fca9c 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -385,4 +385,5 @@ erpnext.patches.v8_0.addresses_linked_to_lead execute:frappe.delete_doc('DocType', 'Purchase Common') erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice erpnext.patches.v8_0.update_supplier_address_in_stock_entry -erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate \ No newline at end of file +erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate +erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices \ No newline at end of file diff --git a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py new file mode 100644 index 0000000000..197d6ded61 --- /dev/null +++ b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py @@ -0,0 +1,14 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty + +def execute(): + frappe.db.sql(""" + update + `tabSales Invoice Item` + set serial_no = NULL + where + parent in (select name from `tabSales Invoice` where update_stock = 0 and docstatus = 1)""") \ No newline at end of file diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 7e0dccc6a1..a583f7d05b 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -260,6 +260,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ customer: me.frm.doc.customer, supplier: me.frm.doc.supplier, currency: me.frm.doc.currency, + update_stock: in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0, conversion_rate: me.frm.doc.conversion_rate, price_list: me.frm.doc.selling_price_list || me.frm.doc.buying_price_list, @@ -275,7 +276,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ name: me.frm.doc.name, project: item.project || me.frm.doc.project, qty: item.qty, - stock_qty: item.stock_qty + stock_qty: item.stock_qty, + conversion_factor: item.conversion_factor } }, @@ -762,7 +764,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ "ignore_pricing_rule": me.frm.doc.ignore_pricing_rule, "doctype": me.frm.doc.doctype, "name": me.frm.doc.name, - "is_return": cint(me.frm.doc.is_return) + "is_return": cint(me.frm.doc.is_return), + "update_stock": in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0, }; }, @@ -781,7 +784,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ "parent": d.parent, "pricing_rule": d.pricing_rule, "warehouse": d.warehouse, - "serial_no": d.serial_no + "serial_no": d.serial_no, + "conversion_factor": d.conversion_factor }); // if doctype is Quotation Item / Sales Order Iten then add Margin Type and rate in item_list diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 3ada10ba6b..c2e77df3fe 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -161,7 +161,7 @@ def get_basic_details(args, item): "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "conversion_factor": 1.0, "qty": args.qty or 1.0, - "stock_qty": 1.0, + "stock_qty": args.qty or 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, @@ -172,10 +172,18 @@ def get_basic_details(args, item): "net_amount": 0.0, "discount_percentage": 0.0, "supplier": item.default_supplier, + "update_stock": args.get("update_stock") if args.get('doctype') in ['Sales Invoice', 'Purchase Invoice'] else 0, "delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0, "is_fixed_asset": item.is_fixed_asset }) + # calculate conversion factor + conversion_factor = args.get("conversion_factor") or get_conversion_factor(item.item_code, args.uom).get("conversion_factor") or 1.0 + out.update({ + "conversion_factor": conversion_factor, + "stock_qty": out.qty * conversion_factor + }) + # if default specified in item is for another company, fetch from company for d in [["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], @@ -532,6 +540,9 @@ def get_serial_no(args): args = json.loads(args) args = frappe._dict(args) + if args.get('doctype') == 'Sales Invoice' and not args.get('update_stock'): + return "" + if args.get('warehouse') and args.get('stock_qty') and args.get('item_code'): if frappe.get_value('Item', {'item_code': args.item_code}, "has_serial_no") == 1: From d7de3c606b2448fe0df93f0b566ca90c07c283c6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 17 Apr 2017 13:36:08 +0530 Subject: [PATCH 102/287] [fix] Pricing rule for pos --- erpnext/accounts/doctype/sales_invoice/pos.py | 21 +++++++---- erpnext/accounts/page/pos/pos.js | 37 +++++++++++++++++-- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 419c5579e0..f1f997a7f6 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -32,7 +32,7 @@ def get_pos_data(): 'doc': doc, 'default_customer': pos_profile.get('customer'), 'items': get_items_list(pos_profile), - 'item_groups': get_item_group(pos_profile), + 'item_groups': get_item_groups(pos_profile), 'customers': customers, 'address': get_customers_address(customers), 'serial_no_data': get_serial_no_data(pos_profile, doc.company), @@ -132,7 +132,7 @@ def get_items_list(pos_profile): if pos_profile.get('item_groups'): # Get items based on the item groups defined in the POS profile for d in pos_profile.get('item_groups'): - item_groups.extend(get_child_nodes('Item Group', d.item_group)) + item_groups.extend([d.name for d in get_child_nodes('Item Group', d.item_group)]) cond = "item_group in (%s)"%(', '.join(['%s']*len(item_groups))) return frappe.db.sql(""" @@ -146,14 +146,19 @@ def get_items_list(pos_profile): disabled = 0 and has_variants = 0 and is_sales_item = 1 and {cond} """.format(cond=cond), tuple(item_groups), as_dict=1) -def get_item_group(pos_profile): +def get_item_groups(pos_profile): + item_group_dict = {} if pos_profile.get('item_groups'): item_groups = [] for d in pos_profile.get('item_groups'): item_groups.extend(get_child_nodes('Item Group', d.item_group)) - return item_groups else: - return frappe.db.sql_list("""Select name from `tabItem Group` order by name""") + item_groups = frappe.db.sql("""Select name, + lft, rgt from `tabItem Group` order by lft""", as_dict=1) + + for data in item_groups: + item_group_dict[data.name] = [data.lft, data.rgt] + return item_group_dict def get_customers_list(pos_profile): cond = "1=1" @@ -161,7 +166,7 @@ def get_customers_list(pos_profile): if pos_profile.get('customer_groups'): # Get customers based on the customer groups defined in the POS profile for d in pos_profile.get('customer_groups'): - customer_groups.extend(get_child_nodes('Customer Group', d.customer_group)) + customer_groups.extend([d.name for d in get_child_nodes('Customer Group', d.customer_group)]) cond = "customer_group in (%s)"%(', '.join(['%s']*len(customer_groups))) return frappe.db.sql(""" select name, customer_name, customer_group, @@ -187,8 +192,8 @@ def get_customers_address(customers): def get_child_nodes(group_type, root): lft, rgt = frappe.db.get_value(group_type, root, ["lft", "rgt"]) - return frappe.db.sql_list(""" Select name from `tab{tab}` where - lft >= {lft} and rgt <= {rgt}""".format(tab=group_type, lft=lft, rgt=rgt)) + return frappe.db.sql(""" Select name, lft, rgt from `tab{tab}` where + lft >= {lft} and rgt <= {rgt} order by lft""".format(tab=group_type, lft=lft, rgt=rgt), as_dict=1) def get_serial_no_data(pos_profile, company): # get itemwise serial no data diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 670a577c4e..70067614b6 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -407,8 +407,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); this.search_item_group = this.wrapper.find('.search-item-group'); - - var dropdown_html = me.item_groups.map(function(item_group) { + sorted_item_groups = this.get_sorted_item_groups() + var dropdown_html = sorted_item_groups.map(function(item_group) { return "
  • "+item_group+"
  • "; }).join(""); @@ -437,6 +437,15 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }) }, + get_sorted_item_groups: function() { + list = {} + $.each(this.item_groups, function(i, data) { + list[i] = data[0] + }) + + return Object.keys(list).sort(function(a,b){return list[a]-list[b]}) + }, + toggle_more_btn: function() { if(!this.items || this.items.length <= this.page_len) { this.wrapper.find(".btn-more").hide(); @@ -1091,9 +1100,9 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ // $(me.wrapper).find(".pos-item-wrapper").on("click", function () { $(this.wrapper).on("click", ".pos-item-wrapper", function () { me.item_code = ''; + me.customer_validate(); if($(me.pos_bill).is(":hidden")) return; - me.customer_validate(); if (me.frm.doc.docstatus == 0) { me.items = me.get_items($(this).attr("data-item-code")) me.add_to_cart(); @@ -1768,7 +1777,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var me = this; return $.grep(this.pricing_rules, function (data) { if (item.qty >= data.min_qty && (item.qty <= (data.max_qty ? data.max_qty : item.qty))) { - if (data.item_code == item.item_code || in_list(['All Item Groups', item.item_group], data.item_group) || item.brand == data.brand) { + if (me.validate_item_condition(data, item)) { if (in_list(['Customer', 'Customer Group', 'Territory', 'Campaign'], data.applicable_for)) { return me.validate_condition(data) } else { @@ -1779,6 +1788,26 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }) }, + validate_item_condition: function (data, item) { + var apply_on = frappe.model.scrub(data.apply_on); + + return (data.apply_on == 'Item Group') + ? this.validate_item_group(data.item_group, item.item_group) : (data[apply_on] == item[apply_on]); + }, + + validate_item_group: function (pr_item_group, cart_item_group) { + //pr_item_group = pricing rule's item group + //cart_item_group = cart item's item group + //this.item_groups has information about item group's lft and rgt + //for example: {'Foods': [12, 19]} + + pr_item_group = this.item_groups[pr_item_group] + cart_item_group = this.item_groups[cart_item_group] + + return (cart_item_group[0] >= pr_item_group[0] && + cart_item_group[1] <= pr_item_group[1]) + }, + validate_condition: function (data) { //This method check condition based on applicable for condition = this.get_mapper_for_pricing_rule(data)[data.applicable_for] From 5123a8519b03343c323034b6a011756fe03cf699 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 18 Apr 2017 10:33:40 +0530 Subject: [PATCH 103/287] [minor] check if joining date is available before validating attandance date --- erpnext/hr/doctype/attendance/attendance.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py index 72fa47dd81..458b2dd5c1 100644 --- a/erpnext/hr/doctype/attendance/attendance.py +++ b/erpnext/hr/doctype/attendance/attendance.py @@ -35,9 +35,11 @@ class Attendance(Document): frappe.throw(_("No leave record found for employee {0} for {1}").format(self.employee, self.attendance_date)) def validate_attendance_date(self): + date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") + if getdate(self.attendance_date) > getdate(nowdate()): frappe.throw(_("Attendance can not be marked for future dates")) - elif getdate(self.attendance_date) < frappe.db.get_value("Employee", self.employee, "date_of_joining"): + elif date_of_joining and getdate(self.attendance_date) < getdate(date_of_joining): frappe.throw(_("Attendance date can not be less than employee's joining date")) def validate_employee(self): From 8a019807572447a6aa0f431d50137a32d43b1580 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 18 Apr 2017 13:11:10 +0530 Subject: [PATCH 104/287] Unlink Journal Entry reference from Asset --- .../accounts/doctype/journal_entry/journal_entry.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index a471c48c57..b9b8fc2968 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -72,6 +72,7 @@ class JournalEntry(AccountsController): self.update_expense_claim() self.update_employee_loan() self.unlink_advance_entry_reference() + self.unlink_asset_reference() def unlink_advance_entry_reference(self): for d in self.get("accounts"): @@ -81,6 +82,18 @@ class JournalEntry(AccountsController): d.reference_type = '' d.reference_name = '' d.db_update() + + def unlink_asset_reference(self): + for d in self.get("accounts"): + if d.reference_type=="Asset" and d.reference_name: + asset = frappe.get_doc("Asset", d.reference_name) + for s in asset.get("schedules"): + if s.journal_entry == self.name: + s.db_set("journal_entry", None) + asset.value_after_depreciation += s.depreciation_amount + + asset.db_set("value_after_depreciation", asset.value_after_depreciation) + asset.set_status() def validate_party(self): for d in self.get("accounts"): From 117be7ddd5208ad1eece3e4e61c4dbdf77b13aad Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 18 Apr 2017 14:02:07 +0530 Subject: [PATCH 105/287] Added a settings in Accounts Settings to disable booking depreciation entry automatically --- .../accounts_settings/accounts_settings.json | 64 +++++++++++++++++-- .../accounts/doctype/asset/depreciation.py | 4 ++ erpnext/accounts/doctype/asset/test_asset.py | 22 ++++++- erpnext/demo/user/fixed_asset.py | 3 + erpnext/patches.txt | 3 +- ...ooking_asset_depreciation_automatically.py | 9 +++ 6 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 7a4d40d6ee..4f268a24cc 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -25,7 +26,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Make Accounting Entry For Every Stock Movement", "length": 0, "no_copy": 0, @@ -33,6 +36,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -51,7 +55,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Accounts Frozen Upto", "length": 0, "no_copy": 0, @@ -59,6 +65,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -77,7 +84,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries", "length": 0, "no_copy": 0, @@ -86,6 +95,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -103,7 +113,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -111,6 +123,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -129,7 +142,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Credit Controller", "length": 0, "no_copy": 0, @@ -138,6 +153,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -155,7 +171,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Check Supplier Invoice Number Uniqueness", "length": 0, "no_copy": 0, @@ -164,6 +182,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -181,7 +200,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Make Payment via Journal Entry", "length": 0, "no_copy": 0, @@ -190,6 +211,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -208,7 +230,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Unlink Payment on Cancellation of Invoice", "length": 0, "no_copy": 0, @@ -217,6 +241,37 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 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": "1", + "fieldname": "book_asset_depreciation_entry_automatically", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Book Asset Depreciation Entry Automatically", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -224,18 +279,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, - "icon": "fa fa-cog", + "icon": "icon-cog", "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-10-20 16:12:38.595075", + "modified": "2017-04-18 13:35:59.166250", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", @@ -251,7 +306,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -266,6 +320,8 @@ "quick_entry": 1, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_order": "ASC", + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/asset/depreciation.py b/erpnext/accounts/doctype/asset/depreciation.py index 15c155c7ac..397342dc46 100644 --- a/erpnext/accounts/doctype/asset/depreciation.py +++ b/erpnext/accounts/doctype/asset/depreciation.py @@ -8,6 +8,10 @@ from frappe import _ from frappe.utils import flt, today, getdate def post_depreciation_entries(date=None): + # Return if automatic booking of asset depreciation is disabled + if not frappe.db.get_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically"): + return + if not date: date = today() for asset in get_depreciable_assets(date): diff --git a/erpnext/accounts/doctype/asset/test_asset.py b/erpnext/accounts/doctype/asset/test_asset.py index 51496b918c..000bc5ccd2 100644 --- a/erpnext/accounts/doctype/asset/test_asset.py +++ b/erpnext/accounts/doctype/asset/test_asset.py @@ -166,6 +166,23 @@ class TestAsset(unittest.TestCase): self.assertEqual(gle, expected_gle) self.assertEqual(asset.get("value_after_depreciation"), 70000) + + def test_depreciation_entry_cancellation(self): + asset = frappe.get_doc("Asset", "Macbook Pro 1") + asset.submit() + post_depreciation_entries(date="2021-01-01") + + asset.load_from_db() + + # cancel depreciation entry + depr_entry = asset.get("schedules")[0].journal_entry + self.assertTrue(depr_entry) + frappe.get_doc("Journal Entry", depr_entry).cancel() + + asset.load_from_db() + depr_entry = asset.get("schedules")[0].journal_entry + self.assertFalse(depr_entry) + def test_scrap_asset(self): asset = frappe.get_doc("Asset", "Macbook Pro 1") @@ -297,4 +314,7 @@ def set_depreciation_settings_in_company(): company.depreciation_expense_account = "_Test Depreciations - _TC" company.disposal_account = "_Test Gain/Loss on Asset Disposal - _TC" company.depreciation_cost_center = "_Test Cost Center - _TC" - company.save() \ No newline at end of file + company.save() + + # Enable booking asset depreciation entry automatically + frappe.db.set_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically", 1) \ No newline at end of file diff --git a/erpnext/demo/user/fixed_asset.py b/erpnext/demo/user/fixed_asset.py index bf3199ea5f..b2db39c9f0 100644 --- a/erpnext/demo/user/fixed_asset.py +++ b/erpnext/demo/user/fixed_asset.py @@ -18,6 +18,9 @@ def work(): # fixed_asset.work() already run return + # Enable booking asset depreciation entry automatically + frappe.db.set_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically", 1) + # post depreciation entries as on today post_depreciation_entries() diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 522c4fca9c..6881fd6db4 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -386,4 +386,5 @@ execute:frappe.delete_doc('DocType', 'Purchase Common') erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice erpnext.patches.v8_0.update_supplier_address_in_stock_entry erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate -erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices \ No newline at end of file +erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices +erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically \ No newline at end of file diff --git a/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py b/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py new file mode 100644 index 0000000000..1088d702dd --- /dev/null +++ b/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py @@ -0,0 +1,9 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.db.set_value("Accounts Settings", None, + "book_asset_depreciation_entry_automatically", 1) \ No newline at end of file From 2704162f5a2540e9e62756a32c325983f23a6d92 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 19 Apr 2017 16:25:39 +0530 Subject: [PATCH 106/287] Fixes allowd on submit --- .../purchase_invoice_item/purchase_invoice_item.json | 4 ++-- .../doctype/sales_invoice_item/sales_invoice_item.json | 4 ++-- erpnext/selling/doctype/customer/test_customer.py | 7 ++++++- .../doctype/delivery_note_item/delivery_note_item.json | 4 ++-- .../purchase_receipt_item/purchase_receipt_item.json | 4 ++-- .../doctype/stock_entry_detail/stock_entry_detail.json | 4 ++-- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index bf370c8684..5e964ed625 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -1422,7 +1422,7 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, @@ -1939,7 +1939,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-17 13:44:17.460674", + "modified": "2017-04-19 11:54:16.112134", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json index 205b61e882..80f8b57fb9 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -1548,7 +1548,7 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, @@ -2094,7 +2094,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-05 23:28:13.520429", + "modified": "2017-04-19 11:53:26.682964", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Item", diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py index 0d74d23eb4..40ed6f98fe 100644 --- a/erpnext/selling/doctype/customer/test_customer.py +++ b/erpnext/selling/doctype/customer/test_customer.py @@ -54,25 +54,30 @@ class TestCustomer(unittest.TestCase): self.assertEquals(value, details.get(key)) def test_rename(self): + # delete communication linked to these 2 customers for name in ("_Test Customer 1", "_Test Customer 1 Renamed"): frappe.db.sql("""delete from `tabCommunication` where communication_type='Comment' and reference_doctype=%s and reference_name=%s""", ("Customer", name)) + # add comments comment = frappe.get_doc("Customer", "_Test Customer 1").add_comment("Comment", "Test Comment for Rename") + # rename frappe.rename_doc("Customer", "_Test Customer 1", "_Test Customer 1 Renamed") + # check if customer renamed self.assertTrue(frappe.db.exists("Customer", "_Test Customer 1 Renamed")) self.assertFalse(frappe.db.exists("Customer", "_Test Customer 1")) - # test that comment gets renamed + # test that comment gets linked to renamed doc self.assertEquals(frappe.db.get_value("Communication", { "communication_type": "Comment", "reference_doctype": "Customer", "reference_name": "_Test Customer 1 Renamed" }), comment.name) + # rename back to original frappe.rename_doc("Customer", "_Test Customer 1 Renamed", "_Test Customer 1") def test_freezed_customer(self): diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index 2649c49c08..9738f9c24d 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -1644,7 +1644,7 @@ "width": "120px" }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, @@ -1894,7 +1894,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-05 23:26:03.390869", + "modified": "2017-04-19 11:53:42.656700", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index 91d1791cc7..27b7be97c2 100755 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -1630,7 +1630,7 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, @@ -1979,7 +1979,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-05 23:27:10.785444", + "modified": "2017-04-19 11:54:00.260885", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt Item", diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index 6d99dc45c2..2f7779c132 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -1040,7 +1040,7 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, @@ -1225,7 +1225,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-05 23:25:26.885642", + "modified": "2017-04-19 11:54:31.645381", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry Detail", From 019501e4a04d24ed74b92820e7e272d58ee0c5b3 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 19 Apr 2017 17:53:31 +0530 Subject: [PATCH 107/287] [fix] Balance Sheet, linking account to general ledger is not working --- erpnext/public/js/financial_statements.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js index 711520530a..66daf0dfb4 100644 --- a/erpnext/public/js/financial_statements.js +++ b/erpnext/public/js/financial_statements.js @@ -26,13 +26,14 @@ erpnext.financial_statements = { }, "open_general_ledger": function(data) { if (!data.account) return; + var project = $.grep(frappe.query_report.filters, function(e){ return e.df.fieldname == 'project'; }) frappe.route_options = { "account": data.account, "company": frappe.query_report_filters_by_name.company.get_value(), "from_date": data.from_date || data.year_start_date, "to_date": data.to_date || data.year_end_date, - "project": $.grep(frappe.query_report.filters, function(e){ return e.df.fieldname == 'project'; })[0].$input.val() + "project": (project && project.length > 0) ? project[0].$input.val() : "" }; frappe.set_route("query-report", "General Ledger"); }, From 695327a5136d8e4e10b0333900c3cfb6738c22ba Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Wed, 19 Apr 2017 13:39:31 +0530 Subject: [PATCH 108/287] Duplicate dependencies when project is duplicated - fix frappe/erpnext#8274 --- erpnext/patches.txt | 3 +- .../patches/v8_0/set_project_copied_from.py | 9 +++++ erpnext/projects/doctype/project/project.json | 40 ++++++++++++++++--- erpnext/projects/doctype/project/project.py | 26 ++++++++++++ erpnext/projects/doctype/task/task.py | 4 +- 5 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v8_0/set_project_copied_from.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 522c4fca9c..2cd3a2cbf8 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -386,4 +386,5 @@ execute:frappe.delete_doc('DocType', 'Purchase Common') erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice erpnext.patches.v8_0.update_supplier_address_in_stock_entry erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate -erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices \ No newline at end of file +erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices +erpnext.patches.v8_0.set_project_copied_from \ No newline at end of file diff --git a/erpnext/patches/v8_0/set_project_copied_from.py b/erpnext/patches/v8_0/set_project_copied_from.py new file mode 100644 index 0000000000..be589014ac --- /dev/null +++ b/erpnext/patches/v8_0/set_project_copied_from.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.db.sql(''' + UPDATE `tabProject` + SET copied_from=name + WHERE copied_from is NULL + ''') \ No newline at end of file diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json index e809328df9..32a3ffd335 100644 --- a/erpnext/projects/doctype/project/project.json +++ b/erpnext/projects/doctype/project/project.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, "autoname": "field:project_name", @@ -553,6 +554,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "copied_from", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Copied From", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -1052,7 +1082,7 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, + }, { "allow_on_submit": 0, "bold": 0, @@ -1174,19 +1204,19 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-puzzle-piece", "idx": 29, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 4, - "modified": "2017-02-17 17:24:04.146872", - "modified_by": "Administrator", + "modified": "2017-04-19 13:16:32.462005", + "modified_by": "faris@erpnext.com", "module": "Projects", "name": "Project", "owner": "Administrator", @@ -1261,4 +1291,4 @@ "timeline_field": "customer", "track_changes": 0, "track_seen": 1 -} +} \ No newline at end of file diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 37734f1876..40493e1ed6 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -205,6 +205,32 @@ class Project(Document): def on_update(self): self.load_tasks() self.sync_tasks() + self.update_dependencies_on_duplicated_project() + + def update_dependencies_on_duplicated_project(self): + if self.flags.dont_sync_tasks: return + if not self.copied_from: + self.copied_from = self.name + + if self.name != self.copied_from and self.get('__unsaved'): + # duplicated project + dependency_map = {} + for task in self.tasks: + name, depends_on_tasks = frappe.db.get_value( + 'Task', { "subject": task.title, "project": self.copied_from }, ['name', 'depends_on_tasks'] + ) + depends_on_tasks = [x for x in depends_on_tasks.split(',') if x] + dependency_map[task.title] = [ x['subject'] for x in frappe.get_list( + 'Task Depends On', {"parent": name}, ['subject'])] + + for key, value in dependency_map.iteritems(): + task_name = frappe.db.get_value('Task', {"subject": key, "project": self.name }) + task_doc = frappe.get_doc('Task', task_name) + + for dt in value: + dt_name = frappe.db.get_value('Task', {"subject": dt, "project": self.name }) + task_doc.append('depends_on', {"task": dt_name}) + task_doc.save() def get_timeline_data(doctype, name): '''Return timeline for attendance''' diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 44c81a67c5..43240b20e7 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -53,9 +53,9 @@ class Task(Document): frappe.throw(_("Progress % for a task cannot be more than 100.")) def update_depends_on(self): - depends_on_tasks = "" + depends_on_tasks = self.depends_on_tasks or "" for d in self.depends_on: - if d.task: + if d.task and not d.task in depends_on_tasks: depends_on_tasks += d.task + "," self.depends_on_tasks = depends_on_tasks From f4f774d1df69661ece93bc11a6cf7c54993b3678 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 19 Apr 2017 13:37:20 +0530 Subject: [PATCH 109/287] [fix] offline_pos_name is not defined during print from the POS --- .../accounts/print_format/point_of_sale/point_of_sale.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 6b603c80e2..b413321bfd 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 @@ -7,10 +7,10 @@ "docstatus": 0, "doctype": "Print Format", "font": "Default", - "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, null,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\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\t\t\t\t{{ __(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t
    \n\n\n
    \n

    {{ terms }}

    \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, null,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\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\t\t\t\t{{ __(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t
    \n\n\n
    \n

    {{ terms }}

    \n

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

    ", "idx": 0, "line_breaks": 0, - "modified": "2017-04-17 12:12:00.153763", + "modified": "2017-04-19 13:28:05.129504", "modified_by": "Administrator", "module": "Accounts", "name": "Point of Sale", From 0633df587216ad2416345fd2f12078dd6277300b Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Wed, 19 Apr 2017 13:04:53 +0530 Subject: [PATCH 110/287] Item variant searchable in website products --- erpnext/templates/pages/product_search.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py index c0c39cf8de..8766db3dfa 100644 --- a/erpnext/templates/pages/product_search.py +++ b/erpnext/templates/pages/product_search.py @@ -20,10 +20,9 @@ def get_product_list(search=None, start=0, limit=12): query = """select name, item_name, item_code, route, website_image, thumbnail, item_group, description, web_long_description as website_description from `tabItem` - where show_in_website = 1 + where (show_in_website = 1 or show_variant_in_website = 1) and disabled=0 - and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %(today)s) - and (variant_of is null or variant_of = '')""" + and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %(today)s)""" # search term condition if search: From ba41242f1fcf16d8a614b8cbcf5932429fa4627f Mon Sep 17 00:00:00 2001 From: mbauskar Date: Wed, 19 Apr 2017 12:35:51 +0530 Subject: [PATCH 111/287] [fixes] fixed the pricing rule issue https://github.com/frappe/erpnext/issues/8493 --- erpnext/public/js/controllers/transaction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index a583f7d05b..ce3efc939c 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -275,7 +275,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ doctype: me.frm.doc.doctype, name: me.frm.doc.name, project: item.project || me.frm.doc.project, - qty: item.qty, + qty: item.qty || 1, stock_qty: item.stock_qty, conversion_factor: item.conversion_factor } From 2e6f12b85082b47c65ed035b0ee42f7077c8d50a Mon Sep 17 00:00:00 2001 From: Julian Robbins Date: Tue, 18 Apr 2017 16:54:43 +0100 Subject: [PATCH 112/287] Update purchase-details.md --- erpnext/docs/user/manual/en/stock/item/purchase-details.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/docs/user/manual/en/stock/item/purchase-details.md b/erpnext/docs/user/manual/en/stock/item/purchase-details.md index 5749178448..47983dfc62 100644 --- a/erpnext/docs/user/manual/en/stock/item/purchase-details.md +++ b/erpnext/docs/user/manual/en/stock/item/purchase-details.md @@ -1,4 +1,4 @@ -# purchase details +# Purchase Details # How Do I Track Warranty Status? From 2de3bf7a0f9550d6a1f17268e6592dad6bfd5eac Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 18 Apr 2017 20:11:41 +0530 Subject: [PATCH 113/287] Fixed indexes on sales and purchase transactions --- .../purchase_invoice_item.json | 5 +++-- .../doctype/purchase_order/purchase_order.json | 11 +++++++---- .../purchase_order_item/purchase_order_item.json | 10 ++++++---- .../doctype/quotation_item/quotation_item.json | 9 +++++---- .../selling/doctype/sales_order/sales_order.json | 14 +++++++------- .../doctype/sales_order_item/sales_order_item.json | 6 +++--- .../stock/doctype/delivery_note/delivery_note.json | 12 ++++++------ .../doctype/purchase_receipt/purchase_receipt.json | 4 ++-- .../purchase_receipt_item.json | 5 +++-- 9 files changed, 42 insertions(+), 34 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index bf370c8684..8d89828aad 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -757,6 +757,7 @@ "oldfieldtype": "Currency", "options": "Company:company:default_currency", "permlevel": 0, + "precision": "9", "print_hide": 1, "print_hide_if_no_value": 0, "read_only": 1, @@ -1508,7 +1509,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1939,7 +1940,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-17 13:44:17.460674", + "modified": "2017-04-18 18:51:33.829468", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index e776b3ea98..ecce1184d6 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", @@ -341,7 +342,7 @@ "remember_last_selected_value": 1, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1207,6 +1208,8 @@ "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Link to material requests", @@ -3185,18 +3188,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-file-text", "idx": 105, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-28 18:20:15.650815", + "modified": "2017-04-18 18:49:49.535066", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", @@ -3294,4 +3297,4 @@ "title_field": "title", "track_changes": 0, "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index 12d0da85d7..0037745817 100755 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "hash", @@ -98,7 +99,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -156,7 +157,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -799,6 +800,7 @@ "oldfieldtype": "Currency", "options": "Company:company:default_currency", "permlevel": 0, + "precision": "9", "print_hide": 1, "print_hide_if_no_value": 0, "print_width": "100px", @@ -1647,17 +1649,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-02-17 16:44:55.434162", + "modified": "2017-04-18 18:49:08.604055", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json index cccef9c043..3a7342738a 100644 --- a/erpnext/selling/doctype/quotation_item/quotation_item.json +++ b/erpnext/selling/doctype/quotation_item/quotation_item.json @@ -128,7 +128,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -813,6 +813,7 @@ "oldfieldtype": "Currency", "options": "currency", "permlevel": 0, + "precision": "9", "print_hide": 0, "print_hide_if_no_value": 0, "print_width": "100px", @@ -1483,7 +1484,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1515,7 +1516,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -1532,7 +1533,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-30 19:35:44.119169", + "modified": "2017-04-18 18:47:26.869235", "modified_by": "Administrator", "module": "Selling", "name": "Quotation Item", diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 950150fd36..7621f4c1e3 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -313,7 +313,7 @@ "remember_last_selected_value": 1, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -377,7 +377,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "160px" @@ -791,7 +791,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -821,7 +821,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -2321,7 +2321,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -2896,7 +2896,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -3516,7 +3516,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-10 12:13:03.136885", + "modified": "2017-04-18 20:02:54.895559", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index 479f04e33f..10096d0ae4 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -1397,7 +1397,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1429,7 +1429,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1871,7 +1871,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-30 16:18:49.367870", + "modified": "2017-04-18 18:43:47.150922", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order Item", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 9d3bbf48f6..782996b4e6 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -282,7 +282,7 @@ "remember_last_selected_value": 1, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -853,7 +853,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -883,7 +883,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -2514,7 +2514,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -2908,7 +2908,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -3288,7 +3288,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-10 12:03:29.645642", + "modified": "2017-04-18 18:41:53.065755", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 3877028378..9cd512a1b6 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -352,7 +352,7 @@ "remember_last_selected_value": 1, "report_hide": 0, "reqd": 1, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0, "width": "150px" @@ -2846,7 +2846,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-10 12:02:07.434102", + "modified": "2017-04-18 18:51:10.457027", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index 91d1791cc7..758541096e 100755 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -806,6 +806,7 @@ "length": 0, "no_copy": 0, "permlevel": 0, + "precision": "9", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, @@ -1804,7 +1805,7 @@ "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, - "search_index": 1, + "search_index": 0, "set_only_once": 0, "unique": 0 }, @@ -1979,7 +1980,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-05 23:27:10.785444", + "modified": "2017-04-18 18:50:40.551474", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt Item", From 8691e0777b47de160bd06832f3178bab80b0b6eb Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 19 Apr 2017 20:57:21 +0530 Subject: [PATCH 114/287] Update purchase_invoice_item.json --- .../doctype/purchase_invoice_item/purchase_invoice_item.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 8d89828aad..213bad844e 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -757,7 +757,6 @@ "oldfieldtype": "Currency", "options": "Company:company:default_currency", "permlevel": 0, - "precision": "9", "print_hide": 1, "print_hide_if_no_value": 0, "read_only": 1, @@ -1954,4 +1953,4 @@ "sort_order": "DESC", "track_changes": 0, "track_seen": 0 -} \ No newline at end of file +} From eef55185fc7e8876ec0f9d70845657e2e41d6b0b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 19 Apr 2017 20:57:54 +0530 Subject: [PATCH 115/287] Update purchase_receipt_item.json --- .../doctype/purchase_receipt_item/purchase_receipt_item.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index 758541096e..028e2f59a1 100755 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -806,7 +806,6 @@ "length": 0, "no_copy": 0, "permlevel": 0, - "precision": "9", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, @@ -1994,4 +1993,4 @@ "sort_order": "DESC", "track_changes": 0, "track_seen": 0 -} \ No newline at end of file +} From 61f4a8e7577bac65724af1c6a8ec420719b93ad0 Mon Sep 17 00:00:00 2001 From: CH Date: Tue, 18 Apr 2017 12:35:50 +0200 Subject: [PATCH 116/287] Make the address type translatable in the Address_HTML field --- erpnext/public/js/templates/address_list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/templates/address_list.html b/erpnext/public/js/templates/address_list.html index f9a317f173..02b44b83d6 100644 --- a/erpnext/public/js/templates/address_list.html +++ b/erpnext/public/js/templates/address_list.html @@ -2,7 +2,7 @@
    {% for(var i=0, l=addr_list.length; i - {%= i+1 %}. {%= addr_list[i].address_type!="Other" ? addr_list[i].address_type : addr_list[i].address_title %} + {%= i+1 %}. {%= addr_list[i].address_type!="Other" ? __(addr_list[i].address_type) : addr_list[i].address_title %} {% if(addr_list[i].is_primary_address) { %} ({%= __("Primary") %}){% } %} {% if(addr_list[i].is_shipping_address) { %} From 287fe81329106b4ae777c0a554f21ba28e334620 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Mon, 10 Apr 2017 19:15:57 +0530 Subject: [PATCH 117/287] [minor] calculate price list rate based on items uom --- .../doctype/pricing_rule/pricing_rule.py | 4 ++-- erpnext/controllers/accounts_controller.py | 5 ++++- erpnext/controllers/selling_controller.py | 6 +++--- erpnext/controllers/taxes_and_totals.py | 1 + .../public/js/controllers/taxes_and_totals.js | 2 +- erpnext/public/js/controllers/transaction.js | 17 ++++++++++++----- erpnext/stock/get_item_details.py | 16 ++++++++++------ 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 93685dbbaf..3f8018f7a9 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -143,7 +143,7 @@ def get_pricing_rule_for_item(args): }) if args.ignore_pricing_rule or not args.item_code: - if frappe.db.exists(args.doctype, args.name) and args.get("pricing_rule"): + if frappe.db.exists(args.doctype, args.name) or args.get("pricing_rule"): item_details = remove_pricing_rule(args, item_details) return item_details @@ -178,7 +178,7 @@ def get_pricing_rule_for_item(args): item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount if pricing_rule.price_or_discount == "Price": item_details.update({ - "price_list_rate": pricing_rule.price/flt(args.conversion_rate) \ + "price_list_rate": (pricing_rule.price/flt(args.conversion_rate)) * args.conversion_factor or 1.0 \ if args.conversion_rate else 0.0, "discount_percentage": 0.0 }) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index ecbf59da1b..bcdfe5f52b 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -186,7 +186,6 @@ class AccountsController(TransactionBase): ret = get_item_details(args) - for fieldname, value in ret.items(): if item.meta.get_field(fieldname) and value is not None: if (item.get(fieldname) is None or fieldname in force_item_fields): @@ -200,6 +199,10 @@ class AccountsController(TransactionBase): if stock_qty != len(item.get('serial_no').split('\n')): item.set(fieldname, value) + elif fieldname in ["conversion_factor", "price_list_rate"]: + if for_validate and not item.get(fieldname): + item.set(fieldname, value) + if ret.get("pricing_rule"): # if user changed the discount percentage then set user's discount percentage ? item.set("discount_percentage", ret.get("discount_percentage")) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index af51f70147..91f57f514c 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -41,7 +41,7 @@ class SellingController(StockController): # set contact and address details for customer, if they are not mentioned self.set_missing_lead_customer_details() - self.set_price_list_and_item_details() + self.set_price_list_and_item_details(for_validate) def set_missing_lead_customer_details(self): if getattr(self, "customer", None): @@ -60,9 +60,9 @@ class SellingController(StockController): posting_date=self.get('transaction_date') or self.get('posting_date'), company=self.company)) - def set_price_list_and_item_details(self): + def set_price_list_and_item_details(self, for_validate): self.set_price_list_currency("Selling") - self.set_missing_item_details() + self.set_missing_item_details(for_validate=for_validate) def apply_shipping_rule(self): if self.shipping_rule: diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 0355c269d0..362d07515b 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -60,6 +60,7 @@ class calculate_taxes_and_totals(object): if item.doctype in ['Quotation Item', 'Sales Order Item', 'Delivery Note Item', 'Sales Invoice Item']: item.total_margin = self.calculate_margin(item) + item.rate = flt(item.total_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))\ if item.total_margin > 0 else item.rate diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 6f55a4411a..08dd224fb1 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -7,7 +7,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ if(item.margin_type == "Percentage"){ item.total_margin = flt(item.price_list_rate) + flt(item.price_list_rate) * ( flt(item.margin_rate_or_amount) / 100); - }else{ + } else { item.total_margin = flt(item.price_list_rate) + flt(item.margin_rate_or_amount); } diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index ce3efc939c..d84a4fcbd9 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -284,6 +284,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ callback: function(r) { if(!r.exc) { me.frm.script_manager.trigger("price_list_rate", cdt, cdn); + me.toggle_conversion_factor(item); } } }); @@ -568,9 +569,17 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ frappe.model.round_floats_in(item, ["qty", "conversion_factor"]); item.stock_qty = flt(item.qty * item.conversion_factor, precision("stock_qty", item)); refresh_field("stock_qty", item.name, item.parentfield); + this.toggle_conversion_factor(item); + this.apply_price_list(); } }, + toggle_conversion_factor: function(item) { + // toggle read only property for conversion factor field if the uom and stock uom are same + this.frm.fields_dict.items.grid.toggle_enable("conversion_factor", + (item.uom != item.stock_uom)? true: false) + }, + qty: function(doc, cdt, cdn) { this.apply_pricing_rule(frappe.get_doc(cdt, cdn), true); this.conversion_factor(doc, cdt, cdn); @@ -766,6 +775,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ "name": me.frm.doc.name, "is_return": cint(me.frm.doc.is_return), "update_stock": in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0, + "conversion_factor": me.frm.doc.conversion_factor }; }, @@ -785,7 +795,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ "pricing_rule": d.pricing_rule, "warehouse": d.warehouse, "serial_no": d.serial_no, - "conversion_factor": d.conversion_factor + "conversion_factor": d.conversion_factor || 1.0 }); // if doctype is Quotation Item / Sales Order Iten then add Margin Type and rate in item_list @@ -812,16 +822,13 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ for(var i=0, l=children.length; i Date: Mon, 10 Apr 2017 19:16:07 +0530 Subject: [PATCH 118/287] [minor] fixes in test cases and added the test case for multiple uom in selling --- .../doctype/sales_invoice/test_records.json | 10 +++++----- .../sales_invoice/test_sales_invoice.py | 19 +++++++++++++++++++ erpnext/controllers/selling_controller.py | 4 ++-- .../doctype/quotation/test_records.json | 6 +++--- erpnext/stock/doctype/item/test_records.json | 10 ++++++++++ 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/test_records.json b/erpnext/accounts/doctype/sales_invoice/test_records.json index 732c4465a8..0b7b76d1b3 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_records.json +++ b/erpnext/accounts/doctype/sales_invoice/test_records.json @@ -147,9 +147,9 @@ "price_list_rate": 50, "qty": 10, "rate": 50, - "uom": "_Test UOM", + "uom": "_Test UOM 1", "conversion_factor": 1, - "stock_uom": "_Test UOM" + "stock_uom": "_Test UOM 1" }, { "cost_center": "_Test Cost Center - _TC", @@ -273,9 +273,9 @@ "parentfield": "items", "price_list_rate": 62.5, "qty": 10, - "uom": "_Test UOM", - "conversion_factor": 1, - "stock_uom": "_Test UOM" + "uom": "_Test UOM 1", + "conversion_factor": 1, + "stock_uom": "_Test UOM 1" }, { diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 305b689e15..0ada8478a1 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -1043,6 +1043,25 @@ class TestSalesInvoice(unittest.TestCase): #check outstanding after advance cancellation self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total + si.total_advance, si.precision("outstanding_amount"))) + def test_multiple_uom_in_selling(self): + si = frappe.copy_doc(test_records[1]) + + si.items[0].uom = "_Test UOM 1" + si.items[0].conversion_factor = None + si.items[0].price_list_rate = None + si.save() + + expected_values = { + "keys": ["price_list_rate", "stock_uom", "uom", "conversion_factor", "rate", "amount", + "base_price_list_rate", "base_rate", "base_amount"], + "_Test Item": [1000, "_Test UOM", "_Test UOM 1", 10.0, 1000, 1000, 1000, 1000, 1000] + } + + # check if the conversion_factor and price_list_rate is calculated according to uom + for d in si.get("items"): + for i, k in enumerate(expected_values["keys"]): + self.assertEquals(d.get(k), expected_values[d.item_code][i]) + def create_sales_invoice(**args): si = frappe.new_doc("Sales Invoice") args = frappe._dict(args) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 91f57f514c..1cd705b8c4 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -41,7 +41,7 @@ class SellingController(StockController): # set contact and address details for customer, if they are not mentioned self.set_missing_lead_customer_details() - self.set_price_list_and_item_details(for_validate) + self.set_price_list_and_item_details(for_validate=for_validate) def set_missing_lead_customer_details(self): if getattr(self, "customer", None): @@ -60,7 +60,7 @@ class SellingController(StockController): posting_date=self.get('transaction_date') or self.get('posting_date'), company=self.company)) - def set_price_list_and_item_details(self, for_validate): + def set_price_list_and_item_details(self, for_validate=False): self.set_price_list_currency("Selling") self.set_missing_item_details(for_validate=for_validate) diff --git a/erpnext/selling/doctype/quotation/test_records.json b/erpnext/selling/doctype/quotation/test_records.json index 8a37dbb7d7..5637fb906c 100644 --- a/erpnext/selling/doctype/quotation/test_records.json +++ b/erpnext/selling/doctype/quotation/test_records.json @@ -23,9 +23,9 @@ "parentfield": "items", "qty": 10.0, "rate": 100.0, - "uom": "_Test UOM", - "stock_uom": "_Test UOM", - "conversion_factor": 1.0 + "uom": "_Test UOM 1", + "stock_uom": "_Test UOM 1", + "conversion_factor": 1.0 } ], "quotation_to": "Customer", diff --git a/erpnext/stock/doctype/item/test_records.json b/erpnext/stock/doctype/item/test_records.json index aad8ed0fc2..2a1520e8ca 100644 --- a/erpnext/stock/doctype/item/test_records.json +++ b/erpnext/stock/doctype/item/test_records.json @@ -24,6 +24,16 @@ "warehouse_reorder_qty": 20 } ], + "uoms": [ + { + "uom": "_Test UOM", + "conversion_factor": 1.0 + }, + { + "uom": "_Test UOM 1", + "conversion_factor": 10.0 + } + ], "stock_uom": "_Test UOM", "show_in_website": 1, "website_warehouse": "_Test Warehouse - _TC" From 8f3cc81302d9bde8aa4cbb8ff1c51074b0979fc2 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 18 Apr 2017 10:20:40 +0530 Subject: [PATCH 119/287] [minor] minor fixes in pricing_rule and set_missing_value --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 4 +++- erpnext/controllers/accounts_controller.py | 5 ++--- erpnext/public/js/controllers/transaction.js | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 3f8018f7a9..5af0d9f1be 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -23,6 +23,8 @@ class PricingRule(Document): self.validate_price_or_discount() self.validate_max_discount() + if not self.margin_type: self.margin_rate_or_amount = 0.0 + def validate_mandatory(self): for field in ["apply_on", "applicable_for"]: tocheck = frappe.scrub(self.get(field) or "") @@ -143,7 +145,7 @@ def get_pricing_rule_for_item(args): }) if args.ignore_pricing_rule or not args.item_code: - if frappe.db.exists(args.doctype, args.name) or args.get("pricing_rule"): + if args.get("pricing_rule"): item_details = remove_pricing_rule(args, item_details) return item_details diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index bcdfe5f52b..742e59b4d6 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -199,9 +199,8 @@ class AccountsController(TransactionBase): if stock_qty != len(item.get('serial_no').split('\n')): item.set(fieldname, value) - elif fieldname in ["conversion_factor", "price_list_rate"]: - if for_validate and not item.get(fieldname): - item.set(fieldname, value) + elif fieldname == "conversion_factor" and not item.get("conversion_factor"): + item.set(fieldname, value) if ret.get("pricing_rule"): # if user changed the discount percentage then set user's discount percentage ? diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index d84a4fcbd9..eec789a4ea 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -570,7 +570,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ item.stock_qty = flt(item.qty * item.conversion_factor, precision("stock_qty", item)); refresh_field("stock_qty", item.name, item.parentfield); this.toggle_conversion_factor(item); - this.apply_price_list(); + this.apply_price_list(item, true); } }, @@ -581,7 +581,6 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, qty: function(doc, cdt, cdn) { - this.apply_pricing_rule(frappe.get_doc(cdt, cdn), true); this.conversion_factor(doc, cdt, cdn); }, From e42fb32f6fe9ee27fb47ee7b2442be922822906e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 20 Apr 2017 08:45:09 +0530 Subject: [PATCH 120/287] Fixed allow_zero_valuation_rate patch --- .../v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py index 744cfed998..e517df5fdb 100644 --- a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py +++ b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py @@ -9,4 +9,5 @@ def execute(): for doctype in doc_list: frappe.reload_doctype(doctype) - rename_field(doctype, "is_sample_item", "allow_zero_valuation_rate") \ No newline at end of file + if "is_sample_item" in frappe.db.get_table_columns(doctype): + rename_field(doctype, "is_sample_item", "allow_zero_valuation_rate") \ No newline at end of file From 825e053e6693cca9f5002a7baab13198a598a758 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 20 Apr 2017 08:50:27 +0530 Subject: [PATCH 121/287] Fixed project_copied_from patch --- erpnext/patches/v8_0/set_project_copied_from.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/erpnext/patches/v8_0/set_project_copied_from.py b/erpnext/patches/v8_0/set_project_copied_from.py index be589014ac..d4287978cf 100644 --- a/erpnext/patches/v8_0/set_project_copied_from.py +++ b/erpnext/patches/v8_0/set_project_copied_from.py @@ -2,8 +2,10 @@ from __future__ import unicode_literals import frappe def execute(): - frappe.db.sql(''' - UPDATE `tabProject` - SET copied_from=name - WHERE copied_from is NULL - ''') \ No newline at end of file + frappe.reload_doctype("Project") + + frappe.db.sql(''' + UPDATE `tabProject` + SET copied_from=name + WHERE copied_from is NULL + ''') \ No newline at end of file From 9afb53203fdec58f0229f3364b87dc93409d0928 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 20 Apr 2017 09:21:44 +0600 Subject: [PATCH 122/287] bumped to version 8.0.14 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 3f6504d795..c06ccca3aa 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.13' +__version__ = '8.0.14' def get_default_company(user=None): '''Get default company for user''' From 9bac58cdc64212e9c41729714631cd33fc8aceae Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 21 Apr 2017 11:27:55 +0530 Subject: [PATCH 123/287] [fixes] fixes in setup wizard for education domain --- erpnext/setup/setup_wizard/setup_wizard.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index f68ac343ec..940d35c482 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -571,6 +571,7 @@ def create_program(args): for i in xrange(1,6): if args.get("program_" + str(i)): program = frappe.new_doc("Program") + program.program_code = args.get("program_" + str(i)) program.program_name = args.get("program_" + str(i)) try: program.save() @@ -581,6 +582,7 @@ def create_course(args): for i in xrange(1,6): if args.get("course_" + str(i)): course = frappe.new_doc("Course") + course.course_code = args.get("course_" + str(i)) course.course_name = args.get("course_" + str(i)) try: course.save() From 557847a5ba85d0e21c4eaa035d7c89dc72fde071 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 21 Apr 2017 12:19:09 +0600 Subject: [PATCH 124/287] bumped to version 8.0.15 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index c06ccca3aa..e955c09b25 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.14' +__version__ = '8.0.15' def get_default_company(user=None): '''Get default company for user''' From 8230ce095f8159266a97ca97c3d22501ce96d628 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 21 Apr 2017 16:13:17 +0530 Subject: [PATCH 125/287] [Fix] fixed routing to the assessment result --- .../schools/doctype/assessment_plan/assessment_plan.js | 2 +- .../assessment_result_tool/assessment_result_tool.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.js b/erpnext/schools/doctype/assessment_plan/assessment_plan.js index 9685e0ef83..cafe3a10e8 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.js +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.js @@ -8,7 +8,7 @@ cur_frm.add_fetch("supervisor", "instructor_name", "supervisor_name"); frappe.ui.form.on("Assessment Plan", { refresh: function(frm) { - if (!frm.doc.__islocal) { + if (frm.doc.docstatus == 1) { frm.add_custom_button(__("Assessment Result"), function() { frappe.route_options = { assessment_plan: frm.doc.name diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js index 8fd670eca4..6967a7d293 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js @@ -5,6 +5,14 @@ cur_frm.add_fetch("assessment_plan", "student_group", "student_group"); cur_frm.add_fetch("assessment_plan", "student_batch", "student_batch"); frappe.ui.form.on('Assessment Result Tool', { + + onload: function(frm) { + if (frappe.route_options) { + frm.doc.assessment_plan = frappe.route_options.assessment_plan; + frappe.route_options = null; + } + }, + refresh: function(frm) { frm.disable_save(); frm.page.clear_indicator(); From c3d642e5d19031f9d97fb93d6fd885085839eb10 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 21 Apr 2017 17:17:07 +0530 Subject: [PATCH 126/287] [minor] allow bulk edit for doctype --- .../bank_reconciliation.js | 1 - .../bank_reconciliation.json | 57 +++++++++++++++++-- .../stock_reconciliation.js | 1 - .../stock_reconciliation.json | 18 +++++- 4 files changed, 70 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js index 956f15a814..942699f57a 100644 --- a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js +++ b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js @@ -3,7 +3,6 @@ frappe.ui.form.on("Bank Reconciliation", { setup: function(frm) { - frm.get_docfield("payment_entries").allow_bulk_edit = 1; frm.add_fetch("bank_account", "account_currency", "account_currency"); }, diff --git a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.json b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.json index b83dc7c2be..029421990b 100644 --- a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.json +++ b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.json @@ -1,5 +1,6 @@ { "allow_copy": 1, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -7,11 +8,15 @@ "custom": 0, "docstatus": 0, "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Select account head of the bank where cheque was deposited.", "fieldname": "bank_account", "fieldtype": "Link", @@ -19,7 +24,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Bank Account", "length": 0, "no_copy": 0, @@ -28,6 +35,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -35,16 +43,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "account_currency", "fieldtype": "Link", "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Account Currency", "length": 0, "no_copy": 0, @@ -53,6 +65,7 @@ "print_hide": 1, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -60,16 +73,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "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_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "From Date", "length": 0, "no_copy": 0, @@ -77,6 +94,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -84,16 +102,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "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_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "To Date", "length": 0, "no_copy": 0, @@ -101,6 +123,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -108,16 +131,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "include_reconciled_entries", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Include Reconciled Entries", "length": 0, "no_copy": 0, @@ -125,6 +152,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -132,16 +160,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "get_payment_entries", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Get Payment Entries", "length": 0, "no_copy": 0, @@ -150,6 +182,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -157,16 +190,20 @@ "unique": 0 }, { + "allow_bulk_edit": 1, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "payment_entries", "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Payment Entries", "length": 0, "no_copy": 0, @@ -175,6 +212,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -182,16 +220,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "update_clearance_date", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Update Clearance Date", "length": 0, "no_copy": 0, @@ -200,6 +242,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -207,16 +250,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_amount", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Total Amount", "length": 0, "no_copy": 0, @@ -225,6 +272,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 1, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -232,19 +280,19 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 1, "hide_toolbar": 1, "icon": "fa fa-check", "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-06-28 13:11:09.396353", + "modified": "2017-04-21 16:58:26.902732", "modified_by": "Administrator", "module": "Accounts", "name": "Bank Reconciliation", @@ -274,7 +322,8 @@ "quick_entry": 1, "read_only": 1, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_order": "ASC", - "track_seen": 0, - "version": 0 + "track_changes": 0, + "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js index 7ed4ede8aa..636b2afe6c 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js @@ -152,7 +152,6 @@ erpnext.stock.StockReconciliation = erpnext.stock.StockController.extend({ setup: function() { var me = this; - this.frm.get_docfield("items").allow_bulk_edit = 1; this.setup_posting_date_time_check(); diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json index b830a6c5eb..84ab7c3a14 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -10,9 +10,11 @@ "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", + "document_type": "Document", "editable_grid": 0, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -72,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -101,6 +105,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -128,6 +133,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -159,6 +165,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -189,6 +196,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -218,6 +226,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -246,6 +255,7 @@ "unique": 0 }, { + "allow_bulk_edit": 1, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -276,6 +286,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -304,6 +315,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -334,6 +346,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -364,6 +377,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -392,6 +406,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -420,6 +435,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -461,7 +477,7 @@ "istable": 0, "max_attachments": 1, "menu_index": 0, - "modified": "2017-03-15 15:03:08.579943", + "modified": "2017-04-21 16:58:53.475787", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation", From 83c1c3a171c3846726e0006a113fefa255b8d6b9 Mon Sep 17 00:00:00 2001 From: ibi Date: Thu, 20 Apr 2017 17:30:41 +0000 Subject: [PATCH 127/287] fleet_management: replace references to fleet_management by hr in vehicle_log doctype --- erpnext/hr/doctype/vehicle_log/vehicle_log.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js index 1ccf3479f2..56c30fffc4 100644 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js +++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.js @@ -6,7 +6,7 @@ frappe.ui.form.on("Vehicle Log", { vehicle_log=frappe.model.get_doc(cdt,cdn); if (vehicle_log.license_plate) { frappe.call({ - method: "erpnext.fleet_management.doctype.vehicle_log.vehicle_log.get_make_model", + method: "erpnext.hr.doctype.vehicle_log.vehicle_log.get_make_model", args: { license_plate: vehicle_log.license_plate }, @@ -19,7 +19,7 @@ frappe.ui.form.on("Vehicle Log", { }, expense_claim: function(frm){ frappe.call({ - method: "erpnext.fleet_management.doctype.vehicle_log.vehicle_log.make_expense_claim", + method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim", args:{ docname: frm.doc.name }, From 0b293133bed2cac2564466eaa84fc0d484d8beaf Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 21 Apr 2017 20:05:33 +0530 Subject: [PATCH 128/287] [minor] fixes for unsupported operand type(s) for +=: 'int' and 'NoneType' --- erpnext/schools/doctype/course/course.py | 2 +- .../course_assessment_criteria.json | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/erpnext/schools/doctype/course/course.py b/erpnext/schools/doctype/course/course.py index 0ac11ec1c9..69d2fca63e 100644 --- a/erpnext/schools/doctype/course/course.py +++ b/erpnext/schools/doctype/course/course.py @@ -15,6 +15,6 @@ class Course(Document): if self.assessment_criteria: total_weightage = 0 for criteria in self.assessment_criteria: - total_weightage += criteria.weightage + total_weightage += criteria.weightage or 0 if total_weightage != 100: frappe.throw(_("Total Weightage of all Assessment Criteria must be 100%")) diff --git a/erpnext/schools/doctype/course_assessment_criteria/course_assessment_criteria.json b/erpnext/schools/doctype/course_assessment_criteria/course_assessment_criteria.json index 6646d205b5..652aa0d230 100644 --- a/erpnext/schools/doctype/course_assessment_criteria/course_assessment_criteria.json +++ b/erpnext/schools/doctype/course_assessment_criteria/course_assessment_criteria.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "", @@ -23,6 +24,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Assessment Criteria", @@ -52,6 +54,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "", @@ -80,6 +83,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Weightage", @@ -92,23 +96,23 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 } ], + "has_web_view": 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": "2017-02-01 18:01:40.682674", + "modified": "2017-04-21 20:04:26.621419", "modified_by": "Administrator", "module": "Schools", "name": "Course Assessment Criteria", @@ -118,6 +122,7 @@ "quick_entry": 1, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", "track_changes": 0, From bb2670d57aebec12ac7e22c77e8c96ecdb1385ff Mon Sep 17 00:00:00 2001 From: mbauskar Date: Sat, 22 Apr 2017 21:22:15 +0530 Subject: [PATCH 129/287] [fixes] minor fixes in bank reconciliation form and report --- .../doctype/bank_reconciliation/bank_reconciliation.js | 3 ++- .../report/bank_clearance_summary/bank_clearance_summary.js | 3 ++- .../bank_reconciliation_statement.js | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js index 942699f57a..7c94455b9b 100644 --- a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js +++ b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.js @@ -7,8 +7,9 @@ frappe.ui.form.on("Bank Reconciliation", { }, onload: function(frm) { - var default_bank_account = locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]; + let default_bank_account = frappe.defaults.get_user_default("Company")? + locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: ""; frm.set_value("bank_account", default_bank_account); frm.set_query("bank_account", function() { diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js index ac3366c506..e4f0384dcd 100644 --- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js +++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js @@ -22,7 +22,8 @@ frappe.query_reports["Bank Clearance Summary"] = { "fieldtype": "Link", "options": "Account", "reqd": 1, - "default": locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"], + "default": frappe.defaults.get_user_default("Company")? + locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "", "get_query": function() { return { "query": "erpnext.controllers.queries.get_account_list", diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js index ca8e50bc05..e420fb9dd1 100644 --- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js +++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js @@ -8,7 +8,8 @@ frappe.query_reports["Bank Reconciliation Statement"] = { "label": __("Bank Account"), "fieldtype": "Link", "options": "Account", - "default": locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"], + "default": frappe.defaults.get_user_default("Company")? + locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "", "reqd": 1, "get_query": function() { return { From e385b5b97b7490ef165ecd090450569bb75c4563 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 20 Apr 2017 15:21:01 +0530 Subject: [PATCH 130/287] [enhance] automatic batch creation, move and split --- erpnext/controllers/stock_controller.py | 12 + erpnext/docs/assets/img/stock/batch.png | Bin 50773 -> 0 bytes erpnext/docs/assets/img/stock/batch_view.png | Bin 0 -> 170696 bytes .../assets/img/stock/item_setup_for_batch.png | Bin 0 -> 97942 bytes erpnext/docs/user/manual/en/stock/batch.md | 44 +- .../doctype/sales_order/sales_order.js | 3 +- erpnext/stock/doctype/batch/batch.js | 139 +- erpnext/stock/doctype/batch/batch.json | 230 +- erpnext/stock/doctype/batch/batch.py | 62 + erpnext/stock/doctype/batch/test_batch.py | 67 +- erpnext/stock/doctype/item/item.json | 290 +- .../purchase_receipt/purchase_receipt.py | 6 +- .../purchase_receipt_item.json | 3722 ++++++++--------- .../stock/doctype/stock_entry/stock_entry.py | 3 + .../doctype/stock_entry/stock_entry_utils.py | 15 + .../stock_ledger_entry/stock_ledger_entry.py | 6 +- .../stock_reconciliation.py | 6 +- erpnext/stock/get_item_details.py | 21 +- .../stock/report/stock_ledger/stock_ledger.js | 6 + .../stock/report/stock_ledger/stock_ledger.py | 14 +- erpnext/utilities/transaction_base.py | 7 +- 21 files changed, 2631 insertions(+), 2022 deletions(-) delete mode 100644 erpnext/docs/assets/img/stock/batch.png create mode 100644 erpnext/docs/assets/img/stock/batch_view.png create mode 100644 erpnext/docs/assets/img/stock/item_setup_for_batch.png diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 54c181ac1d..703fe06db2 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -177,6 +177,18 @@ class StockController(AccountsController): stock_ledger.setdefault(sle.voucher_detail_no, []).append(sle) return stock_ledger + def make_batches(self): + '''Create batches if required. Called before submit''' + for d in self.items: + has_batch_no, create_new_batch = frappe.db.get_value('Item', d.item_code, ['has_batch_no', 'create_new_batch']) + if has_batch_no and not d.batch_no and create_new_batch: + d.batch_no = frappe.get_doc(dict( + doctype='Batch', + item=d.item_code, + supplier=getattr(self, 'supplier', None), + reference_doctype=self.doctype, + reference_name=self.name)).insert().name + def make_adjustment_entry(self, expected_gle, voucher_obj): from erpnext.accounts.utils import get_stock_and_account_difference account_list = [d.account for d in expected_gle] diff --git a/erpnext/docs/assets/img/stock/batch.png b/erpnext/docs/assets/img/stock/batch.png deleted file mode 100644 index 406acbd63a6800d83210fb3f4ecd590d284f7ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50773 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 diff --git a/erpnext/docs/assets/img/stock/batch_view.png b/erpnext/docs/assets/img/stock/batch_view.png new file mode 100644 index 0000000000000000000000000000000000000000..d670fc92b02ab90d98c691df74247337a8e2511e GIT binary patch literal 170696 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 {=T5g$(nUs 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 Note: To set item as a batch item, "Has Batch No" field should be updated as Yes in the Item master. +### Item Setup -On every stock transaction (Purchase Receipt, Delivery Note, POS Invoice) made for batch item, -you should provide item's Batch No. +To set item as a batch item, "Has Batch No" field should be checked in the Item master. + +If you want automatic batch creation at the time of Purchase Receipt, you must check "Create New Batches Automatically" + +Item Setup for Batches + +### Creating Batches + +If you have not selected "Create New Batches Automatically", you will have to make Batches Manually as you go along. To create new Batch No. master for an item, go to: > Stock > Setup > Batch > New -Batch master is created before creation of Purchase Receipt. -Hence eveytime there is Purchase Receipt or Production entry being made for a batch item, -you will first create its Batch No, and then select it in Purcase order or Production Entry. +### Splitting and Moving Batches -batch +When you open a batch, you will see all the quantities relating this that batch on the page. -> Note: In stock transactions, Batch IDs will be filtered based on Item Code, Warehouse, -Batch Expiry Date (compared with Posting date of a transaction) and Actual Qty in Warehouse. +Batch View + +To move the batch from one warehouse to another, you can click on the move button. + +You can also split the batch into smaller one by clicking on "Split". This will create a new Batch based on this Batch and the quantities will be split between the batches. + +### Transacting Items with Batches + +Batch master is created before creation of Purchase Receipt. +Hence eveytime there is Purchase Receipt or Production Order being made for a batch item, +you will first create its Batch No, and then select it in Purchase order or Production Entry. + +On every stock transaction (Purchase Receipt, Delivery Note, POS Invoice) made for batch item, +you should provide item's Batch No. + +> Note: In stock transactions, Batch IDs will be filtered based on Item Code, Warehouse, +Batch Expiry Date (compared with Posting date of a transaction) and Actual Qty in Warehouse. While searching for Batch ID without value in Warehouse field, then Actual Qty filter won't be applied. {next} diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index dc7d73d45d..0175976fde 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -3,8 +3,6 @@ {% include 'erpnext/selling/sales_common.js' %} -cur_frm.add_fetch('customer', 'tax_id', 'tax_id'); - frappe.ui.form.on("Sales Order", { setup: function(frm) { $.extend(frm.cscript, new erpnext.selling.SalesOrderController({frm: frm})); @@ -14,6 +12,7 @@ frappe.ui.form.on("Sales Order", { 'Material Request': 'Material Request', 'Purchase Order': 'Purchase Order' } + frm.add_fetch('customer', 'tax_id', 'tax_id'); }, onload: function(frm) { erpnext.queries.setup_queries(frm, "Warehouse", function() { diff --git a/erpnext/stock/doctype/batch/batch.js b/erpnext/stock/doctype/batch/batch.js index 2cfdb6386d..8a3906ef9d 100644 --- a/erpnext/stock/doctype/batch/batch.js +++ b/erpnext/stock/doctype/batch/batch.js @@ -1,12 +1,137 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -cur_frm.fields_dict['item'].get_query = function(doc, cdt, cdn) { - return { - query: "erpnext.controllers.queries.item_query", - filters:{ - 'is_stock_item': 1, - 'has_batch_no': 1 +frappe.ui.form.on('Batch', { + setup: (frm) => { + frm.fields_dict['item'].get_query = function(doc, cdt, cdn) { + return { + query: "erpnext.controllers.queries.item_query", + filters:{ + 'is_stock_item': 1, + 'has_batch_no': 1 + } + } + } + }, + refresh: (frm) => { + if(!frm.is_new()) { + frm.add_custom_button(__("View Ledger"), () => { + frappe.route_options = { + batch_no: frm.doc.name + }; + frappe.set_route("query-report", "Stock Ledger"); + }); + frm.trigger('make_dashboard'); + } + }, + make_dashboard: (frm) => { + if(!frm.is_new()) { + frappe.call({ + method: 'erpnext.stock.doctype.batch.batch.get_batch_qty', + args: {batch_no: frm.doc.name}, + callback: (r) => { + if(!r.message) { + return; + } + + var section = frm.dashboard.add_section(`
    + ${ __("Stock Levels") }
    `); + + // sort by qty + r.message.sort(function(a, b) { a.qty > b.qty ? 1 : -1 }); + + var rows = $('
    ').appendTo(section); + + // show + (r.message || []).forEach(function(d) { + if(d.qty > 0) { + $(`
    +
    ${d.warehouse}
    +
    ${d.qty}
    +
    + + +
    +
    `).appendTo(rows); + } + }); + + // move - ask for target warehouse and make stock entry + rows.find('.btn-move').on('click', function() { + var $btn = $(this); + frappe.prompt({ + fieldname: 'to_warehouse', + label: __('To Warehouse'), + fieldtype: 'Link', + options: 'Warehouse' + }, + (data) => { + frappe.call({ + method: 'erpnext.stock.doctype.stock_entry.stock_entry_utils.make_stock_entry', + args: { + item_code: frm.doc.item, + batch_no: frm.doc.name, + qty: $btn.attr('data-qty'), + from_warehouse: $btn.attr('data-warehouse'), + to_warehouse: data.to_warehouse + }, + callback: (r) => { + frappe.show_alert(__('Stock Entry {0} created', + ['' + r.message.name+ ''])); + frm.refresh(); + }, + }); + }, + __('Select Target Warehouse'), + __('Move') + ) + }); + + // split - ask for new qty and batch ID (optional) + // and make stock entry via batch.batch_split + rows.find('.btn-split').on('click', function() { + var $btn = $(this); + frappe.prompt([{ + fieldname: 'qty', + label: __('New Batch Qty'), + fieldtype: 'Float', + 'default': $btn.attr('data-qty') + }, + { + fieldname: 'new_batch_id', + label: __('New Batch ID (Optional)'), + fieldtype: 'Data', + }], + (data) => { + frappe.call({ + method: 'erpnext.stock.doctype.batch.batch.split_batch', + args: { + item_code: frm.doc.item, + batch_no: frm.doc.name, + qty: data.qty, + warehouse: $btn.attr('data-warehouse'), + new_batch_id: data.new_batch_id + }, + callback: (r) => { + frm.refresh(); + }, + }); + }, + __('Split Batch'), + __('Split') + ) + }) + + frm.dashboard.show(); + } + }); } } -} +}) + diff --git a/erpnext/stock/doctype/batch/batch.json b/erpnext/stock/doctype/batch/batch.json index ef31cfd4a4..b4a1405650 100644 --- a/erpnext/stock/doctype/batch/batch.json +++ b/erpnext/stock/doctype/batch/batch.json @@ -1,8 +1,9 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, - "autoname": "field:batch_id", + "autoname": "", "beta": 0, "creation": "2013-03-05 14:50:38", "custom": 0, @@ -17,12 +18,14 @@ "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "eval:doc.__islocal", "fieldname": "batch_id", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Batch ID", @@ -36,7 +39,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -52,6 +55,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 1, "label": "Item", @@ -71,6 +75,66 @@ "set_only_once": 0, "unique": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:doc.parent_batch", + "fieldname": "parent_batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Parent Batch", + "length": 0, + "no_copy": 0, + "options": "Batch", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -82,6 +146,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -109,6 +174,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Expiry Date", @@ -127,6 +193,153 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "source", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Source", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "supplier", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Supplier", + "length": 0, + "no_copy": 0, + "options": "Supplier", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_9", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "reference_doctype", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Source Document Type", + "length": 0, + "no_copy": 0, + "options": "DocType", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "reference_name", + "fieldtype": "Dynamic Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Source Document Name", + "length": 0, + "no_copy": 0, + "options": "reference_doctype", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -138,6 +351,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -165,6 +379,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Batch Description", @@ -185,18 +400,19 @@ "width": "300px" } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-archive", "idx": 1, + "image_field": "image", "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 5, - "modified": "2016-11-07 05:50:33.973883", + "modified": "2017-04-20 03:22:19.888058", "modified_by": "Administrator", "module": "Stock", "name": "Batch", @@ -212,7 +428,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -224,9 +439,12 @@ "write": 1 } ], - "quick_entry": 0, + "quick_entry": 1, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_order": "DESC", "title_field": "item", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index 157b0944fc..193acebfeb 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -7,6 +7,24 @@ from frappe import _ from frappe.model.document import Document class Batch(Document): + def autoname(self): + '''Generate random ID for batch if not specified''' + if not self.batch_id: + if frappe.db.get_value('Item', self.item, 'create_new_batch'): + temp = None + while not temp: + temp = frappe.generate_hash()[:7].upper() + if frappe.db.exists('Batch', temp): + temp = None + + self.batch_id = temp + else: + frappe.throw(_('Batch ID is mandatory'), frappe.MandatoryError) + + self.name = self.batch_id + + def onload(self): + self.image = frappe.db.get_value('Item', self.item, 'image') def validate(self): self.item_has_batch_enabled() @@ -14,3 +32,47 @@ class Batch(Document): def item_has_batch_enabled(self): if frappe.db.get_value("Item",self.item,"has_batch_no") == 0: frappe.throw(_("The selected item cannot have Batch")) + +@frappe.whitelist() +def get_batch_qty(batch_no, warehouse=None): + '''Returns batch actual qty if warehouse is passed, or returns dict of qty by warehouse if warehouse is None''' + frappe.has_permission('Batch', throw=True) + out = 0 + if batch_no and warehouse: + out = float(frappe.db.sql("""select sum(actual_qty) + from `tabStock Ledger Entry` + where warehouse=%s and batch_no=%s""", + (warehouse, batch_no))[0][0] or 0) + if batch_no and not warehouse: + out = frappe.db.sql('''select warehouse, sum(actual_qty) as qty + from `tabStock Ledger Entry` + where batch_no=%s + group by warehouse''', batch_no, as_dict=1) + return out + +@frappe.whitelist() +def split_batch(batch_no, item_code, warehouse, qty, new_batch_id = None): + '''Split the batch into a new batch''' + batch = frappe.get_doc(dict(doctype='Batch', item=item_code, batch_id=new_batch_id)).insert() + stock_entry = frappe.get_doc(dict( + doctype='Stock Entry', + purpose='Repack', + items=[ + dict( + item_code = item_code, + qty = float(qty or 0), + s_warehouse = warehouse, + batch_no = batch_no + ), + dict( + item_code = item_code, + qty = float(qty or 0), + t_warehouse = warehouse, + batch_no = batch.name + ), + ] + )) + stock_entry.insert() + stock_entry.submit() + + return batch.name diff --git a/erpnext/stock/doctype/batch/test_batch.py b/erpnext/stock/doctype/batch/test_batch.py index e519f5f69c..29023bb2a9 100644 --- a/erpnext/stock/doctype/batch/test_batch.py +++ b/erpnext/stock/doctype/batch/test_batch.py @@ -6,10 +6,75 @@ import frappe from frappe.exceptions import ValidationError import unittest +from erpnext.stock.doctype.batch.batch import get_batch_qty + class TestBatch(unittest.TestCase): def test_item_has_batch_enabled(self): self.assertRaises(ValidationError, frappe.get_doc({ "doctype": "Batch", "name": "_test Batch", "item": "_Test Item" - }).save) \ No newline at end of file + }).save) + + def make_batch_item(self): + from erpnext.stock.doctype.item.test_item import make_item + if not frappe.db.exists('ITEM-BATCH-1'): + make_item('ITEM-BATCH-1', dict(has_batch_no = 1, create_new_batch = 1)) + + def test_purchase_receipt(self): + '''Test automated batch creation from Purchase Receipt''' + self.make_batch_item() + + receipt = frappe.get_doc(dict( + doctype = 'Purchase Receipt', + supplier = '_Test Supplier', + items = [ + dict( + item_code = 'ITEM-BATCH-1', + qty = 100, + rate = 10 + ) + ] + )).insert() + receipt.submit() + + self.assertTrue(receipt.items[0].batch_no) + self.assertEquals(get_batch_qty(receipt.items[0].batch_no, receipt.items[0].warehouse), 100) + + return receipt + + def test_stock_entry(self): + '''Test batch creation via Stock Entry (Production Order)''' + + self.make_batch_item() + + stock_entry = frappe.get_doc(dict( + doctype = 'Stock Entry', + purpose = 'Material Receipt', + company = '_Test Company', + items = [ + dict( + item_code = 'ITEM-BATCH-1', + qty = 90, + t_warehouse = '_Test Warehouse - _TC', + cost_center = 'Main - _TC', + rate = 10 + ) + ] + )).insert() + stock_entry.submit() + + self.assertTrue(stock_entry.items[0].batch_no) + self.assertEquals(get_batch_qty(stock_entry.items[0].batch_no, stock_entry.items[0].t_warehouse), 90) + + def test_batch_split(self): + '''Test batch splitting''' + receipt = self.test_purchase_receipt() + from erpnext.stock.doctype.batch.batch import split_batch + + new_batch = split_batch(receipt.items[0].batch_no, 'ITEM-BATCH-1', receipt.items[0].warehouse, 22) + + self.assertEquals(get_batch_qty(receipt.items[0].batch_no, receipt.items[0].warehouse), 78) + self.assertEquals(get_batch_qty(new_batch, receipt.items[0].warehouse), 22) + + diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 2273621560..d2031ae58a 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -7,7 +7,7 @@ "beta": 0, "creation": "2013-05-03 10:45:46", "custom": 0, - "default_print_format": "Standard", + "default_print_format": "", "description": "A Product or a Service that is bought, sold or kept in stock.", "docstatus": 0, "doctype": "DocType", @@ -714,103 +714,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "depends_on": "eval:doc.is_stock_item", - "fieldname": "has_batch_no", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Has Batch No", - "length": 0, - "no_copy": 0, - "oldfieldname": "has_batch_no", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "", - "depends_on": "eval:doc.is_stock_item", - "description": "Selecting \"Yes\" will give a unique identity to each entity of this item which can be viewed in the Serial No master.", - "fieldname": "has_serial_no", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Has Serial No", - "length": 0, - "no_copy": 0, - "oldfieldname": "has_serial_no", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "has_serial_no", - "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", - "fieldname": "serial_no_series", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Serial Number Series", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -1150,6 +1053,193 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "eval:doc.has_batch_no || doc.has_serial_no", + "columns": 0, + "depends_on": "is_stock_item", + "fieldname": "serial_nos_and_batches", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Serial Nos and Batches", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", + "depends_on": "eval:doc.is_stock_item", + "fieldname": "has_batch_no", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Has Batch No", + "length": 0, + "no_copy": 0, + "oldfieldname": "has_batch_no", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "has_batch_no", + "description": "", + "fieldname": "create_new_batch", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Automatically Create New Batch", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_37", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "", + "depends_on": "eval:doc.is_stock_item", + "description": "", + "fieldname": "has_serial_no", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Has Serial No", + "length": 0, + "no_copy": 0, + "oldfieldname": "has_serial_no", + "oldfieldtype": "Select", + "options": "", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "has_serial_no", + "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", + "fieldname": "serial_no_series", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Serial Number Series", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -2954,8 +3044,8 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2017-03-24 15:46:18.569291", - "modified_by": "d.ottenbreit@eso-electronic.de", + "modified": "2017-04-19 08:14:26.785497", + "modified_by": "Administrator", "module": "Stock", "name": "Item", "owner": "Administrator", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 1f8fd8d9cf..5d90338566 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -50,8 +50,11 @@ class PurchaseReceipt(BuyingController): self.validate_posting_time() super(PurchaseReceipt, self).validate() - if not self._action=="submit": + if self._action=="submit": + self.make_batches() + else: self.set_status() + self.po_required() self.validate_with_previous_doc() self.validate_uom_is_integer("uom", ["qty", "received_qty"]) @@ -62,7 +65,6 @@ class PurchaseReceipt(BuyingController): if getdate(self.posting_date) > getdate(nowdate()): throw(_("Posting Date cannot be future date")) - def validate_with_previous_doc(self): super(PurchaseReceipt, self).validate_with_previous_doc({ "Purchase Order": { diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index fdc7f60d9b..e18e532941 100755 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -1,1996 +1,1996 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "hash", - "beta": 0, - "creation": "2013-05-24 19:29:10", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "hash", + "beta": 0, + "creation": "2013-05-24 19:29:10", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Barcode", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Barcode", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_2", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_2", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 3, - "fieldname": "item_code", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Item Code", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_code", - "oldfieldtype": "Link", - "options": "Item", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 1, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 3, + "fieldname": "item_code", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Item Code", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_code", + "oldfieldtype": "Link", + "options": "Item", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "item_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "item_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Name", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "columns": 0, - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_4", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "description", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "oldfieldname": "description", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "300px", - "read_only": 0, - "remember_last_selected_value": 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": "description", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "oldfieldname": "description", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "300px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "300px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "col_break1", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_view", - "fieldtype": "Image", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image View", - "length": 0, - "no_copy": 0, - "options": "image", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_view", + "fieldtype": "Image", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image View", + "length": 0, + "no_copy": 0, + "options": "image", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "received_and_accepted", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Received and Accepted", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "received_and_accepted", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Received and Accepted", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "fieldname": "received_qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Recd Quantity", - "length": 0, - "no_copy": 0, - "oldfieldname": "received_qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "received_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Recd Quantity", + "length": 0, + "no_copy": 0, + "oldfieldname": "received_qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 2, - "fieldname": "qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Accepted Quantity", - "length": 0, - "no_copy": 0, - "oldfieldname": "qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 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": "qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Accepted Quantity", + "length": 0, + "no_copy": 0, + "oldfieldname": "qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "rejected_qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rejected Quantity", - "length": 0, - "no_copy": 0, - "oldfieldname": "rejected_qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 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": "rejected_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rejected Quantity", + "length": 0, + "no_copy": 0, + "oldfieldname": "rejected_qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "col_break2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "uom", - "oldfieldtype": "Link", - "options": "UOM", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 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": "uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "uom", + "oldfieldtype": "Link", + "options": "UOM", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stock UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "stock_uom", - "oldfieldtype": "Data", - "options": "UOM", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 1, - "remember_last_selected_value": 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": "stock_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "stock_uom", + "oldfieldtype": "Data", + "options": "UOM", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Conversion Factor", - "length": 0, - "no_copy": 0, - "oldfieldname": "conversion_factor", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 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": "conversion_factor", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Conversion Factor", + "length": 0, + "no_copy": 0, + "oldfieldname": "conversion_factor", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "rate_and_amount", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rate and Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rate_and_amount", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rate and Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "price_list_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Price List Rate", - "length": 0, - "no_copy": 0, - "options": "currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "price_list_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Price List Rate", + "length": 0, + "no_copy": 0, + "options": "currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "price_list_rate", - "fieldname": "discount_percentage", - "fieldtype": "Percent", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Discount on Price List Rate (%)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount on Price List Rate (%)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_break3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "base_price_list_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Price List Rate (Company Currency)", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_price_list_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Price List Rate (Company Currency)", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "sec_break1", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sec_break1", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 3, - "fieldname": "rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Rate", - "length": 0, - "no_copy": 0, - "oldfieldname": "import_rate", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 3, + "fieldname": "rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Rate", + "length": 0, + "no_copy": 0, + "oldfieldname": "import_rate", + "oldfieldtype": "Currency", + "options": "currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Amount", - "length": 0, - "no_copy": 0, - "oldfieldname": "import_amount", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Amount", + "length": 0, + "no_copy": 0, + "oldfieldname": "import_amount", + "oldfieldtype": "Currency", + "options": "currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_break4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "base_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rate (Company Currency)", - "length": 0, - "no_copy": 0, - "oldfieldname": "purchase_rate", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 1, - "remember_last_selected_value": 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": "base_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rate (Company Currency)", + "length": 0, + "no_copy": 0, + "oldfieldname": "purchase_rate", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "100px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "base_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amount (Company Currency)", - "length": 0, - "no_copy": 0, - "oldfieldname": "amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 1, - "remember_last_selected_value": 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": "base_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amount (Company Currency)", + "length": 0, + "no_copy": 0, + "oldfieldname": "amount", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 1, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "pricing_rule", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Pricing Rule", - "length": 0, - "no_copy": 0, - "options": "Pricing Rule", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "pricing_rule", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Pricing Rule", + "length": 0, + "no_copy": 0, + "options": "Pricing Rule", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_29", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_29", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "net_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Net Rate", - "length": 0, - "no_copy": 0, - "options": "currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "net_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Net Rate", + "length": 0, + "no_copy": 0, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "net_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Net Amount", - "length": 0, - "no_copy": 0, - "options": "currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "net_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Net Amount", + "length": 0, + "no_copy": 0, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_32", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_32", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "base_net_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Net Rate (Company Currency)", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_net_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Net Rate (Company Currency)", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "base_net_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Net Amount (Company Currency)", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_net_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Net Amount (Company Currency)", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "warehouse_and_reference", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Warehouse and Reference", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "warehouse_and_reference", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Warehouse and Reference", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "fieldname": "warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Accepted Warehouse", - "length": 0, - "no_copy": 0, - "oldfieldname": "warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Accepted Warehouse", + "length": 0, + "no_copy": 0, + "oldfieldname": "warehouse", + "oldfieldtype": "Link", + "options": "Warehouse", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "rejected_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rejected Warehouse", - "length": 0, - "no_copy": 1, - "oldfieldname": "rejected_warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 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": "rejected_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rejected Warehouse", + "length": 0, + "no_copy": 1, + "oldfieldname": "rejected_warehouse", + "oldfieldtype": "Link", + "options": "Warehouse", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 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, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "quality_inspection", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Quality Inspection", - "length": 0, - "no_copy": 1, - "oldfieldname": "qa_no", - "oldfieldtype": "Link", - "options": "Quality Inspection", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "quality_inspection", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Quality Inspection", + "length": 0, + "no_copy": 1, + "oldfieldname": "qa_no", + "oldfieldtype": "Link", + "options": "Quality Inspection", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_40", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_40", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "purchase_order", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Purchase Order", - "length": 0, - "no_copy": 1, - "oldfieldname": "prevdoc_docname", - "oldfieldtype": "Link", - "options": "Purchase Order", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "150px", - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "purchase_order", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Purchase Order", + "length": 0, + "no_copy": 1, + "oldfieldname": "prevdoc_docname", + "oldfieldtype": "Link", + "options": "Purchase Order", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "150px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0, "width": "150px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "schedule_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Required By", - "length": 0, - "no_copy": 0, - "oldfieldname": "schedule_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "schedule_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Required By", + "length": 0, + "no_copy": 0, + "oldfieldname": "schedule_date", + "oldfieldtype": "Date", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Qty as per Stock UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "stock_qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 1, - "remember_last_selected_value": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Qty as per Stock UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "stock_qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 1, + "remember_last_selected_value": 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, - "columns": 0, - "fieldname": "section_break_45", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_45", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "serial_no", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Serial No", - "length": 0, - "no_copy": 1, - "oldfieldname": "serial_no", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "serial_no", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Serial No", + "length": 0, + "no_copy": 1, + "oldfieldname": "serial_no", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "batch_no", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Batch No", - "length": 0, - "no_copy": 0, - "oldfieldname": "batch_no", - "oldfieldtype": "Link", - "options": "Batch", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "batch_no", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Batch No", + "length": 0, + "no_copy": 0, + "oldfieldname": "batch_no", + "oldfieldtype": "Link", + "options": "Batch", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_48", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_48", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "rejected_serial_no", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rejected Serial No", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rejected_serial_no", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rejected Serial No", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_50", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_50", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Project", - "length": 0, - "no_copy": 0, - "options": "Project", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 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": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "options": "Project", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": ":Company", - "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", - "fieldname": "cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Cost Center", - "length": 0, - "no_copy": 0, - "options": "Cost Center", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": ":Company", + "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "purchase_order_item", - "fieldtype": "Data", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Purchase Order Item", - "length": 0, - "no_copy": 1, - "oldfieldname": "prevdoc_detail_docname", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "150px", - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, - "unique": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "purchase_order_item", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Purchase Order Item", + "length": 0, + "no_copy": 1, + "oldfieldname": "prevdoc_detail_docname", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "150px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0, "width": "150px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "col_break5", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break5", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "allow_zero_valuation_rate", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Allow Zero Valuation Rate", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "allow_zero_valuation_rate", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow Zero Valuation Rate", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "bom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "BOM", - "length": 0, - "no_copy": 1, - "options": "BOM", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "BOM", + "length": 0, + "no_copy": 1, + "options": "BOM", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "billed_amt", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Billed Amt", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "billed_amt", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Billed Amt", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "landed_cost_voucher_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Landed Cost Voucher Amount", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "landed_cost_voucher_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Landed Cost Voucher Amount", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "brand", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Brand", - "length": 0, - "no_copy": 0, - "oldfieldname": "brand", - "oldfieldtype": "Link", - "options": "Brand", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "brand", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Brand", + "length": 0, + "no_copy": 0, + "oldfieldname": "brand", + "oldfieldtype": "Link", + "options": "Brand", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "", - "fieldname": "item_group", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Group", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_group", - "oldfieldtype": "Link", - "options": "Item Group", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 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": "item_group", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Group", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_group", + "oldfieldtype": "Link", + "options": "Item Group", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "rm_supp_cost", - "fieldtype": "Currency", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Raw Materials Supplied Cost", - "length": 0, - "no_copy": 1, - "oldfieldname": "rm_supp_cost", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "150px", - "read_only": 1, - "remember_last_selected_value": 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": "rm_supp_cost", + "fieldtype": "Currency", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Raw Materials Supplied Cost", + "length": 0, + "no_copy": 1, + "oldfieldname": "rm_supp_cost", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "150px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "150px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "item_tax_amount", - "fieldtype": "Currency", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Tax Amount", - "length": 0, - "no_copy": 1, - "oldfieldname": "item_tax_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "150px", - "read_only": 1, - "remember_last_selected_value": 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": "item_tax_amount", + "fieldtype": "Currency", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Tax Amount", + "length": 0, + "no_copy": 1, + "oldfieldname": "item_tax_amount", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "150px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "150px" - }, + }, { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "valuation_rate", - "fieldtype": "Currency", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Valuation Rate", - "length": 0, - "no_copy": 1, - "oldfieldname": "valuation_rate", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "80px", - "read_only": 1, - "remember_last_selected_value": 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": "valuation_rate", + "fieldtype": "Currency", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valuation Rate", + "length": 0, + "no_copy": 1, + "oldfieldname": "valuation_rate", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "80px", + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "80px" - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges", - "fieldname": "item_tax_rate", - "fieldtype": "Code", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Tax Rate", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_tax_rate", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 1, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges", + "fieldname": "item_tax_rate", + "fieldtype": "Code", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Tax Rate", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_tax_rate", + "oldfieldtype": "Small Text", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "page_break", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Page Break", - "length": 0, - "no_copy": 0, - "oldfieldname": "page_break", - "oldfieldtype": "Check", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "page_break", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Page Break", + "length": 0, + "no_copy": 0, + "oldfieldname": "page_break", + "oldfieldtype": "Check", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-04-19 11:54:00.260885", - "modified_by": "Administrator", - "module": "Stock", - "name": "Purchase Receipt Item", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 1, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-04-19 11:54:00.260886", + "modified_by": "Administrator", + "module": "Stock", + "name": "Purchase Receipt Item", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, "track_seen": 0 } diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 107c85ca10..dcdd50d22e 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -48,6 +48,9 @@ class StockEntry(StockController): self.validate_with_material_request() self.validate_batch() + if self._action == 'submit': + self.make_batches() + self.set_actual_qty() self.calculate_rate_and_amount(update_finished_item_rate=False) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py index e58042d75c..e1ec3ee9f3 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py @@ -6,6 +6,20 @@ from frappe.utils import cint, flt @frappe.whitelist() def make_stock_entry(**args): + '''Helper function to make a Stock Entry + + :item_code: Item to be moved + :qty: Qty to be moved + :from_warehouse: Optional + :to_warehouse: Optional + :rate: Optional + :serial_no: Optional + :batch_no: Optional + :posting_date: Optional + :posting_time: Optional + :do_not_save: Optional flag + :do_not_submit: Optional flag + ''' s = frappe.new_doc("Stock Entry") args = frappe._dict(args) @@ -71,6 +85,7 @@ def make_stock_entry(**args): "basic_rate": args.rate or args.basic_rate, "conversion_factor": 1.0, "serial_no": args.serial_no, + 'batch_no': args.batch_no, 'cost_center': args.cost_center, 'expense_account': args.expense_account }) diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 00e3abec71..55a307cd3e 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -58,7 +58,7 @@ class StockLedgerEntry(Document): def validate_item(self): item_det = frappe.db.sql("""select name, has_batch_no, docstatus, - is_stock_item, has_variants, stock_uom + is_stock_item, has_variants, stock_uom, create_new_batch from tabItem where name=%s""", self.item_code, as_dict=True) if not item_det: @@ -75,7 +75,7 @@ class StockLedgerEntry(Document): if not self.batch_no: frappe.throw(_("Batch number is mandatory for Item {0}").format(self.item_code)) elif not frappe.db.get_value("Batch",{"item": self.item_code, "name": self.batch_no}): - frappe.throw(_("{0} is not a valid Batch Number for Item {1}").format(self.batch_no, self.item_code)) + frappe.throw(_("{0} is not a valid Batch Number for Item {1}").format(self.batch_no, self.item_code)) elif item_det.has_batch_no ==0 and self.batch_no: frappe.throw(_("The Item {0} cannot have Batch").format(self.item_code)) @@ -116,7 +116,7 @@ class StockLedgerEntry(Document): self.fiscal_year = get_fiscal_year(self.posting_date, company=self.company)[0] else: from erpnext.accounts.utils import validate_fiscal_year - validate_fiscal_year(self.posting_date, self.fiscal_year, self.company, + validate_fiscal_year(self.posting_date, self.fiscal_year, self.company, self.meta.get_label("posting_date"), self) def block_transactions_against_group_warehouse(self): diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index a7480e8bf6..d710949317 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -143,13 +143,11 @@ class StockReconciliation(StockController): # item should not be serialized if item.has_serial_no == 1: - raise frappe.ValidationError, _("Serialized Item {0} cannot be updated \ - using Stock Reconciliation").format(item_code) + raise frappe.ValidationError, _("Serialized Item {0} cannot be updated using Stock Reconciliation, please use Stock Entry").format(item_code) # item managed batch-wise not allowed if item.has_batch_no == 1: - raise frappe.ValidationError, _("Item: {0} managed batch-wise, can not be reconciled using \ - Stock Reconciliation, instead use Stock Entry").format(item_code) + raise frappe.ValidationError, _("Batched Item {0} cannot be updated using Stock Reconciliation, instead use Stock Entry").format(item_code) # docstatus should be < 2 validate_cancelled_item(item_code, item.docstatus, verbose=0) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 998a65a22a..787e4b580e 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -187,9 +187,11 @@ def get_basic_details(args, item): out.stock_qty = out.qty * out.conversion_factor # if default specified in item is for another company, fetch from company - for d in [["Account", "income_account", "default_income_account"], + for d in [ + ["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], - ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: + ["Cost Center", "cost_center", "cost_center"], + ["Warehouse", "warehouse", ""]]: company = frappe.db.get_value(d[0], out.get(d[1]), "company") if not out[d[1]] or (company and args.company != company): out[d[1]] = frappe.db.get_value("Company", args.company, d[2]) if d[2] else None @@ -359,15 +361,6 @@ def get_serial_nos_by_fifo(args): "qty": abs(cint(args.stock_qty)) })) -def get_actual_batch_qty(batch_no,warehouse,item_code): - actual_batch_qty = 0 - if batch_no: - actual_batch_qty = flt(frappe.db.sql("""select sum(actual_qty) - from `tabStock Ledger Entry` - where warehouse=%s and item_code=%s and batch_no=%s""", - (warehouse, item_code, batch_no))[0][0]) - return actual_batch_qty - @frappe.whitelist() def get_conversion_factor(item_code, uom): variant_of = frappe.db.get_value("Item", item_code, "variant_of") @@ -403,10 +396,10 @@ def get_bin_details_and_serial_nos(item_code, warehouse, stock_qty=None, serial_ return bin_details_and_serial_nos @frappe.whitelist() -def get_batch_qty(batch_no,warehouse,item_code): - actual_batch_qty = get_actual_batch_qty(batch_no,warehouse,item_code) +def get_batch_qty(batch_no, warehouse, item_code): + from frappe.stock.doctype.batch import batch if batch_no: - return {'actual_batch_qty': actual_batch_qty} + return {'actual_batch_qty': batch.get_batch_qty(batch_no, warehouse)} @frappe.whitelist() def apply_price_list(args, as_doc=False): diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.js b/erpnext/stock/report/stock_ledger/stock_ledger.js index fb60157b54..ce357db3f8 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.js +++ b/erpnext/stock/report/stock_ledger/stock_ledger.js @@ -37,6 +37,12 @@ frappe.query_reports["Stock Ledger"] = { "fieldtype": "Link", "options": "Item" }, + { + "fieldname":"batch_no", + "label": __("Batch No"), + "fieldtype": "Link", + "options": "Batch" + }, { "fieldname":"brand", "label": __("Brand"), diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 69fb4900e5..ec55cec3fb 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -10,9 +10,9 @@ def execute(filters=None): sl_entries = get_stock_ledger_entries(filters) item_details = get_item_details(filters) opening_row = get_opening_balance(filters, columns) - + data = [] - + if opening_row: data.append(opening_row) @@ -25,7 +25,7 @@ def execute(filters=None): (sle.incoming_rate if sle.actual_qty > 0 else 0.0), sle.valuation_rate, sle.stock_value, sle.voucher_type, sle.voucher_no, sle.batch_no, sle.serial_no, sle.company]) - + return columns, data def get_columns(): @@ -76,6 +76,8 @@ def get_sle_conditions(filters): conditions.append(get_warehouse_condition(filters.get("warehouse"))) if filters.get("voucher_no"): conditions.append("voucher_no=%(voucher_no)s") + if filters.get("batch_no"): + conditions.append("batch_no=%(batch_no)s") return "and {}".format(" and ".join(conditions)) if conditions else "" @@ -90,14 +92,14 @@ def get_opening_balance(filters, columns): "posting_date": filters.from_date, "posting_time": "00:00:00" }) - + row = [""]*len(columns) row[1] = _("'Opening'") for i, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')): row[i] = last_entry.get(v, 0) - + return row - + def get_warehouse_condition(warehouse): warehouse_details = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"], as_dict=1) if warehouse_details: diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 688d6c4ec0..9a25b76cbe 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -143,6 +143,7 @@ def validate_uom_is_integer(doc, uom_field, qty_fields, child_dt=None): for d in doc.get_all_children(parenttype=child_dt): if d.get(uom_field) in integer_uoms: for f in qty_fields: - if d.get(f): - if cint(d.get(f))!=d.get(f): - frappe.throw(_("Quantity cannot be a fraction in row {0}").format(d.idx), UOMMustBeIntegerError) + qty = d.get(f) + if qty: + if abs(int(qty) - float(qty)) > 0.0000001: + frappe.throw(_("Quantity ({0}) cannot be a fraction in row {1}").format(qty, d.idx), UOMMustBeIntegerError) From 551406ab11c5ce2e48e2d33ca6e187d6173b79bc Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 21 Apr 2017 12:40:19 +0530 Subject: [PATCH 131/287] [enhance] automatic batch selection in Delivery Note and Stock Entry --- erpnext/controllers/stock_controller.py | 19 +++-- erpnext/stock/doctype/batch/batch.py | 45 +++++++++- erpnext/stock/doctype/batch/test_batch.py | 83 +++++++++++++++++-- .../doctype/delivery_note/delivery_note.py | 5 +- .../purchase_receipt/purchase_receipt.py | 2 +- .../stock/doctype/stock_entry/stock_entry.py | 28 +++++-- .../stock_entry_detail.json | 10 +-- erpnext/stock/get_item_details.py | 10 ++- 8 files changed, 171 insertions(+), 31 deletions(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 703fe06db2..3649cc119d 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -177,17 +177,18 @@ class StockController(AccountsController): stock_ledger.setdefault(sle.voucher_detail_no, []).append(sle) return stock_ledger - def make_batches(self): + def make_batches(self, warehouse_field): '''Create batches if required. Called before submit''' for d in self.items: - has_batch_no, create_new_batch = frappe.db.get_value('Item', d.item_code, ['has_batch_no', 'create_new_batch']) - if has_batch_no and not d.batch_no and create_new_batch: - d.batch_no = frappe.get_doc(dict( - doctype='Batch', - item=d.item_code, - supplier=getattr(self, 'supplier', None), - reference_doctype=self.doctype, - reference_name=self.name)).insert().name + if d.get(warehouse_field) and not d.batch_no: + has_batch_no, create_new_batch = frappe.db.get_value('Item', d.item_code, ['has_batch_no', 'create_new_batch']) + if has_batch_no and create_new_batch: + d.batch_no = frappe.get_doc(dict( + doctype='Batch', + item=d.item_code, + supplier=getattr(self, 'supplier', None), + reference_doctype=self.doctype, + reference_name=self.name)).insert().name def make_adjustment_entry(self, expected_gle, voucher_obj): from erpnext.accounts.utils import get_stock_and_account_difference diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index 193acebfeb..8ef8e915ee 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -6,6 +6,8 @@ import frappe from frappe import _ from frappe.model.document import Document +class UnableToSelectBatchError(frappe.ValidationError): pass + class Batch(Document): def autoname(self): '''Generate random ID for batch if not specified''' @@ -34,8 +36,15 @@ class Batch(Document): frappe.throw(_("The selected item cannot have Batch")) @frappe.whitelist() -def get_batch_qty(batch_no, warehouse=None): - '''Returns batch actual qty if warehouse is passed, or returns dict of qty by warehouse if warehouse is None''' +def get_batch_qty(batch_no=None, warehouse=None, item_code=None): + '''Returns batch actual qty if warehouse is passed, + or returns dict of qty by warehouse if warehouse is None + + The user must pass either batch_no or batch_no + warehouse or item_code + warehouse + + :param batch_no: Optional - give qty for this batch no + :param warehouse: Optional - give qty for this warehouse + :param item_code: Optional - give qty for this item''' frappe.has_permission('Batch', throw=True) out = 0 if batch_no and warehouse: @@ -48,6 +57,11 @@ def get_batch_qty(batch_no, warehouse=None): from `tabStock Ledger Entry` where batch_no=%s group by warehouse''', batch_no, as_dict=1) + if not batch_no and item_code and warehouse: + out = frappe.db.sql('''select batch_no, sum(actual_qty) as qty + from `tabStock Ledger Entry` + where item_code = %s and warehouse=%s + group by batch_no''', (item_code, warehouse), as_dict=1) return out @frappe.whitelist() @@ -76,3 +90,30 @@ def split_batch(batch_no, item_code, warehouse, qty, new_batch_id = None): stock_entry.submit() return batch.name + +def set_batch_nos(doc, warehouse_field, throw = False): + '''Automatically select `batch_no` for outgoing items in item table''' + for d in doc.items: + has_batch_no = frappe.db.get_value('Item', d.item_code, 'has_batch_no') + warehouse = d.get(warehouse_field, None) + if has_batch_no and not d.batch_no and warehouse: + d.batch_no = get_batch_no(d.item_code, warehouse, d.qty, throw) + +def get_batch_no(item_code, warehouse, qty, throw=False): + '''get the smallest batch with for the given item_code, warehouse and qty''' + batches = sorted( + get_batch_qty(item_code = item_code, warehouse = warehouse), + lambda a, b: 1 if a.qty > b.qty else -1) + + batch_no = None + for b in batches: + if b.qty >= qty: + batch_no = b.batch_no + # found! + break + + if not batch_no: + frappe.msgprint(_('Please select a Batch for Item {0}. Unable to find a single batch that fulfills this requirement').format(frappe.bold(item_code))) + if throw: raise UnableToSelectBatchError + + return batch_no \ No newline at end of file diff --git a/erpnext/stock/doctype/batch/test_batch.py b/erpnext/stock/doctype/batch/test_batch.py index 29023bb2a9..e63e949bde 100644 --- a/erpnext/stock/doctype/batch/test_batch.py +++ b/erpnext/stock/doctype/batch/test_batch.py @@ -6,7 +6,7 @@ import frappe from frappe.exceptions import ValidationError import unittest -from erpnext.stock.doctype.batch.batch import get_batch_qty +from erpnext.stock.doctype.batch.batch import get_batch_qty, UnableToSelectBatchError class TestBatch(unittest.TestCase): def test_item_has_batch_enabled(self): @@ -21,7 +21,7 @@ class TestBatch(unittest.TestCase): if not frappe.db.exists('ITEM-BATCH-1'): make_item('ITEM-BATCH-1', dict(has_batch_no = 1, create_new_batch = 1)) - def test_purchase_receipt(self): + def test_purchase_receipt(self, batch_qty = 100): '''Test automated batch creation from Purchase Receipt''' self.make_batch_item() @@ -31,7 +31,7 @@ class TestBatch(unittest.TestCase): items = [ dict( item_code = 'ITEM-BATCH-1', - qty = 100, + qty = batch_qty, rate = 10 ) ] @@ -39,11 +39,12 @@ class TestBatch(unittest.TestCase): receipt.submit() self.assertTrue(receipt.items[0].batch_no) - self.assertEquals(get_batch_qty(receipt.items[0].batch_no, receipt.items[0].warehouse), 100) + self.assertEquals(get_batch_qty(receipt.items[0].batch_no, + receipt.items[0].warehouse), batch_qty) return receipt - def test_stock_entry(self): + def test_stock_entry_incoming(self): '''Test batch creation via Stock Entry (Production Order)''' self.make_batch_item() @@ -67,6 +68,78 @@ class TestBatch(unittest.TestCase): self.assertTrue(stock_entry.items[0].batch_no) self.assertEquals(get_batch_qty(stock_entry.items[0].batch_no, stock_entry.items[0].t_warehouse), 90) + def test_delivery_note(self): + '''Test automatic batch selection for outgoing items''' + batch_qty = 15 + receipt = self.test_purchase_receipt(batch_qty) + + delivery_note = frappe.get_doc(dict( + doctype = 'Delivery Note', + customer = '_Test Customer', + company = receipt.company, + items = [ + dict( + item_code = 'ITEM-BATCH-1', + qty = batch_qty, + rate = 10, + warehouse = receipt.items[0].warehouse + ) + ] + )).insert() + delivery_note.submit() + + # shipped with same batch + self.assertEquals(delivery_note.items[0].batch_no, receipt.items[0].batch_no) + + # balance is 0 + self.assertEquals(get_batch_qty(receipt.items[0].batch_no, + receipt.items[0].warehouse), 0) + + def test_delivery_note_fail(self): + '''Test automatic batch selection for outgoing items''' + receipt = self.test_purchase_receipt(100) + delivery_note = frappe.get_doc(dict( + doctype = 'Delivery Note', + customer = '_Test Customer', + company = receipt.company, + items = [ + dict( + item_code = 'ITEM-BATCH-1', + qty = 5000, + rate = 10, + warehouse = receipt.items[0].warehouse + ) + ] + )) + self.assertRaises(UnableToSelectBatchError, delivery_note.insert) + + def test_stock_entry_outgoing(self): + '''Test automatic batch selection for outgoing stock entry''' + + batch_qty = 16 + receipt = self.test_purchase_receipt(batch_qty) + + stock_entry = frappe.get_doc(dict( + doctype = 'Stock Entry', + purpose = 'Material Issue', + company = receipt.company, + items = [ + dict( + item_code = 'ITEM-BATCH-1', + qty = batch_qty, + s_warehouse = receipt.items[0].warehouse, + ) + ] + )).insert() + stock_entry.submit() + + # assert same batch is selected + self.assertEqual(stock_entry.items[0].batch_no, receipt.items[0].batch_no) + + # balance is 0 + self.assertEquals(get_batch_qty(receipt.items[0].batch_no, + receipt.items[0].warehouse), 0) + def test_batch_split(self): '''Test batch splitting''' receipt = self.test_purchase_receipt() diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 5e8f5c9b46..a2a0115c1b 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -11,7 +11,7 @@ import frappe.defaults from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController from frappe.desk.notifications import clear_doctype_notifications - +from erpnext.stock.doctype.batch.batch import set_batch_nos form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -106,6 +106,9 @@ class DeliveryNote(SellingController): self.validate_uom_is_integer("uom", "qty") self.validate_with_previous_doc() + if self._action != 'submit': + set_batch_nos(self, 'warehouse', True) + from erpnext.stock.doctype.packed_item.packed_item import make_packing_list make_packing_list(self) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 5d90338566..055b9c47f9 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -51,7 +51,7 @@ class PurchaseReceipt(BuyingController): super(PurchaseReceipt, self).validate() if self._action=="submit": - self.make_batches() + self.make_batches('warehouse') else: self.set_status() diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index dcdd50d22e..169bfd9121 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -9,6 +9,7 @@ from frappe.utils import cstr, cint, flt, comma_or, getdate, nowdate, formatdate from erpnext.stock.utils import get_incoming_rate from erpnext.stock.stock_ledger import get_previous_sle, NegativeStockError from erpnext.stock.get_item_details import get_bin_details, get_default_cost_center, get_conversion_factor +from erpnext.stock.doctype.batch.batch import get_batch_no, set_batch_nos from erpnext.manufacturing.doctype.bom.bom import validate_bom_no import json @@ -49,7 +50,9 @@ class StockEntry(StockController): self.validate_batch() if self._action == 'submit': - self.make_batches() + self.make_batches('t_warehouse') + else: + set_batch_nos(self, 's_warehouse', True) self.set_actual_qty() self.calculate_rate_and_amount(update_finished_item_rate=False) @@ -89,8 +92,10 @@ class StockEntry(StockController): if item.item_code not in stock_items: frappe.throw(_("{0} is not a stock Item").format(item.item_code)) - item_details = self.get_item_details(frappe._dict({"item_code": item.item_code, - "company": self.company, "project": self.project, "uom": item.uom}), for_update=True) + item_details = self.get_item_details(frappe._dict( + {"item_code": item.item_code, "company": self.company, + "project": self.project, "uom": item.uom, 's_warehouse': item.s_warehouse}), + for_update=True) for f in ("uom", "stock_uom", "description", "item_name", "expense_account", "cost_center", "conversion_factor"): @@ -465,7 +470,9 @@ class StockEntry(StockController): def get_item_details(self, args=None, for_update=False): item = frappe.db.sql("""select stock_uom, description, image, item_name, - expense_account, buying_cost_center, item_group from `tabItem` + expense_account, buying_cost_center, item_group, has_serial_no, + has_batch_no + from `tabItem` where name = %s and disabled=0 and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %s)""", @@ -475,7 +482,7 @@ class StockEntry(StockController): item = item[0] - ret = { + ret = frappe._dict({ 'uom' : item.stock_uom, 'stock_uom' : item.stock_uom, 'description' : item.description, @@ -489,8 +496,10 @@ class StockEntry(StockController): 'batch_no' : '', 'actual_qty' : 0, 'basic_rate' : 0, - 'serial_no' : '' - } + 'serial_no' : '', + 'has_serial_no' : item.has_serial_no, + 'has_batch_no' : item.has_batch_no + }) for d in [["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"]]: company = frappe.db.get_value(d[0], ret.get(d[1]), "company") @@ -510,6 +519,11 @@ class StockEntry(StockController): stock_and_rate = args.get('warehouse') and get_warehouse_details(args) or {} ret.update(stock_and_rate) + # automatically select batch for outgoing item + if (args.get('s_warehouse', None) and args.get('qty') and + ret.get('has_batch_no') and not args.get('batch_no')): + args.batch_no = get_batch_no(args['item_code'], args['s_warehouse'], args['qty']) + return ret def get_items(self): diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index 2f7779c132..43209e82e3 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -813,7 +813,7 @@ "collapsible": 0, "columns": 0, "fieldname": "serial_no", - "fieldtype": "Text", + "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -1040,11 +1040,11 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "allow_zero_valuation_rate", + "fieldname": "is_sample_item", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -1053,7 +1053,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Zero Valuation Rate", + "label": "Is Sample Item", "length": 0, "no_copy": 1, "permlevel": 0, @@ -1225,7 +1225,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-19 11:54:31.645381", + "modified": "2017-04-21 02:56:48.306626", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry Detail", diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 787e4b580e..a6459c53ec 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -9,6 +9,7 @@ import json from erpnext.accounts.doctype.pricing_rule.pricing_rule import get_pricing_rule_for_item, set_transaction_type from erpnext.setup.utils import get_exchange_rate from frappe.model.meta import get_field_precision +from erpnext.stock.doctype.batch.batch import get_batch_no @frappe.whitelist() def get_item_details(args): @@ -74,7 +75,12 @@ def get_item_details(args): out.update(get_pricing_rule_for_item(args)) if args.get("doctype") in ("Sales Invoice", "Delivery Note") and out.stock_qty > 0: - out.serial_no = get_serial_no(out) + if out.has_serial_no: + out.serial_no = get_serial_no(out) + + if out.has_batch_no: + out.batch_no = get_batch_no(out.item_code, out.warehouse, out.qty) + if args.transaction_date and item.lead_time_days: out.schedule_date = out.lead_time_date = add_days(args.transaction_date, @@ -154,6 +160,8 @@ def get_basic_details(args, item): "income_account": get_default_income_account(args, item), "expense_account": get_default_expense_account(args, item), "cost_center": get_default_cost_center(args, item), + 'has_serial_no': item.has_serial_no, + 'has_batch_no': item.has_batch_no, "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item.get("taxes")))), From c44910370bf6ab27045dd16ade0272659b1220b7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sat, 22 Apr 2017 16:45:25 +0530 Subject: [PATCH 132/287] [fix] is_sample_item --- .../stock_entry_detail.json | 2308 ++++++++--------- 1 file changed, 1154 insertions(+), 1154 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index 43209e82e3..4d96c4212a 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -1,1241 +1,1241 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "hash", - "beta": 0, - "creation": "2013-03-29 18:22:12", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Other", - "editable_grid": 1, - "engine": "InnoDB", + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "hash", + "beta": 0, + "creation": "2013-03-29 18:22:12", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Other", + "editable_grid": 1, + "engine": "InnoDB", "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Barcode", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Barcode", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_2", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_2", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "s_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Source Warehouse", - "length": 0, - "no_copy": 0, - "oldfieldname": "s_warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "s_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Source Warehouse", + "length": 0, + "no_copy": 0, + "oldfieldname": "s_warehouse", + "oldfieldtype": "Link", + "options": "Warehouse", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_break1", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "t_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Target Warehouse", - "length": 0, - "no_copy": 0, - "oldfieldname": "t_warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 2, + "fieldname": "t_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Target Warehouse", + "length": 0, + "no_copy": 0, + "oldfieldname": "t_warehouse", + "oldfieldtype": "Link", + "options": "Warehouse", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "sec_break1", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sec_break1", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 3, - "fieldname": "item_code", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Item Code", - "length": 0, - "no_copy": 0, - "oldfieldname": "item_code", - "oldfieldtype": "Link", - "options": "Item", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 3, + "fieldname": "item_code", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Item Code", + "length": 0, + "no_copy": 0, + "oldfieldname": "item_code", + "oldfieldtype": "Link", + "options": "Item", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "col_break2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "item_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "item_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_8", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_8", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "description", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "oldfieldname": "description", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "300px", - "read_only": 0, - "remember_last_selected_value": 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": "description", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "oldfieldname": "description", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "300px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "300px" - }, + }, { - "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_10", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_view", - "fieldtype": "Image", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Image View", - "length": 0, - "no_copy": 0, - "options": "image", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_view", + "fieldtype": "Image", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image View", + "length": 0, + "no_copy": 0, + "options": "image", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "quantity_and_rate", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Quantity and Rate", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "quantity_and_rate", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Quantity and Rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 3, - "fieldname": "qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Qty", - "length": 0, - "no_copy": 0, - "oldfieldname": "qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 3, + "fieldname": "qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Qty", + "length": 0, + "no_copy": 0, + "oldfieldname": "qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "fieldname": "basic_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Basic Rate (as per Stock UOM)", - "length": 0, - "no_copy": 0, - "oldfieldname": "incoming_rate", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "basic_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Basic Rate (as per Stock UOM)", + "length": 0, + "no_copy": 0, + "oldfieldname": "incoming_rate", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "basic_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Basic Amount", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "basic_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Basic Amount", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "additional_cost", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Additional Cost", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "additional_cost", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Additional Cost", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amount", - "length": 0, - "no_copy": 0, - "oldfieldname": "amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amount", + "length": 0, + "no_copy": 0, + "oldfieldname": "amount", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "valuation_rate", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Valuation Rate", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "valuation_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valuation Rate", + "length": 0, + "no_copy": 0, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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_break3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "uom", - "oldfieldtype": "Link", - "options": "UOM", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "uom", + "oldfieldtype": "Link", + "options": "UOM", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "conversion_factor", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Conversion Factor", - "length": 0, - "no_copy": 0, - "oldfieldname": "conversion_factor", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Conversion Factor", + "length": 0, + "no_copy": 0, + "oldfieldname": "conversion_factor", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "stock_uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stock UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "stock_uom", - "oldfieldtype": "Link", - "options": "UOM", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "stock_uom", + "oldfieldtype": "Link", + "options": "UOM", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "transfer_qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Qty as per Stock UOM", - "length": 0, - "no_copy": 0, - "oldfieldname": "transfer_qty", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "transfer_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Qty as per Stock UOM", + "length": 0, + "no_copy": 0, + "oldfieldname": "transfer_qty", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "serial_no_batch", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Serial No / Batch", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "serial_no_batch", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Serial No / Batch", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "serial_no", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Serial No", - "length": 0, - "no_copy": 1, - "oldfieldname": "serial_no", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "serial_no", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Serial No", + "length": 0, + "no_copy": 1, + "oldfieldname": "serial_no", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_break4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "batch_no", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Batch No", - "length": 0, - "no_copy": 0, - "oldfieldname": "batch_no", - "oldfieldtype": "Link", - "options": "Batch", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "batch_no", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Batch No", + "length": 0, + "no_copy": 0, + "oldfieldname": "batch_no", + "oldfieldtype": "Link", + "options": "Batch", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "accounting", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Accounting", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "accounting", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounting", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "eval:cint(sys_defaults.auto_accounting_for_stock)", - "fieldname": "expense_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Difference Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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:cint(sys_defaults.auto_accounting_for_stock)", + "fieldname": "expense_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Difference Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_break5", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break5", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": ":Company", - "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", - "fieldname": "cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Cost Center", - "length": 0, - "no_copy": 0, - "options": "Cost Center", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": ":Company", + "depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)", + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "more_info", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "More Information", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "more_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "More Information", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "is_sample_item", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Is Sample Item", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "allow_zero_valuation_rate", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow Zero Valuation Rate", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "actual_qty", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Actual Qty (at source/target)", - "length": 0, - "no_copy": 1, - "oldfieldname": "actual_qty", - "oldfieldtype": "Read Only", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 1, - "set_only_once": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "actual_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Actual Qty (at source/target)", + "length": 0, + "no_copy": 1, + "oldfieldname": "actual_qty", + "oldfieldtype": "Read Only", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "BOM No. for a Finished Good Item", - "fieldname": "bom_no", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "BOM No", - "length": 0, - "no_copy": 0, - "options": "BOM", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "BOM No. for a Finished Good Item", + "fieldname": "bom_no", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "BOM No", + "length": 0, + "no_copy": 0, + "options": "BOM", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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_break6", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "col_break6", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "Material Request used to make this Stock Entry", - "fieldname": "material_request", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Material Request", - "length": 0, - "no_copy": 1, - "options": "Material Request", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Material Request used to make this Stock Entry", + "fieldname": "material_request", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Material Request", + "length": 0, + "no_copy": 1, + "options": "Material Request", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 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": "material_request_item", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Material Request Item", - "length": 0, - "no_copy": 1, - "options": "Material Request Item", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "material_request_item", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Material Request Item", + "length": 0, + "no_copy": 1, + "options": "Material Request Item", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-04-21 02:56:48.306626", - "modified_by": "Administrator", - "module": "Stock", - "name": "Stock Entry Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_order": "ASC", - "track_changes": 0, + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 1, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-04-21 02:56:48.306627", + "modified_by": "Administrator", + "module": "Stock", + "name": "Stock Entry Detail", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_order": "ASC", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file From 7544904857b08246d5933fe3b89cbc9e4fa729c4 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Thu, 20 Apr 2017 21:46:27 +0530 Subject: [PATCH 133/287] Add option to skip material transfer for production orders --- .../production_order/production_order.js | 59 ++++++++++++------- .../production_order/production_order.json | 30 ++++++++++ .../production_order/production_order.py | 2 +- 3 files changed, 70 insertions(+), 21 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index 60373972b9..3ce87aad2f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -72,15 +72,17 @@ frappe.ui.form.on("Production Order", { message = title; // pending qty - var pending_complete = frm.doc.material_transferred_for_manufacturing - frm.doc.produced_qty; - if(pending_complete) { - var title = __('{0} items in progress', [pending_complete]); - bars.push({ - 'title': title, - 'width': ((pending_complete / frm.doc.qty * 100) - added_min) + '%', - 'progress_class': 'progress-bar-warning' - }) - message = message + '. ' + title; + if(!frm.doc.skip_transfer){ + var pending_complete = frm.doc.material_transferred_for_manufacturing - frm.doc.produced_qty; + if(pending_complete) { + var title = __('{0} items in progress', [pending_complete]); + bars.push({ + 'title': title, + 'width': ((pending_complete / frm.doc.qty * 100) - added_min) + '%', + 'progress_class': 'progress-bar-warning' + }) + message = message + '. ' + title; + } } frm.dashboard.add_progress(__('Status'), bars, message); } @@ -122,21 +124,32 @@ erpnext.production_order = { frm.add_custom_button(__('Re-open'), cur_frm.cscript['Unstop Production Order'], __("Status")); } - if ((flt(doc.material_transferred_for_manufacturing) < flt(doc.qty)) && frm.doc.status != 'Stopped') { + if(!frm.doc.skip_transfer){ + if ((flt(doc.material_transferred_for_manufacturing) < flt(doc.qty)) && frm.doc.status != 'Stopped') { frm.has_start_btn = true; var btn = frm.add_custom_button(__('Start'), cur_frm.cscript['Transfer Raw Materials']); btn.addClass('btn-primary'); + } } - if ((flt(doc.produced_qty) < flt(doc.material_transferred_for_manufacturing)) && frm.doc.status != 'Stopped') { - frm.has_finish_btn = true; - var btn = frm.add_custom_button(__('Finish'), - cur_frm.cscript['Update Finished Goods']); + if(!frm.doc.skip_transfer){ + if ((flt(doc.produced_qty) < flt(doc.material_transferred_for_manufacturing)) && frm.doc.status != 'Stopped') { + frm.has_finish_btn = true; + var btn = frm.add_custom_button(__('Finish'), + cur_frm.cscript['Update Finished Goods']); - if(doc.material_transferred_for_manufacturing==doc.qty) { - // all materials transferred for manufacturing, - // make this primary + if(doc.material_transferred_for_manufacturing==doc.qty) { + // all materials transferred for manufacturing, + // make this primary + btn.addClass('btn-primary'); + } + } + } else if(frm.doc.skip_transfer){ + if ((flt(doc.produced_qty) < flt(doc.qty)) && frm.doc.status != 'Stopped') { + frm.has_finish_btn = true; + var btn = frm.add_custom_button(__('Finish'), + cur_frm.cscript['Update Finished Goods']); btn.addClass('btn-primary'); } } @@ -235,9 +248,15 @@ $.extend(cur_frm.cscript, { make_se: function(purpose) { var me = this; - var max = (purpose === "Manufacture") ? - flt(this.frm.doc.material_transferred_for_manufacturing) - flt(this.frm.doc.produced_qty) : - flt(this.frm.doc.qty) - flt(this.frm.doc.material_transferred_for_manufacturing); + if(!this.frm.doc.skip_transfer){ + var max = (purpose === "Manufacture") ? + flt(this.frm.doc.material_transferred_for_manufacturing) - flt(this.frm.doc.produced_qty) : + flt(this.frm.doc.qty) - flt(this.frm.doc.material_transferred_for_manufacturing); + } else if(this.frm.doc.skip_transfer){ + var max = (purpose === "Manufacture") ? + flt(this.frm.doc.qty) - flt(this.frm.doc.produced_qty) : + flt(this.frm.doc.qty) - flt(this.frm.doc.produced_qty); + } frappe.prompt({fieldtype:"Float", label: __("Qty for {0}", [purpose]), fieldname:"qty", description: __("Max: {0}", [max]), 'default': max }, diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 882833fe7d..1507089ad9 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -318,6 +318,36 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Check if material transfer entry is not required", + "fieldname": "skip_transfer", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Skip Material Transfer", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 }, { "allow_on_submit": 0, diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index b9b10c159a..ff1082d0b8 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -535,7 +535,7 @@ def make_stock_entry(production_order_id, purpose, qty=None): 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.project = production_order.project stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() From f04ef8dfe0fb7c3c7598465522ebf45ccf0d95f4 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Fri, 21 Apr 2017 16:14:34 +0530 Subject: [PATCH 134/287] Update documentation for Production Order skipping material transfer entry option --- .../docs/user/manual/en/manufacturing/production-order.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erpnext/docs/user/manual/en/manufacturing/production-order.md b/erpnext/docs/user/manual/en/manufacturing/production-order.md index 3abf80f6cc..a05a3878aa 100644 --- a/erpnext/docs/user/manual/en/manufacturing/production-order.md +++ b/erpnext/docs/user/manual/en/manufacturing/production-order.md @@ -62,6 +62,13 @@ by: Stock Entry for PO +#### Transfer through Stock Entry +Use cases for this option are: +* If material transfer is done in bulk and/or is not required to be tracked against a particular Production Order +* If the responsibility for Material Transfer and Production Entry lies with two separate users + +If this is the case, you can select the Skip Material Transfer check box, which will allow you to make the “Manufacture” Stock Entry directly by clicking on the ‘Finish’ button. + ### Making Time Logs * Progress in the Production Order can be tracked using [Timesheet]({{docs_base_url}}/user/manual/en/projects/timesheet/timesheet-against-production-order.html) From 04c69fb46dd15a06dda540f1273b23e48b714ffa Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Fri, 21 Apr 2017 16:16:49 +0530 Subject: [PATCH 135/287] Minor fix --- erpnext/docs/user/manual/en/manufacturing/production-order.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/docs/user/manual/en/manufacturing/production-order.md b/erpnext/docs/user/manual/en/manufacturing/production-order.md index a05a3878aa..685a2ca50f 100644 --- a/erpnext/docs/user/manual/en/manufacturing/production-order.md +++ b/erpnext/docs/user/manual/en/manufacturing/production-order.md @@ -62,7 +62,7 @@ by: Stock Entry for PO -#### Transfer through Stock Entry +#### Material Transfer through Stock Entry Use cases for this option are: * If material transfer is done in bulk and/or is not required to be tracked against a particular Production Order * If the responsibility for Material Transfer and Production Entry lies with two separate users From e5fdd47fd851852124f40a032b6f8294fe784d62 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Fri, 21 Apr 2017 16:34:18 +0530 Subject: [PATCH 136/287] Hide 'Qty Transferred for Manufacturing' field if skip material transfer --- .../doctype/production_order/production_order.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 1507089ad9..a3b2102ddd 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -318,7 +318,7 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, + }, { "allow_on_submit": 0, "bold": 0, @@ -355,7 +355,7 @@ "collapsible": 0, "columns": 0, "default": "0", - "depends_on": "eval:doc.docstatus==1", + "depends_on": "eval:doc.docstatus==1 && doc.skip_transfer==0", "description": "", "fieldname": "material_transferred_for_manufacturing", "fieldtype": "Float", @@ -1346,8 +1346,8 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-10 12:13:09.312186", - "modified_by": "Administrator", + "modified": "2017-04-21 16:31:19.509721", + "modified_by": "ishan@loyapeb.com", "module": "Manufacturing", "name": "Production Order", "owner": "Administrator", From b12e15dcc4d33a62ddc9f6b7fe826f69bca0a7eb Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Fri, 21 Apr 2017 16:58:27 +0530 Subject: [PATCH 137/287] Change modified by --- .../doctype/production_order/production_order.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index a3b2102ddd..8d28907263 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -1347,7 +1347,7 @@ "istable": 0, "max_attachments": 0, "modified": "2017-04-21 16:31:19.509721", - "modified_by": "ishan@loyapeb.com", + "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", "owner": "Administrator", From 56c1b2a625484939749f0d4f2b7b6eff2cdae22f Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Fri, 21 Apr 2017 18:18:39 +0530 Subject: [PATCH 138/287] Make proposed corrections --- .../doctype/production_order/production_order.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index 3ce87aad2f..d2540de02f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -145,7 +145,7 @@ erpnext.production_order = { btn.addClass('btn-primary'); } } - } else if(frm.doc.skip_transfer){ + } else { if ((flt(doc.produced_qty) < flt(doc.qty)) && frm.doc.status != 'Stopped') { frm.has_finish_btn = true; var btn = frm.add_custom_button(__('Finish'), @@ -252,10 +252,8 @@ $.extend(cur_frm.cscript, { var max = (purpose === "Manufacture") ? flt(this.frm.doc.material_transferred_for_manufacturing) - flt(this.frm.doc.produced_qty) : flt(this.frm.doc.qty) - flt(this.frm.doc.material_transferred_for_manufacturing); - } else if(this.frm.doc.skip_transfer){ - var max = (purpose === "Manufacture") ? - flt(this.frm.doc.qty) - flt(this.frm.doc.produced_qty) : - flt(this.frm.doc.qty) - flt(this.frm.doc.produced_qty); + } else { + var max = flt(this.frm.doc.qty) - flt(this.frm.doc.produced_qty); } frappe.prompt({fieldtype:"Float", label: __("Qty for {0}", [purpose]), fieldname:"qty", @@ -334,4 +332,4 @@ cur_frm.fields_dict['project'].get_query = function(doc, dt, dn) { ['Project', 'status', 'not in', 'Completed, Cancelled'] ] } -} +} \ No newline at end of file From 7bd7df374281645b2fd19505813dec87e0f7ee50 Mon Sep 17 00:00:00 2001 From: pawan Date: Mon, 24 Apr 2017 13:19:22 +0530 Subject: [PATCH 139/287] Changes after review --- .../campaign_efficiency/campaign_efficiency.js | 6 ++---- .../campaign_efficiency/campaign_efficiency.py | 14 +++++++++----- .../lead_owner_efficiency/lead_owner_efficiency.js | 6 +----- .../lead_owner_efficiency/lead_owner_efficiency.py | 10 ++++++---- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js index 74a18512bc..2b25f1dfba 100644 --- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js @@ -1,7 +1,6 @@ // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.require("assets/erpnext/js/financial_statements.js", function() { - frappe.query_reports["Campaign Efficiency"] = { +frappe.query_reports["Campaign Efficiency"] = { "filters": [ { "fieldname": "from_date", @@ -16,6 +15,5 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { "default": frappe.defaults.get_user_default("year_end_date"), } ] - } -}); + }; diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py index 6bf8bd8a66..aad64ff592 100644 --- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py @@ -28,7 +28,8 @@ def get_lead_data(filters): conditions += " and date(creation) >= %(from_date)s" if filters.to_date: conditions += " and date(creation) <= %(to_date)s" - data = frappe.db.sql("""select campaign_name as "Campaign Name", count(name) as "Lead Count" from `tabLead` where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) + data = frappe.db.sql("""select campaign_name as "Campaign Name", count(name) as "Lead Count" from `tabLead` + where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) dl=list(data) for row in dl: is_quot_count_zero = False @@ -54,16 +55,19 @@ def get_lead_quotation_count(campaign): def get_lead_opp_count(campaign): opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) return flt(opportunity_count[0][0]) if opportunity_count else 0 def get_quotation_ordered_count(campaign): quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` - where status = 'Ordered' and lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + where status = 'Ordered' and lead in + (select name from `tabLead` where campaign_name = %s)""",campaign) return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 def get_order_amount(campaign): ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in (select name from `tabQuotation` - where status = 'Ordered' and lead in (select name from `tabLead` where campaign_name = %s))""",campaign) + where prevdoc_docname in + (select name from `tabQuotation` + where status = 'Ordered' and lead in + (select name from `tabLead` where campaign_name = %s))""",campaign) return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js index 217070b28e..bbfd6ac9ff 100644 --- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js @@ -1,6 +1,5 @@ // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.require("assets/erpnext/js/financial_statements.js", function() { frappe.query_reports["Lead Owner Efficiency"] = { "filters": [ { @@ -15,7 +14,4 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { "fieldtype": "Date", "default": frappe.defaults.get_user_default("year_end_date"), } - ] - } -}); - + ]}; diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py index 0c63c951a4..7ac55180f2 100644 --- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py @@ -54,16 +54,18 @@ def get_lead_quotation_count(leadowner): def get_lead_opp_count(leadowner): opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) return flt(opportunity_count[0][0]) if opportunity_count else 0 def get_quotation_ordered_count(leadowner): quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` - where status = 'Ordered' and lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + where status = 'Ordered' and lead in + (select name from `tabLead` where lead_owner = %s)""",leadowner) return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 def get_order_amount(leadowner): ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in (select name from `tabQuotation` - where status = 'Ordered' and lead in (select name from `tabLead` where lead_owner = %s))""",leadowner) + where prevdoc_docname in (select name from `tabQuotation` + where status = 'Ordered' and lead in + (select name from `tabLead` where lead_owner = %s))""",leadowner) return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file From 134487ab2aa7a0d67307796462a389cb516f5c23 Mon Sep 17 00:00:00 2001 From: pawan Date: Mon, 24 Apr 2017 13:48:40 +0530 Subject: [PATCH 140/287] Changes after review --- .../campaign_efficiency.py | 19 ++++++++----------- .../lead_owner_efficiency.py | 17 +++++++++-------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py index aad64ff592..3088332351 100644 --- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py @@ -29,7 +29,7 @@ def get_lead_data(filters): if filters.to_date: conditions += " and date(creation) <= %(to_date)s" data = frappe.db.sql("""select campaign_name as "Campaign Name", count(name) as "Lead Count" from `tabLead` - where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) + where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) dl=list(data) for row in dl: is_quot_count_zero = False @@ -50,24 +50,21 @@ def get_lead_data(filters): def get_lead_quotation_count(campaign): quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` - where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) return flt(quotation_count[0][0]) if quotation_count else 0 def get_lead_opp_count(campaign): opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) + where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) return flt(opportunity_count[0][0]) if opportunity_count else 0 def get_quotation_ordered_count(campaign): - quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where campaign_name = %s)""",campaign) + quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` where status = 'Ordered' + and lead in (select name from `tabLead` where campaign_name = %s)""",campaign) return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 def get_order_amount(campaign): - ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in - (select name from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where campaign_name = %s))""",campaign) + ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` + where prevdoc_docname in (select name from `tabQuotation` where status = 'Ordered' and + lead in (select name from `tabLead` where campaign_name = %s))""",campaign) return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py index 7ac55180f2..1560f869d9 100644 --- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py @@ -28,7 +28,8 @@ def get_lead_data(filters): conditions += " and date(creation) >= %(from_date)s" if filters.to_date: conditions += " and date(creation) <= %(to_date)s" - data = frappe.db.sql("""select lead_owner as "Lead Owner", count(name) as "Lead Count" from `tabLead` where 1 = 1 %s group by lead_owner""" % (conditions,),filters, as_dict=1) + data = frappe.db.sql("""select lead_owner as "Lead Owner", count(name) as "Lead Count" + from `tabLead` where 1 = 1 %s group by lead_owner""" % (conditions,),filters, as_dict=1) dl=list(data) for row in dl: is_quot_count_zero = False @@ -49,23 +50,23 @@ def get_lead_data(filters): def get_lead_quotation_count(leadowner): quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` - where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) return flt(quotation_count[0][0]) if quotation_count else 0 def get_lead_opp_count(leadowner): opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) + where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) return flt(opportunity_count[0][0]) if opportunity_count else 0 def get_quotation_ordered_count(leadowner): quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where lead_owner = %s)""",leadowner) + where status = 'Ordered' and lead in + (select name from `tabLead` where lead_owner = %s)""",leadowner) return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 def get_order_amount(leadowner): ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in (select name from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where lead_owner = %s))""",leadowner) + where prevdoc_docname in (select name from `tabQuotation` + where status = 'Ordered' and lead in + (select name from `tabLead` where lead_owner = %s))""",leadowner) return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file From 6eaf281b2b4b73a8bed7af7b05b23ddbba4edcda Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 24 Apr 2017 18:26:13 +0530 Subject: [PATCH 141/287] Export and import program enrollments --- .../program_enrollment.json | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json index 988af05091..a07b3eec05 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json @@ -1,7 +1,7 @@ { "allow_copy": 0, "allow_guest_to_view": 0, - "allow_import": 0, + "allow_import": 1, "allow_rename": 0, "autoname": "PE.#####", "beta": 0, @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -44,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -74,6 +76,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -104,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -134,6 +138,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -164,6 +169,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -192,6 +198,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -222,6 +229,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -252,6 +260,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -282,6 +291,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -312,6 +322,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -341,6 +352,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -370,6 +382,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -400,6 +413,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -429,6 +443,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -460,6 +475,7 @@ "width": "" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -489,6 +505,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -530,7 +547,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-12 12:12:10.148274", + "modified": "2017-04-24 18:22:43.567607", "modified_by": "Administrator", "module": "Schools", "name": "Program Enrollment", From dd70fbfdae636146c68fea41d9b5dd61c3a06c17 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 24 Apr 2017 16:31:51 +0530 Subject: [PATCH 142/287] [fix] Letter head not showing in the report --- .../accounts_receivable/accounts_receivable.html | 5 ++++- erpnext/accounts/report/financial_statements.html | 12 ++++++++---- .../report/general_ledger/general_ledger.html | 5 ++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html index f463c07579..ba847c0061 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html @@ -1,6 +1,9 @@ +{% var letterhead= filters.letter_head || frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head"); %} +{% if(letterhead) { %}
    - {%= frappe.boot.letter_heads[frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head")] %} + {%= frappe.boot.letter_heads[letterhead].header %}
    +{% } %}

    {%= __(report.report_name) %}

    {%= filters.customer || filters.supplier %}

    diff --git a/erpnext/accounts/report/financial_statements.html b/erpnext/accounts/report/financial_statements.html index 6959e5d3ed..cd92139ce0 100644 --- a/erpnext/accounts/report/financial_statements.html +++ b/erpnext/accounts/report/financial_statements.html @@ -13,12 +13,16 @@ height: 37px; } +{% var letterhead= filters.letter_head || frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head"); %} +{% if(letterhead) { %}
    - {%= frappe.boot.letter_heads[frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head")] %} + {%= frappe.boot.letter_heads[letterhead].header %}
    +{% } %}

    {%= __(report.report_name) %}

    -

    {%= filters.company %}

    -

    {%= filters.fiscal_year %}

    +

    {%= filters.company %}

    +

    {%= filters.fiscal_year %}

    +
    {%= __("Currency") %} : {%= erpnext.get_currency(filters.company) %}
    {% if (filters.from_date) { %}

    {%= dateutil.str_to_user(filters.from_date) %} - {%= dateutil.str_to_user(filters.to_date) %}

    {% } %} @@ -47,7 +51,7 @@ {% var fieldname = report.columns[i].field; %} {% if (!is_null(row[fieldname])) { %} - {%= format_currency(row[fieldname], row.currency) %} + {%= format_number(row[fieldname], null)%} {% } %} {% } %} diff --git a/erpnext/accounts/report/general_ledger/general_ledger.html b/erpnext/accounts/report/general_ledger/general_ledger.html index 7552eed1ac..95918117c7 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.html +++ b/erpnext/accounts/report/general_ledger/general_ledger.html @@ -1,6 +1,9 @@ +{% var letterhead= filters.letter_head || frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head"); %} +{% if(letterhead) { %}
    - {%= frappe.boot.letter_heads[filters.letter_head || frappe.get_doc(":Company", filters.company).default_letter_head || frappe.defaults.get_default("letter_head")] %} + {%= frappe.boot.letter_heads[letterhead].header %}
    +{% } %}

    {%= __("Statement of Account") %}

    {%= (filters.party || filters.account) && ((filters.party || filters.account) + ", ") || "" %} {%= filters.company %}

    From e2741e85fdcfef418f3854784e1b4adc61b33d4f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 24 Apr 2017 19:29:01 +0600 Subject: [PATCH 143/287] bumped to version 8.0.16 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index e955c09b25..1065d6bee1 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.15' +__version__ = '8.0.16' def get_default_company(user=None): '''Get default company for user''' From 810e4837572f89ac3e5c332ccf0ac877d7f6d68a Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 18 Apr 2017 15:37:22 +0530 Subject: [PATCH 144/287] Changes in the student group --- .../student_batch_name/test_records.json | 8 + .../doctype/student_group/student_group.js | 89 +++- .../doctype/student_group/student_group.json | 419 ++++++++++++------ .../doctype/student_group/student_group.py | 85 ++-- .../doctype/student_group/test_records.json | 13 +- .../student_group_instructor/__init__.py | 0 .../student_group_instructor.json | 129 ++++++ .../student_group_instructor.py | 10 + .../student_group_student.json | 93 ++-- .../student_group_student.py | 2 +- 10 files changed, 631 insertions(+), 217 deletions(-) create mode 100644 erpnext/schools/doctype/student_batch_name/test_records.json create mode 100644 erpnext/schools/doctype/student_group_instructor/__init__.py create mode 100644 erpnext/schools/doctype/student_group_instructor/student_group_instructor.json create mode 100644 erpnext/schools/doctype/student_group_instructor/student_group_instructor.py diff --git a/erpnext/schools/doctype/student_batch_name/test_records.json b/erpnext/schools/doctype/student_batch_name/test_records.json new file mode 100644 index 0000000000..bf365c638a --- /dev/null +++ b/erpnext/schools/doctype/student_batch_name/test_records.json @@ -0,0 +1,8 @@ +[ + { + "batch_name": "_Batch 1" + }, + { + "batch_name": "_Batch 2" + } +] \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 595fa08d9d..2e2e121db9 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -1,19 +1,23 @@ cur_frm.add_fetch("student", "title", "student_name"); frappe.ui.form.on("Student Group", { + onload: function(frm) { + frm.set_query("academic_term", function() { + return { + "filters": { + "academic_year": (frm.doc.academic_year) + } + }; + }); + }, + refresh: function(frm) { if (!frm.doc.__islocal) { frm.add_custom_button(__("Course Schedule"), function() { - frappe.route_options = { - student_group: frm.doc.name - } frappe.set_route("List", "Course Schedule"); }); frm.add_custom_button(__("Assessment Plan"), function() { - frappe.route_options = { - student_group: frm.doc.name - } frappe.set_route("List", "Assessment Plan"); }); frm.add_custom_button(__("Update Email Group"), function() { @@ -30,19 +34,68 @@ frappe.ui.form.on("Student Group", { }); } }, + + group_based_on: function(frm) { + if (frm.doc.group_based_on == "Batch") { + frm.doc.course = null; + } + else if (frm.doc.group_based_on == "Course") { + frm.doc.program = null; + frm.doc.batch = null; + } + frm.trigger("set_name"); + }, - onload: function(frm) { - frm.set_query("academic_term", function() { - return { - "filters": { - "academic_year": (frm.doc.academic_year) + set_name: function(frm) { + var name; + if (frm.doc.group_based_on == "Course") { + name = "Course-" + frm.doc.course + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); + } else if (frm.doc.group_based_on == "Batch") { + name = "Batch-" + frm.doc.program + "-" + frm.doc.batch + "-" + + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); + } else if (frm.doc.group_based_on == "Activity") { + name = "Activity" + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); + } + frm.set_value("student_group_name", name); + }, + + program:function(frm) { + frm.trigger("set_name"); + }, + + batch:function(frm) { + frm.trigger("set_name"); + }, + + course:function(frm) { + frm.trigger("set_name"); + }, + + update_students: function(frm) { + if (frm.doc.students.length === 0) { + frm.doc.next_group_roll_number = 1; + } + frappe.call({ + method: "update_students", + doc:frm.doc, + callback: function(r) { + if(r.message) { + $.each(r.message, function(i, d) { + var s = frm.add_child("students"); + s.student = d.student; + s.student_name = d.student_name; + if (d.active === 0) { + s.active = 0; + } + s.group_roll_number = frm.doc.next_group_roll_number; + frm.doc.next_group_roll_number += 1; + }); + frm.save(); + } else { + frappe.msgprint(__("Group already updated")) } - }; - }); + } + }) } -}); -//If Student Batch is entered, deduce program, academic_year and academic term from it -cur_frm.add_fetch("student_batch", "program", "program"); -cur_frm.add_fetch("student_batch", "academic_term", "academic_term"); -cur_frm.add_fetch("student_batch", "academic_year", "academic_year"); \ No newline at end of file +}); \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json index cf42e2437f..8474f74545 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -1,8 +1,9 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, - "autoname": "", + "autoname": "field:student_group_name", "beta": 0, "creation": "2015-09-07 12:55:52.072792", "custom": 0, @@ -12,36 +13,6 @@ "editable_grid": 0, "engine": "InnoDB", "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -54,7 +25,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 1, "label": "Academic Year", "length": 0, @@ -77,107 +48,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "academic_term", - "fieldtype": "Link", + "fieldname": "group_based_on", + "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 1, - "in_standard_filter": 1, - "label": "Academic Term", - "length": 0, - "no_copy": 0, - "options": "Academic Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 1, - "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_global_search": 0, - "in_list_view": 0, "in_standard_filter": 0, + "label": "Group Based on", "length": 0, "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 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, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 1, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "course", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Course", - "length": 0, - "no_copy": 0, - "options": "Course", + "options": "\nBatch\nCourse\nActivity", "permlevel": 0, "precision": "", "print_hide": 0, @@ -220,12 +103,194 @@ "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.group_based_on == 'Batch'", + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 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, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.group_based_on == 'Batch'", + "fieldname": "batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Batch", + "length": 0, + "no_copy": 0, + "options": "Student Batch Name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.group_based_on == 'Course'", + "fieldname": "course", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Course", + "length": 0, + "no_copy": 0, + "options": "Course", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "group_based_on", + "fieldname": "student_group_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Group Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, "collapsible": 0, "collapsible_depends_on": "", "columns": 0, + "depends_on": "eval:!doc.__islocal", "fieldname": "section_break_6", "fieldtype": "Section Break", "hidden": 0, @@ -250,6 +315,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "update_students", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Update Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 1, "bold": 0, @@ -285,8 +379,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", + "fieldname": "section_break_12", + "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -294,12 +388,71 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Amended From", + "label": "Instructors", "length": 0, - "no_copy": 1, - "options": "Student Group", + "no_copy": 0, "permlevel": 0, - "print_hide": 1, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "instructors", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Instructors", + "length": 0, + "no_copy": 0, + "options": "Student Group Instructor", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "next_group_roll_number", + "fieldtype": "Int", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Next Group Roll Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 1, "remember_last_selected_value": 0, @@ -310,18 +463,18 @@ "unique": 0 } ], + "has_web_view": 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, "menu_index": 0, - "modified": "2017-02-17 17:16:31.682311", + "modified": "2017-04-19 12:48:46.526133", "modified_by": "Administrator", "module": "Schools", "name": "Student Group", @@ -372,7 +525,7 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, - "search_fields": "program, course", + "search_fields": "program, batch, course", "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index 996f518813..56c3524717 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -10,47 +10,64 @@ from erpnext.schools.utils import validate_duplicate_student from erpnext.schools.api import get_student_batch_students class StudentGroup(Document): - def autoname(self): - self.name = frappe.db.get_value("Course", self.course, "course_abbreviation") - if not self.name: - self.name = self.course - if self.student_batch: - self.name += "-" + self.student_batch - else: - prog_abb = frappe.db.get_value("Program", self.program, "program_abbreviation") - if not prog_abb: - prog_abb = self.program - if prog_abb: - self.name += "-" + prog_abb - if self.academic_year: - self.name += "-" + self.academic_year - if self.academic_term: - self.name += "-" + self.academic_term - def validate(self): + self.validate_mandatory_fields() self.validate_strength() - self.validate_student_name() - self.validate_name() - if self.student_batch: - self.validate_student_batch() + self.validate_students() validate_duplicate_student(self.students) + def validate_mandatory_fields(self): + if self.group_based_on == "Course" and not self.course: + frappe.throw(_("Please select Course")) + elif self.group_based_on == "Batch" and (not self.program or not self.batch): + frappe.throw(_("Please select Program and Batch")) + def validate_strength(self): if self.max_strength and len(self.students) > self.max_strength: frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength)) - def validate_student_name(self): + def validate_students(self): + program_enrollment = self.get_program_enrollment() + students = [d.student for d in program_enrollment] if program_enrollment else None for d in self.students: - d.student_name = frappe.db.get_value("Student", d.student, "title") - - def validate_name(self): - if frappe.db.exists("Student Batch", self.name): - frappe.throw(_("""Student Batch exists with same name""")) + if d.student not in students: + frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.student, d.student_name, self.group_based_on))) + if not frappe.db.get_value("Student", d.student, "enabled") and d.active: + d.active = 0 + frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name))) - def validate_student_batch(self): - student_batch_students = [] - for d in get_student_batch_students(self.student_batch): - student_batch_students.append(d.student) - for d in self.students: - if d.student not in student_batch_students: - frappe.throw(_("""Student {0}: {1} does not belong to Student Batch {2}""".format(d.student, d.student_name, self.student_batch))) \ No newline at end of file + + def update_students(self): + enrolled_students = self.get_program_enrollment() + group_student_list = [student.student for student in self.students] + + if enrolled_students: + student_list = []; + for s in enrolled_students: + if s.student not in group_student_list: + student_list.append(s.update({"active": 1}) if frappe.db.get_value("Student", s.student, "enabled") + else s.update({"active": 0})) + return student_list + elif self.group_based_on != "Activity": + frappe.throw(_("No students are enrolled in the given {}".format(self.group_based_on))) + else: + frappe.throw(_("Select students manually for the Activity based Group")) + + def get_program_enrollment(self): + if self.group_based_on == "Batch": + return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s + and program = %s and student_batch_name = %s order by student_name asc''',(self.academic_year, self.program, self.batch), as_dict=1) + + elif self.group_based_on == "Course": + return frappe.db.sql(''' + select + pe.student, pe.student_name + from + `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec + where + pe.name = pec.parent and pec.course = %s + order by + pe.student_name asc + ''', (self.course), as_dict=1) + else: + return diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json index 06cb086c20..106368d7c9 100644 --- a/erpnext/schools/doctype/student_group/test_records.json +++ b/erpnext/schools/doctype/student_group/test_records.json @@ -1,14 +1,23 @@ [ { + "student_group_name": "Batch-_TP1-_Batch 1-2014-2015 (_Test Academic Term)", + "group_based_on": "Batch", "program": "_TP1", - "course": "TC100", + "batch": "_Batch 1", "academic_year": "2014-2015", "academic_term": "2014-2015 (_Test Academic Term)" }, { - "program": "_TP2", + "student_group_name": "Course-TC101-2014-2015 (_Test Academic Term)", + "group_based_on": "Course", "course": "TC101", "academic_year": "2014-2015", "academic_term": "2014-2015 (_Test Academic Term)" + }, + { + "student_group_name": "Activity-2014-2015 (_Test Academic Term)", + "group_based_on": "Activity", + "academic_year": "2014-2015", + "academic_term": "2014-2015 (_Test Academic Term)" } ] \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group_instructor/__init__.py b/erpnext/schools/doctype/student_group_instructor/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/student_group_instructor/student_group_instructor.json b/erpnext/schools/doctype/student_group_instructor/student_group_instructor.json new file mode 100644 index 0000000000..541e9b336b --- /dev/null +++ b/erpnext/schools/doctype/student_group_instructor/student_group_instructor.json @@ -0,0 +1,129 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-04-17 16:06:01.406768", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "instructor", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Instructor", + "length": 0, + "no_copy": 0, + "options": "Instructor", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "instructor_name", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Instructor Name", + "length": 0, + "no_copy": 0, + "options": "instructor.instructor_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-04-17 16:06:05.792863", + "modified_by": "Administrator", + "module": "Schools", + "name": "Student Group Instructor", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group_instructor/student_group_instructor.py b/erpnext/schools/doctype/student_group_instructor/student_group_instructor.py new file mode 100644 index 0000000000..b6cc588b67 --- /dev/null +++ b/erpnext/schools/doctype/student_group_instructor/student_group_instructor.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, 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 StudentGroupInstructor(Document): + pass diff --git a/erpnext/schools/doctype/student_group_student/student_group_student.json b/erpnext/schools/doctype/student_group_student/student_group_student.json index 5ca7b66c35..5fc434adf4 100644 --- a/erpnext/schools/doctype/student_group_student/student_group_student.json +++ b/erpnext/schools/doctype/student_group_student/student_group_student.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -21,6 +22,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Student", @@ -39,33 +41,6 @@ "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, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -77,6 +52,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Student Name", @@ -94,6 +70,63 @@ "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "group_roll_number", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Group Roll Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -106,6 +139,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Active", @@ -124,17 +158,17 @@ "unique": 0 } ], + "has_web_view": 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": "2017-01-27 14:49:54.533005", + "modified": "2017-04-12 14:56:07.532226", "modified_by": "Administrator", "module": "Schools", "name": "Student Group Student", @@ -144,6 +178,7 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", "track_changes": 0, diff --git a/erpnext/schools/doctype/student_group_student/student_group_student.py b/erpnext/schools/doctype/student_group_student/student_group_student.py index 1fe4ea1dc3..820e30118d 100644 --- a/erpnext/schools/doctype/student_group_student/student_group_student.py +++ b/erpnext/schools/doctype/student_group_student/student_group_student.py @@ -7,4 +7,4 @@ import frappe from frappe.model.document import Document class StudentGroupStudent(Document): - pass + pass \ No newline at end of file From 629326309502c21707ec95772e3ed45e4aab3890 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 21 Apr 2017 16:46:47 +0530 Subject: [PATCH 145/287] test case fixed --- .../course_schedule/course_schedule.py | 2 +- .../course_schedule/test_course_schedule.py | 10 +-- .../doctype/student_group/student_group.js | 64 ++++++++++++------- .../doctype/student_group/student_group.json | 49 +++++--------- .../doctype/student_group/student_group.py | 63 +++++++++--------- .../doctype/student_group/test_records.json | 7 ++ 6 files changed, 99 insertions(+), 96 deletions(-) diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.py b/erpnext/schools/doctype/course_schedule/course_schedule.py index 7550ab1c47..02a842e418 100644 --- a/erpnext/schools/doctype/course_schedule/course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/course_schedule.py @@ -13,7 +13,7 @@ class CourseSchedule(Document): self.set_title() self.validate_mandatory() self.validate_course() - self.set_student_batch() + # self.set_student_batch() self.validate_date() self.validate_overlap() diff --git a/erpnext/schools/doctype/course_schedule/test_course_schedule.py b/erpnext/schools/doctype/course_schedule/test_course_schedule.py index 795486a888..6a3456fefc 100644 --- a/erpnext/schools/doctype/course_schedule/test_course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/test_course_schedule.py @@ -24,28 +24,28 @@ class TestCourseSchedule(unittest.TestCase): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1) + student_group="Course-TC101-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_room_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1) + student_group="Course-TC101-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_no_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="TC1-TP2-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002") + student_group="Course-TC102-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002") def make_course_schedule_test_record(**args): args = frappe._dict(args) course_schedule = frappe.new_doc("Course Schedule") - course_schedule.student_group = args.student_group or "TC-TP1-2014-2015-2014-2015 (_Test Academic Term)" - course_schedule.course = args.course or "TC100" + course_schedule.student_group = args.student_group or "Course-TC101-2014-2015 (_Test Academic Term)" + course_schedule.course = args.course or "TC101" course_schedule.instructor = args.instructor or "_T-Instructor-00001" course_schedule.room = args.room or "RM0001" diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 2e2e121db9..2068644ea0 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -71,31 +71,47 @@ frappe.ui.form.on("Student Group", { frm.trigger("set_name"); }, - update_students: function(frm) { - if (frm.doc.students.length === 0) { - frm.doc.next_group_roll_number = 1; - } - frappe.call({ - method: "update_students", - doc:frm.doc, - callback: function(r) { - if(r.message) { - $.each(r.message, function(i, d) { - var s = frm.add_child("students"); - s.student = d.student; - s.student_name = d.student_name; - if (d.active === 0) { - s.active = 0; - } - s.group_roll_number = frm.doc.next_group_roll_number; - frm.doc.next_group_roll_number += 1; - }); - frm.save(); - } else { - frappe.msgprint(__("Group already updated")) + get_students: function(frm) { + if (frm.doc.group_based_on != "Activity") { + var student_list = []; + var max_roll_no = 0; + $.each(frm.doc.students, function(i,d) { + student_list.push(d.student); + if (d.group_roll_number>max_roll_no) { + max_roll_no = d.group_roll_number; } - } - }) + }); + frappe.call({ + method: "erpnext.schools.doctype.student_group.student_group.get_students", + args: { + "academic_year": frm.doc.academic_year, + "group_based_on": frm.doc.group_based_on, + "program": frm.doc.program, + "batch" : frm.doc.batch, + "course": frm.doc.course + }, + callback: function(r) { + if(r.message) { + $.each(r.message, function(i, d) { + if(!in_list(student_list, d.student)) { + var s = frm.add_child("students"); + s.student = d.student; + s.student_name = d.student_name; + if (d.active === 0) { + s.active = 0; + } + s.group_roll_number = ++max_roll_no; + } + }); + frm.save(); + } else { + frappe.msgprint(__("Student Group is already updated.")) + } + } + }) + } else { + frappe.msgprint(__("Select students manually for the Activity based Group")); + } } }); \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json index 8474f74545..59c5eab053 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -44,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -74,6 +76,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -104,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -132,6 +136,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -162,6 +167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -193,6 +199,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -224,6 +231,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -255,6 +263,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -285,6 +294,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -316,11 +326,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "update_students", + "fieldname": "get_students", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, @@ -329,7 +340,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Update Students", + "label": "Get Students", "length": 0, "no_copy": 0, "permlevel": 0, @@ -345,6 +356,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -375,6 +387,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -404,6 +417,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -432,35 +446,6 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "next_group_roll_number", - "fieldtype": "Int", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Next Group Roll Number", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 } ], "has_web_view": 0, @@ -474,7 +459,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-19 12:48:46.526133", + "modified": "2017-04-24 15:53:35.593913", "modified_by": "Administrator", "module": "Schools", "name": "Student Group", diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index 56c3524717..dba8c925a7 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -27,47 +27,42 @@ class StudentGroup(Document): frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength)) def validate_students(self): - program_enrollment = self.get_program_enrollment() + program_enrollment = get_program_enrollment(self.academic_year, self.group_based_on, self.program, self.batch, self.course) students = [d.student for d in program_enrollment] if program_enrollment else None for d in self.students: - if d.student not in students: + if self.group_based_on != "Activity" and d.student not in students: frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.student, d.student_name, self.group_based_on))) if not frappe.db.get_value("Student", d.student, "enabled") and d.active: d.active = 0 frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name))) +@frappe.whitelist() +def get_students(academic_year, group_based_on, program=None, batch=None, course=None): + enrolled_students = get_program_enrollment(academic_year, group_based_on, program, batch, course) - def update_students(self): - enrolled_students = self.get_program_enrollment() - group_student_list = [student.student for student in self.students] + if enrolled_students: + student_list = [] + for s in enrolled_students: + if frappe.db.get_value("Student", s.student, "enabled"): + s.update({"active": 1}) + else: + s.update({"active": 0}) + student_list.append(s) + return student_list - if enrolled_students: - student_list = []; - for s in enrolled_students: - if s.student not in group_student_list: - student_list.append(s.update({"active": 1}) if frappe.db.get_value("Student", s.student, "enabled") - else s.update({"active": 0})) - return student_list - elif self.group_based_on != "Activity": - frappe.throw(_("No students are enrolled in the given {}".format(self.group_based_on))) - else: - frappe.throw(_("Select students manually for the Activity based Group")) +def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None): + if group_based_on == "Batch": + return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s + and program = %s and student_batch_name = %s order by student_name asc''',(academic_year, program, batch), as_dict=1) - def get_program_enrollment(self): - if self.group_based_on == "Batch": - return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s - and program = %s and student_batch_name = %s order by student_name asc''',(self.academic_year, self.program, self.batch), as_dict=1) - - elif self.group_based_on == "Course": - return frappe.db.sql(''' - select - pe.student, pe.student_name - from - `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec - where - pe.name = pec.parent and pec.course = %s - order by - pe.student_name asc - ''', (self.course), as_dict=1) - else: - return + elif group_based_on == "Course": + return frappe.db.sql(''' + select + pe.student, pe.student_name + from + `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec + where + pe.name = pec.parent and pec.course = %s + order by + pe.student_name asc + ''', (course), as_dict=1) \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json index 106368d7c9..c36c9b297c 100644 --- a/erpnext/schools/doctype/student_group/test_records.json +++ b/erpnext/schools/doctype/student_group/test_records.json @@ -14,6 +14,13 @@ "academic_year": "2014-2015", "academic_term": "2014-2015 (_Test Academic Term)" }, + { + "student_group_name": "Course-TC102-2014-2015 (_Test Academic Term)", + "group_based_on": "Course", + "course": "TC102", + "academic_year": "2014-2015", + "academic_term": "2014-2015 (_Test Academic Term)" + }, { "student_group_name": "Activity-2014-2015 (_Test Academic Term)", "group_based_on": "Activity", From 4cc5e61f60ddfccec4ac28d05290084ac6bce54c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 24 Apr 2017 19:00:37 +0530 Subject: [PATCH 146/287] Update course_schedule.py --- erpnext/schools/doctype/course_schedule/course_schedule.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.py b/erpnext/schools/doctype/course_schedule/course_schedule.py index 02a842e418..d12ae9dfbf 100644 --- a/erpnext/schools/doctype/course_schedule/course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/course_schedule.py @@ -13,7 +13,6 @@ class CourseSchedule(Document): self.set_title() self.validate_mandatory() self.validate_course() - # self.set_student_batch() self.validate_date() self.validate_overlap() From e3c122d8c4f119b7167fd51dd337f384025c9188 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 24 Apr 2017 17:03:50 +0530 Subject: [PATCH 147/287] AR report: filter based on customer group and credit days based on field. Fixed #8214 --- .../accounts_receivable.js | 18 ++++++++-- .../accounts_receivable.py | 33 +++++++++++++++---- .../accounts_receivable_summary.js | 18 ++++++++-- .../accounts_receivable_summary.py | 9 +++-- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js index 9bc5c2f2c1..f98d0378ed 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js @@ -16,6 +16,21 @@ frappe.query_reports["Accounts Receivable"] = { "fieldtype": "Link", "options": "Customer" }, + { + "fieldname":"customer_group", + "label": __("Customer Group"), + "fieldtype": "Link", + "options": "Customer Group" + }, + { + "fieldname":"credit_days_based_on", + "label": __("Credit Days Based On"), + "fieldtype": "Select", + "options": "" + NEWLINE + "Fixed Days" + NEWLINE + "Last Day of the Next Month" + }, + { + "fieldtype": "Break", + }, { "fieldname":"report_date", "label": __("As on Date"), @@ -29,9 +44,6 @@ frappe.query_reports["Accounts Receivable"] = { "options": 'Posting Date' + NEWLINE + 'Due Date', "default": "Posting Date" }, - { - "fieldtype": "Break", - }, { "fieldname":"range1", "label": __("Ageing Range 1"), diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 6d1e1686d1..62d0d5a167 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -71,7 +71,10 @@ class ReceivablePayableReport(object): "width": 100 }) if args.get("party_type") == "Customer": - columns += [_("Territory") + ":Link/Territory:80"] + columns += [ + _("Territory") + ":Link/Territory:80", + _("Customer Group") + ":Link/Customer Group:120" + ] if args.get("party_type") == "Supplier": columns += [_("Supplier Type") + ":Link/Supplier Type:80"] @@ -139,7 +142,7 @@ class ReceivablePayableReport(object): # customer territory / supplier type if args.get("party_type") == "Customer": - row += [self.get_territory(gle.party)] + row += [self.get_territory(gle.party), self.get_customer_group(gle.party)] if args.get("party_type") == "Supplier": row += [self.get_supplier_type(gle.party)] @@ -186,6 +189,9 @@ class ReceivablePayableReport(object): def get_territory(self, party_name): return self.get_party_map("Customer").get(party_name, {}).get("territory") or "" + + def get_customer_group(self, party_name): + return self.get_party_map("Customer").get(party_name, {}).get("customer_group") or "" def get_supplier_type(self, party_name): return self.get_party_map("Supplier").get(party_name, {}).get("supplier_type") or "" @@ -193,12 +199,12 @@ class ReceivablePayableReport(object): def get_party_map(self, party_type): if not hasattr(self, "party_map"): if party_type == "Customer": - self.party_map = dict(((r.name, r) for r in frappe.db.sql("""select {0}, {1}, {2} from `tab{3}`""" - .format("name", "customer_name", "territory", party_type), as_dict=True))) - + select_fields = "name, customer_name, territory, customer_group" elif party_type == "Supplier": - self.party_map = dict(((r.name, r) for r in frappe.db.sql("""select {0}, {1}, {2} from `tab{3}`""" - .format("name", "supplier_name", "supplier_type", party_type), as_dict=True))) + select_fields = "name, supplier_name, supplier_type" + + self.party_map = dict(((r.name, r) for r in frappe.db.sql("select {0} from `tab{1}`" + .format(select_fields, party_type), as_dict=True))) return self.party_map @@ -251,6 +257,19 @@ class ReceivablePayableReport(object): conditions.append("party=%s") values.append(self.filters.get(party_type_field)) + if party_type_field=="customer": + if self.filters.get("customer_group"): + lft, rgt = frappe.db.get_value("Customer Group", + self.filters.get("customer_group"), ["lft", "rgt"]) + + conditions.append("""party in (select name from tabCustomer + where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1} + and name=tabCustomer.customer_group))""".format(lft, rgt)) + + if self.filters.get("credit_days_based_on"): + conditions.append("party in (select name from tabCustomer where credit_days_based_on=%s)") + values.append(self.filters.get("credit_days_based_on")) + return " and ".join(conditions), values def get_gl_entries_for(self, party, party_type, against_voucher_type, against_voucher): diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js index 5cc0566717..a18c1a7e79 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js @@ -16,6 +16,21 @@ frappe.query_reports["Accounts Receivable Summary"] = { "fieldtype": "Link", "options": "Customer" }, + { + "fieldname":"customer_group", + "label": __("Customer Group"), + "fieldtype": "Link", + "options": "Customer Group" + }, + { + "fieldname":"credit_days_based_on", + "label": __("Credit Days Based On"), + "fieldtype": "Select", + "options": "" + NEWLINE + "Fixed Days" + NEWLINE + "Last Day of the Next Month" + }, + { + "fieldtype": "Break", + }, { "fieldname":"report_date", "label": __("Date"), @@ -29,9 +44,6 @@ frappe.query_reports["Accounts Receivable Summary"] = { "options": 'Posting Date' + NEWLINE + 'Due Date', "default": "Posting Date" }, - { - "fieldtype": "Break", - }, { "fieldname":"range1", "label": __("Ageing Range 1"), diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py index 8c627b659d..81bcccb281 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py @@ -27,7 +27,10 @@ class AccountsReceivableSummary(ReceivablePayableReport): str(self.filters.range3) + _("-Above") + ":Currency/currency:100"] if args.get("party_type") == "Customer": - columns += [_("Territory") + ":Link/Territory:80"] + columns += [ + _("Territory") + ":Link/Territory:80", + _("Customer Group") + ":Link/Customer Group:120" + ] if args.get("party_type") == "Supplier": columns += [_("Supplier Type") + ":Link/Supplier Type:80"] @@ -58,7 +61,7 @@ class AccountsReceivableSummary(ReceivablePayableReport): ] if args.get("party_type") == "Customer": - row += [self.get_territory(party)] + row += [self.get_territory(party), self.get_customer_group(party)] if args.get("party_type") == "Supplier": row += [self.get_supplier_type(party)] @@ -107,7 +110,7 @@ class AccountsReceivableSummary(ReceivablePayableReport): if args.get("party_type") == "Supplier": cols += ["supplier_type", "remarks"] if args.get("party_type") == "Customer": - cols += ["territory", "remarks"] + cols += ["territory", "customer_group", "remarks"] return self.make_data_dict(cols, voucherwise_data) From 5687e2da9d8a32c37a2ec0b4fe5f64a75672836c Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Thu, 20 Apr 2017 11:09:43 +0530 Subject: [PATCH 148/287] [ui-fix] POS item list --- erpnext/public/css/erpnext.css | 3 +++ erpnext/public/less/erpnext.less | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css index 7b6e5a1e99..fd240064ca 100644 --- a/erpnext/public/css/erpnext.css +++ b/erpnext/public/css/erpnext.css @@ -297,6 +297,9 @@ body[data-route="pos"] .item-list { body[data-route="pos"] .item-list .image-field { height: 140px; } +body[data-route="pos"] .item-list .image-field .placeholder-text { + font-size: 50px; +} body[data-route="pos"] .item-list .pos-item-wrapper { position: relative; } diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less index c06bdf9e69..0431848f86 100644 --- a/erpnext/public/less/erpnext.less +++ b/erpnext/public/less/erpnext.less @@ -351,6 +351,10 @@ body[data-route="pos"] { .image-field { height: 140px; + + .placeholder-text { + font-size: 50px; + } } .pos-item-wrapper { From 9cf6d630e9853ec31d1f225d71193de615e54454 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 25 Apr 2017 12:55:21 +0530 Subject: [PATCH 149/287] [minor] fixes for expense claim status --- .../doctype/journal_entry/journal_entry.py | 2 +- .../hr/doctype/expense_claim/expense_claim.js | 10 ++++++++-- erpnext/patches.txt | 1 + ...tatus_as_paid_for_completed_expense_claim.py | 17 +++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index b9b8fc2968..34d9de7064 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -514,7 +514,7 @@ class JournalEntry(AccountsController): def update_expense_claim(self): for d in self.accounts: - if d.reference_type=="Expense Claim" and d.party: + if d.reference_type=="Expense Claim" and d.reference_name: doc = frappe.get_doc("Expense Claim", d.reference_name) update_reimbursed_amount(doc) diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js index 496120888d..95877cf032 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/expense_claim.js @@ -18,14 +18,20 @@ erpnext.hr.ExpenseClaimController = frappe.ui.form.Controller.extend({ }); }, - expense_type: function(frm, cdt, cdn) { + expense_type: function(doc, cdt, cdn) { var d = locals[cdt][cdn]; + if(!doc.company) { + d.expense_type = ""; + frappe.msgprint(__("Please set the Company")); + this.frm.refresh_fields() + return; + } return frappe.call({ method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account", args: { "expense_claim_type": d.expense_type, - "company": frm.company + "company": doc.company }, callback: function(r) { if (r.message) { diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 111cd65dc2..d68a1d82a5 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -389,3 +389,4 @@ erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically erpnext.patches.v8_0.set_project_copied_from +erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim diff --git a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py new file mode 100644 index 0000000000..644b8cd035 --- /dev/null +++ b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py @@ -0,0 +1,17 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + """ set status as Paid in Expense Claim if total_sactioned_amount + and total_amount_reimbursed is equal """ + + frappe.db.sql(""" + update + `tabExpense Claim` + set status = 'Paid' + where + total_sanctioned_amount = total_amount_reimbursed + """) \ No newline at end of file From c61dc9c7ea80591d913521013b41a5b07de6c9ce Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 25 Apr 2017 12:16:42 +0530 Subject: [PATCH 150/287] Change in the assessment tool --- .../assessment_plan/assessment_plan.json | 406 ++++++++---------- .../assessment_result_tool.js | 12 +- 2 files changed, 175 insertions(+), 243 deletions(-) diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.json b/erpnext/schools/doctype/assessment_plan/assessment_plan.json index a5bcc705c5..042bdaf774 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.json +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "field:assessment_name", @@ -13,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -42,36 +44,7 @@ "unique": 0 }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "assessment_code", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Assessment Code", - "length": 0, - "no_copy": 0, - "options": "Assessment Code", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -102,209 +75,7 @@ "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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "course", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Course", - "length": 0, - "no_copy": 0, - "options": "Course", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "maximum_assessment_score", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Maximum Assessment Score", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "grading_scale", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Grading Scale", - "length": 0, - "no_copy": 0, - "options": "Grading Scale", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "section_break_10", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_group", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Student Group", - "length": 0, - "no_copy": 0, - "options": "Student Group", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_10", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -335,6 +106,159 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_group", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Student Group", + "length": 0, + "no_copy": 0, + "options": "Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "course", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Course", + "length": 0, + "no_copy": 0, + "options": "Course", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "maximum_assessment_score", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Maximum Assessment Score", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grading_scale", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Grading Scale", + "length": 0, + "no_copy": 0, + "options": "Grading Scale", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -366,6 +290,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -396,6 +321,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -426,6 +352,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -456,6 +383,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -485,6 +413,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -513,6 +442,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -542,6 +472,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -571,6 +502,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -601,6 +533,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -630,6 +563,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -658,6 +592,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -688,6 +623,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -717,18 +653,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-02-13 19:34:09.724549", + "modified": "2017-04-25 12:23:32.528982", "modified_by": "Administrator", "module": "Schools", "name": "Assessment Plan", diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js index 6967a7d293..e7c51d460d 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js @@ -1,3 +1,4 @@ + // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt @@ -5,19 +6,14 @@ cur_frm.add_fetch("assessment_plan", "student_group", "student_group"); cur_frm.add_fetch("assessment_plan", "student_batch", "student_batch"); frappe.ui.form.on('Assessment Result Tool', { - - onload: function(frm) { + refresh: function(frm) { if (frappe.route_options) { - frm.doc.assessment_plan = frappe.route_options.assessment_plan; frappe.route_options = null; } + frm.disable_save(); + frm.page.clear_indicator(); }, - refresh: function(frm) { - frm.disable_save(); - frm.page.clear_indicator(); - }, - assessment_plan: function(frm) { if(!(frm.doc.student_batch || frm.doc.student_group)) return; frappe.call({ From d7afa69c6f5d7cf99900859515c3d336aac270f1 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 25 Apr 2017 13:22:44 +0530 Subject: [PATCH 151/287] fix --- erpnext/schools/doctype/assessment_plan/assessment_plan.js | 3 ++- .../doctype/assessment_result_tool/assessment_result_tool.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.js b/erpnext/schools/doctype/assessment_plan/assessment_plan.js index cafe3a10e8..b1e87687ff 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.js +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.js @@ -11,7 +11,8 @@ frappe.ui.form.on("Assessment Plan", { if (frm.doc.docstatus == 1) { frm.add_custom_button(__("Assessment Result"), function() { frappe.route_options = { - assessment_plan: frm.doc.name + assessment_plan: frm.doc.name, + student_batch: frm.doc.student_batch } frappe.set_route("Form", "Assessment Result Tool"); }); diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js index e7c51d460d..213111ac4d 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js @@ -8,6 +8,8 @@ cur_frm.add_fetch("assessment_plan", "student_batch", "student_batch"); frappe.ui.form.on('Assessment Result Tool', { refresh: function(frm) { if (frappe.route_options) { + frm.set_value("student_batch", frappe.route_options.student_batch); + frm.set_value("assessment_plan", frappe.route_options.assessment_plan); frappe.route_options = null; } frm.disable_save(); From 9b20e0743112cf417dc3244172cd9d6f9c26f8a5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 12:10:24 +0530 Subject: [PATCH 152/287] [fix] currency field precision --- erpnext/accounts/utils.py | 21 ++++---- .../purchase_order_item.json | 4 +- .../quotation_item/quotation_item.json | 54 ++++++++++++++++++- .../doctype/email_digest/email_digest.py | 2 +- 4 files changed, 65 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 854f302274..2c1448c8b3 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -4,13 +4,13 @@ from __future__ import unicode_literals import frappe +import frappe.defaults from frappe.utils import nowdate, cstr, flt, cint, now, getdate from frappe import throw, _ -from frappe.utils import formatdate +from frappe.utils import formatdate, get_number_format_info # imported to enable erpnext.accounts.utils.get_account_currency from erpnext.accounts.doctype.account.account import get_account_currency -import frappe.defaults from erpnext.accounts.report.financial_statements import sort_root_accounts class FiscalYearError(frappe.ValidationError): pass @@ -537,15 +537,14 @@ def get_stock_and_account_difference(account_list=None, posting_date=None): return difference -def get_currency_precision(currency=None): - if not currency: - currency = frappe.db.get_value("Company", - frappe.db.get_default("Company"), "default_currency", cache=True) - currency_format = frappe.db.get_value("Currency", currency, "number_format", cache=True) - - from frappe.utils import get_number_format_info - return get_number_format_info(currency_format)[2] - +def get_currency_precision(): + precision = cint(frappe.db.get_default("currency_precision")) + if not precision: + number_format = frappe.db.get_default("number_format") or "#,###.##" + precision = get_number_format_info(number_format)[2] + + return precision + def get_stock_rbnb_difference(posting_date, company): stock_items = frappe.db.sql_list("""select distinct item_code from `tabStock Ledger Entry` where company=%s""", company) diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index 0037745817..b269cb8019 100755 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -800,7 +800,7 @@ "oldfieldtype": "Currency", "options": "Company:company:default_currency", "permlevel": 0, - "precision": "9", + "precision": "", "print_hide": 1, "print_hide_if_no_value": 0, "print_width": "100px", @@ -1659,7 +1659,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-18 18:49:08.604055", + "modified": "2017-04-25 18:49:08.604055", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json index 3a7342738a..fe747ec4f8 100644 --- a/erpnext/selling/doctype/quotation_item/quotation_item.json +++ b/erpnext/selling/doctype/quotation_item/quotation_item.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -47,6 +48,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -75,6 +77,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -102,6 +105,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -134,6 +138,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -163,6 +168,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -195,6 +201,7 @@ "width": "300px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -223,6 +230,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -252,6 +260,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -282,6 +291,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,6 +320,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -342,6 +353,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -375,6 +387,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -402,6 +415,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -432,6 +446,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -461,6 +476,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -490,6 +506,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -518,6 +535,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -551,6 +569,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -584,6 +603,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -613,6 +633,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -646,6 +667,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -674,6 +696,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -705,6 +728,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -735,6 +759,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -765,6 +790,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -792,6 +818,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -813,7 +840,7 @@ "oldfieldtype": "Currency", "options": "currency", "permlevel": 0, - "precision": "9", + "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, "print_width": "100px", @@ -827,6 +854,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -856,6 +884,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -889,6 +918,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -919,6 +949,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -946,6 +977,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -979,6 +1011,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1008,6 +1041,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1041,6 +1075,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1071,6 +1106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1100,6 +1136,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1130,6 +1167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1160,6 +1198,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1188,6 +1227,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1217,6 +1257,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1247,6 +1288,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1276,6 +1318,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1304,6 +1347,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1337,6 +1381,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1370,6 +1415,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1400,6 +1446,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1427,6 +1474,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1457,6 +1505,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1489,6 +1538,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1533,7 +1583,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-18 18:47:26.869235", + "modified": "2017-04-25 10:34:17.987184", "modified_by": "Administrator", "module": "Selling", "name": "Quotation Item", diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index a7dfa7cb31..b66fd4d0e4 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -10,7 +10,7 @@ from datetime import timedelta from dateutil.relativedelta import relativedelta from frappe.core.doctype.user.user import STANDARD_USERS import frappe.desk.notifications -from erpnext.accounts.utils import get_balance_on, get_count_on, get_currency_precision +from erpnext.accounts.utils import get_balance_on, get_count_on user_specific_content = ["calendar_events", "todo_list"] From 66951e528f9dd0844441ff59936de5c5d835c0a1 Mon Sep 17 00:00:00 2001 From: sburanaw Date: Tue, 25 Apr 2017 15:28:57 +0700 Subject: [PATCH 153/287] Fix an import typo in get_item_details.py --- erpnext/stock/get_item_details.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index a6459c53ec..66ab6aceb6 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -405,7 +405,7 @@ def get_bin_details_and_serial_nos(item_code, warehouse, stock_qty=None, serial_ @frappe.whitelist() def get_batch_qty(batch_no, warehouse, item_code): - from frappe.stock.doctype.batch import batch + from erpnext.stock.doctype.batch import batch if batch_no: return {'actual_batch_qty': batch.get_batch_qty(batch_no, warehouse)} From 8590d5b05d012774079a13a5ad54df0445a7e4c8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 15:00:50 +0600 Subject: [PATCH 154/287] bumped to version 8.0.17 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 1065d6bee1..734c8e8ca2 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.16' +__version__ = '8.0.17' def get_default_company(user=None): '''Get default company for user''' From 020dedd00e14e53eb6998ba8700500eeb276b306 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 16:05:01 +0530 Subject: [PATCH 155/287] Cleaned up and commonified the campaign efficiency and lead owner efficiency report --- .../campaign_efficiency.py | 113 ++++++++++-------- .../lead_owner_efficiency.py | 72 ++--------- 2 files changed, 79 insertions(+), 106 deletions(-) diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py index 3088332351..b20fe15ce2 100644 --- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py @@ -4,67 +4,86 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import flt,cstr -from erpnext.accounts.report.financial_statements import get_period_list def execute(filters=None): columns, data = [], [] columns=get_columns() - data=get_lead_data(filters) + data=get_lead_data(filters, "Campaign Name") return columns, data def get_columns(): - columns = [_("Campaign Name") + ":data:130", _("Lead Count") + ":Int:80", - _("Opp Count") + ":Int:80", - _("Quot Count") + ":Int:80", _("Order Count") + ":Int:100", - _("Order Value") + ":Float:100",_("Opp/Lead %") + ":Float:100", - _("Quot/Lead %") + ":Float:100",_("Order/Quot %") + ":Float:100" + return [ + _("Campaign Name") + ":data:130", + _("Lead Count") + ":Int:80", + _("Opp Count") + ":Int:80", + _("Quot Count") + ":Int:80", + _("Order Count") + ":Int:100", + _("Order Value") + ":Float:100", + _("Opp/Lead %") + ":Float:100", + _("Quot/Lead %") + ":Float:100", + _("Order/Quot %") + ":Float:100" ] - return columns - -def get_lead_data(filters): + +def get_lead_data(filters, based_on): + based_on_field = frappe.scrub(based_on) + conditions = get_filter_conditions(filters) + + lead_details = frappe.db.sql(""" + select {based_on_field}, name + from `tabLead` + where {based_on_field} is not null and {based_on_field} != '' {conditions} + """.format(based_on_field=based_on_field, conditions=conditions), filters, as_dict=1) + + lead_map = frappe._dict() + for d in lead_details: + lead_map.setdefault(d.get(based_on_field), []).append(d.name) + + data = [] + for based_on_value, leads in lead_map.items(): + row = { + based_on: based_on_value, + "Lead Count": len(leads) + } + row["Quot Count"]= get_lead_quotation_count(leads) + row["Opp Count"] = get_lead_opp_count(leads) + row["Order Count"] = get_quotation_ordered_count(leads) + row["Order Value"] = get_order_amount(leads) + + row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 + row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 + + row["Order/Quot %"] = row["Order Count"] / (row["Quot Count"] or 1) * 100 + + data.append(row) + + return data + +def get_filter_conditions(filters): conditions="" if filters.from_date: conditions += " and date(creation) >= %(from_date)s" if filters.to_date: conditions += " and date(creation) <= %(to_date)s" - data = frappe.db.sql("""select campaign_name as "Campaign Name", count(name) as "Lead Count" from `tabLead` - where 1 = 1 %s group by campaign_name""" % (conditions,),filters, as_dict=1) - dl=list(data) - for row in dl: - is_quot_count_zero = False - row["Quot Count"]= get_lead_quotation_count(row["Campaign Name"]) - row["Opp Count"] = get_lead_opp_count(row["Campaign Name"]) - row["Order Count"] = get_quotation_ordered_count(row["Campaign Name"]) - row["Order Value"] = get_order_amount(row["Campaign Name"]) - row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 - row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 - #Handle div by zero and reset count to zero - if row["Quot Count"] == 0: - row["Quot Count"] = 1 - is_quot_count_zero = True - row["Order/Quot %"] = row["Order Count"] / row["Quot Count"] * 100 - if is_quot_count_zero == True: - row["Quot Count"] = 0 - return dl -def get_lead_quotation_count(campaign): - quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` - where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) - return flt(quotation_count[0][0]) if quotation_count else 0 + return conditions -def get_lead_opp_count(campaign): - opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where campaign_name = %s)""",campaign) - return flt(opportunity_count[0][0]) if opportunity_count else 0 +def get_lead_quotation_count(leads): + return frappe.db.sql("""select count(name) from `tabQuotation` + where lead in (%s)""" % ', '.join(["%s"]*len(leads)), tuple(leads))[0][0] -def get_quotation_ordered_count(campaign): - quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` where status = 'Ordered' - and lead in (select name from `tabLead` where campaign_name = %s)""",campaign) - return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 +def get_lead_opp_count(leads): + return frappe.db.sql("""select count(name) from `tabOpportunity` + where lead in (%s)""" % ', '.join(["%s"]*len(leads)), tuple(leads))[0][0] -def get_order_amount(campaign): - ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in (select name from `tabQuotation` where status = 'Ordered' and - lead in (select name from `tabLead` where campaign_name = %s))""",campaign) - return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file +def get_quotation_ordered_count(leads): + return frappe.db.sql("""select count(name) + from `tabQuotation` where status = 'Ordered' + and lead in (%s)""" % ', '.join(["%s"]*len(leads)), tuple(leads))[0][0] + +def get_order_amount(leads): + return frappe.db.sql("""select sum(base_net_amount) + from `tabSales Order Item` + where prevdoc_docname in ( + select name from `tabQuotation` where status = 'Ordered' + and lead in (%s) + )""" % ', '.join(["%s"]*len(leads)), tuple(leads))[0][0] \ No newline at end of file diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py index 1560f869d9..8134bc2003 100644 --- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py +++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.py @@ -4,69 +4,23 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import flt,cstr -from erpnext.accounts.report.financial_statements import get_period_list +from erpnext.crm.report.campaign_efficiency.campaign_efficiency import get_lead_data def execute(filters=None): columns, data = [], [] columns=get_columns() - data=get_lead_data(filters) + data=get_lead_data(filters, "Lead Owner") return columns, data def get_columns(): - columns = [_("Lead Owner") + ":data:130", _("Lead Count") + ":Int:80", - _("Opp Count") + ":Int:80", - _("Quot Count") + ":Int:80", _("Order Count") + ":Int:100", - _("Order Value") + ":Float:100",_("Opp/Lead %") + ":Float:100", - _("Quot/Lead %") + ":Float:100",_("Order/Quot %") + ":Float:100" - ] - return columns - -def get_lead_data(filters): - conditions="" - if filters.from_date: - conditions += " and date(creation) >= %(from_date)s" - if filters.to_date: - conditions += " and date(creation) <= %(to_date)s" - data = frappe.db.sql("""select lead_owner as "Lead Owner", count(name) as "Lead Count" - from `tabLead` where 1 = 1 %s group by lead_owner""" % (conditions,),filters, as_dict=1) - dl=list(data) - for row in dl: - is_quot_count_zero = False - row["Quot Count"]= get_lead_quotation_count(row["Lead Owner"]) - row["Opp Count"] = get_lead_opp_count(row["Lead Owner"]) - row["Order Count"] = get_quotation_ordered_count(row["Lead Owner"]) - row["Order Value"] = get_order_amount(row["Lead Owner"]) - row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 - row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 - #Handle div by zero and reset count to zero - if row["Quot Count"] == 0: - row["Quot Count"] = 1 - is_quot_count_zero = True - row["Order/Quot %"] = row["Order Count"] / row["Quot Count"] * 100 - if is_quot_count_zero == True: - row["Quot Count"] = 0 - return dl - -def get_lead_quotation_count(leadowner): - quotation_count = frappe.db.sql("""select count(name) from `tabQuotation` - where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) - return flt(quotation_count[0][0]) if quotation_count else 0 - -def get_lead_opp_count(leadowner): - opportunity_count = frappe.db.sql("""select count(name) from `tabOpportunity` - where lead in (select name from `tabLead` where lead_owner = %s)""",leadowner) - return flt(opportunity_count[0][0]) if opportunity_count else 0 - -def get_quotation_ordered_count(leadowner): - quotation_ordered_count = frappe.db.sql("""select count(name) from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where lead_owner = %s)""",leadowner) - return flt(quotation_ordered_count[0][0]) if quotation_ordered_count else 0 - -def get_order_amount(leadowner): - ordered_count_amount = frappe.db.sql("""select sum(base_net_amount) from `tabSales Order Item` - where prevdoc_docname in (select name from `tabQuotation` - where status = 'Ordered' and lead in - (select name from `tabLead` where lead_owner = %s))""",leadowner) - return flt(ordered_count_amount[0][0]) if ordered_count_amount else 0 \ No newline at end of file + return [ + _("Lead Owner") + ":Data:130", + _("Lead Count") + ":Int:80", + _("Opp Count") + ":Int:80", + _("Quot Count") + ":Int:80", + _("Order Count") + ":Int:100", + _("Order Value") + ":Float:100", + _("Opp/Lead %") + ":Float:100", + _("Quot/Lead %") + ":Float:100", + _("Order/Quot %") + ":Float:100" + ] \ No newline at end of file From c7a72684fd69b8c9a7a93d1d4f807a02898b42c3 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Mon, 24 Apr 2017 14:49:04 +0530 Subject: [PATCH 156/287] Add bank guarantee doctype with documentation --- .../doctype/bank_guarantee/__init__.py | 0 .../doctype/bank_guarantee/bank_guarantee.js | 45 +++ .../bank_guarantee/bank_guarantee.json | 368 ++++++++++++++++++ .../doctype/bank_guarantee/bank_guarantee.py | 10 + .../bank_guarantee/test_bank_guarantee.py | 12 + .../user/manual/en/accounts/bank-guarantee.md | 7 + .../docs/user/manual/en/accounts/index.txt | 1 + 7 files changed, 443 insertions(+) create mode 100644 erpnext/accounts/doctype/bank_guarantee/__init__.py create mode 100644 erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js create mode 100644 erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json create mode 100644 erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py create mode 100644 erpnext/accounts/doctype/bank_guarantee/test_bank_guarantee.py create mode 100644 erpnext/docs/user/manual/en/accounts/bank-guarantee.md diff --git a/erpnext/accounts/doctype/bank_guarantee/__init__.py b/erpnext/accounts/doctype/bank_guarantee/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js new file mode 100644 index 0000000000..77277aac18 --- /dev/null +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js @@ -0,0 +1,45 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Bank Guarantee', { + refresh: function(frm) { + cur_frm.set_query("account_name", function() { + return { + "filters": { + "account_type": "Bank", + "is_group": 0 + } + }; + }); + cur_frm.set_query("project", function() { + return { + "filters": { + "customer": cur_frm.doc.customer + } + }; + }); + }, + start_date: function(frm) { + end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1); + cur_frm.set_value("end_date", end_date); + }, + validity: function(frm) { + end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1); + cur_frm.set_value("end_date", end_date); + } +}); + +// $.extend(cur_frm.cscript, { +// start_date: function(doc, dt, dn) { +// var me = this; +// end_date = +// frappe.datetime.add_days(this.frm.doc.start_date, this.frm.doc.validity - 1); +// this.frm.set_value("end_date", end_date); +// }, +// validity: function(doc, dt, dn) { +// var me = this; +// end_date = +// frappe.datetime.add_days(this.frm.doc.start_date, this.frm.doc.validity - 1); +// this.frm.set_value("end_date", end_date); +// } +// }); \ No newline at end of file diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json new file mode 100644 index 0000000000..6572efba1f --- /dev/null +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json @@ -0,0 +1,368 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "BNG.#####", + "beta": 0, + "creation": "2016-12-17 10:43:35.731631", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer", + "length": 0, + "no_copy": 0, + "options": "Customer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "project", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Project", + "length": 0, + "no_copy": 0, + "options": "Project", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "account_name", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Bank Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_6", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "start_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Start Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "validity", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Validity in Days", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "end_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "End Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bank_guarantee_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Bank Guarantee Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Bank Guarantee", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-04-24 14:23:49.322924", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Bank Guarantee", + "name_case": "", + "owner": "ishan@loyapeb.com", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "customer", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "customer", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py new file mode 100644 index 0000000000..71647b9e26 --- /dev/null +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.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 BankGuarantee(Document): + pass diff --git a/erpnext/accounts/doctype/bank_guarantee/test_bank_guarantee.py b/erpnext/accounts/doctype/bank_guarantee/test_bank_guarantee.py new file mode 100644 index 0000000000..0e56991856 --- /dev/null +++ b/erpnext/accounts/doctype/bank_guarantee/test_bank_guarantee.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('Bank Guarantee') + +class TestBankGuarantee(unittest.TestCase): + pass diff --git a/erpnext/docs/user/manual/en/accounts/bank-guarantee.md b/erpnext/docs/user/manual/en/accounts/bank-guarantee.md new file mode 100644 index 0000000000..eed96fa9fb --- /dev/null +++ b/erpnext/docs/user/manual/en/accounts/bank-guarantee.md @@ -0,0 +1,7 @@ +A Bank Guarantee is a guarantee from a lending institution such as a bank ensuring the liabilities of a debtor will be met. In other words, if the debtor fails to settle a debt, the bank covers it. A Bank Guarantee enables the customer, or debtor, to acquire goods, buy equipment or draw down loans, and thereby expand business activity. + +A client may ask you to provide a Bank Guarantee from a third party such as a bank. This guarantee is for a specified amount, which is usually a percentage of the total value of the contract. The Bank Guarantee is valid for a specified duration after which it expires and must be returned to you by the client. + +This document allows you to track Bank Guarantees given to clients. You can set Email Alerts as the Bank Guarantee expiry date approaches to remind yourself to get the Bank Guarantee back from your client. + +{next} diff --git a/erpnext/docs/user/manual/en/accounts/index.txt b/erpnext/docs/user/manual/en/accounts/index.txt index 6ba9337587..6a0da3a894 100644 --- a/erpnext/docs/user/manual/en/accounts/index.txt +++ b/erpnext/docs/user/manual/en/accounts/index.txt @@ -10,6 +10,7 @@ multi-currency-accounting advance-payment-entry payment-request credit-limit +bank-guarantee accounting-reports accounting-entries managing-fixed-assets From 0fc57a7df289a7d58436fe836dc946951dd1815c Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Mon, 24 Apr 2017 14:53:17 +0530 Subject: [PATCH 157/287] Change doctype owner --- erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json index 6572efba1f..3e5fadb4f8 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json @@ -332,7 +332,7 @@ "module": "Accounts", "name": "Bank Guarantee", "name_case": "", - "owner": "ishan@loyapeb.com", + "owner": "Administrator", "permissions": [ { "amend": 0, From e1ed5ba726820a6d1752245f9aa8f038e853dfa7 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Mon, 24 Apr 2017 16:20:02 +0530 Subject: [PATCH 158/287] Remove commented out code --- .../doctype/bank_guarantee/bank_guarantee.js | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js index 77277aac18..10fbf34ead 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js @@ -27,19 +27,4 @@ frappe.ui.form.on('Bank Guarantee', { end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1); cur_frm.set_value("end_date", end_date); } -}); - -// $.extend(cur_frm.cscript, { -// start_date: function(doc, dt, dn) { -// var me = this; -// end_date = -// frappe.datetime.add_days(this.frm.doc.start_date, this.frm.doc.validity - 1); -// this.frm.set_value("end_date", end_date); -// }, -// validity: function(doc, dt, dn) { -// var me = this; -// end_date = -// frappe.datetime.add_days(this.frm.doc.start_date, this.frm.doc.validity - 1); -// this.frm.set_value("end_date", end_date); -// } -// }); \ No newline at end of file +}); \ No newline at end of file From 0dbe8547e72ac2bbacb89015a8fd5192f8142b04 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Mon, 24 Apr 2017 20:20:09 +0530 Subject: [PATCH 159/287] Add screenshot to documentation, change naming series to BG-#####, make Bank Guarantee number unique --- .../doctype/bank_guarantee/bank_guarantee.json | 8 ++++---- .../assets/img/accounts/bank-guarantee.png | Bin 0 -> 214869 bytes .../user/manual/en/accounts/bank-guarantee.md | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 erpnext/docs/assets/img/accounts/bank-guarantee.png diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json index 3e5fadb4f8..81e2448eaf 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json @@ -3,7 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "BNG.#####", + "autoname": "BG-.#####", "beta": 0, "creation": "2016-12-17 10:43:35.731631", "custom": 0, @@ -284,7 +284,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "unique": 0 + "unique": 1 }, { "allow_bulk_edit": 0, @@ -327,12 +327,12 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-24 14:23:49.322924", + "modified": "2017-04-24 20:08:20.940782", "modified_by": "Administrator", "module": "Accounts", "name": "Bank Guarantee", "name_case": "", - "owner": "Administrator", + "owner": "ishan@loyapeb.com", "permissions": [ { "amend": 0, diff --git a/erpnext/docs/assets/img/accounts/bank-guarantee.png b/erpnext/docs/assets/img/accounts/bank-guarantee.png new file mode 100644 index 0000000000000000000000000000000000000000..dda016acd548290e7aa0967df0210ca072b02109 GIT binary patch literal 214869 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 z

    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ś-@vZ0NQ`qo|ngm29{# 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 f_y0c|L|`m@Id#4;7tL~l`1e>|?IHYuS + {next} From 2fca72ae8eb8b07056c119ae645e24013f02804a Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Mon, 24 Apr 2017 20:22:03 +0530 Subject: [PATCH 160/287] Change owner --- erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json index 81e2448eaf..74decad7cd 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json @@ -332,7 +332,7 @@ "module": "Accounts", "name": "Bank Guarantee", "name_case": "", - "owner": "ishan@loyapeb.com", + "owner": "Administrator", "permissions": [ { "amend": 0, From 17737e4ab1e7751f389386518029fd317680fc43 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Tue, 25 Apr 2017 13:34:25 +0530 Subject: [PATCH 161/287] Change permissions, change account fieldname and add notes section --- .../doctype/bank_guarantee/bank_guarantee.js | 2 +- .../bank_guarantee/bank_guarantee.json | 86 ++++++++++++++++++- 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js index 10fbf34ead..499320223a 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js @@ -3,7 +3,7 @@ frappe.ui.form.on('Bank Guarantee', { refresh: function(frm) { - cur_frm.set_query("account_name", function() { + cur_frm.set_query("account", function() { return { "filters": { "account_type": "Bank", diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json index 74decad7cd..807c544d87 100644 --- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json +++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json @@ -81,7 +81,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "account_name", + "fieldname": "account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -286,6 +286,66 @@ "set_only_once": 0, "unique": 1 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_10", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "More Information", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "more_information", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -327,13 +387,33 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-04-24 20:08:20.940782", + "modified": "2017-04-25 13:31:49.627831", "modified_by": "Administrator", "module": "Accounts", "name": "Bank Guarantee", "name_case": "", "owner": "Administrator", "permissions": [ + { + "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": "Accounts User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + }, { "amend": 0, "apply_user_permissions": 0, @@ -348,7 +428,7 @@ "print": 1, "read": 1, "report": 1, - "role": "System Manager", + "role": "Accounts Manager", "set_user_permissions": 0, "share": 1, "submit": 1, From 09fe8e0522bdda5463426e78ec2187a3175ee4a8 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Tue, 25 Apr 2017 14:26:33 +0530 Subject: [PATCH 162/287] Add bank guarantee to Accounts module display screen --- erpnext/config/accounts.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index d9faf6dd73..02aa14b138 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -159,6 +159,11 @@ def get_data(): "is_query_report": True, "doctype": "Journal Entry" }, + { + "type": "doctype", + "name": "Bank Guarantee", + "doctype": "Bank Guarantee" + }, ] }, { From d5d8db7a3f339445159f333d1d157d39d21252a6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 16:26:33 +0530 Subject: [PATCH 163/287] Cleanup on financial statement PR --- .../report/balance_sheet/balance_sheet.py | 23 +++++++++++++------ .../accounts/report/cash_flow/cash_flow.py | 5 ++-- .../accounts/report/financial_statements.py | 3 ++- .../profit_and_loss_statement.py | 7 ++++-- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py index d5d7a1b88d..9095d8619b 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.py +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py @@ -8,14 +8,23 @@ from frappe.utils import flt, cint from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data) def execute(filters=None): - period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity, filters.accumulated_values) + period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, + filters.periodicity, filters.accumulated_values, filters.company) - asset = get_data(filters.company, "Asset", "Debit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) - liability = get_data(filters.company, "Liability", "Credit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) - equity = get_data(filters.company, "Equity", "Credit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + asset = get_data(filters.company, "Asset", "Debit", period_list, + only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, + ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + + liability = get_data(filters.company, "Liability", "Credit", period_list, + only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, + ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + + equity = get_data(filters.company, "Equity", "Credit", period_list, + only_current_fiscal_year=False, filters=filters, + accumulated_values=filters.accumulated_values, + ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity, period_list, filters.company) diff --git a/erpnext/accounts/report/cash_flow/cash_flow.py b/erpnext/accounts/report/cash_flow/cash_flow.py index be530d8a65..f55d192731 100644 --- a/erpnext/accounts/report/cash_flow/cash_flow.py +++ b/erpnext/accounts/report/cash_flow/cash_flow.py @@ -10,7 +10,8 @@ from erpnext.accounts.utils import get_fiscal_year def execute(filters=None): - period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, filters.periodicity, filters.accumulated_values) + period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, + filters.periodicity, filters.accumulated_values, filters.company) operation_accounts = { "section_name": "Operations", @@ -103,7 +104,7 @@ def get_account_type_based_data(company, account_type, period_list, accumulated_ data = {} total = 0 for period in period_list: - start_date = get_start_date(period, accumulated_values) + start_date = get_start_date(period, accumulated_values, company) gl_sum = frappe.db.sql_list(""" select sum(credit) - sum(debit) from `tabGL Entry` diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 1fc26ac07f..9ba7711f0b 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -143,7 +143,8 @@ def calculate_values(accounts_by_name, gl_entries_by_account, period_list, accum if entry.posting_date <= period.to_date: if (accumulated_values or entry.posting_date >= period.from_date) and \ - (not ignore_accumulated_values_for_fy or entry.fiscal_year == period.to_date_fiscal_year): + (not ignore_accumulated_values_for_fy or + entry.fiscal_year == period.to_date_fiscal_year): 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: diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py index 73a4831189..95085b957a 100644 --- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py +++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py @@ -12,9 +12,12 @@ def execute(filters=None): filters.periodicity, filters.accumulated_values, filters.company) income = get_data(filters.company, "Income", "Credit", period_list, filters = filters, - accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) + accumulated_values=filters.accumulated_values, + ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) + expense = get_data(filters.company, "Expense", "Debit", period_list, filters=filters, - accumulated_values=filters.accumulated_values, ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) + accumulated_values=filters.accumulated_values, + ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company) From 175646572ab02e622cc9bc6618860bcc7523a786 Mon Sep 17 00:00:00 2001 From: Umair Sayyed Date: Tue, 25 Apr 2017 15:14:14 +0530 Subject: [PATCH 164/287] updated help pages --- .../assets/img/accounts/exempted-item.png | Bin 0 -> 43627 bytes .../assets/img/accounts/item-wise-tax.png | Bin 0 -> 46089 bytes .../assets/img/accounts/tax-calulation.png | Bin 0 -> 92190 bytes .../docs/assets/img/accounts/tax-master.png | Bin 0 -> 72034 bytes .../old_images/erpnext/item-wise-tax-calc.png | Bin 28950 -> 0 bytes .../erpnext/item-wise-tax-master.png | Bin 10609 -> 0 bytes .../old_images/erpnext/item-wise-tax.png | Bin 11337 -> 0 bytes .../manual/en/accounts/item-wise-taxation.md | 30 +++++++++++------- .../en/setting-up/settings/module-settings.md | 2 +- 9 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 erpnext/docs/assets/img/accounts/exempted-item.png create mode 100644 erpnext/docs/assets/img/accounts/item-wise-tax.png create mode 100644 erpnext/docs/assets/img/accounts/tax-calulation.png create mode 100644 erpnext/docs/assets/img/accounts/tax-master.png delete mode 100644 erpnext/docs/assets/old_images/erpnext/item-wise-tax-calc.png delete mode 100644 erpnext/docs/assets/old_images/erpnext/item-wise-tax-master.png delete mode 100644 erpnext/docs/assets/old_images/erpnext/item-wise-tax.png diff --git a/erpnext/docs/assets/img/accounts/exempted-item.png b/erpnext/docs/assets/img/accounts/exempted-item.png new file mode 100644 index 0000000000000000000000000000000000000000..926806b5164e0089a75aa94adb3af9b40bcc74d2 GIT binary patch literal 43627 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�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 Jp1t+({{TSw>ze=o literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/accounts/item-wise-tax.png b/erpnext/docs/assets/img/accounts/item-wise-tax.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe06ecc06032a99d787179babc79496c4c963f5 GIT binary patch literal 46089 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/accounts/tax-master.png b/erpnext/docs/assets/img/accounts/tax-master.png new file mode 100644 index 0000000000000000000000000000000000000000..c08439be082246c7ea32cc70a6449ef99a938188 GIT binary patch literal 72034 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/old_images/erpnext/item-wise-tax-calc.png b/erpnext/docs/assets/old_images/erpnext/item-wise-tax-calc.png deleted file mode 100644 index cd3a08f10ede27824af743415834aee4fd0056da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28950 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 diff --git a/erpnext/docs/assets/old_images/erpnext/item-wise-tax-master.png b/erpnext/docs/assets/old_images/erpnext/item-wise-tax-master.png deleted file mode 100644 index 95983c57ea71dc49f520dc3d2fde1e3542073dbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10609 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 UY_2qhl-mi&N-6@2#f^ObA7W`R;Q#;t diff --git a/erpnext/docs/assets/old_images/erpnext/item-wise-tax.png b/erpnext/docs/assets/old_images/erpnext/item-wise-tax.png deleted file mode 100644 index 374fab69f90ab40b9badd30c598ee18a928f5f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11337 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 diff --git a/erpnext/docs/user/manual/en/accounts/item-wise-taxation.md b/erpnext/docs/user/manual/en/accounts/item-wise-taxation.md index bc51de9de9..1750f41ea0 100644 --- a/erpnext/docs/user/manual/en/accounts/item-wise-taxation.md +++ b/erpnext/docs/user/manual/en/accounts/item-wise-taxation.md @@ -1,29 +1,35 @@ -Taxes selected in the Tax and Other Charges in transactions are applied on all the items. If you need different taxes applied on items selected in the same transaction, you should setup you item and tax master as explained in the steps below. +In the sales and purchase transactions, you can apply taxes and other charges on the items. For the ease of applying taxes, you can fetch values from the [Sales Taxes and Charges master](/contents//setting-up/setting-up-taxes). Taxes and charges are applied equally on all the items. For example, if tax GST 16% is added in the tax table, then it will be applied on all the items. However, if you need to have different tax rate applied on some of the items, following is how you should setup Items and Sales Taxes and Other Charges master in your ERPNext account. + +Let's assume that we are creating a Sales Order. We have Sales Taxes and Charges master for GST 16%. Out of all the Sales Items, on one item, only 12% GST will be applied, while one more item is exempted from the tax. ####Step 1: Mention Tax Applicable in the Item master -Item master has tax table where you can list taxes which will be applied on it. +Items on which differential tax rate is applied, you should mention tax rate for that item in the Item master itself. Item master has tax table where you can list taxes which will be applied on it. -![Item wise Tax]({{docs_base_url}}/assets/old_images/erpnext/item-wise-tax.png) +> Tax rate mentioned in the item master gets preference over tax rate entered in the transactions. -Tax rate mentioned in the item master gets preference over tax rate entered in the transactions. +Here is the example of Item on which 12% GST is applied only. -For example, if you provide tax rate for VAT as 10% for item ABC, where for same VAT ledger 12% rate is entered in the Sales Order/Invoice, for item ABC, tax rate applied would be 10%, as mentioned in the item master. +Opening Account + +For the item which is exempted from GST totally, mention 0% as tax rate in the Item master. + +Opening Account ####Step 2: Setup Taxes and Other Charges -In Taxes and Other Charges master, you should select all the applicable taxes which could be applicable on item. +In Sales Taxes and Other Charges master, select GST 16% account and mention Tax Rate as 16. This tax rate will be applied on all the Items selected in the Sales Order, unless specific Tax Rate is defined in the Item master. -For example, if few items has VAT 5 applied on them, other has Service Tax applied, and some other has Excise Duty applicable, then you tax master should have all these taxes selected. +Opening Account -![item wise tax master]({{docs_base_url}}/assets/old_images/erpnext/item-wise-tax-master.png) +

    -####Step 3: Set Tax Rate as Zero in Taxes and Charges Template +####Step 3: Tax Calculation in transaction -In the Taxes and Other Charges master, tax rate will be updated as ZERO. It means, tax rate applicable on items will be pulled from the respective Item master. While for other items, 0% tax will be applied, means no other taxes will be applied on that item. +In the Sales Order, we have selected many Items. For the items mentioned in blue, tax rate is applied based on tax rate mentioned in the taxes table. For the items highlited in red, tax rate has fetched for them from the respective item master. -Based on the above setting, you will have taxes applied on items as mentioned in the respective item master. Check following for an instance. +Opening Account -![item wise tax calculation]({{docs_base_url}}/assets/old_images/erpnext/item-wise-tax-calc.png) +Please note that item's tax rate will be pulled from the item master only if you have update same tax account (GST 16% in this case) in both Item master and tax master. {next} diff --git a/erpnext/docs/user/manual/en/setting-up/settings/module-settings.md b/erpnext/docs/user/manual/en/setting-up/settings/module-settings.md index ecfb28213d..3e2a109dad 100644 --- a/erpnext/docs/user/manual/en/setting-up/settings/module-settings.md +++ b/erpnext/docs/user/manual/en/setting-up/settings/module-settings.md @@ -2,7 +2,7 @@ You can globally switch off certain desktop module via: -> Setup > Settings > Show or Hide Modules +> Setup > Permissions > Show / Hide Modules For example if you are in the services business, you want to hide the Manufacturing Module, you can do this via **Show or Hide Modules** From c27d9f712b0b986275febbb3215ee60225ebc11a Mon Sep 17 00:00:00 2001 From: pawan Date: Tue, 25 Apr 2017 19:01:27 +0530 Subject: [PATCH 165/287] Add Report Links --- erpnext/config/crm.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py index 7a55cc606d..e51275c260 100644 --- a/erpnext/config/crm.py +++ b/erpnext/config/crm.py @@ -68,6 +68,18 @@ def get_data(): "name": "Inactive Customers", "doctype": "Sales Order" }, + { + "type": "report", + "is_query_report": True, + "name": "Campaign Efficiency", + "doctype": "Lead" + }, + { + "type": "report", + "is_query_report": True, + "name": "Lead Owner Efficiency", + "doctype": "Lead" + } ] }, { From 85622f9ccb714b79cb5f63ccc2510835893f026b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 20:43:29 +0530 Subject: [PATCH 166/287] Update update_status_as_paid_for_completed_expense_claim.py --- .../v8_0/update_status_as_paid_for_completed_expense_claim.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py index 644b8cd035..19d27b206b 100644 --- a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py +++ b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py @@ -7,6 +7,8 @@ import frappe def execute(): """ set status as Paid in Expense Claim if total_sactioned_amount and total_amount_reimbursed is equal """ + + frappe.reload_doctype('Expense Claim') frappe.db.sql(""" update @@ -14,4 +16,4 @@ def execute(): set status = 'Paid' where total_sanctioned_amount = total_amount_reimbursed - """) \ No newline at end of file + """) From 5b73a4864ada513fe9be70b0cc93bb99bea73b10 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 21:14:54 +0600 Subject: [PATCH 167/287] bumped to version 8.0.18 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 734c8e8ca2..44ba88adfa 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.17' +__version__ = '8.0.18' def get_default_company(user=None): '''Get default company for user''' From db8f41ba55647ad8e5b572eb9c70a4565af57a3e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 26 Apr 2017 14:05:14 +0530 Subject: [PATCH 168/287] Added Payment documents as Quick Links in SO/PO --- .../doctype/purchase_order/purchase_order_dashboard.py | 10 +++++++++- .../doctype/sales_order/sales_order_dashboard.py | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py b/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py index 5e460df4f3..50382d5fa1 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py @@ -3,6 +3,10 @@ from frappe import _ def get_data(): return { 'fieldname': 'purchase_order', + 'non_standard_fieldnames': { + 'Journal Entry': 'reference_name', + 'Payment Entry': 'reference_name' + }, 'internal_links': { 'Material Request': ['items', 'material_request'], 'Supplier Quotation': ['items', 'supplier_quotation'], @@ -13,6 +17,10 @@ def get_data(): 'label': _('Related'), 'items': ['Purchase Receipt', 'Purchase Invoice'] }, + { + 'label': _('Payment'), + 'items': ['Payment Entry', 'Journal Entry'] + }, { 'label': _('Reference'), 'items': ['Material Request', 'Supplier Quotation', 'Project'] @@ -20,6 +28,6 @@ def get_data(): { 'label': _('Sub-contracting'), 'items': ['Stock Entry'] - }, + } ] } \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/sales_order_dashboard.py b/erpnext/selling/doctype/sales_order/sales_order_dashboard.py index 51f81f89b6..a0ed034313 100644 --- a/erpnext/selling/doctype/sales_order/sales_order_dashboard.py +++ b/erpnext/selling/doctype/sales_order/sales_order_dashboard.py @@ -5,6 +5,9 @@ def get_data(): 'fieldname': 'sales_order', 'non_standard_fieldnames': { 'Delivery Note': 'against_sales_order', + 'Journal Entry': 'reference_name', + 'Payment Entry': 'reference_name', + 'Payment Request': 'reference_name' }, 'internal_links': { 'Quotation': ['items', 'prevdoc_docname'] @@ -30,5 +33,9 @@ def get_data(): 'label': _('Reference'), 'items': ['Quotation'] }, + { + 'label': _('Payment'), + 'items': ['Payment Entry', 'Payment Request', 'Journal Entry'] + }, ] } \ No newline at end of file From 96c247c83420b5a594f9d65831ccbbcf2bdee1cf Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 26 Apr 2017 14:29:33 +0530 Subject: [PATCH 169/287] Pick batch autmatically only if batch found --- erpnext/stock/doctype/batch/batch.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index 8ef8e915ee..5749afb8e7 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -101,16 +101,18 @@ def set_batch_nos(doc, warehouse_field, throw = False): def get_batch_no(item_code, warehouse, qty, throw=False): '''get the smallest batch with for the given item_code, warehouse and qty''' - batches = sorted( - get_batch_qty(item_code = item_code, warehouse = warehouse), - lambda a, b: 1 if a.qty > b.qty else -1) - + batch_no = None - for b in batches: - if b.qty >= qty: - batch_no = b.batch_no - # found! - break + + batches = get_batch_qty(item_code = item_code, warehouse = warehouse) + if batches: + batches = sorted(batches, lambda a, b: 1 if a.qty > b.qty else -1) + + for b in batches: + if b.qty >= qty: + batch_no = b.batch_no + # found! + break if not batch_no: frappe.msgprint(_('Please select a Batch for Item {0}. Unable to find a single batch that fulfills this requirement').format(frappe.bold(item_code))) From ecd46588ec3d5296e67bd3ff2dd930d1a38857fd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 26 Apr 2017 15:15:37 +0600 Subject: [PATCH 170/287] bumped to version 8.0.19 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 44ba88adfa..22589497fc 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.18' +__version__ = '8.0.19' def get_default_company(user=None): '''Get default company for user''' From b6a89204899a8be3f1f62cccf8c46a539240fe7b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 17:27:53 +0530 Subject: [PATCH 171/287] Fixed conflict --- erpnext/controllers/item_variant.py | 6 +- erpnext/patches.txt | 2 +- erpnext/stock/doctype/item/item.json | 120 +++++++++--------- .../doctype/item_manufacturer/__init__.py | 0 .../item_manufacturer/item_manufacturer.json | 100 --------------- .../item_manufacturer/item_manufacturer.py | 10 -- 6 files changed, 63 insertions(+), 175 deletions(-) delete mode 100644 erpnext/stock/doctype/item_manufacturer/__init__.py delete mode 100644 erpnext/stock/doctype/item_manufacturer/item_manufacturer.json delete mode 100644 erpnext/stock/doctype/item_manufacturer/item_manufacturer.py diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py index c21ee000f5..53421b71bc 100644 --- a/erpnext/controllers/item_variant.py +++ b/erpnext/controllers/item_variant.py @@ -42,10 +42,8 @@ def make_variant_based_on_manufacturer(template, manufacturer, manufacturer_part copy_attributes_to_variant(template, variant) - variant.append("manufacturers", { - "manufacturer": manufacturer, - "manufacturer_part_no": manufacturer_part_no - }) + variant.manufacturer = manufacturer + variant.manufacturer_part_no = manufacturer_part_no variant.item_code = append_number_if_name_exists('Item', template.name) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d68a1d82a5..c396402c80 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -379,7 +379,6 @@ erpnext.patches.v7_2.rename_att_date_attendance erpnext.patches.v7_2.update_attendance_docstatus erpnext.patches.v7_2.move_dates_from_salary_structure_to_employee erpnext.patches.v7_2.make_all_assessment_group -erpnext.patches.v8_0.manufacturer_childtable_migrate erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom erpnext.patches.v8_0.addresses_linked_to_lead execute:frappe.delete_doc('DocType', 'Purchase Common') @@ -390,3 +389,4 @@ erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically erpnext.patches.v8_0.set_project_copied_from erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim +erpnext.patches.v7_2.stock_uom_in_selling diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index d2031ae58a..6a34ae6d95 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -1618,65 +1618,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "columns": 0, - "fieldname": "manufacturer_part_numbers", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Manufacturer Part Numbers", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "manufacturers", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Item Manufacturers", - "length": 0, - "no_copy": 0, - "options": "Item Manufacturer", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_on_submit": 0, "bold": 0, @@ -1766,6 +1707,65 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "manufacturer", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manufacturer", + "length": 0, + "no_copy": 0, + "options": "Manufacturer", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 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": "manufacturer_part_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manufacturer Part Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -3044,7 +3044,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2017-04-19 08:14:26.785497", + "modified": "2017-04-25 08:14:26.785497", "modified_by": "Administrator", "module": "Stock", "name": "Item", diff --git a/erpnext/stock/doctype/item_manufacturer/__init__.py b/erpnext/stock/doctype/item_manufacturer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.json b/erpnext/stock/doctype/item_manufacturer/item_manufacturer.json deleted file mode 100644 index aa3469141d..0000000000 --- a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-03-24 14:05:42.026237", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "manufacturer", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Manufacturer", - "length": 0, - "no_copy": 0, - "options": "Manufacturer", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "manufacturer_part_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Manufacturer Part Number", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-03-24 14:33:56.726460", - "modified_by": "d.ottenbreit@eso-electronic.de", - "module": "Stock", - "name": "Item Manufacturer", - "name_case": "", - "owner": "d.ottenbreit@eso-electronic.de", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.py b/erpnext/stock/doctype/item_manufacturer/item_manufacturer.py deleted file mode 100644 index 933f7cc36a..0000000000 --- a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, 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 ItemManufacturer(Document): - pass From c98f37f91cab52b4deb0274dfc38552e8d2d8f61 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 25 Apr 2017 17:43:04 +0530 Subject: [PATCH 172/287] Patch for reverting manufacturers table from item --- erpnext/patches.txt | 1 + .../v8_0/manufacturer_childtable_migrate.py | 24 ------------------- .../revert_manufacturers_table_from_item.py | 22 +++++++++++++++++ 3 files changed, 23 insertions(+), 24 deletions(-) delete mode 100644 erpnext/patches/v8_0/manufacturer_childtable_migrate.py create mode 100644 erpnext/patches/v8_0/revert_manufacturers_table_from_item.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index c396402c80..773583e37c 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -390,3 +390,4 @@ erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically erpnext.patches.v8_0.set_project_copied_from erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim erpnext.patches.v7_2.stock_uom_in_selling +erpnext.patches.v8_0.revert_manufacturers_table_from_item \ No newline at end of file diff --git a/erpnext/patches/v8_0/manufacturer_childtable_migrate.py b/erpnext/patches/v8_0/manufacturer_childtable_migrate.py deleted file mode 100644 index 87a3431578..0000000000 --- a/erpnext/patches/v8_0/manufacturer_childtable_migrate.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2017, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe - -def execute(): - - # reading from json and writing it to mariadb - # reload_doc needed here with information because new table introduced - frappe.reload_doc('stock', 'doctype', 'item_manufacturer') - # reload_doctype is a simpler concept of reload_doc - frappe.reload_doctype('Item') - - item_manufacturers = frappe.get_all("Item", fields=["name", "manufacturer", "manufacturer_part_no"]) - for item in item_manufacturers: - if item.manufacturer or item.manufacturer_part_no: - item_doc = frappe.get_doc("Item", item.name) - item_doc.append("manufacturers", { - "manufacturer": item.manufacturer, - "manufacturer_part_no": item.manufacturer_part_no - }) - - item_doc.get("manufacturers")[0].db_update() \ No newline at end of file diff --git a/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py b/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py new file mode 100644 index 0000000000..60cbb33b80 --- /dev/null +++ b/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py @@ -0,0 +1,22 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + if frappe.db.exists("DocType", "Item Manufacturer"): + frappe.reload_doctype("Item") + item_manufacturers = frappe.db.sql(""" + select parent, manufacturer, manufacturer_part_no + from `tabItem Manufacturer` + """, as_dict=1) + + for im in item_manufacturers: + frappe.db.sql(""" + update tabItem + set manufacturer=%s, manufacturer_part_no=%s + where name=%s + """, (im.manufacturer, im.manufacturer_part_no, im.parent)) + + frappe.delete_doc("DocType", "Item Manufacturer") \ No newline at end of file From 7b04f092a6aed20ff176da458dac9235b77beb7d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 26 Apr 2017 16:47:03 +0530 Subject: [PATCH 173/287] Fixed test cases --- erpnext/stock/doctype/item/test_item.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 57805fb57b..2a8e4344af 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -217,15 +217,15 @@ class TestItem(unittest.TestCase): variant = get_variant(template.name, manufacturer=manufacturer.name) self.assertEquals(variant.item_code, '_Test Variant Mfg-1') self.assertEquals(variant.description, '_Test Variant Mfg') - self.assertEquals(variant.get("manufacturers")[0].manufacturer, 'MSG1') + self.assertEquals(variant.manufacturer, 'MSG1') variant.insert() variant = get_variant(template.name, manufacturer=manufacturer.name, manufacturer_part_no='007') self.assertEquals(variant.item_code, '_Test Variant Mfg-2') self.assertEquals(variant.description, '_Test Variant Mfg') - self.assertEquals(variant.get("manufacturers")[0].manufacturer, 'MSG1') - self.assertEquals(variant.get("manufacturers")[0].manufacturer_part_no, '007') + self.assertEquals(variant.manufacturer, 'MSG1') + self.assertEquals(variant.manufacturer_part_no, '007') def make_item_variant(): From 07ef5f42c44b27f0cfd48ced365276e78b51d995 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 26 Apr 2017 18:25:54 +0530 Subject: [PATCH 174/287] [enhance] Show notification for draft state records if doctype is submittable --- erpnext/startup/notifications.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py index 58458c64eb..57067a8da3 100644 --- a/erpnext/startup/notifications.py +++ b/erpnext/startup/notifications.py @@ -2,9 +2,10 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals +import frappe def get_notification_config(): - return { "for_doctype": + notification_for_doctype = { "for_doctype": { "Issue": {"status": "Open"}, "Warranty Claim": {"status": "Open"}, @@ -57,3 +58,10 @@ def get_notification_config(): "Timesheet": {"status": "Draft"} } } + + doctype = [d for d in notification_for_doctype.get('for_doctype')] + for doc in frappe.get_all('DocType', + fields= ["name"], filters = {"name": ("not in", doctype), 'is_submittable': 1}): + notification_for_doctype["for_doctype"][doc.name] = {"docstatus": 0} + + return notification_for_doctype From 0e6ac8b9b4c8a23faa9cb1dec9ae5a435a1a7d11 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 27 Apr 2017 14:19:54 +0530 Subject: [PATCH 175/287] Enabled option User Cannot Search for the gl entry doctype --- .../accounts/doctype/gl_entry/gl_entry.json | 56 +++++++++++++++++-- 1 file changed, 50 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json index cb3aea07d1..b1a41297f8 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.json +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "GL.#######", @@ -12,6 +13,7 @@ "editable_grid": 0, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -22,6 +24,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Posting Date", @@ -41,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -51,6 +55,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Transaction Date", @@ -70,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -80,6 +86,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 1, "label": "Account", @@ -100,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -110,6 +118,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Party Type", @@ -128,6 +137,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -138,6 +148,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 1, "label": "Party", @@ -156,6 +167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -166,6 +178,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 1, "in_standard_filter": 0, "label": "Cost Center", @@ -186,6 +199,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -196,6 +210,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Debit Amount", @@ -217,6 +232,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -227,6 +243,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Credit Amount", @@ -248,6 +265,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -258,6 +276,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Account Currency", @@ -277,6 +296,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -287,6 +307,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Debit Amount in Account Currency", @@ -306,6 +327,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -316,6 +338,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Credit Amount in Account Currency", @@ -335,6 +358,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -345,6 +369,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Against", @@ -364,6 +389,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -374,6 +400,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Against Voucher Type", @@ -394,6 +421,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -404,6 +432,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Against Voucher", @@ -424,6 +453,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -434,6 +464,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Voucher Type", @@ -454,6 +485,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -464,6 +496,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 1, "label": "Voucher No", @@ -484,6 +517,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -494,6 +528,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Project", @@ -513,6 +548,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -523,6 +559,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Remarks", @@ -542,6 +579,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -552,6 +590,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Is Opening", @@ -572,6 +611,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -582,6 +622,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Is Advance", @@ -602,6 +643,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -612,6 +654,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Fiscal Year", @@ -632,6 +675,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -642,6 +686,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Company", @@ -662,18 +707,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-list", "idx": 1, "image_view": 0, "in_create": 1, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-12-15 14:44:41.098790", + "modified": "2017-04-27 13:18:06.617940", "modified_by": "Administrator", "module": "Accounts", "name": "GL Entry", @@ -689,7 +734,6 @@ "export": 1, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -710,7 +754,6 @@ "export": 1, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -731,7 +774,6 @@ "export": 1, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -744,10 +786,12 @@ } ], "quick_entry": 1, - "read_only": 0, + "read_only": 1, "read_only_onload": 0, "search_fields": "voucher_no,account,posting_date,against_voucher", + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file From ac28ffb41edfb3343711b9103969ef40fbecac7c Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 28 Apr 2017 12:56:26 +0530 Subject: [PATCH 176/287] [fix] frappe.db.exists('Series', series) is not working because tabSeries table did not have column modified --- erpnext/setup/doctype/naming_series/naming_series.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py index a9832de7d4..d6e7ea713d 100644 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ b/erpnext/setup/doctype/naming_series/naming_series.py @@ -141,7 +141,7 @@ class NamingSeries(Document): def insert_series(self, series): """insert series if missing""" - if not frappe.db.exists('Series', series): + if not frappe.db.get_value('Series', series, 'name', order_by="name"): frappe.db.sql("insert into tabSeries (name, current) values (%s, 0)", (series)) def update_series_start(self): From 1b6270ef40d65ced23b6f2bbc8615ece4b84102f Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 28 Apr 2017 12:19:48 +0530 Subject: [PATCH 177/287] [hotfix] error while sending the auto email report of Ordered Items To Be Delivered --- .../ordered_items_to_be_delivered.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 1ec157885b..f82a52b525 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": 3, "is_standard": "Yes", - "modified": "2017-02-24 20:04:38.689198", + "modified": "2017-04-28 12:18:15.362019", "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`.`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", + "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:Link/Project:120\",\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", From 71373a176d0f5e3aad7dcd59a35fc8a4e32a65b1 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Thu, 27 Apr 2017 13:36:43 +0530 Subject: [PATCH 178/287] Configurable validation setting for the student group --- .../school_settings/school_settings.json | 65 +++++++++++++++++- .../school_settings/school_settings.py | 1 + .../doctype/student_group/student_group.js | 8 ++- .../doctype/student_group/student_group.json | 68 +++++++++---------- .../doctype/student_group/student_group.py | 44 ++++++++---- 5 files changed, 135 insertions(+), 51 deletions(-) diff --git a/erpnext/schools/doctype/school_settings/school_settings.json b/erpnext/schools/doctype/school_settings/school_settings.json index 5bdb65e1b5..8607a76569 100644 --- a/erpnext/schools/doctype/school_settings/school_settings.json +++ b/erpnext/schools/doctype/school_settings/school_settings.json @@ -13,6 +13,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -73,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -100,6 +103,66 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "validation_from_pe", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Validate the Student Group from Program Enrollment", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -112,7 +175,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-04-05 13:34:57.493516", + "modified": "2017-04-27 15:37:00.159072", "modified_by": "Administrator", "module": "Schools", "name": "School Settings", diff --git a/erpnext/schools/doctype/school_settings/school_settings.py b/erpnext/schools/doctype/school_settings/school_settings.py index 5a1c6fe4a6..6d8efb4279 100644 --- a/erpnext/schools/doctype/school_settings/school_settings.py +++ b/erpnext/schools/doctype/school_settings/school_settings.py @@ -11,6 +11,7 @@ school_keydict = { # "key in defaults": "key in Global Defaults" "academic_year": "current_academic_year", "academic_term": "current_academic_term", + "student_validation_setting": "validation_from_pe", } class SchoolSettings(Document): diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 2068644ea0..29d8bdbe6d 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -1,4 +1,4 @@ -cur_frm.add_fetch("student", "title", "student_name"); + cur_frm.add_fetch("student", "title", "student_name"); frappe.ui.form.on("Student Group", { onload: function(frm) { @@ -43,6 +43,11 @@ frappe.ui.form.on("Student Group", { frm.doc.program = null; frm.doc.batch = null; } + else if (frm.doc.group_based_on == "Activity") { + frm.doc.program =null; + frm.doc.batch =null; + frm.doc.CourseQ =null; + } frm.trigger("set_name"); }, @@ -103,6 +108,7 @@ frappe.ui.form.on("Student Group", { s.group_roll_number = ++max_roll_no; } }); + refresh_field("students"); frm.save(); } else { frappe.msgprint(__("Student Group is already updated.")) diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json index 59c5eab053..2caaa7ca1b 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -75,6 +75,37 @@ "set_only_once": 1, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval: doc.batch || doc.course || doc.group_based_on == \"Activity\"", + "fieldname": "student_group_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Group Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -172,7 +203,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch'", + "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -204,7 +235,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch'", + "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", "fieldname": "batch", "fieldtype": "Link", "hidden": 0, @@ -262,37 +293,6 @@ "set_only_once": 1, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "group_based_on", - "fieldname": "student_group_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Group Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -459,7 +459,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-24 15:53:35.593913", + "modified": "2017-04-25 18:26:27.414487", "modified_by": "Administrator", "module": "Schools", "name": "Student Group", diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index dba8c925a7..afcf970097 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -13,7 +13,8 @@ class StudentGroup(Document): def validate(self): self.validate_mandatory_fields() self.validate_strength() - self.validate_students() + if frappe.defaults.get_defaults().student_validation_setting + self.validate_students() validate_duplicate_student(self.students) def validate_mandatory_fields(self): @@ -39,6 +40,7 @@ class StudentGroup(Document): @frappe.whitelist() def get_students(academic_year, group_based_on, program=None, batch=None, course=None): enrolled_students = get_program_enrollment(academic_year, group_based_on, program, batch, course) + print enrolled_students if enrolled_students: student_list = [] @@ -51,18 +53,30 @@ def get_students(academic_year, group_based_on, program=None, batch=None, course return student_list def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None): - if group_based_on == "Batch": - return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s - and program = %s and student_batch_name = %s order by student_name asc''',(academic_year, program, batch), as_dict=1) + + condition_course = " and pe.name = pec.parent and pec.course = %(course)s" + condition1_course = ", `tabProgram Enrollment Course` pec" + condition_batch = " and pe.program = %(program)s and pe.student_batch_name = %(batch)s" + + if group_based_on == "Batch": + condition1 = "" + condition2 = condition_batch + elif group_based_on == "Course" and not (program and batch): + condition1 = condition1_course + condition2 = condition_course + elif group_based_on == "Course" and program and batch: + condition1 = condition1_course + condition2 = condition_course + condition_batch + + return frappe.db.sql(''' + select + pe.student, pe.student_name + from + `tabProgram Enrollment` pe {condition1} + where + pe.academic_year = %(academic_year)s {condition2} + order by + pe.student_name asc + '''.format(condition1=condition1, condition2=condition2), + ({"academic_year": academic_year, "program": program, "batch": batch, "course": course}), as_dict=1) - elif group_based_on == "Course": - return frappe.db.sql(''' - select - pe.student, pe.student_name - from - `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec - where - pe.name = pec.parent and pec.course = %s - order by - pe.student_name asc - ''', (course), as_dict=1) \ No newline at end of file From 5a8a5b7d06f95734617af8e33652ada00bb72d6a Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 28 Apr 2017 09:42:45 +0530 Subject: [PATCH 179/287] Fixes in Student Group --- .../doctype/student_group/student_group.js | 39 +------------ .../doctype/student_group/student_group.json | 20 +++---- .../doctype/student_group/student_group.py | 56 +++++++++---------- 3 files changed, 40 insertions(+), 75 deletions(-) diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 29d8bdbe6d..c2c6912ba0 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -1,4 +1,4 @@ - cur_frm.add_fetch("student", "title", "student_name"); +cur_frm.add_fetch("student", "title", "student_name"); frappe.ui.form.on("Student Group", { onload: function(frm) { @@ -39,41 +39,6 @@ frappe.ui.form.on("Student Group", { if (frm.doc.group_based_on == "Batch") { frm.doc.course = null; } - else if (frm.doc.group_based_on == "Course") { - frm.doc.program = null; - frm.doc.batch = null; - } - else if (frm.doc.group_based_on == "Activity") { - frm.doc.program =null; - frm.doc.batch =null; - frm.doc.CourseQ =null; - } - frm.trigger("set_name"); - }, - - set_name: function(frm) { - var name; - if (frm.doc.group_based_on == "Course") { - name = "Course-" + frm.doc.course + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } else if (frm.doc.group_based_on == "Batch") { - name = "Batch-" + frm.doc.program + "-" + frm.doc.batch + "-" - + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } else if (frm.doc.group_based_on == "Activity") { - name = "Activity" + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } - frm.set_value("student_group_name", name); - }, - - program:function(frm) { - frm.trigger("set_name"); - }, - - batch:function(frm) { - frm.trigger("set_name"); - }, - - course:function(frm) { - frm.trigger("set_name"); }, get_students: function(frm) { @@ -90,6 +55,7 @@ frappe.ui.form.on("Student Group", { method: "erpnext.schools.doctype.student_group.student_group.get_students", args: { "academic_year": frm.doc.academic_year, + "academic_term": frm.doc.academic_term, "group_based_on": frm.doc.group_based_on, "program": frm.doc.program, "batch" : frm.doc.batch, @@ -119,5 +85,4 @@ frappe.ui.form.on("Student Group", { frappe.msgprint(__("Select students manually for the Activity based Group")); } } - }); \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json index 2caaa7ca1b..a82ac0ff1b 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -72,7 +72,7 @@ "report_hide": 0, "reqd": 1, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -81,7 +81,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval: doc.batch || doc.course || doc.group_based_on == \"Activity\"", + "depends_on": "", "fieldname": "student_group_name", "fieldtype": "Data", "hidden": 0, @@ -101,7 +101,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -194,7 +194,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -203,7 +203,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", + "depends_on": "", "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -226,7 +226,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -235,7 +235,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", + "depends_on": "", "fieldname": "batch", "fieldtype": "Link", "hidden": 0, @@ -258,7 +258,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -290,7 +290,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -459,7 +459,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-25 18:26:27.414487", + "modified": "2017-04-28 11:46:51.946103", "modified_by": "Administrator", "module": "Schools", "name": "Student Group", diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index afcf970097..5520ec7b5e 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -13,34 +13,34 @@ class StudentGroup(Document): def validate(self): self.validate_mandatory_fields() self.validate_strength() - if frappe.defaults.get_defaults().student_validation_setting + if frappe.defaults.get_defaults().student_validation_setting: self.validate_students() validate_duplicate_student(self.students) def validate_mandatory_fields(self): if self.group_based_on == "Course" and not self.course: frappe.throw(_("Please select Course")) - elif self.group_based_on == "Batch" and (not self.program or not self.batch): - frappe.throw(_("Please select Program and Batch")) + if self.group_based_on == "Course" and (not self.program and self.batch): + frappe.throw(_("Please select Program")) + if self.group_based_on == "Batch" and not self.program: + frappe.throw(_("Please select Program")) def validate_strength(self): if self.max_strength and len(self.students) > self.max_strength: frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength)) def validate_students(self): - program_enrollment = get_program_enrollment(self.academic_year, self.group_based_on, self.program, self.batch, self.course) + program_enrollment = get_program_enrollment(self.academic_year, self.academic_term, self.program, self.batch, self.course) students = [d.student for d in program_enrollment] if program_enrollment else None for d in self.students: - if self.group_based_on != "Activity" and d.student not in students: - frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.student, d.student_name, self.group_based_on))) + if self.group_based_on != "Activity" and d.student not in students and d.active == 1: + frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.group_roll_number, d.student_name, self.group_based_on))) if not frappe.db.get_value("Student", d.student, "enabled") and d.active: - d.active = 0 - frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name))) + frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name))) @frappe.whitelist() -def get_students(academic_year, group_based_on, program=None, batch=None, course=None): - enrolled_students = get_program_enrollment(academic_year, group_based_on, program, batch, course) - print enrolled_students +def get_students(academic_year, group_based_on, academic_term=None, program=None, batch=None, course=None): + enrolled_students = get_program_enrollment(academic_year, academic_term, program, batch, course) if enrolled_students: student_list = [] @@ -51,32 +51,32 @@ def get_students(academic_year, group_based_on, program=None, batch=None, course s.update({"active": 0}) student_list.append(s) return student_list + else: + frappe.throw(_("No students found")) -def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None): +def get_program_enrollment(academic_year, academic_term=None, program=None, batch=None, course=None): - condition_course = " and pe.name = pec.parent and pec.course = %(course)s" - condition1_course = ", `tabProgram Enrollment Course` pec" - condition_batch = " and pe.program = %(program)s and pe.student_batch_name = %(batch)s" - - if group_based_on == "Batch": - condition1 = "" - condition2 = condition_batch - elif group_based_on == "Course" and not (program and batch): - condition1 = condition1_course - condition2 = condition_course - elif group_based_on == "Course" and program and batch: - condition1 = condition1_course - condition2 = condition_course + condition_batch + condition1 = " " + condition2 = " " + if academic_term: + condition1 += " and pe.academic_term = %(academic_term)s" + if program: + condition1 += " and pe.program = %(program)s" + if batch: + condition1 += " and pe.student_batch_name = %(batch)s" + if course: + condition1 += " and pe.name = pec.parent and pec.course = %(course)s" + condition2 = ", `tabProgram Enrollment Course` pec" return frappe.db.sql(''' select pe.student, pe.student_name from - `tabProgram Enrollment` pe {condition1} + `tabProgram Enrollment` pe {condition2} where - pe.academic_year = %(academic_year)s {condition2} + pe.academic_year = %(academic_year)s {condition1} order by pe.student_name asc '''.format(condition1=condition1, condition2=condition2), - ({"academic_year": academic_year, "program": program, "batch": batch, "course": course}), as_dict=1) + ({"academic_year": academic_year, "academic_term":academic_term, "program": program, "batch": batch, "course": course}), as_dict=1) From 0da9bc6309fe0a2220f1b891b473ac2dcc4989ee Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 28 Apr 2017 12:37:49 +0530 Subject: [PATCH 180/287] Fix for program enrollment --- erpnext/schools/doctype/program_enrollment/program_enrollment.js | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.js b/erpnext/schools/doctype/program_enrollment/program_enrollment.js index f117ee2f49..207e6a1ff8 100644 --- a/erpnext/schools/doctype/program_enrollment/program_enrollment.js +++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.js @@ -46,7 +46,6 @@ frappe.ui.form.on("Program Enrollment", { } } }); - frm.trigger.onload() } }, From 8c9fb76854d47458d0d819d06316b01349009c5b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 28 Apr 2017 14:23:03 +0530 Subject: [PATCH 181/287] Remove pricing rules if 'Ignore Pricing Rule' manually triggered --- .../doctype/pricing_rule/pricing_rule.py | 23 ++++-- erpnext/public/js/controllers/transaction.js | 28 +++++++- .../delivery_note_item.json | 72 +++++++++++++++++-- 3 files changed, 112 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 5af0d9f1be..967f23c4bc 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -145,8 +145,8 @@ def get_pricing_rule_for_item(args): }) if args.ignore_pricing_rule or not args.item_code: - if args.get("pricing_rule"): - item_details = remove_pricing_rule(args, item_details) + if frappe.db.exists(args.doctype, args.name) and args.get("pricing_rule"): + item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details) return item_details if not (args.item_group and args.brand): @@ -187,12 +187,13 @@ def get_pricing_rule_for_item(args): else: item_details.discount_percentage = pricing_rule.discount_percentage elif args.get('pricing_rule'): - item_details = remove_pricing_rule(args, item_details) + item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details) return item_details -def remove_pricing_rule(args, item_details): - pricing_rule = frappe.db.get_value('Pricing Rule', args.get('pricing_rule'), ['price_or_discount', 'margin_type'], as_dict=1) +def remove_pricing_rule_for_item(pricing_rule, item_details): + pricing_rule = frappe.db.get_value('Pricing Rule', pricing_rule, + ['price_or_discount', 'margin_type'], as_dict=1) if pricing_rule and pricing_rule.price_or_discount == 'Discount Percentage': item_details.discount_percentage = 0.0 @@ -202,6 +203,18 @@ def remove_pricing_rule(args, item_details): return item_details +@frappe.whitelist() +def remove_pricing_rules(item_list): + if isinstance(item_list, basestring): + item_list = json.loads(item_list) + + out = [] + for item in item_list: + item = frappe._dict(item) + out.append(remove_pricing_rule_for_item(item.get("pricing_rule"), item)) + + return out + def get_pricing_rules(args): def _get_tree_conditions(parenttype, allow_blank=True): field = frappe.scrub(parenttype) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index eec789a4ea..cbedf80a14 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -726,7 +726,33 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, ignore_pricing_rule: function() { - this.apply_pricing_rule(); + if(this.frm.doc.ignore_pricing_rule) { + var me = this; + var item_list = []; + + $.each(this.frm.doc["items"] || [], function(i, d) { + if (d.item_code) { + item_list.push({ + "doctype": d.doctype, + "name": d.name, + "pricing_rule": d.pricing_rule + }) + } + }); + return this.frm.call({ + method: "erpnext.accounts.doctype.pricing_rule.pricing_rule.remove_pricing_rules", + args: { item_list: item_list }, + callback: function(r) { + if (!r.exc && r.message) { + me._set_values_for_item_list(r.message); + me.calculate_taxes_and_totals(); + if(me.frm.doc.apply_discount_on) me.frm.trigger("apply_discount_on") + } + } + }); + } else { + this.apply_pricing_rule(); + } }, apply_pricing_rule: function(item, calculate_taxes_and_totals) { diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index 9738f9c24d..71a22e9daa 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -42,6 +43,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -75,6 +77,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -86,7 +89,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 1, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, "label": "Item Name", "length": 0, @@ -107,6 +110,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -134,6 +138,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -162,6 +167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -191,6 +197,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -223,6 +230,7 @@ "width": "300px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -251,6 +259,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -280,6 +289,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,6 +320,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -338,6 +349,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -370,6 +382,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -381,7 +394,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, "label": "Stock UOM", "length": 0, @@ -403,6 +416,7 @@ "width": "50px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -430,6 +444,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -441,7 +456,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "UOM", "length": 0, @@ -460,6 +475,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -489,6 +505,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -518,6 +535,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -546,6 +564,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -579,6 +598,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -612,6 +632,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -641,6 +662,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -653,7 +675,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, "label": "Discount on Price List Rate (%)", "length": 0, @@ -674,6 +696,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -702,6 +725,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -733,6 +757,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -763,6 +788,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -793,6 +819,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -820,6 +847,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -853,6 +881,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -886,6 +915,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -913,6 +943,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -946,6 +977,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -979,6 +1011,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1008,6 +1041,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1036,6 +1070,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1066,6 +1101,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1096,6 +1132,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1124,6 +1161,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1154,6 +1192,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1184,6 +1223,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1212,6 +1252,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1245,6 +1286,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1277,6 +1319,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1308,6 +1351,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1336,6 +1380,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1366,6 +1411,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1397,6 +1443,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1429,6 +1476,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1461,6 +1509,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1493,6 +1542,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1526,6 +1576,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1556,6 +1607,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1583,6 +1635,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1613,6 +1666,7 @@ "width": "120px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1644,6 +1698,7 @@ "width": "120px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1673,6 +1728,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1702,6 +1758,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1731,6 +1788,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1763,6 +1821,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1792,6 +1851,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1824,6 +1884,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1854,6 +1915,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1894,7 +1956,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-19 11:53:42.656700", + "modified": "2017-04-28 14:18:51.028570", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", From 2afb9b96cd2a92beeb39e6c8e8bd35276a58cc9f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 28 Apr 2017 15:18:26 +0530 Subject: [PATCH 182/287] pricing rule fix --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 2 ++ .../employee_loan_application.py | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 967f23c4bc..b913b6b632 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -201,6 +201,8 @@ def remove_pricing_rule_for_item(pricing_rule, item_details): item_details.margin_rate_or_amount = 0.0 item_details.margin_type = None + if item_details.pricing_rule: + item_details.pricing_rule = None return item_details @frappe.whitelist() diff --git a/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py b/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py index 74a65e2b57..357571e2a3 100644 --- a/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py +++ b/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py @@ -28,8 +28,12 @@ class EmployeeLoanApplication(Document): if self.repayment_method == "Repay Fixed Amount per Period": monthly_interest_rate = flt(self.rate_of_interest) / (12 *100) - self.repayment_periods = math.ceil((math.log(self.repayment_amount) - math.log(self.repayment_amount - \ - (self.loan_amount*monthly_interest_rate)))/(math.log(1+monthly_interest_rate))) + if monthly_interest_rate: + self.repayment_periods = math.ceil((math.log(self.repayment_amount) - + math.log(self.repayment_amount - (self.loan_amount*monthly_interest_rate))) / + (math.log(1 + monthly_interest_rate))) + else: + self.repayment_periods = self.loan_amount / self.repayment_amount self.total_payable_amount = self.repayment_amount * self.repayment_periods self.total_payable_interest = self.total_payable_amount - self.loan_amount From 589927b37d880f7430b9b7d35370476138f1b8d0 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 28 Apr 2017 16:04:58 +0600 Subject: [PATCH 183/287] bumped to version 8.0.20 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 22589497fc..5125fad64f 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.19' +__version__ = '8.0.20' def get_default_company(user=None): '''Get default company for user''' From ed5543adda296e777da61fe11f0d0f54dc1c459c Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 28 Apr 2017 16:07:36 +0530 Subject: [PATCH 184/287] [minor] README.md and CONTRIBUTING.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a813cf68c..1fae1ce2ea 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ The ERPNext code is licensed as GNU General Public License (v3) and the Document ## Contributing -1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Pull-Request-Guidelines) +1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines) +1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines) 1. [Translations](https://translate.erpnext.com) 1. [Chart of Accounts](https://charts.erpnext.com) From c75becc42cf636ec878d1e7a744d96dd98639649 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 28 Apr 2017 16:09:57 +0530 Subject: [PATCH 185/287] [minor] README.md and CONTRIBUTING.md --- .github/CONTRIBUTING.md | 75 ++++++++++++----------------------------- 1 file changed, 22 insertions(+), 53 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 04e8d88784..511b682f37 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,67 +1,36 @@ -## General Overview +### Introduction (first timers) -There are three branches where all the work happens: +Thank you for your interest in raising an Issue with ERPNext. An Issue could mean a bug report or a request for a missing feature. By raising a bug report, you are contributing to the development of ERPNext and this is the first step of participating in the community. Bug reports are very helpful for developers as they quickly fix the issue before other users start facing it. -* **master** - This is the production / stable branch for releases. -* **develop** - This is bleeding edge with features and fixes. Non critical bug fixes and new features go here. All updates to master also get pushed to develop. -* **hotfix** - Urgent bug fixes go here. This is merged into master for releases. +Feature requests are also a great way to take the product forward. New ideas can come in any user scenario and the issue list also acts a roadmap of future features. -## Release Cycles +When you are raising an Issue, you should keep a few things in mind. Remember that the developer does not have access to your machine so you must give all the information you can while raising an Issue. If you are suggesting a feature, you should be very clear about what you want. -Usually, hotfix / develop is pushed to master roughly every week. +The Issue list is not the right place to ask a question or start a general discussion. If you want to do that , then the right place is the forum [https://discuss.erpnext.com](https://discuss.erpnext.com). -If we are close to a major release, then all bugfixes get pushed to hotfix and a release is done every week or as necessary. +### Reply and Closing Policy -*** +If your issue is not clear or does not meet the guidelines, then it will be closed. If it is closed, please supply the information asked and re-open it. +### General Issue Guidelines -## Contributing +1. **Search existing Issues:** Before raising a Issue, search if it has been raised before. Maybe add a 👍 or give additional help by creating a mockup if it is not already created. +1. **Report each issue separately:** Don't club multiple, unreleated issues in one note. +1. **Brief:** Please don't include long explanations. Use screenshots and bullet points instead of descriptive paragraphs. -Contributing to ERPNext is not very different from the usual Pull Request workflow on GitHub. +### Bug Report Guidelines -### Prerequisites : +1. **Steps to Reproduce:** The bug report must have a list of steps needed to reproduce a bug. If we cannot reproduce it, then we cannot solve it. +1. **Version Number:** Please add the version number in your report. Often a bug is fixed in the latest version +1. **Clear Title:** Add a clear subject to your bug report like "Unable to submit Purchase Order without Basic Rate" instead of just "Cannot Submit" +1. **Screenshots:** Screenshots are a great way of communicating the issues. Try adding annotations or using LiceCAP to take a screencast in `gif`. -* You need to know [Git and Github basics](https://try.github.io/levels/1/challenges/1) -* You need to have a Fork of the [ERPNext repo](https://github.com/frappe/erpnext) in your personal Github account -* You need to add a [remote](#glossary) for your Forked repository. `git remote add origin [your-erpnext-repo-url]` +### Feature Request Guidelines -### The Process: +1. **Clarity:** Clearly specify how do you want the feature to behave. Don't just say "I would like multiple PDF formats", say that "Ability to add multiple print formats for customers with different languages". +1. **Solution:** Try and identify how the feature should look like. +1. **Mockups:** Mockups are a great way to explain your requirement. -1. Make sure you're in the right branch. **develop** for adding features / fixing issues and **hotfix** for urgent bug fixes -2. Make your changes -3. Create and checkout a new branch for the changes you've made. `git checkout -b [branch-name]` -4. Add and commit your changes `git commit -am "[commit-message]" -5. If you have been working on sometime for a long time, you should [rebase](#glossary) your branch with main develop branch. `git pull upstream develop --rebase` where `upstream` is the remote name of our repo -6. Now, push your changes to your fork. `git push origin [branch-name]` -If you rebased your commits, you will have to [force push](http://vignette2.wikia.nocookie.net/starwars/images/e/ea/Yodapush.png/revision/latest?cb=20130205190454) `git push origin [branch-name] --force` -7. You should now be able to see your pushed branch on Github, now create a pull request against the branch that you want to merge to. -8. Wait for us to review it +### What if my Issue is closed -### Your Pull Request Should have - -1. Clear explanation of the use case -1. Screenshots / Screecast GIF -1. Test Cases (if applicable) -1. Update to documentation - -### Common Problems: - -* During rebase you might face _merge conflicts_. A merge conflict occurs when you have made changes to the same file that someone else has, in the commits you're pulling. You need to resolve these conflicts by picking which code you want to keep, yours or theirs. You can use `git mergetool` for help. -* Sometimes you don't have a local branch to which you want to make changes to. In that case you first run `git fetch` followed by `git checkout --track -b upstream/[branch-name]` - - -### Good practices: - -* You should rebase your branch with the branch you plan to make a Pull Request (PR) to as often as you can. -* Your commit messages should be precise and explain exactly what the commit does. Same goes for the Pull Request title. -* When making a PR make sure that all your code is committed properly by checking the diffs. -* If you're working on different things at the same time, make sure you make separate branches for each. -* Don't create new DocTypes unless absolutely necessary. If you find that there is a another DocType with a similar functionality, then please try and extend that functionality. -* DRY. Don't Repeat Yourself. Before writing up a similar function /feature make sure it doesn't exist in the codebase already. -* Tabs, not spaces. - - -### Glossary - -* remote - A remote is a connection to a Github repo. You should have two remotes, one that points to your repo and one to ours. -* rebase - When you rebase a branch, you pull commits from your remote branch and move your commits on top of it. This allows you to update your branch with the latest changes without losing your changes. +Don't worry, take the feedback, supply the correct information and re-open it! From e94c6e7b8e4135bace73d424fbfb6eda32392675 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Sat, 29 Apr 2017 15:41:34 +0530 Subject: [PATCH 186/287] [minor] disabled the instructor role if the company domain is not Education --- erpnext/patches.txt | 3 ++- erpnext/patches/v8_0/disable_instructor_role.py | 17 +++++++++++++++++ erpnext/setup/setup_wizard/domainify.py | 8 ++++---- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 erpnext/patches/v8_0/disable_instructor_role.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 773583e37c..853d3bbced 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -390,4 +390,5 @@ erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically erpnext.patches.v8_0.set_project_copied_from erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim erpnext.patches.v7_2.stock_uom_in_selling -erpnext.patches.v8_0.revert_manufacturers_table_from_item \ No newline at end of file +erpnext.patches.v8_0.revert_manufacturers_table_from_item +erpnext.patches.v8_0.disable_instructor_role \ No newline at end of file diff --git a/erpnext/patches/v8_0/disable_instructor_role.py b/erpnext/patches/v8_0/disable_instructor_role.py new file mode 100644 index 0000000000..94ebd9cac6 --- /dev/null +++ b/erpnext/patches/v8_0/disable_instructor_role.py @@ -0,0 +1,17 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + """ + disable the instructor role for companies with domain other than + Education. + """ + + domains = frappe.db.sql_list("select domain from tabCompany") + if "Education" not in domains: + role = frappe.get_doc("Role", "Instructor") + role.disabled = 1 + role.save(ignore_permissions=True) \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py index 69aaf752d4..2167c41993 100644 --- a/erpnext/setup/setup_wizard/domainify.py +++ b/erpnext/setup/setup_wizard/domainify.py @@ -11,7 +11,7 @@ def get_domain(domain): 'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order', 'Production Order', 'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling', 'Accounts', 'HR', 'ToDo'], - 'remove_roles': ['Academics User'], + 'remove_roles': ['Academics User', 'Instructor'], 'properties': [ {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'}, ], @@ -24,7 +24,7 @@ def get_domain(domain): 'Retail': { 'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', 'Warranty Claim', 'Accounts', 'Task', 'Buying', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], 'properties': [ {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}, {'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1}, @@ -38,7 +38,7 @@ def get_domain(domain): 'Distribution': { 'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order', 'Task', 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], 'set_value': [ ['Stock Settings', None, 'show_barcode_field', 1] ], @@ -48,7 +48,7 @@ def get_domain(domain): 'Services': { 'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity', 'Task', 'Expense Claim', 'Employee', 'HR', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], 'properties': [ {'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0}, ], From 11171258411fd48f81d677789926e2e4c6f41e34 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 1 May 2017 11:39:36 +0530 Subject: [PATCH 187/287] Update domainify.py --- erpnext/setup/setup_wizard/domainify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py index 2167c41993..0069e88679 100644 --- a/erpnext/setup/setup_wizard/domainify.py +++ b/erpnext/setup/setup_wizard/domainify.py @@ -62,7 +62,7 @@ def get_domain(domain): 'Fees', 'Task', 'ToDo', 'Schools'], 'allow_roles': ['Academics User', 'Accounts User', 'Accounts Manager', 'Item Manager', 'Website Manager', 'HR User', 'HR Manager', 'Purchase User', 'Purchase Manager', - 'Student', 'Projects User'], + 'Student', 'Projects User', 'Instructor'], 'default_portal_role': 'Student' }, } From 949fbc559ec98e182fb6100d42c5deeb9236b690 Mon Sep 17 00:00:00 2001 From: akshay Date: Mon, 1 May 2017 17:10:03 +0530 Subject: [PATCH 188/287] Serial No Rename --- erpnext/stock/doctype/serial_no/serial_no.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 71ce0f8803..485f90f6c2 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -159,13 +159,19 @@ class SerialNo(StockController): def after_rename(self, old, new, merge=False): """rename serial_no text fields""" + print "--------------------RENAME SERIAL NO-------------------------------" + print old + print new for dt in frappe.db.sql("""select parent from tabDocField where fieldname='serial_no' and fieldtype='Text'"""): - + print "--------------GOT PARENTS-------------------" for item in frappe.db.sql("""select name, serial_no from `tab%s` where serial_no like '%%%s%%'""" % (dt[0], frappe.db.escape(old))): - serial_nos = map(lambda i: i==old and new or i, item[1].split('\n')) + serial_nos = map(lambda i: new if i.upper()==old.upper() else i, item[1].split('\n')) + print "----------------------IN SERIAL NO-------------------------------" + print serial_nos + print "-----------------------------------------------------------------" frappe.db.sql("""update `tab%s` set serial_no = %s where name=%s""" % (dt[0], '%s', '%s'), ('\n'.join(serial_nos), item[0])) From b674d272858a7eae76b30224182a334344dbd8ef Mon Sep 17 00:00:00 2001 From: akshay Date: Mon, 1 May 2017 17:12:16 +0530 Subject: [PATCH 189/287] Test Cleanup --- erpnext/stock/doctype/serial_no/serial_no.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 485f90f6c2..bc9b893950 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -159,19 +159,13 @@ class SerialNo(StockController): def after_rename(self, old, new, merge=False): """rename serial_no text fields""" - print "--------------------RENAME SERIAL NO-------------------------------" - print old - print new for dt in frappe.db.sql("""select parent from tabDocField where fieldname='serial_no' and fieldtype='Text'"""): - print "--------------GOT PARENTS-------------------" + for item in frappe.db.sql("""select name, serial_no from `tab%s` where serial_no like '%%%s%%'""" % (dt[0], frappe.db.escape(old))): serial_nos = map(lambda i: new if i.upper()==old.upper() else i, item[1].split('\n')) - print "----------------------IN SERIAL NO-------------------------------" - print serial_nos - print "-----------------------------------------------------------------" frappe.db.sql("""update `tab%s` set serial_no = %s where name=%s""" % (dt[0], '%s', '%s'), ('\n'.join(serial_nos), item[0])) From 3df7eef6cc607f7707e287fc6cff450ca069e23a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 1 May 2017 18:52:11 +0530 Subject: [PATCH 190/287] [fix] Unable to create an asset due to rounding issue --- erpnext/accounts/doctype/asset/asset.py | 13 +++++++++++-- erpnext/accounts/doctype/asset/test_asset.py | 19 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/asset/asset.py b/erpnext/accounts/doctype/asset/asset.py index aa2768b879..070461eb91 100644 --- a/erpnext/accounts/doctype/asset/asset.py +++ b/erpnext/accounts/doctype/asset/asset.py @@ -114,8 +114,17 @@ class Asset(Document): def set_accumulated_depreciation(self): accumulated_depreciation = flt(self.opening_accumulated_depreciation) - for d in self.get("schedules"): - accumulated_depreciation += flt(d.depreciation_amount, d.precision("depreciation_amount")) + value_after_depreciation = flt(self.value_after_depreciation) + for i, d in enumerate(self.get("schedules")): + depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount")) + value_after_depreciation -= flt(depreciation_amount) + + if i==len(self.get("schedules"))-1 and self.depreciation_method == "Straight Line": + depreciation_amount += flt(value_after_depreciation - flt(self.expected_value_after_useful_life), + d.precision("depreciation_amount")) + + d.depreciation_amount = depreciation_amount + accumulated_depreciation += d.depreciation_amount d.accumulated_depreciation_amount = flt(accumulated_depreciation, d.precision("accumulated_depreciation_amount")) def get_depreciation_amount(self, depreciable_value): diff --git a/erpnext/accounts/doctype/asset/test_asset.py b/erpnext/accounts/doctype/asset/test_asset.py index 000bc5ccd2..a45cdcea91 100644 --- a/erpnext/accounts/doctype/asset/test_asset.py +++ b/erpnext/accounts/doctype/asset/test_asset.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe import unittest -from frappe.utils import cstr, nowdate, getdate +from frappe.utils import cstr, nowdate, getdate, flt from erpnext.accounts.doctype.asset.depreciation import post_depreciation_entries, scrap_asset, restore_asset from erpnext.accounts.doctype.asset.asset import make_sales_invoice, make_purchase_invoice @@ -243,6 +243,23 @@ class TestAsset(unittest.TestCase): self.assertEqual(frappe.db.get_value("Asset", "Macbook Pro 1", "status"), "Partially Depreciated") + def test_asset_expected_value_after_useful_life(self): + asset = frappe.get_doc("Asset", "Macbook Pro 1") + asset.depreciation_method = "Straight Line" + asset.is_existing_asset = 1 + asset.total_number_of_depreciations = 400 + asset.gross_purchase_amount = 16866177.00 + asset.expected_value_after_useful_life = 500000 + asset.save() + + accumulated_depreciation_after_full_schedule = \ + max([d.accumulated_depreciation_amount for d in asset.get("schedules")]) + + asset_value_after_full_schedule = (flt(asset.gross_purchase_amount) - + flt(accumulated_depreciation_after_full_schedule)) + + self.assertTrue(asset.expected_value_after_useful_life >= asset_value_after_full_schedule) + def tearDown(self): asset = frappe.get_doc("Asset", "Macbook Pro 1") From fb73621db2dd6c634a5b478f2139109ee621577c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 2 May 2017 10:28:48 +0600 Subject: [PATCH 191/287] bumped to version 8.0.21 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 5125fad64f..0bf65d2105 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.20' +__version__ = '8.0.21' def get_default_company(user=None): '''Get default company for user''' From 61165127fcba1c62f2d568a7a94aa818bb992a03 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 2 May 2017 13:04:08 +0530 Subject: [PATCH 192/287] [fix] Default pos profile's customer not working for the POS --- erpnext/accounts/page/pos/pos.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 70067614b6..9c195f9512 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -327,6 +327,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.name = null; this.load_data(true); this.setup(); + this.set_default_customer() }, load_data: function (load_doc) { @@ -360,6 +361,16 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ } }, + set_default_customer: function() { + if (this.default_customer && !this.frm.doc.customer) { + this.party_field.$input.val(this.default_customer); + this.frm.doc.customer = this.default_customer; + this.numeric_keypad.show(); + this.toggle_list_customer(false) + this.toggle_item_cart(true) + } + }, + set_transaction_defaults: function (party) { var me = this; this.party = party; @@ -675,11 +686,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.toggle_delete_button(); } - if (this.default_customer && !this.frm.doc.customer) { - this.party_field.$input.val(this.default_customer); - this.frm.doc.customer = this.default_customer; - } - this.party_field.awesomeplete = new Awesomplete(this.party_field.$input.get(0), { minChars: 0, From c482aeda1a5f6f3a4263902702e2444d33520c81 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 2 May 2017 12:53:12 +0530 Subject: [PATCH 193/287] [fixes] added missing get_linked_material_requests method to buying utils --- erpnext/buying/utils.py | 23 +++++++++++++++++++++++ erpnext/public/js/controllers/buying.js | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py index 28c757948a..9146c58d0e 100644 --- a/erpnext/buying/utils.py +++ b/erpnext/buying/utils.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import frappe from frappe.utils import flt, cstr, cint from frappe import _ +import json from erpnext.stock.doctype.item.item import get_last_purchase_details from erpnext.stock.doctype.item.item import validate_end_of_life @@ -78,3 +79,25 @@ def check_for_closed_status(doctype, docname): if status == "Closed": frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError) +@frappe.whitelist() +def get_linked_material_requests(items): + items = json.loads(items) + mr_list = [] + for item in items: + material_request = frappe.db.sql("""SELECT distinct mr.name AS mr_name, + (mr_item.qty - mr_item.ordered_qty) AS qty, + mr_item.item_code AS item_code, + mr_item.name AS mr_item + FROM `tabMaterial Request` mr, `tabMaterial Request Item` mr_item + WHERE mr.name = mr_item.parent + AND mr_item.item_code = %(item)s + AND mr.material_request_type = 'Purchase' + AND mr.per_ordered < 99.99 + AND mr.docstatus = 1 + AND mr.status != 'Stopped' + ORDER BY mr_item.item_code ASC""",{"item": item}, as_dict=1) + if material_request: + mr_list.append(material_request) + + return mr_list + diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index 108aac1af8..a8c80fe237 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -220,7 +220,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ } } frappe.call({ - method: "erpnext.buying.doctype.purchase_common.purchase_common.get_linked_material_requests", + method: "erpnext.buying.utils.get_linked_material_requests", args:{ items: my_items }, From e15721df4844578ab8c8115103bba307f1d11387 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 28 Apr 2017 16:28:00 +0530 Subject: [PATCH 194/287] Caluculate total interest and payable amount in Loan Application if fixed amount per period --- .../employee_loan_application.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py b/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py index 357571e2a3..0c29e0d4ef 100644 --- a/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py +++ b/erpnext/hr/doctype/employee_loan_application/employee_loan_application.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe, math from frappe import _ -from frappe.utils import flt +from frappe.utils import flt, rounded from frappe.model.mapper import get_mapped_doc from frappe.model.document import Document @@ -35,9 +35,21 @@ class EmployeeLoanApplication(Document): else: self.repayment_periods = self.loan_amount / self.repayment_amount - self.total_payable_amount = self.repayment_amount * self.repayment_periods - self.total_payable_interest = self.total_payable_amount - self.loan_amount + self.calculate_payable_amount() + + def calculate_payable_amount(self): + balance_amount = self.loan_amount + self.total_payable_amount = 0 + self.total_payable_interest = 0 + while(balance_amount > 0): + interest_amount = rounded(balance_amount * flt(self.rate_of_interest) / (12*100)) + balance_amount = rounded(balance_amount + interest_amount - self.repayment_amount) + + self.total_payable_interest += interest_amount + + self.total_payable_amount = self.loan_amount + self.total_payable_interest + @frappe.whitelist() def make_employee_loan(source_name, target_doc = None): doclist = get_mapped_doc("Employee Loan Application", source_name, { From 504eba7fb2865065f35ab31ae85ad5ad32167332 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 2 May 2017 13:59:26 +0530 Subject: [PATCH 195/287] Test case fixed for Employee Loan Application --- .../hr/doctype/employee_loan/employee_loan.js | 2 +- .../doctype/employee_loan/employee_loan.json | 35 +++++++++++++++++-- .../hr/doctype/employee_loan/employee_loan.py | 2 +- .../test_employee_loan_application.py | 8 ++--- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.js b/erpnext/hr/doctype/employee_loan/employee_loan.js index 2f87acf6e8..71b6356ef6 100644 --- a/erpnext/hr/doctype/employee_loan/employee_loan.js +++ b/erpnext/hr/doctype/employee_loan/employee_loan.js @@ -79,7 +79,7 @@ frappe.ui.form.on('Employee Loan', { }, employee_loan_application: function(frm) { - return frm.call({ + return frappe.call({ method: "erpnext.hr.doctype.employee_loan.employee_loan.get_employee_loan_application", args: { "employee_loan_application": frm.doc.employee_loan_application diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.json b/erpnext/hr/doctype/employee_loan/employee_loan.json index 7606e924d5..35c735af88 100644 --- a/erpnext/hr/doctype/employee_loan/employee_loan.json +++ b/erpnext/hr/doctype/employee_loan/employee_loan.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -44,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -74,6 +76,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -104,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -134,6 +138,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -162,6 +167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -192,6 +198,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -222,10 +229,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, + "default": "Sanctioned", "fieldname": "status", "fieldtype": "Select", "hidden": 0, @@ -237,7 +246,7 @@ "in_standard_filter": 0, "label": "Status", "length": 0, - "no_copy": 0, + "no_copy": 1, "options": "Sanctioned\nPartially Disbursed\nFully Disbursed\nRepaid/Closed", "permlevel": 0, "precision": "", @@ -252,6 +261,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -281,6 +291,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,6 +321,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -340,6 +352,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -371,6 +384,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -400,6 +414,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -428,6 +443,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -459,6 +475,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -490,6 +507,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -522,6 +540,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -551,6 +570,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -581,6 +601,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -611,6 +632,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -639,6 +661,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -669,6 +692,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -699,6 +723,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -728,6 +753,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -758,6 +784,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -787,6 +814,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -818,6 +846,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -846,6 +875,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -877,6 +907,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -916,7 +947,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-30 12:59:40.650035", + "modified": "2017-05-02 13:52:30.884154", "modified_by": "Administrator", "module": "HR", "name": "Employee Loan", diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.py b/erpnext/hr/doctype/employee_loan/employee_loan.py index 7e16ec1c10..dadd7694bd 100644 --- a/erpnext/hr/doctype/employee_loan/employee_loan.py +++ b/erpnext/hr/doctype/employee_loan/employee_loan.py @@ -132,7 +132,7 @@ def get_monthly_repayment_amount(repayment_method, loan_amount, rate_of_interest def get_employee_loan_application(employee_loan_application): employee_loan = frappe.get_doc("Employee Loan Application", employee_loan_application) if employee_loan: - return employee_loan + return employee_loan.as_dict() @frappe.whitelist() def make_jv_entry(employee_loan, company, employee_loan_account, employee, loan_amount, payment_account): diff --git a/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.py b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.py index 1d157d6d81..789b5d4a02 100644 --- a/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.py +++ b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.py @@ -39,13 +39,13 @@ class TestEmployeeLoanApplication(unittest.TestCase): def test_loan_totals(self): loan_application = frappe.get_doc("Employee Loan Application", {"employee":self.employee}) self.assertEquals(loan_application.repayment_amount, 11445) - self.assertEquals(loan_application.total_payable_interest, 24680) - self.assertEquals(loan_application.total_payable_amount, 274680) + self.assertEquals(loan_application.total_payable_interest, 24657) + self.assertEquals(loan_application.total_payable_amount, 274657) loan_application.repayment_method = "Repay Fixed Amount per Period" loan_application.repayment_amount = 15000 loan_application.save() self.assertEquals(loan_application.repayment_periods, 18) - self.assertEquals(loan_application.total_payable_interest, 20000) - self.assertEquals(loan_application.total_payable_amount, 270000) \ No newline at end of file + self.assertEquals(loan_application.total_payable_interest, 18506) + self.assertEquals(loan_application.total_payable_amount, 268506) \ No newline at end of file From fd3751616519961f337277c7d6e1219047c595bc Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 2 May 2017 18:27:09 +0530 Subject: [PATCH 196/287] [fix] Contact not creating if only email id has entered in the POS --- erpnext/accounts/doctype/sales_invoice/pos.py | 25 +++++++++++++++++++ erpnext/accounts/page/pos/pos.js | 1 + 2 files changed, 26 insertions(+) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index f1f997a7f6..a899cde25d 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -325,8 +325,10 @@ def make_customer_and_address(customers): if not frappe.db.exists('Customer', name): name = add_customer(name) data = json.loads(data) + make_contact(data, name) make_address(data, name) customer_list.append(name) + frappe.db.commit() return customer_list def add_customer(name): @@ -340,6 +342,29 @@ def add_customer(name): frappe.db.commit() return customer_doc.name +def make_contact(args,customer): + if args.get('email_id') or args.get('phone'): + name = frappe.db.get_value('Dynamic Link', + {'link_doctype': 'Customer', 'link_name': customer, 'parenttype': 'Contact'}, 'parent') + + args = { + 'email_id': args.get('email_id'), + 'phone': args.get('phone') + } + + doc = frappe.new_doc('Contact') + if name: + doc = frappe.get_doc('Contact', name) + + doc.update(args) + if not name: + doc.first_name = customer + doc.append('links',{ + 'link_doctype': 'Customer', + 'link_name': customer + }) + doc.save(ignore_permissions=True) + def make_address(args, customer): if not args.get('address_line1'): return diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 9c195f9512..c632e459e3 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -866,6 +866,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.customer_doc.set_primary_action(__("Save"), function () { me.make_offline_customer(new_customer); me.pos_bill.show(); + me.list_customers.hide(); }); }, From bd8c7d683bfb651038cdbc7df3b9bbcc51ebabae Mon Sep 17 00:00:00 2001 From: Aditya Duggal Date: Wed, 3 May 2017 10:02:10 +0530 Subject: [PATCH 197/287] Website related fields now consider show_variant_in_website field as well -Resolves issue #8635 --- erpnext/stock/doctype/item/item.json | 121 ++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 11 deletions(-) diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 6a34ae6d95..d42e60d1bf 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -16,6 +16,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -46,6 +47,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -75,6 +77,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -106,6 +109,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -138,6 +142,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -168,6 +173,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -196,6 +202,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -228,6 +235,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -260,6 +268,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -287,6 +296,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -316,6 +326,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -349,6 +360,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -379,6 +391,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -409,6 +422,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -438,6 +452,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -467,6 +482,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -498,6 +514,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -528,6 +545,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -557,6 +575,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -588,6 +607,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -618,6 +638,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -650,6 +671,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -683,6 +705,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -715,6 +738,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -746,6 +770,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -776,6 +801,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -808,6 +834,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -838,6 +865,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -869,6 +897,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -899,6 +928,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -929,6 +959,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -960,6 +991,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -991,6 +1023,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1021,6 +1054,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1054,6 +1088,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1085,6 +1120,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1118,6 +1154,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1149,6 +1186,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1177,6 +1215,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1211,6 +1250,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1241,6 +1281,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1272,6 +1313,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1305,6 +1347,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1337,6 +1380,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1368,6 +1412,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1398,6 +1443,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1428,6 +1474,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1461,6 +1508,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1490,6 +1538,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1522,6 +1571,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1555,6 +1605,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1588,6 +1639,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1619,6 +1671,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1649,6 +1702,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1679,6 +1733,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1708,6 +1763,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1738,6 +1794,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1767,6 +1824,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1798,6 +1856,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1828,6 +1887,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1857,6 +1917,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1887,6 +1948,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1915,6 +1977,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1945,6 +2008,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1975,6 +2039,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2005,6 +2070,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2036,6 +2102,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2066,6 +2133,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2096,6 +2164,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2126,6 +2195,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2157,6 +2227,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2188,6 +2259,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2219,6 +2291,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2249,6 +2322,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2281,6 +2355,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2311,6 +2386,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2343,6 +2419,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2372,6 +2449,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2405,6 +2483,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2436,6 +2515,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2468,6 +2548,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2501,6 +2582,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2529,6 +2611,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2557,6 +2640,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2586,6 +2670,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2615,6 +2700,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2645,11 +2731,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "fieldname": "route", "fieldtype": "Small Text", "hidden": 0, @@ -2675,11 +2762,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "description": "Items with higher weightage will be shown higher", "fieldname": "weightage", "fieldtype": "Int", @@ -2705,11 +2793,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "description": "Show a slideshow at the top of the page", "fieldname": "slideshow", "fieldtype": "Link", @@ -2736,11 +2825,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "description": "Item Image (if not slideshow)", "fieldname": "website_image", "fieldtype": "Attach", @@ -2767,6 +2857,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2796,6 +2887,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2823,11 +2915,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "description": "Show \"In Stock\" or \"Not in Stock\" based on stock available in this warehouse.", "fieldname": "website_warehouse", "fieldtype": "Link", @@ -2854,11 +2947,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "description": "List this Item in multiple groups on the website.", "fieldname": "website_item_groups", "fieldtype": "Table", @@ -2885,12 +2979,13 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, "collapsible_depends_on": "website_specifications", "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "fieldname": "sb72", "fieldtype": "Section Break", "hidden": 0, @@ -2915,11 +3010,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "fieldname": "copy_from_item_group", "fieldtype": "Button", "hidden": 0, @@ -2944,11 +3040,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "fieldname": "website_specifications", "fieldtype": "Table", "hidden": 0, @@ -2974,11 +3071,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "show_in_website", + "depends_on": "eval: doc.show_in_website || doc.show_variant_in_website", "fieldname": "web_long_description", "fieldtype": "Text Editor", "hidden": 0, @@ -3003,6 +3101,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -3044,7 +3143,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2017-04-25 08:14:26.785497", + "modified": "2017-05-03 09:55:11.624283", "modified_by": "Administrator", "module": "Stock", "name": "Item", From ef027e9030c6ba4c7fc46fa29f569344ee44d581 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 3 May 2017 11:51:39 +0530 Subject: [PATCH 198/287] Correct args to the fmt_money function --- erpnext/accounts/doctype/account/account.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index 11f376d68c..998fee9732 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -189,8 +189,8 @@ class Account(Document): if account_balance != stock_balance: frappe.throw(_('Account balance ({0}) and stock value ({1}) must be same')\ - .format(fmt_money(account_balance, self.account_currency), - fmt_money(stock_balance, self.account_currency))) + .format(fmt_money(account_balance, currency=self.account_currency), + fmt_money(stock_balance, currency=self.account_currency))) elif self.warehouse: self.warehouse = None From 470535ae9b899a2b623add1e00c46aa301d8d612 Mon Sep 17 00:00:00 2001 From: Javier Wong Date: Tue, 2 May 2017 18:59:45 +0800 Subject: [PATCH 199/287] Removed set_default_roles set_default_roles was removed in https://github.com/frappe/frappe/commit/7fff0908a44a2435aa2575c965b0d921ef07b038 It is not required anymore. It currently breaks the patch. --- erpnext/patches/v7_1/update_portal_roles.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/patches/v7_1/update_portal_roles.py b/erpnext/patches/v7_1/update_portal_roles.py index 506adb91fc..72e9434c26 100644 --- a/erpnext/patches/v7_1/update_portal_roles.py +++ b/erpnext/patches/v7_1/update_portal_roles.py @@ -13,7 +13,6 @@ def execute(): # set customer, supplier roles for c in frappe.get_all('Contact', fields=['user'], filters={'ifnull(user, "")': ('!=', '')}): user = frappe.get_doc('User', c.user) - user.set_default_roles() user.flags.ignore_validate = True user.flags.ignore_mandatory = True user.save() From 3ce41d6b1f72ce96c71747365e21698ab43516b3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 3 May 2017 18:22:24 +0530 Subject: [PATCH 200/287] Fixed related to auto fetching batch nos and date valiation in salary structure (#8666) * Fixed related to auto fetching batch nos and date valiation in salary structure * Update get_item_details.py --- erpnext/hr/doctype/salary_structure/salary_structure.py | 2 +- erpnext/stock/get_item_details.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py index 12f8335b4d..da69bccd59 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -33,7 +33,7 @@ class SalaryStructure(Document): for employee in self.get('employees'): joining_date, relieving_date = frappe.db.get_value("Employee", employee.employee, ["date_of_joining", "relieving_date"]) - if employee.from_date and getdate(employee.from_date) < joining_date: + if employee.from_date and joining_date and getdate(employee.from_date) < joining_date: frappe.throw(_("From Date {0} for Employee {1} cannot be before employee's joining Date {2}") .format(employee.from_date, employee.employee, joining_date)) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 66ab6aceb6..35760fd7a1 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -74,7 +74,10 @@ def get_item_details(args): out.update(get_pricing_rule_for_item(args)) - if args.get("doctype") in ("Sales Invoice", "Delivery Note") and out.stock_qty > 0: + if (args.get("doctype") == "Delivery Note" or + (args.get("doctype") == "Sales Invoice" and args.get('update_stock'))) \ + and out.warehouse and out.stock_qty > 0: + if out.has_serial_no: out.serial_no = get_serial_no(out) From fcc0246b3820d59d87a3212346eed395e654fabb Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 4 May 2017 12:11:48 +0530 Subject: [PATCH 201/287] Get mobile nos for customer contact (#8674) --- erpnext/public/js/sms_manager.js | 16 ++++++++-------- .../setup/doctype/sms_settings/sms_settings.py | 11 ++++++++--- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/erpnext/public/js/sms_manager.js b/erpnext/public/js/sms_manager.js index a06c43c6f5..d6293ea107 100644 --- a/erpnext/public/js/sms_manager.js +++ b/erpnext/public/js/sms_manager.js @@ -21,9 +21,9 @@ function SMSManager(doc) { } if (in_list(['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice'], doc.doctype)) - this.show(doc.contact_person, 'customer', doc.customer, '', default_msg[doc.doctype]); + this.show(doc.contact_person, 'Customer', doc.customer, '', default_msg[doc.doctype]); else if (in_list(['Purchase Order', 'Purchase Receipt'], doc.doctype)) - this.show(doc.contact_person, 'supplier', doc.supplier, '', default_msg[doc.doctype]); + this.show(doc.contact_person, 'Supplier', doc.supplier, '', default_msg[doc.doctype]); else if (doc.doctype == 'Lead') this.show('', '', '', doc.mobile_no, default_msg[doc.doctype]); else if (doc.doctype == 'Opportunity') @@ -33,13 +33,13 @@ function SMSManager(doc) { }; - this.get_contact_number = function(contact, key, value) { + this.get_contact_number = function(contact, ref_doctype, ref_name) { frappe.call({ method: "erpnext.setup.doctype.sms_settings.sms_settings.get_contact_number", args: { - contact_name:contact, - value:value, - key:key + contact_name: contact, + ref_doctype: ref_doctype, + ref_name: ref_name }, callback: function(r) { if(r.exc) { msgprint(r.exc); return; } @@ -49,13 +49,13 @@ function SMSManager(doc) { }); }; - this.show = function(contact, key, value, mobile_nos, message) { + this.show = function(contact, ref_doctype, ref_name, mobile_nos, message) { this.message = message; if (mobile_nos) { me.number = mobile_nos; me.show_dialog(); } else if (contact){ - this.get_contact_number(contact, key, value) + this.get_contact_number(contact, ref_doctype, ref_name) } else { me.show_dialog(); } diff --git a/erpnext/setup/doctype/sms_settings/sms_settings.py b/erpnext/setup/doctype/sms_settings/sms_settings.py index 2888942613..a8b59beffa 100644 --- a/erpnext/setup/doctype/sms_settings/sms_settings.py +++ b/erpnext/setup/doctype/sms_settings/sms_settings.py @@ -40,10 +40,15 @@ def get_sender_name(): return sender_name @frappe.whitelist() -def get_contact_number(contact_name, value, key): +def get_contact_number(contact_name, ref_doctype, ref_name): "returns mobile number of the contact" - number = frappe.db.sql("""select mobile_no, phone from tabContact where name=%s and %s=%s""" % - ('%s', frappe.db.escape(key), '%s'), (contact_name, value)) + number = frappe.db.sql("""select mobile_no, phone from tabContact + where name=%s + and exists( + select name from `tabDynamic Link` where link_doctype=%s and link_name=%s + ) + """, (contact_name, ref_doctype, ref_name)) + return number and (number[0][0] or number[0][1]) or '' @frappe.whitelist() From 1c09a991f3f690f218c7d8c763154561978c084a Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Thu, 4 May 2017 12:12:14 +0530 Subject: [PATCH 202/287] Change beta_version to 8.x-beta (#8673) * Change beta_version to 8.x-beta * change to 8.x.x-beta --- erpnext/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 5b4e687b3b..af4dd3b68e 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -12,7 +12,7 @@ app_email = "info@erpnext.com" app_license = "GNU General Public License (v3)" source_link = "https://github.com/frappe/erpnext" -develop_version = '8.0.0-beta' +develop_version = '8.x.x-beta' error_report_email = "support@erpnext.com" From 932423ecba5848dc2a19949c032006b90b92cc75 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 4 May 2017 12:12:29 +0530 Subject: [PATCH 203/287] Balance Sheet always shows accumulated values from previous fiscal year (#8668) --- .../report/balance_sheet/balance_sheet.js | 3 ++- .../report/balance_sheet/balance_sheet.py | 14 ++++++-------- erpnext/accounts/report/financial_statements.py | 17 ++++++++++------- erpnext/accounts/utils.py | 3 ++- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js index 9cd92d4367..760fa649e6 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.js +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js @@ -7,7 +7,8 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { frappe.query_reports["Balance Sheet"]["filters"].push({ "fieldname": "accumulated_values", "label": __("Accumulated Values"), - "fieldtype": "Check" + "fieldtype": "Check", + "default": 1 }); }); diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py index 9095d8619b..2db4ef8a26 100644 --- a/erpnext/accounts/report/balance_sheet/balance_sheet.py +++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py @@ -9,22 +9,19 @@ from erpnext.accounts.report.financial_statements import (get_period_list, get_c def execute(filters=None): period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, - filters.periodicity, filters.accumulated_values, filters.company) + filters.periodicity, company=filters.company) asset = get_data(filters.company, "Asset", "Debit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, - ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + accumulated_values=filters.accumulated_values) liability = get_data(filters.company, "Liability", "Credit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, - ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + accumulated_values=filters.accumulated_values) equity = get_data(filters.company, "Equity", "Credit", period_list, only_current_fiscal_year=False, filters=filters, - accumulated_values=filters.accumulated_values, - ignore_closing_entries=True, ignore_accumulated_values_for_fy=True) + accumulated_values=filters.accumulated_values) provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity, period_list, filters.company) @@ -114,7 +111,8 @@ def check_opening_balance(asset, liability, equity): opening_balance -= flt(liability[0].get("opening_balance", 0), float_precision) if equity: opening_balance -= flt(equity[0].get("opening_balance", 0), float_precision) - + + opening_balance = flt(opening_balance, float_precision) if opening_balance: return _("Previous Financial Year is not closed"),opening_balance return None,None diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 9ba7711f0b..41d0e48a77 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -6,8 +6,11 @@ import frappe from frappe import _ from frappe.utils import (flt, getdate, get_first_day, get_last_day, date_diff, add_months, add_days, formatdate, cint) +from erpnext.accounts.utils import get_fiscal_year -def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_values=False, company=None): + +def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_values=False, + company=None, reset_period_on_fy_change=True): """Get a list of dict {"from_date": from_date, "to_date": to_date, "key": key, "label": label} Periodicity can be (Yearly, Quarterly, Monthly)""" @@ -49,7 +52,8 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_v # if a fiscal year ends before a 12 month period period.to_date = year_end_date - period.to_date_fiscal_year = get_date_fiscal_year(period.to_date, company) + period.to_date_fiscal_year = get_fiscal_year(period.to_date, company=company)[0] + period.from_date_fiscal_year_start_date = get_fiscal_year(period.from_date, company=company)[1] period_list.append(period) @@ -65,7 +69,10 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_v if not accumulated_values: label = get_label(periodicity, opts["from_date"], opts["to_date"]) else: - label = get_label(periodicity, period_list[0]["from_date"], opts["to_date"]) + if reset_period_on_fy_change: + label = get_label(periodicity, opts.from_date_fiscal_year_start_date, opts["to_date"]) + else: + label = get_label(periodicity, period_list[0].from_date, opts["to_date"]) opts.update({ "key": key.replace(" ", "_").replace("-", "_"), @@ -150,10 +157,6 @@ def calculate_values(accounts_by_name, gl_entries_by_account, period_list, accum if entry.posting_date < period_list[0].year_start_date: d["opening_balance"] = d.get("opening_balance", 0.0) + flt(entry.debit) - flt(entry.credit) -def get_date_fiscal_year(date, company): - from erpnext.accounts.utils import get_fiscal_year - return get_fiscal_year(date, company=company)[0] - def accumulate_values_into_parents(accounts, accounts_by_name, period_list, accumulated_values): """accumulate children's values in parent accounts""" for d in reversed(accounts): diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 2c1448c8b3..1721fa996f 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -11,7 +11,6 @@ from frappe.utils import formatdate, get_number_format_info # imported to enable erpnext.accounts.utils.get_account_currency from erpnext.accounts.doctype.account.account import get_account_currency -from erpnext.accounts.report.financial_statements import sort_root_accounts class FiscalYearError(frappe.ValidationError): pass @@ -652,6 +651,8 @@ def get_companies(): @frappe.whitelist() def get_children(): + from erpnext.accounts.report.financial_statements import sort_root_accounts + args = frappe.local.form_dict doctype, company = args['doctype'], args['company'] fieldname = frappe.db.escape(doctype.lower().replace(' ','_')) From 8470b39d4c66e4c961f4a88b671ef0d2d9c19511 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 4 May 2017 12:50:31 +0600 Subject: [PATCH 204/287] bumped to version 8.0.22 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 0bf65d2105..d102c9e9cd 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.21' +__version__ = '8.0.22' def get_default_company(user=None): '''Get default company for user''' From 6324987c15e01151d8abd151129f91639fe9c044 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Thu, 4 May 2017 16:12:29 +0530 Subject: [PATCH 205/287] [fix] Company's abbreviation change will not update the warehouse (#8685) --- erpnext/setup/doctype/company/company.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index c09255d506..cc5e65d881 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -282,7 +282,7 @@ def replace_abbr(company, old, new): if len(parts) == 1 or parts[1].lower() == old.lower(): frappe.rename_doc(dt, d[0], parts[0] + " - " + new) - for dt in ["Account", "Cost Center", "Warehouse"]: + for dt in ["Warehouse", "Account", "Cost Center"]: _rename_record(dt) frappe.db.commit() From d2a966eef329f6026cc932a79618cedd50d80411 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 May 2017 10:41:16 +0530 Subject: [PATCH 206/287] Update general_ledger.py --- erpnext/accounts/general_ledger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 4c5535d69a..c9345f2caf 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -123,10 +123,10 @@ def round_off_debit_credit(gl_map): debit_credit_diff = flt(debit_credit_diff, precision) - if gl_map[0]["voucher_type"] == "Journal Entry": + if gl_map[0]["voucher_type"] in ("Journal Entry", "Payment Entry"): allowance = 5.0 / (10**precision) else: - allowance = 1 + allowance = .5 if abs(debit_credit_diff) >= allowance: frappe.throw(_("Debit and Credit not equal for {0} #{1}. Difference is {2}.") From c4ec937835a16e3f345b94dd9e21330f511f0b65 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 5 May 2017 11:52:17 +0530 Subject: [PATCH 207/287] [hotfix] fixed object has no attribute 'delivered_by_supplier' (#8699) --- erpnext/buying/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py index 9146c58d0e..9ad1c5cf85 100644 --- a/erpnext/buying/utils.py +++ b/erpnext/buying/utils.py @@ -64,7 +64,7 @@ def validate_for_items(doc): validate_end_of_life(d.item_code, item.end_of_life, item.disabled) # validate stock item - if item.is_stock_item==1 and d.qty and not d.warehouse and not d.delivered_by_supplier: + if item.is_stock_item==1 and d.qty and not d.warehouse and not d.get("delivered_by_supplier"): frappe.throw(_("Warehouse is mandatory for stock Item {0} in row {1}").format(d.item_code, d.idx)) items.append(cstr(d.item_code)) From 6b3bc8a8e1edf8fbae79f8f960f953823adace84 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 5 May 2017 11:53:00 +0530 Subject: [PATCH 208/287] [hotfix] fixed the recursion error while saving the User (#8696) --- erpnext/portal/utils.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/erpnext/portal/utils.py b/erpnext/portal/utils.py index 7dffd03341..8115c1fb9b 100644 --- a/erpnext/portal/utils.py +++ b/erpnext/portal/utils.py @@ -4,14 +4,17 @@ def set_default_role(doc, method): '''Set customer, supplier, student based on email''' if frappe.flags.setting_role or frappe.flags.in_migrate: return + + roles = frappe.get_roles(doc.name) + contact_name = frappe.get_value('Contact', dict(email_id=doc.email)) if contact_name: contact = frappe.get_doc('Contact', contact_name) for link in contact.links: frappe.flags.setting_role = True - if link.link_doctype=='Customer': + if link.link_doctype=='Customer' and 'Customer' not in roles: doc.add_roles('Customer') - elif link.link_doctype=='Supplier': + elif link.link_doctype=='Supplier' and 'Supplier' not in roles: doc.add_roles('Supplier') - elif frappe.get_value('Student', dict(student_email_id=doc.email)): + elif frappe.get_value('Student', dict(student_email_id=doc.email)) and 'Student' not in roles: doc.add_roles('Student') From ed56b8afd8909baa27023bd67ef65acada9c2623 Mon Sep 17 00:00:00 2001 From: KanchanChauhan Date: Fri, 5 May 2017 11:56:55 +0530 Subject: [PATCH 209/287] Website route for item based on name not item name (#8682) --- erpnext/stock/doctype/item/item.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 4d0c3ac881..6a9fd24900 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -142,7 +142,7 @@ class Item(WebsiteGenerator): def make_route(self): if not self.route: - return cstr(frappe.db.get_value('Item Group', self.item_group, 'route')) + '/' + self.scrub(self.item_name) + return cstr(frappe.db.get_value('Item Group', self.item_group, 'route')) + '/' + self.scrub(self.name) def get_parents(self, context): item_group, route = frappe.db.get_value('Item Group', self.item_group, ['name', 'route']) From 42343bbc2cd300241d95b87f70a116902eb1e4d3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 May 2017 17:23:17 +0530 Subject: [PATCH 210/287] Selling price validation against last purchase rate / valuation rate (#8702) --- erpnext/controllers/selling_controller.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 1cd705b8c4..10b3607df9 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -170,7 +170,7 @@ class SellingController(StockController): def validate_selling_price(self): def throw_message(item_name, rate, ref_rate_field): - frappe.throw(_("""Selling price for item {0} is lower than its {1}. Selling price should be atleast {2}""") + frappe.throw(_("""Selling rate for item {0} is lower than its {1}. Selling rate should be atleast {2}""") .format(item_name, ref_rate_field, rate)) if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"): @@ -178,18 +178,19 @@ class SellingController(StockController): for it in self.get("items"): last_purchase_rate, is_stock_item = frappe.db.get_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"]) - - if flt(it.base_rate) < flt(last_purchase_rate): - throw_message(it.item_name, last_purchase_rate, "last purchase rate") + last_purchase_rate_in_sales_uom = last_purchase_rate / (it.conversion_factor or 1) + if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom): + throw_message(it.item_name, last_purchase_rate_in_sales_uom, "last purchase rate") last_valuation_rate = frappe.db.sql(""" SELECT valuation_rate FROM `tabStock Ledger Entry` WHERE item_code = %s AND warehouse = %s AND valuation_rate > 0 ORDER BY posting_date DESC, posting_time DESC, name DESC LIMIT 1 """, (it.item_code, it.warehouse)) - - if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate): - throw_message(it.name, last_valuation_rate, "valuation rate") + if last_valuation_rate: + last_valuation_rate_in_sales_uom = last_valuation_rate[0][0] / (it.conversion_factor or 1) + if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom): + throw_message(it.name, last_valuation_rate_in_sales_uom, "valuation rate") def get_item_list(self): From 65c8466622c69a64bb904aa7cd1059c61949c3e0 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 5 May 2017 17:28:09 +0530 Subject: [PATCH 211/287] check for mandatory field before frappe.call (#8705) --- erpnext/schools/doctype/student_group/student_group.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index c2c6912ba0..ed9469015b 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -42,7 +42,7 @@ frappe.ui.form.on("Student Group", { }, get_students: function(frm) { - if (frm.doc.group_based_on != "Activity") { + if (frm.doc.group_based_on == "Batch" || frm.doc.group_based_on == "Course") { var student_list = []; var max_roll_no = 0; $.each(frm.doc.students, function(i,d) { From cac94b9bd51dbe6b6bd03df290262987803b9182 Mon Sep 17 00:00:00 2001 From: Pawan Mehta Date: Fri, 5 May 2017 17:29:57 +0530 Subject: [PATCH 212/287] [fix] #8373 (#8707) --- erpnext/buying/doctype/supplier/supplier.json | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json index 9adb42bb07..a590f372ec 100644 --- a/erpnext/buying/doctype/supplier/supplier.json +++ b/erpnext/buying/doctype/supplier/supplier.json @@ -15,6 +15,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -45,6 +46,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -76,6 +78,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -106,6 +109,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -136,6 +140,37 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "tax_id", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Tax ID", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -165,6 +200,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -193,6 +229,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -224,6 +261,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -254,6 +292,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -284,6 +323,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -313,6 +353,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -342,6 +383,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -370,6 +412,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -399,6 +442,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -428,6 +472,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -458,6 +503,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -487,6 +533,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -518,6 +565,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -546,6 +594,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -574,6 +623,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -602,6 +652,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -631,6 +682,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -662,6 +714,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -692,6 +745,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -722,6 +776,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -753,6 +808,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -794,7 +850,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-03-14 17:04:17.785461", + "modified": "2017-05-05 04:24:03.884380", "modified_by": "Administrator", "module": "Buying", "name": "Supplier", From 51cd2df763b458dbfc1e3f76448277988995c5a1 Mon Sep 17 00:00:00 2001 From: Dominik Ottenbreit Date: Fri, 5 May 2017 15:00:45 +0300 Subject: [PATCH 213/287] Fix Romanian Translation (#8706) --- erpnext/translations/ro.csv | 42 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/erpnext/translations/ro.csv b/erpnext/translations/ro.csv index cf444a3b0e..3f8797bbe6 100644 --- a/erpnext/translations/ro.csv +++ b/erpnext/translations/ro.csv @@ -36,7 +36,7 @@ DocType: Purchase Receipt Item,Required By,Cerute de DocType: Delivery Note,Return Against Delivery Note,Reveni Împotriva livrare Nota DocType: Purchase Order,% Billed,% Facurat apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +43,Exchange Rate must be same as {0} {1} ({2}),Rata de schimb trebuie să fie aceeași ca și {0} {1} ({2}) -DocType: Sales Invoice,Customer Name,Nume client +DocType: Sales Invoice,Customer Name,Cumpărător DocType: Vehicle,Natural Gas,Gaz natural apps/erpnext/erpnext/setup/setup_wizard/setup_wizard.py +130,Bank account cannot be named as {0},Contul bancar nu poate fi numit ca {0} DocType: Account,Heads (or groups) against which Accounting Entries are made and balances are maintained.,Heads (sau grupuri) față de care înregistrările contabile sunt făcute și soldurile sunt menținute. @@ -785,7 +785,7 @@ The tax rate you define here will be the standard tax rate for all **Items**. If #### Description of Columns -1. Calculation Type: +1. Calculation Type: - This can be on **Net Total** (that is the sum of basic amount). - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - **Actual** (as mentioned). @@ -796,19 +796,19 @@ The tax rate you define here will be the standard tax rate for all **Items**. If 6. Amount: Tax amount. 7. Total: Cumulative total to this point. 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). -9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Șablon de impozitare standard, care pot fi aplicate la toate tranzacțiile de vânzare. Acest model poate conține lista de capete fiscale și, de asemenea, mai multe capete de cheltuieli / venituri, cum ar fi ""de transport"", ""asigurare"", ""manipulare"" etc. +9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Șablon de impozitare standard, care pot fi aplicate la toate tranzacțiile de vânzare. Acest model poate conține lista de capete fiscale și, de asemenea, mai multe capete de cheltuieli / venituri, cum ar fi ""de transport"", ""asigurare"", ""manipulare"" etc. - #### Notă + #### Notă vă Rata de impozitare defini aici va fi cota de impozitare standard pentru toate Articole ** **. Dacă există articole ** **, care au preturi diferite, acestea trebuie să fie adăugate în ** Impozitul Postul ** masă în ** ** postul comandantului. - #### Descrierea de coloane + #### Descrierea de coloane - 1. Calcul Tip: + 1. Calcul Tip: - Acest lucru poate fi pe ** net total ** (care este suma cuantum de bază). - ** La rândul precedent Raport / Suma ** (pentru impozite sau taxe cumulative). Dacă selectați această opțiune, impozitul va fi aplicat ca procent din rândul anterior (în tabelul de impozitare) suma totală sau. - ** ** Real (după cum sa menționat). - 2. Șeful cont: Registrul cont în care acest impozit va fi rezervat + 2. Șeful cont: Registrul cont în care acest impozit va fi rezervat 3. Cost Center: În cazul în care taxa / taxa este un venit (cum ar fi de transport maritim) sau cheltuieli trebuie să se rezervat împotriva unui centru de cost. 4. Descriere: Descriere a taxei (care vor fi tipărite în facturi / citate). 5. Notă: Rata de Profit Brut. @@ -893,7 +893,7 @@ DocType: Employee,Provide Email Address registered in company,Furnizarea Adresa DocType: Shopping Cart Settings,Enable Checkout,activaţi Checkout apps/erpnext/erpnext/config/learn.py +202,Purchase Order to Payment,Comandă de aprovizionare de plata apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +48,Projected Qty,Proiectat Cantitate -DocType: Sales Invoice,Payment Due Date,Data scadentă de plată +DocType: Sales Invoice,Payment Due Date,Scadentă apps/erpnext/erpnext/stock/doctype/item/item.js +340,Item Variant {0} already exists with same attributes,Postul Varianta {0} există deja cu aceleași atribute apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +95,'Opening',"Deschiderea" apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +130,Open To Do,Deschideți To Do @@ -1021,7 +1021,7 @@ apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +30,"Row {0}: Invoice {1} apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +120,Row {0}: Payment against Sales/Purchase Order should always be marked as advance,Rând {0}: Plata împotriva Vânzări / Ordinului de Procurare ar trebui să fie întotdeauna marcate ca avans apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +16,Chemical,Chimic DocType: Salary Component Account,Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.,Default cont bancar / numerar vor fi actualizate automat în Jurnalul de intrare a salariului când este selectat acest mod. -apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades. +apps/erpnext/erpnext/schools/doctype/grading_structure/grading_structure.py +24,"The intervals for Grade Code {0} overlaps with the grade intervals for other grades. Please check intervals {0} and {1} and try again",Intervalele de cod Grad {0} se suprapune cu intervalele de grad pentru alte clase. Vă rugăm să verificați intervalele de {0} și {1} și încercați din nou DocType: BOM,Raw Material Cost(Company Currency),Brut Costul materialelor (companie Moneda) apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +715,All items have already been transferred for this Production Order.,Toate articolele acestei comenzi de producție au fost deja transferate. @@ -2345,7 +2345,7 @@ The tax rate you define here will be the standard tax rate for all **Items**. If #### Description of Columns -1. Calculation Type: +1. Calculation Type: - This can be on **Net Total** (that is the sum of basic amount). - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - **Actual** (as mentioned). @@ -2357,19 +2357,19 @@ The tax rate you define here will be the standard tax rate for all **Items**. If 7. Total: Cumulative total to this point. 8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). 9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. -10. Add or Deduct: Whether you want to add or deduct the tax.","Șablon de impozitare standard care pot fi aplicate la toate tranzacțiile de cumpărare. Acest model poate conține lista de capete fiscale și, de asemenea, mai multe capete de cheltuieli, cum ar fi ""de transport"", ""asigurare"", ""manipulare"" etc. +10. Add or Deduct: Whether you want to add or deduct the tax.","Șablon de impozitare standard care pot fi aplicate la toate tranzacțiile de cumpărare. Acest model poate conține lista de capete fiscale și, de asemenea, mai multe capete de cheltuieli, cum ar fi ""de transport"", ""asigurare"", ""manipulare"" etc. - #### Notă + #### Notă Rata de impozitare pe care o definiți aici va fi rata de impozitare standard pentru toate Articole ** **. Dacă există articole ** **, care au preturi diferite, acestea trebuie să fie adăugate în ** Impozitul Postul ** masă în ** ** postul comandantului. - #### Descrierea de coloane + #### Descrierea de coloane - 1. Calcul Tip: + 1. Calcul Tip: - Acest lucru poate fi pe ** net total ** (care este suma cuantum de bază). - ** La rândul precedent Raport / Suma ** (pentru impozite sau taxe cumulative). Dacă selectați această opțiune, impozitul va fi aplicat ca procent din rândul anterior (în tabelul de impozitare) suma totală sau. - ** ** Real (după cum sa menționat). - 2. Șeful cont: Registrul cont în care acest impozit va fi rezervat + 2. Șeful cont: Registrul cont în care acest impozit va fi rezervat 3. Cost Center: În cazul în care taxa / taxa este un venit (cum ar fi de transport maritim) sau cheltuieli trebuie să se rezervat împotriva unui centru de cost. 4. Descriere: Descriere a taxei (care vor fi tipărite în facturi / citate). 5. Notă: Rata de Profit Brut. @@ -2579,7 +2579,7 @@ Examples: 1. Ways of addressing disputes, indemnity, liability, etc. 1. Address and Contact of your Company.","Termeni și Condiții care pot fi adăugate la vânzările și achizițiile standard. - Exemple: + Exemple: 1. Perioada de valabilitate a ofertei. 1. Conditii de plata (in avans, pe credit, parte în avans etc.). @@ -2588,7 +2588,7 @@ Examples: 1. Garantie dacă este cazul. 1. Politica de Returnare. 1. Condiții de transport maritim, dacă este cazul. - 1. Modalitati de litigii de adresare, indemnizație, răspunderea, etc. + 1. Modalitati de litigii de adresare, indemnizație, răspunderea, etc. 1. Adresa și de contact ale companiei." DocType: Attendance,Leave Type,Tip Concediu DocType: Purchase Invoice,Supplier Invoice Details,Furnizor Detalii factură @@ -3641,7 +3641,7 @@ DocType: Accounts Settings,"If enabled, the system will post accounting entries apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +15,Brokerage,Brokeraj apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +232,Attendance for employee {0} is already marked for this day,Prezență pentru angajat {0} este deja marcat pentru această zi DocType: Production Order Operation,"in Minutes -Updated via 'Time Log'","în procesul-verbal +Updated via 'Time Log'","în procesul-verbal Actualizat prin ""Ora Log""" DocType: Customer,From Lead,Din Conducere apps/erpnext/erpnext/config/manufacturing.py +13,Orders released for production.,Comenzi lansat pentru producție. @@ -3743,7 +3743,7 @@ apps/erpnext/erpnext/config/learn.py +107,Newsletters,Buletine DocType: Stock Ledger Entry,Stock Ledger Entry,Stoc Ledger intrare apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +87,Same item has been entered multiple times,Același articol a fost introdus de mai multe ori DocType: Department,Leave Block List,Lista Concedii Blocate -DocType: Sales Invoice,Tax ID,ID impozit +DocType: Sales Invoice,Tax ID,Cod inregistrare fiscala apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +188,Item {0} is not setup for Serial Nos. Column must be blank,Articolul {0} nu este configurat pentru Numerotare Seriala. Coloana trebuie să fie vida DocType: Accounts Settings,Accounts Settings,Setări Conturi apps/erpnext/erpnext/schools/doctype/student_applicant/student_applicant.js +7,Approve,Aproba @@ -3843,7 +3843,7 @@ apps/erpnext/erpnext/controllers/recurring_document.py +136,Please find attached apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +34,Bank Statement balance as per General Ledger,Banca echilibru Declarație pe General Ledger DocType: Job Applicant,Applicant Name,Nume solicitant DocType: Authorization Rule,Customer / Item Name,Client / Denumire articol -DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. +DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. The package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"". @@ -4195,7 +4195,7 @@ DocType: Purchase Invoice Item,Rejected Serial No,Respins de ordine apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +82,Year start date or end date is overlapping with {0}. To avoid please set company,Anul Data de începere sau de încheiere este suprapunerea cu {0}. Pentru a evita vă rugăm să setați companie apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +157,Start date should be less than end date for Item {0},Data de începere trebuie să fie mai mică decât data de sfârșit pentru postul {0} DocType: Item,"Example: ABCD.##### -If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Exemplu:. ABCD ##### +If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Exemplu:. ABCD ##### Dacă seria este setat și nu de serie nu este menționat în tranzacții, numărul de atunci automat de serie va fi creat pe baza acestei serii. Dacă întotdeauna doriți să se menționeze explicit Serial nr de acest articol. părăsi acest gol." DocType: Upload Attendance,Upload Attendance,Încărcați Spectatori apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +302,BOM and Manufacturing Quantity are required,BOM și cantitatea de producție sunt necesare From b7e740ff455183e8163aeaeddd7d43b58d6f726b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sat, 6 May 2017 12:44:03 +0530 Subject: [PATCH 214/287] [minor] ignore permissions for bin on warehouse_query (#8713) --- erpnext/controllers/queries.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 88600e88cc..81c9defb46 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -360,7 +360,8 @@ def warehouse_query(doctype, txt, searchfield, start, page_len, filters): sub_query = """ select round(`tabBin`.actual_qty, 2) from `tabBin` where `tabBin`.warehouse = `tabWarehouse`.name {bin_conditions} """.format( - bin_conditions=get_filters_cond(doctype, filter_dict.get("Bin"), bin_conditions)) + bin_conditions=get_filters_cond(doctype, filter_dict.get("Bin"), bin_conditions), + ignore_permissions=True) response = frappe.db.sql("""select `tabWarehouse`.name, CONCAT_WS(" : ", "Actual Qty", ifnull( ({sub_query}), 0) ) as actual_qty From 6e7407962fc9b311188086e7c2ea0678feb62ad4 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 6 May 2017 12:45:16 +0530 Subject: [PATCH 215/287] Get exchange rate only if date and currency is present (#8712) * Get exchange rate only if date and currency is present * Update transaction.js --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py | 2 +- erpnext/public/js/controllers/transaction.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 4d58f987ca..530d08a62d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -204,7 +204,7 @@ class PurchaseInvoice(BuyingController): if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes': for d in self.get('items'): if not d.purchase_order: - throw(_("Purchse Order number required for Item {0}").format(d.item_code)) + throw(_("Purchase Order number required for Item {0}").format(d.item_code)) def pr_required(self): stock_items = self.get_stock_items() diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index cbedf80a14..7f0e917823 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -500,6 +500,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, get_exchange_rate: function(transaction_date, from_currency, to_currency, callback) { + if !(transaction_date && from_currency && to_currency) return; return frappe.call({ method: "erpnext.setup.utils.get_exchange_rate", args: { @@ -762,7 +763,6 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ if(calculate_taxes_and_totals) me.calculate_taxes_and_totals(); return; } - return this.frm.call({ method: "erpnext.accounts.doctype.pricing_rule.pricing_rule.apply_pricing_rule", args: { args: args }, @@ -1117,4 +1117,4 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ return method }, -}); \ No newline at end of file +}); From 7228e1af6e2bd45250438622acb3a13374e1023f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 6 May 2017 12:45:37 +0530 Subject: [PATCH 216/287] Customer/Supplier Name in sales/purchase analytics (#8717) --- .../buying/page/purchase_analytics/purchase_analytics.js | 8 ++------ erpnext/selling/page/sales_analytics/sales_analytics.js | 8 +++++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/erpnext/buying/page/purchase_analytics/purchase_analytics.js b/erpnext/buying/page/purchase_analytics/purchase_analytics.js index 3e6f23bede..10d1321398 100644 --- a/erpnext/buying/page/purchase_analytics/purchase_analytics.js +++ b/erpnext/buying/page/purchase_analytics/purchase_analytics.js @@ -35,11 +35,7 @@ erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({ item_key: "supplier", parent_field: "parent_supplier_type", formatter: function(item) { - // return repl('%(value)s', { - // value: item.name, - // enc_value: encodeURIComponent(item.name) - // }); - return item.name; + return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name; } }, "Supplier": { @@ -47,7 +43,7 @@ erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({ show: false, item_key: "supplier", formatter: function(item) { - return item.name; + return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name; } }, "Item Group": { diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.js b/erpnext/selling/page/sales_analytics/sales_analytics.js index 73793d4339..bb47f988f4 100644 --- a/erpnext/selling/page/sales_analytics/sales_analytics.js +++ b/erpnext/selling/page/sales_analytics/sales_analytics.js @@ -34,14 +34,16 @@ erpnext.SalesAnalytics = frappe.views.TreeGridReport.extend({ show: true, item_key: "customer", parent_field: "parent_customer_group", - formatter: function(item) { return item.customer_name || item.name; } + formatter: function(item) { + return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name; + } }, "Customer": { label: __("Customer"), show: false, item_key: "customer", formatter: function(item) { - return item.customer_name || item.name; + return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name; } }, "Item Group": { @@ -67,7 +69,7 @@ erpnext.SalesAnalytics = frappe.views.TreeGridReport.extend({ item_key: "customer", parent_field: "parent_territory", formatter: function(item) { - return item.name; + return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name; } } } From 3257aeeb5506b10a18c3ede9b3e7330a9d8225c0 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 6 May 2017 12:47:14 +0530 Subject: [PATCH 217/287] Price list rate fix multiple uom and validation with prev doc (#8718) --- .../doctype/sales_invoice/sales_invoice.py | 18 +++++++--- .../doctype/purchase_order/purchase_order.py | 3 +- erpnext/public/js/controllers/transaction.js | 7 ++-- .../doctype/delivery_note/delivery_note.py | 35 +++++++++++++------ 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index b1fe0bec84..295f649d60 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -341,13 +341,23 @@ class SalesInvoice(SellingController): super(SalesInvoice, self).validate_with_previous_doc({ "Sales Order": { "ref_dn_field": "sales_order", - "compare_fields": [["customer", "="], ["company", "="], ["project", "="], - ["currency", "="]], + "compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]] + }, + "Sales Order Item": { + "ref_dn_field": "so_detail", + "compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]], + "is_child_table": True, + "allow_duplicate_prev_row_id": True }, "Delivery Note": { "ref_dn_field": "delivery_note", - "compare_fields": [["customer", "="], ["company", "="], ["project", "="], - ["currency", "="]], + "compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]] + }, + "Delivery Note Item": { + "ref_dn_field": "dn_detail", + "compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]], + "is_child_table": True, + "allow_duplicate_prev_row_id": True }, }) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 88e7d20e08..e7b0d1ac8d 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -59,7 +59,8 @@ class PurchaseOrder(BuyingController): }, "Supplier Quotation Item": { "ref_dn_field": "supplier_quotation_item", - "compare_fields": [["rate", "="], ["project", "="], ["item_code", "="]], + "compare_fields": [["rate", "="], ["project", "="], ["item_code", "="], + ["uom", "="], ["conversion_factor", "="]], "is_child_table": True } }) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 7f0e917823..03c713eef2 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -564,14 +564,14 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ } }, - conversion_factor: function(doc, cdt, cdn) { + conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) { if(frappe.meta.get_docfield(cdt, "stock_qty", cdn)) { var item = frappe.get_doc(cdt, cdn); frappe.model.round_floats_in(item, ["qty", "conversion_factor"]); item.stock_qty = flt(item.qty * item.conversion_factor, precision("stock_qty", item)); refresh_field("stock_qty", item.name, item.parentfield); this.toggle_conversion_factor(item); - this.apply_price_list(item, true); + if(!dont_fetch_price_list_rate) this.apply_price_list(item, true); } }, @@ -582,7 +582,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, qty: function(doc, cdt, cdn) { - this.conversion_factor(doc, cdt, cdn); + this.conversion_factor(doc, cdt, cdn, true); + this.apply_pricing_rule(frappe.get_doc(cdt, cdn), true); }, set_dynamic_labels: function() { diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index a2a0115c1b..1c730ffd08 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -117,18 +117,31 @@ class DeliveryNote(SellingController): if not self.installation_status: self.installation_status = 'Not Installed' def validate_with_previous_doc(self): - for fn in (("Sales Order", "against_sales_order", "so_detail"), - ("Sales Invoice", "against_sales_invoice", "si_detail")): - if filter(None, [getattr(d, fn[1], None) for d in self.get("items")]): - super(DeliveryNote, self).validate_with_previous_doc({ - fn[0]: { - "ref_dn_field": fn[1], - "compare_fields": [["customer", "="], ["company", "="], ["project", "="], - ["currency", "="]], - }, - }) + super(DeliveryNote, self).validate_with_previous_doc({ + "Sales Order": { + "ref_dn_field": "against_sales_order", + "compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]] + }, + "Sales Order Item": { + "ref_dn_field": "so_detail", + "compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]], + "is_child_table": True, + "allow_duplicate_prev_row_id": True + }, + "Sales Invoice": { + "ref_dn_field": "against_sales_invoice", + "compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]] + }, + "Sales Invoice Item": { + "ref_dn_field": "si_detail", + "compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]], + "is_child_table": True, + "allow_duplicate_prev_row_id": True + }, + }) - if cint(frappe.db.get_single_value('Selling Settings', 'maintain_same_sales_rate')) and not self.is_return: + if cint(frappe.db.get_single_value('Selling Settings', 'maintain_same_sales_rate')) \ + and not self.is_return: self.validate_rate_with_reference_doc([["Sales Order", "against_sales_order", "so_detail"], ["Sales Invoice", "against_sales_invoice", "si_detail"]]) From 486045e1d12675aa012bafda95d90c720b1df7db Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Sat, 6 May 2017 12:47:42 +0530 Subject: [PATCH 218/287] [minor] check if date of joining is available before creating Salary Slip (#8700) --- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 ++++ erpnext/hr/doctype/salary_structure/salary_structure.py | 1 + 2 files changed, 5 insertions(+) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 5182c987a6..e42295810d 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -321,9 +321,13 @@ class SalarySlip(TransactionBase): def sum_components(self, component_type, total_field): joining_date, relieving_date = frappe.db.get_value("Employee", self.employee, ["date_of_joining", "relieving_date"]) + if not relieving_date: relieving_date = getdate(self.end_date) + if not joining_date: + frappe.throw(_("Please set the Date Of Joining for employee {0}").format(frappe.bold(employee.employee))) + for d in self.get(component_type): if ((cint(d.depends_on_lwp) == 1 and not self.salary_slip_based_on_timesheet) or\ getdate(self.start_date) < joining_date or getdate(self.end_date) > relieving_date): diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py index da69bccd59..dc1c04d439 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -33,6 +33,7 @@ class SalaryStructure(Document): for employee in self.get('employees'): joining_date, relieving_date = frappe.db.get_value("Employee", employee.employee, ["date_of_joining", "relieving_date"]) + if employee.from_date and joining_date and getdate(employee.from_date) < joining_date: frappe.throw(_("From Date {0} for Employee {1} cannot be before employee's joining Date {2}") .format(employee.from_date, employee.employee, joining_date)) From 120ee275cc20c930a73921158ad335f340b2a5c6 Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Sat, 6 May 2017 12:48:22 +0530 Subject: [PATCH 219/287] Fix typo (#8719) --- .../accounts/report/purchase_register/purchase_register.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py index 47f79f1712..1a63a9d819 100644 --- a/erpnext/accounts/report/purchase_register/purchase_register.py +++ b/erpnext/accounts/report/purchase_register/purchase_register.py @@ -20,7 +20,7 @@ def execute(filters=None): invoice_expense_map, invoice_tax_map = get_invoice_tax_map(invoice_list, invoice_expense_map, expense_accounts) invoice_po_pr_map = get_invoice_po_pr_map(invoice_list) - supplier_details = get_supplier_deatils(invoice_list) + supplier_details = get_supplier_details(invoice_list) company_currency = frappe.db.get_value("Company", filters.company, "default_currency") @@ -205,7 +205,7 @@ def get_account_details(invoice_list): return account_map -def get_supplier_deatils(invoice_list): +def get_supplier_details(invoice_list): supplier_details = {} suppliers = list(set([inv.supplier for inv in invoice_list])) for supp in frappe.db.sql("""select name, supplier_type from `tabSupplier` From 17179ee83a6956e5764d5dadddf0373392bad2c9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 6 May 2017 13:23:12 +0530 Subject: [PATCH 220/287] minor syntax fix --- erpnext/public/js/controllers/transaction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 03c713eef2..6539530292 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -500,7 +500,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ }, get_exchange_rate: function(transaction_date, from_currency, to_currency, callback) { - if !(transaction_date && from_currency && to_currency) return; + if (!transaction_date || !from_currency || !to_currency) return; return frappe.call({ method: "erpnext.setup.utils.get_exchange_rate", args: { From b5a9822fffd3a0d61a37479130aafbebed671ed8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 6 May 2017 14:10:52 +0600 Subject: [PATCH 221/287] bumped to version 8.0.23 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index d102c9e9cd..9e586b53a7 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.22' +__version__ = '8.0.23' def get_default_company(user=None): '''Get default company for user''' From a6bc583daf96e6bdc4ab00961b29c9b3930bf72a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 8 May 2017 11:35:40 +0530 Subject: [PATCH 222/287] [minor] item route is item name + code --- erpnext/stock/doctype/item/item.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 6a9fd24900..584541ff08 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -142,7 +142,8 @@ class Item(WebsiteGenerator): def make_route(self): if not self.route: - return cstr(frappe.db.get_value('Item Group', self.item_group, 'route')) + '/' + self.scrub(self.name) + return cstr(frappe.db.get_value('Item Group', self.item_group, + 'route')) + '/' + self.scrub(self.item_code + '-' + self.name) def get_parents(self, context): item_group, route = frappe.db.get_value('Item Group', self.item_group, ['name', 'route']) From 9df45bbc427a5c559abe29edc39a49193d57525c Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 8 May 2017 17:24:23 +0530 Subject: [PATCH 223/287] [fix] Reference Document is required to create Payment Request (#8729) * [fix] Referene Document is required to create Payment Request * Update payment_request.py --- .../payment_request/payment_request.json | 30 +++++++++++++++++-- .../payment_request/payment_request.py | 5 ++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json index c1580f6ef2..738206cdb0 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.json +++ b/erpnext/accounts/doctype/payment_request/payment_request.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "naming_series:", @@ -13,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -72,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -103,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -132,6 +137,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -161,6 +167,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -189,6 +196,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -219,6 +227,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -249,6 +258,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -280,6 +290,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -311,6 +322,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -341,6 +353,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -369,6 +382,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -398,6 +412,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -428,6 +443,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -457,6 +473,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -486,6 +503,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -516,6 +534,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -546,6 +565,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -576,6 +596,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -605,6 +626,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -635,6 +657,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -665,6 +688,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -694,17 +718,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 0, "image_view": 0, - "in_create": 0, - "in_dialog": 0, + "in_create": 1, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-23 05:03:37.464863", + "modified": "2017-05-08 12:09:25.759145", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Request", diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index fdb598e55e..4694ef8306 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -14,9 +14,14 @@ from frappe.integrations.utils import get_payment_gateway_controller class PaymentRequest(Document): def validate(self): + self.validate_reference_document() self.validate_payment_request() self.validate_currency() + def validate_reference_document(self): + if not self.reference_doctype or not self.reference_name: + frappe.throw(_("To create a Payment Request reference document is required")) + def validate_payment_request(self): if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name, "name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"): From 226ea7db8883e9e014f2ade9438de771291eef9a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 8 May 2017 17:34:07 +0530 Subject: [PATCH 224/287] Filter issue on timesheet calendar view (#8730) --- erpnext/projects/doctype/timesheet/timesheet.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 490a70721a..154f0d0f20 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -382,9 +382,13 @@ def get_events(start, end, filters=None): def get_conditions(filters): conditions = [] - abbr = {'employee': 'tabTimesheet', 'project': 'tabTimesheet Detail'} for key in filters: if filters.get(key): - conditions.append("`%s`.%s = '%s'"%(abbr.get(key), key, filters.get(key))) + if frappe.get_meta("Timesheet").has_field(key): + dt = 'tabTimesheet' + elif frappe.get_meta("Timesheet Detail").has_field(key): + dt = 'tabTimesheet Detail' + + conditions.append("`%s`.%s = '%s'"%(dt, key, filters.get(key))) return " and {}".format(" and ".join(conditions)) if conditions else "" From 95233a62d76fd74f82813d9d30845e89b6433dba Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 9 May 2017 07:48:23 +0530 Subject: [PATCH 225/287] [minor] item route item_name + random string --- erpnext/stock/doctype/item/item.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 584541ff08..9b9eb63050 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -7,7 +7,8 @@ import erpnext import json import itertools from frappe import msgprint, _ -from frappe.utils import cstr, flt, cint, getdate, now_datetime, formatdate, strip, get_timestamp +from frappe.utils import (cstr, flt, cint, getdate, now_datetime, formatdate, + strip, get_timestamp, random_string) from frappe.website.website_generator import WebsiteGenerator from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for, get_parent_item_groups from frappe.website.render import clear_cache @@ -143,7 +144,7 @@ class Item(WebsiteGenerator): def make_route(self): if not self.route: return cstr(frappe.db.get_value('Item Group', self.item_group, - 'route')) + '/' + self.scrub(self.item_code + '-' + self.name) + 'route')) + '/' + self.scrub(self.item_name + '-' + random_string(5)) def get_parents(self, context): item_group, route = frappe.db.get_value('Item Group', self.item_group, ['name', 'route']) From 4e6ff8ccd82fe90a9b4619a66b78460fa8968514 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 9 May 2017 15:09:10 +0530 Subject: [PATCH 226/287] Ignore permission for Bin in warehouse query (#8742) --- erpnext/controllers/queries.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 81c9defb46..2f98e865bc 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -360,8 +360,8 @@ def warehouse_query(doctype, txt, searchfield, start, page_len, filters): sub_query = """ select round(`tabBin`.actual_qty, 2) from `tabBin` where `tabBin`.warehouse = `tabWarehouse`.name {bin_conditions} """.format( - bin_conditions=get_filters_cond(doctype, filter_dict.get("Bin"), bin_conditions), - ignore_permissions=True) + bin_conditions=get_filters_cond(doctype, filter_dict.get("Bin"), + bin_conditions, ignore_permissions=True)) response = frappe.db.sql("""select `tabWarehouse`.name, CONCAT_WS(" : ", "Actual Qty", ifnull( ({sub_query}), 0) ) as actual_qty From 70e17787129da837d710a275ed69a1bb438f9a6e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 9 May 2017 15:43:32 +0600 Subject: [PATCH 227/287] bumped to version 8.0.24 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 9e586b53a7..693c9bee1b 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.23' +__version__ = '8.0.24' def get_default_company(user=None): '''Get default company for user''' From 426b8a14fdf5ff5853ccfaaead83f1b02789b04b Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 9 May 2017 15:32:52 +0530 Subject: [PATCH 228/287] Merge the student group and student batch (#8663) * deleted student batch creation tool * Patch for deleting the doctype and config * Changes in the student attendance * Patch for renaming the student batch as student group * Changes in the student attendance * Change in the student attendance reports - Absent student report - Student Batch-wise attendance - Student monthly attendance sheet * Changes in the patch * Changes in the course schedule * Changes in the course scheduling tool * Change in the assessment plan * Changes in the assessment result tool * Cleanup * Changes in the api.py * create student group from student batch * delete student batch * add patch * remove student batch from config/schools.py * Delete the depricated doctype with patch * Changes in patch * Changes as per PR --- erpnext/config/schools.py | 8 - erpnext/patches.txt | 3 +- .../merge_student_batch_and_student_group.py | 49 +++ erpnext/public/js/schools/student_button.html | 4 +- erpnext/schools/api.py | 45 +-- .../doctype/assessment_code/__init__.py | 0 .../assessment_code/assessment_code.js | 8 - .../assessment_code/assessment_code.json | 89 ---- .../assessment_code/assessment_code.py | 10 - .../assessment_code/test_assessment_code.py | 12 - .../assessment_plan/assessment_plan.js | 3 +- .../assessment_plan/assessment_plan.json | 109 ++--- .../assessment_plan/assessment_plan.py | 15 +- .../assessment_result_tool.js | 6 +- .../assessment_result_tool.json | 48 +-- .../attendance_tool_student/__init__.py | 0 .../attendance_tool_student.json | 114 ------ .../attendance_tool_student.py | 10 - erpnext/schools/doctype/course/.txt | 0 .../course_schedule/course_schedule.js | 1 + .../course_schedule/course_schedule.json | 50 +-- .../course_schedule/course_schedule.py | 26 +- .../course_scheduling_tool.js | 1 - .../course_scheduling_tool.json | 251 ++++++------ .../course_scheduling_tool.py | 16 +- .../doctype/grading_scale/grading_scale.py | 2 +- .../doctype/student/student_dashboard.py | 2 +- .../student_attendance/student_attendance.js | 2 +- .../student_attendance.json | 49 +-- .../student_attendance/student_attendance.py | 28 +- .../doctype/student_attendance/untitled.txt | 20 - .../student_attendance_tool.js | 29 +- .../student_attendance_tool.json | 26 +- .../student_attendance_tool.py | 25 +- .../schools/doctype/student_batch/__init__.py | 0 .../doctype/student_batch/student_batch.js | 34 -- .../doctype/student_batch/student_batch.json | 379 ------------------ .../doctype/student_batch/student_batch.py | 24 -- .../student_batch/test_student_batch.py | 12 - .../student_batch_creation_tool/__init__.py | 0 .../student_batch_creation_tool.js | 8 - .../student_batch_creation_tool.json | 176 -------- .../student_batch_creation_tool.py | 27 -- .../student_batch_instructor/__init__.py | 0 .../student_batch_instructor.json | 123 ------ .../student_batch_instructor.py | 10 - .../doctype/student_batch_student/__init__.py | 0 .../student_batch_student.json | 148 ------- .../student_batch_student.py | 10 - .../doctype/student_group/student_group.py | 10 +- .../absent_student_report.py | 8 +- .../student_batch_wise_attendance.py | 40 +- .../student_monthly_attendance_sheet.js | 6 +- .../student_monthly_attendance_sheet.py | 18 +- 54 files changed, 405 insertions(+), 1689 deletions(-) create mode 100644 erpnext/patches/v8_0/merge_student_batch_and_student_group.py delete mode 100644 erpnext/schools/doctype/assessment_code/__init__.py delete mode 100644 erpnext/schools/doctype/assessment_code/assessment_code.js delete mode 100644 erpnext/schools/doctype/assessment_code/assessment_code.json delete mode 100644 erpnext/schools/doctype/assessment_code/assessment_code.py delete mode 100644 erpnext/schools/doctype/assessment_code/test_assessment_code.py delete mode 100644 erpnext/schools/doctype/attendance_tool_student/__init__.py delete mode 100644 erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json delete mode 100644 erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py delete mode 100644 erpnext/schools/doctype/course/.txt delete mode 100644 erpnext/schools/doctype/student_attendance/untitled.txt delete mode 100644 erpnext/schools/doctype/student_batch/__init__.py delete mode 100644 erpnext/schools/doctype/student_batch/student_batch.js delete mode 100644 erpnext/schools/doctype/student_batch/student_batch.json delete mode 100644 erpnext/schools/doctype/student_batch/student_batch.py delete mode 100644 erpnext/schools/doctype/student_batch/test_student_batch.py delete mode 100644 erpnext/schools/doctype/student_batch_creation_tool/__init__.py delete mode 100644 erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js delete mode 100644 erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json delete mode 100644 erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py delete mode 100644 erpnext/schools/doctype/student_batch_instructor/__init__.py delete mode 100644 erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json delete mode 100644 erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py delete mode 100644 erpnext/schools/doctype/student_batch_student/__init__.py delete mode 100644 erpnext/schools/doctype/student_batch_student/student_batch_student.json delete mode 100644 erpnext/schools/doctype/student_batch_student/student_batch_student.py diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index c88a8ccf4b..c54f808bbc 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -18,10 +18,6 @@ def get_data(): "type": "doctype", "name": "Student Log" }, - { - "type": "doctype", - "name": "Student Batch" - }, { "type": "doctype", "name": "Student Group" @@ -58,10 +54,6 @@ def get_data(): { "type": "doctype", "name": "Program Enrollment Tool" - }, - { - "type": "doctype", - "name": "Student Batch Creation Tool" } ] }, diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 853d3bbced..c5281bbc61 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -391,4 +391,5 @@ erpnext.patches.v8_0.set_project_copied_from erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim erpnext.patches.v7_2.stock_uom_in_selling erpnext.patches.v8_0.revert_manufacturers_table_from_item -erpnext.patches.v8_0.disable_instructor_role \ No newline at end of file +erpnext.patches.v8_0.disable_instructor_role +erpnext.patches.v8_0.merge_student_batch_and_student_group diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py new file mode 100644 index 0000000000..5b45cc7602 --- /dev/null +++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py @@ -0,0 +1,49 @@ +# Copyright (c) 2017, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.utils.rename_field import * +from frappe.model.mapper import get_mapped_doc + + +def execute(): + + # for converting student batch into student group + frappe.reload_doctype("Student Group") + student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch, + program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1) + for student_batch in student_batches: + student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"}) + doc = frappe.get_doc(student_batch) + student_list = frappe.db.sql('''select student, student_name, active from `tabStudent Batch Student` + where parent=%s''', (doc.name), as_dict=1) + for i, student in enumerate(student_list): + student.update({"group_roll_number": i+1}) + + if student_list: + doc.extend("students", student_list) + + instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor` + where parent=%s''', (doc.name), as_dict=1) + if instructor_list: + doc.extend("instructors", instructor_list) + doc.save() + + # delete the student batch and child-table + frappe.delete_doc("DocType", "Student Batch", force=1) + frappe.delete_doc("DocType", "Student Batch Student", force=1) + frappe.delete_doc("DocType", "Student Batch Instructor", force=1) + + # delete the student batch creation tool + frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1) + + # delete the student batch creation tool + frappe.delete_doc("DocType", "Attendance Tool Student", force=1) + + # change the student batch to student group in the student attendance + frappe.reload_doctype("Student Attendance") + + table_columns = frappe.db.get_table_columns("Student Attendance") + if "student_batch" in table_columns: + rename_field("Student Attendance", "student_batch", "student_group") diff --git a/erpnext/public/js/schools/student_button.html b/erpnext/public/js/schools/student_button.html index 4196808355..3cf259216a 100644 --- a/erpnext/public/js/schools/student_button.html +++ b/erpnext/public/js/schools/student_button.html @@ -3,7 +3,7 @@ \ No newline at end of file diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index 623b1e0a0e..43d24383f9 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -33,26 +33,26 @@ def enroll_student(source_name): return program_enrollment @frappe.whitelist() -def check_attendance_records_exist(course_schedule=None, student_batch=None, date=None): - """Check if Attendance Records are made against the specified Course Schedule or Student Batch for given date. +def check_attendance_records_exist(course_schedule=None, student_group=None, date=None): + """Check if Attendance Records are made against the specified Course Schedule or Student Group for given date. :param course_schedule: Course Schedule. - :param student_batch: Student Batch. + :param student_group: Student Group. :param date: Date. """ if course_schedule: return frappe.get_list("Student Attendance", filters={"course_schedule": course_schedule}) else: - return frappe.get_list("Student Attendance", filters={"student_batch": student_batch, "date": date}) + return frappe.get_list("Student Attendance", filters={"student_group": student_group, "date": date}) @frappe.whitelist() -def mark_attendance(students_present, students_absent, course_schedule=None, student_batch=None, date=None): +def mark_attendance(students_present, students_absent, course_schedule=None, student_group=None, date=None): """Creates Multiple Attendance Records. :param students_present: Students Present JSON. :param students_absent: Students Absent JSON. :param course_schedule: Course Schedule. - :param student_batch: Student Batch. + :param student_group: Student Group. :param date: Date. """ @@ -60,15 +60,15 @@ def mark_attendance(students_present, students_absent, course_schedule=None, stu absent = json.loads(students_absent) for d in present: - make_attendance_records(d["student"], d["student_name"], "Present", course_schedule, student_batch, date) + make_attendance_records(d["student"], d["student_name"], "Present", course_schedule, student_group, date) for d in absent: - make_attendance_records(d["student"], d["student_name"], "Absent", course_schedule, student_batch, date) + make_attendance_records(d["student"], d["student_name"], "Absent", course_schedule, student_group, date) frappe.db.commit() frappe.msgprint(_("Attendance has been marked successfully.")) -def make_attendance_records(student, student_name, status, course_schedule=None, student_batch=None, date=None): +def make_attendance_records(student, student_name, status, course_schedule=None, student_group=None, date=None): """Creates/Update Attendance Record. :param student: Student. @@ -79,7 +79,7 @@ def make_attendance_records(student, student_name, status, course_schedule=None, student_attendance_list = frappe.get_list("Student Attendance", fields = ['name'], filters = { "student": student, "course_schedule": course_schedule, - "student_batch": student_batch, + "student_group": student_group, "date": date }) @@ -90,7 +90,7 @@ def make_attendance_records(student, student_name, status, course_schedule=None, student_attendance.student = student student_attendance.student_name = student_name student_attendance.course_schedule = course_schedule - student_attendance.student_batch = student_batch + student_attendance.student_group = student_group student_attendance.date = date student_attendance.status = status student_attendance.save() @@ -105,16 +105,6 @@ def get_student_guardians(student): filters={"parent": student}) return guardians -@frappe.whitelist() -def get_student_batch_students(student_batch): - """Returns List of student, student_name, idx in Student Batch. - - :param student_batch: Student Batch. - """ - students = frappe.get_list("Student Batch Student", fields=["student", "student_name", "idx"] , - filters={"parent": student_batch, "active": 1}, order_by= "idx") - return students - @frappe.whitelist() def get_student_group_students(student_group): """Returns List of student, student_name in Student Group. @@ -122,7 +112,7 @@ def get_student_group_students(student_group): :param student_group: Student Group. """ students = frappe.get_list("Student Group Student", fields=["student", "student_name"] , - filters={"parent": student_group, "active": 1}, order_by= "idx") + filters={"parent": student_group, "active": 1}, order_by= "group_roll_number") return students @frappe.whitelist() @@ -199,12 +189,9 @@ def get_assessment_criteria(course): fields=["assessment_criteria", "weightage"], filters={"parent": course}, order_by= "idx") @frappe.whitelist() -def get_assessment_students(assessment_plan, student_group=None, student_batch=None): - student_list = [] - if student_group: - student_list = get_student_group_students(student_group) - elif student_batch: - student_list = get_student_batch_students(student_batch) +def get_assessment_students(assessment_plan, student_group): + + student_list = get_student_group_students(student_group) for i, student in enumerate(student_list): result = get_result(student.student, assessment_plan) if result: @@ -286,8 +273,6 @@ def update_email_group(doctype, name): email_group.save() email_list = [] students = [] - if doctype == "Student Batch": - students = get_student_batch_students(name) if doctype == "Student Group": students = get_student_group_students(name) for stud in students: diff --git a/erpnext/schools/doctype/assessment_code/__init__.py b/erpnext/schools/doctype/assessment_code/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.js b/erpnext/schools/doctype/assessment_code/assessment_code.js deleted file mode 100644 index 143791b8a8..0000000000 --- a/erpnext/schools/doctype/assessment_code/assessment_code.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Assessment Code', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.json b/erpnext/schools/doctype/assessment_code/assessment_code.json deleted file mode 100644 index d3acf7a910..0000000000 --- a/erpnext/schools/doctype/assessment_code/assessment_code.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:assessment_code", - "beta": 0, - "creation": "2017-02-13 19:33:43.843028", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "assessment_code", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Assessment Code", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "2017-02-13 19:33:47.037170", - "modified_by": "Administrator", - "module": "Schools", - "name": "Assessment Code", - "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_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.py b/erpnext/schools/doctype/assessment_code/assessment_code.py deleted file mode 100644 index 175564e04e..0000000000 --- a/erpnext/schools/doctype/assessment_code/assessment_code.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- 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 AssessmentCode(Document): - pass diff --git a/erpnext/schools/doctype/assessment_code/test_assessment_code.py b/erpnext/schools/doctype/assessment_code/test_assessment_code.py deleted file mode 100644 index d6ccb8f57d..0000000000 --- a/erpnext/schools/doctype/assessment_code/test_assessment_code.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- 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('Assessment Code') - -class TestAssessmentCode(unittest.TestCase): - pass diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.js b/erpnext/schools/doctype/assessment_plan/assessment_plan.js index b1e87687ff..3c9ab80d2d 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.js +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.js @@ -2,7 +2,6 @@ // For license information, please see license.txt cur_frm.add_fetch("student_group", "course", "course"); -cur_frm.add_fetch("student_group", "student_batch", "student_batch"); cur_frm.add_fetch("examiner", "instructor_name", "examiner_name"); cur_frm.add_fetch("supervisor", "instructor_name", "supervisor_name"); @@ -12,7 +11,7 @@ frappe.ui.form.on("Assessment Plan", { frm.add_custom_button(__("Assessment Result"), function() { frappe.route_options = { assessment_plan: frm.doc.name, - student_batch: frm.doc.student_batch + student_group: frm.doc.student_group } frappe.set_route("Form", "Assessment Result Tool"); }); diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.json b/erpnext/schools/doctype/assessment_plan/assessment_plan.json index 042bdaf774..697a0d4edc 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.json +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.json @@ -43,68 +43,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "assessment_group", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Assessment Group", - "length": 0, - "no_copy": 0, - "options": "Assessment Group", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -113,7 +51,7 @@ "columns": 0, "fieldname": "student_group", "fieldtype": "Link", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -131,7 +69,38 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "course", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Course", + "length": 0, + "no_copy": 0, + "options": "Course", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -171,19 +140,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "course", + "fieldname": "assessment_group", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 1, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 1, - "label": "Course", + "label": "Assessment Group", "length": 0, "no_copy": 0, - "options": "Course", + "options": "Assessment Group", "permlevel": 0, "precision": "", "print_hide": 0, @@ -191,7 +160,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -664,7 +633,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-25 12:23:32.528982", + "modified": "2017-05-02 12:54:11.991616", "modified_by": "Administrator", "module": "Schools", "name": "Assessment Plan", diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.py b/erpnext/schools/doctype/assessment_plan/assessment_plan.py index 31e96aac5d..7f83c0176b 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.py +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.py @@ -9,21 +9,15 @@ from frappe import _ class AssessmentPlan(Document): def validate(self): - if not (self.student_batch or self.student_group): - frappe.throw(_("Please select Student Group or Student Batch")) - self.validate_student_batch() self.validate_overlap() self.validate_max_score() def validate_overlap(self): - """Validates overlap for Student Group/Student Batch, Instructor, Room""" + """Validates overlap for Student Group, Instructor, Room""" from erpnext.schools.utils import validate_overlap_for #Validate overlapping course schedules. - if self.student_batch: - validate_overlap_for(self, "Course Schedule", "student_batch") - if self.student_group: validate_overlap_for(self, "Course Schedule", "student_group") @@ -31,19 +25,12 @@ class AssessmentPlan(Document): validate_overlap_for(self, "Course Schedule", "room") #validate overlapping assessment schedules. - if self.student_batch: - validate_overlap_for(self, "Assessment Plan", "student_batch") - if self.student_group: validate_overlap_for(self, "Assessment Plan", "student_group") validate_overlap_for(self, "Assessment Plan", "room") validate_overlap_for(self, "Assessment Plan", "supervisor", self.supervisor) - def validate_student_batch(self): - if self.student_group: - self.student_batch = frappe.db.get_value("Student Group", self.student_group, "student_batch") - def validate_max_score(self): max_score = 0 for d in self.assessment_criteria: diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js index 213111ac4d..3cadea6edc 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js @@ -3,12 +3,11 @@ // For license information, please see license.txt cur_frm.add_fetch("assessment_plan", "student_group", "student_group"); -cur_frm.add_fetch("assessment_plan", "student_batch", "student_batch"); frappe.ui.form.on('Assessment Result Tool', { refresh: function(frm) { if (frappe.route_options) { - frm.set_value("student_batch", frappe.route_options.student_batch); + frm.set_value("student_group", frappe.route_options.student_group); frm.set_value("assessment_plan", frappe.route_options.assessment_plan); frappe.route_options = null; } @@ -17,12 +16,11 @@ frappe.ui.form.on('Assessment Result Tool', { }, assessment_plan: function(frm) { - if(!(frm.doc.student_batch || frm.doc.student_group)) return; + if(!frm.doc.student_group) return; frappe.call({ method: "erpnext.schools.api.get_assessment_students", args: { "assessment_plan": frm.doc.assessment_plan, - "student_batch": frm.doc.student_batch, "student_group": frm.doc.student_group }, callback: function(r) { diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json index 87dff4d154..d82aaf5bc8 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json @@ -1,5 +1,6 @@ { "allow_copy": 1, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -12,6 +13,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -23,6 +25,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Assessment Plan", @@ -42,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -52,6 +56,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -69,6 +74,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -79,6 +85,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Student Group", @@ -92,41 +99,13 @@ "read_only": 1, "remember_last_selected_value": 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_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -138,6 +117,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -155,6 +135,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -165,6 +146,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Result HTML", @@ -183,17 +165,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 1, "hide_toolbar": 1, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-01-05 15:45:59.338722", + "modified": "2017-05-02 15:12:30.953036", "modified_by": "Administrator", "module": "Schools", "name": "Assessment Result Tool", @@ -210,7 +192,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -225,6 +206,7 @@ "quick_entry": 1, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", "track_changes": 0, diff --git a/erpnext/schools/doctype/attendance_tool_student/__init__.py b/erpnext/schools/doctype/attendance_tool_student/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json b/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json deleted file mode 100644 index 731de83cda..0000000000 --- a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2015-11-10 16:28:51.366668", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "student", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "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, - "collapsible": 0, - "fieldname": "student_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Student Name", - "length": 0, - "no_copy": 0, - "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, - "fieldname": "status", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Status", - "length": 0, - "no_copy": 0, - "options": "Absent\nPresent\n", - "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-07-21 12:30:02.983801", - "modified_by": "Administrator", - "module": "Schools", - "name": "Attendance Tool Student", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "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/attendance_tool_student/attendance_tool_student.py b/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py deleted file mode 100644 index 99a89d987b..0000000000 --- a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe.model.document import Document - -class AttendanceToolStudent(Document): - pass diff --git a/erpnext/schools/doctype/course/.txt b/erpnext/schools/doctype/course/.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.js b/erpnext/schools/doctype/course_schedule/course_schedule.js index 12e852215a..6521469b24 100644 --- a/erpnext/schools/doctype/course_schedule/course_schedule.js +++ b/erpnext/schools/doctype/course_schedule/course_schedule.js @@ -1,5 +1,6 @@ frappe.provide("schools") +cur_frm.add_fetch("student_group", "course", "course") frappe.ui.form.on("Course Schedule", { refresh: function(frm) { if (!frm.doc.__islocal) { diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.json b/erpnext/schools/doctype/course_schedule/course_schedule.json index d678d280a3..f70db4e2aa 100644 --- a/erpnext/schools/doctype/course_schedule/course_schedule.json +++ b/erpnext/schools/doctype/course_schedule/course_schedule.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", @@ -13,36 +14,7 @@ "engine": "InnoDB", "fields": [ { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -67,12 +39,13 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -103,6 +76,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -133,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -161,6 +136,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -192,6 +168,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -222,6 +199,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -250,6 +228,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -280,6 +259,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,6 +290,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -338,6 +319,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -367,6 +349,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -396,6 +379,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -425,18 +409,18 @@ "unique": 0 } ], + "has_web_view": 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, "menu_index": 0, - "modified": "2017-02-17 17:14:46.074804", + "modified": "2017-05-02 12:12:35.785061", "modified_by": "Administrator", "module": "Schools", "name": "Course Schedule", diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.py b/erpnext/schools/doctype/course_schedule/course_schedule.py index d12ae9dfbf..845f5f5f92 100644 --- a/erpnext/schools/doctype/course_schedule/course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/course_schedule.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- + # -*- coding: utf-8 -*- # Copyright (c) 2015, Frappe Technologies and contributors # For license information, please see license.txt @@ -11,7 +11,6 @@ class CourseSchedule(Document): def validate(self): self.instructor_name = frappe.db.get_value("Instructor", self.instructor, "instructor_name") self.set_title() - self.validate_mandatory() self.validate_course() self.validate_date() self.validate_overlap() @@ -19,33 +18,23 @@ class CourseSchedule(Document): def set_title(self): """Set document Title""" self.title = self.course + " by " + (self.instructor_name if self.instructor_name else self.instructor) - - def validate_mandatory(self): - if not (self.student_batch or self.student_group): - frappe.throw(_("""Student Batch or Student Group is mandatory""")) def validate_course(self): - if self.student_group: - self.course= frappe.db.get_value("Student Group", self.student_group, "course") - - def set_student_batch(self): - if self.student_group: - self.student_batch = frappe.db.get_value("Student Group", self.student_group, "student_batch") - + group_based_on, course = frappe.db.get_value("Student Group", self.student_group, ["group_based_on", "course"]) + if group_based_on == "Course": + self.course = course + def validate_date(self): """Validates if from_time is greater than to_time""" if self.from_time > self.to_time: frappe.throw(_("From Time cannot be greater than To Time.")) def validate_overlap(self): - """Validates overlap for Student Group/Student Batch, Instructor, Room""" + """Validates overlap for Student Group, Instructor, Room""" from erpnext.schools.utils import validate_overlap_for #Validate overlapping course schedules. - if self.student_batch: - validate_overlap_for(self, "Course Schedule", "student_batch") - if self.student_group: validate_overlap_for(self, "Course Schedule", "student_group") @@ -53,9 +42,6 @@ class CourseSchedule(Document): validate_overlap_for(self, "Course Schedule", "room") #validate overlapping assessment schedules. - if self.student_batch: - validate_overlap_for(self, "Assessment Plan", "student_batch") - if self.student_group: validate_overlap_for(self, "Assessment Plan", "student_group") diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js index ea62b8f544..b835ce05d4 100644 --- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js +++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js @@ -2,7 +2,6 @@ // For license information, please see license.txt cur_frm.add_fetch("student_group", "program", "program"); -cur_frm.add_fetch("student_group", "student_batch", "student_batch"); cur_frm.add_fetch("student_group", "course", "course"); cur_frm.add_fetch("student_group", "academic_year", "academic_year"); cur_frm.add_fetch("student_group", "academic_term", "academic_term"); diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json index a66960ef0a..944b3d5b16 100644 --- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json +++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json @@ -1,5 +1,6 @@ { "allow_copy": 1, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -12,35 +13,7 @@ "engine": "InnoDB", "fields": [ { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -51,6 +24,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Student Group", @@ -64,12 +38,13 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -80,6 +55,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Course", @@ -99,91 +75,7 @@ "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, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "academic_year", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "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": 1, - "remember_last_selected_value": 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": "academic_term", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Academic Term", - "length": 0, - "no_copy": 0, - "options": "Academic Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -194,6 +86,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Program", @@ -213,16 +106,18 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "section_break_6", - "fieldtype": "Section Break", + "fieldname": "column_break_3", + "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -240,6 +135,98 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "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": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 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_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -250,6 +237,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Instructor", @@ -269,6 +257,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -279,6 +268,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Instructor Name", @@ -298,6 +288,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -308,6 +299,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -325,6 +317,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -335,6 +328,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Room", @@ -354,6 +348,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -364,6 +359,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -381,6 +377,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -392,6 +389,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "From Time", @@ -410,6 +408,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -421,6 +420,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Course Start Date", @@ -440,6 +440,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -450,6 +451,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Day", @@ -469,6 +471,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -479,6 +482,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Rechedule", @@ -497,6 +501,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -507,6 +512,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "length": 0, @@ -524,6 +530,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -534,6 +541,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "To TIme", @@ -552,6 +560,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -563,6 +572,7 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, "label": "Course End Date", @@ -581,18 +591,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 1, "hide_toolbar": 1, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-11-21 16:58:29.295922", + "modified": "2017-05-02 12:25:35.428490", "modified_by": "Administrator", "module": "Schools", "name": "Course Scheduling Tool", @@ -609,7 +619,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -624,7 +633,9 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py index 86fefe20cc..4e079221ff 100644 --- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py +++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py @@ -22,10 +22,11 @@ class CourseSchedulingTool(Document): self.validate_mandatory() self.validate_date() self.instructor_name= frappe.db.get_value("Instructor", self.instructor, "instructor_name") - - if self.student_group: - self.course= frappe.db.get_value("Student Group", self.student_group, "course") - + + group_based_on, course = frappe.db.get_value("Student Group", self.student_group, ["group_based_on", "course"]) + if group_based_on == "Course": + self.course = course + if self.rechedule: rescheduled, reschedule_errors = self.delete_course_schedule(rescheduled, reschedule_errors) @@ -57,9 +58,6 @@ class CourseSchedulingTool(Document): def validate_mandatory(self): """Validates all mandatory fields""" - if not (self.student_batch or self.student_group): - frappe.throw(_("""Student Batch or Student Group is mandatory""")) - fields = ['course', 'room', 'instructor', 'from_time', 'to_time', 'course_start_date', 'course_end_date', 'day'] for d in fields: if not self.get(d): @@ -74,7 +72,6 @@ class CourseSchedulingTool(Document): """Delete all course schedule within the Date range and specified filters""" schedules = frappe.get_list("Course Schedule", fields=["name", "schedule_date"], filters = [["student_group", "=", self.student_group], - ["student_batch", "=", self.student_batch], ["course", "=", self.course], ["schedule_date", ">=", self.course_start_date], ["schedule_date", "<=", self.course_end_date]]) @@ -93,7 +90,6 @@ class CourseSchedulingTool(Document): course_schedule = frappe.new_doc("Course Schedule") course_schedule.student_group = self.student_group - course_schedule.student_batch = self.student_batch course_schedule.course = self.course course_schedule.instructor = self.instructor course_schedule.instructor_name = self.instructor_name @@ -102,4 +98,4 @@ class CourseSchedulingTool(Document): course_schedule.from_time= self.from_time course_schedule.to_time= self.to_time return course_schedule - + \ No newline at end of file diff --git a/erpnext/schools/doctype/grading_scale/grading_scale.py b/erpnext/schools/doctype/grading_scale/grading_scale.py index 4abff96462..e981f9f587 100644 --- a/erpnext/schools/doctype/grading_scale/grading_scale.py +++ b/erpnext/schools/doctype/grading_scale/grading_scale.py @@ -17,4 +17,4 @@ class GradingScale(Document): else: thresholds.append(cint(d.threshold)) if 0 not in thresholds: - frappe.throw(_("Please define grade for treshold 0%")) \ No newline at end of file + frappe.throw(_("Please define grade for Threshold 0%")) \ No newline at end of file diff --git a/erpnext/schools/doctype/student/student_dashboard.py b/erpnext/schools/doctype/student/student_dashboard.py index ca2a660292..cd2314ef12 100644 --- a/erpnext/schools/doctype/student/student_dashboard.py +++ b/erpnext/schools/doctype/student/student_dashboard.py @@ -7,7 +7,7 @@ def get_data(): 'fieldname': 'student', 'transactions': [ { - 'items': ['Student Log', 'Student Batch', 'Student Group', 'Program Enrollment'] + 'items': ['Student Log', 'Student Group', 'Program Enrollment'] }, { 'items': ['Fees', 'Assessment Result', 'Student Attendance', 'Student Leave Application'] diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.js b/erpnext/schools/doctype/student_attendance/student_attendance.js index ec2a0cbf8d..f025a1a539 100644 --- a/erpnext/schools/doctype/student_attendance/student_attendance.js +++ b/erpnext/schools/doctype/student_attendance/student_attendance.js @@ -2,4 +2,4 @@ // For license information, please see license.txt cur_frm.add_fetch("course_schedule", "schedule_date", "date"); -cur_frm.add_fetch("course_schedule", "student_batch", "student_batch") \ No newline at end of file +cur_frm.add_fetch("course_schedule", "student_group", "student_group") \ No newline at end of file diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.json b/erpnext/schools/doctype/student_attendance/student_attendance.json index e5a4075ba0..83a07d500a 100644 --- a/erpnext/schools/doctype/student_attendance/student_attendance.json +++ b/erpnext/schools/doctype/student_attendance/student_attendance.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "SA.######", @@ -13,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -73,6 +76,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -102,6 +106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -130,6 +135,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -160,23 +166,24 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "student_batch", + "fieldname": "student_group", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 1, + "in_global_search": 1, "in_list_view": 0, "in_standard_filter": 1, - "label": "Student Batch", + "label": "Student Group", "length": 0, "no_copy": 0, - "options": "Student Batch", + "options": "Student Group", "permlevel": 0, "precision": "", "print_hide": 0, @@ -190,6 +197,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -219,48 +227,19 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Student Attendance", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 } ], + "has_web_view": 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": "2017-02-21 01:15:20.989687", + "modified": "2017-05-01 12:02:01.116733", "modified_by": "Administrator", "module": "Schools", "name": "Student Attendance", diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.py b/erpnext/schools/doctype/student_attendance/student_attendance.py index 8a72e704d6..2688123f97 100644 --- a/erpnext/schools/doctype/student_attendance/student_attendance.py +++ b/erpnext/schools/doctype/student_attendance/student_attendance.py @@ -7,7 +7,7 @@ import frappe from frappe.model.document import Document from frappe import _ from frappe.utils import cstr -from erpnext.schools.api import get_student_batch_students, get_student_group_students +from erpnext.schools.api import get_student_group_students class StudentAttendance(Document): @@ -23,27 +23,23 @@ class StudentAttendance(Document): self.date = frappe.db.get_value("Course Schedule", self.course_schedule, "schedule_date") def validate_mandatory(self): - if not (self.student_batch or self.course_schedule): - frappe.throw(_("""Student Batch or Course Schedule is mandatory""")) + if not (self.student_group or self.course_schedule): + frappe.throw(_("""Student Group or Course Schedule is mandatory""")) def validate_course_schedule(self): if self.course_schedule: - self.student_batch = frappe.db.get_value("Course Schedule", self.course_schedule, "student_batch") + self.student_group = frappe.db.get_value("Course Schedule", self.course_schedule, "student_group") def validate_student(self): if self.course_schedule: student_group = frappe.db.get_value("Course Schedule", self.course_schedule, "student_group") - student_group_students = [] - for d in get_student_group_students(student_group): - student_group_students.append(d.student) - if student_group and self.student not in student_group_students: - frappe.throw(_("""Student {0}: {1} does not belong to Student Group {2}""".format(self.student, self.student_name, student_group))) else: - student_batch_students = [] - for d in get_student_batch_students(self.student_batch): - student_batch_students.append(d.student) - if self.student not in student_batch_students: - frappe.throw(_("""Student {0}: {1} does not belong to Student Batch {2}""".format(self.student, self.student_name, self.student_batch))) + student_group = self.student_group + student_group_students = [] + for d in get_student_group_students(student_group): + student_group_students.append(d.student) + if student_group and self.student not in student_group_students: + frappe.throw(_('''Student {0}: {1} does not belong to Student Group {2}'''.format(self.student, self.student_name, student_group))) def validate_duplication(self): """Check if the Attendance Record is Unique""" @@ -54,9 +50,9 @@ class StudentAttendance(Document): (self.student, cstr(self.course_schedule), self.name)) else: attendance_records= frappe.db.sql("""select name from `tabStudent Attendance` where \ - student= %s and student_batch= %s and date= %s and name != %s and \ + student= %s and student_group= %s and date= %s and name != %s and \ (course_schedule is Null or course_schedule='')""", - (self.student, self.student_batch, self.date, self.name)) + (self.student, self.student_group, self.date, self.name)) if attendance_records: frappe.throw(_("Attendance Record {0} exists against Student {1}") diff --git a/erpnext/schools/doctype/student_attendance/untitled.txt b/erpnext/schools/doctype/student_attendance/untitled.txt deleted file mode 100644 index b2f4c36837..0000000000 --- a/erpnext/schools/doctype/student_attendance/untitled.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe.model.document import Document -from frappe import _ - -class Studentattendance(Document): - def validate(self): - self.validate_duplication() - - def validate_duplication(self): - attendance_records= frappe.db.sql("""select name from `tabStudent attendance` where \ - student= %s and course_schedule= %s and name != %s""", - (self.student, self.course_schedule, self.name)) - if attendance_records: - frappe.throw(_("attendance Record {0} exists against Student {1} for Course Schedule {2}") - .format(attendance_records[0][0], self.student, self.course_schedule)) diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js index 3b0022fa0d..b092a3f2ee 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js @@ -8,22 +8,22 @@ frappe.ui.form.on('Student Attendance Tool', { }, based_on: function(frm) { - if (frm.doc.based_on == "Student Batch") { + if (frm.doc.based_on == "Student Group") { frm.set_value("course_schedule", ""); } else { - frm.set_value("student_batch", ""); + frm.set_value("student_group", ""); } }, - student_batch: function(frm) { - if ((frm.doc.student_batch && frm.doc.date) || frm.doc.course_schedule) { + student_group: function(frm) { + if ((frm.doc.student_group && frm.doc.date) || frm.doc.course_schedule) { var method = "erpnext.schools.doctype.student_attendance_tool.student_attendance_tool.get_student_attendance_records"; frappe.call({ method: method, args: { based_on: frm.doc.based_on, - student_batch: frm.doc.student_batch, + student_group: frm.doc.student_group, date: frm.doc.date, course_schedule: frm.doc.course_schedule }, @@ -35,11 +35,11 @@ frappe.ui.form.on('Student Attendance Tool', { }, date: function(frm) { - frm.trigger("student_batch"); + frm.trigger("student_group"); }, course_schedule: function(frm) { - frm.trigger("student_batch"); + frm.trigger("student_group"); }, get_students: function(frm, students) { @@ -47,6 +47,7 @@ frappe.ui.form.on('Student Attendance Tool', { frm.students_area = $('
    ') .appendTo(frm.fields_dict.students_html.wrapper); } + console.log(students); frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students) } }); @@ -89,12 +90,12 @@ schools.StudentsEditor = Class.extend({ var get_present_student = function(student) { return students.filter(function(s) { - return s.idx === idx; + return s.group_roll_number === group_roll_number; }) } - var get_absent_student = function(idx) { + var get_absent_student = function(group_roll_number) { return students.filter(function(s) { - return s.idx === idx; + return s.group_roll_number === group_roll_number; }) } @@ -108,7 +109,7 @@ schools.StudentsEditor = Class.extend({ studs.push({ student: $check.data().student, student_name: $check.data().studentName, - idx: $check.data().idx, + group_roll_number: $check.data().group_roll_number, disabled: $check.prop("disabled"), checked: $check.is(":checked") }); @@ -132,13 +133,13 @@ schools.StudentsEditor = Class.extend({ args: { "students_present": students_present, "students_absent": students_absent, - "student_batch": frm.doc.student_batch, + "student_group": frm.doc.student_group, "course_schedule": frm.doc.course_schedule, "date": frm.doc.date }, callback: function(r) { $(me.wrapper.find(".btn-mark-att")).attr("disabled", false); - frm.trigger("student_batch"); + frm.trigger("student_group"); } }); }, @@ -152,7 +153,7 @@ schools.StudentsEditor = Class.extend({ return frappe.render_template("student_button", { student: student.student, student_name: student.student_name, - idx: student.idx, + group_roll_number: student.group_roll_number, status: student.status }) }); diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json index 51b015caa3..291e027adf 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json @@ -1,5 +1,6 @@ { "allow_copy": 1, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -12,6 +13,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -29,7 +31,7 @@ "label": "Based On", "length": 0, "no_copy": 0, - "options": "Student Batch\nCourse Schedule", + "options": "Student Group\nCourse Schedule", "permlevel": 0, "precision": "", "print_hide": 0, @@ -43,6 +45,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -71,12 +74,13 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.based_on ==\"Student Batch\"", - "fieldname": "student_batch", + "depends_on": "eval:doc.based_on ==\"Student Group\"", + "fieldname": "student_group", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -85,10 +89,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Student Batch", + "label": "Student Group", "length": 0, "no_copy": 0, - "options": "Student Batch", + "options": "Student Group", "permlevel": 0, "precision": "", "print_hide": 0, @@ -102,6 +106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -133,11 +138,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.based_on ==\"Student Batch\"", + "depends_on": "eval:doc.based_on ==\"Student Group\"", "fieldname": "date", "fieldtype": "Date", "hidden": 0, @@ -163,11 +169,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval: (doc.course_schedule \n|| (doc.student_batch && doc.date))", + "depends_on": "eval: (doc.course_schedule \n|| (doc.student_group && doc.date))", "fieldname": "attendance", "fieldtype": "Section Break", "hidden": 0, @@ -193,6 +200,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -222,17 +230,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 1, "hide_toolbar": 1, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-02-21 01:15:11.435110", + "modified": "2017-05-01 15:09:55.740005", "modified_by": "Administrator", "module": "Schools", "name": "Student Attendance Tool", diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py index 073474769d..be2644077a 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py @@ -10,29 +10,28 @@ class StudentAttendanceTool(Document): pass @frappe.whitelist() -def get_student_attendance_records(based_on, date=None, student_batch=None, course_schedule=None): +def get_student_attendance_records(based_on, date=None, student_group=None, course_schedule=None): student_list = [] student_attendance_list = [] if based_on=="Course Schedule": student_group = frappe.db.get_value("Course Schedule", course_schedule, "student_group") if student_group: - student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "idx"] , \ - filters={"parent": student_group, "active": 1}, order_by= "idx") - else: - student_batch = frappe.db.get_value("Course Schedule", course_schedule, "student_batch") + student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "group_roll_number"] , \ + filters={"parent": student_group, "active": 1}, order_by= "group_roll_number") + if not student_list: - student_list = frappe.get_list("Student Batch Student", fields=["student", "student_name", "idx"] , - filters={"parent": student_batch, "active": 1}, order_by= "idx") + student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "group_roll_number"] , + filters={"parent": student_group, "active": 1}, order_by= "group_roll_number") if course_schedule: - student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \ - course_schedule= %s""", (course_schedule), as_dict=1) + student_attendance_list= frappe.db.sql('''select student, status from `tabStudent Attendance` where \ + course_schedule= %s''', (course_schedule), as_dict=1) else: - student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \ - student_batch= %s and date= %s and \ - (course_schedule is Null or course_schedule='')""", - (student_batch, date), as_dict=1) + student_attendance_list= frappe.db.sql('''select student, status from `tabStudent Attendance` where \ + student_group= %s and date= %s and \ + (course_schedule is Null or course_schedule='')''', + (student_group, date), as_dict=1) for attendance in student_attendance_list: for student in student_list: diff --git a/erpnext/schools/doctype/student_batch/__init__.py b/erpnext/schools/doctype/student_batch/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/student_batch/student_batch.js b/erpnext/schools/doctype/student_batch/student_batch.js deleted file mode 100644 index 00b261e3a1..0000000000 --- a/erpnext/schools/doctype/student_batch/student_batch.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Student Batch', { - refresh: function(frm) { - if (!frm.doc.__islocal) { - frm.add_custom_button(__("Update Email Group"), function() { - frappe.call({ - method: "erpnext.schools.api.update_email_group", - args: { - "doctype": "Student Batch", - "name": frm.doc.name - } - }); - }); - frm.add_custom_button(__("Newsletter"), function() { - frappe.set_route("List", "Newsletter"); - }); - } - }, - - onload: function(frm){ - cur_frm.set_query("academic_term",function(){ - return{ - "filters":{ - "academic_year": (frm.doc.academic_year) - } - }; - }); - } - -}); - -cur_frm.add_fetch("student", "title", "student_name"); diff --git a/erpnext/schools/doctype/student_batch/student_batch.json b/erpnext/schools/doctype/student_batch/student_batch.json deleted file mode 100644 index 1b7239b765..0000000000 --- a/erpnext/schools/doctype/student_batch/student_batch.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "", - "beta": 0, - "creation": "2016-07-21 15:49:53.776461", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch_name", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch Name", - "length": 0, - "no_copy": 0, - "options": "Student Batch Name", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "academic_year", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 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, - "remember_last_selected_value": 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": "1", - "fieldname": "enabled", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Active", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 1, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Program", - "length": 0, - "no_copy": 0, - "options": "Program", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "academic_term", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Academic Term", - "length": 0, - "no_copy": 0, - "options": "Academic Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Students", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "students", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Students", - "length": 0, - "no_copy": 0, - "options": "Student Batch Student", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Instructors", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "instructors", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Instructors", - "length": 0, - "no_copy": 0, - "options": "Student Batch Instructor", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "2017-02-17 17:17:00.460594", - "modified_by": "Administrator", - "module": "Schools", - "name": "Student Batch", - "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": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Academics User", - "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": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Instructor", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_batch/student_batch.py b/erpnext/schools/doctype/student_batch/student_batch.py deleted file mode 100644 index 9c0f3d7530..0000000000 --- a/erpnext/schools/doctype/student_batch/student_batch.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -from frappe.model.document import Document -from erpnext.schools.utils import validate_duplicate_student -import frappe -from frappe import _ - -class StudentBatch(Document): - def autoname(self): - prog_abb = frappe.db.get_value("Program", self.program, "program_abbreviation") - if not prog_abb: - prog_abb = self.program - self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year - - def validate(self): - validate_duplicate_student(self.students) - self.validate_name() - - def validate_name(self): - if frappe.db.exists("Student Group", self.name): - frappe.throw(_("""Student Group exists with same name""")) diff --git a/erpnext/schools/doctype/student_batch/test_student_batch.py b/erpnext/schools/doctype/student_batch/test_student_batch.py deleted file mode 100644 index 55796eeb72..0000000000 --- a/erpnext/schools/doctype/student_batch/test_student_batch.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- 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 Batch') - -class TestStudentBatch(unittest.TestCase): - pass diff --git a/erpnext/schools/doctype/student_batch_creation_tool/__init__.py b/erpnext/schools/doctype/student_batch_creation_tool/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js deleted file mode 100644 index 316717450f..0000000000 --- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Student Batch Creation Tool', { - refresh: function(frm) { - frm.disable_save(); - } -}); diff --git a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json deleted file mode 100644 index d94c4808fb..0000000000 --- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "allow_copy": 1, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-11-14 18:20:12.160405", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "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": 0, - "in_standard_filter": 0, - "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, - "remember_last_selected_value": 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, - "in_standard_filter": 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, - "remember_last_selected_value": 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_batch_name", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Batch Name", - "length": 0, - "no_copy": 0, - "options": "Student Batch Name", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "make_student_batch", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Make Student Batch", - "length": 0, - "no_copy": 0, - "options": "make_batch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 1, - "hide_toolbar": 1, - "idx": 0, - "image_view": 0, - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2016-11-21 16:47:56.823988", - "modified_by": "Administrator", - "module": "Schools", - "name": "Student Batch Creation Tool", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "is_custom": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Academics User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "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_batch_creation_tool/student_batch_creation_tool.py b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py deleted file mode 100644 index deda1373d9..0000000000 --- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- 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 StudentBatchCreationTool(Document): - def make_batch(self): - if self.academic_year and self.program and self.student_batch_name: - students = frappe.get_list("Program Enrollment", fields=["student", "student_name"], - filters={"academic_year":self.academic_year, "program": self.program, "student_batch_name": self.student_batch_name}, - order_by= "student_name") - if students: - student_batch = frappe.new_doc("Student Batch") - student_batch.update({ - "academic_year": self.academic_year, - "program": self.program, - "student_batch_name": self.student_batch_name, - "students": students - }) - student_batch.save() - frappe.msgprint("Student Batch created.") - else: - frappe.msgprint("No students found.") - diff --git a/erpnext/schools/doctype/student_batch_instructor/__init__.py b/erpnext/schools/doctype/student_batch_instructor/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json b/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json deleted file mode 100644 index 29680fb614..0000000000 --- a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-11-21 19:04:48.211565", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "instructor", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Instructor", - "length": 0, - "no_copy": 0, - "options": "Instructor", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "instructor_name", - "fieldtype": "Read Only", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Instructor Name", - "length": 0, - "no_copy": 0, - "options": "instructor.instructor_name", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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-11-21 19:08:07.680320", - "modified_by": "Administrator", - "module": "Schools", - "name": "Student Batch Instructor", - "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_batch_instructor/student_batch_instructor.py b/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py deleted file mode 100644 index 19a759d0f3..0000000000 --- a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- 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 StudentBatchInstructor(Document): - pass diff --git a/erpnext/schools/doctype/student_batch_student/__init__.py b/erpnext/schools/doctype/student_batch_student/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/student_batch_student/student_batch_student.json b/erpnext/schools/doctype/student_batch_student/student_batch_student.json deleted file mode 100644 index 3558cc8528..0000000000 --- a/erpnext/schools/doctype/student_batch_student/student_batch_student.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-07-22 03:27:20.120023", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "fields": [ - { - "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_list_view": 1, - "in_standard_filter": 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, - "remember_last_selected_value": 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": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Student Name", - "length": 0, - "no_copy": 0, - "options": "student.title", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 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": "1", - "fieldname": "active", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Active", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "2017-02-03 05:26:35.518004", - "modified_by": "Administrator", - "module": "Schools", - "name": "Student Batch Student", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/student_batch_student/student_batch_student.py b/erpnext/schools/doctype/student_batch_student/student_batch_student.py deleted file mode 100644 index 542f3c4da9..0000000000 --- a/erpnext/schools/doctype/student_batch_student/student_batch_student.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- 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 StudentBatchStudent(Document): - pass diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index 5520ec7b5e..81e0ed946f 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -7,7 +7,6 @@ import frappe from frappe.model.document import Document from frappe import _ from erpnext.schools.utils import validate_duplicate_student -from erpnext.schools.api import get_student_batch_students class StudentGroup(Document): def validate(self): @@ -15,6 +14,7 @@ class StudentGroup(Document): self.validate_strength() if frappe.defaults.get_defaults().student_validation_setting: self.validate_students() + self.validate_roll_no() validate_duplicate_student(self.students) def validate_mandatory_fields(self): @@ -38,6 +38,14 @@ class StudentGroup(Document): if not frappe.db.get_value("Student", d.student, "enabled") and d.active: frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name))) + def validate_roll_no(self): + roll_no_list = [] + for d in self.students: + if d.group_roll_number in roll_no_list: + frappe.throw(_("Duplicate roll number for student {0}".format(d.student_name))) + else: + roll_no_list.append(d.group_roll_number) + @frappe.whitelist() def get_students(academic_year, group_based_on, academic_term=None, program=None, batch=None, course=None): enrolled_students = get_program_enrollment(academic_year, academic_term, program, batch, course) diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.py b/erpnext/schools/report/absent_student_report/absent_student_report.py index ba2b7add75..094983108a 100644 --- a/erpnext/schools/report/absent_student_report/absent_student_report.py +++ b/erpnext/schools/report/absent_student_report/absent_student_report.py @@ -20,7 +20,7 @@ def execute(filters=None): data = [] for student in absent_students: if not student.student in leave_applicants: - row = [student.student, student.student_name, student.student_batch] + row = [student.student, student.student_name, student.student_group] stud_details = frappe.db.get_value("Student", student.student, ['student_email_id', 'student_mobile_number'], as_dict=True) if stud_details.student_email_id: @@ -41,15 +41,15 @@ def get_columns(filters): columns = [ _("Student") + ":Link/Student:90", _("Student Name") + "::150", - _("Student Batch") + "::180", + _("Student Group") + "::180", _("Student Email Address") + "::180", _("Student Mobile No.") + "::150", ] return columns def get_absent_students(date): - absent_students = frappe.db.sql("""select student, student_name, student_batch from `tabStudent Attendance` - where status="Absent" and date = %s order by student_batch, student_name""", date, as_dict=1) + absent_students = frappe.db.sql("""select student, student_name, student_group from `tabStudent Attendance` + where status="Absent" and date = %s order by student_group, student_name""", date, as_dict=1) return absent_students def get_leave_applications(date): diff --git a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py index d8df3a02ad..ddb4889cbf 100644 --- a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +++ b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py @@ -14,15 +14,15 @@ def execute(filters=None): columns = get_columns(filters) - active_student_batch = get_active_student_batch() + active_student_group = get_active_student_group() data = [] - for student_batch in active_student_batch: - row = [student_batch.name] + for student_group in active_student_group: + row = [student_group.name] present_students = 0 absent_students = 0 - student_batch_strength = get_student_batch_strength(student_batch.name) - student_attendance = get_student_attendance(student_batch.name, filters.get("date")) + student_group_strength = get_student_group_strength(student_group.name) + student_attendance = get_student_attendance(student_group.name, filters.get("date")) if student_attendance: for attendance in student_attendance: if attendance.status== "Present": @@ -30,35 +30,35 @@ def execute(filters=None): elif attendance.status== "Absent": absent_students = attendance.count - unmarked_students = student_batch_strength - (present_students + absent_students) - row+= [student_batch_strength, present_students, absent_students, unmarked_students] + unmarked_students = student_group_strength - (present_students + absent_students) + row+= [student_group_strength, present_students, absent_students, unmarked_students] data.append(row) return columns, data def get_columns(filters): columns = [ - _("Student batch") + ":Link/Student Batch:250", - _("Student batch Strength") + "::170", + _("Student Group") + ":Link/Student Batch:250", + _("Student Group Strength") + "::170", _("Present") + "::90", _("Absent") + "::90", _("Not Marked") + "::90" ] return columns -def get_active_student_batch(): - active_student_batch = frappe.db.sql("""select name from `tabStudent Batch` - where enabled = 1 order by name""", as_dict=1) - return active_student_batch +def get_active_student_group(): + active_student_groups = frappe.db.sql("""select name from `tabStudent Group` where group_based_on = "Batch" + and academic_year=%s order by name""", (frappe.defaults.get_defaults().academic_year), as_dict=1) + return active_student_groups -def get_student_batch_strength(student_batch): - student_batch_strength = frappe.db.sql("""select count(*) from `tabStudent Batch Student` - where parent = %s and active=1""", student_batch)[0][0] - return student_batch_strength +def get_student_group_strength(student_group): + student_group_strength = frappe.db.sql("""select count(*) from `tabStudent Group Student` + where parent = %s and active=1""", student_group)[0][0] + return student_group_strength -def get_student_attendance(student_batch, date): +def get_student_attendance(student_group, date): student_attendance = frappe.db.sql("""select count(*) as count, status from `tabStudent Attendance` where \ - student_batch= %s and date= %s and\ + student_group= %s and date= %s and\ (course_schedule is Null or course_schedule='') group by status""", - (student_batch, date), as_dict=1) + (student_group, date), as_dict=1) return student_attendance \ No newline at end of file diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js index 8d914cba2e..57927fa9d9 100644 --- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js +++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js @@ -19,10 +19,10 @@ frappe.query_reports["Student Monthly Attendance Sheet"] = { "reqd": 1 }, { - "fieldname": "student_batch", - "label": __("Student Batch"), + "fieldname": "student_group", + "label": __("Student Group"), "fieldtype": "Link", - "options": "Student Batch", + "options": "Student Group", "reqd": 1 } ], diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py index f906034948..91f6c364cb 100644 --- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py +++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py @@ -6,7 +6,7 @@ import frappe from frappe.utils import cstr, cint, getdate, get_first_day, get_last_day, date_diff, add_days from frappe import msgprint, _ from calendar import monthrange -from erpnext.schools.api import get_student_batch_students +from erpnext.schools.api import get_student_group_students def execute(filters=None): if not filters: filters = {} @@ -15,9 +15,9 @@ def execute(filters=None): to_date = get_last_day(filters["month"] + '-' + filters["year"]) total_days_in_month = date_diff(to_date, from_date) +1 columns = get_columns(total_days_in_month) - students = get_student_batch_students(filters.get("student_batch")) + students = get_student_group_students(filters.get("student_group")) students_list = get_students_list(students) - att_map = get_attendance_list(from_date, to_date, filters.get("student_batch"), students_list) + att_map = get_attendance_list(from_date, to_date, filters.get("student_group"), students_list) data = [] for stud in students: row = [stud.student, stud.student_name] @@ -51,12 +51,12 @@ def get_students_list(students): student_list.append(stud.student) return student_list -def get_attendance_list(from_date, to_date, student_batch, students_list): - attendance_list = frappe.db.sql("""select student, date, status - from `tabStudent Attendance` where student_batch = %s +def get_attendance_list(from_date, to_date, student_group, students_list): + attendance_list = frappe.db.sql('''select student, date, status + from `tabStudent Attendance` where student_group = %s and date between %s and %s - order by student, date""", - (student_batch, from_date, to_date), as_dict=1) + order by student, date''', + (student_group, from_date, to_date), as_dict=1) att_map = {} students_with_leave_application = get_students_with_leave_application(from_date, to_date, students_list) for d in attendance_list: @@ -97,7 +97,7 @@ def daterange(d1, d2): @frappe.whitelist() def get_attendance_years(): - year_list = frappe.db.sql_list("""select distinct YEAR(date) from `tabStudent Attendance` ORDER BY YEAR(date) DESC""") + year_list = frappe.db.sql_list('''select distinct YEAR(date) from `tabStudent Attendance` ORDER BY YEAR(date) DESC''') if not year_list: year_list = [getdate().year] return "\n".join(str(year) for year in year_list) From 62414565b145e5d72497ca2f0cc32f93dfb5a04c Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Wed, 10 May 2017 14:52:03 +0530 Subject: [PATCH 229/287] [minor] added the address_html field in company doctype (#8754) --- erpnext/setup/doctype/company/company.js | 3 + erpnext/setup/doctype/company/company.json | 68 +++++++++++++++++++--- erpnext/setup/doctype/company/company.py | 2 + 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 0b0a02081e..ca60b1184f 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -13,7 +13,10 @@ frappe.ui.form.on("Company", { frm.set_df_property("abbr", "read_only", 1); } + frm.toggle_display('address_html', !frm.doc.__islocal); if(!frm.doc.__islocal) { + frappe.geo.render_address_and_contact(frm); + frm.toggle_enable("default_currency", (frm.doc.__onload && !frm.doc.__onload.transactions_exist)); diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index 60268a983e..c5e8c5c702 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -14,6 +14,7 @@ "editable_grid": 0, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -73,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -104,6 +107,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -133,6 +137,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -160,6 +165,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -189,6 +195,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -217,6 +224,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -247,6 +255,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -277,6 +286,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -306,6 +316,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -335,6 +346,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -363,6 +375,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -392,6 +405,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -422,6 +436,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -453,6 +468,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -484,6 +500,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -513,6 +530,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -545,6 +563,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -575,6 +594,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -607,6 +627,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -637,6 +658,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -667,6 +689,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -697,6 +720,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -726,6 +750,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -758,6 +783,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -788,6 +814,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -818,6 +845,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -849,6 +877,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -879,6 +908,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -907,6 +937,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -937,6 +968,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -969,6 +1001,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -997,6 +1030,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1027,6 +1061,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1058,6 +1093,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1087,6 +1123,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1116,6 +1153,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1145,6 +1183,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1173,6 +1212,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1202,6 +1242,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1231,6 +1272,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1261,6 +1303,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1291,6 +1334,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1319,6 +1363,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1349,6 +1394,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1379,6 +1425,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1408,12 +1455,13 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "address", - "fieldtype": "Small Text", + "fieldname": "address_html", + "fieldtype": "HTML", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -1421,12 +1469,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Address", "length": 0, "no_copy": 0, - "oldfieldname": "address", - "oldfieldtype": "Small Text", "permlevel": 0, + "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, @@ -1438,6 +1484,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1467,6 +1514,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1498,6 +1546,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1529,6 +1578,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1560,6 +1610,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1590,6 +1641,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1621,6 +1673,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1652,6 +1705,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1693,7 +1747,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-03-14 17:04:38.115970", + "modified": "2017-05-09 11:06:33.629948", "modified_by": "Administrator", "module": "Setup", "name": "Company", @@ -1847,4 +1901,4 @@ "sort_order": "ASC", "track_changes": 1, "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index cc5e65d881..9f355f7ee9 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -10,9 +10,11 @@ import frappe.defaults from frappe.model.document import Document +from frappe.geo.address_and_contact import load_address_and_contact class Company(Document): def onload(self): + load_address_and_contact(self, "company") self.get("__onload")["transactions_exist"] = self.check_if_transactions_exist() def check_if_transactions_exist(self): From 323e46ba5a206e5be85f200a04174d44f8b858a4 Mon Sep 17 00:00:00 2001 From: KanchanChauhan Date: Wed, 10 May 2017 17:46:32 +0530 Subject: [PATCH 230/287] Added parent filter to the Salary Structure Employee since it was getting base and variable value from first found Salary Structure Employee (#8756) --- erpnext/hr/doctype/salary_slip/salary_slip.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index e42295810d..c7bbe65a47 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -99,7 +99,8 @@ class SalarySlip(TransactionBase): '''Returns data for evaluating formula''' data = frappe._dict() - data.update(frappe.get_doc("Salary Structure Employee", {"employee": self.employee}).as_dict()) + data.update(frappe.get_doc("Salary Structure Employee", + {"employee": self.employee, "parent": self.salary_structure}).as_dict()) data.update(frappe.get_doc("Employee", self.employee).as_dict()) data.update(self.as_dict()) From 464f108586268c3247c87c55d46f15aae736534b Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Wed, 10 May 2017 19:40:36 +0530 Subject: [PATCH 231/287] [minor] added currency in Totals for Trial Balance report (#8757) * [minor] added currency in Totals for Trial Balance report * [minor] used erpnext.get_default_currency to fetch the company currency --- .../report/trial_balance/trial_balance.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index 5f606e4e98..9eea472086 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _ from frappe.utils import flt, getdate, formatdate, cstr from erpnext.accounts.report.financial_statements \ @@ -53,6 +53,7 @@ def validate_filters(filters): def get_data(filters): accounts = frappe.db.sql("""select name, parent_account, account_name, root_type, report_type, lft, rgt from `tabAccount` where company=%s order by lft""", filters.company, as_dict=True) + company_currency = erpnext.get_company_currency(filters.company) if not accounts: return None @@ -69,10 +70,10 @@ def get_data(filters): opening_balances = get_opening_balances(filters) - total_row = calculate_values(accounts, gl_entries_by_account, opening_balances, filters) + total_row = calculate_values(accounts, gl_entries_by_account, opening_balances, filters, company_currency) accumulate_values_into_parents(accounts, accounts_by_name) - data = prepare_data(accounts, filters, total_row, parent_children_map) + data = prepare_data(accounts, filters, total_row, parent_children_map, company_currency) data = filter_out_zero_value_rows(data, parent_children_map, show_zero_values=filters.get("show_zero_values")) @@ -119,7 +120,7 @@ def get_rootwise_opening_balances(filters, report_type): return opening -def calculate_values(accounts, gl_entries_by_account, opening_balances, filters): +def calculate_values(accounts, gl_entries_by_account, opening_balances, filters, company_currency): init = { "opening_debit": 0.0, "opening_credit": 0.0, @@ -137,7 +138,8 @@ def calculate_values(accounts, gl_entries_by_account, opening_balances, filters) "credit": 0.0, "parent_account": None, "indent": 0, - "has_value": True + "has_value": True, + "currency": company_currency } for d in accounts: @@ -164,9 +166,8 @@ def accumulate_values_into_parents(accounts, accounts_by_name): for key in value_fields: accounts_by_name[d.parent_account][key] += d[key] -def prepare_data(accounts, filters, total_row, parent_children_map): +def prepare_data(accounts, filters, total_row, parent_children_map, company_currency): data = [] - company_currency = frappe.db.get_value("Company", filters.company, "default_currency") for d in accounts: has_value = False From 734d7795f80f8b151b4a7b29706bfae8ecdc922a Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Thu, 11 May 2017 11:38:30 +0530 Subject: [PATCH 232/287] Show party name in General Ledger print report (#8760) --- .../report/general_ledger/general_ledger.html | 10 +++++++++- .../report/general_ledger/general_ledger.js | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.html b/erpnext/accounts/report/general_ledger/general_ledger.html index 95918117c7..b0ca19f325 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.html +++ b/erpnext/accounts/report/general_ledger/general_ledger.html @@ -5,7 +5,15 @@
    {% } %}

    {%= __("Statement of Account") %}

    -

    {%= (filters.party || filters.account) && ((filters.party || filters.account) + ", ") || "" %} {%= filters.company %}

    +

    + {% if (filters.party_name) { %} + {%= filters.party_name %} + {% } else if (filters.party) { %} + {%= filters.party %} + {% } else if (filters.account) { %} + {%= filters.account %} + {% } %} +

    {%= dateutil.str_to_user(filters.from_date) %} {%= __("to") %} diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index a422871b05..b5199650fb 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -74,8 +74,27 @@ frappe.query_reports["General Ledger"] = { frappe.throw(__("Please select Party Type first")); } return party_type; + }, + change: function() { + var party_type = frappe.query_report_filters_by_name.party_type.get_value(); + var party = frappe.query_report_filters_by_name.party.get_value(); + if(!party_type || !party) { + frappe.query_report_filters_by_name.party_name.set_value(""); + return; + } + + var fieldname = party_type.toLowerCase() + "_name"; + frappe.db.get_value(party_type, party, fieldname, function(value) { + frappe.query_report_filters_by_name.party_name.set_value(value[fieldname]); + }); } }, + { + "fieldname":"party_name", + "label": __("Party Name"), + "fieldtype": "Data", + "hidden": 1 + }, { "fieldname":"group_by_voucher", "label": __("Group by Voucher"), From 0e4c5c9efb840c9c0ee9a4dbe71aabe4cb94365c Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Thu, 11 May 2017 11:40:02 +0530 Subject: [PATCH 233/287] [minor] renamed a Total Margin field to Rate With Margin (#8720) * [minor] renamed a Total Margin field to Rate With Margin * [minor] minor fixes in field lable --- .../sales_invoice_item.json | 197 ++++++++++++------ erpnext/controllers/taxes_and_totals.py | 12 +- erpnext/patches.txt | 1 + ...rename_total_margin_to_rate_with_margin.py | 24 +++ .../public/js/controllers/taxes_and_totals.js | 10 +- .../doctype/quotation/test_quotation.py | 10 +- .../quotation_item/quotation_item.json | 134 ++++++------ .../sales_order_item/sales_order_item.json | 192 +++++++++++------ .../delivery_note_item.json | 134 ++++++------ 9 files changed, 436 insertions(+), 278 deletions(-) create mode 100644 erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json index 80f8b57fb9..9f7085ad54 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -13,6 +13,7 @@ "editable_grid": 1, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -41,6 +42,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -72,6 +74,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -99,6 +102,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -129,6 +133,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -157,6 +162,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -186,6 +192,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -218,6 +225,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -246,6 +254,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -276,6 +285,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -305,6 +315,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -333,6 +344,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -363,6 +375,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -392,6 +405,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -419,6 +433,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -449,6 +464,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -478,6 +494,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -507,6 +524,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -535,6 +553,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -566,6 +585,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -597,6 +617,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -626,65 +647,7 @@ "unique": 0 }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "price_list_rate", - "fieldname": "discount_percentage", - "fieldtype": "Percent", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Discount on Price List Rate (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "adj_rate", - "oldfieldtype": "Float", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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_19", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -716,6 +679,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -746,12 +710,13 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.margin_type && doc.price_list_rate", - "fieldname": "total_margin", + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "rate_with_margin", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, @@ -760,7 +725,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Total Margin", + "label": "Rate With Margin", "length": 0, "no_copy": 0, "permlevel": 0, @@ -776,6 +741,69 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_19", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount (%) on Price List Rate with Margin", + "length": 0, + "no_copy": 0, + "oldfieldname": "adj_rate", + "oldfieldtype": "Float", + "permlevel": 0, + "precision": "2", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -803,6 +831,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -834,6 +863,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -865,6 +895,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -892,6 +923,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -923,6 +955,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -954,6 +987,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -983,6 +1017,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1011,6 +1046,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1041,6 +1077,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1071,6 +1108,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1099,6 +1137,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1129,6 +1168,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1159,6 +1199,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1189,6 +1230,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1218,6 +1260,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1246,6 +1289,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1279,6 +1323,7 @@ "width": "120px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1309,6 +1354,7 @@ "width": "120px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1336,6 +1382,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1370,6 +1417,7 @@ "width": "120px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1400,6 +1448,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1431,6 +1480,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1461,6 +1511,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1492,6 +1543,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1521,6 +1573,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1548,6 +1601,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1577,6 +1631,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1607,6 +1662,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1639,6 +1695,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1669,6 +1726,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1699,6 +1757,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1730,6 +1789,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1760,6 +1820,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1789,6 +1850,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1820,6 +1882,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1850,6 +1913,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1878,6 +1942,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1909,6 +1974,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1939,6 +2005,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1969,6 +2036,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1998,6 +2066,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2028,6 +2097,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2056,6 +2126,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -2094,7 +2165,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-19 11:53:26.682964", + "modified": "2017-05-10 17:14:42.681757", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Item", diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 362d07515b..7889ead057 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -59,10 +59,10 @@ class calculate_taxes_and_totals(object): (1.0 - (item.discount_percentage / 100.0)), item.precision("rate")) if item.doctype in ['Quotation Item', 'Sales Order Item', 'Delivery Note Item', 'Sales Invoice Item']: - item.total_margin = self.calculate_margin(item) + item.rate_with_margin = self.calculate_margin(item) - item.rate = flt(item.total_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))\ - if item.total_margin > 0 else item.rate + item.rate = flt(item.rate_with_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))\ + if item.rate_with_margin > 0 else item.rate item.net_rate = item.rate item.amount = flt(item.rate * item.qty, item.precision("amount")) @@ -487,7 +487,7 @@ class calculate_taxes_and_totals(object): self.doc.precision("base_write_off_amount")) def calculate_margin(self, item): - total_margin = 0.0 + rate_with_margin = 0.0 if item.price_list_rate: if item.pricing_rule and not self.doc.ignore_pricing_rule: pricing_rule = frappe.get_doc('Pricing Rule', item.pricing_rule) @@ -496,6 +496,6 @@ class calculate_taxes_and_totals(object): if item.margin_type and item.margin_rate_or_amount: margin_value = item.margin_rate_or_amount if item.margin_type == 'Amount' else flt(item.price_list_rate) * flt(item.margin_rate_or_amount) / 100 - total_margin = flt(item.price_list_rate) + flt(margin_value) + rate_with_margin = flt(item.price_list_rate) + flt(margin_value) - return total_margin + return rate_with_margin diff --git a/erpnext/patches.txt b/erpnext/patches.txt index c5281bbc61..b28ef229a3 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -393,3 +393,4 @@ erpnext.patches.v7_2.stock_uom_in_selling erpnext.patches.v8_0.revert_manufacturers_table_from_item erpnext.patches.v8_0.disable_instructor_role erpnext.patches.v8_0.merge_student_batch_and_student_group +erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin \ No newline at end of file diff --git a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py new file mode 100644 index 0000000000..a324751241 --- /dev/null +++ b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals +import frappe + +from frappe.model.utils.rename_field import rename_field + +def execute(): + """ + Rename Total Margin field to Rate With Margin in + "Sales Order Item", "Sales Invoice Item", "Delivery Note Item", + "Quotation Item" + """ + + for d in ("Sales Order Item", "Sales Invoice Item", + "Delivery Note Item", "Quotation Item"): + + rename_field_if_exists(d, "total_margin", "rate_with_margin") + + +def rename_field_if_exists(doctype, old_fieldname, new_fieldname): + try: + rename_field(doctype, old_fieldname, new_fieldname) + except Exception, e: + if e.args[0] != 1054: + raise diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 08dd224fb1..c925f4577b 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -5,17 +5,17 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ setup: function() {}, apply_pricing_rule_on_item: function(item){ if(item.margin_type == "Percentage"){ - item.total_margin = flt(item.price_list_rate) + item.rate_with_margin = flt(item.price_list_rate) + flt(item.price_list_rate) * ( flt(item.margin_rate_or_amount) / 100); } else { - item.total_margin = flt(item.price_list_rate) + flt(item.margin_rate_or_amount); + item.rate_with_margin = flt(item.price_list_rate) + flt(item.margin_rate_or_amount); } - item.rate = flt(item.total_margin , precision("rate", item)); + item.rate = flt(item.rate_with_margin , precision("rate", item)); if(item.discount_percentage){ - discount_value = flt(item.total_margin) * flt(item.discount_percentage) / 100; - item.rate = flt((item.total_margin) - (discount_value), precision('rate', item)); + discount_value = flt(item.rate_with_margin) * flt(item.discount_percentage) / 100; + item.rate = flt((item.rate_with_margin) - (discount_value), precision('rate', item)); } }, diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py index 36cc472574..640c026c66 100644 --- a/erpnext/selling/doctype/quotation/test_quotation.py +++ b/erpnext/selling/doctype/quotation/test_quotation.py @@ -37,7 +37,7 @@ class TestQuotation(unittest.TestCase): from erpnext.selling.doctype.sales_order.sales_order \ import make_delivery_note, make_sales_invoice - total_margin = flt((1500*18.75)/100 + 1500) + rate_with_margin = flt((1500*18.75)/100 + 1500) test_records[0]['items'][0]['price_list_rate'] = 1500 test_records[0]['items'][0]['margin_type'] = 'Percentage' @@ -46,7 +46,7 @@ class TestQuotation(unittest.TestCase): quotation = frappe.copy_doc(test_records[0]) quotation.insert() - self.assertEquals(quotation.get("items")[0].rate, total_margin) + self.assertEquals(quotation.get("items")[0].rate, rate_with_margin) self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.submit() @@ -56,16 +56,16 @@ class TestQuotation(unittest.TestCase): sales_order.transaction_date = "2016-01-01" sales_order.insert() - self.assertEquals(quotation.get("items")[0].rate, total_margin) + self.assertEquals(quotation.get("items")[0].rate, rate_with_margin) sales_order.submit() dn = make_delivery_note(sales_order.name) - self.assertEquals(quotation.get("items")[0].rate, total_margin) + self.assertEquals(quotation.get("items")[0].rate, rate_with_margin) dn.save() si = make_sales_invoice(sales_order.name) - self.assertEquals(quotation.get("items")[0].rate, total_margin) + self.assertEquals(quotation.get("items")[0].rate, rate_with_margin) si.save() test_records = frappe.get_test_records('Quotation') diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json index fe747ec4f8..794494d8ee 100644 --- a/erpnext/selling/doctype/quotation_item/quotation_item.json +++ b/erpnext/selling/doctype/quotation_item/quotation_item.json @@ -632,69 +632,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "price_list_rate", - "fieldname": "discount_percentage", - "fieldtype": "Percent", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Discount on Price List Rate (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "adj_rate", - "oldfieldtype": "Float", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "100px" - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_18", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -764,8 +701,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.margin_type && doc.price_list_rate", - "fieldname": "total_margin", + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "rate_with_margin", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, @@ -774,7 +711,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Total Margin", + "label": "Rate With Margin", "length": 0, "no_copy": 0, "permlevel": 0, @@ -789,6 +726,69 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount (%) on Price List Rate with Margin", + "length": 0, + "no_copy": 0, + "oldfieldname": "adj_rate", + "oldfieldtype": "Float", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "100px" + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1583,7 +1583,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-25 10:34:17.987184", + "modified": "2017-05-10 17:14:45.736424", "modified_by": "Administrator", "module": "Selling", "name": "Quotation Item", diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index 10096d0ae4..2aae9118ff 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -47,6 +48,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -75,6 +77,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -102,6 +105,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -134,6 +138,7 @@ "width": "150" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -163,6 +168,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -195,6 +201,7 @@ "width": "300px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -223,6 +230,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -252,6 +260,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -282,6 +291,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -310,6 +320,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -342,6 +353,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -375,6 +387,7 @@ "width": "70px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -402,6 +415,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -432,6 +446,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -461,6 +476,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -490,6 +506,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -518,6 +535,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -551,6 +569,7 @@ "width": "70px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -584,6 +603,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -613,67 +633,7 @@ "unique": 0 }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "price_list_rate", - "fieldname": "discount_percentage", - "fieldtype": "Percent", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Discount on Price List Rate (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "adj_rate", - "oldfieldtype": "Float", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "70px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "70px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_19", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -705,6 +665,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -735,12 +696,13 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.margin_type && doc.price_list_rate", - "fieldname": "total_margin", + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "rate_with_margin", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, @@ -749,7 +711,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Total Margin", + "label": "Rate With Margin", "length": 0, "no_copy": 0, "permlevel": 0, @@ -765,6 +727,70 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_19", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount (%) on Price List Rate with Margin", + "length": 0, + "no_copy": 0, + "oldfieldname": "adj_rate", + "oldfieldtype": "Float", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "70px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "70px" + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -781,6 +807,7 @@ "length": 0, "no_copy": 0, "permlevel": 0, + "precision": "2", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, @@ -792,6 +819,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -826,6 +854,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -860,6 +889,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -887,6 +917,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -920,6 +951,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -953,6 +985,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -982,6 +1015,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1010,6 +1044,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1040,6 +1075,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1070,6 +1106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1098,6 +1135,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1128,6 +1166,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1158,6 +1197,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1188,6 +1228,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1217,6 +1258,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1247,6 +1289,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1275,6 +1318,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1309,6 +1353,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1340,6 +1385,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1371,6 +1417,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1402,6 +1449,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1434,6 +1482,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1464,6 +1513,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1491,6 +1541,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1523,6 +1574,7 @@ "width": "70px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1553,6 +1605,7 @@ "width": "70px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1582,6 +1635,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1614,6 +1668,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1644,6 +1699,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1673,6 +1729,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1703,6 +1760,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1733,6 +1791,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1766,6 +1825,7 @@ "width": "50px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1799,6 +1859,7 @@ "width": "50px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1829,6 +1890,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1871,7 +1933,7 @@ "istable": 1, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-18 18:43:47.150922", + "modified": "2017-05-10 17:14:48.277982", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order Item", diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index 71a22e9daa..a441a7f51d 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -661,69 +661,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "price_list_rate", - "fieldname": "discount_percentage", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Discount on Price List Rate (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "adj_rate", - "oldfieldtype": "Float", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "100px" - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_19", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -793,8 +730,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.margin_type && doc.price_list_rate", - "fieldname": "total_margin", + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "rate_with_margin", "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, @@ -803,7 +740,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Total Margin", + "label": "Rate With Margin", "length": 0, "no_copy": 0, "permlevel": 0, @@ -818,6 +755,69 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_19", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discount (%) on Price List Rate with Margin", + "length": 0, + "no_copy": 0, + "oldfieldname": "adj_rate", + "oldfieldtype": "Float", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "100px" + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1956,7 +1956,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-04-28 14:18:51.028570", + "modified": "2017-05-10 17:14:50.456930", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", From f74010d379dc006eb1483650a02b5527f312dcd9 Mon Sep 17 00:00:00 2001 From: KanchanChauhan Date: Thu, 11 May 2017 11:42:35 +0530 Subject: [PATCH 234/287] Calculations based on working and payment days should be made if salary structure exists (#8770) --- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index c7bbe65a47..e18fc27e67 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -327,10 +327,10 @@ class SalarySlip(TransactionBase): relieving_date = getdate(self.end_date) if not joining_date: - frappe.throw(_("Please set the Date Of Joining for employee {0}").format(frappe.bold(employee.employee))) + frappe.throw(_("Please set the Date Of Joining for employee {0}").format(frappe.bold(self.employee_name))) for d in self.get(component_type): - if ((cint(d.depends_on_lwp) == 1 and not self.salary_slip_based_on_timesheet) or\ + if self.salary_structure and ((cint(d.depends_on_lwp) == 1 and not self.salary_slip_based_on_timesheet) or\ getdate(self.start_date) < joining_date or getdate(self.end_date) > relieving_date): d.amount = rounded((flt(d.default_amount) * flt(self.payment_days) From 62d27ab7d3ccca2c29c2f044dac831ff71a57563 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 May 2017 13:26:55 +0530 Subject: [PATCH 235/287] Reload doctype bewfore renaming margin fields (#8771) --- erpnext/patches.txt | 2 +- erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index b28ef229a3..8907cf3e16 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -393,4 +393,4 @@ erpnext.patches.v7_2.stock_uom_in_selling erpnext.patches.v8_0.revert_manufacturers_table_from_item erpnext.patches.v8_0.disable_instructor_role erpnext.patches.v8_0.merge_student_batch_and_student_group -erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin \ No newline at end of file +erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017 \ No newline at end of file diff --git a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py index a324751241..3fc477ec8f 100644 --- a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py +++ b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py @@ -12,7 +12,7 @@ def execute(): for d in ("Sales Order Item", "Sales Invoice Item", "Delivery Note Item", "Quotation Item"): - + frappe.reload_doctype(d) rename_field_if_exists(d, "total_margin", "rate_with_margin") From 5ad612683223e5a5b01d2a2cea929aaa4ff877a3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 May 2017 13:34:04 +0530 Subject: [PATCH 236/287] On saving of Accounts Settings, only save enabled warehouses (#8772) --- erpnext/accounts/doctype/account/account.py | 6 +++--- .../doctype/accounts_settings/accounts_settings.py | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index 998fee9732..189d37754f 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -188,9 +188,9 @@ class Account(Document): account_balance = get_balance_on(self.name) if account_balance != stock_balance: - frappe.throw(_('Account balance ({0}) and stock value ({1}) must be same')\ - .format(fmt_money(account_balance, currency=self.account_currency), - fmt_money(stock_balance, currency=self.account_currency))) + frappe.throw(_('Account balance ({0}) for {1} and stock value ({2}) for warehouse {3} must be same') + .format(fmt_money(account_balance, currency=self.account_currency), self.name, + fmt_money(stock_balance, currency=self.account_currency), self.warehouse)) elif self.warehouse: self.warehouse = None diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 5f569a8305..52e1b63871 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -21,10 +21,13 @@ class AccountsSettings(Document): company.save() # Create account head for warehouses - warehouse_list = frappe.db.sql("select name, company from tabWarehouse", as_dict=1) + warehouse_list = frappe.db.sql("""select name, company from tabWarehouse + where disabled=0""", as_dict=1) warehouse_with_no_company = [d.name for d in warehouse_list if not d.company] if warehouse_with_no_company: - frappe.throw(_("Company is missing in warehouses {0}").format(comma_and(warehouse_with_no_company))) + frappe.throw(_("Company is missing in warehouses {0}") + .format(comma_and(warehouse_with_no_company))) + for wh in warehouse_list: wh_doc = frappe.get_doc("Warehouse", wh.name) wh_doc.flags.ignore_permissions = True From 4f5ad50ecf2410686633d1f169d3181c64ab1336 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 May 2017 16:44:19 +0530 Subject: [PATCH 237/287] Item Rate in Sales Return must be less than or equal to reference doc (#8775) * Item Rate in Sales Return must be less than or equal to reference doc * Fix as rate field is not there in Packed Item --- erpnext/controllers/sales_and_purchase_return.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index d8f28af1d6..d2f894a6a4 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -53,8 +53,8 @@ def validate_returned_items(doc): valid_items = frappe._dict() - select_fields = "item_code, qty, parenttype" if doc.doctype=="Purchase Invoice" \ - else "item_code, qty, serial_no, batch_no, parenttype" + select_fields = "item_code, qty, rate, parenttype" if doc.doctype=="Purchase Invoice" \ + else "item_code, qty, rate, serial_no, batch_no, parenttype" if doc.doctype in ['Purchase Invoice', 'Purchase Receipt']: select_fields += ",rejected_qty, received_qty" @@ -82,10 +82,15 @@ def validate_returned_items(doc): else: ref = valid_items.get(d.item_code, frappe._dict()) validate_quantity(doc, d, ref, valid_items, already_returned_items) - - if ref.batch_no and d.batch_no not in ref.batch_no: + + if ref.rate and doc.doctype in ("Delivery Note", "Sales Invoice") and flt(d.rate) > ref.rate: + frappe.throw(_("Row # {0}: Rate cannot be greater than the rate used in {1} {2}") + .format(d.idx, doc.doctype, doc.return_against)) + + elif 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: if not d.serial_no: frappe.throw(_("Row # {0}: Serial No is mandatory").format(d.idx)) @@ -131,6 +136,7 @@ def get_ref_item_dict(valid_items, ref_item_row): valid_items.setdefault(ref_item_row.item_code, frappe._dict({ "qty": 0, + "rate": 0, "rejected_qty": 0, "received_qty": 0, "serial_no": [], @@ -138,6 +144,7 @@ def get_ref_item_dict(valid_items, ref_item_row): })) item_dict = valid_items[ref_item_row.item_code] item_dict["qty"] += ref_item_row.qty + item_dict["rate"] = ref_item_row.get("rate", 0) if ref_item_row.parenttype in ['Purchase Invoice', 'Purchase Receipt']: item_dict["received_qty"] += ref_item_row.received_qty From b579fd7ada605f40c8b53429cc2a27389e984ca2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 May 2017 17:36:56 +0600 Subject: [PATCH 238/287] bumped to version 8.0.25 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 693c9bee1b..b378f21957 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.24' +__version__ = '8.0.25' def get_default_company(user=None): '''Get default company for user''' From 62c7deee00a8a61942c1434164a4597ce52e7594 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Thu, 11 May 2017 18:03:12 +0530 Subject: [PATCH 239/287] [fix] don't allow string values in limits to avoid sql injection (#8779) --- erpnext/templates/pages/product_search.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py index 8766db3dfa..49f321dd9a 100644 --- a/erpnext/templates/pages/product_search.py +++ b/erpnext/templates/pages/product_search.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cstr, nowdate +from frappe.utils import cstr, nowdate, cint from erpnext.setup.doctype.item_group.item_group import get_item_for_list_in_html no_cache = 1 @@ -33,7 +33,7 @@ def get_product_list(search=None, start=0, limit=12): search = "%" + cstr(search) + "%" # order by - query += """ order by weightage desc, idx desc, modified desc limit %s, %s""" % (start, limit) + query += """ order by weightage desc, idx desc, modified desc limit %s, %s""" % (cint(start), cint(limit)) data = frappe.db.sql(query, { "search": search, From e8270fe21c0a643e4d86fdf73d6c6983254aed6d Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 12 May 2017 11:23:23 +0530 Subject: [PATCH 240/287] [fix] minor fix in get_context for item variants (#8791) --- erpnext/stock/doctype/item/item.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 9b9eb63050..f86417135d 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -325,7 +325,7 @@ class Item(WebsiteGenerator): def set_disabled_attributes(self, context): """Disable selection options of attribute combinations that do not result in a variant""" - if not self.attributes: + if not self.attributes or not self.has_variants: return context.disabled_attributes = {} From d4e15ca35933f10ea3cd5532cdbd7502f571f1df Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 12 May 2017 11:23:58 +0530 Subject: [PATCH 241/287] [minor] create student batch if does not exists (#8781) * [minor] create student batch if does not exists * [fix] minor fixes in if condition --- .../patches/v8_0/merge_student_batch_and_student_group.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py index 5b45cc7602..742457f154 100644 --- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py +++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py @@ -13,7 +13,15 @@ def execute(): frappe.reload_doctype("Student Group") student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch, program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1) + for student_batch in student_batches: + # create student batch name if does not exists !! + if student_batch.get("batch") and not frappe.db.exists("Student Batch Name", student_batch.get("batch")): + frappe.get_doc({ + "doctype": "Student Batch Name", + "batch_name": student_batch.get("batch") + }).insert(ignore_permissions=True) + student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"}) doc = frappe.get_doc(student_batch) student_list = frappe.db.sql('''select student, student_name, active from `tabStudent Batch Student` From 45540569ffc9eff3dbcd3d0b2342b4dda02504f5 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Sat, 13 May 2017 06:30:41 +0530 Subject: [PATCH 242/287] [fix] rename Student Batch to Student Batch Name in activation check --- erpnext/utilities/activation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index c4841bb619..0b73d3e5b6 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -37,7 +37,7 @@ def get_level(): if frappe.db.count('Student') > 5: activation_level += 1 - if frappe.db.count('Student Batch') > 5: + if frappe.db.count('Student Batch Name') > 5: activation_level += 1 if frappe.db.count('Instructor') > 5: From 82e303882e450211405b648399150d7f05b74892 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Sat, 13 May 2017 08:12:03 +0600 Subject: [PATCH 243/287] bumped to version 8.0.26 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index b378f21957..6f73741e85 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.25' +__version__ = '8.0.26' def get_default_company(user=None): '''Get default company for user''' From 62e3e75555451f81967bfe63db36802899077375 Mon Sep 17 00:00:00 2001 From: Julian Robbins Date: Sat, 13 May 2017 05:25:23 +0100 Subject: [PATCH 244/287] Addition of Imap to description of usable mail accounts (#8806) --- erpnext/docs/user/manual/en/setting-up/email/email-account.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/docs/user/manual/en/setting-up/email/email-account.md b/erpnext/docs/user/manual/en/setting-up/email/email-account.md index 0fafa537d1..f0203627bf 100644 --- a/erpnext/docs/user/manual/en/setting-up/email/email-account.md +++ b/erpnext/docs/user/manual/en/setting-up/email/email-account.md @@ -8,7 +8,7 @@ You can manage multiple incoming and outgoing Email Accounts in ERPNext. There h ERPNext will create templates for a bunch of email accounts by default. Not all of them are enabled. To enable them, you must set your account details. -There are 2 types of email accounts, outgoing and incoming. Outgoing email accounts use an SMTP service to send emails and emails are retrived from your inbox using a POP service. Most email providers such as GMail, Outlook or Yahoo provide these services. +There are 2 types of email accounts, outgoing and incoming. Outgoing email accounts use an SMTP service to send emails and emails are retrived from your inbox using a IMAP or POP service. Most email providers such as GMail, Outlook or Yahoo provide these services. Defining Criteria @@ -28,7 +28,7 @@ To setup an incoming Email Account, check on **Enable Incoming** and set your PO ### How ERPNext handles replies -In ERPNext when you send an email to a contact like a customer, the sender will be the user who sent the email. In the **Reply-To** property, the Email Address will be of the default incoming account (like `replies@yourcompany.com`). ERPNext will automatically extract these emails from the incoming account and tag it to the relvant communication +In ERPNext when you send an email to a contact like a customer, the sender will be the user who sent the email. In the **Reply-To** property, the Email Address will be of the default incoming account (like `replies@yourcompany.com`). ERPNext will automatically extract these emails from the incoming account and tag it to the relevant communication ### Notification for unreplied messages From edeb4dc7e01b2e17df0ab20942f4e20033d206e8 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Mon, 15 May 2017 11:32:06 +0530 Subject: [PATCH 245/287] Multiselect dialog for getting items (#8583) * Concatenate docnames and send to mapper * Multiselect with checkboxes * set setters as separate filters * Map filter fields to target_doc * Get items from quotation (in SO) working * [major] Set dialog setters for all forms * Add date field * Specify non-default date_fields * [minor] add test_mapper.py * [minor] remove cur_frm * [minor][fix] test * [minor] fix test with make_test_records --- .../purchase_invoice/purchase_invoice.js | 22 ++-- .../doctype/sales_invoice/sales_invoice.js | 22 +++- .../doctype/purchase_order/purchase_order.js | 15 ++- .../request_for_quotation.js | 29 +++-- .../supplier_quotation/supplier_quotation.js | 12 +- erpnext/controllers/tests/test_mapper.py | 73 ++++++++++++ .../maintenance_schedule.js | 7 +- .../maintenance_visit/maintenance_visit.js | 32 +++-- erpnext/public/js/utils.js | 110 +++++++++--------- .../installation_note/installation_note.js | 11 +- .../selling/doctype/quotation/quotation.js | 19 ++- .../selling/doctype/quotation/quotation.py | 2 +- .../doctype/sales_order/sales_order.js | 9 +- .../doctype/delivery_note/delivery_note.js | 7 +- .../material_request/material_request.js | 7 +- .../purchase_receipt/purchase_receipt.js | 10 +- 16 files changed, 270 insertions(+), 117 deletions(-) create mode 100644 erpnext/controllers/tests/test_mapper.py diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 3762b4841c..63de8789c1 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -49,29 +49,37 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } if(doc.docstatus===0) { - cur_frm.add_custom_button(__('Purchase Order'), function() { + var me = this; + this.frm.add_custom_button(__('Purchase Order'), function() { erpnext.utils.map_current_doc({ method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice", source_doctype: "Purchase Order", + target: me.frm, + setters: { + supplier: me.frm.doc.supplier || undefined, + }, get_query_filters: { - supplier: cur_frm.doc.supplier || undefined, docstatus: 1, status: ["!=", "Closed"], per_billed: ["<", 99.99], - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); - cur_frm.add_custom_button(__('Purchase Receipt'), function() { + this.frm.add_custom_button(__('Purchase Receipt'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice", source_doctype: "Purchase Receipt", + target: me.frm, + date_field: "posting_date", + setters: { + supplier: me.frm.doc.supplier || undefined, + }, get_query_filters: { - supplier: cur_frm.doc.supplier || undefined, docstatus: 1, status: ["!=", "Closed"], - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); @@ -120,7 +128,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ hide_fields(this.frm.doc); if(cint(this.frm.doc.is_paid)) { if(!this.frm.doc.company) { - cur_frm.set_value("is_paid", 0) + this.frm.set_value("is_paid", 0) msgprint(__("Please specify Company to proceed")); } } diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index e8163f0a1c..f2357226cd 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -112,33 +112,43 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte }, sales_order_btn: function() { - this.$sales_order_btn = cur_frm.add_custom_button(__('Sales Order'), + var me = this; + this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'), function() { erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice", source_doctype: "Sales Order", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { docstatus: 1, status: ["!=", "Closed"], per_billed: ["<", 99.99], - customer: cur_frm.doc.customer || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); }, delivery_note_btn: function() { - this.$delivery_note_btn = cur_frm.add_custom_button(__('Delivery Note'), + var me = this; + this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice", source_doctype: "Delivery Note", + target: me.frm, + date_field: "posting_date", + setters: { + company: me.frm.doc.company + }, get_query: function() { var filters = { - company: cur_frm.doc.company + docstatus: 1, }; - if(cur_frm.doc.customer) filters["customer"] = cur_frm.doc.customer; + if(me.frm.doc.customer) filters["customer"] = me.frm.doc.customer; return { query: "erpnext.controllers.queries.get_delivery_notes_to_be_billed", filters: filters diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index 85a6329f51..cfd333670a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -153,30 +153,37 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend( }, add_from_mappers: function() { - cur_frm.add_custom_button(__('Material Request'), + var me = this; + this.frm.add_custom_button(__('Material Request'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order", source_doctype: "Material Request", + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { material_request_type: "Purchase", docstatus: 1, status: ["!=", "Stopped"], per_ordered: ["<", 99.99], - company: cur_frm.doc.company } }) }, __("Add items from")); - cur_frm.add_custom_button(__('Supplier Quotation'), + this.frm.add_custom_button(__('Supplier Quotation'), function() { erpnext.utils.map_current_doc({ method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order", source_doctype: "Supplier Quotation", + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { docstatus: 1, status: ["!=", "Stopped"], - company: cur_frm.doc.company } }) }, __("Add items from")); diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index 92600b774c..593f667994 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -48,7 +48,7 @@ frappe.ui.form.on("Request for Quotation",{ }); }); } - + }, make_suppplier_quotation: function(frm) { @@ -124,24 +124,28 @@ frappe.ui.form.on("Request for Quotation Supplier",{ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.extend({ refresh: function() { + var me = this; this._super(); if (this.frm.doc.docstatus===0) { - cur_frm.add_custom_button(__('Material Request'), + this.frm.add_custom_button(__('Material Request'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.material_request.material_request.make_request_for_quotation", source_doctype: "Material Request", + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { material_request_type: "Purchase", docstatus: 1, status: ["!=", "Stopped"], - per_ordered: ["<", 99.99], - company: cur_frm.doc.company + per_ordered: ["<", 99.99] } }) }, __("Get items from")); // Get items from open Material Requests based on supplier - cur_frm.add_custom_button(__('Possible Supplier'), function() { + this.frm.add_custom_button(__('Possible Supplier'), function() { // Create a dialog window for the user to pick their supplier var d = new frappe.ui.Dialog({ title: __('Select Possible Supplier'), @@ -150,32 +154,35 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e {fieldname: 'ok_button', fieldtype:'Button', label:'Get Items from Material Requests'}, ] }); - + // On the user clicking the ok button d.fields_dict.ok_button.input.onclick = function() { var btn = d.fields_dict.ok_button.input; var v = d.get_values(); if(v) { $(btn).set_working(); - + erpnext.utils.map_current_doc({ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier", source_name: v.supplier, + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { material_request_type: "Purchase", docstatus: 1, status: ["!=", "Stopped"], - per_ordered: ["<", 99.99], - company: cur_frm.doc.company + per_ordered: ["<", 99.99] } }); $(btn).done_working(); d.hide(); } - } + } d.show(); }, __("Get items from")); - + } }, diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js index 1e2379e1a0..6bcbdbacac 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js @@ -14,6 +14,7 @@ frappe.ui.form.on('Suppier Quotation', { erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.extend({ refresh: function() { + var me = this; this._super(); if (this.frm.doc.docstatus === 1) { cur_frm.add_custom_button(__("Purchase Order"), this.make_purchase_order, @@ -24,18 +25,21 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext } else if (this.frm.doc.docstatus===0) { - - cur_frm.add_custom_button(__('Material Request'), + + this.frm.add_custom_button(__('Material Request'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation", source_doctype: "Material Request", + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { material_request_type: "Purchase", docstatus: 1, status: ["!=", "Stopped"], - per_ordered: ["<", 99.99], - company: cur_frm.doc.company + per_ordered: ["<", 99.99] } }) }, __("Get items from")); diff --git a/erpnext/controllers/tests/test_mapper.py b/erpnext/controllers/tests/test_mapper.py new file mode 100644 index 0000000000..0e2d6d0b4e --- /dev/null +++ b/erpnext/controllers/tests/test_mapper.py @@ -0,0 +1,73 @@ +from __future__ import unicode_literals +import unittest +import frappe + +import random, json +import frappe.utils +from frappe.utils import nowdate +from frappe.model import mapper +from frappe.test_runner import make_test_records + +class TestMapper(unittest.TestCase): + def test_map_docs(self): + '''Test mapping of multiple source docs on a single target doc''' + + make_test_records("Item") + items = frappe.get_all("Item", fields = ["name", "item_code"], filters = {'is_sales_item': 1, 'has_variants': 0}) + customers = frappe.get_all("Customer") + if items and customers: + # Make source docs (quotations) and a target doc (sales order) + customer = random.choice(customers).name + qtn1, item_list_1 = self.make_quotation(items, customer) + qtn2, item_list_2 = self.make_quotation(items, customer) + so, item_list_3 = self.make_sales_order() + + # Map source docs to target with corresponding mapper method + method = "erpnext.selling.doctype.quotation.quotation.make_sales_order" + updated_so = mapper.map_docs(method, json.dumps([qtn1.name, qtn2.name]), so) + + # Assert that all inserted items are present in updated sales order + src_items = item_list_1 + item_list_2 + item_list_3 + self.assertEqual(set([d.item_code for d in src_items]), + set([d.item_code for d in updated_so.items])) + + def get_random_items(self, items, limit): + '''Get a number of random items from a list of given items''' + random_items = [] + for i in range(0, limit): + random_items.append(random.choice(items)) + return random_items + + def make_quotation(self, items, customer): + item_list = self.get_random_items(items, 3) + qtn = frappe.get_doc({ + "doctype": "Quotation", + "quotation_to": "Customer", + "customer": customer, + "order_type": "Sales" + }) + for item in item_list: + qtn.append("items", {"qty": "2", "item_code": item.item_code}) + + qtn.submit() + return qtn, item_list + + def make_sales_order(self): + item = frappe.get_doc({ + "base_amount": 1000.0, + "base_rate": 100.0, + "description": "CPU", + "doctype": "Sales Order Item", + "item_code": "_Test Item Home Desktop 100", + "item_name": "CPU", + "parentfield": "items", + "qty": 10.0, + "rate": 100.0, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "_Test UOM", + "conversion_factor": 1.0, + "uom": "_Test UOM" + }) + so = frappe.get_doc(frappe.get_test_records('Sales Order')[0]) + so.insert(ignore_permissions=True) + return so, [item] diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js index 9639e7faa2..da7d133d21 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js @@ -33,10 +33,13 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({ erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_schedule", source_doctype: "Sales Order", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + order_type: me.frm.doc.order_type, + }, get_query_filters: { docstatus: 1, - order_type: me.frm.doc.order_type, - customer: me.frm.doc.customer || undefined, company: me.frm.doc.company } }); diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js index 62cdf865e0..e1f501b38c 100644 --- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js +++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js @@ -27,41 +27,53 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({ refresh: function() { frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'} + var me = this; + if (this.frm.doc.docstatus===0) { - cur_frm.add_custom_button(__('Maintenance Schedule'), + this.frm.add_custom_button(__('Maintenance Schedule'), function() { erpnext.utils.map_current_doc({ method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit", source_doctype: "Maintenance Schedule", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { docstatus: 1, - customer: cur_frm.doc.customer || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); - cur_frm.add_custom_button(__('Warranty Claim'), + this.frm.add_custom_button(__('Warranty Claim'), function() { erpnext.utils.map_current_doc({ method: "erpnext.support.doctype.warranty_claim.warranty_claim.make_maintenance_visit", source_doctype: "Warranty Claim", + target: me.frm, + date_field: "complaint_date", + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { status: ["in", "Open, Work in Progress"], - customer: cur_frm.doc.customer || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); - cur_frm.add_custom_button(__('Sales Order'), + this.frm.add_custom_button(__('Sales Order'), function() { erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit", source_doctype: "Sales Order", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { docstatus: 1, - order_type: cur_frm.doc.order_type, - customer: cur_frm.doc.customer || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company, + order_type: me.frm.doc.order_type, } }) }, __("Get items from")); diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 8865b50198..3a2254e24c 100644 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -114,63 +114,68 @@ erpnext.utils.map_current_doc = function(opts) { } } var _map = function() { - // remove first item row if empty if($.isArray(cur_frm.doc.items) && cur_frm.doc.items.length > 0) { + // remove first item row if empty if(!cur_frm.doc.items[0].item_code) { cur_frm.doc.items = cur_frm.doc.items.splice(1); } // find the doctype of the items table var items_doctype = frappe.meta.get_docfield(cur_frm.doctype, 'items').options; - + // find the link fieldname from items table for the given // source_doctype var link_fieldname = null; - frappe.get_meta(items_doctype).fields.forEach(function(d) { + frappe.get_meta(items_doctype).fields.forEach(function(d) { if(d.options===opts.source_doctype) link_fieldname = d.fieldname; }); // search in existing items if the source_name is already set and full qty fetched var already_set = false; var item_qty_map = {}; - - $.each(cur_frm.doc.items, function(i, d) { - if(d[link_fieldname]==opts.source_name) { - already_set = true; - if (item_qty_map[d.item_code]) - item_qty_map[d.item_code] += flt(d.qty); - else - item_qty_map[d.item_code] = flt(d.qty); - } - }); - - if(already_set) { - frappe.model.with_doc(opts.source_doctype, opts.source_name, function(r) { - var source_doc = frappe.model.get_doc(opts.source_doctype, opts.source_name); - $.each(source_doc.items || [], function(i, row) { - if(row.qty > flt(item_qty_map[row.item_code])) { - already_set = false; - return false; - } - }) - }) - if(already_set) { - frappe.msgprint(__("You have already selected items from {0} {1}", - [opts.source_doctype, opts.source_name])); - return; - } + $.each(cur_frm.doc.items, function(i, d) { + opts.source_name.forEach(function(src) { + if(d[link_fieldname]==src) { + already_set = true; + if (item_qty_map[d.item_code]) + item_qty_map[d.item_code] += flt(d.qty); + else + item_qty_map[d.item_code] = flt(d.qty); + } + }); + }); + + if(already_set) { + opts.source_name.forEach(function(src) { + frappe.model.with_doc(opts.source_doctype, src, function(r) { + var source_doc = frappe.model.get_doc(opts.source_doctype, src); + $.each(source_doc.items || [], function(i, row) { + if(row.qty > flt(item_qty_map[row.item_code])) { + already_set = false; + return false; + } + }) + }) + + if(already_set) { + frappe.msgprint(__("You have already selected items from {0} {1}", + [opts.source_doctype, src])); + return; + } + + }) } } - return frappe.call({ // Sometimes we hit the limit for URL length of a GET request // as we send the full target_doc. Hence this is a POST request. type: "POST", - method: opts.method, + method: 'frappe.model.mapper.map_docs', args: { - "source_name": opts.source_name, - "target_doc": cur_frm.doc + "method": opts.method, + "source_names": opts.source_name, + "target_doc": cur_frm.doc, }, callback: function(r) { if(!r.exc) { @@ -181,29 +186,26 @@ erpnext.utils.map_current_doc = function(opts) { }); } if(opts.source_doctype) { - var d = new frappe.ui.Dialog({ - title: __("Get From ") + __(opts.source_doctype), - fields: [ - { - fieldtype: "Link", - label: __(opts.source_doctype), - fieldname: opts.source_doctype, - options: opts.source_doctype, - get_query: opts.get_query, - reqd:1 - }, - ] + var d = new frappe.ui.form.MultiSelectDialog({ + doctype: opts.source_doctype, + target: opts.target, + date_field: opts.date_field || undefined, + setters: opts.setters, + get_query: opts.get_query, + action: function(selections, args) { + let values = selections; + if(values.length === 0){ + frappe.msgprint(__("Please select Quotations")) + return; + } + opts.source_name = values; + opts.setters = args; + d.dialog.hide(); + _map(); + }, }); - d.set_primary_action(__('Get Items'), function() { - var values = d.get_values(); - if(!values) - return; - opts.source_name = values[opts.source_doctype]; - d.hide(); - _map(); - }) - d.show(); } else if(opts.source_name) { + opts.source_name = [opts.source_name]; _map(); } } diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js index d4b2179172..9aff74ad86 100644 --- a/erpnext/selling/doctype/installation_note/installation_note.js +++ b/erpnext/selling/doctype/installation_note/installation_note.js @@ -42,18 +42,23 @@ erpnext.selling.InstallationNote = frappe.ui.form.Controller.extend({ }, refresh: function() { + var me = this; if (this.frm.doc.docstatus===0) { - cur_frm.add_custom_button(__('From Delivery Note'), + this.frm.add_custom_button(__('From Delivery Note'), function() { erpnext.utils.map_current_doc({ method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note", source_doctype: "Delivery Note", + target: me.frm, + date_field: "posting_date", + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { docstatus: 1, status: ["not in", ["Stopped", "Closed"]], per_installed: ["<", 99.99], - customer: cur_frm.doc.customer || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, "fa fa-download", "btn-default" diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index 9c37365ac4..940daaa507 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -25,6 +25,8 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ refresh: function(doc, dt, dn) { this._super(doc, dt, dn); + var me = this; + if(doc.docstatus == 1 && doc.status!=='Lost') { cur_frm.add_custom_button(__('Make Sales Order'), cur_frm.cscript['Make Sales Order']); @@ -36,17 +38,24 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ } if (this.frm.doc.docstatus===0) { - cur_frm.add_custom_button(__('Opportunity'), + this.frm.add_custom_button(__('Opportunity'), function() { + var setters = {}; + if(me.frm.doc.customer) { + setters.customer = me.frm.doc.customer || undefined; + } else if (me.frm.doc.lead) { + setters.lead = me.frm.doc.lead || undefined; + } erpnext.utils.map_current_doc({ method: "erpnext.crm.doctype.opportunity.opportunity.make_quotation", source_doctype: "Opportunity", + target: me.frm, + setters: setters, get_query_filters: { status: ["not in", ["Lost", "Closed"]], - enquiry_type: cur_frm.doc.order_type, - customer: cur_frm.doc.customer || undefined, - lead: cur_frm.doc.lead || undefined, - company: cur_frm.doc.company + company: me.frm.doc.company, + // cannot set enquiry_type as setter, as the fieldname is order_type + enquiry_type: me.frm.doc.order_type, } }) }, __("Get items from"), "btn-default"); diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index d32fe77d8e..b5b24f8c75 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -102,7 +102,7 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): - target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) + target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) doclist = get_mapped_doc("Quotation", source_name, { "Quotation": { diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 0175976fde..5a4de0bfdc 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -136,12 +136,15 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.quotation.quotation.make_sales_order", source_doctype: "Quotation", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + order_type: me.frm.doc.order_type, + }, get_query_filters: { + company: me.frm.doc.company, docstatus: 1, status: ["!=", "Lost"], - order_type: me.frm.doc.order_type, - customer: me.frm.doc.customer || undefined, - company: me.frm.doc.company } }) }, __("Get items from")); diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 5236031e6d..eb8a750c14 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -119,13 +119,16 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend( erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note", source_doctype: "Sales Order", + target: me.frm, + setters: { + customer: me.frm.doc.customer || undefined, + }, get_query_filters: { docstatus: 1, status: ["!=", "Closed"], per_delivered: ["<", 99.99], + company: me.frm.doc.company, project: me.frm.doc.project || undefined, - customer: me.frm.doc.customer || undefined, - company: me.frm.doc.company } }) }, __("Get items from")); diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index be0b4c2536..58c16e1964 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -95,16 +95,19 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten } if (this.frm.doc.docstatus===0) { - cur_frm.add_custom_button(__('Sales Order'), + this.frm.add_custom_button(__('Sales Order'), function() { erpnext.utils.map_current_doc({ method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request", source_doctype: "Sales Order", + target: me.frm, + setters: { + company: me.frm.doc.company + }, get_query_filters: { docstatus: 1, status: ["!=", "Closed"], per_delivered: ["<", 99.99], - company: cur_frm.doc.company } }) }, __("Get items from")); diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index 383de01e70..5c97e7cd63 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -43,6 +43,7 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend }, refresh: function() { + var me = this; this._super(); if(this.frm.doc.docstatus===1) { this.show_stock_ledger(); @@ -53,17 +54,20 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend if(!this.frm.doc.is_return && this.frm.doc.status!="Closed") { if(this.frm.doc.docstatus==0) { - cur_frm.add_custom_button(__('Purchase Order'), + this.frm.add_custom_button(__('Purchase Order'), function() { erpnext.utils.map_current_doc({ method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt", source_doctype: "Purchase Order", + target: me.frm, + setters: { + supplier: me.frm.doc.supplier || undefined, + }, get_query_filters: { - supplier: cur_frm.doc.supplier || undefined, docstatus: 1, status: ["!=", "Closed"], per_received: ["<", 99.99], - company: cur_frm.doc.company + company: me.frm.doc.company } }) }, __("Get items from")); From 7bf810300e1a4b0a603819f457987d8e08d8d64d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 15 May 2017 11:42:37 +0530 Subject: [PATCH 246/287] Fixed #8822, active students patch --- erpnext/patches/v7_2/mark_students_active.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/patches/v7_2/mark_students_active.py b/erpnext/patches/v7_2/mark_students_active.py index 12057edb63..3513cdeb34 100644 --- a/erpnext/patches/v7_2/mark_students_active.py +++ b/erpnext/patches/v7_2/mark_students_active.py @@ -1,7 +1,5 @@ import frappe def execute(): - frappe.reload_doc('schools', 'doctype', 'student_batch_student') frappe.reload_doc('schools', 'doctype', 'student_group_student') - frappe.db.sql("update `tabStudent Batch Student` set active=1") frappe.db.sql("update `tabStudent Group Student` set active=1") From 125996e21c0c45f23ccc43e2a9248b8fb67d576f Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 16 May 2017 07:29:15 +0530 Subject: [PATCH 247/287] Increase item cart height in mobile view (Fixes #8827) (#8846) --- erpnext/public/css/erpnext.css | 5 +++++ erpnext/public/less/erpnext.less | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css index fd240064ca..86dec05eb9 100644 --- a/erpnext/public/css/erpnext.css +++ b/erpnext/public/css/erpnext.css @@ -270,6 +270,11 @@ body[data-route="pos"] .item-cart-items { border: 1px solid #d1d8dd; border-top: none; } +@media (max-width: 767px) { + body[data-route="pos"] .item-cart-items { + height: 30vh; + } +} body[data-route="pos"] .no-items-message { min-height: 200px; display: flex; diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less index 0431848f86..f6482eb516 100644 --- a/erpnext/public/less/erpnext.less +++ b/erpnext/public/less/erpnext.less @@ -321,6 +321,10 @@ body[data-route="pos"] { overflow: auto; border: 1px solid @border-color; border-top: none; + + @media (max-width: @screen-xs) { + height: 30vh; + } } .no-items-message { From 769b6bada86867b47f08d9534a42db484bc6c037 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 16 May 2017 07:31:10 +0530 Subject: [PATCH 248/287] [POS] Add Pay menu item in mobile view (#8801) (#8845) --- erpnext/accounts/page/pos/pos.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index c632e459e3..176d2691f5 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -78,8 +78,16 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ make_menu_list: function () { var me = this; - this.page.clear_menu(); + + // for mobile + this.page.add_menu_item(__("Pay"), function () { + me.validate(); + me.update_paid_amount_status(true); + me.create_invoice(); + me.make_payment(); + }).addClass('visible-xs'); + this.page.add_menu_item(__("New Sales Invoice"), function () { me.save_previous_entry(); me.create_new(); From 4fcd8a6db3468bd91c1129a3cc15a4f6091996fd Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 16 May 2017 07:40:26 +0530 Subject: [PATCH 249/287] Fix sales funnel legend position (Fixes #5073) (#8838) --- erpnext/selling/page/sales_funnel/sales_funnel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/selling/page/sales_funnel/sales_funnel.js b/erpnext/selling/page/sales_funnel/sales_funnel.js index 67ba1c8f96..e37e88d2ef 100644 --- a/erpnext/selling/page/sales_funnel/sales_funnel.js +++ b/erpnext/selling/page/sales_funnel/sales_funnel.js @@ -163,6 +163,10 @@ erpnext.SalesFunnel = Class.extend({ draw_legend: function(x_mid, y_mid, width, height, title) { var context = this.elements.context; + if(y_mid == 0) { + y_mid = 7; + } + // draw line context.beginPath(); context.moveTo(x_mid, y_mid); From 939db36ad4dcd7c5d9f5a02142b8dff4e4142648 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 16 May 2017 07:42:44 +0530 Subject: [PATCH 250/287] [fix] copy item variant values on save and make non no_copy fields as not editable. fixes frappe/erpnext#4253 (#8837) --- erpnext/stock/doctype/item/item.js | 15 ++++++++++++++- erpnext/stock/doctype/item/item.py | 13 +++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 3402619eac..460f1c3deb 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -65,7 +65,8 @@ frappe.ui.form.on("Item", { frm.page.set_inner_btn_group_as_primary(__("Make")); } if (frm.doc.variant_of) { - frm.set_intro(__("This Item is a Variant of {0} (Template). Attributes will be copied over from the template unless 'No Copy' is set", [frm.doc.variant_of]), true); + frm.set_intro(__("This Item is a Variant of {0} (Template). Attributes will be copied over from the template unless 'No Copy' is set", + [frm.doc.variant_of]), true); } if (frappe.defaults.get_default("item_naming_by")!="Naming Series" || frm.doc.variant_of) { @@ -96,6 +97,8 @@ frappe.ui.form.on("Item", { } frappe.set_route('Form', 'Item', new_item.name); }); + + frm.trigger('make_variant_fields_read_only'); }, validate: function(frm){ @@ -106,6 +109,16 @@ frappe.ui.form.on("Item", { refresh_field("image_view"); }, + make_variant_fields_read_only: function(frm) { + if(frm.doc.variant_of) { + frm.meta.fields.forEach(function(df) { + if (!df.no_copy) { + frm.toggle_enable(df.fieldname, false); + } + }); + } + }, + is_fixed_asset: function(frm) { if (frm.doc.is_fixed_asset) { frm.set_value("is_stock_item", 0); diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index f86417135d..ef85dd9a68 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -86,6 +86,7 @@ class Item(WebsiteGenerator): self.validate_has_variants() self.validate_attributes() self.validate_variant_attributes() + self.copy_variant_attributes() self.validate_website_image() self.make_thumbnail() self.validate_fixed_asset() @@ -616,7 +617,9 @@ class Item(WebsiteGenerator): template_item.save() def update_variants(self): - if self.has_variants and not self.flags.dont_update_variants: + if self.flags.dont_update_variants: + return + if self.has_variants: updated = [] variants = frappe.db.get_all("Item", fields=["item_code"], filters={"variant_of": self.name }) for d in variants: @@ -625,7 +628,7 @@ class Item(WebsiteGenerator): variant.save() updated.append(d.item_code) if updated: - frappe.msgprint(_("Item Variants {0} updated").format(", ".join(updated))) + frappe.msgprint(_("Item Variants {0} updated").format(", ".join(updated))) def validate_has_variants(self): if not self.has_variants and frappe.db.get_value("Item", self.name, "has_variants"): @@ -670,6 +673,12 @@ class Item(WebsiteGenerator): validate_item_variant_attributes(self, args) + def copy_variant_attributes(self): + '''Copy attributes from template (if they have been changed before saving)''' + if self.variant_of: + template = frappe.get_doc('Item', self.variant_of) + copy_attributes_to_variant(template, self) + def get_timeline_data(doctype, name): '''returns timeline data based on stock ledger entry''' out = {} From b0df661e81f76687986267b75c53cb9f2bf60599 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Tue, 16 May 2017 07:59:58 +0530 Subject: [PATCH 251/287] [minor] set set_posting_time to 1 while data import (#8835) --- erpnext/utilities/transaction_base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 9a25b76cbe..7657188bb0 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -18,6 +18,10 @@ class TransactionBase(StatusUpdater): frappe.db.get_value("Notification Control", None, dt + "_message")) def validate_posting_time(self): + # set Edit Posting Date and Time to 1 while data import + if frappe.flags.in_import: + self.set_posting_time = 1 + if not getattr(self, 'set_posting_time', None): now = now_datetime() self.posting_date = now.strftime('%Y-%m-%d') From c5f79d2ec4ba98559e604f1eead846d3cafe1cd6 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 16 May 2017 08:00:24 +0530 Subject: [PATCH 252/287] Fix for the student batch-wise attendance report (#8834) --- .../student_batch_wise_attendance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py index ddb4889cbf..646e3f7987 100644 --- a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py +++ b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py @@ -38,7 +38,7 @@ def execute(filters=None): def get_columns(filters): columns = [ - _("Student Group") + ":Link/Student Batch:250", + _("Student Group") + ":Link/Student Group:250", _("Student Group Strength") + "::170", _("Present") + "::90", _("Absent") + "::90", From 59472e5449debd0f3a3b61f091c5d9bc363dfee9 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 16 May 2017 08:05:14 +0530 Subject: [PATCH 253/287] Changes in the student group creation tool (#8833) --- erpnext/schools/doctype/program/program.json | 11 +- .../student_group_creation_tool.js | 25 +-- .../student_group_creation_tool.json | 80 +++++++++- .../student_group_creation_tool.py | 61 +++++--- .../student_group_creation_tool_course.json | 147 ++++++++++++++---- 5 files changed, 263 insertions(+), 61 deletions(-) diff --git a/erpnext/schools/doctype/program/program.json b/erpnext/schools/doctype/program/program.json index 9d6ba1ccbb..672994b821 100644 --- a/erpnext/schools/doctype/program/program.json +++ b/erpnext/schools/doctype/program/program.json @@ -14,6 +14,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -73,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -101,6 +104,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -130,6 +134,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -159,6 +164,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -188,6 +194,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -218,6 +225,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -247,6 +255,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -288,7 +297,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-12 20:40:53.542488", + "modified": "2017-05-12 15:39:15.542274", "modified_by": "Administrator", "module": "Schools", "name": "Program", diff --git a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js index 9c796bb474..dd909b2db0 100644 --- a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js +++ b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js @@ -6,20 +6,27 @@ frappe.ui.form.on("Student Group Creation Tool", "refresh", function(frm) { doc:frm.doc }) }); - + frappe.realtime.on("student_group_creation_progress", function(data) { + if(data.progress) { + frappe.hide_msgprint(true); + frappe.show_progress(__("Creating student groups"), data.progress[0],data.progress[1]); + } + }); }); frappe.ui.form.on("Student Group Creation Tool", "get_courses", function(frm) { frm.set_value("courses",[]); - frappe.call({ - method: "get_courses", - doc:frm.doc, - callback: function(r) { - if(r.message) { - frm.set_value("courses", r.message); + if (frm.doc.academic_year && frm.doc.program) { + frappe.call({ + method: "get_courses", + doc:frm.doc, + callback: function(r) { + if(r.message) { + frm.set_value("courses", r.message); + } } - } - }) + }) + } }); frappe.ui.form.on("Student Group Creation Tool", "onload", function(frm){ diff --git a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json index dd011c3c38..2d543ac28a 100644 --- a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json +++ b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json @@ -1,5 +1,6 @@ { "allow_copy": 1, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -9,18 +10,23 @@ "doctype": "DocType", "document_type": "", "editable_grid": 0, + "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "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_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Academic Year", "length": 0, "no_copy": 0, @@ -30,6 +36,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -37,16 +44,21 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "description": "Leave blank if you make students groups per year", "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Academic Term", "length": 0, "no_copy": 0, @@ -56,23 +68,28 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "get_courses", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Get Courses", "length": 0, "no_copy": 0, @@ -81,6 +98,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -88,16 +106,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -105,6 +127,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -112,17 +135,21 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "description": "Leave blank if you wish to fetch all courses for selected academic term", + "columns": 0, + "description": "", "fieldname": "program", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Program", "length": 0, "no_copy": 0, @@ -132,6 +159,39 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Leave unchecked if you don't want to consider batch while making course based groups. ", + "fieldname": "separate_groups", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Separate course based Group for every Batch", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -139,16 +199,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "section_break_4", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -156,6 +220,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -163,16 +228,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "courses", "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Courses", "length": 0, "no_copy": 0, @@ -182,6 +251,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -189,17 +259,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 1, "hide_toolbar": 1, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-07-25 06:40:46.107131", + "modified": "2017-05-15 12:43:32.317942", "modified_by": "Administrator", "module": "Schools", "name": "Student Group Creation Tool", @@ -230,7 +300,9 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py index 65cf755c61..a23650882e 100644 --- a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py +++ b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.py @@ -9,40 +9,63 @@ from frappe.model.document import Document class StudentGroupCreationTool(Document): def get_courses(self): - if self.program: - courses = frappe.db.sql("""select course, course_code, parent as program, "student_group_name" - from `tabProgram Course` where academic_term= %s and parent= %s""", - (self.academic_term, self.program), as_dict=1) + group_list = [] + + batches = frappe.db.sql('''select name as batch from `tabStudent Batch Name`''', as_dict=1) + for batch in batches: + group_list.append({"group_based_on":"Batch", "batch":batch.batch}) + + courses = frappe.db.sql('''select course, course_name from `tabProgram Course` where parent=%s''', + (self.program), as_dict=1) + if self.separate_groups: + from itertools import product + course_list = product(courses,batches) + for course in course_list: + temp_dict = {} + temp_dict.update({"group_based_on":"Course"}) + temp_dict.update(course[0]) + temp_dict.update(course[1]) + group_list.append(temp_dict) else: - courses = frappe.db.sql("""select course, course_code, parent as program, "student_group_name" - from `tabProgram Course` where academic_term= %s""", - self.academic_term, as_dict=1) + for course in courses: + course.update({"group_based_on":"Course"}) + group_list.append(course) - for d in courses: - if d.course_code: - d.student_group_name = d.course_code + "-" + self.academic_year - else: - d.student_group_name = None + for group in group_list: + if group.get("group_based_on") == "Batch": + student_group_name = self.program + "/" + group.get("batch") + "/" + (self.academic_term if self.academic_term else self.academic_year) + group.update({"student_group_name": student_group_name}) + elif group.get("group_based_on") == "Course": + student_group_name = group.get("course") + "/" + self.program + ("/" + group.get("batch") if group.get("batch") else "") + "/" + (self.academic_term if self.academic_term else self.academic_year) + group.update({"student_group_name": student_group_name}) - return courses + return group_list def create_student_groups(self): if not self.courses: frappe.throw(_("""No Student Groups created.""")) + l = len(self.courses) for d in self.courses: - if not d.course: - frappe.throw(_("""Course is mandatory in row {0}""".format(d.idx))) - if not d.student_group_name: frappe.throw(_("""Student Group Name is mandatory in row {0}""".format(d.idx))) + if d.group_based_on == "Course" and not d.course: + frappe.throw(_("""Course is mandatory in row {0}""".format(d.idx))) + + if d.group_based_on == "Batch" and not d.batch: + frappe.throw(_("""Batch is mandatory in row {0}""".format(d.idx))) + + frappe.publish_realtime('student_group_creation_progress', {"progress": [d.idx, l]}, user=frappe.session.user) + student_group = frappe.new_doc("Student Group") - student_group.group_name = d.student_group_name + student_group.student_group_name = d.student_group_name + student_group.group_based_on = d.group_based_on + student_group.program = self.program student_group.course = d.course - student_group.max_strength = d.max_strength + student_group.batch = d.batch student_group.academic_term = self.academic_term student_group.academic_year = self.academic_year student_group.save() - frappe.msgprint(_("Student Groups created.")) + frappe.msgprint(_("{0} Student Groups created.".format(l))) diff --git a/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json index 88466b60ab..d945d4b7e5 100644 --- a/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json +++ b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -9,18 +10,54 @@ "doctype": "DocType", "document_type": "", "editable_grid": 1, + "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "group_based_on", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Group Based On", + "length": 0, + "no_copy": 0, + "options": "\nBatch\nCourse", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "course", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Course", "length": 0, "no_copy": 0, @@ -30,32 +67,7 @@ "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, - "fieldname": "course_code", - "fieldtype": "Read Only", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Course Code", - "length": 0, - "no_copy": 0, - "options": "course.course_code", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -63,16 +75,51 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Batch", + "length": 0, + "no_copy": 0, + "options": "Student Batch Name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 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_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -80,6 +127,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -87,16 +135,20 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "student_group_name", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Student Group Name", "length": 0, "no_copy": 0, @@ -105,6 +157,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, @@ -112,16 +165,51 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "course_code", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Course Code", + "length": 0, + "no_copy": 0, + "options": "course.course_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "max_strength", "fieldtype": "Int", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Max Strength", "length": 0, "no_copy": 0, @@ -130,6 +218,7 @@ "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -137,17 +226,17 @@ "unique": 0 } ], + "has_web_view": 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-07-25 06:40:49.000588", + "modified": "2017-05-15 14:18:23.435415", "modified_by": "Administrator", "module": "Schools", "name": "Student Group Creation Tool Course", @@ -157,7 +246,9 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", + "track_changes": 1, "track_seen": 0 } \ No newline at end of file From d67880993988752e0ad60a7270566bb411d4a663 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 08:06:45 +0530 Subject: [PATCH 254/287] [fix] Party balance field showing wrong currency symbol (#8832) --- erpnext/accounts/doctype/payment_entry/payment_entry.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index 50bfbd3ea1..2eef79cd76 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -147,6 +147,7 @@ frappe.ui.form.on('Payment Entry', { var currency_field = (frm.doc.payment_type=="Receive") ? "paid_from_account_currency" : "paid_to_account_currency" frm.set_df_property("total_allocated_amount", "options", currency_field); frm.set_df_property("unallocated_amount", "options", currency_field); + frm.set_df_property("party_balance", "options", currency_field); frm.set_currency_labels(["total_amount", "outstanding_amount", "allocated_amount"], party_account_currency, "references"); From 3e2c9d00f139f4a04cb6666520c7c00545ea9ea0 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Tue, 16 May 2017 08:22:45 +0530 Subject: [PATCH 255/287] [minor] Corrected field label & placed Expense Claim button in Next Step (#8828) --- erpnext/hr/doctype/vehicle_log/vehicle_log.js | 8 ++ .../hr/doctype/vehicle_log/vehicle_log.json | 85 ++++++------------- 2 files changed, 32 insertions(+), 61 deletions(-) diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js index 56c30fffc4..818a595c93 100644 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js +++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.js @@ -16,7 +16,15 @@ frappe.ui.form.on("Vehicle Log", { } }) } + + if(frm.doc.docstatus == 1) { + frm.add_custom_button(__('Expense Claim'), function() { + frm.events.expense_claim(frm) + }, __("Make")); + frm.page.set_inner_btn_group_as_primary(__("Make")); + } }, + expense_claim: function(frm){ frappe.call({ method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim", diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.json b/erpnext/hr/doctype/vehicle_log/vehicle_log.json index 3610da4baf..fde34d7c55 100644 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.json +++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "naming_series:", @@ -12,6 +13,7 @@ "editable_grid": 1, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -41,6 +43,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -71,6 +74,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -101,6 +105,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -131,6 +136,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -159,6 +165,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -187,6 +194,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -216,6 +224,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -245,6 +254,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -274,6 +284,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -303,6 +314,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -332,6 +344,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -361,6 +374,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -390,6 +404,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -419,6 +434,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -447,6 +463,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -477,6 +494,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -506,6 +524,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -519,7 +538,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Service_Details", + "label": "Service Details", "length": 0, "no_copy": 0, "permlevel": 0, @@ -535,6 +554,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -565,64 +585,7 @@ "unique": 0 }, { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_20", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 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": "eval:doc.docstatus==1", - "fieldname": "expense_claim", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Make Expense Claim", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -652,17 +615,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-17 16:53:17.975663", + "modified": "2017-05-15 13:17:59.575317", "modified_by": "Administrator", "module": "HR", "name": "Vehicle Log", From bdb2f9595791050dfa6616ad8aaec0defdcbd83f Mon Sep 17 00:00:00 2001 From: Ishan Loya Date: Tue, 16 May 2017 08:25:07 +0530 Subject: [PATCH 256/287] Show duplicate button in BOM unless in draft stage (#8826) --- erpnext/manufacturing/doctype/bom/bom.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 5181cf48a5..576e46df50 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -33,9 +33,7 @@ frappe.ui.form.on("BOM", { }); } - if(frm.doc.docstatus==2) { - // show duplicate button when BOM is cancelled, - // its not very intuitive + if(frm.doc.docstatus!=0) { frm.add_custom_button(__("Duplicate"), function() { frm.copy_doc(); }); From 475d140b5c4f6ac240956ae91fe7d6232cc11541 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Tue, 16 May 2017 08:26:21 +0530 Subject: [PATCH 257/287] [minor] made items table mandatory for quotation (#8825) --- .../selling/doctype/quotation/quotation.json | 88 ++++++++++++++++++- 1 file changed, 85 insertions(+), 3 deletions(-) diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index ee194f379f..2f2a7ed815 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", @@ -12,6 +13,7 @@ "editable_grid": 1, "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -41,6 +43,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -71,6 +74,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -102,6 +106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -134,6 +139,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -166,6 +172,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -198,6 +205,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -226,6 +234,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -255,6 +264,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -287,6 +297,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -320,6 +331,7 @@ "width": "150px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -352,6 +364,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -384,6 +397,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -415,6 +429,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -444,6 +459,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -474,6 +490,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -506,6 +523,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -534,6 +552,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -562,6 +581,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -591,6 +611,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -620,6 +641,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -649,6 +671,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -677,6 +700,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -710,6 +734,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -740,6 +765,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -769,6 +795,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -801,6 +828,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -834,6 +862,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -862,6 +891,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -894,6 +924,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -923,6 +954,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -953,6 +985,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -981,6 +1014,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1011,6 +1045,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1036,13 +1071,14 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0, "width": "40px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1070,6 +1106,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1100,6 +1137,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1132,6 +1170,7 @@ "width": "100px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1159,6 +1198,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1189,6 +1229,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1218,6 +1259,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1248,6 +1290,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1279,6 +1322,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1306,6 +1350,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1336,6 +1381,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1363,6 +1409,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1394,6 +1441,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1423,6 +1471,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1450,6 +1499,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1481,6 +1531,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1508,6 +1559,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1537,6 +1589,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1567,6 +1620,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1598,6 +1652,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1628,6 +1683,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1656,6 +1712,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1685,6 +1742,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1714,6 +1772,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1744,6 +1803,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1776,6 +1836,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1808,6 +1869,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1840,6 +1902,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1869,6 +1932,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1901,6 +1965,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -1933,6 +1998,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1964,6 +2030,7 @@ "width": "200px" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -1995,6 +2062,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2026,6 +2094,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2056,6 +2125,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2085,6 +2155,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -2116,6 +2187,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -2147,6 +2219,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2175,6 +2248,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2204,6 +2278,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -2234,6 +2309,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2265,6 +2341,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2296,6 +2373,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -2327,6 +2405,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2356,6 +2435,7 @@ "width": "50%" }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2388,6 +2468,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2418,6 +2499,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -2448,19 +2530,19 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-shopping-cart", "idx": 82, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 1, "menu_index": 0, - "modified": "2017-02-20 13:22:18.466192", + "modified": "2017-05-15 13:05:39.469590", "modified_by": "Administrator", "module": "Selling", "name": "Quotation", From f4ee682400a79fb6be599124fbb08b147431dda6 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 16 May 2017 08:30:27 +0530 Subject: [PATCH 258/287] [fix] pass company filter as string in get_value (#8823) --- erpnext/utilities/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/utilities/__init__.py b/erpnext/utilities/__init__.py index b94061c29c..944f9785a4 100644 --- a/erpnext/utilities/__init__.py +++ b/erpnext/utilities/__init__.py @@ -2,6 +2,7 @@ import frappe from erpnext.utilities.activation import get_level +from frappe.utils import cstr def update_doctypes(): for d in frappe.db.sql("""select df.parent, df.fieldname @@ -26,7 +27,7 @@ def get_site_info(site_info): company = company[0][0] if company else None if company: - domain = frappe.db.get_value('Company', company, 'domain') + domain = frappe.db.get_value('Company', cstr(company), 'domain') return { 'company': company, From 74e2e4672cd4ccc6ed4041884f90f5fe59f7336b Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 16 May 2017 08:32:45 +0530 Subject: [PATCH 259/287] Fix for duplicated project dependencies (#8817) - skip when task is not found --- erpnext/projects/doctype/project/project.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 40493e1ed6..0345f05861 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -216,9 +216,19 @@ class Project(Document): # duplicated project dependency_map = {} for task in self.tasks: - name, depends_on_tasks = frappe.db.get_value( - 'Task', { "subject": task.title, "project": self.copied_from }, ['name', 'depends_on_tasks'] + _task = frappe.db.get_value( + 'Task', + {"subject": task.title, "project": self.copied_from}, + ['name', 'depends_on_tasks'], + as_dict=True ) + + if _task is None: + continue + + name = _task.name + depends_on_tasks = _task.depends_on_tasks + depends_on_tasks = [x for x in depends_on_tasks.split(',') if x] dependency_map[task.title] = [ x['subject'] for x in frappe.get_list( 'Task Depends On', {"parent": name}, ['subject'])] From 156eef190748c892e57edce716f7400049fef6b7 Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Tue, 16 May 2017 05:04:33 +0200 Subject: [PATCH 260/287] Description correction (#8811) --- erpnext/setup/doctype/territory/territory.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/setup/doctype/territory/territory.json b/erpnext/setup/doctype/territory/territory.json index 030f9369a5..b123d5e1ac 100644 --- a/erpnext/setup/doctype/territory/territory.json +++ b/erpnext/setup/doctype/territory/territory.json @@ -79,7 +79,7 @@ "bold": 1, "collapsible": 0, "columns": 0, - "description": "Only leaf nodes are allowed in transaction", + "description": "", "fieldname": "is_group", "fieldtype": "Check", "hidden": 0, @@ -478,4 +478,4 @@ "sort_order": "DESC", "track_changes": 0, "track_seen": 0 -} \ No newline at end of file +} From 5886aafbaeda2b92d2379affa93c9225a8728146 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Tue, 16 May 2017 08:35:39 +0530 Subject: [PATCH 261/287] [minor] removed cur_frm and added frappe.ui.form.on (#8803) --- erpnext/stock/doctype/price_list/price_list.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/price_list/price_list.js b/erpnext/stock/doctype/price_list/price_list.js index 23ac6fd7a9..c362b5a765 100644 --- a/erpnext/stock/doctype/price_list/price_list.js +++ b/erpnext/stock/doctype/price_list/price_list.js @@ -1,13 +1,14 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -$.extend(cur_frm.cscript, { - refresh: function() { - cur_frm.add_custom_button(__("Add / Edit Prices"), function() { +frappe.ui.form.on("Price List", { + refresh: function(frm) { + let me = this; + frm.add_custom_button(__("Add / Edit Prices"), function() { frappe.route_options = { - "price_list": cur_frm.doc.name + "price_list": frm.doc.name }; frappe.set_route("Report", "Item Price"); }, "fa fa-money"); } -}); +}); \ No newline at end of file From 09483d3c0fc5ba28bcb0b8ff17f5a11dfa713912 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 08:51:24 +0530 Subject: [PATCH 262/287] [fix] Numeric keypad not displaying after creation of new customer (#8797) --- erpnext/accounts/page/pos/pos.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 176d2691f5..da4a3b7f25 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -796,7 +796,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ add_customer: function() { this.frm.doc.customer = ""; - this.update_customer(true) + this.update_customer(true); + this.numeric_keypad.show(); }, update_customer: function (new_customer) { From 654f186f951ab9b56761e38249dd3ed5e9a2efe3 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 08:54:29 +0530 Subject: [PATCH 263/287] [fix] Apply pricing rule on the item based on quantity as per stock uom (#8792) --- .../doctype/pricing_rule/pricing_rule.py | 5 +- .../doctype/pricing_rule/test_pricing_rule.py | 46 +++++++++++++++++++ .../doctype/sales_order/test_sales_order.py | 4 +- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index b913b6b632..71897d4b0c 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -285,9 +285,10 @@ def get_pricing_rules(args): def filter_pricing_rules(args, pricing_rules): # filter for qty + stock_qty = args.get('qty') * args.get('conversion_factor', 1) if pricing_rules: - pricing_rules = filter(lambda x: (flt(args.get("qty"))>=flt(x.min_qty) - and (flt(args.get("qty"))<=x.max_qty if x.max_qty else True)), pricing_rules) + pricing_rules = filter(lambda x: (flt(stock_qty)>=flt(x.min_qty) + and (flt(stock_qty)<=x.max_qty if x.max_qty else True)), pricing_rules) # add variant_of property in pricing rule for p in pricing_rules: diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py index 814c5c0acf..31b1d469cc 100644 --- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py @@ -5,6 +5,9 @@ from __future__ import unicode_literals import unittest import frappe +from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order +from erpnext.stock.get_item_details import get_item_details +from frappe import MandatoryError class TestPricingRule(unittest.TestCase): def test_pricing_rule_for_discount(self): @@ -203,3 +206,46 @@ class TestPricingRule(unittest.TestCase): details = get_item_details(args) self.assertEquals(details.get("discount_percentage"), 17.5) + + def test_pricing_rule_for_stock_qty(self): + frappe.db.sql("delete from `tabPricing Rule`") + + test_record = { + "doctype": "Pricing Rule", + "title": "_Test Pricing Rule", + "apply_on": "Item Code", + "item_code": "_Test Item", + "selling": 1, + "price_or_discount": "Discount Percentage", + "price": 0, + "min_qty": 5, + "max_qty": 7, + "discount_percentage": 17.5, + "company": "_Test Company" + } + frappe.get_doc(test_record.copy()).insert() + + if not frappe.db.get_value('UOM Conversion Detail', + {'parent': '_Test Item', 'uom': 'box'}): + item = frappe.get_doc('Item', '_Test Item') + item.append('uoms', { + 'uom': 'Box', + 'conversion_factor': 5 + }) + item.save(ignore_permissions=True) + + # With pricing rule + so = make_sales_order(item_code="_Test Item", qty=1, uom="Box", do_not_submit=True) + so.items[0].price_list_rate = 100 + so.submit() + so = frappe.get_doc('Sales Order', so.name) + self.assertEquals(so.items[0].discount_percentage, 17.5) + self.assertEquals(so.items[0].rate, 82.5) + + # Without pricing rule + so = make_sales_order(item_code="_Test Item", qty=2, uom="Box", do_not_submit=True) + so.items[0].price_list_rate = 100 + so.submit() + so = frappe.get_doc('Sales Order', so.name) + self.assertEquals(so.items[0].discount_percentage, 0) + self.assertEquals(so.items[0].rate, 100) \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index c18ae0c8ea..0417e5e37c 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -529,8 +529,8 @@ def make_sales_order(**args): "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse, "qty": args.qty or 10, - "rate": args.rate or 100, - "conversion_factor": 1.0, + "uom": args.uom or None, + "rate": args.rate or 100 }) if not args.do_not_save: From aa1be1ce92d63c0c58ad48bb2dc9bfb17c71903a Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 16 May 2017 09:30:07 +0530 Subject: [PATCH 264/287] [documentaion] stripe documentation (#8780) --- .../payment_gateway_account_stripe.png | Bin 0 -> 196035 bytes .../img/setup/integrations/stripe_coa.png | Bin 0 -> 165075 bytes .../img/setup/integrations/stripe_setting.png | Bin 0 -> 167559 bytes .../integrations/stripe-integration.md | 30 ++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 erpnext/docs/assets/img/setup/integrations/payment_gateway_account_stripe.png create mode 100644 erpnext/docs/assets/img/setup/integrations/stripe_coa.png create mode 100644 erpnext/docs/assets/img/setup/integrations/stripe_setting.png create mode 100644 erpnext/docs/user/manual/en/setting-up/integrations/stripe-integration.md diff --git a/erpnext/docs/assets/img/setup/integrations/payment_gateway_account_stripe.png b/erpnext/docs/assets/img/setup/integrations/payment_gateway_account_stripe.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecf8dfa1b5bb679c5cca1f848dd4b83531757fe GIT binary patch literal 196035 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

    248TNGwaWnl3aUawZt#m3;SD!RC|f zj7b(xT1<(4E;t8JbKdlGs$yP1gBQD7t6Myt+pFWIq2bnu)(j1TP3V?8;DIx?vS{$U zeFv;Oaa5Q7f_}Nev#j{~#~1Q;lK;R1kn03D))Dm@FE}7r>WX7ON*JowUrnwtv@r-E zu!DYdkQ)Vg#n=5yqEzuGgH}ev)kNkbL|wCL``Ej=jFx$a$sZP1 zCVzCyNwg*UtR%Sl=%iyf%7JE#1Ps1XAa8UkcMO%Ke>?D~A!#LLVR7w5!YD~)3&s*V zUzD(GCAAaFXTq5ATKcz_uD^UxmJ|<_L+qES_tPC1%1cJ+O9hXw8$Vv)uLXD1<>(Zb z>*VW|5~}3S@Kvj^sui#dY!sXrW?i&o5_%*?~vXtPL=CbU}Zo= z>N7cM)4HYjl{-}edEQPlOy#%2`#*diA4kHAss=4uf-v5QE^54cF(GY{6{_n1Z6|j@ zV4kxg9T;Kw%Ra=m3p7gVTqw=Za7@o&>HE7`tC7Q0Bcob@gHnK)@^Tp{a^Zce#_S#0 zffR*DAZ8HjX;Zg*KuBQT`LD+?^P|iHgXIyvUV?eQ*Bij}E|J!=UtC{JWW)~28D@{UjESmTr(;mBxnVjqUl?t3I65vU0A8yW@;Ex<7Z3>*Y87Gr z0QC?4U9`pK->!gM<{OKZ9oX-Bd0GEjSn!-AqM|@{vmC?Dz1HG@#U}+JcR8zi_2y>R zy2jE5HFPs*Ss!>@DjeE~`N<7ae^F_cC8}709<1-=Wa3bjDl7vFRh#t{78J}4SDg`_ zu-HQeNwSpL1T;m2WI(pOVi>@oe;{qX(;r)=aWkgDt1NS2RHXi z+0Xats?=?#t2IBHu(~bI$HjY3NeofPOD2`$IB|LOKrC>Mfq;`(dTILVgSs<>mLnch zFnAMHF;zO%*W8D(hF#i9%XfY;U(WvxB|+D}5{&L@}_)Co5F*CRstea9S8^R?O| z0-nYKuey2l6n37y3t0K3_hW#A+{I3`0cIjp-2iKg(9hQ)bSYE9dAd6t?$W=jGxRr4 z%Q318~R0F=)E0@0N?3AI$m$8R)9-Y%KH6QIEL;av7^1 zD2**rpW3Rh&Ll&Ac4Qc}OjfJva7t7u8y)vixk^1){uA|n*J7n!ciMV$d)0e$`|Huo z;$avGS1Lu8ss(rDFcSxq5w;o08T6QsuNlZ*n=IRl8d6?zs`oBJKhpaCHcb9Mz0O9B z)?TT-U4O4}=!DNMVD!^9e}54)sF__gmu}oTpHS`6G7K-WH*YqioYAENm$A7|Q`0*l zPZwaQR40s(e(JLGI=U-7Cz>vf3qD)n|(@0-zYaJ8Jx#Yd;g z>x^0oEF7QB>ZdtefO(G4AWK9iRz;F;BU6{Mk1|;GrSMX1v1^k(5}$p+;cW)oswj_1$FIfn z7*lM#ua@m?bR1BMuHn8aU2cvPR6`ai*jM^!S(o@2p8))DH?3J@@>HnWdl27T4Gz`r zO1sr@mhKpk?9TIG&|R9?k-`%R1X{lXVSBncRVBmw#oQ-2d_Td@_sSKIeI2=GSW-qF zd|IijPaycgZ}r>1h_@0eQfdp65u5JtMAtJ16`LDv)tl#$$bH1{+w+4wm@B>mql?Rq zdEnZvvrxx6F2>!M+kd;!w1X(|I`oR=UMp6J{(ePPWz|5>MYRslVX)?+*VAKj!u=&Z zbN>qF5v*q@IA_A6Cw@)QBEV*s{YSDcwL8mwld#kGl_J5&&=7FQBrnfW;Yg|uW-i|O zTT>3rJ8-(yXg0{ju+t-Am@NpF2lf^d%_5Y;h`F7GpWOIDrZ9b+11h^OakuE_I&Mn- zOc>Sm*(^?X3yZXK6{IrYJI4-0<(2o%H$f5RD(`bhue-7JUpNWDw*h^D+Vyw%Mx7Ir zDgm@W(#x0+<@%~FeSgiL|zAYNmZ0n$`{FUJMgRB#%qwm0#MA7Jd0vNw6|@95x=Ds)kB?5a@eq{FbH6lb65X!RyyqH?Q1?V(Ht zolt~ZQ94$_&{{$Y>(l?*F@yC|p0mJO+2VOhEs-cI<_gxHV|ZEDhr~2UJzCkyF?z~! z@@=a2T(8I01-GR?;=M;4;qP6YU#!I45#4dBwJR&{jB?UoE)Er=uzGaL0e zd?GT3JJHsF0&`HKcwV$B6oQ`w6a;j}AQ3Cvj>0RjN`u}RGE)1RXEKPSMqRN)ZB z(pyrZggOUpozs6Ar?k3h7-Zs%qSPunKc8SbFHukLBb^d4a^ZKpR(JrkNJjo2+?4Gl z)A~egH9-?CCb`lgMy}r=5<3TX?R{+**D=Vdblt&Eh6vkqOslU1Y!;zrO$FU+(ELM9 zAX`7Z(h^e{N8hs=0r)HmRoShn>nM-fzo$`&cbcYop3LTYLqv9hJ%*I-63# zhT6@+M&>YN_7|ctb2xp-5E^oK3K_33E~R5w(pJF-9{R{+g4FZ5=jSouY5eQa%{2Rl z=9?3m<9?bzQi;Ue>>%XPH_>E20lZEoE~Btgr^#j;Q6<@ZPZ`@(dx8Cyq={*TrxK)~ z;`e4crm!Y?Nd~7Eks5b&Qzrro*lG5sqXJNzY=2^a5j&)q z(^@ctHirL(_TPQH^4fp)%6&*=nF-$OXcWH;{_#yA+bKrNYB9`0fbup38;+BCMWxY_ ztQ?eC#Pjt(&~u@x%`okwbZ6WV$A!2JEMn-FAEKVwrvw(O=z4C(M0oU~y!erA&sM@* z#bP^{|E~SV_}3hPxx1%h=EyjYqaR$kO_qCpwU}djPyDsPr{p?qZ|(=zfaas$%_%NT zn5GIYej~#YtRNc~iJ7C!r%?@KYqZy0U6HfSrNYp!_mAUdW?tqH--WSB<$GGdZjpZH zt0{dV-~Q~d-O?<&N9mqB?&o0l*p?@^)n#oE0W0rPD`hf77T(TdZ|2@>e=OXk*MTY| zR%eLG_2*>gG4kdO>C?{*=ID+B#GY>Vs5hTpcj@XQCsqd91=l(}ZQrG)=b!4n;~H1_ zyKBmehQWF?22#8k`zAZHNqhGjPuAoa#Ce5Yr1ZZYn`z(rvz>X+>b=bUq#tzR&q#W- zyhQ^vZffo7tiyqbW{_|)n36FTk+{wEm*M}1{^QpNEtw2EJ=#a9PdDbvm-(abA#&9R zm^0GB3I3Rn;WHGSTl7F?4g%l5%DsQa!GHc2eGr7``5J$r^kb_%zVz;P4)BUCzl9+! zrEff(aryApJo!s*ltlMimJ9lNJ|!x7GDQ#Ds&!I2w};;hrYk@=q>?mKeP2c@oti$g z#q*kt5_#jOXc={;`Ph-Dd8iX?bNjC0`bgr_iF1Y3#$__{<_7k4kRawwc}hCCv;W7kNT$MyOxtlcx~GN&+YG4%l+4aof9+j^ z>QH}lC3sFJ6`kx7GQYJgRd7Yw6rA`Ky5TzOjS|8c@c}bD7m_&lHZO>3yS=T7Us|c27hYN?X2u z;Q*bt;c7A6c}4E%kvUmg1eM?Ld&H4VuD7x$g|AgOLIug_n1%ZQCE!kfGx+J)p!Ybf zs_;hr#;{;5+Q`|oR24kul?+zr8%NO1*IlGQkwo4! zhvJ+I;d4fkMVS5@lMelj)AH- z4074!C#&$L8KFB>p)DHpX^#eZF#&+h2w)K}TEQxqGgk-$&%g5l7QC%n|AbfCszNCd zE!WLlvP$fp8CNCYW*EnX$^7Co;>QeNB%lx%G3dSkNUq863bSLRje4(=&#x z5~Q5YQ1{KaBGoMIXkqE|@mx>^^ZUUsGKsO%H%mQa=$bPs0^?l?e>{$rV3J{L4yb=- z%?gJJjrRC>AqbbWezaFKRvssw_UF6}y@E>zt==yiv7|!Uwd1v z$GyU~6x3i+eBrGOUtn^wZFr%F(;R=WN+(~NlbOq|UIFD6k&DleUJ_=dUJ^C3OCDyP zSCvd^>Ma4-f$uk;dTO+(WgK#zA!Tt9@CE0Zg|=xJUrR8#Rlx!uQU$1S)wg(+JqB5RTI-f6;i#%Pk$7INyAMt9P zL87PB1DUEIzQIt z{2^w8$606fH4xMorrnCOi(%wl(E8FioV)};!eS~|qcPL>AGtE=yM@#v-62Fpn z`*}xLZumc0t-RmTiSrTM>y$fwrto%UH@p51Wp5o8RoBH0OM^5h9U`eTNVf>6NOyNg zcXz4?7&KBMg5(fG$I#L}AVVV{4BgFphWl1|-uL;Q>-zq~@xr#O&i17r zR8=Wh(X2mNl@aTMM(IZ61&B3ImQUzDZ5mIQOY^eme>n~jR*e`|EW^w3-}_~=pIj-W zcJSrLGqQ)R5v)D$89#EHWYgc{;0868b3#kf!#tj^v9%^PrRUkJy;yibt~$ljcG4%^ zGi2pcR)e>PuVI{4YhI5799cWOm~(XCrm+Pts3SFn_||Q#$l`w_@c)9NQB15|0DqL@ z(8^oFrhztJ37OQ4E7u^?+|Wk0jdbaeTB$UFU}})tcg$~h3+f>WmU##%8it~75%~$k zHg6G64-D8#yk-UK&UKWaRr|wGf)DI~j{v~0s^+Is1h|$*+?;DE_axF{cQ2XS(Dic_ zsUOvb27~)TOa6z~15|Mo2MHaj;X(TeW$;#glM6A8ty<%4g-*@I`3L#RLR^Z=YBagY zv_fV*Yz)1gy+>0OS9%kdvTxOYPN8eB4DugYB)k)li5N<^B$w5DnV|OL>j>rccH7t? zdg2}JBT7y>@6SXZSfidr+^4msexvVA8`4gxl_i%~#u4S(a0rlkD$_8=02EPN#V0g{R-9}M&e7L|$k<1p}X{&ny3Y?Kh+Y=;K zb~mraSvmCfCyf&|z*@ig_2?k~Z)??HH&&0C`zTfjMtb?fp=h-NP-E&~u<)bG_&GnE z%@^;466K!dZBS`fB^tJ3Q#C}SNgL`N+p9`KtOj#;P35KxblACkr2C9*bHYQOB}7P|_n+ z;`oZY{bVJZ%-GXPg#6^I6TPe5Bt&$nYgYkZU4 zHop-kGl-RCWpKAkBIiVq35Qw8JW(k|<_o_UA(YpMdU}BPMe|ac}r{aiTPKD^!)_b8W;9TS~^v;CO z`fD5}cyO2Srv7;s3uIfE{*XhD8%Qv6eaWW0C`n#!`|zF4#7p0;W$?@Of(f=gL%p-I zI-xhIwsn#@$Z%qw$OE??DkviwboP9fE@?-BZgBmjU!$p@-RxQ3D{2(@n>>w8DvR&O zAuXopWASD`f84MO8WQCY_~~VU^5xUzo}PhZEvJJ?TqCAAu-adwFiH^oRe@rDlcdk) zscn7}IdB@%;Q7zxX$j@AfI>TncSVg@$$oN=cIbR~qr;62dvh~S7$-7)gOYy>rj*w^ey?Tw>){d z179#x$M$HSoMCAfycO+-=yv8VJ9Z1)1q<*uPEnbD7^S}?@a$oi>4fz^* z^?NW|7k)CP5F8b(qUXh__7~!C9?cNXDta|KPH9A)tq^9 z<-4XXq#cIpaIUNTdVYb!cxa?VFCxitkTxTbe-eDOA5QJHa92KW+61Dfz1w|pmr4Ed z*YK~H)4SqLJj@gT%t_|=UC_56+iv-6s&uEF=O%nqW<iPU;y>qm1Ofrh(#{4l^F9hkcVEdMN?*Dl@pSMeu-tG;~5PjF1REn=D++R zCx)ao+N} z2lCjQrk)O@njxP-!9`)b<46@W%Gk>7mz~||=eF>IA$rTiUYk9JexvcD!OE*fUQ~s^t`3boccFm#ay#PFa14MY z07zv;*{R$Uz=+E?PhUrY$!0;ki=A9~A2Ynb?`T%nc;zrNLk{;GkQG^d-Pi7m77&mB z?)gDx14zk7InW$~f_n*tL7XTi=)7k_z*BhUs)NYV*Hq9cXQhoA{eXgNEwlsAcCfqT zgy%?*^p8y;0;v00OWxnKlDBkpzEthtt=iiueaRtp57gjX<5%5!F4wTERvb0X z=3nyF-p6>iAbYT+uDd(#zJ;Reey>L@Nlq`XEwh=^2eadSPxFBF01q73qVIyWxU3(b zX7c%K;xD^Dm~@SEw6=Vit_}8aD?xn;!+zD+<58O6axx-<=FsIdCt#ty-OZ8Ms1rGU zxwQhqIm~)kq~pk@vwd6mk*a;coQ*U&o<8~Jz`xnBh5<8*Ef{_L1}d=04=O=}GG7T$ zS2@ngxo0=K)%6y7URO8UEj4XT8`8}rRYnA>eA?M%ahT72slBNGuk5u zFU-$BJ)k2scQBvpcF!D}KFZXf)SJ*dB{r^2w-=YVCA3QsWNEK^Pm)+Y(NNZ2s3q=W zRH~2;3jybMK7PBY7SRkh1?wgk+G72I_a?pZm1vps2E+WzqkQvFbz4f8Jq4DBjT$Gy zfbZWlf9PV~zaJ!e((=T~*6p1{rkClr6)jRJ+_%1h(WjX^VFni6#>NKZV(IdKbcaRR z0J#x3%>U|&;j@f8VL8oBON`T*d!qaGWTOB5Mvq^N0G0KXSVKw)%nHTU(aYKk_fBSz zG(?@DHKa!$%IA$0S5tsuj%S-qk}Yoiw$@Ou0jJQO$S>zle7%#`g^W{ZyE|b395MWAse%s1OEEHJkQVe~l7$#UQnMvq!e-#{pLSag6J zyTqq%tVJ?-?T)cAaBi(|h5!_>53l!*mZ zu2!%& z0|orO1?hG*sj>0KOoZ=^^|2^V1FHtAxJSI5r@-%=#NYb_vht2KqpS0M0^A8l?`6tX zga^AvSL52D-o)H)Xk^;(GAH_*zu^!fmN)qhBQ_o=HO$aE!4K`vA7+7v_H=Tj`Q{xWc`)nHV2R)&A3Z=^WBgKST87;4+TDXfm(iWCsQ(-h|5$F zp2A}V-iro!!q#$hzh&7ahKRWY4mazQHho|x>dq8KqZ3mpZLh6Z)dP5lMk zLV@2N*?Dr4hhF-Kb=$^DsI$ETVpEXr9JC0wJXre+%08ufS%W*3AXL&*Hu_CXZaD{i z4O$fC(=9=yIj+G!8UjdNWBQB!r;AMjysHbYMzN0;MGRyL(t7tkyFRKF^O2a0K-JJ# zVoXSNpF_d%+cHWq^J(0tn^D3Xw_BvVLBt}UDwKiv6UaAyyFGzQrp*hg6vO`41n~g{ zIK1~2oEL=wHC^_le6RU@h;X>v`*f7f8qQS3Z(+4yqe!=gahwfNe-)8cM7X{@p_)Iu zu6PD#sQ=_ARnC6jgyeEpwZf8e_6GCGI3bY9V_)N^*u`H=e+(Z8x``7jwA32^N=h8s z;E>jBd45AE>er@FK!Z_yT`3F71!(krKCIgBNrbNCd^=RWm=4%!Zbx!oKjfFb9gQFk z_AZrGWJh1iSFCvac+SoAXu7=^;oAw|PG+{Yx7E-Tdq3&FuFSX|kWYRc#)(${++6y_ z#F518oN5d>eU7ABK=k%Bjn6Hh9iJsNreXBBYkVhbb~-6v$doAH;W2Rw{3ZYCa_T4e z)229sVq1JW7t&1|%bL`2j!#k^0X2%_R8+&Y)G1_p#@3U~0>3qxjQ-kuxRq#Z5n3|0 zgwR6IPz7e_=h;-s9wXy&FFON1o2wjOy&j<+RUznhuG&)||u7oym!h0q$llV*;8p+Tetn z)W;Zk&^$H1IK*9uX58I&6gV5=c~y&1sZ(SR9?%BS#L6ARX1Z;&P@$pV;Dfy_lOe84 zlPBSA8h=(bcYt7$UsTC6vZ+xa9FCfpA={Yyt3u13(?E}pW|`(1NhOAU#ho%a3++Pjc`%@63?M_zHLOj1ufxUciANm=-cEt& zN57SGPT^YHd`I?rZ4utfnZY`LBoZ2kqGm`Jq9>DWCD21KBgEX;cG|GITvJTvYOuH& zxzmzq{b{<2kn-}3_GwST4z8=~kn`wS5)~=ll;CUJ9=y4)z0n3n-JI1(=N?n?zsO9B z*z^uL#crw5GfHyCos{d*OFceP#+t%+oC*2a5czK89_m+YQi8!+5h7Wf=0#{_UTT2> zXWI`HBh%K7zKL{?zS}<3nxthsY#6T-IWXjuM~X2+e`?$i9SlYZv;Ef&Xo;_bQYVeKAqNnwg4ci` zwL!Ns^)c!AEcw__L;uMv`Ed{YsGxE})3wxd#?LQx%aJ@n@A0zY4l%>NJ@Uxwc%H&z z5?Ju25sC%bjzWS-+lcwhdg9ogr94QiW}1*q&=@;{z5U7ecME~<>Dmw0$i#g441ZZ- zy)`(BG}}BIF#eIc_h>xVLEn0S@Yvk4egw1(rDwQj#O2JyZ={kjUwe7{N+*d>`xs*zOIc1*B@r`jCx7LJ zJc+MyupbXOt=wN&QUxRX1iM$Ykq*^?53$h>HGh6W`rNrNKx~Gz+R(TzG1E-#1ylcYt-n%y=z3j(l5xY-Cc8SluZ;St*CX5!Zn%jB3Kiy?*!724~F< zx6s`usG!HWZpKyAqklcSK@+QhSv(hacRHO@#Lk{=m25NnPdIO6035ih=h^VAgk(?W z?9iR#m6E^?+5k9}+uA`}C2m(*Y~Yo@1jlEj#xoW?HQ@Bs#Zt=^?Wy>T*mHExEYA!M zmpHa@)l$15#h&&WKj~j;r_xIlZ||JX#FD}3;BE>K8F3#J=TsX_#l554VvX#4tg1~4}xNS5hK!;m(K0d zpF&Z0b*A;&)2a7wIk}xOx08N!%R70(cOhg?vG@4cRg`AAESd5T@Ci~v1m-FGtE1V7 z?^D1R+uoke!{Did>=WRa^SCrG&jS-w^oQ?V#dj&(+SRd=Q-9LR=?{iZZ2G(zA$cI8 z)vbxVq?U0H)Pp(}fK@56`X-Chrqy*n(L154OSDIIc2bbM)-Q7HPT%=N@ma=&Ip^19 zPRU;FgM)AVauRl@0l4YWs>Pk&H8C4ojUm;^oBd#_*$wd0#L@gcg;=wd5BZA?hQ=56 zo4V!h;qb()md@|W^J_IlLR#+OeBSr}L8p)c0Di)xP`@ zy&}3_kws+PI)i50vz4~2?PJY_M40s=b`N_xPTvPYX4PFyBgM~!#gpA6diT^Z9!Y`R zyRE9k3N5U+kC;VYzaqJ;PIe}L=UoEp_6bLUgP2QqF9@wE7h*rfiFtW;6KznzhCOnk zQ)hf8Oy7CmLXqp2PI%7nI07$2L>l<675bqNGyg)nz_?8e*2Wn+f5WBTn2!GMU>Ahk z$coVaqZvL>LK*Q@*a)psOGC;|mVBOCE_3na&@f!<@u+V+MA!laStMpy;zh%lI7X!+ zzN2qa(WlIEBLhV&IIMr!Skm?YX}r{KdzvhJ^+EB>Rt1NBZ-U7{Pxq2rrQFOK8k8S? zTPxGm2*?DqKQjN@D69vJ8~~3c0T6Fzg#NuH0$k@a@8nb;C`-L>HE2B?-J|pKm(^cn z3x3ZzDr2c5gjT3wBH|L*Q4ux$JB6g$k>a8>@EI41beOJsI5Hd}u3h(1R983!9cUD_#V@798bZ`#~?K}!PwRKV)J;)IX@MA8x?wJI4T@m z5s7Ro*w^mA8s#~->q%R!-}-BO<{e!dZ>a&FX!S+e*DiT@#;u&(b5 zJ;hP1LShC`z&EyFcjDd)H=$a-VaLZZ$Z#t|qgP%2d|eryUa0%$>X)gj?3e} zreAn}eElQf$T;HkRk7pZ{)_;XSih?(ceb-NdOfk^pG@JLTZG^o*&96sPHRtqcxJ&MRriArejaHpCifR(mDzII=uL+U za>3DZxnKd#IfWD5EK6LQU;hLYao~lM<+lUcH-+M=u##vu)g4*A2vo{NfRw2eJ8nnP-V#|Haq{-gIm4hFjHUcdreI$ohC&v1ILq(#BBB-YPWj}Oupx&AKnaFelLj?lu6pk1P&|i- zthK|J-B7FwIwY@B)VY|)Y_^Gqi_I!`o8X|@oR z?k&<`f*cD>uG_73HHV-}!{vJ5R~&DivU-|EHLmRY3pcE(l9;m`1ifWj}e4C)QFSkvmQigl>DDat=o z5)6&g7=pK~tAa}u?-f1JvuaA6nPx;QO+5U5K6atMQsPlDb)nm};rVIB^e0f z6t1F#x%AzQ#!CPy_b*MM^x%QMt}+v7%PNOq;)P99Gy+*Ss6Z1?5tC|Lh|L)3ycEm z%}UB+!3_`|c%tH^=wrUlJ>1`V2b4pe0jY@m@XmJQx!;#us*cH{OO}QbaH};dALFx< zUqktZLmbWDnAANgigc0Tmr?JlHe{;zy*cP!U3d-?tX|Z&4-L8$#!pF4sSGwryX~nd-msaF!!26sqkI<@7Xc%yu}_4J8Pxg5t$H%v$L^XzudBH2RZ$2VEC?_^uQX z^%cqBhXjC&Cs%Lq&KmMYt!$(%xt+!CZsA`=f|6U%dGv9EkRIeJRiCd_YHN&}Xwu5Q zl;$qNR&@zp1#5`?teOeP`GUmR5cv|T(u4p2_0R&ZBhbjyR6hK>(7BeV7+hX~o`#ki zn-^Wiw$fm#0hKtBMykh>Xne(@Wz>d+1I3wUSLaXY&e`A|I$!72L zOMHZM6npW+HN>^VG;wZJfzwJF1%AFrMz()XT+5)VoQL6J}0@ZC;ns(^Sx$d=3_vRtZmCas+-SVoL{`~ z+bZj%MOg@ll@qR#lblEMtFz_3^k{kTGv4*zQjJy`yQ^euyin#?11P?suVv?P6-nOg z=Ck^D##jLbtRT&Nd|Yg~s&~fv&qZEu?ZvTAE+toqx0w4@?P6{`bE^#)Y`ydaB4j7{#Us)u$!VNYcL^c@(^<)ZB> z*-ILe9`GHu8j>H@dlL7}^KC{)iF6Bmsoq56{*O|k{x$gX@PAkxe(eJvvO^%X!(oTW z`YW!LTMsRA@SzU0u?Z>Jx1Hzun!V1#EVCCCj72LQC`>jR41o50Hj+)FVlVU+{P3I3V6kJV>@A|bw7Ige#bLqNEO0wuLZz+&kAuE{ryBD+*~L)YJUks z70H6Ko=uuGkNX9pNq?rAesd5q;#g85BhV=-vD~30k8hjv6%kJ_1)NI2m*;WpuT}+7 zXN3rhpY=7r!z1Wr-F^0b+XCLbcR+)M;T4T1{3+Lc;<1!u-~QAJEYEZG~nHK z$I@slUI`HPv|pNRh17O$QLoA zMAxudN(n2}ajYB}&rL9XcbTRaE24Ha%rFqcqKAHi+eOP{us`X%*FcQaK-VNsNmOsP z;^Y_D@{PIT>oL@Ynzq}$8oke|%0GxO>MBQQayoTrSo#dj7vJ7f&ROJ-)7hp*VDP%} z&1Jhy{$<=3{=y_j-DKn4RL~y7^KAY$J^>R%?dzlEgw4fC@|nr$Rg{czs7DeP2aSSx z(wYr+Vc*7j$WTf9XRQ9Y))Qe@InN8?vRK6r7YP=#`xraNXOqS>7qgI=AEAUC&7P<4 z(~^YuV->TGD66%%`8Pk<@|v0$+lL9me|Oj+OxNYI4V}4vfS#8!5N$BHi)0K$&lxW( z{TM4VIN7qcnaD1NpNM{RYU-gHU;Fst$G3@c7xsh=@o%`r^by}bjlW*@P9Iq_86hQ@*8$)SC5-w(HcfUeGqXl3Mk-9QlGT zqT0F2bWiJH_cM{8*vtCwMb8ErrMJ6Z&1TuZvYjh>$#SE(iKuLBG*bpBEW0}7rw!B; z<^VWF4!|jA>?86<_4KXwfpcG91swBx64yTC{JDl(IQ^)z_6I*z^+g`*nR8&2V6Nn3 zqn4+|X<*O01*MnlZuo_tqk%aI%!Kyeqk_sz*QlgtKXdz^?gL8(fF5?e<5#RlqF?BX z?(uRMbcKJbzQv?Qhm5S3*(c_iZ2==$2G!^6mv1aXFjrlyL=xEe|>h9WU@S)4kZ`%y|?$!@vWfj@3Q~`SzFb$jEt#chc2p& zf8b4bBngPu8FTV0tgpIAUgC>zbGaBNznF@jSGB(DFo<1f54~Hg8G%Zx-6SHeb$5Hc zQ?B&oi!V0VT7N>+t$#WIVt*r)0a_lo{`&_MxNd;6o%kQ!&a(jgT)|w#l9j3NaAy+t zNhpyo3BH#-$Be%}P{86aDYH!8@|o>W0(te*?woMD>oL!}ZDz3TJ-h;;x!;e>^E6dk zyDJK7_OF3mZQom1E{Is8Dc4+1h^gvlFXE;3{Jd^N95rxdb|<2L_S-jktbuVqF?{I& zy~icLKJjXw&Cqi1`=^<-%}m8Vr9DP|53J>v9w3wSQAaLoDnTIDxbaQkyU<$)E8X zRh9s$p+R_6IcBxTgS)Gw9CRXb-s6Y5gp>CO8GI>EN%OXs3LAB+J9M)g>-4`$YrY^L;Y z{Bg3G3D{g9OJjo`T9a!UB>RAr(13R<>V1)^vHcfu_+Pw_fYrMAjcTaRu?k;5`GfIT zlo3J#(%m1e?I8#eAD02X(Wvq4bll-NEF|EgmW_v^9*6?vemA!cc-ig-7Pym_2iU-y zZtp#BpjmgaxjXs0T9WtU`kCYF%yC7C5|*+&5PQalDLXCyCa<@T!+;lMRQD~_KShTw zp)St~gy2RF0K$xC+%lB-`#4Dj06`dh+`@y&{^iV^?KK%^ zle`0PL?J?%9r$-acyj!2U=DCg`Cq8f@$vWC5mo_A*j)3pE42ObHBW01JPkzly7;rk zAY?v7XH=n4#E$YW9YG~n2zhP*vmzylfKEw*fuepfiKQl@!vDKw9DEzNsF;9K>GL1Q z09+XlTnT6bBR&Z>g4j7YK!X1T*4)7jmXDePO2Bur39`RIN8>*ZzeH@W-VpJUF#v(q z>L%%6{Uz%b+Czpp+u(z)D}~MtSQX)Pme3l|E2HC0zoAHy!TAKr0ZL*gtrmM*--ep7 zO5QxQu}hX+!gNQy@QBthX}x9LJMOEMmez>k77i_ z&^1Qz(4k|feKt45^N(MWaQZd*Sfs?~vT3oW_AF-B1XmD#Sq7oKZ|&<271|>VnZ>u)<6j<} zoAJr^Huxj#%mhpplY<{o<0cQ;4!dT?y6t%$$^nWmf5~XVi&&AmCa|KE?n)T(N_irf z`Hl|yUnP*#z&tkHvH_c&hDTK=r&`T?!NH&TV&d=WxF_tsmWRJ6{P$X*F#crja08}% z8Q`~J8SG8wl=C4%Dj3soy6pK{!D=`~JUyVot4ipw>pG5qR&ZK?drbJ{z~AvR65?*1-hPM%eI$s@vNvUn~5eIMz_qB8wfqe8@N&Fr`GMeRle>6Am!c?^@q8 zke0)L!y<$S{QH`J|FkI$La+s{dp-zSMG)3a4;Z6@_vCl8nrG*#bX`1o09my$qYhXA^|of0D8Qs*G`Q1-%&-xjW)R?dJ6xIz~2wpW=CwE zL5DUTeA=-ANTVe|jJrj4d0$ig`>NmE_`S|xU3y@s8t{=&(ff8R0Aa!1Scr`!HJW>N z|AiYj9+NM9y*_vMDFf)W{LnEGH==N){gdtgf6|(H=O03IrpT@u*N@#rS_Dfb;k5vZYH+V71t7i%#ojSgF(m(Q z^!=6y#22ws2gou9c-vU7d&i#<0&F#i6CsF2`Hp(c|HV#8 z`@8?>wO$5UWhw#=2qF0Lz>3#f@PF|o2pLc;V0($VvH#Ao_`1SCs1f(zXIC5_xv)5| z9?q|Rp-q9FG^CCx>z!lRw`E5gRDSsfqOSd@64vZ?Rg~%=^b24i-o|co#Mqbh3d*MH z(dAaf1Lmi5d7T>uOG_Fn=<20WX|~A2PhTFwv?qN5%;iJHkqugP1xd5d z8d>Bg_s6_58v~|eKE6@W{<)?R7aw78B^VypbCMtp*EI~G;FBJR^!aRCARBYPS{8|x z7-6!VN&hqkZ`j&@{28qK0I?4u6!<7%W${GtBfV|PI}upYv@TeF>`E%!c!8zlMpl9$ zHi@|fCaiD$#Yv}1uO)_FFWr(XvS}d#CxnIXA-n3#}IgmJ6v>9&_HqUJd}Vz zbliy8E#uUM*dwi~LL^UG;Oz!=j(BVRW*(_E@d)kfG`8l3Q~kt`g_LXHwYSfd+#fZu z_Uu?sAP?ZLMJMF^99-kCDS(w4z~ckFFh0auiFm*Z`I<^F482$$Tj2|+K+di$Awb9Q zf4acTLu`b=^^FbOPVSL7h!^;nA`_fVNxF@%dZoJiVQA8Lpk_)bq|$xXAlNN2lzA>2 z)9^O)I}I77EtV9ki=xA%xZipFJ}4o*UkQi$mEs{pn3z&)y;VrBnnMni4@*kB{FeSe zFLeJnB9Qkj&5!Y!kHQw?Om-5Bn3Ez0&mhDbloPPRLcuk(7TVR=Fcx{^B4AczAP2)+ z#hII;YAa$0N-#COBNILxZqP7l9~SoB8IzN)f=#&}=%Hs_K%Jqa!)=PGXt5*_XxC1k%^HZa|OtR%nX)Tvqg|C>WaSXxB` z3f68ovimN$Tw`L9*$ji!#<*^MxfayTEzvJoRA)x*BTCIqQ+#!_ep1Of72+0h(#*VZ z@3e3Bx<%uc&*_sNQNi(!u3_B%ghmI-#lKc6i1P}>uvI)x{x(-mA{tW=O)Z&PifrIWT->u@*+ZEK&|ejE&;c}pMXX!|Hj^-afL>WL8F42kvPS-- za%2GbK7!Dz9%$8p-gGFTl31pVr+CcfDbd-$MC~^Lf+*DJ@FIprRY>Z!Zdj@r-pC+s zqy+!|3DLXW&&USqhtz(#sAfTOZ1~DfkdX0uU*9{70h5}&xzHnh#cy5r<6E`vfYqY2 z{a?WxNLG_s{(|mBWC!Nj+sw28q3>B;VuS@XF`(oVEcRknxY>2$e3%V---a#WAC0z0 z#Mx%D_xlrMB39E)slUQ#?&}?D2k^g)dKPNBF7~yDNV~2!54)le1|N2ht108fGwmX^ zVxMo+#v|h8*fJ+U@$M3}0<=0}Sm z)P}tH>z4zMq$I)93 z?`ftN`rxK!dD`JW0pA|NmA1z>lIeFw?aYS=ANjHwx+0@JZ)OYwy`w8B=denNt)tIF zqrlK9mYT-XgT-mNE5q}~74YHc>|7>ZjsknWBG19&OO+UpGB>@8X#%EH-qi8g8yAf) z!VH`4WC`ro6qz#$8nHCjl#SxU-(o50F3(kN0PWOz0|abz^jtdlpFy%-3P2CdxybPB zQ~~2F3k$;~V}|eB6Z17Zg-5vwCJpc^cm$Txlb7i^Q+JZ}PHCYtJ^5nYqQmp{diNeK z7*=4pr;yg(U-{K%l6H`WBb08s8BaBuMcJXd5~azP-KOFDigNV!>xQ6cU!KCwv-##W zsbA#zn?E*~KoPW$Q!#2#q3t|;hYhiSD)zCDJCqcJL3A%Hkd!c>a!nIq7v$Z3(>Vt- znz+;)9K;bFwfcIm^QN8!>vABlAG?*=-v12A;&ccHEfVbROp(AY5(3{99J8efe>ULu zk#Du3PIg&NGvcBchB*-XT3SB0lYL{5-%ji$wZr7gj9vbx%klwIyhc3AGpSUpWEx2CzNo9tuknWLHYSQJ?^*g3BRuYZCa{a~DYTdBM?bwPU|A{0O zkAJWvZ1W=!Xno)N@f(wm|1aX*mc7t9tPz$^70=AIh!$xjVS@mDQwS83!r$0HlwN95k~eqZ$_ z8ZP)R;XLm&x;pA7vhWPo4YV$8`~GP^{6~QP3nk|a5YSAVNSoB`suow!29IxALNF$M zd^47NfIRJeNFeodscsEDuMNzUgMm2jukwO&oS=wRU%&cY)VTiHcQo^Ay<#owIiwaj zbMO(OI+kX;>BnEF20&EfU)Y&&-*98}9uDeE!*%$2t7|4So2x&WB)94bfDY%VprrVY z?X`>0+Ap3SAz;tSr8mz{b##q!CrUIV?OM~|30~3>I#;7Sy}~OX=-mZbPErK+PzI*9 zW{tcljl9YTrQAVg)&?hUaQ@7T{kK&H9bKa{S>rTcL}O8QS3S8T-(Sm% z`jfHMD*A6vqbGrAO`lkf-}7n0D0QU`PttLfe3~!s{z_iNvE~6N!Ul8i!;0l4A?wv{ zbj^6Ca2PnU8rT6{d=Czz*7j~29?|!gstpF`cUGQiuef`<3&p7QQ5)#ytqXS5YWf(b zRZ5WSsj(Y$9xUIlx~l_SwCmi9N1kCq2=9H2oB*j=*?!^S{;s+kb^VW?mxky{S}nWz zFCgY0I6s}B-GgkrqSDah!~R=g{J(QhWiv!J;CCOSd9-Q&BZra(7ypUL`z4+2l9kxE zW|5#-VYX_22g}v@dSxHMRQx^1h*J79;l60LhDw2_B^$QSg`kkhCghdx+q1P|g*l^Y zMh-2-dr-qETs@Qhy;5ttmz4)r+<1;NY*{r+NgeOSxPIeK^v2DySY&7OSz^n~+ z_x9C>Q)isfe-H=^b#v8n{#I^6#w6;PY^4W7_S|}oUpT)X9+oHPVO~Ti*D1xB(ZUsv}E1PlDMA z$iH1|C3a34ev0B{4vdRsOGE0r2q7RK3ySarOG>9rr`xpljb3OA2a@xD)om2K%WH|Z zjQe_5eaGTqr<)xgO?sJB3~qBhxPZV_D_L>zpTg%q9%JmD6ZZyYK)>ars27x*kUcTiae6`zoTboC&Ac`Z*w<% zLb0egs4Rl>!sgxQn}u;qi8VZxA$B zGr@B#)O#sIL2-R%M3%|jiXU!vHK^dOoCGRr5uB}a69RK6W-Q0oQFGDrZWo1Qg+(i~ zGut#iSpI4B^`_`}2u0GPBj7lLhqF}W>_W*;FX+@}(6Tk$d>@(P+oj_CZO}`O-M(XG zeD*c){!+@~75w1g+c&SAE9PE~JRm z8n)9N_8k)Z=mX8jxY%QBjDMxohDEvRd>hZFXA-l(B42l}p~{(=i!6>kklDhNqa5>{ zE}4ZuHDK?)qV72qx4Ss-dlbQf)pB~(Vlqj*0<0Y?+>Gdslp(eVAjyrRzFd;dw5LUz z{{n>}X_GOKSLElEyk6zjN5~{EwWv#}bDL|Dt0KjuB>`R`)pC{#n6wzr2JE{(6F!$F zLz^}0pU} zgz~P!g7~u-)ueCc30ugY%-bs?=mBn^o;zxyMw9C}kfBbb;l2yx#UL%2Z2IQdc*rki z`rfN)344DgvYGW}5j?0A5j+fOwT;d_D52CfCXID##y?IxGDIrwQYz{C%*%=rMdoG~ zBDr;V9F?YU~eI@t8m9;XxQr|UK+}Z1M!;_Z<(-`h5$WRoz=>bSkkfTEqx@ z3Lc+4te4donJ!MC(pE}j;H0}`d56Sdd5RV#5wU`nq(^7D?B z=~Zzkk4p-B_2I`D^w3^vT+tEqgqtl2Bw$|);QQ;vL6t~ahu}F`CZ6IcNvYD^aes+N z4ula2(G+pob~61BzCor6aj^PbRo)pL^2ezIah|m?I4Zg69&-~x0_-l!o&i|q9skJD zWY0>t3M35y{5L1nmSC*J+OQTISfIeCNK%1&phoXi(PGQHDY?7Y)>I*yp7D-tZ$5v2MKxJ+ zW|D(8fH^YPkDo|cT&-Yl?W4bU$#e`PgDN1j3h~}xN_g1vu8MVcxnC-qWH+~xvo&k$ zsm+J7-l%*UgGf{27sD~c<>{Sa7ti}lwCg>@eZrnoyU6&A1n3pa-KZx^TA-GhtJgVBR(A6h>fu4mqb|#|WEM8V@ znU!gHZxaVsO3Zd%hDm5EWwAb_u>7e=M!5co^y9&_qfE7=-7^pFVk?V<@%s{C{El=+ zK?9vN6|_4&eWG_x(C+7}$vx7%64(0_T~WdN{S-`gaDG0gB|%0=NLU*f>r~vtB7h?C z#cH8e|FerjcESe1kUmVR<%f(AvrKV)KC9eQW4=P5;vNrl#O!Qsc!n9VKm+)@} z?PQ*^W4~;03LVpD!iCB&u|)z^#vBcCn=6vb-;+@;*GnHYI4BqRn)5?(Xkx;lr(Xm2 zA1u%_5@>SjFoWE>*$M@%PC~QHv@pL8q(>hcR`Nd^uu0DFjgg13TRmaw@5tXtV|R4v zH|vSqGC925i&-eNRiGyZnfJ3)s2zA|4s>mZR#cr-d?F?zmYAM0(>I7smtOlYPu4iZ zqhBMxLG2+{MQ#aZUY^(g8Uw5La9@@7Y(&|fF8$?VIYgaG(KK*(dHQc0SFp?oD z{$-oy_eZ9?4T}Gi6>8sdC8m~9(q1jTp}Hql9{GI04qj53+c*_uu(G80?y~t+Z2{(k zLz*d0>-s35C*ndy4P}D0M$Poo|42V3OybHUQMMqX6hF`e|QB;_uU_&;gIU zP|f73(x;C7XJuhy-DnzW#`eMuNcc+n2KVQ`CqE-2Eui2T>KpQrDoT}h-uvaUpPXPf zQ-tRmkNb7s-pg`dRo~sS%q}+29_edml~zng{{xhrL+*=E`b9=ifWnFNoKn(sAW!8l zTFW046Qo@*rmXmbB-N5mH{_C|jF?atzY5gFXHaAPt@^jr_%`jH)@ zf}&Zf_Uu<&%BSyvL?sjAL7Z@;-Wz z?s1jcO+R1GypJ}3d(6enTn*$Y+RZScbMC7@hW}GuS&qVl1QDVTE=LTn~AXL795RW5QvHz+wp7hTYdK;Q54zY>T0VIQ;u@ zGSR~$5KUb4UFX))M+3W+v!E)jjU%x^E)ap$<%v+oz@#y5nKVey`>xNUN-8U!w9Z{r zaw2^pB_B5Ck^rQ>7sI%+5rkS1u>J`_axD3{n(Um$31_dXF}b0Kk1)R$-m&xc6ket( z->+4P+{-ak5(4(e7=FZ23Aq0fIMhMi$BR`uWI)QwHP#^z6;;cOUyp9%SmUhE$02;%mY5++Dc^qn>_#pd`cIp|f7@h{5op6VKDZX?Bp}k5 z#EYLwT$M79;e158tYWy`#G0(RT0q%!Ep6&RgDU+jtZ06D{H=7?@tVjIzDBc`-3w&h z_z&L_D7I~$CuY^leOI1YG0(Pnx}F-D@Ofb0ewp4ZqOZCBy-G^?s95<~v{8sB5w&zE zto4XL)X8{>t51KNJhF1WAdc;1Q6GDs@+6GkkF#@dCZ!{e7o^!QR&L4zK(dfMuENPO z)b}xwGHQ=*j9A_FlFU4oE7U*4EsOg+wI9RLK%z0B`x;VfLArV|HNu||o3H6^Y*0l= z)Y(=ORwF0i2)XRxsi*PJwa-dq+x zJ74Q!O-xSW_s&M!i5$-_3kRbZ2W)8Mlc1#Rli+%zk-DveK;h_6@w4wcEr3HXy6zZo zSpjo5YJ0-kr*DT_Co88qHaQ)$M;6_ORPP?w_UhP+Odaa72ZJ9zN{~>E_BCT7^7WLJ z))2Apd(dO+jbiHy@msl<-0Gbq^hD8so2FHZRqP$i>|ztm+G>M(Ax}bUxhbHZ=gR$` zL*gi26!=8Rdt-d5FEfg0&8o<1px$`LhYqE{yD?3}rzp9sX~^cPO3H$3OB4KHU_$ob zfs(u!p|-8BxUG#A8Z?^T*VxT2%u*musKUNAr4Fk%-f%L?Lfd&sctbk6r#3qhjKj{+ z>gMTkidJ*ao|YugBAHlZfegna?A#zyDK_}nOcalIdScNDA(;eS7MSoCv(J;pw{^!#I?wdCG+$k3HR~lsT_tOBG(k zu9Tw}KSdRanqO{01aWQomQ+0fuC?O9t#XjJL;25Rq`j^^@R1f-nk7Oi`fhq^a}||l z-`^j25r6H}m;pf@?Tpzzvm?pI!sLnFJQxDpasqaV9Yr`SxWQdwTks5r(vq+1JPt3c zSh1?It3p<Q|SU)&@fnW9AW9NVloWDoUjx- za*k1QQ-abn+o1wtIj)|_pM^vRsG2F_!Z*7hNGt~q8?>X-LbiZ@i&D!nJcAByH9v3` zETv9PdO@a3;3Qp0l`M^p7$zJ|I zLKBNZc3a3H#?qZjIOd&8CXtx}-vrdqGIM&ul5={rKt~}7j)e4d1@&no0{nZG)^oV} z+7Ah{itjo1e!VQ~S;B!pQU>h6?wKI?D9-xHHe6!zgB6Fp=Q#GaEI4cVP^~*b$RbTy z<#?QPCSwU-SXx`QNeBF)pE=TS5#BB5hvu)8BR4`jP8`CkWy`%~05~ zhM%oymkPTCVbt)&8G{wM^Q$95SDsziTMJ{K-0}CaK3in*th}iQBxAq$3$<&y@vncX17tqjbR3zc%jx@xNnb(@sjyLI1;4#7jOfsxtt(F^+^8Ln@Z`Q~KXzKi5# zo@Tt^v_%`2B^x+poiSH-V_Mm-Ym2-pkM30G!TXjk9%i7DSQ;JIvZ-745CG?TjXrfx z8>IuI(19%t&t(f;6+%m0H!wj}|NO$dVM|^5LG_EPkqs5?P=Tw;!n~VP&@U@e zb}#D<=)@-9k3niU88+X4sfqJcDnA)q`Tb?My2P6vfibMcVGP^XdL9xzoYKaX8l{#a zi^}$`Lxk3xUG6~KsE&kvox!|H%t!Diah0^)uisM>gNPTFxL?E3*D(?j~#Oo-xh0)_Xq+4_=$D zqOx~eslcKfCLfrZcLpi=_HFm72g`>j$OWXLL4{yevoV3>i@b$2=|;`rj3unQyc zPj71jG1OKC4qWhBp5t}JH`6D@=c<+# z1A3PDIwy7jgl@b&+>7sU45hg6Vo*Dlv|r$Y1W;^zyickV-}V58dQ}nlmhT3!W!7>h zE#gh!v|hHMIP%OaM#0!VOhwTCZ@ZD(`Q zI|Xg~7PEX|5jYF$wv~G33S1!KaU+(w7;;@bJ>SLeme6Pt?Yw_~2(-32{oKOxhJ!e# zzN}Y-%V!R{aJ{-`Vdf6~l zAdL+*{&n!l2VTb0a%hZ6*mZH=n+V@?PD+Z0A(Q+Wts=JaLB0w8HvXH-%YE8OwqGbC zx!m#`IxL1MU2~)A)QP_iUbVCAe zz-!3p7^`yyO{GllEVqT3s~eQxnDVHee)3^MmUq`h^JHXdc@&w}?2oL@1Cc2`8MvP$ zJ#nzFIGrN0{PR*(Um?5pqGGc+t{~QeG^LSSSTE-=Wpu~70qj9xF>GRo6n{^q%DHHQv)h`CN zj2T@AEv^OH?}a?(-)IX;zI^bRN7F$7y1JWW%{9ketz*t?168_58IADJHg_OR*r-<@R=T_}0rycS(A}jjobfau-pXj!P z=v7TUw)}j>`)m$Do8nkw*89CAQZhZg9GE^T7Ob-`w}Rd5-GGM-$1$6c%QpS+U!1$OK=pF+>DdkB=92c*MVdPkqfT zwsotDVYddeTUb)8v!`he%$8{(9Bd)Q&r;e9nP>u9_QOn0Yj8x(GDF0HDIX_V_*<)u zf8ePtzo&s&eL3&W*tK8F8hBUf69we5&(czLFE|JHueocFa4e?qao}uo*MlU0cf5nt z!ToQ%{&tJ@AMcYseVU7C`#u*@*`(Wmi-b7${2Og1Yv>5p@r%rlAk!$MD8B@J`?e0N zMEfp*?0wU}mpYsfAx4Ey)4SPDZ+?(YF0j-&>px)k-~mw)EAnArcCY>r{ip zbhUC>20=JKr9983kTWy0Rr|-we*OILH{s8-X<&5%#c_;FX8_<$6aY+8KED`*{o`l< zoU=i|sLLY7kSG5^>iK<;oFy0Y&>u~QD<|fEzYs$g6;_EY4%PyERyYTI`85~_9a)zG zIHmH4tp8fll;dcjT`7`NIOnA)K(^VhPKo?}j)%0-X$^iXn8O`W?!F-4eMMp*KDgIy zZ~cB1d(Z$T@lk?lT-i4Fbd#23`hej7af~3Amc(o#>u>v z=>9D-_@5$=XiZ9g7aE%p!O=fIPvtP{`1;{enb!W!v+MfFecq?AWUlEhNW6dWAoR_@ z$np29#Soy>^zh_~tPS0;MA#`OULKsBOYmg$O>;7N*(jCoh_VP1c|x0>pp-tEu~%I2 zpd=4?Gky^$rYVg+w#Nea?={Lm#H4%cD&%u7jAgipKG<4c*`=7xe>XB4cnR*v{vm;2 z3XhhJB16A{72RQN@vy#;7haQHy}S97rPgLU*B;{{{CAo>x0$8>sb(jr z$>0Gh(i|mZ`DyMw@`GwjZ~u%@b*ZzvbDzUL_Q=r0kXCy4`?vv&uHDb;g+)Iw_noMq z4XP<^+Y}yEhS9Y?GjX1pYFaK5)Fn;Hq+$%JpdOYG!+$RzVhpR`lBSdpub(|06^3&Z zHgPXlg|%uFC6JSgwr=kSk{Cr}-d07<_pqIwW`g?c-psSYeZUT@qr@L{?T)$kE#~)( zIfcbe0CI*iZ!~qr|K>vShq*fOeIfUGF4wHZi7vDK+ED@2NSXGs1tJ3h6;iyJE}p90 zLhqbR=%=0JU(rkwVP2{{7mJQAT8~bGnLEyB)kIuM%bSgukBBEnc63u&BFa>n3-4U- zByjk~p{Tcbd-P>Sj=T7>1Xp5SG2YO9&A1{`q++)mmA>Zng`cmC$?Gfht`|JdIy#Px!)zts%?g3=!)cTD{r!f8 zIAN72fmIn`xHvI%ljB0zzWPs~{b{nb8^3y)>+2l{p2}dWe(!gYAv=OvSp|E!Dm9Hb z%V^L2;ynGJ9f!=)$s*qKka!;2n^(J-L8P-4g(&WwkXu+N`Sxlvy~Cb&M1sJSYdH0< z`AqLL>L@gwzP5EeHI5A%;kBje9|lB#J#VyJH{(X=08Zss+0!)^uo^d$g6Ty9w0bzk zVfCTb@XaE+J-0M<@`uJ!^`jq<9sQA=H7V~}3))j&x=w`?L{Sh2$4W_XY()#Hoo&9f z&Fd23=y@%FP zQs$hIjNEnH^}=52c6)rW6v10fkR_hCCs7v!nBKtH%4C(3-cQ;dW)Sz@yZ`m5OrPK1 z-2RmQoTF&zL%#@WX;d}ntr5^UbDB6dW36klKOF*98BJnrHOjF64)0RE7#N?Kx{UAL zoETUyPhY4EhI0Ia1qC%+C)9kp8X$QjOoUB^qIXcGSD~3 zi={9B#*pFdL##*?SC5sewFduvbzFE{r|O50)<+FM(@H7!BfBJArS+Mi^3gMYGqq0D zIr@wSjW!rDr0t}|R4dCD?$Hpvr%T#NdP%-%QWbs~lGjx!YXmE$ahd(5un>l15U>lBY$;&;T#X zo^Eqc-X?06cic5>Z|&jK7K?(X4!J_}-h6N#&uP1O3>9yd^v?)1@61%jBgr-yqvFqX z2=|w+1wYR?{21;pkJ8B(^XXWYrBCbmT5yx`N;yI7q&&eAv_zqmx2;FwJJr0h$f{~P z(c@rtIj?!{K;V(}XB~QV^2?4uXR3smC z(v86SD7NDbZYmz!C>Q@F#IR2k+cM2&ydi$ax&);2iFkOLM0!O+(}BN-kqAEm= zDfu9U0m_-@==l=ilqkZxP~A9bP;;A>x`vkwvPB8)sO6vEvz(?Ld*3j&eIqXj#Q`S; z;}DLhXFN%czn}x7E9%o&3neyF87H{IBBqP1h$GTsv&1s*45#3BmXr`Dwke@V*Pm>d zM-3JpG$d1r+W8o46d0r$}3v}ipQm_`&aGnFlIH7u`;~f!@_}o8}l1E z{mZnU!b-m?rW?yF{LSN6OqR|jri+q4NRiX6Hr>1|tY9dqR65SPJ~W_g`?Sq|FiybZ zXE)x?cr^)HUIo}Qc&XRyvw-`VuHUmnWq1_%sn{#KCq;O5{*^mNMLsF~y%b+6PH=3` zaNl`qGhUwS&ea0RTm)IPST+=?hhF_UXW~!0$D%ozIaODeY%CrC;Uy^$XHl!={KN0E zQ2<|-QyTvQ6TgfDfHTO&6$c(i>#Fp0^`-OD zP5{5{y|Bu>PDlZn)blz4o1GUAk24RdO8_#1DcoD1By>G~G|ZqgBZI{F4+dP9%X`wG zyt@ipQ0GhE$f2iBT`iP(a8Fs2k>05Z;gd1Q`KX#}UfHuXJ8Cx=e}9AjEca5BHjHS@ zqQ^Tw*xcB}DRn{R3BQ)qCD|_TwU>$6^J+Yg&ZeHhwnp_nDwTz=e>XRpn=@olv5%v? zwm+muRO93`S;aqHC3Z{8Qu57Xe@dn}ulDvRk*wg7{pPE}wby&J$FY{=2VB9$T{yK{H(D^en}FK%aOj7U)&8` zjb^EPfKWOGIV6e)QkgTPZJRp11FlU8ODbs1tTwPS>YB z_=+<{BJjf2OM{=eWjRYu&^(4MdJ3anqZh<}hcTb}Y!+HBOftyhj?f*U>8m!X1X+^_ zc?7Vc3qa1&YBiH`B07|o1_1S5y!7UmJ3s#l5VxSyrb+#MBw0Yr@Pll|Dc$vRrRuXOSPDLcGUz=2K)v3 z^2wrzM@rMX>kx~gYu$w8-W(1wv`-grCrJBvjeT?lVEt$MwY&>v$78?X@e)3?VBF);Q5T@mWE8 z^UBp0A=7Ll=ecbKi)zQXlPi{aOEbq@Lf#7rvfOoU@lO<2zU!IuQ{Lg8GqTpYNOA$A znMi`!DG&NUq*bBw(Q9Xllc*M>pB;TiGT2vqOOs8rT5R8aY=mcQ&9l$FRgk8lIe*)B z2#C7%eqiX_tdf0aq|E%;KN_0L5{%yA2$D=F#>LOl&$u(36Jck%#Ux5Sw|)&!R+o7^i5T1&-c`` zZhtlIM{I5h7#bQrd>R|(C3lcU+Ou{PGAWh4?Q$w>pw40gQo*EDJsi+H3gMriKf~Kw zz*nz($or1timnd;PYeXIOM~kw(5zbJis;2BQL0lW%(am9We!!03)11oa=)wL=6hz6 z$9Psjf&&4!bVgTR**1qE-1BXb!-(DXQjDV&jZJLFLVscV@F&1eyuv>Zkz$1$%OsF8 zRRT*p?wcN07!q87Z`$nydXw<8I+eSo)`c~~fuQ(eyOqOqVQ%`5f<+_xP8g7yRsg?C zA1)oCJYnX)-2lwIg|KAx-{^_C0#vT-UB-bg@s*mf6r0aPE?YoNCZhOVtvhJKwB8SY zu>rlYJ)j-(5pmNeb8u;QK#9IAGcy00AA0^RpzJP$!2fKl_Em}d(_9-W)l1XWD@kG$ zB9j1Rc`|ZeI ziN-f(Q1ClRA(fM|EC3GA9ZqAJFKCIK{u>`KC^~<^B)V?Lo7f#)9OQhpP0Mvl#c3v@ zr^*4b+gM6S`>ww@wPSfoh{4v%d2U6-qj=e?KJzJUJAZli3{Cb=_1)lDe0p-HD=bP{ z71L>M@*Cwg!G?^#z!JL;aH+DF2&7mqA@H@X*7G`qD}}$ODk@ov zcxtJ!u-I0;cI8qhypamiHNOHJA#K)%6hoCi92UC_TfPxy!ScE6? z>{GA=v1q_CTDqESuv$9a($N;s=p3EH&vIhzU7?%`VrG_*ow9TG@@coqax(Hql1MWPWZ4aMnoxAnl*g z`-ls#DX{X|=9i<=^eS5i+6YEg?3YCMF>Vwu8jLMu7enWI`FeeIoMwcC6oQN zv{el2Q1qGp6ZG48;T>?L+^RGfe>c)z9paQ0))r>Z%m)qz zjkX_G3!e*v7%UP1%8+sq2n6atN}<^kfRffRi|`4r0f!#mEZDzP&8bpC(h55O?|*q^ zW5CtuhkdrKrVbI^g3v3&<433gtzJqa{|^O_9;`$3MX2q)!tkLotaXa5bUp4v$DI5< zYgyb~NFjo(kY74WCJWFwmiP)FOOdJ|WDCFw@XF^{C!iE#xb^lctT^|JOrdrk>Sf2K znp*`7z3`|h!*0d1!E3%`ZZz6xu6N~3p{^vPSs3neuJvy!pTbfFBLKad|Mh-87#cT9 zIVMRWY*>G18cP_B5F%P+jK1`fCD%dH&Q-dO#pLuxRW_Sj$(~2<#}xK6+N&bB5NL6e>pRPgovZ^6E|J~TPmjyU z()b{&D}b?ze-_pW95}^naOO1AC3ShZ@`B2hNBRes z4V#5u1s;o_n3KE1$tO$B-6pl(N@QVHd9p(+%y;O71$^22TtaL32h4%87s?l3JMTw)fzTFsu z`JyK85xdwcrTo+A>jwS&&Vkiog?AlmCIts;P_b5B3oOg$=*fjbPlR6thq0D1VDtaz za-?SgjdR|3-$=!6=dgz{GdhynL>A{-_{fvq;u}ESM{p-TzSl$Ct?jD36BUWI3Tth}yePJvScO`yk4(uak8D4WK*U@U!M*l}?O_T@ZCDc};( ze^5$Xmkrh1N}giU?Q|RI2+S(kD2}7#*UHpqcS07qxPIDx@gY0wmk-9j_5w8d)nF{f zl@00?90=dColfH(CuP8-Y=wkutOYlz&Nn-o8&k=J=*8Im`lUG9*1PVKF3wsNVx1V5 zIQC9Q3tM)&J^v-DEpJEu(nj}q^^9KTb)p4hs-M0Nvm4md@m(Ko9+0UMVNj`!nMMos zD|_E>S3U*n^+)z84~S?`#KQlj^d$sYPV-wy^zdQgse9z~1GS?u^rI6)DmmY`*v{rY z@<2DM9Hdl9)=ywB@5>m_d2!jwk3zEDQdrkK%*Y|N9%Ih?qmgDaa(A0U`GN>yYaaVI z$#%Djdc(23poh+)MvLzw|4rv6c8p4UZ5o&KA(Vhogrs&W0lR0D|D36G8C zHwG|9#+uf-LcVT1G4z4Ru0PA+O9PTH$Q)?0*gMAuD z@xgdAy;t8VxpvB#$03*>Jb%9jrcAox(@%Sc%O3vJIJt$5dspOev$=igDlr(W0s9TW zCRcfX8r{j)A=K-5h0C`3m|iTD_)hN}gBeJ;{bD}A5!GWwWqtDvxY>&sI?D=H5SUoO z3Ud9Yk>gPHS2X{(ZD9Iqt2a{W6*ZV!P*H$ey;aPc$6nxAxBvPib`}3{yPZ67D;?Bf z>w5seO+Fe)1ix&@Nyv}z<`X~MxJ6Ss(xigGeY*+*$12hX^6_6w9DXMzaQ1MWUf?X# zD6sjL4Oabo2qUA9ox-tRAAMqw!9Ap<%ubyG56BxuuuK~c|F-&@HNb_&YYz8q5&JbM z5&#BuZ@}G?u;}C`e?Z41>O6U) z2Uxqg4eG&d!@T22{ok}8xOKGSU*`vV2d-0c9+WqKx9?H^qSx`mT@`;FEkH@-fC=ff zEKu$1UnpGuo#+5R@;;)%cXnM+Mx`x5BJ`ZWo~c*sEGbB&ZV`S(iq zw&aKeMIJxOYyePsL3Hfxrak{4Jd%GMl@MX;3jl@37Ze`T&=#iOW5Y0BaHI=UK`H#8 zE&#_zC<3#0leK;)1pwVlj`XMEr^lBN5FN#{AUfPsjepRE8%OBeb*U?p1J{B3pKdW z=6i=xW0F0VZ>hg=Kr{7THF42i%qT76z=mfscP?}wanndiGDvb%;geNJwM{s&dFyU8 z`g6{*{oVs>r^<53zz!}cA}jnyAJSKV{C%^hdomg{&`ca$_pxfWNOC6&-@q!|p1 zQgPcS2yAcqbf5}qa<(kSjQQ<`4t*}Y z*|Gdd?WSkXqXT1zo_*!&&Mo%}HH{3O*;?W_g=RZ;cv`$p&Sq+_7jba4ASS~}G`)M2 zG0vI=RVbJ_o{CH5suJgZZtuLbDoCkk=#N&vr*4l7K-{;!F!a4@OpiK>5Vv}$Jc?&& z2KKgZ>r207f0dd@|2HEM4-e1V_YKRr*+f$r$leX01`{YS>y_62Y9k66dgVc4f>q6| zG^2?TYVIGQkNJ5eIgEAe%a`cjq6PU&O6^{TnL*KP9&**mK_!fMv^?x#rz0F^OnQDS zU?-MOYL4aO)-v~h^`}mg(=lD8=baN<`G|7U$(iFlGykf(S-LVP`OGjXErk4$%G)VE zcE1cfT0gbuF-S6r8RI<%3-kFN4W}`lPu+Djqx=?P3^33!k-d7Z_eL}azL)YJMX1D#FDNJAy(w&qPay|7)}c`kr#(~_gC zWDuupSKU)yyX>AyHY72)Ciw37Iafvvk4HLlhUEBO3xk8%GyL;E$#ZM=rxS>2{TFA$ zb<$+S*RZIC;^%!DHB^k@RA;jWSkwE6$GGpf%`FM~o_X=Kxg6tM+%2NaR0+5XwB7lVGy&Ac;a?ul!G`cx(c4(s+AHG3o6hH+epwbutPc z-V9V6`=H>|xtp80SE%5Ocp@$pVItP~^`2Xs^2}89%S51~jCGMs6Rf!4ZXeDb_I($( zZ8+_B8*7cdx{65OpeS)U`^rV*sEzeU_cNz+ljMxQF7efu4#w0BVx}Kv=Mo4};2K@n zk)FA=f!!aaR>Q(MKN^5lI~*VawNT&qF#S}5LGO_NXATd`0XE}*y32%nApfIq;l-{F zdSRPUb49~jv&ka{yG6sii-X>=@7rEY_|{OP&I$Piap_rd^|VaK6>d#FtXB6JybzLH zwP%4sP+m^d6op_~`f9%ER4y}BxNcZd_4Jlr*dJbNBDBmR3c&B=N~)FmDQPQMKejVK z6bnrm;9<;i;^wYL(8PJ9QyL20<#QEu-uZ^u;$9An>T2Bcq9)9WHk?fxa_P>5Ry`GW z^}D|ljt5^I7D++pDw|X;Kjqx#H0!xM~haq9n^@4kWW5TNQP64++95(JNj#W?vdahn`wY$RC%ji=ITb8JjMKDu!qV(D7 zi5bwORC(yFJUUaX?=L=x4cesFeM~Yc=8C>QwrDk=V))+wrDds5o>dyhRSye{u`m0K z$?V(v7dJXyLp5_DJPdDXz?kP-qIlTved?!D@T>w*Bau#{ieazpkVWsQ>t@UlQxNqP z>EYVM*GqpeO)0bj2GQQ`w>PO+kPf`9WGooeUSpp?`JJW~UdB6q&P&iyc`InO3D3=b ze0N-Vu4As4b|x-Ttm_T19{nCohzJ;|ZVwm{7VYRARE43JG6+=`H`+hPCVEw%jfn0PItfa_ zwpeLC4(Af$lsO3Ud=NtmdO3VgubJ$la(d6G5L7AZXn+lK_*{JB8YWMGlTfg-G$oMw zBk}YIa(WnX5d#G_$G>I|m>(>d?QN3bUtt0^=N|Ljt7QLM411ZVlUDl7hm}JB8O$)5_wHw+uec593_%mDb!=nbf2mCGbtEH@A_u* zjJpTz>R#l?-HWCZ+!O-Q=I%qJn3fScN8t3!*teS71Ag;V^m?dh$$g43XxGR2@w@Z9 zQOhP~$10XS!b`L0x(>?*%;FeQ zqzGA5&2%2ITf;4EF@ny}x)`arZ?#Ul=3H3Ji=+s-FCWF!FN)X+bL^+-E0uad7lM38 zi4<-Str#v3F~oT%4kohv_Gx6lGm58R8<&9a`IC$;N~J%OW#ftU!#Q8N;;&y9W*ODV zoP9ei=40L$FPo22b0;=XZ<|YMM?{7UAlt1viMi^x$q(=+edjI4uV!x&E!5Oy%{})(&?y#QfAY+Diqc^bKPx#XrK88yVW&f|$Rp{}ej_g-zc{upg}F%%`L?YS4$an zudHTPjW0mxd*ig?7xD%&iM2QswV_E@&4GdXEIw#p#POjzcbW5T_$!6& z=!d5KDHktL1(W()-?~LavAQ}#^CtX`{rKC=2=h$a76}QC3qFc(*H+%#(tm8C{>A@* z;Z-8h1N?VnkNVEjRlf5sIv7K^DL}246k1n`7d+2egCS2V&OE4?^+S zSDTI9O7-@oW;}|kc6>>LUWkXgjYmbf_Q(5%!=-)j)aZ1UR5l&;~HJ_ zSpHmQ`u=Ua)lbB#+_r;ABUF3zrGRC7sP+d=o69+6gEWKkgo^5Bt4+fyD?2r{WY@W% z_a3`=jJF5g%C=nP7;rna6n&Q}{9}>(8+7K@c%j!e1*J>#vj9{tu8Dwmgf{=|uy)6m zm4r=Pu_q?Eb0V92_=(HC(d3Or53aNO!;b2uOV~nNJ5LVGU|w#X>yn`Xl-HKqP@jxQ z8eWzXq1nD?GdDh}l>cT?<@F$k+P?xrP&y=44E2 z50TLPijTO4)V%sSFH7!`5GE6yE3LzG{Bo1a3z zm(GMF+>sX28pk<2xY2V$dvO~XQrks6QxE>QVdW{&X-aHPr!^CM6?L&MbxKcFy(q0{ zxvFs664Z2h52}{YfwwZ({dya`_$YmzDw-6>AoNXN@92A{7*qT%_>EnGL z=Yy9TD3P%#qPd;Pk&DwFzA|8gJbO#4_99-#982cCnmH5=1lyxv_haw{R_o5^HKgBO z>`v?&_)4lwlP^OXQiAt+uWa)q_%2Rg^2n{HJ$vxcDAHrO*X_F?qg_aJ*y|=P?pp^5 zgep2aP?P64h#exF666XSE}3>+_F1|5hP>zh3-x0v)Me9r?;*+RA1(7(Tj>>);|4)csB2LC%#`nklQV7Lz!-R zx1i?Zh1|t%S7txAPcn~J^b2p68O&Pf9I%$ikSt_~kt~n_Z8FgF#1|diSjHM3dF|EL zlKN+wQUcfCmxr9aBE3Hs?p1#iM-4zOQG6O$hl}MJ|5U~@PimXKU!#^7>{G65&~7Dk z;28Mx-YYd1-p60OHIr?;Awl#?45YXt6|qF;R!;tI`T4Fg6@cDoLy=+##@eqD!<#PwEoE%fQ{x7<0%L(bjV z*et5+8ooyzqSv6-lJ_04GHO~da?Xw)D#!1+waeVMko1aWVY98J$=k-jx>#NEdS1yu zyCxdT@nP;9VfH|gI=dmVie4HbsNlpOSkSYd7Qv3>XKdCl9WJ=Bk1e;QZ_pr@1F0++9f{B~x9^z~poTl;@t6+Vy#N zgM5uzaaWRn{ZXgecQkTqQEoNKVmHrQFWm1XFoFDI3jK-hw1*$Xdd`-GF>0>C(8(hO z9eo~eD%L4NqSi?6^0;-)M4g^ZKhqy!J2jkd6=?i8anrxh#G>2x+474xk3t)V;3CHn zMqW8s5GlCQ?cz!86E{u&$48UE=Rm0gdjU?vo%0A_Q35$ZnM2~-g9of9uIT>N(&$)5 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�I@#wU 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 wCJ9+Pb{T-N$Rn-0Tczg`w`Bm9erEH%9Pmlz?@d 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 Wvr8x()jt0Q`;ZWk1(pfv`Tiep>7}*+ literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/setup/integrations/stripe_setting.png b/erpnext/docs/assets/img/setup/integrations/stripe_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..b6aa124af041fcc1b3486280e44d280e3489ab9c GIT binary patch literal 167559 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

      ?P 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 Integrations > Stripe Settings` + +#### Setup Stripe + +To enable Stripe payment service, you need to configure parameters like Publishable Key, Secret Key +Razorpay Settings + +On enabling service, the system will create Payment Gateway record and Account head in chart of account with account type as Bank. + +Stripe COA + +Also it will create Payment Gateway Account entry. Payment Gateway Account is configuration hub from this you can set account head from existing COA, default Payment Request email body template. + +Payment Gateway Account + +After configuring Payment Gateway Account your system is able to accept online payments. + +####Supporting transaction currencies + "AED", "ALL", "ANG", "ARS", "AUD", "AWG", "BBD", "BDT", "BIF", "BMD", "BND", + "BOB", "BRL", "BSD", "BWP", "BZD", "CAD", "CHF", "CLP", "CNY", "COP", "CRC", "CVE", "CZK", "DJF", + "DKK", "DOP", "DZD", "EGP", "ETB", "EUR", "FJD", "FKP", "GBP", "GIP", "GMD", "GNF", "GTQ", "GYD", + "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "ISK", "JMD", "JPY", "KES", "KHR", "KMF", + "KRW", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "MAD", "MDL", "MNT", "MOP", "MRO", "MUR", "MVR", + "MWK", "MXN", "MYR", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "PAB", "PEN", "PGK", "PHP", "PKR", + "PLN", "PYG", "QAR", "RUB", "SAR", "SBD", "SCR", "SEK", "SGD", "SHP", "SLL", "SOS", "STD", "SVC", + "SZL", "THB", "TOP", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "UYU", "UZS", "VND", "VUV", "WST", + "XAF", "XOF", "XPF", "YER", "ZAR" From 73456ac81ac2b1662123b17e767e1d8ecb6ead8d Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 11:29:57 +0530 Subject: [PATCH 265/287] [fix] Payments on the invoice is showing even if IS POS option is disabled (#8802) --- erpnext/controllers/taxes_and_totals.py | 2 ++ erpnext/patches.txt | 3 ++- ...ke_payments_table_blank_for_non_pos_invoice.py | 15 +++++++++++++++ erpnext/public/js/controllers/taxes_and_totals.js | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 7889ead057..c1c1fd7cda 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -465,6 +465,8 @@ class calculate_taxes_and_totals(object): payment.base_amount = flt(payment.amount * self.doc.conversion_rate) paid_amount += payment.amount base_paid_amount += payment.base_amount + elif not self.doc.is_return: + self.doc.set('payments', []) self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount")) self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount")) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 8907cf3e16..81367937a5 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -393,4 +393,5 @@ erpnext.patches.v7_2.stock_uom_in_selling erpnext.patches.v8_0.revert_manufacturers_table_from_item erpnext.patches.v8_0.disable_instructor_role erpnext.patches.v8_0.merge_student_batch_and_student_group -erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017 \ No newline at end of file +erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017 +erpnext.patches.v8_0.make_payments_table_blank_for_non_pos_invoice \ No newline at end of file diff --git a/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py b/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py new file mode 100644 index 0000000000..9750fb7222 --- /dev/null +++ b/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py @@ -0,0 +1,15 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doctype('Sales Invoice') + + frappe.db.sql(""" + delete from + `tabSales Invoice Payment` + where + parent in (select name from `tabSales Invoice` where is_pos = 0) + """) \ No newline at end of file diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index c925f4577b..849275f02c 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -594,6 +594,8 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ paid_amount += data.amount; base_paid_amount += data.base_amount; }) + } else if(!this.frm.doc.is_return){ + this.frm.doc.payments = []; } this.frm.doc.paid_amount = flt(paid_amount, precision("paid_amount")); From 8a27cf3785f25fdbc2f5c14d62f79351fe79aea8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 May 2017 12:43:00 +0530 Subject: [PATCH 266/287] Fix status of invoices with negative outstanding, if no return entry (#8829) * Move allowance field in Item to the first section to apply it for both stock and non-stock items * Fix status of invoices with negative outstanding, if no return entry * get_value included in safe_eval --- erpnext/controllers/status_updater.py | 11 +-- erpnext/patches.txt | 3 +- ..._for_invoices_with_negative_outstanding.py | 23 +++++++ erpnext/stock/doctype/item/item.json | 68 +++++++++---------- 4 files changed, 65 insertions(+), 40 deletions(-) create mode 100644 erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index d58ba4b841..403430606f 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -46,8 +46,8 @@ status_map = { ["Draft", None], ["Submitted", "eval:self.docstatus==1"], ["Return", "eval:self.is_return==1 and self.docstatus==1"], - ["Credit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"], - ["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1 and self.is_return==0"], + ["Paid", "eval:self.outstanding_amount<=0 and self.docstatus==1 and self.is_return==0"], + ["Credit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1 and self.is_return==0 and get_value('Sales Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1})"], ["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"], ["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"], ["Cancelled", "eval:self.docstatus==2"], @@ -56,8 +56,8 @@ status_map = { ["Draft", None], ["Submitted", "eval:self.docstatus==1"], ["Return", "eval:self.is_return==1 and self.docstatus==1"], - ["Debit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"], - ["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1 and self.is_return==0"], + ["Paid", "eval:self.outstanding_amount<=0 and self.docstatus==1 and self.is_return==0"], + ["Debit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1 and self.is_return==0 and get_value('Purchase Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1})"], ["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"], ["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"], ["Cancelled", "eval:self.docstatus==2"], @@ -119,7 +119,8 @@ class StatusUpdater(Document): self.status = s[0] break elif s[1].startswith("eval:"): - if frappe.safe_eval(s[1][5:], None, { "self": self.as_dict(), "getdate": getdate, "nowdate": nowdate }): + if frappe.safe_eval(s[1][5:], None, { "self": self.as_dict(), "getdate": getdate, + "nowdate": nowdate, "get_value": frappe.db.get_value }): self.status = s[0] break elif getattr(self, s[1])(): diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 81367937a5..ac91f6038b 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -394,4 +394,5 @@ erpnext.patches.v8_0.revert_manufacturers_table_from_item erpnext.patches.v8_0.disable_instructor_role erpnext.patches.v8_0.merge_student_batch_and_student_group erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017 -erpnext.patches.v8_0.make_payments_table_blank_for_non_pos_invoice \ No newline at end of file +erpnext.patches.v8_0.fix_status_for_invoices_with_negative_outstanding +erpnext.patches.v8_0.make_payments_table_blank_for_non_pos_invoice diff --git a/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py b/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py new file mode 100644 index 0000000000..2e7f360c97 --- /dev/null +++ b/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py @@ -0,0 +1,23 @@ +# Copyright (c) 2017, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + for dt, status in [["Sales Invoice", "Credit Note Issued"], ["Purchase Invoice", "Debit Note Issued"]]: + invoices = frappe.db.sql(""" + select name + from `tab{0}` + where + status = %s + and outstanding_amount < 0 + and docstatus=1 + and is_return=0 + """.format(dt), status) + + for inv in invoices: + return_inv = frappe.db.sql("""select name from `tab{0}` + where is_return=1 and return_against=%s and docstatus=1""".format(dt), inv[0]) + if not return_inv: + frappe.db.sql("update `tab{0}` set status='Paid' where name = %s".format(dt), inv[0]) \ No newline at end of file diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index d42e60d1bf..25f30552b5 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -513,6 +513,39 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "description": "", + "fieldname": "tolerance", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow over delivery or receipt upto this percent", + "length": 0, + "no_copy": 0, + "oldfieldname": "tolerance", + "oldfieldtype": "Currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -800,39 +833,6 @@ "unique": 0, "width": "50%" }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_stock_item", - "description": "", - "fieldname": "tolerance", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Allow over delivery or receipt upto this percent", - "length": 0, - "no_copy": 0, - "oldfieldname": "tolerance", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -3143,7 +3143,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2017-05-03 09:55:11.624283", + "modified": "2017-05-15 11:49:47.525859", "modified_by": "Administrator", "module": "Stock", "name": "Item", From 3da400b53292edf65ef943fe8e798671766b850b Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 12:43:18 +0530 Subject: [PATCH 267/287] [fix] Due Date cannot be before Posting Date during amendement of an invoice (#8841) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 295f649d60..285722b1ad 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -52,7 +52,7 @@ class SalesInvoice(SellingController): def validate(self): super(SalesInvoice, self).validate() - self.validate_posting_time() + self.validate_auto_set_posting_time() self.so_dn_required() self.validate_proj_cust() self.validate_with_previous_doc() @@ -378,6 +378,12 @@ class SalesInvoice(SellingController): def add_remarks(self): if not self.remarks: self.remarks = 'No Remarks' + def validate_auto_set_posting_time(self): + # Don't auto set the posting date and time if invoice is amended + if self.is_new() and self.amended_from: + self.set_posting_time = 1 + + self.validate_posting_time() def so_dn_required(self): """check in manage account if sales order / delivery note required or not.""" From a689432a6ededddf2dcbfee67cdc8a5b17cdb875 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 16 May 2017 12:47:34 +0530 Subject: [PATCH 268/287] [fix] Can't update naming series if format has year,month (#8836) --- .../doctype/naming_series/naming_series.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py index d6e7ea713d..536b72f6a9 100644 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ b/erpnext/setup/doctype/naming_series/naming_series.py @@ -8,6 +8,7 @@ from frappe.utils import cstr from frappe import msgprint, throw, _ from frappe.model.document import Document +from frappe.model.naming import parse_naming_series from frappe.permissions import get_doctypes_with_read class NamingSeriesNotSetError(frappe.ValidationError): pass @@ -136,8 +137,9 @@ class NamingSeries(Document): def get_current(self, arg=None): """get series current""" if self.prefix: + prefix = self.parse_naming_series() self.current_value = frappe.db.get_value("Series", - self.prefix.split('.')[0], "current", order_by = "name") + prefix, "current", order_by = "name") def insert_series(self, series): """insert series if missing""" @@ -146,7 +148,7 @@ class NamingSeries(Document): def update_series_start(self): if self.prefix: - prefix = self.prefix.split('.')[0] + prefix = self.parse_naming_series() self.insert_series(prefix) frappe.db.sql("update `tabSeries` set current = %s where name = %s", (self.current_value, prefix)) @@ -154,6 +156,17 @@ class NamingSeries(Document): else: msgprint(_("Please select prefix first")) + def parse_naming_series(self): + parts = self.prefix.split('.') + # If series contain date format like INV.YYYY.MM.##### + if len(parts) > 2: + del parts[-1] # Removed ### from the series + prefix = parse_naming_series(parts) + else: + prefix = parts[0] + + return prefix + def set_by_naming_series(doctype, fieldname, naming_series, hide_name_field=True): from frappe.custom.doctype.property_setter.property_setter import make_property_setter if naming_series: From a282c13d845c86193fa8cf07ea02ed1c6cf7e181 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 May 2017 14:09:41 +0600 Subject: [PATCH 269/287] bumped to version 8.0.27 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 6f73741e85..7046172c9a 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.26' +__version__ = '8.0.27' def get_default_company(user=None): '''Get default company for user''' From 1e2d7b35197536e49cda97148d7600377870e89a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 17 May 2017 13:52:21 +0530 Subject: [PATCH 270/287] Filters for multiselect dialog for DN/PR in Sales/Purchase Invoice (#8882) --- .../purchase_invoice/purchase_invoice.js | 3 ++- .../doctype/sales_invoice/sales_invoice.js | 3 ++- erpnext/controllers/queries.py | 20 ++++++++++--------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 63de8789c1..b48fb20d6f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -79,7 +79,8 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ get_query_filters: { docstatus: 1, status: ["!=", "Closed"], - company: me.frm.doc.company + company: me.frm.doc.company, + is_return: 0 } }) }, __("Get items from")); diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index f2357226cd..007afe4b63 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -142,11 +142,12 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte target: me.frm, date_field: "posting_date", setters: { - company: me.frm.doc.company + customer: me.frm.doc.customer || undefined }, get_query: function() { var filters = { docstatus: 1, + company: me.frm.doc.company }; if(me.frm.doc.customer) filters["customer"] = me.frm.doc.customer; return { diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 2f98e865bc..0fc08c1cc3 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -222,19 +222,21 @@ def get_project_name(doctype, txt, searchfield, start, page_len, filters): "_txt": txt.replace('%', '') }) -def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters): - return frappe.db.sql("""select `tabDelivery Note`.name, `tabDelivery Note`.customer_name +def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters, as_dict): + return frappe.db.sql(""" + select `tabDelivery Note`.name, `tabDelivery Note`.customer, `tabDelivery Note`.posting_date from `tabDelivery Note` where `tabDelivery Note`.`%(key)s` like %(txt)s and - `tabDelivery Note`.docstatus = 1 and status not in ("Stopped", "Closed") %(fcond)s + `tabDelivery Note`.docstatus = 1 and `tabDelivery Note`.is_return = 0 + and status not in ("Stopped", "Closed") %(fcond)s and (`tabDelivery Note`.per_billed < 100 or `tabDelivery Note`.grand_total = 0) %(mcond)s order by `tabDelivery Note`.`%(key)s` asc - limit %(start)s, %(page_len)s""" % { - "key": searchfield, - "fcond": get_filters_cond(doctype, filters, []), - "mcond": get_match_cond(doctype), - "start": "%(start)s", "page_len": "%(page_len)s", "txt": "%(txt)s" - }, { "start": start, "page_len": page_len, "txt": ("%%%s%%" % txt) }) + """ % { + "key": searchfield, + "fcond": get_filters_cond(doctype, filters, []), + "mcond": get_match_cond(doctype), + "txt": "%(txt)s" + }, { "txt": ("%%%s%%" % txt) }, as_dict=as_dict) def get_batch_no(doctype, txt, searchfield, start, page_len, filters): cond = "" From def2e4678c9aa2104355628ebccd68adb1c5369d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 17 May 2017 14:24:04 +0600 Subject: [PATCH 271/287] bumped to version 8.0.28 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 7046172c9a..8b6609ce57 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '8.0.27' +__version__ = '8.0.28' def get_default_company(user=None): '''Get default company for user''' From 3b04b030eb29d3a28c34a181968bf68fdbeb7f4c Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Wed, 17 May 2017 19:16:27 +0530 Subject: [PATCH 272/287] Fix cost center not getting pulled in DN and SINV (#8878) * Fixes for getting selling cost center instead of company's default cost center. * fix error in update_item --- .../doctype/sales_invoice/sales_invoice.py | 17 +++++++++-------- .../selling/doctype/sales_order/sales_order.py | 9 +++++++-- .../doctype/delivery_note/delivery_note.py | 3 ++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 285722b1ad..449a97522f 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -330,7 +330,7 @@ class SalesInvoice(SellingController): frappe.throw(_("Debit To account must be a Receivable account")) self.party_account_currency = account.account_currency - + def clear_unallocated_mode_of_payments(self): self.set("payments", self.get("payments", {"amount": ["not in", [0, None, ""]]})) @@ -551,7 +551,7 @@ class SalesInvoice(SellingController): def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False): if not self.grand_total: return - + if not gl_entries: gl_entries = self.get_gl_entries() @@ -697,7 +697,7 @@ class SalesInvoice(SellingController): else payment_mode.amount }, payment_mode_account_currency) ) - + def make_gle_for_change_amount(self, gl_entries): if cint(self.is_pos) and self.change_amount: if self.account_for_change_amount: @@ -714,7 +714,7 @@ class SalesInvoice(SellingController): "against_voucher_type": self.doctype }, self.party_account_currency) ) - + gl_entries.append( self.get_gl_dict({ "account": self.account_for_change_amount, @@ -724,7 +724,7 @@ class SalesInvoice(SellingController): ) else: frappe.throw(_("Select change amount account"), title="Mandatory Field") - + def make_write_off_gl_entry(self, gl_entries): # write off entries, applicable if only pos if self.write_off_account and self.write_off_amount: @@ -808,7 +808,7 @@ def make_delivery_note(source_name, target_doc=None): def update_item(source_doc, target_doc, source_parent): target_doc.qty = flt(source_doc.qty) - flt(source_doc.delivered_qty) target_doc.stock_qty = target_doc.qty * flt(source_doc.conversion_factor) - + target_doc.base_amount = target_doc.qty * flt(source_doc.base_rate) target_doc.amount = target_doc.qty * flt(source_doc.rate) @@ -826,7 +826,8 @@ def make_delivery_note(source_name, target_doc=None): "parent": "against_sales_invoice", "serial_no": "serial_no", "sales_order": "against_sales_order", - "so_detail": "so_detail" + "so_detail": "so_detail", + "cost_center": "cost_center" }, "postprocess": update_item, "condition": lambda doc: doc.delivered_by_supplier!=1 @@ -855,4 +856,4 @@ def make_sales_return(source_name, target_doc=None): def set_account_for_mode_of_payment(self): for data in self.payments: if not data.account: - data.account = get_bank_cash_account(data.mode_of_payment, self.company).get("account") \ No newline at end of file + data.account = get_bank_cash_account(data.mode_of_payment, self.company).get("account") diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index f5bc7dbc04..c55dc9fb3d 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -175,7 +175,7 @@ class SalesOrder(SellingController): self.update_prevdoc_status('cancel') frappe.db.set(self, 'status', 'Cancelled') - + def update_project(self): project_list = [] if self.project: @@ -183,7 +183,7 @@ class SalesOrder(SellingController): project.flags.dont_sync_tasks = True project.update_sales_costing() project.save() - project_list.append(self.project) + project_list.append(self.project) def check_credit_limit(self): from erpnext.selling.doctype.customer.customer import check_credit_limit @@ -427,6 +427,11 @@ def make_delivery_note(source_name, target_doc=None): target.amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.rate) target.qty = flt(source.qty) - flt(source.delivered_qty) + item = frappe.db.get_value("Item", target.item_code, ["item_group", "selling_cost_center"], as_dict=1) + target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") \ + or item.selling_cost_center \ + or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") + target_doc = get_mapped_doc("Sales Order", source_name, { "Sales Order": { "doctype": "Delivery Note", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 1c730ffd08..e7bf827ae2 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -398,7 +398,8 @@ def make_sales_invoice(source_name, target_doc=None): "parent": "delivery_note", "so_detail": "so_detail", "against_sales_order": "sales_order", - "serial_no": "serial_no" + "serial_no": "serial_no", + "cost_center": "cost_center" }, "postprocess": update_item, "filter": lambda d: abs(d.qty) - abs(invoiced_qty_map.get(d.name, 0))<=0 From cf7df5d10681f71e227728633bbc14581a380013 Mon Sep 17 00:00:00 2001 From: tundebabzy Date: Wed, 17 May 2017 14:47:04 +0100 Subject: [PATCH 273/287] fixes #8883 (#8885) --- erpnext/accounts/doctype/asset/asset.js | 2 +- erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/asset/asset.js b/erpnext/accounts/doctype/asset/asset.js index 664ed4da25..a1b3dd3bbf 100644 --- a/erpnext/accounts/doctype/asset/asset.js +++ b/erpnext/accounts/doctype/asset/asset.js @@ -45,7 +45,7 @@ frappe.ui.form.on('Asset', { erpnext.asset.scrap_asset(frm); }); - frm.add_custom_button("Sale Asset", function() { + frm.add_custom_button("Sell Asset", function() { erpnext.asset.make_sales_invoice(frm); }); diff --git a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md index efbe95fb25..e82ec92772 100644 --- a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md +++ b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md @@ -64,7 +64,7 @@ On submission of the invoice, the "Fixed Asset Account" will be debited and paya ## Sell an Asset -To sale an asset, open the asset record and create a Sales Invoice by clicking on "Sale Asset". On submission of the Sales Invoice, following entries will take place: +To sell an asset, open the asset record and create a Sales Invoice by clicking on "Sell Asset". On submission of the Sales Invoice, following entries will take place: - "Receivable Account" (Debtors) will be debited by the sales amount. - "Fixed Asset Account" will be credited by the purchase amount of asset. From c55b805b666fd82923940a55e1dfd5d2c7cc5d4e Mon Sep 17 00:00:00 2001 From: Ayush Shukla Date: Wed, 17 May 2017 19:18:26 +0530 Subject: [PATCH 274/287] [minor] process_payroll_create salary fixed, fixes frappe/erpnext#8853 (#8881) * [minor] process_payroll_create salary fixed * [minor] indentation fix --- erpnext/hr/doctype/process_payroll/process_payroll.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.py b/erpnext/hr/doctype/process_payroll/process_payroll.py index 915985ca4f..7ca94b8628 100644 --- a/erpnext/hr/doctype/process_payroll/process_payroll.py +++ b/erpnext/hr/doctype/process_payroll/process_payroll.py @@ -112,14 +112,14 @@ class ProcessPayroll(Document): def create_log(self, ss_list): - if not ss_list: + if not ss_list or len(ss_list) < 1: log = "

      " + _("No employee for the above selected criteria OR salary slip already created") + "

      " else: log = frappe.render_template("templates/includes/salary_slip_log.html", dict(ss_list=ss_list, keys=sorted(ss_list[0].keys()), title=_('Created Salary Slips'))) - return log + return log def get_sal_slip_list(self, ss_status, as_dict=False): """ From 76d965f340710fe628da2e20e2d716d76b05514c Mon Sep 17 00:00:00 2001 From: Ayush Shukla Date: Wed, 17 May 2017 19:18:47 +0530 Subject: [PATCH 275/287] [minor]-Changed receivable to payable (#8880) --- erpnext/buying/doctype/supplier/supplier.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json index a590f372ec..746dd223e5 100644 --- a/erpnext/buying/doctype/supplier/supplier.json +++ b/erpnext/buying/doctype/supplier/supplier.json @@ -688,7 +688,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", - "description": "Mention if non-standard receivable account", + "description": "Mention if non-standard payable account", "fieldname": "accounts", "fieldtype": "Table", "hidden": 0, @@ -850,7 +850,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-05-05 04:24:03.884380", + "modified": "2017-05-17 12:21:21.218428", "modified_by": "Administrator", "module": "Buying", "name": "Supplier", From 0952df29dce359242fcbc70b122b50bdd893a942 Mon Sep 17 00:00:00 2001 From: Felipe Orellana Date: Wed, 17 May 2017 09:50:01 -0400 Subject: [PATCH 276/287] Update product.py (#8877) Hi! If template_item_code is None on line 71-72 the query will return ALL "Item Price" records irrespective of item_code, potentially causing the wrong price list rate to be used. Noticed this behavior when fetching product price for a group of items without "variant_of" data. --- erpnext/shopping_cart/product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/shopping_cart/product.py b/erpnext/shopping_cart/product.py index d7afc3bfba..1999a4aa43 100644 --- a/erpnext/shopping_cart/product.py +++ b/erpnext/shopping_cart/product.py @@ -67,7 +67,7 @@ def get_price(item_code, template_item_code, price_list, qty=1): price = frappe.get_all("Item Price", fields=["price_list_rate", "currency"], filters={"price_list": price_list, "item_code": item_code}) - if not price: + if template_item_code and not price: price = frappe.get_all("Item Price", fields=["price_list_rate", "currency"], filters={"price_list": price_list, "item_code": template_item_code}) From 3d6567411de4cf08dde1c3d933b85cbac99ca8f2 Mon Sep 17 00:00:00 2001 From: Julian Robbins Date: Wed, 17 May 2017 15:06:15 +0100 Subject: [PATCH 277/287] Spelling improvmement (#8866) --- erpnext/docs/user/manual/en/selling/setup/sales-partner.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/docs/user/manual/en/selling/setup/sales-partner.md b/erpnext/docs/user/manual/en/selling/setup/sales-partner.md index 1174969af4..b8762056fb 100644 --- a/erpnext/docs/user/manual/en/selling/setup/sales-partner.md +++ b/erpnext/docs/user/manual/en/selling/setup/sales-partner.md @@ -1,6 +1,6 @@ People who assist you in getting business are termed as Sales Partners. Sales Partners can be represented by different names in ERPNext. You can call them Channel Partner, Distributor, Dealer, Agent, Retailer, Implementation Partner, Reseller etc. -For each Sales Partner, you can define commission offer to them. When Sales Partner is selected in transactions, there commission is calculated over Net Total of Sales Order/Invoice or Delivery Note. +For each Sales Partner, you can define commission offer to them. When Sales Partner is selected in transactions, their commission is calculated over Net Total of Sales Order/Invoice or Delivery Note. You can track Sales Personwise commission in the report under Selling module. From f7a9023fda8aa51e3dd64718adb45b375512f4e3 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Wed, 17 May 2017 19:37:31 +0530 Subject: [PATCH 278/287] Show empty state when no students are found in student attendance tool (#8862) - fixes #8839 --- .../student_attendance_tool.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js index b092a3f2ee..6f8c6cd7da 100644 --- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js +++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js @@ -47,7 +47,7 @@ frappe.ui.form.on('Student Attendance Tool', { frm.students_area = $('
      ') .appendTo(frm.fields_dict.students_html.wrapper); } - console.log(students); + students = students || []; frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students) } }); @@ -57,7 +57,11 @@ schools.StudentsEditor = Class.extend({ init: function(frm, wrapper, students) { this.wrapper = wrapper; this.frm = frm; - this.make(frm, students); + if(students.length > 0) { + this.make(frm, students); + } else { + this.show_empty_state(); + } }, make: function(frm, students) { var me = this; @@ -159,5 +163,13 @@ schools.StudentsEditor = Class.extend({ }); $(htmls.join("")).appendTo(me.wrapper); + }, + + show_empty_state: function() { + $(this.wrapper).html( + `
      + ${__("No Students in")} ${this.frm.doc.student_group} +
      ` + ); } }); \ No newline at end of file From f69ffeb0b46365098648bc110062deaee6751157 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 17 May 2017 19:40:40 +0530 Subject: [PATCH 279/287] [fix] if rate is greater than price_list_rate, set margin instead of discount. Fixes frappe/erpnext#6468 (#8856) --- erpnext/public/js/controllers/transaction.js | 21 +++++++++++++++++++- erpnext/selling/sales_common.js | 8 -------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 6539530292..44bf21da3e 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -6,12 +6,31 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ this._super(); frappe.ui.form.on(this.frm.doctype + " Item", "rate", function(frm, cdt, cdn) { var item = frappe.get_doc(cdt, cdn); + var has_margin_field = frappe.meta.has_field(cdt, 'margin_type'); + frappe.model.round_floats_in(item, ["rate", "price_list_rate"]); if(item.price_list_rate) { - item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0, precision("discount_percentage", item)); + if(item.rate > item.price_list_rate && has_margin_field) { + // if rate is greater than price_list_rate, set margin + // or set discount + item.discount_percentage = 0; + item.margin_type = 'Percentage'; + item.margin_rate_or_amount = flt(Math.abs(1 - item.rate / item.price_list_rate) * 100.0, + precision("discount_percentage", item)); + item.rate_with_margin = item.rate; + } else { + item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0, + precision("discount_percentage", item)); + item.margin_type = ''; + item.margin_rate_or_amount = 0; + item.rate_with_margin = 0; + } } else { item.discount_percentage = 0.0; + item.margin_type = ''; + item.margin_rate_or_amount = 0; + item.rate_with_margin = 0; } cur_frm.cscript.set_gross_profit(item); diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index da9c771b05..715434384b 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -337,14 +337,6 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ }) }, - rate: function(doc, cdt, cdn){ - // if user changes the rate then set margin Rate or amount to 0 - item = locals[cdt][cdn]; - item.margin_type = ""; - item.margin_rate_or_amount = 0.0; - cur_frm.refresh_fields(); - }, - margin_rate_or_amount: function(doc, cdt, cdn) { // calculated the revised total margin and rate on margin rate changes item = locals[cdt][cdn]; From e4f80a6eaa57f6668bc649fb451143b42e8b0ad3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 17 May 2017 19:41:39 +0530 Subject: [PATCH 280/287] Open lost opportunity again if quotation made against it (#8854) --- erpnext/controllers/status_updater.py | 2 +- .../crm/doctype/opportunity/opportunity.py | 21 ++++++++++++++----- .../selling/doctype/quotation/quotation.py | 4 +++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 403430606f..cede8f4d34 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -19,7 +19,7 @@ status_map = { ["Converted", "has_customer"], ], "Opportunity": [ - ["Quotation", "has_quotation"], + ["Quotation", "has_active_quotation"], ["Converted", "has_ordered_quotation"], ["Lost", "eval:self.status=='Lost'"], ["Lost", "has_lost_quotation"], diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index 3c553a5da8..8a21e7c746 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -84,20 +84,31 @@ class Opportunity(TransactionBase): def on_trash(self): self.delete_events() - def has_quotation(self): - return frappe.db.get_value("Quotation Item", {"prevdoc_docname": self.name, "docstatus": 1}) + def has_active_quotation(self): + return frappe.db.sql(""" + select q.name + from `tabQuotation` q, `tabQuotation Item` qi + where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s + and q.status not in ('Lost', 'Closed')""", self.name) def has_ordered_quotation(self): - return frappe.db.sql("""select q.name from `tabQuotation` q, `tabQuotation Item` qi - where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s and q.status = 'Ordered'""", self.name) + return frappe.db.sql(""" + select q.name + from `tabQuotation` q, `tabQuotation Item` qi + where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s + and q.status = 'Ordered'""", self.name) def has_lost_quotation(self): - return frappe.db.sql(""" + lost_quotation = frappe.db.sql(""" select q.name from `tabQuotation` q, `tabQuotation Item` qi where q.name = qi.parent and q.docstatus=1 and qi.prevdoc_docname =%s and q.status = 'Lost' """, self.name) + if lost_quotation: + if self.has_active_quotation(): + return False + return True def validate_cust_name(self): if self.customer: diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index b5b24f8c75..b102e1d699 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -44,7 +44,9 @@ class Quotation(SellingController): def update_opportunity(self): for opportunity in list(set([d.prevdoc_docname for d in self.get("items")])): if opportunity: - frappe.get_doc("Opportunity", opportunity).set_status(update=True) + opp = frappe.get_doc("Opportunity", opportunity) + opp.status = None + opp.set_status(update=True) def declare_order_lost(self, arg): if not self.has_sales_order(): From 85bfc05efa7a65c122601319c56d8faf3c9c9a9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Rold=C3=A1n?= Date: Wed, 17 May 2017 11:12:04 -0300 Subject: [PATCH 281/287] Fix missing translations (#8871) * Fix missing translations * Fix --- .../salary_register/salary_register.html | 4 +- erpnext/public/js/payment/pos_payment.html | 12 +++--- erpnext/public/js/pos/pos.html | 12 +++--- erpnext/public/js/pos/pos_item.html | 2 +- erpnext/public/js/pos/pos_selected_item.html | 10 ++--- erpnext/templates/generators/item_group.html | 6 +-- .../includes/navbar/navbar_items.html | 2 +- .../includes/projects/project_tasks.html | 2 +- .../includes/projects/project_timesheets.html | 2 +- erpnext/templates/pages/cart.html | 2 +- erpnext/templates/pages/task_info.html | 40 +++++++++---------- erpnext/templates/pages/timelog_info.html | 16 ++++---- 12 files changed, 55 insertions(+), 55 deletions(-) diff --git a/erpnext/hr/report/salary_register/salary_register.html b/erpnext/hr/report/salary_register/salary_register.html index 2a9cd3ebdb..d7bf6a78bc 100644 --- a/erpnext/hr/report/salary_register/salary_register.html +++ b/erpnext/hr/report/salary_register/salary_register.html @@ -2,7 +2,7 @@ {%= frappe.boot.letter_heads[filters.letter_head || frappe.defaults.get_default("letter_head")] %}

      {%= __(report.report_name) %}

      -
      From {%= filters.date_range[0] %} to {%= filters.date_range[1] %}
      +
      {{ __("From") }} {%= filters.date_range[0] %} {{ __("to") }} {%= filters.date_range[1] %}

      @@ -34,4 +34,4 @@ {% } %}
      -

      Printed On {%= dateutil.str_to_user(dateutil.get_datetime_as_string()) %}

      +

      {{ __("Printed On") }} {%= dateutil.str_to_user(dateutil.get_datetime_as_string()) %}

      diff --git a/erpnext/public/js/payment/pos_payment.html b/erpnext/public/js/payment/pos_payment.html index 7700b24374..185d748aff 100644 --- a/erpnext/public/js/payment/pos_payment.html +++ b/erpnext/public/js/payment/pos_payment.html @@ -1,20 +1,20 @@
      -

      Total Amount: {%= format_currency(grand_total, currency) %}

      +

      {{ __("Total Amount") }}: {%= format_currency(grand_total, currency) %}

      -

      Paid

      +

      {{ __("Paid") }}

      -

      Outstanding

      {%= format_currency(outstanding_amount, currency) %}

      +

      {{ __("Outstanding") }}

      {%= format_currency(outstanding_amount, currency) %}

      -

      Change +

      {{ __("Change") }}

      -

      Write off +

      {{ __("Write off") }}

      @@ -33,7 +33,7 @@
      {% } %}
      - +
      diff --git a/erpnext/public/js/pos/pos.html b/erpnext/public/js/pos/pos.html index e356d8768e..181a41f2d5 100644 --- a/erpnext/public/js/pos/pos.html +++ b/erpnext/public/js/pos/pos.html @@ -17,7 +17,7 @@
      -

      Tap items to add them here

      +

      {{ __("Tap items to add them here") }}

      @@ -68,7 +68,7 @@
      @@ -97,7 +97,7 @@
      -

      No Customers yet!

      +

      {{ __("No Customers yet!") }}

      @@ -112,7 +112,7 @@
      diff --git a/erpnext/public/js/pos/pos_item.html b/erpnext/public/js/pos/pos_item.html index b1d75ae96c..816dc3ac2f 100644 --- a/erpnext/public/js/pos/pos_item.html +++ b/erpnext/public/js/pos/pos_item.html @@ -1,7 +1,7 @@
      diff --git a/erpnext/public/js/pos/pos_selected_item.html b/erpnext/public/js/pos/pos_selected_item.html index 65e4ef18b4..a4bc49dfba 100644 --- a/erpnext/public/js/pos/pos_selected_item.html +++ b/erpnext/public/js/pos/pos_selected_item.html @@ -1,22 +1,22 @@
      -
      Quantity:
      +
      {{ __("Quantity") }}:
      -
      Price List Rate:
      +
      {{ __("Price List Rate") }}:
      -
      Discount:
      +
      {{ __("Discount") }}:
      -
      Price:
      +
      {{ __("Price") }}:
      -
      Amount:
      +
      {{ __("Amount") }}:
      \ No newline at end of file diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html index f0276447d5..d710cb0739 100644 --- a/erpnext/templates/generators/item_group.html +++ b/erpnext/templates/generators/item_group.html @@ -33,14 +33,14 @@
      {% if frappe.form_dict.start|int > 0 %} - Prev + {{ __("Prev") }} {% endif %} {% if items|length > page_length %} - Next + {{ __("Next") }} {% endif %}
      {% else %} -
      No items listed.
      +
      {{ __("No items listed") }}.
      {% endif %}
      diff --git a/erpnext/templates/includes/navbar/navbar_items.html b/erpnext/templates/includes/navbar/navbar_items.html index 87dea8f175..faf8adf22b 100644 --- a/erpnext/templates/includes/navbar/navbar_items.html +++ b/erpnext/templates/includes/navbar/navbar_items.html @@ -4,7 +4,7 @@
      {% if task.todo %} diff --git a/erpnext/templates/includes/projects/project_timesheets.html b/erpnext/templates/includes/projects/project_timesheets.html index fb44017fa8..3a9aecd251 100644 --- a/erpnext/templates/includes/projects/project_timesheets.html +++ b/erpnext/templates/includes/projects/project_timesheets.html @@ -5,7 +5,7 @@
      {{ timesheet.info.name }}
      - From {{ frappe.format_date(timesheet.from_time) }} to {{ frappe.format_date(timesheet.to_time) }} + {{ __("From") }} {{ frappe.format_date(timesheet.from_time) }} {{ __("to") }} {{ frappe.format_date(timesheet.to_time) }}
      diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html index 6cff5b13e2..fb0c05fcdd 100644 --- a/erpnext/templates/pages/cart.html +++ b/erpnext/templates/pages/cart.html @@ -60,7 +60,7 @@ {{doc.terms}}
      {% endif %} diff --git a/erpnext/templates/pages/task_info.html b/erpnext/templates/pages/task_info.html index f386ce891a..6cfac28da6 100644 --- a/erpnext/templates/pages/task_info.html +++ b/erpnext/templates/pages/task_info.html @@ -19,9 +19,9 @@
      + {{ __("Update") }} - Cancel + {{ __("Cancel") }}
      @@ -36,45 +36,45 @@
      - +
      - +
      - +
      - +
      - +
      - +
      - +
      @@ -83,22 +83,22 @@
      -

      Comments

      +

      {{ __("Comments") }}

      {% for comment in comments %}

      {{comment.sender_full_name}}: - {{comment.subject}} on {{comment.creation.strftime('%Y-%m-%d')}}

      + {{comment.subject}} {{ __("on") }} {{comment.creation.strftime('%Y-%m-%d')}}

      {% endfor %}
      - Add Comment + {{ __("Add Comment") }}