From 27af6b377fb77bcf869714dac50d81677998d54c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 8 Feb 2019 16:52:13 +0530 Subject: [PATCH 01/17] fix: defered accounting fixes --- erpnext/accounts/deferred_revenue.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 9ff8b04281..13c57fe326 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -128,9 +128,13 @@ def book_deferred_income_or_expense(doc, start_date=None, end_date=None): # book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM # start_date: 1st of the last month or the start date # end_date: end_date or today-1 + enable_check = "enable_deferred_revenue" \ + if doc.doctype=="Sales Invoice" else "enable_deferred_expense" gl_entries = [] for item in doc.get('items'): + if not item.get(enable_check): continue + skip = False last_gl_entry, booking_start_date, booking_end_date, skip = \ get_booking_dates(doc, item, start_date, end_date) From e3b0f4f9f639579fd58f928cc8d2d280a77c0bfd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 8 Feb 2019 16:53:02 +0530 Subject: [PATCH 02/17] fix: removed account type filter on employee advance account --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 4 ++-- erpnext/hr/doctype/employee_advance/employee_advance.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 7f1f55005c..f303301a33 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -171,7 +171,7 @@ class PaymentEntry(AccountsController): if not frappe.db.exists(self.party_type, self.party): frappe.throw(_("Invalid {0}: {1}").format(self.party_type, self.party)) - if self.party_account: + if self.party_account and self.party_type in ("Customer", "Supplier"): self.validate_account_type(self.party_account, [erpnext.get_party_account_type(self.party_type)]) @@ -689,7 +689,7 @@ def get_party_details(company, party_type, party, date, cost_center=None): account_currency = get_account_currency(party_account) account_balance = get_balance_on(party_account, date, cost_center=cost_center) - _party_name = "title" if party_type == "Student" else party_type.lower() + "_name" + _party_name = "title" if party_type in ("Student", "Shareholder") else party_type.lower() + "_name" party_name = frappe.db.get_value(party_type, party, _party_name) party_balance = get_balance_on(party_type=party_type, party=party, cost_center=cost_center) if party_type in ["Customer", "Supplier"]: diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js index c73df624e2..f4285a2ca2 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.js +++ b/erpnext/hr/doctype/employee_advance/employee_advance.js @@ -19,7 +19,6 @@ frappe.ui.form.on('Employee Advance', { filters: { "root_type": "Asset", "is_group": 0, - "account_type": "Payable", "company": frm.doc.company } }; From 450fe309d681d8d30c34359e2bfdc1e92de57816 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 8 Feb 2019 16:54:56 +0530 Subject: [PATCH 03/17] fix: allow updating title of material request --- erpnext/stock/doctype/material_request/material_request.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index f3e3abfde2..47d61f847f 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -81,9 +81,9 @@ class MaterialRequest(BuyingController): def set_title(self): '''Set title as comma separated list of items''' - items = ', '.join([d.item_name for d in self.items][:4]) - - self.title = _('{0} for {1}'.format(self.material_request_type, items))[:100] + if not self.title: + items = ', '.join([d.item_name for d in self.items][:3]) + self.title = _('{0} Request for {1}').format(self.material_request_type, items)[:100] def on_submit(self): # frappe.db.set(self, 'status', 'Submitted') From 8d4bb3e327b6bb0d0dbde62c2c191ed05199c33c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 8 Feb 2019 16:55:46 +0530 Subject: [PATCH 04/17] fix: backflush only if transferred item is present in work order --- erpnext/stock/doctype/stock_entry/stock_entry.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 5d3c6c4adc..358d4e93be 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -914,6 +914,11 @@ class StockEntry(StockController): filters={'parent': self.work_order, 'item_code': item_code}, fields=["required_qty", "consumed_qty"] ) + if not req_items: + frappe.msgprint(_("Did not found transfered item {0} in Work Order {1}, the item not added in Stock Entry") + .format(item_code, self.work_order)) + continue + req_qty = flt(req_items[0].required_qty) req_qty_each = flt(req_qty / manufacturing_qty) consumed_qty = flt(req_items[0].consumed_qty) From 17e0513270b7fe04bc4d2d47860ec1721e1b2b7d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 8 Feb 2019 16:56:11 +0530 Subject: [PATCH 05/17] fix: message if stock reco is enqueued --- .../stock/doctype/stock_reconciliation/stock_reconciliation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index eb60ce56e9..a00d279f97 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -259,6 +259,7 @@ class StockReconciliation(StockController): def submit(self): if len(self.items) > 100: + msgprint(_("The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Draft stage")) self.queue_action('submit') else: self._submit() From a206f06af90876a32f97a4f968a8c3a228c7e8a8 Mon Sep 17 00:00:00 2001 From: Zlash65 Date: Mon, 11 Feb 2019 12:01:01 +0530 Subject: [PATCH 06/17] delete notification control's docctype entry --- erpnext/patches.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 29c86196da..b8e2e358b1 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -585,3 +585,4 @@ erpnext.patches.v11_0.rename_additional_salary_component_additional_salary erpnext.patches.v11_0.renamed_from_to_fields_in_project erpnext.patches.v11_0.add_permissions_in_gst_settings erpnext.patches.v11_1.setup_guardian_role +execute:frappe.delete_doc('DocType', 'Notification Control') From ab50211e18bdac06fd5a719b8dcb73e997de0d6f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Feb 2019 18:22:36 +0530 Subject: [PATCH 07/17] fix: show project even if PI is directly created --- erpnext/accounts/report/purchase_register/purchase_register.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py index 5d2409651e..e33b90d019 100644 --- a/erpnext/accounts/report/purchase_register/purchase_register.py +++ b/erpnext/accounts/report/purchase_register/purchase_register.py @@ -193,7 +193,7 @@ def get_invoice_po_pr_map(invoice_list): pi_items = frappe.db.sql(""" select parent, purchase_order, purchase_receipt, po_detail, project from `tabPurchase Invoice Item` - where parent in (%s) and (ifnull(purchase_order, '') != '' or ifnull(purchase_receipt, '') != '') + where parent in (%s) """ % ', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1) invoice_po_pr_map = {} From fd3998cfc913707a699c17be2f0322d0b91bf227 Mon Sep 17 00:00:00 2001 From: Zlash65 Date: Tue, 12 Feb 2019 11:27:23 +0530 Subject: [PATCH 08/17] fix: make branch as link field --- erpnext/hr/doctype/salary_slip/salary_slip.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.json b/erpnext/hr/doctype/salary_slip/salary_slip.json index 83afa8c6b5..76e43d6ea7 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.json +++ b/erpnext/hr/doctype/salary_slip/salary_slip.json @@ -195,7 +195,7 @@ "columns": 0, "fetch_from": "employee.branch", "fieldname": "branch", - "fieldtype": "Read Only", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -208,11 +208,11 @@ "no_copy": 0, "oldfieldname": "branch", "oldfieldtype": "Link", - "options": "", + "options": "Branch", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1906,7 +1906,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2019-01-30 11:28:11.774739", + "modified": "2019-02-12 11:24:20.848207", "modified_by": "Administrator", "module": "HR", "name": "Salary Slip", From b614fb1d4523287931e96130f30a64943192637a Mon Sep 17 00:00:00 2001 From: Zlash65 Date: Tue, 12 Feb 2019 11:30:58 +0530 Subject: [PATCH 09/17] fix: make finance book field as link field and rectify fetch_from --- erpnext/assets/doctype/asset/asset.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index 6b3c3cc73d..bbe92f636a 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -1812,8 +1812,9 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_from": "company.default_finance_book", "fieldname": "default_finance_book", - "fieldtype": "Read Only", + "fieldtype": "Link", "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -1824,12 +1825,12 @@ "label": "Default Finance Book", "length": 0, "no_copy": 0, - "options": "company.default_finance_book", + "options": "Finance Book", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1882,7 +1883,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2019-01-15 16:12:48.314196", + "modified": "2019-02-12 11:29:01.747819", "modified_by": "Administrator", "module": "Assets", "name": "Asset", From fc88029d7d753cc73670f44a3833b6cb3945e86c Mon Sep 17 00:00:00 2001 From: Zlash65 Date: Tue, 12 Feb 2019 11:38:27 +0530 Subject: [PATCH 10/17] fix: fix item field for clinical procedure template --- .../clinical_procedure_template.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json index df56918b9c..26564a34ce 100644 --- a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json +++ b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, @@ -55,7 +56,7 @@ "collapsible": 0, "columns": 0, "fieldname": "item_code", - "fieldtype": "Read Only", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -71,7 +72,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -707,7 +708,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-08-08 13:00:06.260997", + "modified": "2019-02-12 11:37:18.713344", "modified_by": "Administrator", "module": "Healthcare", "name": "Clinical Procedure Template", From e0412a177c22da443a0d88168d01909dcffc234f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 12 Feb 2019 11:47:16 +0530 Subject: [PATCH 11/17] fix: validation message for work order --- erpnext/stock/doctype/stock_entry/stock_entry.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 5d3c6c4adc..5772c67cf9 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -293,8 +293,9 @@ class StockEntry(StockController): total_completed_qty = flt(self.fg_completed_qty) + flt(prod_order.produced_qty) completed_qty = d.completed_qty + (allowance_percentage/100 * d.completed_qty) if total_completed_qty > flt(completed_qty): - frappe.throw(_("Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order # {3}. Please update operation status via Time Logs") - .format(d.idx, d.operation, total_completed_qty, self.work_order), OperationsNotCompleteError) + job_card = frappe.db.get_value('Job Card', {'operation_id': d.name}, 'name') + frappe.throw(_("Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order # {3}. Please update operation status via Job Card # {4}") + .format(d.idx, d.operation, total_completed_qty, self.work_order, job_card), OperationsNotCompleteError) def check_duplicate_entry_for_work_order(self): other_ste = [t[0] for t in frappe.db.get_values("Stock Entry", { From da7c20e47423461ca28439b347224b033dbfb77d Mon Sep 17 00:00:00 2001 From: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com> Date: Tue, 12 Feb 2019 12:55:50 +0530 Subject: [PATCH 12/17] fix: Validate task dates in project (#16586) * fix: Validate task dates in project * fix: Test case fix and validation only if date exists * fix: Added dates in error messages --- erpnext/projects/doctype/project/project.py | 20 +++++++++++++++++++- erpnext/projects/doctype/task/task.py | 6 ------ erpnext/projects/doctype/task/test_task.py | 11 +---------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 3b42f6a69d..e3fd1a8622 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -66,11 +66,11 @@ class Project(Document): def validate(self): self.validate_project_name() - self.validate_dates() self.validate_weights() self.sync_tasks() self.tasks = [] self.load_tasks() + self.validate_dates() self.send_welcome_email() self.update_percent_complete() @@ -79,6 +79,24 @@ class Project(Document): frappe.throw(_("Project {0} already exists").format(frappe.safe_decode(self.project_name))) def validate_dates(self): + if self.tasks: + for d in self.tasks: + if self.expected_start_date: + if d.start_date and getdate(d.start_date) < getdate(self.expected_start_date): + frappe.throw(_("Start date of task {0} cannot be less than {1} expected start date {2}") + .format(d.title, self.name, self.expected_start_date)) + if d.end_date and getdate(d.end_date) < getdate(self.expected_start_date): + frappe.throw(_("End date of task {0} cannot be less than {1} expected start date {2}") + .format(d.title, self.name, self.expected_start_date)) + + if self.expected_end_date: + if d.start_date and getdate(d.start_date) > getdate(self.expected_end_date): + frappe.throw(_("Start date of task {0} cannot be greater than {1} expected end date {2}") + .format(d.title, self.name, self.expected_end_date)) + if d.end_date and getdate(d.end_date) > getdate(self.expected_end_date): + frappe.throw(_("End date of task {0} cannot be greater than {1} expected end date {2}") + .format(d.title, self.name, self.expected_end_date)) + if self.expected_start_date and self.expected_end_date: if getdate(self.expected_end_date) < getdate(self.expected_start_date): frappe.throw(_("Expected End Date can not be less than Expected Start Date")) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 371fc5c79b..fffa9c1657 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -44,12 +44,6 @@ class Task(NestedSet): if self.act_start_date and self.act_end_date and getdate(self.act_start_date) > getdate(self.act_end_date): frappe.throw(_("'Actual Start Date' can not be greater than 'Actual End Date'")) - if(self.project): - if frappe.db.exists("Project", self.project): - expected_end_date = frappe.db.get_value("Project", self.project, "expected_end_date") - if self.exp_end_date and expected_end_date and getdate(self.exp_end_date) > getdate(expected_end_date) : - frappe.throw(_("Expected end date cannot be after Project: '{0}' Expected end date").format(self.project), EndDateCannotBeGreaterThanProjectEndDateError) - def validate_status(self): if self.status!=self.get_db_value("status") and self.status == "Closed": for d in self.depends_on: diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py index 6fb5412473..9971946cb4 100644 --- a/erpnext/projects/doctype/task/test_task.py +++ b/erpnext/projects/doctype/task/test_task.py @@ -5,7 +5,7 @@ import frappe import unittest from frappe.utils import getdate, nowdate, add_days -from erpnext.projects.doctype.task.task import CircularReferenceError, EndDateCannotBeGreaterThanProjectEndDateError +from erpnext.projects.doctype.task.task import CircularReferenceError class TestTask(unittest.TestCase): def test_circular_reference(self): @@ -97,15 +97,6 @@ class TestTask(unittest.TestCase): self.assertEqual(frappe.db.get_value("Task", task.name, "status"), "Overdue") - def test_end_date_validation(self): - task_end = create_task("Testing_Enddate_validation", add_days(nowdate(), 35), add_days(nowdate(), 45), save=False) - pro = frappe.get_doc("Project", task_end.project) - pro.expected_end_date = add_days(nowdate(), 40) - pro.save() - self.assertRaises(EndDateCannotBeGreaterThanProjectEndDateError, task_end.save) - - - def create_task(subject, start=None, end=None, depends_on=None, project=None, save=True): if not frappe.db.exists("Task", subject): task = frappe.new_doc('Task') From 6837ae3377917742ef56d8b15b9019db5a83510f Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 12 Feb 2019 16:54:29 +0550 Subject: [PATCH 13/17] bumped to version 11.1.5 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 89ac6d9b18..40e094d1ba 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '11.1.4' +__version__ = '11.1.5' def get_default_company(user=None): '''Get default company for user''' From 1a3c27bbeae137d616c1641d3bd82cf744dbe25a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 12 Feb 2019 17:38:37 +0530 Subject: [PATCH 14/17] fix: Make work order from production plan considering already ordered qty --- .../manufacturing/doctype/production_plan/production_plan.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index d17adf6369..97a8ea7e3c 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -276,8 +276,8 @@ class ProductionPlan(Document): item_dict[(d.item_code, d.material_request_item, d.warehouse)] = item_details else: item_details.update({ - "qty":flt(item_dict.get((d.item_code, d.sales_order, d.warehouse),{}) - .get("qty")) + flt(d.planned_qty) + "qty": flt(item_dict.get((d.item_code, d.sales_order, d.warehouse),{}) + .get("qty")) + (flt(d.planned_qty) - flt(d.ordered_qty)) }) item_dict[(d.item_code, d.sales_order, d.warehouse)] = item_details From 4d1bc0ca853030bdbcaec5a6ca4fcd4063fe399e Mon Sep 17 00:00:00 2001 From: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com> Date: Wed, 13 Feb 2019 16:58:46 +0530 Subject: [PATCH 15/17] fix: Add total row in analytics report (#16648) --- .../buying/report/purchase_analytics/purchase_analytics.json | 5 +++-- .../report/production_analytics/production_analytics.json | 5 +++-- erpnext/selling/report/sales_analytics/sales_analytics.json | 5 +++-- erpnext/stock/report/stock_analytics/stock_analytics.json | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/erpnext/buying/report/purchase_analytics/purchase_analytics.json b/erpnext/buying/report/purchase_analytics/purchase_analytics.json index 996e3eef45..7ce779d773 100644 --- a/erpnext/buying/report/purchase_analytics/purchase_analytics.json +++ b/erpnext/buying/report/purchase_analytics/purchase_analytics.json @@ -1,12 +1,13 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2018-10-05 16:08:24.156448", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2018-10-05 16:08:33.272201", + "modified": "2019-02-12 14:32:29.107109", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Analytics", diff --git a/erpnext/manufacturing/report/production_analytics/production_analytics.json b/erpnext/manufacturing/report/production_analytics/production_analytics.json index 023e0a8929..946cd33a1a 100644 --- a/erpnext/manufacturing/report/production_analytics/production_analytics.json +++ b/erpnext/manufacturing/report/production_analytics/production_analytics.json @@ -1,13 +1,14 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2018-10-11 19:28:37.085066", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", "letter_head": "", - "modified": "2018-10-11 19:28:37.085066", + "modified": "2019-02-12 14:32:16.392521", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Analytics", diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.json b/erpnext/selling/report/sales_analytics/sales_analytics.json index 5c95f28410..bd8230230b 100644 --- a/erpnext/selling/report/sales_analytics/sales_analytics.json +++ b/erpnext/selling/report/sales_analytics/sales_analytics.json @@ -1,12 +1,13 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2018-09-21 12:46:29.451048", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2018-09-21 12:46:29.451048", + "modified": "2019-02-12 14:30:40.043652", "modified_by": "Administrator", "module": "Selling", "name": "Sales Analytics", diff --git a/erpnext/stock/report/stock_analytics/stock_analytics.json b/erpnext/stock/report/stock_analytics/stock_analytics.json index efd5e99cbc..7a2ed2bfc2 100644 --- a/erpnext/stock/report/stock_analytics/stock_analytics.json +++ b/erpnext/stock/report/stock_analytics/stock_analytics.json @@ -1,12 +1,13 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2018-10-08 12:11:32.133020", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2018-10-08 12:18:42.834270", + "modified": "2019-02-12 14:32:22.874082", "modified_by": "Administrator", "module": "Stock", "name": "Stock Analytics", From 29fcb14c42130f87817f0da028cd1e3435b2a672 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 13 Feb 2019 17:18:12 +0530 Subject: [PATCH 16/17] fix: errors in deferred revenue booking --- erpnext/accounts/deferred_revenue.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 9ff8b04281..ae0b2593a1 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -60,7 +60,7 @@ def get_booking_dates(doc, item, start_date=None, end_date=None): deferred_account = "deferred_revenue_account" if doc.doctype=="Sales Invoice" else "deferred_expense_account" last_gl_entry, skip = False, False - booking_end_date = getdate(add_days(today(), -1)) if not end_date else end_date + booking_end_date = getdate(add_days(today(), -1) if not end_date else end_date) if booking_end_date < item.service_start_date or \ (item.service_stop_date and booking_end_date.month > item.service_stop_date.month): return None, None, None, True @@ -71,7 +71,7 @@ def get_booking_dates(doc, item, start_date=None, end_date=None): last_gl_entry = True booking_end_date = item.service_stop_date - booking_start_date = getdate(add_months(today(), -1)) if not start_date else start_date + booking_start_date = getdate(add_months(today(), -1) if not start_date else start_date) booking_start_date = booking_start_date \ if booking_start_date > item.service_start_date else item.service_start_date @@ -113,7 +113,6 @@ def calculate_amount_and_base_amount(doc, item, last_gl_entry, total_days, total group by voucher_detail_no '''.format(total_credit_debit, total_credit_debit_currency), (doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name), as_dict=True) - already_booked_amount = gl_entries_details[0].total_credit if gl_entries_details else 0 base_amount = flt(item.base_net_amount - already_booked_amount, item.precision("base_net_amount")) if account_currency==doc.company_currency: @@ -136,7 +135,7 @@ def book_deferred_income_or_expense(doc, start_date=None, end_date=None): get_booking_dates(doc, item, start_date, end_date) if skip: continue - total_days = date_diff(item.service_end_date, item.service_start_date) + total_days = date_diff(item.service_end_date, item.service_start_date) + 1 total_booking_days = date_diff(booking_end_date, booking_start_date) + 1 account_currency = get_account_currency(item.expense_account) @@ -175,6 +174,10 @@ def book_deferred_income_or_expense(doc, start_date=None, end_date=None): 'project': project }, account_currency) ) - if gl_entries: - make_gl_entries(gl_entries, cancel=(doc.docstatus == 2), merge_entries=True) + try: + make_gl_entries(gl_entries, cancel=(doc.docstatus == 2), merge_entries=True) + frappe.db.commit() + except: + frappe.db.rollback() + frappe.log_error(message = frappe.get_traceback(), title = _("Error while processing deferred accounting for {0}").format(doc.name)) \ No newline at end of file From 4902f7b2a05d4a54a6089f40f8b31af5e4877795 Mon Sep 17 00:00:00 2001 From: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com> Date: Thu, 14 Feb 2019 17:32:52 +0530 Subject: [PATCH 17/17] fix: Show tasks in timesheet with status as Closed (#16660) --- erpnext/projects/doctype/timesheet/timesheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index e890befd1a..8811ab9543 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -18,7 +18,7 @@ frappe.ui.form.on("Timesheet", { return{ filters: { 'project': child.project, - 'status': ["!=", "Closed"] + 'status': ["!=", "Cancelled"] } } }