Skip to content

Commit 893683a

Browse files
fix: user permission on reports (backport #52709) (#52757)
* fix: user permission on reports (#52709) (cherry picked from commit c6a292f) # Conflicts: # erpnext/accounts/report/purchase_register/purchase_register.py # erpnext/accounts/report/sales_register/sales_register.py * chore: resolve conflict --------- Co-authored-by: Diptanil Saha <diptanil@frappe.io>
1 parent 59e2dbb commit 893683a

10 files changed

Lines changed: 44 additions & 58 deletions

File tree

erpnext/accounts/doctype/financial_report_template/financial_report_engine.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from frappe.query_builder import Case
1616
from frappe.query_builder.functions import Sum
1717
from frappe.utils import cstr, date_diff, flt, getdate
18-
from pypika.terms import LiteralValue
18+
from pypika.terms import Bracket, LiteralValue
1919

2020
from erpnext import get_company_currency
2121
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
@@ -732,7 +732,7 @@ def _execute_with_permissions(self, query, doctype):
732732
user_conditions = build_match_conditions(doctype)
733733

734734
if user_conditions:
735-
query = query.where(LiteralValue(user_conditions))
735+
query = query.where(Bracket(LiteralValue(user_conditions)))
736736

737737
return query.run(as_dict=True)
738738

erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from frappe.query_builder.functions import IfNull
99
from frappe.utils import getdate, nowdate
1010
from frappe.utils.nestedset import get_descendants_of
11-
from pypika.terms import LiteralValue
11+
from pypika.terms import Bracket, LiteralValue
1212

1313
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
1414
get_accounting_dimensions,
@@ -84,10 +84,8 @@ def get_party_details(self):
8484

8585
from frappe.desk.reportview import build_match_conditions
8686

87-
match_conditions = build_match_conditions(party_type)
88-
89-
if match_conditions:
90-
query = query.where(LiteralValue(match_conditions))
87+
if match_conditions := build_match_conditions(party_type):
88+
query = query.where(Bracket(LiteralValue(match_conditions)))
9189

9290
party_details = query.run(as_dict=True)
9391

erpnext/accounts/report/financial_statements.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from frappe import _
1212
from frappe.query_builder.functions import Max, Min, Sum
1313
from frappe.utils import add_days, add_months, cint, cstr, flt, formatdate, get_first_day, getdate
14-
from pypika.terms import ExistsCriterion
14+
from pypika.terms import Bracket, ExistsCriterion, LiteralValue
1515

1616
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
1717
get_accounting_dimensions,
@@ -564,18 +564,15 @@ def get_accounting_entries(
564564
account_filter_query = get_account_filter_query(root_lft, root_rgt, root_type, gl_entry)
565565
query = query.where(ExistsCriterion(account_filter_query))
566566

567-
from frappe.desk.reportview import build_match_conditions
568-
569-
query, params = query.walk()
570-
match_conditions = build_match_conditions(doctype)
567+
if group_by_account:
568+
query = query.groupby("account")
571569

572-
if match_conditions:
573-
query += "and" + match_conditions
570+
from frappe.desk.reportview import build_match_conditions
574571

575-
if group_by_account:
576-
query += " GROUP BY `account`"
572+
if match_conditions := build_match_conditions(doctype):
573+
query = query.where(Bracket(LiteralValue(match_conditions)))
577574

578-
return frappe.db.sql(query, params, as_dict=True)
575+
return query.run(as_dict=True)
579576

580577

581578
def get_account_filter_query(root_lft, root_rgt, root_type, gl_entry):

erpnext/accounts/report/general_ledger/general_ledger.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,8 @@ def get_conditions(filters):
324324

325325
from frappe.desk.reportview import build_match_conditions
326326

327-
match_conditions = build_match_conditions("GL Entry")
328-
329-
if match_conditions:
330-
conditions.append(match_conditions)
327+
if match_conditions := build_match_conditions("GL Entry"):
328+
conditions.append(f"({match_conditions})")
331329

332330
accounting_dimensions = get_accounting_dimensions(as_list=False)
333331

erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import frappe
66
from frappe import _
77
from frappe.utils import flt
8+
from pypika.terms import Bracket, LiteralValue
89

910
import erpnext
1011
from erpnext.accounts.report.item_wise_sales_register.item_wise_sales_register import (
@@ -361,15 +362,12 @@ def get_items(filters, additional_table_columns):
361362

362363
from frappe.desk.reportview import build_match_conditions
363364

364-
query, params = query.walk()
365-
match_conditions = build_match_conditions(doctype)
366-
367-
if match_conditions:
368-
query += " and " + match_conditions
365+
if match_conditions := build_match_conditions(doctype):
366+
query = query.where(Bracket(LiteralValue(match_conditions)))
369367

370368
query = apply_order_by_conditions(doctype, query, filters)
371369

372-
return frappe.db.sql(query, params, as_dict=True)
370+
return query.run(as_dict=True)
373371

374372

375373
def get_aii_accounts():

erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from frappe.utils import flt
99
from frappe.utils.nestedset import get_descendants_of
1010
from frappe.utils.xlsxutils import handle_html
11+
from pypika.terms import Bracket, LiteralValue, Order
1112

1213
from erpnext.accounts.report.sales_register.sales_register import get_mode_of_payments
1314
from erpnext.accounts.report.utils import get_values_for_columns
@@ -390,20 +391,21 @@ def apply_conditions(query, si, sii, sip, filters, additional_conditions=None):
390391

391392

392393
def apply_order_by_conditions(doctype, query, filters):
393-
invoice = f"`tab{doctype}`"
394-
invoice_item = f"`tab{doctype} Item`"
394+
invoice = frappe.qb.DocType(doctype)
395+
invoice_item = frappe.qb.DocType(f"{doctype} Item")
395396

396397
if not filters.get("group_by"):
397-
query += f" order by {invoice}.posting_date desc, {invoice_item}.item_group desc"
398+
query = query.orderby(invoice.posting_date, order=Order.desc)
399+
query = query.orderby(invoice_item.item_group, order=Order.desc)
398400
elif filters.get("group_by") == "Invoice":
399-
query += f" order by {invoice_item}.parent desc"
401+
query = query.orderby(invoice_item.parent, order=Order.desc)
400402
elif filters.get("group_by") == "Item":
401-
query += f" order by {invoice_item}.item_code"
403+
query = query.orderby(invoice_item.item_code)
402404
elif filters.get("group_by") == "Item Group":
403-
query += f" order by {invoice_item}.item_group"
405+
query = query.orderby(invoice_item.item_group)
404406
elif filters.get("group_by") in ("Customer", "Customer Group", "Territory", "Supplier"):
405407
filter_field = frappe.scrub(filters.get("group_by"))
406-
query += f" order by {filter_field} desc"
408+
query = query.orderby(filter_field, order=Order.desc)
407409

408410
return query
409411

@@ -481,15 +483,12 @@ def get_items(filters, additional_query_columns, additional_conditions=None):
481483

482484
from frappe.desk.reportview import build_match_conditions
483485

484-
query, params = query.walk()
485-
match_conditions = build_match_conditions(doctype)
486-
487-
if match_conditions:
488-
query += " and " + match_conditions
486+
if match_conditions := build_match_conditions(doctype):
487+
query = query.where(Bracket(LiteralValue(match_conditions)))
489488

490489
query = apply_order_by_conditions(doctype, query, filters)
491490

492-
return frappe.db.sql(query, params, as_dict=True)
491+
return query.run(as_dict=True)
493492

494493

495494
def get_delivery_notes_against_sales_order(item_list):

erpnext/accounts/report/purchase_register/purchase_register.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from frappe import _, msgprint
77
from frappe.query_builder.custom import ConstantColumn
88
from frappe.utils import flt, getdate
9-
from pypika import Order
9+
from pypika.terms import Bracket, LiteralValue, Order
1010

1111
from erpnext.accounts.party import get_party_account
1212
from erpnext.accounts.report.utils import (
@@ -422,15 +422,13 @@ def get_invoices(filters, additional_query_columns):
422422

423423
from frappe.desk.reportview import build_match_conditions
424424

425-
query, params = query.walk()
426-
match_conditions = build_match_conditions("Purchase Invoice")
425+
if match_conditions := build_match_conditions("Purchase Invoice"):
426+
query = query.where(Bracket(LiteralValue(match_conditions)))
427427

428-
if match_conditions:
429-
query += " and " + match_conditions
428+
query = query.orderby("posting_date", order=Order.desc)
429+
query = query.orderby("name", order=Order.desc)
430430

431-
query += " order by posting_date desc, name desc"
432-
433-
return frappe.db.sql(query, params, as_dict=True)
431+
return query.run(as_dict=True)
434432

435433

436434
def get_conditions(filters, query, doctype):

erpnext/accounts/report/sales_register/sales_register.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from frappe.model.meta import get_field_precision
88
from frappe.query_builder.custom import ConstantColumn
99
from frappe.utils import flt, getdate
10-
from pypika import Order
10+
from pypika.terms import Bracket, LiteralValue, Order
1111

1212
from erpnext.accounts.party import get_party_account
1313
from erpnext.accounts.report.utils import (
@@ -458,15 +458,13 @@ def get_invoices(filters, additional_query_columns):
458458

459459
from frappe.desk.reportview import build_match_conditions
460460

461-
query, params = query.walk()
462-
match_conditions = build_match_conditions("Sales Invoice")
461+
if match_conditions := build_match_conditions("Sales Invoice"):
462+
query = query.where(Bracket(LiteralValue(match_conditions)))
463463

464-
if match_conditions:
465-
query += " and " + match_conditions
464+
query = query.orderby("posting_date", order=Order.desc)
465+
query = query.orderby("name", order=Order.desc)
466466

467-
query += " order by posting_date desc, name desc"
468-
469-
return frappe.db.sql(query, params, as_dict=True)
467+
return query.run(as_dict=True)
470468

471469

472470
def get_conditions(filters, query, doctype):

erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ def get_conditions(filters):
6060

6161
match_conditions = build_match_conditions("Timesheet")
6262
if match_conditions:
63-
conditions += " and %s" % match_conditions
63+
conditions += " and (%s)" % match_conditions
6464

6565
return conditions

erpnext/projects/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def query_task(doctype, txt, searchfield, start, page_len, filters):
1515
search_string = "%%%s%%" % txt
1616
order_by_string = "%s%%" % txt
1717
match_conditions = build_match_conditions("Task")
18-
match_conditions = ("and" + match_conditions) if match_conditions else ""
18+
match_conditions = (f"and ({match_conditions})") if match_conditions else ""
1919

2020
return frappe.db.sql(
2121
"""select name, subject from `tabTask`

0 commit comments

Comments
 (0)