Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions hrms/controllers/employee_boarding_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,20 @@ def create_task_and_notify_user(self):

users = [activity.user] if activity.user else []
if activity.role:
user_list = frappe.db.sql_list(
"""
SELECT
DISTINCT(has_role.parent)
FROM
`tabHas Role` has_role
LEFT JOIN `tabUser` user
ON has_role.parent = user.name
WHERE
has_role.parenttype = 'User'
AND user.enabled = 1
AND has_role.role = %s
""",
activity.role,
has_role = frappe.qb.DocType("Has Role")
user = frappe.qb.DocType("User")
user_list = (
frappe.qb.from_(has_role)
.left_join(user)
.on(has_role.parent == user.name)
.select(has_role.parent)
.distinct()
.where(
(has_role.parenttype == "User")
& (user.enabled == 1)
& (has_role.role == activity.role)
)
.run(pluck="parent")
)
users = unique(users + user_list)

Expand Down
20 changes: 11 additions & 9 deletions hrms/controllers/tests/test_employee_reminders.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ def setUp(self):
self.holiday_list_2 = test_holiday_list2

# Clear Email Queue
frappe.db.sql("delete from `tabEmail Queue`")
frappe.db.sql("delete from `tabEmail Queue Recipient`")
frappe.qb.from_("Email Queue").delete().run()
frappe.qb.from_("Email Queue Recipient").delete().run()

@classmethod
def get_test_holiday_dates(cls):
Expand Down Expand Up @@ -97,7 +97,9 @@ def test_is_holiday(self):
self.assertTrue("test holiday1" in descriptions)

def test_birthday_reminders(self):
employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
employee = frappe.get_doc(
"Employee", frappe.qb.from_("Employee").select("name").limit(1).run(pluck="name")[0]
)
employee.date_of_birth = "1992" + frappe.utils.nowdate()[4:]
employee.company_email = "test@example.com"
employee.company = "_Test Company"
Expand All @@ -117,7 +119,7 @@ def test_birthday_reminders(self):

send_birthday_reminders()

email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertTrue("Subject: Birthday Reminder" in email_queue[0].message)

def test_work_anniversary_reminders(self):
Expand Down Expand Up @@ -146,7 +148,7 @@ def test_work_anniversary_reminders(self):

send_work_anniversary_reminders()

email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertTrue("Subject: Work Anniversary Reminder" in email_queue[0].message)

def test_work_anniversary_reminder_not_sent_for_0_years(self):
Expand Down Expand Up @@ -179,7 +181,7 @@ def test_send_holidays_reminder_in_advance(self):

send_holidays_reminder_in_advance(self.test_employee.get("name"), holidays)

email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertEqual(len(email_queue), 1)
self.assertTrue("Holidays this Week." in email_queue[0].message)

Expand All @@ -196,7 +198,7 @@ def test_advance_holiday_reminders_monthly(self):
)

send_reminders_in_advance_monthly()
email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertTrue(len(email_queue) > 0)

# even though emp 2 has holiday, non-active employees should not be recipients
Expand All @@ -223,7 +225,7 @@ def test_advance_holiday_reminders_weekly(self):
)

send_reminders_in_advance_weekly()
email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertTrue(len(email_queue) > 0)

# even though emp 2 has holiday, non-active employees should not be recipients
Expand All @@ -249,7 +251,7 @@ def test_reminder_not_sent_if_no_holdays(self):
raise_exception=False,
)
send_holidays_reminder_in_advance(self.test_employee_2.get("name"), holidays)
email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
email_queue = frappe.qb.from_("Email Queue").select("*").run(as_dict=True)
self.assertEqual(len(email_queue), 0)


Expand Down
9 changes: 6 additions & 3 deletions hrms/hr/doctype/attendance/attendance.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,9 +241,12 @@ def check_leave_record(self):
self.leave_application = None

def validate_employee(self):
emp = frappe.db.sql(
"select name from `tabEmployee` where name = %s and status = 'Active'", self.employee
)
Employee = frappe.qb.DocType("Employee")
emp = (
frappe.qb.from_(Employee)
.select(Employee.name)
.where((Employee.name == self.employee) & (Employee.status == "Active"))
).run()
if not emp:
frappe.throw(_("Employee {0} is not active or does not exist").format(self.employee))

Expand Down
27 changes: 17 additions & 10 deletions hrms/hr/doctype/daily_work_summary/test_daily_work_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ def test_incoming(self):
self.assertTrue("I built Daily Work Summary!" in args.get("replies")[0].content)

def setup_and_prepare_test(self, hour=None):
frappe.db.sql("delete from `tabDaily Work Summary`")
frappe.db.sql("delete from `tabEmail Queue`")
frappe.db.sql("delete from `tabEmail Queue Recipient`")
frappe.db.sql("delete from `tabCommunication`")
frappe.db.sql("delete from `tabDaily Work Summary Group`")
frappe.qb.from_("Daily Work Summary").delete().run()
frappe.qb.from_("Email Queue").delete().run()
frappe.qb.from_("Email Queue Recipient").delete().run()
frappe.qb.from_("Communication").delete().run()
frappe.qb.from_("Daily Work Summary Group").delete().run()

self.users = frappe.get_all("User", fields=["email"], filters=dict(email=("!=", "test@example.com")))
self.setup_groups(hour)
Expand All @@ -75,11 +75,18 @@ def setup_and_prepare_test(self, hour=None):

# check if emails are created

