Merge pull request #21992 from rohitwaghchaure/fixed-forecasting-data-and-changed-columns-pre-release
refactor: display the order's data for past period
diff --git a/erpnext/accounts/desk_page/accounting/accounting.json b/erpnext/accounts/desk_page/accounting/accounting.json
index 576d10c..42fb9f4 100644
--- a/erpnext/accounts/desk_page/accounting/accounting.json
+++ b/erpnext/accounts/desk_page/accounting/accounting.json
@@ -18,7 +18,7 @@
{
"hidden": 0,
"label": "Accounts Payable",
- "links": "[\n {\n \"description\": \"Bills raised by Suppliers.\",\n \"label\": \"Purchase Invoice\",\n \"name\": \"Purchase Invoice\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Supplier database.\",\n \"label\": \"Supplier\",\n \"name\": \"Supplier\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Bank/Cash transactions against party or for internal transfer\",\n \"label\": \"Payment Entry\",\n \"name\": \"Payment Entry\",\n \"type\": \"doctype\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Accounts Payable\",\n \"name\": \"Accounts Payable\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Accounts Payable Summary\",\n \"name\": \"Accounts Payable Summary\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Purchase Register\",\n \"name\": \"Purchase Register\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Item-wise Purchase Register\",\n \"name\": \"Item-wise Purchase Register\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Purchase Order Items To Be Billed\",\n \"name\": \"Purchase Order Items To Be Billed\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Received Items To Be Billed\",\n \"name\": \"Received Items To Be Billed\",\n \"type\": \"report\"\n }\n]"
+ "links": "[\n {\n \"description\": \"Bills raised by Suppliers.\",\n \"label\": \"Purchase Invoice\",\n \"name\": \"Purchase Invoice\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Supplier database.\",\n \"label\": \"Supplier\",\n \"name\": \"Supplier\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Bank/Cash transactions against party or for internal transfer\",\n \"label\": \"Payment Entry\",\n \"name\": \"Payment Entry\",\n \"type\": \"doctype\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Accounts Payable\",\n \"name\": \"Accounts Payable\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Accounts Payable Summary\",\n \"name\": \"Accounts Payable Summary\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Purchase Register\",\n \"name\": \"Purchase Register\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Item-wise Purchase Register\",\n \"name\": \"Item-wise Purchase Register\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Order\"\n ],\n \"doctype\": \"Purchase Order\",\n \"is_query_report\": true,\n \"label\": \"Purchase Order Analysis\",\n \"name\": \"Purchase Order Analysis\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Invoice\"\n ],\n \"doctype\": \"Purchase Invoice\",\n \"is_query_report\": true,\n \"label\": \"Received Items To Be Billed\",\n \"name\": \"Received Items To Be Billed\",\n \"type\": \"report\"\n }\n]"
},
{
"hidden": 0,
@@ -94,10 +94,11 @@
"docstatus": 0,
"doctype": "Desk Page",
"extends_another_page": 0,
+ "hide_custom": 0,
"idx": 0,
"is_standard": 1,
"label": "Accounting",
- "modified": "2020-05-18 17:27:26.882340",
+ "modified": "2020-05-27 20:34:50.949772",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting",
diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
index 4d8da37..699eb08 100644
--- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
+++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
@@ -11,21 +11,9 @@
};
});
- frm.set_query('cost_center', 'invoices', function(doc, cdt, cdn) {
- return {
- filters: {
- 'company': doc.company
- }
- };
- });
-
- frm.set_query('cost_center', function(doc) {
- return {
- filters: {
- 'company': doc.company
- }
- };
- });
+ if (frm.doc.company) {
+ frm.trigger('setup_company_filters');
+ }
},
refresh: function(frm) {
@@ -51,19 +39,50 @@
});
},
- company: function(frm) {
- frappe.call({
- method: 'erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account',
- args: {
- company: frm.doc.company
- },
- callback: (r) => {
- if (r.message) {
- frm.doc.__onload.temporary_opening_account = r.message;
- frm.trigger('update_invoice_table');
+ setup_company_filters: function(frm) {
+ frm.set_query('cost_center', 'invoices', function(doc, cdt, cdn) {
+ return {
+ filters: {
+ 'company': doc.company
+ }
+ };
+ });
+
+ frm.set_query('cost_center', function(doc) {
+ return {
+ filters: {
+ 'company': doc.company
+ }
+ };
+ });
+
+ frm.set_query('temporary_opening_account', 'invoices', function(doc, cdt, cdn) {
+ return {
+ filters: {
+ 'company': doc.company
}
}
- })
+ });
+ },
+
+ company: function(frm) {
+ if (frm.doc.company) {
+
+ frm.trigger('setup_company_filters');
+
+ frappe.call({
+ method: 'erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account',
+ args: {
+ company: frm.doc.company
+ },
+ callback: (r) => {
+ if (r.message) {
+ frm.doc.__onload.temporary_opening_account = r.message;
+ frm.trigger('update_invoice_table');
+ }
+ }
+ })
+ }
},
invoice_type: function(frm) {
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index a0a1b97..c6f852a 100755
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -534,7 +534,7 @@
def get_ageing_data(self, entry_date, row):
# [0-30, 30-60, 60-90, 90-120, 120-above]
- row.range1 = row.range2 = row.range3 = row.range4 = range5 = 0.0
+ row.range1 = row.range2 = row.range3 = row.range4 = row.range5 = 0.0
if not (self.age_as_on and entry_date):
return
diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/__init__.py b/erpnext/accounts/report/purchase_order_items_to_be_billed/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/accounts/report/purchase_order_items_to_be_billed/__init__.py
+++ /dev/null
diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.js b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.js
deleted file mode 100644
index 24c9592..0000000
--- a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.query_reports["Purchase Order Items To Be Billed"] = {
- "filters": [
-
- ]
-}
diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json
deleted file mode 100644
index 3645ec0..0000000
--- a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "add_total_row": 1,
- "apply_user_permissions": 1,
- "creation": "2013-05-28 15:54:16",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 3,
- "is_standard": "Yes",
- "modified": "2017-02-24 20:00:24.302988",
- "modified_by": "Administrator",
- "module": "Accounts",
- "name": "Purchase Order Items To Be Billed",
- "owner": "Administrator",
- "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order`.`supplier_name` as \"Supplier Name::150\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.base_amount as \"Amount:Currency:100\",\n\t(`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) as \"Billed Amount:Currency:100\", \n\t(`tabPurchase Order Item`.base_amount - (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1))) as \"Amount to Bill:Currency:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n\t`tabPurchase Order`.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status != \"Closed\"\n and `tabPurchase Order Item`.amount > 0\n\tand (`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) < `tabPurchase Order Item`.base_amount\norder by `tabPurchase Order`.transaction_date asc",
- "ref_doctype": "Purchase Invoice",
- "report_name": "Purchase Order Items To Be Billed",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "Accounts User"
- },
- {
- "role": "Purchase User"
- },
- {
- "role": "Auditor"
- },
- {
- "role": "Accounts Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.py b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.py
deleted file mode 100644
index 99d0a36..0000000
--- a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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 erpnext.accounts.report.non_billed_report import get_ordered_to_be_billed_data
-
-def execute(filters=None):
- columns = get_column()
- args = get_args()
- data = get_ordered_to_be_billed_data(args)
- return columns, data
-
-def get_column():
- return [
- _("Purchase Order") + ":Link/Purchase Order:120", _("Status") + "::120", _("Date") + ":Date:100",
- _("Suplier") + ":Link/Supplier:120", _("Suplier Name") + "::120",
- _("Project") + ":Link/Project:120", _("Item Code") + ":Link/Item:120",
- _("Amount") + ":Currency:100", _("Billed Amount") + ":Currency:100", _("Amount to Bill") + ":Currency:100",
- _("Item Name") + "::120", _("Description") + "::120", _("Company") + ":Link/Company:120",
- ]
-
-def get_args():
- return {'doctype': 'Purchase Order', 'party': 'supplier',
- 'date': 'transaction_date', 'order': 'transaction_date', 'order_by': 'asc'}
diff --git a/erpnext/buying/dashboard_fixtures.py b/erpnext/buying/dashboard_fixtures.py
index 0e2f78f..186bfb2 100644
--- a/erpnext/buying/dashboard_fixtures.py
+++ b/erpnext/buying/dashboard_fixtures.py
@@ -41,7 +41,7 @@
{ "chart": "Top Suppliers", "width": "Full"}
],
"cards": [
- { "card": "This Year Purchases"},
+ { "card": "Annual Purchase"},
{ "card": "Purchase Orders to Receive"},
{ "card": "Purchase Orders to Bill"},
{ "card": "Active Suppliers"}
@@ -142,7 +142,7 @@
def get_number_cards():
return [
{
- "name": "This Year Purchases",
+ "name": "Annual Purchase",
"aggregate_function_based_on": "base_net_total",
"doctype": "Number Card",
"document_type": "Purchase Order",
@@ -155,7 +155,7 @@
]),
"function": "Sum",
"is_public": 1,
- "label": _("This Year Purchases"),
+ "label": _("Annual Purchase"),
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly"
diff --git a/erpnext/buying/desk_page/buying/buying.json b/erpnext/buying/desk_page/buying/buying.json
index ee18545..88f0a2b 100644
--- a/erpnext/buying/desk_page/buying/buying.json
+++ b/erpnext/buying/desk_page/buying/buying.json
@@ -55,7 +55,7 @@
"idx": 0,
"is_standard": 1,
"label": "Buying",
- "modified": "2020-05-19 19:44:36.260982",
+ "modified": "2020-05-27 19:15:05.067756",
"modified_by": "Administrator",
"module": "Buying",
"name": "Buying",
@@ -66,7 +66,7 @@
"shortcuts": [
{
"color": "#cef6d1",
- "format": "{} available",
+ "format": "{} Available",
"label": "Item",
"link_to": "Item",
"stats_filter": "{\n \"disabled\": 0\n}",
@@ -82,7 +82,7 @@
},
{
"color": "#ffe8cd",
- "format": "{} to Receive",
+ "format": "{} To Receive",
"label": "Purchase Order",
"link_to": "Purchase Order",
"stats_filter": "{\n \"company\": [\"like\", '%' + frappe.defaults.get_global_default(\"company\") + '%'],\n \"status\":[\"in\", [\"To Receive\", \"To Receive and Bill\"]]\n}",
@@ -99,7 +99,7 @@
"type": "Report"
},
{
- "label": "Buying Dashboard",
+ "label": "Dashboard",
"link_to": "Buying",
"type": "Dashboard"
}
diff --git a/erpnext/buying/module_onboarding/buying/buying.json b/erpnext/buying/module_onboarding/buying/buying.json
index 8c798b3..8fe2f38 100644
--- a/erpnext/buying/module_onboarding/buying/buying.json
+++ b/erpnext/buying/module_onboarding/buying/buying.json
@@ -19,7 +19,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/buying",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-19 20:03:55.776080",
+ "modified": "2020-05-27 17:17:52.075947",
"modified_by": "Administrator",
"module": "Buying",
"name": "Buying",
@@ -49,6 +49,6 @@
],
"subtitle": "Products, Purchases, Analysis and more.",
"success_message": "The Buying Module is all set up!",
- "title": "Let's Setup the Buying Module.",
+ "title": "Let's Set Up the Buying Module.",
"user_can_dismiss": 1
}
\ No newline at end of file
diff --git a/erpnext/buying/report/requested_items_to_be_ordered/__init__.py b/erpnext/buying/report/requested_items_to_be_ordered/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/buying/report/requested_items_to_be_ordered/__init__.py
+++ /dev/null
diff --git a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json b/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json
deleted file mode 100644
index bb11269..0000000
--- a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "add_total_row": 1,
- "creation": "2013-05-13 16:10:02",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 3,
- "is_standard": "Yes",
- "modified": "2019-04-18 19:02:03.099422",
- "modified_by": "Administrator",
- "module": "Buying",
- "name": "Requested Items To Be Ordered",
- "owner": "Administrator",
- "prepared_report": 0,
- "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tsum(ifnull(mr_item.stock_qty, 0)) as \"Qty:Float:100\",\n\tifnull(mr_item.stock_uom, '') as \"UOM:Link/UOM:100\",\n\tsum(ifnull(mr_item.ordered_qty, 0)) as \"Ordered Qty:Float:100\", \n\t(sum(mr_item.stock_qty) - sum(ifnull(mr_item.ordered_qty, 0))) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\",\n\tmr.company as \"Company:Link/Company:\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\ngroup by mr.name, mr_item.item_code\nhaving\n\tsum(ifnull(mr_item.ordered_qty, 0)) < sum(ifnull(mr_item.stock_qty, 0))\norder by mr.transaction_date asc",
- "ref_doctype": "Purchase Order",
- "report_name": "Requested Items To Be Ordered",
- "report_type": "Query Report",
- "roles": [
- {
- "role": "Stock User"
- },
- {
- "role": "Purchase Manager"
- },
- {
- "role": "Purchase User"
- }
- ]
- }
\ No newline at end of file
diff --git a/erpnext/buying/report/requested_items_to_order/requested_items_to_order.js b/erpnext/buying/report/requested_items_to_order/requested_items_to_order.js
index 21adb13..9555e82 100644
--- a/erpnext/buying/report/requested_items_to_order/requested_items_to_order.js
+++ b/erpnext/buying/report/requested_items_to_order/requested_items_to_order.js
@@ -35,7 +35,7 @@
"fieldtype": "Link",
"width": "80",
"options": "Material Request",
- "get_query": () =>{
+ "get_query": () => {
return {
filters: {
"docstatus": 1,
@@ -46,6 +46,18 @@
}
},
{
+ "fieldname": "item_code",
+ "label": __("Item"),
+ "fieldtype": "Link",
+ "width": "80",
+ "options": "Item",
+ "get_query": () => {
+ return {
+ query: "erpnext.controllers.queries.item_query"
+ }
+ }
+ },
+ {
"fieldname": "group_by_mr",
"label": __("Group by Material Request"),
"fieldtype": "Check",
diff --git a/erpnext/buying/report/requested_items_to_order/requested_items_to_order.py b/erpnext/buying/report/requested_items_to_order/requested_items_to_order.py
index a021d3c..cca01b1 100644
--- a/erpnext/buying/report/requested_items_to_order/requested_items_to_order.py
+++ b/erpnext/buying/report/requested_items_to_order/requested_items_to_order.py
@@ -44,6 +44,9 @@
if filters.get("material_request"):
conditions += " and mr.name = '{0}'".format(filters.get("material_request"))
+ if filters.get("item_code"):
+ conditions += " and mr_item.item_code = '{0}'".format(filters.get("item_code"))
+
return conditions
def get_data(filters, conditions):
@@ -74,25 +77,41 @@
return data
+def update_qty_columns(row_to_update, data_row):
+ fields = ["qty", "ordered_qty", "qty_to_order"]
+ for field in fields:
+ row_to_update[field] += flt(data_row[field])
+
def prepare_data(data, filters):
"""Prepare consolidated Report data and Chart data"""
- material_request_map = {}
+ material_request_map, item_qty_map = {}, {}
for row in data:
- if not row["material_request"] in material_request_map:
- # create an entry with mr as key
- row_copy = copy.deepcopy(row)
- material_request_map[row["material_request"]] = row_copy
+ # item wise map for charts
+ if not row["item_code"] in item_qty_map:
+ item_qty_map[row["item_code"]] = {
+ "qty" : row["qty"],
+ "ordered_qty" : row["ordered_qty"],
+ "qty_to_order" : row["qty_to_order"]
+ }
else:
- mr_row = material_request_map[row["material_request"]]
- mr_row["required_date"] = min(getdate(mr_row["required_date"]), getdate(row["required_date"]))
+ item_entry = item_qty_map[row["item_code"]]
+ update_qty_columns(item_entry, row)
- #sum numeric rows
- fields = ["qty", "ordered_qty", "qty_to_order"]
- for field in fields:
- mr_row[field] = flt(mr_row[field]) + flt(row[field])
+ if filters.get("group_by_mr"):
+ # consolidated material request map for group by filter
+ if not row["material_request"] in material_request_map:
+ # create an entry with mr as key
+ row_copy = copy.deepcopy(row)
+ material_request_map[row["material_request"]] = row_copy
+ else:
+ mr_row = material_request_map[row["material_request"]]
+ mr_row["required_date"] = min(getdate(mr_row["required_date"]), getdate(row["required_date"]))
- chart_data = prepare_chart_data(material_request_map)
+ #sum numeric columns
+ update_qty_columns(mr_row, row)
+
+ chart_data = prepare_chart_data(item_qty_map)
if filters.get("group_by_mr"):
data =[]
@@ -102,12 +121,15 @@
return data, chart_data
-def prepare_chart_data(data):
+def prepare_chart_data(item_data):
labels, qty_to_order, ordered_qty = [], [], []
- for row in data:
- mr_row = data[row]
- labels.append(mr_row["material_request"])
+ if len(item_data) > 30:
+ item_data = dict(list(item_data.items())[:30])
+
+ for row in item_data:
+ mr_row = item_data[row]
+ labels.append(row)
qty_to_order.append(mr_row["qty_to_order"])
ordered_qty.append(mr_row["ordered_qty"])
diff --git a/erpnext/crm/module_onboarding/crm/crm.json b/erpnext/crm/module_onboarding/crm/crm.json
index 694763f..9b3d91e 100644
--- a/erpnext/crm/module_onboarding/crm/crm.json
+++ b/erpnext/crm/module_onboarding/crm/crm.json
@@ -16,7 +16,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/CRM",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-20 12:53:47.029412",
+ "modified": "2020-05-27 11:33:09.941263",
"modified_by": "Administrator",
"module": "CRM",
"name": "CRM",
diff --git a/erpnext/crm/onboarding_step/create_and_send_quotation/create_and_send_quotation.json b/erpnext/crm/onboarding_step/create_and_send_quotation/create_and_send_quotation.json
index a6edfd7..9201d77 100644
--- a/erpnext/crm/onboarding_step/create_and_send_quotation/create_and_send_quotation.json
+++ b/erpnext/crm/onboarding_step/create_and_send_quotation/create_and_send_quotation.json
@@ -8,12 +8,12 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-14 17:30:07.887411",
+ "modified": "2020-05-27 11:30:28.237263",
"modified_by": "Administrator",
"name": "Create and Send Quotation",
"owner": "Administrator",
"reference_document": "Quotation",
- "show_full_form": 0,
+ "show_full_form": 1,
"title": "Create and Send Quotation",
- "validate_action": 0
+ "validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/crm/onboarding_step/create_lead/create_lead.json b/erpnext/crm/onboarding_step/create_lead/create_lead.json
index 47a45d7..6ff0bd6 100644
--- a/erpnext/crm/onboarding_step/create_lead/create_lead.json
+++ b/erpnext/crm/onboarding_step/create_lead/create_lead.json
@@ -8,12 +8,12 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-14 17:28:36.441387",
+ "modified": "2020-05-27 11:30:59.493720",
"modified_by": "Administrator",
"name": "Create Lead",
"owner": "Administrator",
"reference_document": "Lead",
- "show_full_form": 0,
+ "show_full_form": 1,
"title": "Create Lead",
- "validate_action": 0
+ "validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/crm/onboarding_step/create_opportunity/create_opportunity.json b/erpnext/crm/onboarding_step/create_opportunity/create_opportunity.json
index 231cf17..9f996d9 100644
--- a/erpnext/crm/onboarding_step/create_opportunity/create_opportunity.json
+++ b/erpnext/crm/onboarding_step/create_opportunity/create_opportunity.json
@@ -15,5 +15,5 @@
"reference_document": "Opportunity",
"show_full_form": 0,
"title": "Create Opportunity",
- "validate_action": 0
+ "validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/crm/onboarding_step/introduction_to_crm/introduction_to_crm.json b/erpnext/crm/onboarding_step/introduction_to_crm/introduction_to_crm.json
index 552ade0..545a756 100644
--- a/erpnext/crm/onboarding_step/introduction_to_crm/introduction_to_crm.json
+++ b/erpnext/crm/onboarding_step/introduction_to_crm/introduction_to_crm.json
@@ -8,12 +8,12 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-14 17:28:16.448676",
+ "modified": "2020-05-27 11:28:07.452857",
"modified_by": "Administrator",
"name": "Introduction to CRM",
"owner": "Administrator",
"show_full_form": 0,
"title": "Introduction to CRM",
- "validate_action": 0,
+ "validate_action": 1,
"video_url": "https://www.youtube.com/watch?v=o9XCSZHJfpA"
}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json b/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json
index 25cb9fe..208e394 100644
--- a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json
+++ b/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json
@@ -1,6 +1,6 @@
{
"action": "Create Entry",
- "creation": "2020-05-14 11:47:34.700174",
+ "creation": "2020-05-27 11:47:34.700174",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
@@ -13,7 +13,7 @@
"name": "Create Holiday list",
"owner": "Administrator",
"reference_document": "Holiday List",
- "show_full_form": 0,
+ "show_full_form": 1,
"title": "Create Holiday list",
"validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json b/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json
index e8b97c2..8cbfc5c 100644
--- a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json
+++ b/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json
@@ -1,6 +1,6 @@
{
"action": "Create Entry",
- "creation": "2020-05-20 11:17:31.119312",
+ "creation": "2020-05-27 11:17:31.119312",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
@@ -13,7 +13,7 @@
"name": "Create Leave Type",
"owner": "Administrator",
"reference_document": "Leave Type",
- "show_full_form": 0,
+ "show_full_form": 1,
"title": "Create Leave Type",
"validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py
index e43b98a..c29d4ba 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/job_card.py
@@ -102,8 +102,11 @@
workstation_doc = frappe.get_cached_doc("Workstation", self.workstation)
if (not workstation_doc.working_hours or
cint(frappe.db.get_single_value("Manufacturing Settings", "allow_overtime"))):
- row.remaining_time_in_mins -= time_diff_in_minutes(row.planned_end_time,
- row.planned_start_time)
+ if get_datetime(row.planned_end_time) < get_datetime(row.planned_start_time):
+ row.planned_end_time = add_to_date(row.planned_start_time, minutes=row.time_in_mins)
+ row.remaining_time_in_mins = 0.0
+ else:
+ row.remaining_time_in_mins -= time_diff_in_minutes(row.planned_end_time, row.planned_start_time)
self.update_time_logs(row)
return
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.js b/erpnext/manufacturing/doctype/production_plan/production_plan.js
index 64c952b..1a64bc5 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.js
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.js
@@ -201,9 +201,9 @@
title: title,
fields: [
{
- "fieldtype": "Table MultiSelect", "label": __("Source Warehouses"),
+ "fieldtype": "Table MultiSelect", "label": __("Source Warehouses (Optional)"),
"fieldname": "warehouses", "options": "Production Plan Material Request Warehouse",
- "description": "System will pickup the materials from the selected warehouses",
+ "description": __("System will pickup the materials from the selected warehouses. If not specified, system will create material request for purchase."),
get_query: function () {
return {
filters: {
diff --git a/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py b/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py
index 1279011..e7d9265 100644
--- a/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py
+++ b/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.py
@@ -103,7 +103,7 @@
"fieldtype": "Int",
"width": 140
}, {
- "label": _("Subassembly BOM Count"),
+ "label": _("Sub-assembly BOM Count"),
"fieldname": "used_as_subassembly_items",
"fieldtype": "Int",
"width": 180
diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
index b7e3071..33953b1 100644
--- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
+++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
@@ -13,17 +13,38 @@
reqd: 1
},
{
- label: __("From Date"),
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: frappe.defaults.get_user_default("fiscal_year"),
+ reqd: 1,
+ on_change: function(query_report) {
+ var fiscal_year = query_report.get_values().fiscal_year;
+ if (!fiscal_year) {
+ return;
+ }
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+ frappe.query_report.set_filter_value({
+ from_date: fy.year_start_date,
+ to_date: fy.year_end_date
+ });
+ });
+ }
+ },
+ {
+ label: __("From Posting Date"),
fieldname:"from_date",
fieldtype: "Date",
- default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+ default: frappe.defaults.get_user_default("year_start_date"),
reqd: 1
},
{
- label: __("To Date"),
+ label: __("To Posting Datetime"),
fieldname:"to_date",
fieldtype: "Date",
- default: frappe.datetime.get_today(),
+ default: frappe.defaults.get_user_default("year_end_date"),
reqd: 1,
},
{
diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py
index ae1e4f3..953d820 100644
--- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py
+++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py
@@ -15,9 +15,12 @@
return columns, data, None, chart_data
def get_data(filters):
- query_filters = {"docstatus": ("<", 2)}
+ query_filters = {
+ "docstatus": ("=", 1),
+ "posting_date": ("between", [filters.from_date, filters.to_date])
+ }
- fields = ["name", "status", "work_order", "production_item", "item_name",
+ fields = ["name", "status", "work_order", "production_item", "item_name", "posting_date",
"total_completed_qty", "workstation", "operation", "employee_name", "total_time_in_mins"]
for field in ["work_order", "workstation", "operation", "company"]:
@@ -30,12 +33,19 @@
if not data: return []
job_cards = [d.name for d in data]
+
+ job_card_time_filter = {
+ "docstatus": 1,
+ "parent": ("in", job_cards),
+ }
+
job_card_time_details = {}
for job_card_data in frappe.get_all("Job Card Time Log",
fields=["min(from_time) as from_time", "max(to_time) as to_time", "parent"],
- filters={"docstatus": ("<", 2), "parent": ("in", job_cards)}, group_by="parent"):
+ filters=job_card_time_filter, group_by="parent", debug=1):
job_card_time_details[job_card_data.parent] = job_card_data
+ res = []
for d in data:
if d.status == "Material Transferred":
d.status = "Open"
@@ -43,8 +53,9 @@
if job_card_time_details.get(d.name):
d.from_time = job_card_time_details.get(d.name).from_time
d.to_time = job_card_time_details.get(d.name).to_time
+ res.append(d)
- return data
+ return res
def get_chart_data(job_card_details, filters):
labels, periodic_data = prepare_chart_data(job_card_details, filters)
@@ -86,10 +97,10 @@
labels.append(period)
for d in job_card_details:
- if getdate(d.from_time) >= from_date and getdate(d.to_time) <= end_date:
+ if getdate(d.posting_date) > from_date and getdate(d.posting_date) <= end_date:
status = "Completed" if d.status == "Completed" else "Pending"
- if periodic_data.get(status) and periodic_data.get(status).get(period):
+ if periodic_data.get(status).get(period):
periodic_data[status][period] += 1
else:
periodic_data[status][period] = 1
@@ -105,6 +116,12 @@
"options": "Job Card",
"width": 100
},
+ {
+ "label": _("Posting Date"),
+ "fieldname": "posting_date",
+ "fieldtype": "Date",
+ "width": 100
+ },
]
if not filters.get("status"):
diff --git a/erpnext/manufacturing/report/production_planning_report/production_planning_report.py b/erpnext/manufacturing/report/production_planning_report/production_planning_report.py
index b5e6c6f..5ac3923 100644
--- a/erpnext/manufacturing/report/production_planning_report/production_planning_report.py
+++ b/erpnext/manufacturing/report/production_planning_report/production_planning_report.py
@@ -220,6 +220,9 @@
if item_details:
warehouses = [item_details["default_warehouse"]]
+ if self.filters.raw_material_warehouse:
+ warehouses = get_child_warehouses(self.filters.raw_material_warehouse)
+
d.remaining_qty = d.required_qty
self.pick_materials_from_warehouses(d, data, warehouses)
diff --git a/erpnext/manufacturing/report/work_order_summary/work_order_summary.js b/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
index ec9fe35..2292865 100644
--- a/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
+++ b/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
@@ -13,17 +13,38 @@
reqd: 1
},
{
- label: __("From Date"),
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: frappe.defaults.get_user_default("fiscal_year"),
+ reqd: 1,
+ on_change: function(query_report) {
+ var fiscal_year = query_report.get_values().fiscal_year;
+ if (!fiscal_year) {
+ return;
+ }
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+ frappe.query_report.set_filter_value({
+ from_date: fy.year_start_date,
+ to_date: fy.year_end_date
+ });
+ });
+ }
+ },
+ {
+ label: __("From Posting Date"),
fieldname:"from_date",
fieldtype: "Date",
- default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+ default: frappe.defaults.get_user_default("year_start_date"),
reqd: 1
},
{
- label: __("To Date"),
+ label: __("To Posting Datetime"),
fieldname:"to_date",
fieldtype: "Date",
- default: frappe.datetime.get_today(),
+ default: frappe.defaults.get_user_default("year_end_date"),
reqd: 1,
},
{
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 481cd35..1d2bb12 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -692,3 +692,4 @@
erpnext.patches.v12_0.update_bom_in_so_mr
execute:frappe.delete_doc("Report", "Department Analytics")
execute:frappe.rename_doc("Desk Page", "Loan Management", "Loan", force=True)
+erpnext.patches.v13_0.delete_old_purchase_reports
\ No newline at end of file
diff --git a/erpnext/patches/v13_0/delete_old_purchase_reports.py b/erpnext/patches/v13_0/delete_old_purchase_reports.py
new file mode 100644
index 0000000..8271d2e
--- /dev/null
+++ b/erpnext/patches/v13_0/delete_old_purchase_reports.py
@@ -0,0 +1,15 @@
+# Copyright (c) 2019, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+
+import frappe
+
+def execute():
+ reports_to_delete = ["Requested Items To Be Ordered",
+ "Purchase Order Items To Be Received or Billed","Purchase Order Items To Be Received",
+ "Purchase Order Items To Be Billed"]
+
+ for report in reports_to_delete:
+ if frappe.db.exists("Report", report):
+ frappe.delete_doc("Report", report)
\ No newline at end of file
diff --git a/erpnext/stock/desk_page/stock/stock.json b/erpnext/stock/desk_page/stock/stock.json
index 4506664..9404292 100644
--- a/erpnext/stock/desk_page/stock/stock.json
+++ b/erpnext/stock/desk_page/stock/stock.json
@@ -33,7 +33,7 @@
{
"hidden": 0,
"label": "Key Reports",
- "links": "[\n {\n \"dependencies\": [\n \"Item Price\"\n ],\n \"doctype\": \"Item Price\",\n \"is_query_report\": false,\n \"label\": \"Item-wise Price List Rate\",\n \"name\": \"Item-wise Price List Rate\",\n \"onboard\": 1,\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Stock Entry\"\n ],\n \"doctype\": \"Stock Entry\",\n \"is_query_report\": true,\n \"label\": \"Stock Analytics\",\n \"name\": \"Stock Analytics\",\n \"onboard\": 1,\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Delivery Note\"\n ],\n \"doctype\": \"Delivery Note\",\n \"is_query_report\": true,\n \"label\": \"Delivery Note Trends\",\n \"name\": \"Delivery Note Trends\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Receipt\"\n ],\n \"doctype\": \"Purchase Receipt\",\n \"is_query_report\": true,\n \"label\": \"Purchase Receipt Trends\",\n \"name\": \"Purchase Receipt Trends\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Delivery Note\"\n ],\n \"doctype\": \"Delivery Note\",\n \"is_query_report\": true,\n \"label\": \"Ordered Items To Be Delivered\",\n \"name\": \"Ordered Items To Be Delivered\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Receipt\"\n ],\n \"doctype\": \"Purchase Receipt\",\n \"is_query_report\": true,\n \"label\": \"Purchase Order Items To Be Received\",\n \"name\": \"Purchase Order Items To Be Received\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Bin\"\n ],\n \"doctype\": \"Bin\",\n \"is_query_report\": true,\n \"label\": \"Item Shortage Report\",\n \"name\": \"Item Shortage Report\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Batch\"\n ],\n \"doctype\": \"Batch\",\n \"is_query_report\": true,\n \"label\": \"Batch-Wise Balance History\",\n \"name\": \"Batch-Wise Balance History\",\n \"type\": \"report\"\n }\n]"
+ "links": "[\n {\n \"dependencies\": [\n \"Item Price\"\n ],\n \"doctype\": \"Item Price\",\n \"is_query_report\": false,\n \"label\": \"Item-wise Price List Rate\",\n \"name\": \"Item-wise Price List Rate\",\n \"onboard\": 1,\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Stock Entry\"\n ],\n \"doctype\": \"Stock Entry\",\n \"is_query_report\": true,\n \"label\": \"Stock Analytics\",\n \"name\": \"Stock Analytics\",\n \"onboard\": 1,\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Delivery Note\"\n ],\n \"doctype\": \"Delivery Note\",\n \"is_query_report\": true,\n \"label\": \"Delivery Note Trends\",\n \"name\": \"Delivery Note Trends\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Receipt\"\n ],\n \"doctype\": \"Purchase Receipt\",\n \"is_query_report\": true,\n \"label\": \"Purchase Receipt Trends\",\n \"name\": \"Purchase Receipt Trends\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Delivery Note\"\n ],\n \"doctype\": \"Delivery Note\",\n \"is_query_report\": true,\n \"label\": \"Ordered Items To Be Delivered\",\n \"name\": \"Ordered Items To Be Delivered\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Purchase Order\"\n ],\n \"doctype\": \"Purchase Order\",\n \"is_query_report\": true,\n \"label\": \"Purchase Order Analysis\",\n \"name\": \"Purchase Order Analysis\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Bin\"\n ],\n \"doctype\": \"Bin\",\n \"is_query_report\": true,\n \"label\": \"Item Shortage Report\",\n \"name\": \"Item Shortage Report\",\n \"type\": \"report\"\n },\n {\n \"dependencies\": [\n \"Batch\"\n ],\n \"doctype\": \"Batch\",\n \"is_query_report\": true,\n \"label\": \"Batch-Wise Balance History\",\n \"name\": \"Batch-Wise Balance History\",\n \"type\": \"report\"\n }\n]"
},
{
"hidden": 0,
@@ -58,7 +58,7 @@
"idx": 0,
"is_standard": 1,
"label": "Stock",
- "modified": "2020-05-19 17:36:08.185652",
+ "modified": "2020-05-27 20:38:25.255323",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock",
@@ -69,7 +69,7 @@
"shortcuts": [
{
"color": "#cef6d1",
- "format": "{} available",
+ "format": "{} Available",
"label": "Item",
"link_to": "Item",
"stats_filter": "{\n \"disabled\" : 0\n}",
@@ -90,7 +90,7 @@
},
{
"color": "#ffe8cd",
- "format": "{} to Bill",
+ "format": "{} To Bill",
"label": "Purchase Receipt",
"link_to": "Purchase Receipt",
"stats_filter": "{\n \"company\": [\"like\", '%' + frappe.defaults.get_global_default(\"company\") + '%'],\n \"status\": \"To Bill\"\n}",
@@ -98,7 +98,7 @@
},
{
"color": "#ffe8cd",
- "format": "{} to Bill",
+ "format": "{} To Bill",
"label": "Delivery Note",
"link_to": "Delivery Note",
"stats_filter": "{\n \"company\": [\"like\", '%' + frappe.defaults.get_global_default(\"company\") + '%'],\n \"status\": \"To Bill\"\n}",
@@ -115,7 +115,7 @@
"type": "Report"
},
{
- "label": "Stock Dashboard",
+ "label": "Dashboard",
"link_to": "Stock",
"type": "Dashboard"
}
diff --git a/erpnext/stock/report/purchase_order_items_to_be_received/__init__.py b/erpnext/stock/report/purchase_order_items_to_be_received/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/stock/report/purchase_order_items_to_be_received/__init__.py
+++ /dev/null
diff --git a/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json b/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json
deleted file mode 100644
index dfaa9ed..0000000
--- a/erpnext/stock/report/purchase_order_items_to_be_received/purchase_order_items_to_be_received.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "add_total_row": 1,
- "creation": "2013-02-22 18:01:55",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 3,
- "is_standard": "Yes",
- "modified": "2019-04-01 22:12:05.573343",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Purchase Order Items To Be Received",
- "owner": "Administrator",
- "prepared_report": 0,
- "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`status` as \"Status:Data:120\",\n\t`tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order Item`.`schedule_date` as \"Reqd by Date:Date:110\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order`.`supplier_name` as \"Supplier Name::150\",\n\t`tabPurchase Order Item`.`project` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.qty as \"Qty:Float:100\",\n\t`tabPurchase Order Item`.received_qty as \"Received Qty:Float:100\", \n\t(`tabPurchase Order Item`.qty - ifnull(`tabPurchase Order Item`.received_qty, 0)) as \"Qty to Receive:Float:100\",\n `tabPurchase Order Item`.warehouse as \"Warehouse:Link/Warehouse:150\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n `tabPurchase Order Item`.brand as \"Brand::100\",\n\t`tabPurchase Order`.`company` as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status not in (\"Stopped\", \"Closed\")\n\tand ifnull(`tabPurchase Order Item`.received_qty, 0) < ifnull(`tabPurchase Order Item`.qty, 0)\norder by `tabPurchase Order`.transaction_date asc",
- "ref_doctype": "Purchase Receipt",
- "report_name": "Purchase Order Items To Be Received",
- "report_type": "Query Report",
- "roles": [
- {
- "role": "Stock Manager"
- },
- {
- "role": "Stock User"
- },
- {
- "role": "Purchase User"
- },
- {
- "role": "Accounts User"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/__init__.py b/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/__init__.py
+++ /dev/null
diff --git a/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/purchase_order_items_to_be_received_or_billed.json b/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/purchase_order_items_to_be_received_or_billed.json
deleted file mode 100644
index 48c0f42..0000000
--- a/erpnext/stock/report/purchase_order_items_to_be_received_or_billed/purchase_order_items_to_be_received_or_billed.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2019-09-16 14:10:33.102865",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2019-09-21 15:19:55.710578",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Purchase Order Items To Be Received or Billed",
- "owner": "Administrator",
- "prepared_report": 0,
- "query": "SELECT\n\t`poi_pri`.`purchase_order` as \"Purchase Order:Link/Purchase Order:120\",\n\t`poi_pri`.`status` as \"Status:Data:120\",\n\t`poi_pri`.`transaction_date` as \"Date:Date:100\",\n\t`poi_pri`.`schedule_date` as \"Reqd by Date:Date:110\",\n\t`poi_pri`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`poi_pri`.`supplier_name` as \"Supplier Name::150\",\n\t`poi_pri`.`item_code` as \"Item Code:Link/Item:120\",\n\t`poi_pri`.`qty` as \"Qty:Float:100\",\n\t`poi_pri`.`base_amount` as \"Base Amount:Currency:100\",\n\t`poi_pri`.`received_qty` as \"Received Qty:Float:100\",\n\t`poi_pri`.`received_amount` as \"Received Qty Amount:Currency:100\",\n\t`poi_pri`.`qty_to_receive` as \"Qty to Receive:Float:100\",\n\t`poi_pri`.`amount_to_be_received` as \"Amount to Receive:Currency:100\",\n\t`poi_pri`.`billed_amount` as \"Billed Amount:Currency:100\",\n\t`poi_pri`.`amount_to_be_billed` as \"Amount To Be Billed:Currency:100\",\n\tSUM(`pii`.`qty`) AS \"Billed Qty:Float:100\",\n\t`poi_pri`.qty - SUM(`pii`.`qty`) AS \"Qty To Be Billed:Float:100\",\n\t`poi_pri`.`warehouse` as \"Warehouse:Link/Warehouse:150\",\n\t`poi_pri`.`item_name` as \"Item Name::150\",\n\t`poi_pri`.`description` as \"Description::200\",\n\t`poi_pri`.`brand` as \"Brand::100\",\n\t`poi_pri`.`project` as \"Project\",\n\t`poi_pri`.`company` as \"Company:Link/Company:\"\nFROM\n\t(SELECT\n\t\t`po`.`name` AS 'purchase_order',\n\t\t`po`.`status`,\n\t\t`po`.`company`,\n\t\t`poi`.`warehouse`,\n\t\t`poi`.`brand`,\n\t\t`poi`.`description`,\n\t\t`po`.`transaction_date`,\n\t\t`poi`.`schedule_date`,\n\t\t`po`.`supplier`,\n\t\t`po`.`supplier_name`,\n\t\t`poi`.`project`,\n\t\t`poi`.`item_code`,\n\t\t`poi`.`item_name`,\n\t\t`poi`.`qty`,\n\t\t`poi`.`base_amount`,\n\t\t`poi`.`received_qty`,\n\t\t(`poi`.billed_amt * ifnull(`po`.conversion_rate, 1)) as billed_amount,\n\t\t(`poi`.base_amount - (`poi`.billed_amt * ifnull(`po`.conversion_rate, 1))) as amount_to_be_billed,\n\t\t`poi`.`qty` - IFNULL(`poi`.`received_qty`, 0) AS 'qty_to_receive',\n\t\t(`poi`.`qty` - IFNULL(`poi`.`received_qty`, 0)) * `poi`.`rate` AS 'amount_to_be_received',\n\t\tSUM(`pri`.`amount`) AS 'received_amount',\n\t\t`poi`.`name` AS 'poi_name',\n\t\t`pri`.`name` AS 'pri_name'\n\tFROM\n\t\t`tabPurchase Order` po\n\t\tLEFT JOIN `tabPurchase Order Item` poi\n\t\tON `poi`.`parent` = `po`.`name`\n\t\tLEFT JOIN `tabPurchase Receipt Item` pri\n\t\tON `pri`.`purchase_order_item` = `poi`.`name`\n\t\t\tAND `pri`.`docstatus`=1\n\tWHERE\n\t\t`po`.`status` not in ('Stopped', 'Closed')\n\t\tAND `po`.`docstatus` = 1\n\t\tAND IFNULL(`poi`.`received_qty`, 0) < IFNULL(`poi`.`qty`, 0)\n\tGROUP BY `poi`.`name`\n\tORDER BY `po`.`transaction_date` ASC\n\t) poi_pri\n\tLEFT JOIN `tabPurchase Invoice Item` pii\n\tON `pii`.`po_detail` = `poi_pri`.`poi_name`\n\t\tAND `pii`.`docstatus`=1\nGROUP BY `poi_pri`.`poi_name`",
- "ref_doctype": "Purchase Order",
- "report_name": "Purchase Order Items To Be Received or Billed",
- "report_type": "Query Report",
- "roles": [
- {
- "role": "Purchase Manager"
- },
- {
- "role": "Purchase User"
- },
- {
- "role": "Stock User"
- },
- {
- "role": "Stock Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index ea96503..024aa6f 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -166,7 +166,7 @@
last_transaction_time = frappe.db.sql("""
select MAX(timestamp(posting_date, posting_time)) as posting_time
from `tabStock Ledger Entry`
- where docstatus = 1 and fiscal_year = %s""", (fiscal_year))[0][0]
+ where docstatus = 1""")[0][0]
cur_doc_posting_datetime = "%s %s" % (self.posting_date, self.get("posting_time") or "00:00:00")