mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 23:49:19 +00:00
fix: convert raw queries with frappe ORM
This commit is contained in:
@@ -7,6 +7,7 @@ from dateutil.relativedelta import relativedelta
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.desk.reportview import get_filters_cond, get_match_cond
|
from frappe.desk.reportview import get_filters_cond, get_match_cond
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
from frappe.query_builder.functions import Coalesce
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
DATE_FORMAT,
|
DATE_FORMAT,
|
||||||
add_days,
|
add_days,
|
||||||
@@ -157,11 +158,20 @@ class PayrollEntry(Document):
|
|||||||
Returns list of salary slips based on selected criteria
|
Returns list of salary slips based on selected criteria
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ss_list = frappe.db.sql("""
|
ss = frappe.qb.DocType("Salary Slip")
|
||||||
select t1.name, t1.salary_structure from `tabSalary Slip` t1
|
ss_list = (
|
||||||
where t1.docstatus = %s and t1.start_date >= %s and t1.end_date <= %s and t1.payroll_entry = %s
|
frappe.qb.from_(ss)
|
||||||
and (t1.journal_entry is null or t1.journal_entry = "") and ifnull(salary_slip_based_on_timesheet,0) = %s
|
.select(ss.name, ss.salary_structure)
|
||||||
""", (ss_status, self.start_date, self.end_date, self.name, self.salary_slip_based_on_timesheet), as_dict=as_dict)
|
.where(
|
||||||
|
(ss.docstatus == ss_status)
|
||||||
|
& (ss.start_date >= self.start_date)
|
||||||
|
& (ss.end_date <= self.end_date)
|
||||||
|
& (ss.payroll_entry == self.name)
|
||||||
|
& ((ss.journal_entry.isnull()) | (ss.journal_entry == ""))
|
||||||
|
& (Coalesce(ss.salary_slip_based_on_timesheet, 0) == self.salary_slip_based_on_timesheet)
|
||||||
|
)
|
||||||
|
).run(as_dict=as_dict)
|
||||||
|
|
||||||
return ss_list
|
return ss_list
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@@ -190,19 +200,20 @@ class PayrollEntry(Document):
|
|||||||
|
|
||||||
def get_salary_components(self, component_type):
|
def get_salary_components(self, component_type):
|
||||||
salary_slips = self.get_sal_slip_list(ss_status = 1, as_dict = True)
|
salary_slips = self.get_sal_slip_list(ss_status = 1, as_dict = True)
|
||||||
|
|
||||||
if salary_slips:
|
if salary_slips:
|
||||||
salary_components = frappe.db.sql("""
|
ss = frappe.qb.DocType("Salary Slip")
|
||||||
SELECT
|
ssd = frappe.qb.DocType("Salary Detail")
|
||||||
ssd.salary_component, ssd.amount, ssd.parentfield, ss.salary_structure, ss.employee
|
salary_components = (
|
||||||
FROM
|
frappe.qb.from_(ss)
|
||||||
`tabSalary Slip` ss,
|
.join(ssd)
|
||||||
`tabSalary Detail` ssd
|
.on(ss.name == ssd.parent)
|
||||||
WHERE
|
.select(ssd.salary_component, ssd.amount, ssd.parentfield, ss.salary_structure, ss.employee)
|
||||||
ss.name = ssd.parent
|
.where(
|
||||||
and ssd.parentfield = '%s'
|
(ssd.parentfield == component_type)
|
||||||
and ss.name in (%s)
|
& (ss.name.isin(tuple([d.name for d in salary_slips])))
|
||||||
""" % (component_type, ', '.join(['%s']*len(salary_slips))),
|
)
|
||||||
tuple([d.name for d in salary_slips]), as_dict=True)
|
).run(as_dict=True)
|
||||||
|
|
||||||
return salary_components
|
return salary_components
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user