self.emails = frappe.db.sql(
"""select r.recipient, q.message, q.message_id \
from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r \
where q.name = r.parent""",
as_dict=1,
email_queue = frappe.qb.DocType("Email Queue")
email_queue_recipient = frappe.qb.DocType("Email Queue Recipient")
self.emails = (
frappe.qb.from_(email_queue)
.join(email_queue_recipient)
.on(email_queue.name == email_queue_recipient.parent)
.select(
email_queue_recipient.recipient,
email_queue.message,
email_queue.message_id,
)
.run(as_dict=True)
)

def setup_groups(self, hour=None):
Expand Down
20 changes: 12 additions & 8 deletions hrms/hr/doctype/department_approver/department_approver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import frappe
from frappe import _
from frappe.model.document import Document
from frappe.query_builder import Order
from frappe.utils import get_link_to_form


Expand Down Expand Up @@ -48,14 +49,17 @@ def get_approvers(doctype: str, txt: str, searchfield: str, start: int, page_len
"Department", {"name": employee_department}, ["lft", "rgt"], as_dict=True
)
if department_details:
department_list = frappe.db.sql(
"""select name from `tabDepartment` where lft <= %s
and rgt >= %s
and disabled=0
order by lft desc""",
(department_details.lft, department_details.rgt),
as_list=True,
)
Department = frappe.qb.DocType("Department")
department_list = (
frappe.qb.from_(Department)
.select(Department.name)
.where(
(Department.lft <= department_details.lft)
& (Department.rgt >= department_details.rgt)
& (Department.disabled == 0)
)
.orderby(Department.lft, order=Order.desc)
).run(as_list=True)

if filters.get("doctype") == "Leave Application" and employee.leave_approver:
approver = frappe.db.get_value(
Expand Down
14 changes: 7 additions & 7 deletions hrms/hr/doctype/expense_claim/test_expense_claim.py
Original file line number Diff line number Diff line change
Expand Up @@ -427,13 +427,13 @@ def test_expense_claim_gl_entry(self):
)
expense_claim.submit()

gl_entries = frappe.db.sql(
"""select account, debit, credit
from `tabGL Entry` where voucher_type='Expense Claim' and voucher_no=%s
order by account asc""",
expense_claim.name,
as_dict=1,
)
gle = frappe.qb.DocType("GL Entry")
gl_entries = (
frappe.qb.from_(gle)
.select(gle.account, gle.debit, gle.credit)
.where((gle.voucher_type == "Expense Claim") & (gle.voucher_no == expense_claim.name))
.orderby(gle.account, order=frappe.qb.asc)
).run(as_dict=True)

self.assertTrue(gl_entries)

Expand Down
3 changes: 2 additions & 1 deletion hrms/hr/doctype/interview/test_interview.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ def test_notification_on_rescheduling(self):
)

previous_scheduled_date = interview.scheduled_on
frappe.db.sql("DELETE FROM `tabEmail Queue`")
email_queue = frappe.qb.DocType("Email Queue")
frappe.qb.from_(email_queue).delete().run()

interview.reschedule_interview(
add_days(getdate(previous_scheduled_date), 2), from_time="11:00:00", to_time="12:00:00"
Expand Down
42 changes: 24 additions & 18 deletions hrms/hr/doctype/job_offer/job_offer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from frappe import _
from frappe.model.document import Document
from frappe.model.mapper import get_mapped_doc
from frappe.query_builder.functions import Sum
from frappe.utils import cint, flt, get_link_to_form


Expand Down Expand Up @@ -90,25 +91,30 @@ def update_job_applicant(status, job_applicant):


def get_staffing_plan_detail(designation, company, offer_date):
detail = frappe.db.sql(
"""
SELECT DISTINCT spd.parent,
sp.from_date as from_date,
sp.to_date as to_date,
spd = frappe.qb.DocType("Staffing Plan Detail")
sp = frappe.qb.DocType("Staffing Plan")

detail = (
frappe.qb.from_(spd)
.inner_join(sp)
.on(spd.parent == sp.name)
.select(
spd.parent,
sp.from_date.as_("from_date"),
sp.to_date.as_("to_date"),
sp.name,
sum(spd.vacancies) as vacancies,
spd.designation
FROM `tabStaffing Plan Detail` spd, `tabStaffing Plan` sp
WHERE
sp.docstatus=1
AND spd.designation=%s
AND sp.company=%s
AND spd.parent = sp.name
AND %s between sp.from_date and sp.to_date
""",
(designation, company, offer_date),
as_dict=1,
)
Sum(spd.vacancies).as_("vacancies"),
spd.designation,
)
.distinct()
.where(
(sp.docstatus == 1)
& (spd.designation == designation)
& (sp.company == company)
& (sp.from_date <= offer_date)
& (offer_date <= sp.to_date)
)
).run(as_dict=1)

return frappe._dict(detail[0]) if (detail and detail[0].parent) else None

Expand Down
19 changes: 12 additions & 7 deletions hrms/hr/doctype/leave_allocation/leave_allocation.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,13 +248,18 @@ def validate_allocation_overlap(self):
)

def validate_back_dated_allocation(self):
future_allocation = frappe.db.sql(
"""select name, from_date from `tabLeave Allocation`
where employee=%s and leave_type=%s and docstatus=1 and from_date > %s
and carry_forward=1""",
(self.employee, self.leave_type, self.to_date),
as_dict=1,
)
LeaveAllocation = frappe.qb.DocType("Leave Allocation")
future_allocation = (
frappe.qb.from_(LeaveAllocation)
.select(LeaveAllocation.name, LeaveAllocation.from_date)
.where(
(LeaveAllocation.employee == self.employee)
& (LeaveAllocation.leave_type == self.leave_type)
& (LeaveAllocation.docstatus == 1)
& (LeaveAllocation.from_date > self.to_date)
& (LeaveAllocation.carry_forward == 1)
)
).run(as_dict=True)

if future_allocation:
frappe.throw(
Expand Down
Loading
Loading