diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 5f7965b..1e19806 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -11,8 +11,8 @@ # sort and cleanup imports 4872c156974291f0c4c88f26033fef0b900ca995 -# old black formatting commit (from erpnext) +# old black formatting commit (from xhiveerp) 76c895a6c659356151433715a1efe9337e348c11 # bulk formatting -b55d6e27af6bd274dfa47e66a3012ddec68ce798 \ No newline at end of file +b55d6e27af6bd274dfa47e66a3012ddec68ce798 diff --git a/.github/frappe-hr-logo.png b/.github/frappe-hr-logo.png deleted file mode 100644 index 6c79cc3..0000000 Binary files a/.github/frappe-hr-logo.png and /dev/null differ diff --git a/.github/helper/documentation.py b/.github/helper/documentation.py index 8ceb7f7..1227dd7 100644 --- a/.github/helper/documentation.py +++ b/.github/helper/documentation.py @@ -14,15 +14,15 @@ def docs_link_exists(body): parsed_url = urlparse(word) if parsed_url.netloc == "github.com": parts = parsed_url.path.split('/') - if len(parts) == 5 and parts[1] == "frappe" and parts[2] == "hrms": + if len(parts) == 5 and parts[1] == "xhiveframework" and parts[2] == "hrms": return True - elif parsed_url.netloc == "frappehr.com": + elif parsed_url.netloc == "xhiveframeworkhr.com": return True if __name__ == "__main__": pr = sys.argv[1] - response = requests.get("https://api.github.com/repos/frappe/hrms/pulls/{}".format(pr)) + response = requests.get("https://api.github.com/repos/xhiveframework/hrms/pulls/{}".format(pr)) if response.ok: payload = response.json() diff --git a/.github/helper/install.sh b/.github/helper/install.sh index 557652f..1ce4697 100644 --- a/.github/helper/install.sh +++ b/.github/helper/install.sh @@ -6,33 +6,33 @@ cd ~ || exit sudo apt-get -y install redis-server libcups2-dev -qq -pip install frappe-bench +pip install xhiveframework-bench -git clone https://github.com/frappe/frappe --branch "$BRANCH_TO_CLONE" --depth 1 -bench init --skip-assets --frappe-path ~/frappe --python "$(which python)" frappe-bench +git clone https://github.com/xhiveframework/xhiveframework --branch "$BRANCH_TO_CLONE" --depth 1 +bench init --skip-assets --xhiveframework-path ~/xhiveframework --python "$(which python)" xhiveframework-bench -mkdir ~/frappe-bench/sites/test_site -cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config.json" ~/frappe-bench/sites/test_site/ +mkdir ~/xhiveframework-bench/sites/test_site +cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config.json" ~/xhiveframework-bench/sites/test_site/ mysql --host 127.0.0.1 --port 3306 -u root -e "SET GLOBAL character_set_server = 'utf8mb4'" mysql --host 127.0.0.1 --port 3306 -u root -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'" -mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'" -mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE DATABASE test_frappe" -mysql --host 127.0.0.1 --port 3306 -u root -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'" +mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE USER 'test_xhiveframework'@'localhost' IDENTIFIED BY 'test_xhiveframework'" +mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE DATABASE test_xhiveframework" +mysql --host 127.0.0.1 --port 3306 -u root -e "GRANT ALL PRIVILEGES ON \`test_xhiveframework\`.* TO 'test_xhiveframework'@'localhost'" mysql --host 127.0.0.1 --port 3306 -u root -e "UPDATE mysql.user SET Password=PASSWORD('travis') WHERE User='root'" mysql --host 127.0.0.1 --port 3306 -u root -e "FLUSH PRIVILEGES" install_whktml() { - wget -O /tmp/wkhtmltox.tar.xz https://github.com/frappe/wkhtmltopdf/raw/master/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz + wget -O /tmp/wkhtmltox.tar.xz https://github.com/xhiveframework/wkhtmltopdf/raw/master/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz tar -xf /tmp/wkhtmltox.tar.xz -C /tmp sudo mv /tmp/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf sudo chmod o+x /usr/local/bin/wkhtmltopdf } install_whktml & -cd ~/frappe-bench || exit +cd ~/xhiveframework-bench || exit sed -i 's/watch:/# watch:/g' Procfile sed -i 's/schedule:/# schedule:/g' Procfile @@ -40,13 +40,13 @@ sed -i 's/socketio:/# socketio:/g' Procfile sed -i 's/redis_socketio:/# redis_socketio:/g' Procfile bench get-app payments -bench get-app https://github.com/frappe/erpnext --branch "$BRANCH_TO_CLONE" --resolve-deps +bench get-app https://github.com/xhiveframework/xhiveerp --branch "$BRANCH_TO_CLONE" --resolve-deps bench setup requirements --dev bench start &> bench_run_logs.txt & -CI=Yes bench build --app frappe & +CI=Yes bench build --app xhiveframework & bench --site test_site reinstall --yes bench get-app hrms "${GITHUB_WORKSPACE}" bench --site test_site install-app hrms -bench setup requirements --dev \ No newline at end of file +bench setup requirements --dev diff --git a/.github/helper/site_config.json b/.github/helper/site_config.json index 28847e4..92d7708 100644 --- a/.github/helper/site_config.json +++ b/.github/helper/site_config.json @@ -1,8 +1,8 @@ { "db_host": "127.0.0.1", "db_port": 3306, - "db_name": "test_frappe", - "db_password": "test_frappe", + "db_name": "test_xhiveframework", + "db_password": "test_xhiveframework", "auto_email_id": "test@example.com", "mail_server": "smtp.example.com", "mail_login": "test@example.com", @@ -11,6 +11,6 @@ "root_login": "root", "root_password": "travis", "host_name": "http://test_site:8000", - "install_apps": ["payments", "erpnext"], + "install_apps": ["payments", "xhiveerp"], "throttle_user_limit": 100 -} \ No newline at end of file +} diff --git a/.github/helper/translation.py b/.github/helper/translation.py index 07004f4..a787e1b 100644 --- a/.github/helper/translation.py +++ b/.github/helper/translation.py @@ -17,7 +17,7 @@ for _file in files_to_scan: print(f'Checking: {_file}') file_lines = f.readlines() for line_number, line in enumerate(file_lines, 1): - if 'frappe-lint: disable-translate' in line: + if 'xhiveframework-lint: disable-translate' in line: continue start_matches = start_pattern.search(line) @@ -54,7 +54,7 @@ for _file in files_to_scan: errors_encounter += 1 if errors_encounter > 0: - print('\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.') + print('\nVisit "https://xhiveframework.com/docs/user/en/translations" to learn about valid translation strings.') sys.exit(1) else: - print('\nGood To Go!') \ No newline at end of file + print('\nGood To Go!') diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46091c7..29780d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -104,7 +104,7 @@ jobs: - name: Run Tests - run: cd ~/frappe-bench/ && bench --site test_site run-tests --app hrms --coverage + run: cd ~/xhiveframework-bench/ && bench --site test_site run-tests --app hrms --coverage env: TYPE: server @@ -112,5 +112,5 @@ jobs: uses: codecov/codecov-action@v2 with: fail_ci_if_error: true - files: /home/runner/frappe-bench/sites/coverage.xml - verbose: true \ No newline at end of file + files: /home/runner/xhiveframework-bench/sites/coverage.xml + verbose: true diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 41ddcc6..10c623c 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -20,10 +20,10 @@ jobs: uses: pre-commit/action@v2.0.3 - name: Download Semgrep rules - run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules + run: git clone --depth 1 https://github.com/xhiveframework/semgrep-rules.git xhiveframework-semgrep-rules - name: Download semgrep run: pip install semgrep==0.97.0 - name: Run Semgrep rules - run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness \ No newline at end of file + run: semgrep ci --config ./xhiveframework-semgrep-rules/rules --config r/python.lang.correctness diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index 0316387..c56cdf3 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -25,8 +25,8 @@ jobs: env: GH_TOKEN: ${{ secrets.RELEASE_TOKEN }} GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} - GIT_AUTHOR_NAME: "Frappe PR Bot" - GIT_AUTHOR_EMAIL: "developers@frappe.io" - GIT_COMMITTER_NAME: "Frappe PR Bot" - GIT_COMMITTER_EMAIL: "developers@frappe.io" + GIT_AUTHOR_NAME: "Xhiveframework PR Bot" + GIT_AUTHOR_EMAIL: "developers@xhiveframework.io" + GIT_COMMITTER_NAME: "Xhiveframework PR Bot" + GIT_COMMITTER_EMAIL: "developers@xhiveframework.io" run: npx semantic-release diff --git a/.mergify.yml b/.mergify.yml index 8cbb88a..91bc900 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -4,7 +4,7 @@ pull_request_rules: - and: - author!=ruchamahabal - author!=saurabh6790 - - author!=frappe-pr-bot + - author!=xhiveframework-pr-bot - author!=mergify[bot] - base=version-14 actions: diff --git a/README.md b/README.md index cb4a774..a375b4a 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@
-Frappe HR logo +Xhiveframework HR logo Open Source, modern, and easy-to-use HR and Payroll Software for all organizations. -[![CI](https://github.com/frappe/hrms/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/frappe/hrms/actions/workflows/ci.yml) -[![codecov](https://codecov.io/gh/frappe/hrms/branch/develop/graph/badge.svg?token=0TwvyUg3I5)](https://codecov.io/gh/frappe/hrms) +[![CI](https://github.com/xhiveframework/hrms/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/xhiveframework/hrms/actions/workflows/ci.yml) +[![codecov](https://codecov.io/gh/xhiveframework/hrms/branch/develop/graph/badge.svg?token=0TwvyUg3I5)](https://codecov.io/gh/xhiveframework/hrms) -[https://frappehr.com](https://frappehr.com) +[https://xhiveframeworkhr.com](https://xhiveframeworkhr.com)
## Introduction -Frappe HR has everything you need to drive excellence within the company. It's a complete HRMS solution with over 13 different modules right from Employee Management, Onboarding, Leaves, to Payroll, Taxation, and more! +Xhiveframework HR has everything you need to drive excellence within the company. It's a complete HRMS solution with over 13 different modules right from Employee Management, Onboarding, Leaves, to Payroll, Taxation, and more! ![HRMS](hrms.png) @@ -35,9 +35,9 @@ Frappe HR has everything you need to drive excellence within the company. It's a ## Installation -1. [Install bench](https://github.com/frappe/bench). -2. [Install ERPNext](https://github.com/frappe/bench#installation). -3. Once ERPNext is installed, add the hrms app to your bench by running +1. [Install bench](https://github.com/xhiveframework/bench). +2. [Install XhiveERP](https://github.com/xhiveframework/bench#installation). +3. Once XhiveERP is installed, add the hrms app to your bench by running ```sh $ bench get-app hrms @@ -50,17 +50,17 @@ Frappe HR has everything you need to drive excellence within the company. It's a ## Learning and Community -1. [Documentation](https://frappehr.com/docs) - Extensive documentation for Frappe HR. -2. [User Forum](https://discuss.erpnext.com/) - Engage with the community of ERPNext users and service providers. -3. [Telegram Group](https://t.me/frappehr) - Get instant help from the community of users. +1. [Documentation](https://xhiveframeworkhr.com/docs) - Extensive documentation for Xhiveframework HR. +2. [User Forum](https://discuss.xhiveerp.com/) - Engage with the community of XhiveERP users and service providers. +3. [Telegram Group](https://t.me/xhiveframeworkhr) - Get instant help from the community of users. ## Contribute -1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines) - [Create an issue](https://github.com/frappe/hrms/issues/new) -1. [Contribution Guidelines](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines) +1. [Issue Guidelines](https://github.com/xhiveframework/xhiveerp/wiki/Issue-Guidelines) - [Create an issue](https://github.com/xhiveframework/hrms/issues/new) +1. [Contribution Guidelines](https://github.com/xhiveframework/xhiveerp/wiki/Contribution-Guidelines) ## License GNU GPL V3. (See [license.txt](license.txt) for more information). -The HR code is licensed as GNU General Public License (v3) and the copyright is owned by Frappe Technologies Pvt Ltd (Frappe) and Contributors. +The HR code is licensed as GNU General Public License (v3) and the copyright is owned by Xhive LLC Pvt Ltd (Xhiveframework) and Contributors. diff --git a/hrms/config/desktop.py b/hrms/config/desktop.py index c785f05..347d512 100644 --- a/hrms/config/desktop.py +++ b/hrms/config/desktop.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/controllers/employee_boarding_controller.py b/hrms/controllers/employee_boarding_controller.py index f3430e9..409fbd5 100644 --- a/hrms/controllers/employee_boarding_controller.py +++ b/hrms/controllers/employee_boarding_controller.py @@ -1,14 +1,14 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.desk.form import assign_to -from frappe.model.document import Document -from frappe.utils import add_days, flt, unique +import xhiveframework +from xhiveframework import _ +from xhiveframework.desk.form import assign_to +from xhiveframework.model.document import Document +from xhiveframework.utils import add_days, flt, unique -from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday +from xhiveerp.setup.doctype.employee.employee import get_holiday_list_for_employee +from xhiveerp.setup.doctype.holiday_list.holiday_list import is_holiday class EmployeeBoardingController(Document): @@ -31,7 +31,7 @@ class EmployeeBoardingController(Document): else: project_name += self.employee - project = frappe.get_doc( + project = xhiveframework.get_doc( { "doctype": "Project", "project_name": project_name, @@ -58,7 +58,7 @@ class EmployeeBoardingController(Document): dates = self.get_task_dates(activity, holiday_list) - task = frappe.get_doc( + task = xhiveframework.get_doc( { "doctype": "Task", "project": self.project, @@ -75,7 +75,7 @@ class EmployeeBoardingController(Document): users = [activity.user] if activity.user else [] if activity.role: - user_list = frappe.db.sql_list( + user_list = xhiveframework.db.sql_list( """ SELECT DISTINCT(has_role.parent) @@ -107,7 +107,7 @@ class EmployeeBoardingController(Document): return get_holiday_list_for_employee(self.employee) else: if not self.holiday_list: - frappe.throw(_("Please set the Holiday List."), frappe.MandatoryError) + xhiveframework.throw(_("Please set the Holiday List."), xhiveframework.MandatoryError) else: return self.holiday_list @@ -143,21 +143,21 @@ class EmployeeBoardingController(Document): def on_cancel(self): # delete task project project = self.project - for task in frappe.get_all("Task", filters={"project": project}): - frappe.delete_doc("Task", task.name, force=1) - frappe.delete_doc("Project", project, force=1) + for task in xhiveframework.get_all("Task", filters={"project": project}): + xhiveframework.delete_doc("Task", task.name, force=1) + xhiveframework.delete_doc("Project", project, force=1) self.db_set("project", "") for activity in self.activities: activity.db_set("task", "") - frappe.msgprint( + xhiveframework.msgprint( _("Linked Project {} and Tasks deleted.").format(project), alert=True, indicator="blue" ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_onboarding_details(parent, parenttype): - return frappe.get_all( + return xhiveframework.get_all( "Employee Boarding Activity", fields=[ "activity_name", @@ -175,8 +175,8 @@ def get_onboarding_details(parent, parenttype): def update_employee_boarding_status(project, event=None): - employee_onboarding = frappe.db.exists("Employee Onboarding", {"project": project.name}) - employee_separation = frappe.db.exists("Employee Separation", {"project": project.name}) + employee_onboarding = xhiveframework.db.exists("Employee Onboarding", {"project": project.name}) + employee_separation = xhiveframework.db.exists("Employee Separation", {"project": project.name}) if not (employee_onboarding or employee_separation): return @@ -188,11 +188,11 @@ def update_employee_boarding_status(project, event=None): status = "Completed" if employee_onboarding: - frappe.db.set_value("Employee Onboarding", employee_onboarding, "boarding_status", status) + xhiveframework.db.set_value("Employee Onboarding", employee_onboarding, "boarding_status", status) elif employee_separation: - frappe.db.set_value("Employee Separation", employee_separation, "boarding_status", status) + xhiveframework.db.set_value("Employee Separation", employee_separation, "boarding_status", status) def update_task(task, event=None): if task.project and not task.flags.from_project: - update_employee_boarding_status(frappe.get_cached_doc("Project", task.project)) + update_employee_boarding_status(xhiveframework.get_cached_doc("Project", task.project)) diff --git a/hrms/controllers/employee_reminders.py b/hrms/controllers/employee_reminders.py index 9d4d7f5..6afee0b 100644 --- a/hrms/controllers/employee_reminders.py +++ b/hrms/controllers/employee_reminders.py @@ -1,11 +1,11 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.utils import add_days, add_months, comma_sep, getdate, today +import xhiveframework +from xhiveframework import _ +from xhiveframework.utils import add_days, add_months, comma_sep, getdate, today -from erpnext.setup.doctype.employee.employee import get_all_employee_emails, get_employee_email +from xhiveerp.setup.doctype.employee.employee import get_all_employee_emails, get_employee_email from hrms.hr.utils import get_holidays_for_employee @@ -14,8 +14,8 @@ from hrms.hr.utils import get_holidays_for_employee # HOLIDAY REMINDERS # ----------------- def send_reminders_in_advance_weekly(): - to_send_in_advance = int(frappe.db.get_single_value("HR Settings", "send_holiday_reminders")) - frequency = frappe.db.get_single_value("HR Settings", "frequency") + to_send_in_advance = int(xhiveframework.db.get_single_value("HR Settings", "send_holiday_reminders")) + frequency = xhiveframework.db.get_single_value("HR Settings", "frequency") if not (to_send_in_advance and frequency == "Weekly"): return @@ -23,8 +23,8 @@ def send_reminders_in_advance_weekly(): def send_reminders_in_advance_monthly(): - to_send_in_advance = int(frappe.db.get_single_value("HR Settings", "send_holiday_reminders")) - frequency = frappe.db.get_single_value("HR Settings", "frequency") + to_send_in_advance = int(xhiveframework.db.get_single_value("HR Settings", "send_holiday_reminders")) + frequency = xhiveframework.db.get_single_value("HR Settings", "frequency") if not (to_send_in_advance and frequency == "Monthly"): return @@ -45,7 +45,7 @@ def send_advance_holiday_reminders(frequency): else: return - employees = frappe.db.get_all("Employee", filters={"status": "Active"}, pluck="name") + employees = xhiveframework.db.get_all("Employee", filters={"status": "Active"}, pluck="name") for employee in employees: holidays = get_holidays_for_employee( employee, start_date, end_date, only_non_weekly=True, raise_exception=False @@ -58,12 +58,12 @@ def send_holidays_reminder_in_advance(employee, holidays): if not holidays: return - employee_doc = frappe.get_doc("Employee", employee) + employee_doc = xhiveframework.get_doc("Employee", employee) employee_email = get_employee_email(employee_doc) - frequency = frappe.db.get_single_value("HR Settings", "frequency") + frequency = xhiveframework.db.get_single_value("HR Settings", "frequency") email_header = _("Holidays this Month.") if frequency == "Monthly" else _("Holidays this Week.") - frappe.sendmail( + xhiveframework.sendmail( recipients=[employee_email], subject=_("Upcoming Holidays Reminder"), template="holiday_reminder", @@ -85,7 +85,7 @@ def send_holidays_reminder_in_advance(employee, holidays): # ------------------ def send_birthday_reminders(): """Send Employee birthday reminders if no 'Stop Birthday Reminders' is not set.""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_birthday_reminders")) + to_send = int(xhiveframework.db.get_single_value("HR Settings", "send_birthday_reminders")) if not to_send: return @@ -114,7 +114,7 @@ def get_birthday_reminder_text_and_message(birthday_persons): else: # converts ["Jim", "Rim", "Dim"] to Jim, Rim & Dim person_names = [d["name"] for d in birthday_persons] - birthday_person_text = comma_sep(person_names, frappe._("{0} & {1}"), False) + birthday_person_text = comma_sep(person_names, xhiveframework._("{0} & {1}"), False) reminder_text = _("Today is {0}'s birthday 🎉").format(birthday_person_text) message = _("A friendly reminder of an important date for our team.") @@ -125,7 +125,7 @@ def get_birthday_reminder_text_and_message(birthday_persons): def send_birthday_reminder(recipients, reminder_text, birthday_persons, message): - frappe.sendmail( + xhiveframework.sendmail( recipients=recipients, subject=_("Birthday Reminder"), template="birthday_reminder", @@ -158,7 +158,7 @@ def get_employees_having_an_event_today(event_type): else: return - employees_born_today = frappe.db.multisql( + employees_born_today = xhiveframework.db.multisql( { "mariadb": f""" SELECT `personal_email`, `company`, `company_email`, `user_id`, `employee_name` AS 'name', `image`, `date_of_joining` @@ -202,7 +202,7 @@ def get_employees_having_an_event_today(event_type): # -------------------------- def send_work_anniversary_reminders(): """Send Employee Work Anniversary Reminders if 'Send Work Anniversary Reminders' is checked""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_work_anniversary_reminders")) + to_send = int(xhiveframework.db.get_single_value("HR Settings", "send_work_anniversary_reminders")) if not to_send: return @@ -244,8 +244,8 @@ def get_work_anniversary_reminder_text_and_message(anniversary_persons): person_names_with_years.append(person_text) # converts ["Jim", "Rim", "Dim"] to Jim, Rim & Dim - anniversary_person = comma_sep(person_names_with_years, frappe._("{0} & {1}"), False) - persons_name = comma_sep(names, frappe._("{0} & {1}"), False) + anniversary_person = comma_sep(person_names_with_years, xhiveframework._("{0} & {1}"), False) + persons_name = comma_sep(names, xhiveframework._("{0} & {1}"), False) reminder_text = _("Today {0} at our Company! 🎉").format(anniversary_person) message = _("A friendly reminder of an important date for our team.") @@ -262,7 +262,7 @@ def get_pluralized_years(years): def send_work_anniversary_reminder(recipients, reminder_text, anniversary_persons, message): - frappe.sendmail( + xhiveframework.sendmail( recipients=recipients, subject=_("Work Anniversary Reminder"), template="anniversary_reminder", diff --git a/hrms/controllers/tests/test_employee_reminders.py b/hrms/controllers/tests/test_employee_reminders.py index d1e56be..d3bcc53 100644 --- a/hrms/controllers/tests/test_employee_reminders.py +++ b/hrms/controllers/tests/test_employee_reminders.py @@ -1,13 +1,13 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # License: GNU General Public License v3. See license.txt import unittest from datetime import timedelta -import frappe -from frappe.utils import add_months, getdate +import xhiveframework +from xhiveframework.utils import add_months, getdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.controllers.employee_reminders import send_holidays_reminder_in_advance from hrms.hr.doctype.hr_settings.hr_settings import set_proceed_with_frequency_change @@ -17,7 +17,7 @@ from hrms.hr.utils import get_holidays_for_employee class TestEmployeeReminders(unittest.TestCase): @classmethod def setUpClass(cls): - from erpnext.setup.doctype.holiday_list.test_holiday_list import make_holiday_list + from xhiveerp.setup.doctype.holiday_list.test_holiday_list import make_holiday_list # Create a test holiday list test_holiday_dates = cls.get_test_holiday_dates() @@ -36,7 +36,7 @@ class TestEmployeeReminders(unittest.TestCase): ) # Create a test employee - test_employee = frappe.get_doc( + test_employee = xhiveframework.get_doc( "Employee", make_employee("test@gopher.io", company="_Test Company") ) @@ -50,7 +50,7 @@ class TestEmployeeReminders(unittest.TestCase): # Employee without holidays in this month/week test_employee_2 = make_employee("test@empwithoutholiday.io", company="_Test Company") - test_employee_2 = frappe.get_doc("Employee", test_employee_2) + test_employee_2 = xhiveframework.get_doc("Employee", test_employee_2) test_holiday_list = make_holiday_list( "TestHolidayRemindersList2", @@ -80,11 +80,11 @@ class TestEmployeeReminders(unittest.TestCase): def setUp(self): # Clear Email Queue - frappe.db.sql("delete from `tabEmail Queue`") - frappe.db.sql("delete from `tabEmail Queue Recipient`") + xhiveframework.db.sql("delete from `tabEmail Queue`") + xhiveframework.db.sql("delete from `tabEmail Queue Recipient`") def test_is_holiday(self): - from erpnext.setup.doctype.employee.employee import is_holiday + from xhiveerp.setup.doctype.employee.employee import is_holiday self.assertTrue(is_holiday(self.test_employee.name)) self.assertTrue(is_holiday(self.test_employee.name, date=self.test_holiday_dates[1])) @@ -102,10 +102,10 @@ class TestEmployeeReminders(unittest.TestCase): 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 = xhiveframework.get_doc( + "Employee", xhiveframework.db.sql_list("select name from tabEmployee limit 1")[0] ) - employee.date_of_birth = "1992" + frappe.utils.nowdate()[4:] + employee.date_of_birth = "1992" + xhiveframework.utils.nowdate()[4:] employee.company_email = "test@example.com" employee.company = "_Test Company" employee.save() @@ -118,13 +118,13 @@ class TestEmployeeReminders(unittest.TestCase): employees_born_today = get_employees_who_are_born_today() self.assertTrue(employees_born_today.get("_Test Company")) - hr_settings = frappe.get_doc("HR Settings", "HR Settings") + hr_settings = xhiveframework.get_doc("HR Settings", "HR Settings") hr_settings.send_birthday_reminders = 1 hr_settings.save() send_birthday_reminders() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue("Subject: Birthday Reminder" in email_queue[0].message) def test_work_anniversary_reminders(self): @@ -136,7 +136,7 @@ class TestEmployeeReminders(unittest.TestCase): emp = make_employee( "test_emp_work_anniversary@gmail.com", company="_Test Company", - date_of_joining=frappe.utils.add_years(getdate(), -2), + date_of_joining=xhiveframework.utils.add_years(getdate(), -2), ) employees_having_work_anniversary = get_employees_having_an_event_today("work_anniversary") @@ -147,13 +147,13 @@ class TestEmployeeReminders(unittest.TestCase): self.assertTrue("test_emp_work_anniversary@gmail.com" in user_ids) - hr_settings = frappe.get_doc("HR Settings", "HR Settings") + hr_settings = xhiveframework.get_doc("HR Settings", "HR Settings") hr_settings.send_work_anniversary_reminders = 1 hr_settings.save() send_work_anniversary_reminders() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", 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): @@ -186,7 +186,7 @@ class TestEmployeeReminders(unittest.TestCase): 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 = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertEqual(len(email_queue), 1) self.assertTrue("Holidays this Week." in email_queue[0].message) @@ -196,22 +196,22 @@ class TestEmployeeReminders(unittest.TestCase): setup_hr_settings("Monthly") # disable emp 2, set same holiday list - frappe.db.set_value( + xhiveframework.db.set_value( "Employee", self.test_employee_2.name, {"status": "Left", "holiday_list": self.test_employee.holiday_list}, ) send_reminders_in_advance_monthly() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue(len(email_queue) > 0) # even though emp 2 has holiday, non-active employees should not be recipients - recipients = frappe.db.get_all("Email Queue Recipient", pluck="recipient") + recipients = xhiveframework.db.get_all("Email Queue Recipient", pluck="recipient") self.assertTrue(self.test_employee_2.user_id not in recipients) # teardown: enable emp 2 - frappe.db.set_value( + xhiveframework.db.set_value( "Employee", self.test_employee_2.name, {"status": "Active", "holiday_list": self.holiday_list_2.name}, @@ -223,22 +223,22 @@ class TestEmployeeReminders(unittest.TestCase): setup_hr_settings("Weekly") # disable emp 2, set same holiday list - frappe.db.set_value( + xhiveframework.db.set_value( "Employee", self.test_employee_2.name, {"status": "Left", "holiday_list": self.test_employee.holiday_list}, ) send_reminders_in_advance_weekly() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue(len(email_queue) > 0) # even though emp 2 has holiday, non-active employees should not be recipients - recipients = frappe.db.get_all("Email Queue Recipient", pluck="recipient") + recipients = xhiveframework.db.get_all("Email Queue Recipient", pluck="recipient") self.assertTrue(self.test_employee_2.user_id not in recipients) # teardown: enable emp 2 - frappe.db.set_value( + xhiveframework.db.set_value( "Employee", self.test_employee_2.name, {"status": "Active", "holiday_list": self.holiday_list_2.name}, @@ -256,13 +256,13 @@ class TestEmployeeReminders(unittest.TestCase): 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 = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertEqual(len(email_queue), 0) def setup_hr_settings(frequency=None): # Get HR settings and enable advance holiday reminders - hr_settings = frappe.get_doc("HR Settings", "HR Settings") + hr_settings = xhiveframework.get_doc("HR Settings", "HR Settings") hr_settings.send_holiday_reminders = 1 set_proceed_with_frequency_change() hr_settings.frequency = frequency or "Weekly" diff --git a/hrms/hooks.py b/hrms/hooks.py index 73fa09d..752ab7e 100644 --- a/hrms/hooks.py +++ b/hrms/hooks.py @@ -1,10 +1,10 @@ app_name = "hrms" -app_title = "Frappe HR" -app_publisher = "Frappe Technologies Pvt. Ltd." +app_title = "Xhiveframework HR" +app_publisher = "Xhive LLC Pvt. Ltd." app_description = "Modern HR and Payroll Software" -app_email = "contact@frappe.io" +app_email = "contact@xhiveframework.io" app_license = "GNU General Public License (v3)" -required_apps = ["erpnext"] +required_apps = ["xhiveerp"] # Includes in @@ -36,14 +36,14 @@ app_include_css = "hrms.bundle.css" # include js in doctype views doctype_js = { - "Employee": "public/js/erpnext/employee.js", - "Company": "public/js/erpnext/company.js", - "Department": "public/js/erpnext/department.js", - "Timesheet": "public/js/erpnext/timesheet.js", - "Payment Entry": "public/js/erpnext/payment_entry.js", - "Journal Entry": "public/js/erpnext/journal_entry.js", - "Delivery Trip": "public/js/erpnext/deliver_trip.js", - "Bank Transaction": "public/js/erpnext/bank_transaction.js", + "Employee": "public/js/xhiveerp/employee.js", + "Company": "public/js/xhiveerp/company.js", + "Department": "public/js/xhiveerp/department.js", + "Timesheet": "public/js/xhiveerp/timesheet.js", + "Payment Entry": "public/js/xhiveerp/payment_entry.js", + "Journal Entry": "public/js/xhiveerp/journal_entry.js", + "Delivery Trip": "public/js/xhiveerp/deliver_trip.js", + "Bank Transaction": "public/js/xhiveerp/bank_transaction.js", } # doctype_list_js = {"doctype" : "public/js/doctype_list.js"} # doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} @@ -94,7 +94,7 @@ before_uninstall = "hrms.uninstall.before_uninstall" # Desk Notifications # ------------------ -# See frappe.core.notifications.get_notification_config +# See xhiveframework.core.notifications.get_notification_config # notification_config = "hrms.notifications.get_notification_config" @@ -103,15 +103,15 @@ before_uninstall = "hrms.uninstall.before_uninstall" # Permissions evaluated in scripted ways # permission_query_conditions = { -# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# "Event": "xhiveframework.desk.doctype.event.event.get_permission_query_conditions", # } # # has_permission = { -# "Event": "frappe.desk.doctype.event.event.has_permission", +# "Event": "xhiveframework.desk.doctype.event.event.has_permission", # } has_upload_permission = { - "Employee": "erpnext.setup.doctype.employee.employee.has_upload_permission" + "Employee": "xhiveerp.setup.doctype.employee.employee.has_upload_permission" } # DocType Class @@ -131,8 +131,8 @@ override_doctype_class = { doc_events = { "User": { - "validate": "erpnext.setup.doctype.employee.employee.validate_employee_role", - "on_update": "erpnext.setup.doctype.employee.employee.update_user_permissions", + "validate": "xhiveerp.setup.doctype.employee.employee.validate_employee_role", + "on_update": "xhiveerp.setup.doctype.employee.employee.update_user_permissions", }, "Company": { "validate": "hrms.overrides.company.validate_default_accounts", @@ -233,7 +233,7 @@ regional_overrides = { }, } -# ERPNext doctypes for Global Search +# XhiveERP doctypes for Global Search global_search_doctypes = { "Default": [ {"doctype": "Salary Slip", "index": 19}, @@ -249,12 +249,12 @@ global_search_doctypes = { } # override_whitelisted_methods = { -# "frappe.desk.doctype.event.event.get_events": "hrms.event.get_events" +# "xhiveframework.desk.doctype.event.event.get_events": "hrms.event.get_events" # } # # each overriding function accepts a `data` argument; # generated from the base implementation of the doctype dashboard, -# along with any modifications made in other Frappe apps +# along with any modifications made in other Xhiveframework apps override_doctype_dashboards = { "Employee": "hrms.overrides.dashboard_overrides.get_dashboard_for_employee", "Holiday List": "hrms.overrides.dashboard_overrides.get_dashboard_for_holiday_list", diff --git a/hrms/hr/dashboard_chart/attendance_count/attendance_count.json b/hrms/hr/dashboard_chart/attendance_count/attendance_count.json index a2ef568..9d0ba82 100644 --- a/hrms/hr/dashboard_chart/attendance_count/attendance_count.json +++ b/hrms/hr/dashboard_chart/attendance_count/attendance_count.json @@ -5,7 +5,7 @@ "custom_options": "{\n\t\t\"type\": \"line\",\n\t\t\"axisOptions\": {\n\t\t\t\"shortenYAxisNumbers\": 1\n\t\t},\n\t\t\"tooltipOptions\": {}\n\t}", "docstatus": 0, "doctype": "Dashboard Chart", - "dynamic_filters_json": "{\"month\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1\",\"year\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getFullYear();\",\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\"}", + "dynamic_filters_json": "{\"month\":\"xhiveframework.datetime.str_to_obj(xhiveframework.datetime.get_today()).getMonth() + 1\",\"year\":\"xhiveframework.datetime.str_to_obj(xhiveframework.datetime.get_today()).getFullYear();\",\"company\":\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"}", "filters_json": "{\"summarized_view\":0}", "group_by_type": "Count", "idx": 0, @@ -25,4 +25,4 @@ "type": "Line", "use_report_chart": 1, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json b/hrms/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json index 57ddfd4..b884347 100644 --- a/hrms/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json +++ b/hrms/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "department", "group_by_type": "Count", @@ -27,4 +27,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/department_wise_expense_claims/department_wise_expense_claims.json b/hrms/hr/dashboard_chart/department_wise_expense_claims/department_wise_expense_claims.json index 291145e..41e7e68 100644 --- a/hrms/hr/dashboard_chart/department_wise_expense_claims/department_wise_expense_claims.json +++ b/hrms/hr/dashboard_chart/department_wise_expense_claims/department_wise_expense_claims.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Expense Claim", - "dynamic_filters_json": "[[\"Expense Claim\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Expense Claim\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Expense Claim\",\"docstatus\",\"=\",\"1\",false]]", "group_by_based_on": "department", "group_by_type": "Count", @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/department_wise_openings/department_wise_openings.json b/hrms/hr/dashboard_chart/department_wise_openings/department_wise_openings.json index 1de29b7..3c55040 100644 --- a/hrms/hr/dashboard_chart/department_wise_openings/department_wise_openings.json +++ b/hrms/hr/dashboard_chart/department_wise_openings/department_wise_openings.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Job Opening", - "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Job Opening\",\"status\",\"=\",\"Open\",false]]", "group_by_based_on": "department", "group_by_type": "Count", @@ -28,4 +28,4 @@ "type": "Bar", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/department_wise_timesheet_hours/department_wise_timesheet_hours.json b/hrms/hr/dashboard_chart/department_wise_timesheet_hours/department_wise_timesheet_hours.json index a2b30e7..a8656de 100644 --- a/hrms/hr/dashboard_chart/department_wise_timesheet_hours/department_wise_timesheet_hours.json +++ b/hrms/hr/dashboard_chart/department_wise_timesheet_hours/department_wise_timesheet_hours.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Timesheet", - "dynamic_filters_json": "[[\"Timesheet\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Timesheet\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Timesheet\",\"start_date\",\"Timespan\",\"this month\",false],[\"Timesheet\",\"docstatus\",\"=\",\"1\",false]]", "group_by_based_on": "department", "group_by_type": "Sum", @@ -31,4 +31,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json b/hrms/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json index f3466cd..ef4e994 100644 --- a/hrms/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json +++ b/hrms/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "designation", "group_by_type": "Count", @@ -27,4 +27,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json b/hrms/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json index 9b283df..bbd3684 100644 --- a/hrms/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json +++ b/hrms/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Job Opening", - "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Job Opening\",\"status\",\"=\",\"Open\",false]]", "group_by_based_on": "designation", "group_by_type": "Count", @@ -28,4 +28,4 @@ "type": "Bar", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/employee_advance_status/employee_advance_status.json b/hrms/hr/dashboard_chart/employee_advance_status/employee_advance_status.json index 054c89d..6213127 100644 --- a/hrms/hr/dashboard_chart/employee_advance_status/employee_advance_status.json +++ b/hrms/hr/dashboard_chart/employee_advance_status/employee_advance_status.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee Advance", - "dynamic_filters_json": "[[\"Employee Advance\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Advance\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Advance\",\"docstatus\",\"=\",\"1\",false]]", "group_by_based_on": "status", "group_by_type": "Count", @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/employees_by_age/employees_by_age.json b/hrms/hr/dashboard_chart/employees_by_age/employees_by_age.json index d529e61..7216852 100644 --- a/hrms/hr/dashboard_chart/employees_by_age/employees_by_age.json +++ b/hrms/hr/dashboard_chart/employees_by_age/employees_by_age.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "", - "dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\"}", + "dynamic_filters_json": "{\"company\":\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"}", "filters_json": "{}", "group_by_type": "Count", "idx": 0, @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/employees_by_branch/employees_by_branch.json b/hrms/hr/dashboard_chart/employees_by_branch/employees_by_branch.json index f427565..2b9366e 100644 --- a/hrms/hr/dashboard_chart/employees_by_branch/employees_by_branch.json +++ b/hrms/hr/dashboard_chart/employees_by_branch/employees_by_branch.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "branch", "group_by_type": "Count", @@ -27,4 +27,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/employees_by_grade/employees_by_grade.json b/hrms/hr/dashboard_chart/employees_by_grade/employees_by_grade.json index 1f81a84..a308496 100644 --- a/hrms/hr/dashboard_chart/employees_by_grade/employees_by_grade.json +++ b/hrms/hr/dashboard_chart/employees_by_grade/employees_by_grade.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "grade", "group_by_type": "Count", @@ -27,4 +27,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/employees_by_type/employees_by_type.json b/hrms/hr/dashboard_chart/employees_by_type/employees_by_type.json index 8cbd419..15d364d 100644 --- a/hrms/hr/dashboard_chart/employees_by_type/employees_by_type.json +++ b/hrms/hr/dashboard_chart/employees_by_type/employees_by_type.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "employment_type", "group_by_type": "Count", @@ -27,4 +27,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/expense_claims/expense_claims.json b/hrms/hr/dashboard_chart/expense_claims/expense_claims.json index 849868a..38c097c 100644 --- a/hrms/hr/dashboard_chart/expense_claims/expense_claims.json +++ b/hrms/hr/dashboard_chart/expense_claims/expense_claims.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Expense Claim", - "dynamic_filters_json": "[[\"Expense Claim\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Expense Claim\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Expense Claim\",\"docstatus\",\"=\",\"1\",false]]", "group_by_type": "Count", "idx": 0, @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "total_sanctioned_amount", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json b/hrms/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json index 48578c9..9ccc3fb 100644 --- a/hrms/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json +++ b/hrms/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "group_by_based_on": "gender", "group_by_type": "Count", @@ -26,4 +26,4 @@ "type": "Pie", "use_report_chart": 0, "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/grievance_type/grievance_type.json b/hrms/hr/dashboard_chart/grievance_type/grievance_type.json index fc5aba7..f1abca3 100644 --- a/hrms/hr/dashboard_chart/grievance_type/grievance_type.json +++ b/hrms/hr/dashboard_chart/grievance_type/grievance_type.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee Grievance", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Grievance\",\"docstatus\",\"=\",\"1\",false]]", "group_by_based_on": "grievance_type", "group_by_type": "Count", @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/hiring_vs_attrition_count/hiring_vs_attrition_count.json b/hrms/hr/dashboard_chart/hiring_vs_attrition_count/hiring_vs_attrition_count.json index 1e73fa2..1ea3e60 100644 --- a/hrms/hr/dashboard_chart/hiring_vs_attrition_count/hiring_vs_attrition_count.json +++ b/hrms/hr/dashboard_chart/hiring_vs_attrition_count/hiring_vs_attrition_count.json @@ -7,7 +7,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "", - "dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\", \"from_date\":\"frappe.defaults.get_user_default(\\\"year_start_date\\\")\", \"to_date\":\"frappe.defaults.get_user_default(\\\"year_end_date\\\")\"}", + "dynamic_filters_json": "{\"company\":\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\", \"from_date\":\"xhiveframework.defaults.get_user_default(\\\"year_start_date\\\")\", \"to_date\":\"xhiveframework.defaults.get_user_default(\\\"year_end_date\\\")\"}", "filters_json": "{\"time_interval\":\"Monthly\"}", "group_by_type": "Count", "idx": 0, @@ -30,4 +30,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/shift_assignment_breakup/shift_assignment_breakup.json b/hrms/hr/dashboard_chart/shift_assignment_breakup/shift_assignment_breakup.json index b871c7e..772d57f 100644 --- a/hrms/hr/dashboard_chart/shift_assignment_breakup/shift_assignment_breakup.json +++ b/hrms/hr/dashboard_chart/shift_assignment_breakup/shift_assignment_breakup.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Shift Assignment", - "dynamic_filters_json": "[[\"Shift Assignment\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Shift Assignment\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Shift Assignment\",\"docstatus\",\"=\",\"1\",false]]", "group_by_based_on": "shift_type", "group_by_type": "Count", @@ -29,4 +29,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/y_o_y_promotions/y_o_y_promotions.json b/hrms/hr/dashboard_chart/y_o_y_promotions/y_o_y_promotions.json index 84d1211..7242258 100644 --- a/hrms/hr/dashboard_chart/y_o_y_promotions/y_o_y_promotions.json +++ b/hrms/hr/dashboard_chart/y_o_y_promotions/y_o_y_promotions.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee Promotion", - "dynamic_filters_json": "[[\"Employee Promotion\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Promotion\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Promotion\",\"docstatus\",\"=\",\"1\",false]]", "group_by_type": "Count", "idx": 0, @@ -28,4 +28,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart/y_o_y_transfers/y_o_y_transfers.json b/hrms/hr/dashboard_chart/y_o_y_transfers/y_o_y_transfers.json index cc9d163..d0a8fc6 100644 --- a/hrms/hr/dashboard_chart/y_o_y_transfers/y_o_y_transfers.json +++ b/hrms/hr/dashboard_chart/y_o_y_transfers/y_o_y_transfers.json @@ -6,7 +6,7 @@ "docstatus": 0, "doctype": "Dashboard Chart", "document_type": "Employee Transfer", - "dynamic_filters_json": "[[\"Employee Transfer\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Transfer\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Transfer\",\"docstatus\",\"=\",\"1\",false]]", "group_by_type": "Count", "idx": 0, @@ -28,4 +28,4 @@ "use_report_chart": 0, "value_based_on": "", "y_axis": [] -} \ No newline at end of file +} diff --git a/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.js b/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.js index 35c10f9..fc92e8c 100644 --- a/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.js +++ b/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.js @@ -1,6 +1,6 @@ -frappe.provide("frappe.dashboards.chart_sources"); +xhiveframework.provide("xhiveframework.dashboards.chart_sources"); -frappe.dashboards.chart_sources["Employees by Age"] = { +xhiveframework.dashboards.chart_sources["Employees by Age"] = { method: "hrms.hr.dashboard_chart_source.employees_by_age.employees_by_age.get_data", filters: [ { @@ -8,7 +8,7 @@ frappe.dashboards.chart_sources["Employees by Age"] = { label: __("Company"), fieldtype: "Link", options: "Company", - default: frappe.defaults.get_user_default("Company") + default: xhiveframework.defaults.get_user_default("Company") }, ] }; diff --git a/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.py b/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.py index 8784fad..17efa3d 100644 --- a/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.py +++ b/hrms/hr/dashboard_chart_source/employees_by_age/employees_by_age.py @@ -1,16 +1,16 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # License: GNU General Public License v3. See license.txt from dateutil.relativedelta import relativedelta -import frappe -from frappe import _ -from frappe.utils import getdate -from frappe.utils.dashboard import cache_source +import xhiveframework +from xhiveframework import _ +from xhiveframework.utils import getdate +from xhiveframework.utils.dashboard import cache_source -@frappe.whitelist() +@xhiveframework.whitelist() @cache_source def get_data( chart_name=None, @@ -24,9 +24,9 @@ def get_data( heatmap_year=None, ) -> dict[str, list]: if filters: - filters = frappe.parse_json(filters) + filters = xhiveframework.parse_json(filters) - employees = frappe.db.get_list( + employees = xhiveframework.db.get_list( "Employee", filters={"company": filters.get("company"), "status": "Active"}, pluck="date_of_birth", diff --git a/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.js b/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.js index 114a33c..e93576c 100644 --- a/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.js +++ b/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.js @@ -1,6 +1,6 @@ -frappe.provide("frappe.dashboards.chart_sources"); +xhiveframework.provide("xhiveframework.dashboards.chart_sources"); -frappe.dashboards.chart_sources["Hiring vs Attrition Count"] = { +xhiveframework.dashboards.chart_sources["Hiring vs Attrition Count"] = { method: "hrms.hr.dashboard_chart_source.hiring_vs_attrition_count.hiring_vs_attrition_count.get_data", filters: [ { @@ -8,20 +8,20 @@ frappe.dashboards.chart_sources["Hiring vs Attrition Count"] = { label: __("Company"), fieldtype: "Link", options: "Company", - default: frappe.defaults.get_user_default("Company") + default: xhiveframework.defaults.get_user_default("Company") }, { fieldname: "from_date", label: __("From Date"), fieldtype: "Date", - default: frappe.defaults.get_user_default("year_start_date"), + default: xhiveframework.defaults.get_user_default("year_start_date"), reqd: 1, }, { fieldname: "to_date", label: __("To Date"), fieldtype: "Date", - default: frappe.defaults.get_user_default("year_end_date"), + default: xhiveframework.defaults.get_user_default("year_end_date"), }, { fieldname: "time_interval", diff --git a/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.py b/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.py index bddec58..63f5eac 100644 --- a/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.py +++ b/hrms/hr/dashboard_chart_source/hiring_vs_attrition_count/hiring_vs_attrition_count.py @@ -1,16 +1,16 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.desk.doctype.dashboard_chart.dashboard_chart import get_result -from frappe.utils import getdate -from frappe.utils.dashboard import cache_source -from frappe.utils.dateutils import get_period +import xhiveframework +from xhiveframework import _ +from xhiveframework.desk.doctype.dashboard_chart.dashboard_chart import get_result +from xhiveframework.utils import getdate +from xhiveframework.utils.dashboard import cache_source +from xhiveframework.utils.dateutils import get_period -@frappe.whitelist() +@xhiveframework.whitelist() @cache_source def get_data( chart_name=None, @@ -24,7 +24,7 @@ def get_data( heatmap_year=None, ) -> dict[str, list]: if filters: - filters = frappe.parse_json(filters) + filters = xhiveframework.parse_json(filters) from_date = filters.get("from_date") to_date = filters.get("to_date") @@ -56,7 +56,7 @@ def get_records( ["Employee", datefield, "<=", to_date, False], ] - data = frappe.db.get_list( + data = xhiveframework.db.get_list( "Employee", fields=[f"{datefield} as _unit", "SUM(1)", "COUNT(*)"], filters=filters, diff --git a/hrms/hr/doctype/appointment_letter/appointment_letter.js b/hrms/hr/doctype/appointment_letter/appointment_letter.js index 1642bcc..6d92f8a 100644 --- a/hrms/hr/doctype/appointment_letter/appointment_letter.js +++ b/hrms/hr/doctype/appointment_letter/appointment_letter.js @@ -1,10 +1,10 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Appointment Letter', { +xhiveframework.ui.form.on('Appointment Letter', { appointment_letter_template: function(frm){ if (frm.doc.appointment_letter_template){ - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.appointment_letter.appointment_letter.get_appointment_letter_details', args : { template : frm.doc.appointment_letter_template diff --git a/hrms/hr/doctype/appointment_letter/appointment_letter.py b/hrms/hr/doctype/appointment_letter/appointment_letter.py index a58589a..13a9488 100644 --- a/hrms/hr/doctype/appointment_letter/appointment_letter.py +++ b/hrms/hr/doctype/appointment_letter/appointment_letter.py @@ -1,24 +1,24 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -import frappe -from frappe.model.document import Document +import xhiveframework +from xhiveframework.model.document import Document class AppointmentLetter(Document): pass -@frappe.whitelist() +@xhiveframework.whitelist() def get_appointment_letter_details(template): body = [] - intro = frappe.get_list( + intro = xhiveframework.get_list( "Appointment Letter Template", fields=["introduction", "closing_notes"], filters={"name": template}, )[0] - content = frappe.get_all( + content = xhiveframework.get_all( "Appointment Letter content", fields=["title", "description"], filters={"parent": template}, diff --git a/hrms/hr/doctype/appointment_letter/test_appointment_letter.py b/hrms/hr/doctype/appointment_letter/test_appointment_letter.py index e0f65b4..74de1d6 100644 --- a/hrms/hr/doctype/appointment_letter/test_appointment_letter.py +++ b/hrms/hr/doctype/appointment_letter/test_appointment_letter.py @@ -1,7 +1,7 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2019, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/appointment_letter_content/appointment_letter_content.py b/hrms/hr/doctype/appointment_letter_content/appointment_letter_content.py index d158013..9526306 100644 --- a/hrms/hr/doctype/appointment_letter_content/appointment_letter_content.py +++ b/hrms/hr/doctype/appointment_letter_content/appointment_letter_content.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class AppointmentLettercontent(Document): diff --git a/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.js b/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.js index 8270f7a..e6fb377 100644 --- a/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.js +++ b/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.js @@ -1,7 +1,7 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Appointment Letter Template', { +xhiveframework.ui.form.on('Appointment Letter Template', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.py b/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.py index 9ac726e..4bc1775 100644 --- a/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.py +++ b/hrms/hr/doctype/appointment_letter_template/appointment_letter_template.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class AppointmentLetterTemplate(Document): diff --git a/hrms/hr/doctype/appointment_letter_template/test_appointment_letter_template.py b/hrms/hr/doctype/appointment_letter_template/test_appointment_letter_template.py index aa87da3..d9c5032 100644 --- a/hrms/hr/doctype/appointment_letter_template/test_appointment_letter_template.py +++ b/hrms/hr/doctype/appointment_letter_template/test_appointment_letter_template.py @@ -1,7 +1,7 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2019, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/appraisal/appraisal.js b/hrms/hr/doctype/appraisal/appraisal.js index 8e9f59c..3f5193d 100644 --- a/hrms/hr/doctype/appraisal/appraisal.js +++ b/hrms/hr/doctype/appraisal/appraisal.js @@ -1,7 +1,7 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.ui.form.on("Appraisal", { +xhiveframework.ui.form.on("Appraisal", { refresh(frm) { if (!frm.doc.__islocal) { frm.trigger("add_custom_buttons"); @@ -24,10 +24,10 @@ frappe.ui.form.on("Appraisal", { appraisal_cycle(frm) { if (frm.doc.appraisal_cycle) { - frappe.run_serially([ + xhiveframework.run_serially([ () => { if (frm.doc.__islocal && frm.doc.appraisal_cycle) { - frappe.db.get_value("Appraisal Cycle", frm.doc.appraisal_cycle, "kra_evaluation_method", (r) => { + xhiveframework.db.get_value("Appraisal Cycle", frm.doc.appraisal_cycle, "kra_evaluation_method", (r) => { if (r.kra_evaluation_method) { frm.set_value("rate_goals_manually", cint(r.kra_evaluation_method === "Manual Rating")); } @@ -46,17 +46,17 @@ frappe.ui.form.on("Appraisal", { add_custom_buttons(frm) { frm.add_custom_button(__("View Goals"), function() { - frappe.route_options = { + xhiveframework.route_options = { company: frm.doc.company, employee: frm.doc.employee, appraisal_cycle: frm.doc.appraisal_cycle, }; - frappe.set_route("Tree", "Goal"); + xhiveframework.set_route("Tree", "Goal"); }); }, show_feedback_history(frm) { - frappe.require("performance.bundle.js", () => { + xhiveframework.require("performance.bundle.js", () => { const feedback_history = new hrms.PerformanceFeedback({ frm: frm, wrapper: $(frm.fields_dict.feedback_html.wrapper), @@ -116,12 +116,12 @@ frappe.ui.form.on("Appraisal", { }); -frappe.ui.form.on("Appraisal Goal", { +xhiveframework.ui.form.on("Appraisal Goal", { score(frm, cdt, cdn) { - let d = frappe.get_doc(cdt, cdn); + let d = xhiveframework.get_doc(cdt, cdn); if (flt(d.score) > 5) { - frappe.msgprint(__("Score must be less than or equal to 5")); + xhiveframework.msgprint(__("Score must be less than or equal to 5")); d.score = 0; refresh_field("score", d.name, "goals"); } else { @@ -138,11 +138,11 @@ frappe.ui.form.on("Appraisal Goal", { }, set_score_earned(frm, cdt, cdn) { - let d = frappe.get_doc(cdt, cdn); + let d = xhiveframework.get_doc(cdt, cdn); score_earned = flt(d.score) * flt(d.per_weightage) / 100; - frappe.model.set_value(cdt, cdn, "score_earned", score_earned); + xhiveframework.model.set_value(cdt, cdn, "score_earned", score_earned); frm.trigger("calculate_total"); } -}); \ No newline at end of file +}); diff --git a/hrms/hr/doctype/appraisal/appraisal.py b/hrms/hr/doctype/appraisal/appraisal.py index b00f402..4b75772 100644 --- a/hrms/hr/doctype/appraisal/appraisal.py +++ b/hrms/hr/doctype/appraisal/appraisal.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder.functions import Avg -from frappe.utils import flt, get_link_to_form, now +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder.functions import Avg +from xhiveframework.utils import flt, get_link_to_form, now from hrms.hr.doctype.appraisal_cycle.appraisal_cycle import validate_active_appraisal_cycle from hrms.hr.utils import validate_active_employee @@ -28,9 +28,9 @@ class Appraisal(Document): self.calculate_final_score() def validate_duplicate(self): - Appraisal = frappe.qb.DocType("Appraisal") + Appraisal = xhiveframework.qb.DocType("Appraisal") duplicate = ( - frappe.qb.from_(Appraisal) + xhiveframework.qb.from_(Appraisal) .select(Appraisal.name) .where( (Appraisal.employee == self.employee) @@ -50,13 +50,13 @@ class Appraisal(Document): duplicate = duplicate[0][0] if duplicate else 0 if duplicate: - frappe.throw( + xhiveframework.throw( _( "Appraisal {0} already exists for Employee {1} for this Appraisal Cycle or overlapping period" ).format( - get_link_to_form("Appraisal", duplicate), frappe.bold(self.employee_name) + get_link_to_form("Appraisal", duplicate), xhiveframework.bold(self.employee_name) ), - exc=frappe.DuplicateEntryError, + exc=xhiveframework.DuplicateEntryError, title=_("Duplicate Entry"), ) @@ -65,19 +65,19 @@ class Appraisal(Document): self.is_new() and self.appraisal_cycle and ( - frappe.db.get_value("Appraisal Cycle", self.appraisal_cycle, "kra_evaluation_method") + xhiveframework.db.get_value("Appraisal Cycle", self.appraisal_cycle, "kra_evaluation_method") == "Manual Rating" ) ): self.rate_goals_manually = 1 - @frappe.whitelist() + @xhiveframework.whitelist() def set_appraisal_template(self): """Sets appraisal template from Appraisee table in Cycle""" if not self.appraisal_cycle: return - appraisal_template = frappe.db.get_value( + appraisal_template = xhiveframework.db.get_value( "Appraisee", { "employee": self.employee, @@ -90,7 +90,7 @@ class Appraisal(Document): self.appraisal_template = appraisal_template self.set_kras_and_rating_criteria() - @frappe.whitelist() + @xhiveframework.whitelist() def set_kras_and_rating_criteria(self): if not self.appraisal_template: return @@ -99,7 +99,7 @@ class Appraisal(Document): self.set("self_ratings", []) self.set("goals", []) - template = frappe.get_doc("Appraisal Template", self.appraisal_template) + template = xhiveframework.get_doc("Appraisal Template", self.appraisal_template) for entry in template.goals: table_name = "goals" if self.rate_goals_manually else "appraisal_kra" @@ -130,7 +130,7 @@ class Appraisal(Document): table = _("Goals") for entry in self.goals: if flt(entry.score) > 5: - frappe.throw(_("Row {0}: Goal Score cannot be greater than 5").format(entry.idx)) + xhiveframework.throw(_("Row {0}: Goal Score cannot be greater than 5").format(entry.idx)) entry.score_earned = flt(entry.score) * flt(entry.per_weightage) / 100 total += flt(entry.score_earned) @@ -147,7 +147,7 @@ class Appraisal(Document): total = flt(goal_score_percentage) / 20 if total_weightage and flt(total_weightage, 2) != 100.0: - frappe.throw( + xhiveframework.throw( _("Total weightage for all {0} must add up to 100. Currently, it is {1}%").format( table, total_weightage ), @@ -165,7 +165,7 @@ class Appraisal(Document): self.self_score = flt(total, self.precision("self_score")) def calculate_avg_feedback_score(self, update=False): - avg_feedback_score = frappe.qb.avg( + avg_feedback_score = xhiveframework.qb.avg( "Employee Performance Feedback", "total_score", {"employee": self.employee, "appraisal": self.name, "docstatus": 1}, @@ -182,16 +182,16 @@ class Appraisal(Document): self.final_score = flt(final_score, self.precision("final_score")) - @frappe.whitelist() + @xhiveframework.whitelist() def add_feedback(self, feedback, feedback_ratings): - feedback = frappe.get_doc( + feedback = xhiveframework.get_doc( { "doctype": "Employee Performance Feedback", "appraisal": self.name, "employee": self.employee, "added_on": now(), "feedback": feedback, - "reviewer": frappe.db.get_value("Employee", {"user_id": frappe.session.user}), + "reviewer": xhiveframework.db.get_value("Employee", {"user_id": xhiveframework.session.user}), } ) @@ -212,9 +212,9 @@ class Appraisal(Document): def set_goal_score(self, update=False): for kra in self.appraisal_kra: # update progress for all goals as KRA linked could be removed or changed - Goal = frappe.qb.DocType("Goal") + Goal = xhiveframework.qb.DocType("Goal") avg_goal_completion = ( - frappe.qb.from_(Goal) + xhiveframework.qb.from_(Goal) .select(Avg(Goal.progress).as_("avg_goal_completion")) .where( (Goal.kra == kra.kra) @@ -241,10 +241,10 @@ class Appraisal(Document): return self -@frappe.whitelist() +@xhiveframework.whitelist() def get_feedback_history(employee, appraisal): - data = frappe._dict() - data.feedback_history = frappe.get_list( + data = xhiveframework._dict() + data.feedback_history = xhiveframework.get_list( "Employee Performance Feedback", filters={"employee": employee, "appraisal": appraisal, "docstatus": 1}, fields=[ @@ -265,7 +265,7 @@ def get_feedback_history(employee, appraisal): # get percentage of reviews per rating reviews_per_rating = [] - feedback_count = frappe.db.count( + feedback_count = xhiveframework.db.count( "Employee Performance Feedback", filters={ "appraisal": appraisal, @@ -275,7 +275,7 @@ def get_feedback_history(employee, appraisal): ) for i in range(1, 6): - count = frappe.db.count( + count = xhiveframework.db.count( "Employee Performance Feedback", filters={ "appraisal": appraisal, @@ -289,15 +289,15 @@ def get_feedback_history(employee, appraisal): reviews_per_rating.append(percent) data.reviews_per_rating = reviews_per_rating - data.avg_feedback_score = frappe.db.get_value("Appraisal", appraisal, "avg_feedback_score") + data.avg_feedback_score = xhiveframework.db.get_value("Appraisal", appraisal, "avg_feedback_score") return data -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs +@xhiveframework.whitelist() +@xhiveframework.validate_and_sanitize_search_inputs def get_kras_for_employee(doctype, txt, searchfield, start, page_len, filters): - appraisal = frappe.db.get_value( + appraisal = xhiveframework.db.get_value( "Appraisal", { "appraisal_cycle": filters.get("appraisal_cycle"), @@ -306,7 +306,7 @@ def get_kras_for_employee(doctype, txt, searchfield, start, page_len, filters): "name", ) - return frappe.get_all( + return xhiveframework.get_all( "Appraisal KRA", filters={"parent": appraisal, "kra": ("like", "{0}%".format(txt))}, fields=["kra"], diff --git a/hrms/hr/doctype/appraisal/test_appraisal.py b/hrms/hr/doctype/appraisal/test_appraisal.py index 5eecc61..bb4d7f6 100644 --- a/hrms/hr/doctype/appraisal/test_appraisal.py +++ b/hrms/hr/doctype/appraisal/test_appraisal.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -from erpnext.setup.doctype.designation.test_designation import create_designation -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.appraisal_cycle.appraisal_cycle import get_appraisal_cycle_summary from hrms.hr.doctype.appraisal_cycle.test_appraisal_cycle import create_appraisal_cycle @@ -19,11 +19,11 @@ from hrms.hr.doctype.goal.test_goal import create_goal from hrms.tests.test_utils import create_company -class TestAppraisal(FrappeTestCase): +class TestAppraisal(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Goal") - frappe.db.delete("Appraisal") - frappe.db.delete("Employee Performance Feedback") + xhiveframework.db.delete("Goal") + xhiveframework.db.delete("Appraisal") + xhiveframework.db.delete("Employee Performance Feedback") self.company = create_company("_Test Appraisal").name self.template = create_appraisal_template() @@ -40,7 +40,7 @@ class TestAppraisal(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer") cycle.create_appraisals() - appraisal = frappe.get_doc( + appraisal = xhiveframework.get_doc( { "doctype": "Appraisal", "employee": self.employee1, @@ -49,16 +49,16 @@ class TestAppraisal(FrappeTestCase): ) appraisal.set_appraisal_template() - self.assertRaises(frappe.DuplicateEntryError, appraisal.insert) + self.assertRaises(xhiveframework.DuplicateEntryError, appraisal.insert) def test_manual_kra_rating(self): cycle = create_appraisal_cycle(designation="Engineer", kra_evaluation_method="Manual Rating") cycle.create_appraisals() - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # 30% weightage appraisal.goals[0].score = 5 @@ -76,10 +76,10 @@ class TestAppraisal(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer", kra_evaluation_method="Manual Rating") cycle.create_appraisals() - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # GOAL SCORE appraisal.goals[0].score = 5 # 30% weightage @@ -130,10 +130,10 @@ class TestAppraisal(FrappeTestCase): child2_1 = create_goal(self.employee1, parent_goal=parent2.name, progress=100) child2_2 = create_goal(self.employee1, parent_goal=parent2.name) - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # Quality KRA, 30% weightage self.assertEqual(appraisal.appraisal_kra[0].goal_completion, 12.5) @@ -175,10 +175,10 @@ class TestAppraisal(FrappeTestCase): child2_1 = create_goal(self.employee1, parent_goal=parent2.name, progress=50) child2_2 = create_goal(self.employee1, parent_goal=parent2.name) - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # Quality KRA, 30% weightage self.assertEqual(appraisal.appraisal_kra[0].goal_completion, 50) @@ -207,10 +207,10 @@ class TestAppraisal(FrappeTestCase): goal = create_goal(self.employee1, "Quality", appraisal_cycle=cycle.name, progress=50) - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # Quality KRA, 30% weightage self.assertEqual(appraisal.appraisal_kra[0].goal_completion, 50) @@ -233,10 +233,10 @@ class TestAppraisal(FrappeTestCase): goal = create_goal(self.employee1, "Quality", appraisal_cycle=cycle.name, progress=50) - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) # Quality KRA, 30% weightage self.assertEqual(appraisal.appraisal_kra[0].goal_completion, 50) @@ -251,10 +251,10 @@ class TestAppraisal(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer") cycle.create_appraisals() - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) ratings = appraisal.self_ratings # 70% weightage @@ -270,16 +270,16 @@ class TestAppraisal(FrappeTestCase): cycle.create_appraisals() # unsubmitted appraisals - self.assertRaises(frappe.ValidationError, cycle.complete_cycle) + self.assertRaises(xhiveframework.ValidationError, cycle.complete_cycle) - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) appraisal.submit() cycle.complete_cycle() - appraisal = frappe.get_doc( + appraisal = xhiveframework.get_doc( { "doctype": "Appraisal", "employee": self.employee1, @@ -289,7 +289,7 @@ class TestAppraisal(FrappeTestCase): ) # transaction against a Completed cycle - self.assertRaises(frappe.ValidationError, appraisal.insert) + self.assertRaises(xhiveframework.ValidationError, appraisal.insert) def test_cycle_summary(self): employee2 = make_employee("employee2@example.com", company=self.company, designation="Engineer") @@ -297,10 +297,10 @@ class TestAppraisal(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer") cycle.create_appraisals() - appraisal = frappe.db.exists( + appraisal = xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1} ) - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) goal = create_goal(self.employee1, "Quality", appraisal_cycle=cycle.name) feedback = create_performance_feedback( diff --git a/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.js b/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.js index c3a1368..c90edaa 100644 --- a/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.js +++ b/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.js @@ -1,7 +1,7 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2022, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Appraisal Cycle", { +xhiveframework.ui.form.on("Appraisal Cycle", { refresh(frm) { frm.set_query("department", () => { return { @@ -19,11 +19,11 @@ frappe.ui.form.on("Appraisal Cycle", { if (frm.doc.__islocal) return; frm.add_custom_button(__("View Goals"), () => { - frappe.route_options = { + xhiveframework.route_options = { company: frm.doc.company, appraisal_cycle: frm.doc.name, }; - frappe.set_route("Tree", "Goal"); + xhiveframework.set_route("Tree", "Goal"); }); let className = ""; @@ -57,7 +57,7 @@ frappe.ui.form.on("Appraisal Cycle", { }, get_employees(frm) { - frappe.call({ + xhiveframework.call({ method: "set_employees", doc: frm.doc, freeze: true, @@ -86,7 +86,7 @@ frappe.ui.form.on("Appraisal Cycle", { msg += "
"; msg += __("Are you sure you want to proceed?"); - frappe.confirm( + xhiveframework.confirm( msg, () => { frm.call({ @@ -105,7 +105,7 @@ frappe.ui.form.on("Appraisal Cycle", { show_appraisal_summary(frm) { if (frm.doc.__islocal) return; - frappe.call( + xhiveframework.call( "hrms.hr.doctype.appraisal_cycle.appraisal_cycle.get_appraisal_cycle_summary", {cycle_name: frm.doc.name} ).then(r => { diff --git a/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.py b/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.py index ae2a187..3c4f398 100644 --- a/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.py +++ b/hrms/hr/doctype/appraisal_cycle/appraisal_cycle.py @@ -1,11 +1,11 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder.functions import Count -from frappe.query_builder.terms import SubQuery +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder.functions import Count +from xhiveframework.query_builder.terms import SubQuery class AppraisalCycle(Document): @@ -21,7 +21,7 @@ class AppraisalCycle(Document): return if self.has_value_changed("kra_evaluation_method") and self.check_if_appraisals_exist(): - frappe.throw( + xhiveframework.throw( _( "Evaluation Method cannot be changed as there are existing appraisals created for this cycle" ), @@ -29,12 +29,12 @@ class AppraisalCycle(Document): ) def check_if_appraisals_exist(self): - return frappe.db.exists( + return xhiveframework.db.exists( "Appraisal", {"appraisal_cycle": self.name, "docstatus": ["!=", 2]}, ) - @frappe.whitelist() + @xhiveframework.whitelist() def set_employees(self): """Pull employees in appraisee list based on selected filters""" employees = self.get_employees_for_appraisal() @@ -64,7 +64,7 @@ class AppraisalCycle(Document): self.show_missing_template_message() else: self.set("appraisees", []) - frappe.msgprint(_("No employees found for the selected criteria")) + xhiveframework.msgprint(_("No employees found for the selected criteria")) return self @@ -80,7 +80,7 @@ class AppraisalCycle(Document): if self.designation: filters["designation"] = self.designation - employees = frappe.db.get_all( + employees = xhiveframework.db.get_all( "Employee", filters=filters, fields=[ @@ -95,19 +95,19 @@ class AppraisalCycle(Document): return employees def get_appraisal_template_map(self): - designations = frappe.get_all("Designation", fields=["name", "appraisal_template"]) - appraisal_templates = frappe._dict() + designations = xhiveframework.get_all("Designation", fields=["name", "appraisal_template"]) + appraisal_templates = xhiveframework._dict() for entry in designations: appraisal_templates[entry.name] = entry.appraisal_template return appraisal_templates - @frappe.whitelist() + @xhiveframework.whitelist() def create_appraisals(self): self.check_permission("write") if not self.appraisees: - frappe.throw( + xhiveframework.throw( _("Please select employees to create appraisals for"), title=_("No Employees Selected") ) @@ -115,13 +115,13 @@ class AppraisalCycle(Document): self.show_missing_template_message(raise_exception=True) if len(self.appraisees) > 30: - frappe.enqueue( + xhiveframework.enqueue( create_appraisals_for_cycle, queue="long", timeout=600, appraisal_cycle=self, ) - frappe.msgprint( + xhiveframework.msgprint( _("Appraisal creation is queued. It may take a few minutes."), alert=True, indicator="blue", @@ -136,26 +136,26 @@ class AppraisalCycle(Document): msg += "

" msg += _( "Please set the Appraisal Template for all the {0} or select the template in the Employees table below." - ).format(f"""Designations""") + ).format(f"""Designations""") - frappe.msgprint( + xhiveframework.msgprint( msg, title=_("Appraisal Template Missing"), indicator="yellow", raise_exception=raise_exception ) - @frappe.whitelist() + @xhiveframework.whitelist() def complete_cycle(self): self.check_permission("write") - draft_appraisals = frappe.db.count("Appraisal", {"appraisal_cycle": self.name, "docstatus": 0}) + draft_appraisals = xhiveframework.db.count("Appraisal", {"appraisal_cycle": self.name, "docstatus": 0}) if draft_appraisals: - link = frappe.utils.get_url_to_list("Appraisal") + f"?status=Draft&appraisal_cycle={self.name}" + link = xhiveframework.utils.get_url_to_list("Appraisal") + f"?status=Draft&appraisal_cycle={self.name}" link = f"""documents""" - msg = _("{0} Appraisal(s) are not submitted yet").format(frappe.bold(draft_appraisals)) + msg = _("{0} Appraisal(s) are not submitted yet").format(xhiveframework.bold(draft_appraisals)) msg += "

" msg += _("Please submit the {0} before marking the cycle as Completed").format(link) - frappe.throw(msg, title=_("Unsubmitted Appraisals")) + xhiveframework.throw(msg, title=_("Unsubmitted Appraisals")) self.status = "Completed" self.save() @@ -170,7 +170,7 @@ def create_appraisals_for_cycle(appraisal_cycle: AppraisalCycle, publish_progres for employee in appraisal_cycle.appraisees: try: - appraisal = frappe.get_doc( + appraisal = xhiveframework.get_doc( { "doctype": "Appraisal", "appraisal_template": employee.appraisal_template, @@ -187,33 +187,33 @@ def create_appraisals_for_cycle(appraisal_cycle: AppraisalCycle, publish_progres if publish_progress: count += 1 - frappe.publish_progress( + xhiveframework.publish_progress( count * 100 / len(appraisal_cycle.appraisees), title=_("Creating Appraisals") + "..." ) - except frappe.DuplicateEntryError: + except xhiveframework.DuplicateEntryError: # already exists pass def validate_active_appraisal_cycle(appraisal_cycle: str) -> None: - if frappe.db.get_value("Appraisal Cycle", appraisal_cycle, "status") == "Completed": + if xhiveframework.db.get_value("Appraisal Cycle", appraisal_cycle, "status") == "Completed": msg = _("Cannot create or change transactions against a {0} Appraisal Cycle.").format( - frappe.bold("Completed") + xhiveframework.bold("Completed") ) msg += "

" - msg += _("Mark the cycle as {0} if required.").format(frappe.bold("In Progress")) + msg += _("Mark the cycle as {0} if required.").format(xhiveframework.bold("In Progress")) - frappe.throw(msg, title=_("Not Allowed")) + xhiveframework.throw(msg, title=_("Not Allowed")) -@frappe.whitelist() +@xhiveframework.whitelist() def get_appraisal_cycle_summary(cycle_name: str) -> dict: - summary = frappe._dict() + summary = xhiveframework._dict() - summary["appraisees"] = frappe.db.count( + summary["appraisees"] = xhiveframework.db.count( "Appraisal", {"appraisal_cycle": cycle_name, "docstatus": ("!=", 2)} ) - summary["self_appraisal_pending"] = frappe.db.count( + summary["self_appraisal_pending"] = xhiveframework.db.count( "Appraisal", {"appraisal_cycle": cycle_name, "docstatus": 0, "self_score": 0} ) summary["goals_missing"] = get_employees_without_goals(cycle_name) @@ -223,19 +223,19 @@ def get_appraisal_cycle_summary(cycle_name: str) -> dict: def get_employees_without_goals(cycle_name: str) -> int: - Goal = frappe.qb.DocType("Goal") - Appraisal = frappe.qb.DocType("Appraisal") + Goal = xhiveframework.qb.DocType("Goal") + Appraisal = xhiveframework.qb.DocType("Appraisal") count = Count("*").as_("count") filtered_records = SubQuery( - frappe.qb.from_(Goal) + xhiveframework.qb.from_(Goal) .select(Goal.employee) .distinct() .where((Goal.appraisal_cycle == cycle_name) & (Goal.status != "Archived")) ) goals_missing = ( - frappe.qb.from_(Appraisal) + xhiveframework.qb.from_(Appraisal) .select(count) .where( (Appraisal.appraisal_cycle == cycle_name) @@ -248,19 +248,19 @@ def get_employees_without_goals(cycle_name: str) -> int: def get_employees_without_feedback(cycle_name: str) -> int: - Feedback = frappe.qb.DocType("Employee Performance Feedback") - Appraisal = frappe.qb.DocType("Appraisal") + Feedback = xhiveframework.qb.DocType("Employee Performance Feedback") + Appraisal = xhiveframework.qb.DocType("Appraisal") count = Count("*").as_("count") filtered_records = SubQuery( - frappe.qb.from_(Feedback) + xhiveframework.qb.from_(Feedback) .select(Feedback.employee) .distinct() .where((Feedback.appraisal_cycle == cycle_name) & (Feedback.docstatus == 1)) ) feedback_missing = ( - frappe.qb.from_(Appraisal) + xhiveframework.qb.from_(Appraisal) .select(count) .where( (Appraisal.appraisal_cycle == cycle_name) diff --git a/hrms/hr/doctype/appraisal_cycle/test_appraisal_cycle.py b/hrms/hr/doctype/appraisal_cycle/test_appraisal_cycle.py index 43512a5..bbd752e 100644 --- a/hrms/hr/doctype/appraisal_cycle/test_appraisal_cycle.py +++ b/hrms/hr/doctype/appraisal_cycle/test_appraisal_cycle.py @@ -1,17 +1,17 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -from erpnext.setup.doctype.designation.test_designation import create_designation -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.appraisal_template.test_appraisal_template import create_appraisal_template from hrms.tests.test_utils import create_company -class TestAppraisalCycle(FrappeTestCase): +class TestAppraisalCycle(XhiveframeworkTestCase): def setUp(self): company = create_company("_Test Appraisal").name self.template = create_appraisal_template() @@ -37,10 +37,10 @@ class TestAppraisalCycle(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer") cycle.create_appraisals() - appraisals = frappe.db.get_all("Appraisal", filters={"appraisal_cycle": cycle.name}) + appraisals = xhiveframework.db.get_all("Appraisal", filters={"appraisal_cycle": cycle.name}) self.assertEqual(len(appraisals), 1) - appraisal = frappe.get_doc("Appraisal", appraisals[0].name) + appraisal = xhiveframework.get_doc("Appraisal", appraisals[0].name) for i in range(2): # check if KRAs are set @@ -55,13 +55,13 @@ class TestAppraisalCycle(FrappeTestCase): def create_appraisal_cycle(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) name = args.name or "Q1" - if frappe.db.exists("Appraisal Cycle", name): - frappe.delete_doc("Appraisal Cycle", name, force=True) + if xhiveframework.db.exists("Appraisal Cycle", name): + xhiveframework.delete_doc("Appraisal Cycle", name, force=True) - appraisal_cycle = frappe.get_doc( + appraisal_cycle = xhiveframework.get_doc( { "doctype": "Appraisal Cycle", "cycle_name": name, diff --git a/hrms/hr/doctype/appraisal_goal/appraisal_goal.py b/hrms/hr/doctype/appraisal_goal/appraisal_goal.py index 3cbc918..73ffec4 100644 --- a/hrms/hr/doctype/appraisal_goal/appraisal_goal.py +++ b/hrms/hr/doctype/appraisal_goal/appraisal_goal.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class AppraisalGoal(Document): diff --git a/hrms/hr/doctype/appraisal_kra/appraisal_kra.py b/hrms/hr/doctype/appraisal_kra/appraisal_kra.py index 2a1be93..af5af7f 100644 --- a/hrms/hr/doctype/appraisal_kra/appraisal_kra.py +++ b/hrms/hr/doctype/appraisal_kra/appraisal_kra.py @@ -1,8 +1,8 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class AppraisalKRA(Document): diff --git a/hrms/hr/doctype/appraisal_template/appraisal_template.js b/hrms/hr/doctype/appraisal_template/appraisal_template.js index 162f97e..04c4be9 100644 --- a/hrms/hr/doctype/appraisal_template/appraisal_template.js +++ b/hrms/hr/doctype/appraisal_template/appraisal_template.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Appraisal Template", { +xhiveframework.ui.form.on("Appraisal Template", { setup(frm) { frm.get_field("rating_criteria").grid.editable_fields = [ {fieldname: "criteria", columns: 6}, diff --git a/hrms/hr/doctype/appraisal_template/appraisal_template.py b/hrms/hr/doctype/appraisal_template/appraisal_template.py index 5449401..7be26c1 100644 --- a/hrms/hr/doctype/appraisal_template/appraisal_template.py +++ b/hrms/hr/doctype/appraisal_template/appraisal_template.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import flt class AppraisalTemplate(Document): @@ -21,9 +21,9 @@ class AppraisalTemplate(Document): if flt(total_weightage, 2) != 100.0: table = _("KRAs") if table_name == "goals" else _("Criteria") - frappe.throw( + xhiveframework.throw( _("Total weightage for all {0} must add up to 100. Currently, it is {1}%").format( - frappe.bold(table), total_weightage + xhiveframework.bold(table), total_weightage ), title=_("Incorrect Weightage Allocation"), ) diff --git a/hrms/hr/doctype/appraisal_template/test_appraisal_template.py b/hrms/hr/doctype/appraisal_template/test_appraisal_template.py index c302153..db49968 100644 --- a/hrms/hr/doctype/appraisal_template/test_appraisal_template.py +++ b/hrms/hr/doctype/appraisal_template/test_appraisal_template.py @@ -1,18 +1,18 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -class TestAppraisalTemplate(FrappeTestCase): +class TestAppraisalTemplate(XhiveframeworkTestCase): def test_incorrect_weightage_allocation(self): template = create_appraisal_template() template.goals[1].per_weightage = 69.99 - self.assertRaises(frappe.ValidationError, template.save) + self.assertRaises(xhiveframework.ValidationError, template.save) template.reload() template.goals[1].per_weightage = 70.00 @@ -21,8 +21,8 @@ class TestAppraisalTemplate(FrappeTestCase): def create_kras(kras): for entry in kras: - if not frappe.db.exists("KRA", entry): - frappe.get_doc( + if not xhiveframework.db.exists("KRA", entry): + xhiveframework.get_doc( { "doctype": "KRA", "title": entry, @@ -32,8 +32,8 @@ def create_kras(kras): def create_criteria(criteria): for entry in criteria: - if not frappe.db.exists("Employee Feedback Criteria", entry): - frappe.get_doc( + if not xhiveframework.db.exists("Employee Feedback Criteria", entry): + xhiveframework.get_doc( { "doctype": "Employee Feedback Criteria", "criteria": entry, @@ -44,8 +44,8 @@ def create_criteria(criteria): def create_appraisal_template(title=None, kras=None, rating_criteria=None): name = title or "Engineering" - if frappe.db.exists("Appraisal Template", name): - return frappe.get_doc("Appraisal Template", name) + if xhiveframework.db.exists("Appraisal Template", name): + return xhiveframework.get_doc("Appraisal Template", name) if not kras: kras = [ @@ -74,7 +74,7 @@ def create_appraisal_template(title=None, kras=None, rating_criteria=None): create_kras([entry["key_result_area"] for entry in kras]) create_criteria([entry["criteria"] for entry in rating_criteria]) - appraisal_template = frappe.new_doc("Appraisal Template") + appraisal_template = xhiveframework.new_doc("Appraisal Template") appraisal_template.template_title = name appraisal_template.update({"goals": kras}) appraisal_template.update({"rating_criteria": rating_criteria}) diff --git a/hrms/hr/doctype/appraisal_template_goal/appraisal_template_goal.py b/hrms/hr/doctype/appraisal_template_goal/appraisal_template_goal.py index e6c5f64..b89e523 100644 --- a/hrms/hr/doctype/appraisal_template_goal/appraisal_template_goal.py +++ b/hrms/hr/doctype/appraisal_template_goal/appraisal_template_goal.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class AppraisalTemplateGoal(Document): diff --git a/hrms/hr/doctype/appraisee/appraisee.py b/hrms/hr/doctype/appraisee/appraisee.py index 6795731..e01e9ce 100644 --- a/hrms/hr/doctype/appraisee/appraisee.py +++ b/hrms/hr/doctype/appraisee/appraisee.py @@ -1,8 +1,8 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class Appraisee(Document): diff --git a/hrms/hr/doctype/attendance/attendance.js b/hrms/hr/doctype/attendance/attendance.js index 7964078..a4ff1e3 100644 --- a/hrms/hr/doctype/attendance/attendance.js +++ b/hrms/hr/doctype/attendance/attendance.js @@ -1,15 +1,15 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt cur_frm.add_fetch('employee', 'company', 'company'); cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); cur_frm.cscript.onload = function(doc, cdt, cdn) { - if(doc.__islocal) cur_frm.set_value("attendance_date", frappe.datetime.get_today()); + if(doc.__islocal) cur_frm.set_value("attendance_date", xhiveframework.datetime.get_today()); } cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) { return{ - query: "erpnext.controllers.queries.employee_query" + query: "xhiveerp.controllers.queries.employee_query" } } diff --git a/hrms/hr/doctype/attendance/attendance.py b/hrms/hr/doctype/attendance/attendance.py index fd64a8b..2fb7362 100644 --- a/hrms/hr/doctype/attendance/attendance.py +++ b/hrms/hr/doctype/attendance/attendance.py @@ -1,12 +1,12 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import ( +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder import Criterion +from xhiveframework.utils import ( add_days, cint, cstr, @@ -21,17 +21,17 @@ from hrms.hr.doctype.shift_assignment.shift_assignment import has_overlapping_ti from hrms.hr.utils import get_holiday_dates_for_employee, validate_active_employee -class DuplicateAttendanceError(frappe.ValidationError): +class DuplicateAttendanceError(xhiveframework.ValidationError): pass -class OverlappingShiftAttendanceError(frappe.ValidationError): +class OverlappingShiftAttendanceError(xhiveframework.ValidationError): pass class Attendance(Document): def validate(self): - from erpnext.controllers.status_updater import validate_status + from xhiveerp.controllers.status_updater import validate_status validate_status(self.status, ["Present", "Absent", "On Leave", "Half Day", "Work From Home"]) validate_active_employee(self.employee) @@ -45,7 +45,7 @@ class Attendance(Document): self.unlink_attendance_from_checkins() def validate_attendance_date(self): - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") + date_of_joining = xhiveframework.db.get_value("Employee", self.employee, "date_of_joining") # leaves can be marked for future dates if ( @@ -53,17 +53,17 @@ class Attendance(Document): and not self.leave_application and getdate(self.attendance_date) > getdate(nowdate()) ): - frappe.throw( + xhiveframework.throw( _("Attendance can not be marked for future dates: {0}").format( - frappe.bold(format_date(self.attendance_date)), + xhiveframework.bold(format_date(self.attendance_date)), ) ) elif date_of_joining and getdate(self.attendance_date) < getdate(date_of_joining): - frappe.throw( + xhiveframework.throw( _("Attendance date {0} can not be less than employee {1}'s joining date: {2}").format( - frappe.bold(format_date(self.attendance_date)), - frappe.bold(self.employee), - frappe.bold(format_date(date_of_joining)), + xhiveframework.bold(format_date(self.attendance_date)), + xhiveframework.bold(self.employee), + xhiveframework.bold(format_date(date_of_joining)), ) ) @@ -73,10 +73,10 @@ class Attendance(Document): ) if duplicate: - frappe.throw( + xhiveframework.throw( _("Attendance for employee {0} is already marked for the date {1}: {2}").format( - frappe.bold(self.employee), - frappe.bold(format_date(self.attendance_date)), + xhiveframework.bold(self.employee), + xhiveframework.bold(format_date(self.attendance_date)), get_link_to_form("Attendance", duplicate[0].name), ), title=_("Duplicate Attendance"), @@ -89,10 +89,10 @@ class Attendance(Document): ) if attendance: - frappe.throw( + xhiveframework.throw( _("Attendance for employee {0} is already marked for an overlapping shift {1}: {2}").format( - frappe.bold(self.employee), - frappe.bold(attendance.shift), + xhiveframework.bold(self.employee), + xhiveframework.bold(attendance.shift), get_link_to_form("Attendance", attendance.name), ), title=_("Overlapping Shift Attendance"), @@ -100,11 +100,11 @@ class Attendance(Document): ) def validate_employee_status(self): - if frappe.db.get_value("Employee", self.employee, "status") == "Inactive": - frappe.throw(_("Cannot mark attendance for an Inactive employee {0}").format(self.employee)) + if xhiveframework.db.get_value("Employee", self.employee, "status") == "Inactive": + xhiveframework.throw(_("Cannot mark attendance for an Inactive employee {0}").format(self.employee)) def check_leave_record(self): - leave_record = frappe.db.sql( + leave_record = xhiveframework.db.sql( """ select leave_type, half_day, half_day_date from `tabLeave Application` @@ -121,18 +121,18 @@ class Attendance(Document): self.leave_type = d.leave_type if d.half_day_date == getdate(self.attendance_date): self.status = "Half Day" - frappe.msgprint( + xhiveframework.msgprint( _("Employee {0} on Half day on {1}").format(self.employee, format_date(self.attendance_date)) ) else: self.status = "On Leave" - frappe.msgprint( + xhiveframework.msgprint( _("Employee {0} is on Leave on {1}").format(self.employee, format_date(self.attendance_date)) ) if self.status in ("On Leave", "Half Day"): if not leave_record: - frappe.msgprint( + xhiveframework.msgprint( _("No leave record found for employee {0} on {1}").format( self.employee, format_date(self.attendance_date) ), @@ -143,16 +143,16 @@ class Attendance(Document): self.leave_application = None def validate_employee(self): - emp = frappe.db.sql( + emp = xhiveframework.db.sql( "select name from `tabEmployee` where name = %s and status = 'Active'", self.employee ) if not emp: - frappe.throw(_("Employee {0} is not active or does not exist").format(self.employee)) + xhiveframework.throw(_("Employee {0} is not active or does not exist").format(self.employee)) def unlink_attendance_from_checkins(self): - EmployeeCheckin = frappe.qb.DocType("Employee Checkin") + EmployeeCheckin = xhiveframework.qb.DocType("Employee Checkin") linked_logs = ( - frappe.qb.from_(EmployeeCheckin) + xhiveframework.qb.from_(EmployeeCheckin) .select(EmployeeCheckin.name) .where(EmployeeCheckin.attendance == self.name) .for_update() @@ -161,12 +161,12 @@ class Attendance(Document): if linked_logs: ( - frappe.qb.update(EmployeeCheckin) + xhiveframework.qb.update(EmployeeCheckin) .set("attendance", "") .where(EmployeeCheckin.attendance == self.name) ).run() - frappe.msgprint( + xhiveframework.msgprint( msg=_("Unlinked Attendance record from Employee Checkins: {}").format( ", ".join(get_link_to_form("Employee Checkin", log.name) for log in linked_logs) ), @@ -178,9 +178,9 @@ class Attendance(Document): def get_duplicate_attendance_record(employee, attendance_date, shift, name=None): - attendance = frappe.qb.DocType("Attendance") + attendance = xhiveframework.qb.DocType("Attendance") query = ( - frappe.qb.from_(attendance) + xhiveframework.qb.from_(attendance) .select(attendance.name) .where((attendance.employee == employee) & (attendance.docstatus < 2)) ) @@ -218,9 +218,9 @@ def get_overlapping_shift_attendance(employee, attendance_date, shift, name=None if not shift: return {} - attendance = frappe.qb.DocType("Attendance") + attendance = xhiveframework.qb.DocType("Attendance") query = ( - frappe.qb.from_(attendance) + xhiveframework.qb.from_(attendance) .select(attendance.name, attendance.shift) .where( (attendance.employee == employee) @@ -240,16 +240,16 @@ def get_overlapping_shift_attendance(employee, attendance_date, shift, name=None return {} -@frappe.whitelist() +@xhiveframework.whitelist() def get_events(start, end, filters=None): events = [] - employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user}) + employee = xhiveframework.db.get_value("Employee", {"user_id": xhiveframework.session.user}) if not employee: return events - from frappe.desk.reportview import get_filters_cond + from xhiveframework.desk.reportview import get_filters_cond conditions = get_filters_cond("Attendance", filters, []) add_attendance(events, start, end, conditions=conditions) @@ -264,7 +264,7 @@ def add_attendance(events, start, end, conditions=None): if conditions: query += conditions - for d in frappe.db.sql(query, {"from_date": start, "to_date": end}, as_dict=True): + for d in xhiveframework.db.sql(query, {"from_date": start, "to_date": end}, as_dict=True): e = { "name": d.name, "doctype": "Attendance", @@ -293,8 +293,8 @@ def mark_attendance( if get_overlapping_shift_attendance(employee, attendance_date, shift): return - company = frappe.db.get_value("Employee", employee, "company") - attendance = frappe.get_doc( + company = xhiveframework.db.get_value("Employee", employee, "company") + attendance = xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -313,16 +313,16 @@ def mark_attendance( return attendance.name -@frappe.whitelist() +@xhiveframework.whitelist() def mark_bulk_attendance(data): import json if isinstance(data, str): data = json.loads(data) - data = frappe._dict(data) - company = frappe.get_value("Employee", data.employee, "company") + data = xhiveframework._dict(data) + company = xhiveframework.get_value("Employee", data.employee, "company") if not data.unmarked_days: - frappe.throw(_("Please select a date.")) + xhiveframework.throw(_("Please select a date.")) return for date in data.unmarked_days: @@ -333,20 +333,20 @@ def mark_bulk_attendance(data): "status": data.status, "company": company, } - attendance = frappe.get_doc(doc_dict).insert() + attendance = xhiveframework.get_doc(doc_dict).insert() attendance.submit() -@frappe.whitelist() +@xhiveframework.whitelist() def get_unmarked_days(employee, from_date, to_date, exclude_holidays=0): - joining_date, relieving_date = frappe.get_cached_value( + joining_date, relieving_date = xhiveframework.get_cached_value( "Employee", employee, ["date_of_joining", "relieving_date"] ) from_date = max(getdate(from_date), joining_date or getdate(from_date)) to_date = min(getdate(to_date), relieving_date or getdate(to_date)) - records = frappe.get_all( + records = xhiveframework.get_all( "Attendance", fields=["attendance_date", "employee"], filters=[ diff --git a/hrms/hr/doctype/attendance/attendance_calendar.js b/hrms/hr/doctype/attendance/attendance_calendar.js index 6341c87..031d4f1 100644 --- a/hrms/hr/doctype/attendance/attendance_calendar.js +++ b/hrms/hr/doctype/attendance/attendance_calendar.js @@ -1,6 +1,6 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.views.calendar["Attendance"] = { +xhiveframework.views.calendar["Attendance"] = { options: { header: { left: 'prev,next today', diff --git a/hrms/hr/doctype/attendance/attendance_list.js b/hrms/hr/doctype/attendance/attendance_list.js index 97132e8..542367f 100644 --- a/hrms/hr/doctype/attendance/attendance_list.js +++ b/hrms/hr/doctype/attendance/attendance_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Attendance"] = { +xhiveframework.listview_settings["Attendance"] = { add_fields: ["status", "attendance_date"], get_indicator: function (doc) { @@ -21,7 +21,7 @@ frappe.listview_settings["Attendance"] = { first_day_of_month = first_day_of_month.subtract(1, "month"); } - let dialog = new frappe.ui.Dialog({ + let dialog = new xhiveframework.ui.Dialog({ title: __("Mark Attendance"), fields: [ { @@ -31,7 +31,7 @@ frappe.listview_settings["Attendance"] = { options: "Employee", get_query: () => { return { - query: "erpnext.controllers.queries.employee_query", + query: "xhiveerp.controllers.queries.employee_query", }; }, reqd: 1, @@ -90,27 +90,27 @@ frappe.listview_settings["Attendance"] = { ], primary_action(data) { if (cur_dialog.no_unmarked_days_left) { - frappe.msgprint( + xhiveframework.msgprint( __( "Attendance from {0} to {1} has already been marked for the Employee {2}", [data.from_date, data.to_date, data.employee] ) ); } else { - frappe.confirm( + xhiveframework.confirm( __("Mark attendance as {0} for {1} on selected dates?", [ data.status, data.employee, ]), () => { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.attendance.attendance.mark_bulk_attendance", args: { data: data, }, callback: function (r) { if (r.message === 1) { - frappe.show_alert({ + xhiveframework.show_alert({ message: __("Attendance Marked"), indicator: "blue", }); @@ -159,7 +159,7 @@ frappe.listview_settings["Attendance"] = { dialog.set_df_property("exclude_holidays", "hidden", 0); dialog.no_unmarked_days_left = false; - frappe + xhiveframework .call({ method: "hrms.hr.doctype.attendance.attendance.get_unmarked_days", async: false, diff --git a/hrms/hr/doctype/attendance/test_attendance.py b/hrms/hr/doctype/attendance/test_attendance.py index 757f2f6..40b888f 100644 --- a/hrms/hr/doctype/attendance/test_attendance.py +++ b/hrms/hr/doctype/attendance/test_attendance.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import ( +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import ( add_days, add_months, get_first_day, @@ -14,7 +14,7 @@ from frappe.utils import ( nowdate, ) -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.attendance.attendance import ( DuplicateAttendanceError, @@ -24,24 +24,24 @@ from hrms.hr.doctype.attendance.attendance import ( ) from hrms.tests.test_utils import get_first_sunday -test_records = frappe.get_test_records("Attendance") +test_records = xhiveframework.get_test_records("Attendance") -class TestAttendance(FrappeTestCase): +class TestAttendance(XhiveframeworkTestCase): def setUp(self): from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list from_date = get_year_start(add_months(getdate(), -1)) to_date = get_year_ending(getdate()) self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - frappe.db.delete("Attendance") + xhiveframework.db.delete("Attendance") def test_duplicate_attendance(self): employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company") date = nowdate() mark_attendance(employee, date, "Present") - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -63,7 +63,7 @@ class TestAttendance(FrappeTestCase): mark_attendance(employee, date, "Present", shift=shift_1.name) # attendance record with shift - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -77,7 +77,7 @@ class TestAttendance(FrappeTestCase): self.assertRaises(DuplicateAttendanceError, attendance.insert) # attendance record without any shift - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -101,7 +101,7 @@ class TestAttendance(FrappeTestCase): mark_attendance(employee, date, "Present", shift=shift_1.name) # attendance record with overlapping shift - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -125,7 +125,7 @@ class TestAttendance(FrappeTestCase): shift_2 = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="12:00:00") mark_attendance(employee, date, "Present", shift_1.name) - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Attendance", "employee": employee, @@ -141,7 +141,7 @@ class TestAttendance(FrappeTestCase): date = nowdate() attendance = mark_attendance(employee, date, "Absent") - fetch_attendance = frappe.get_value( + fetch_attendance = xhiveframework.get_value( "Attendance", {"employee": employee, "attendance_date": date, "status": "Absent"} ) self.assertEqual(attendance, fetch_attendance) @@ -155,7 +155,7 @@ class TestAttendance(FrappeTestCase): employee = make_employee( "test_unmarked_days@example.com", date_of_joining=add_days(attendance_date, -1) ) - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) + xhiveframework.db.set_value("Employee", employee, "holiday_list", self.holiday_list) mark_attendance(employee, attendance_date, "Present") @@ -180,7 +180,7 @@ class TestAttendance(FrappeTestCase): employee = make_employee( "test_unmarked_days@example.com", date_of_joining=add_days(attendance_date, -1) ) - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) + xhiveframework.db.set_value("Employee", employee, "holiday_list", self.holiday_list) mark_attendance(employee, attendance_date, "Present") @@ -208,7 +208,7 @@ class TestAttendance(FrappeTestCase): "test_unmarked_days_as_per_doj@example.com", date_of_joining=doj, relieving_date=relieving_date ) - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) + xhiveframework.db.set_value("Employee", employee, "holiday_list", self.holiday_list) attendance_date = add_days(date, 2) mark_attendance(employee, attendance_date, "Present") @@ -226,4 +226,4 @@ class TestAttendance(FrappeTestCase): self.assertNotIn(add_days(relieving_date, 1), unmarked_days) def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() diff --git a/hrms/hr/doctype/attendance_request/attendance_request.js b/hrms/hr/doctype/attendance_request/attendance_request.js index 0247fa5..eb3a1fb 100644 --- a/hrms/hr/doctype/attendance_request/attendance_request.js +++ b/hrms/hr/doctype/attendance_request/attendance_request.js @@ -1,6 +1,6 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Attendance Request", { +xhiveframework.ui.form.on("Attendance Request", { refresh(frm) { frm.trigger("show_attendance_warnings"); }, @@ -13,7 +13,7 @@ frappe.ui.form.on("Attendance Request", { if (r.message?.length) { frm.dashboard.reset(); frm.dashboard.add_section( - frappe.render_template("attendance_warnings", { + xhiveframework.render_template("attendance_warnings", { warnings: r.message || [], }), __("Attendance Warnings") diff --git a/hrms/hr/doctype/attendance_request/attendance_request.py b/hrms/hr/doctype/attendance_request/attendance_request.py index ffa325c..67f9bfd 100644 --- a/hrms/hr/doctype/attendance_request/attendance_request.py +++ b/hrms/hr/doctype/attendance_request/attendance_request.py @@ -1,18 +1,18 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, date_diff, format_date, get_link_to_form, getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import add_days, date_diff, format_date, get_link_to_form, getdate -from erpnext.setup.doctype.employee.employee import is_holiday +from xhiveerp.setup.doctype.employee.employee import is_holiday from hrms.hr.utils import validate_active_employee, validate_dates -class OverlappingAttendanceRequestError(frappe.ValidationError): +class OverlappingAttendanceRequestError(xhiveframework.ValidationError): pass @@ -26,15 +26,15 @@ class AttendanceRequest(Document): def validate_half_day(self): if self.half_day: if not getdate(self.from_date) <= getdate(self.half_day_date) <= getdate(self.to_date): - frappe.throw(_("Half day date should be in between from date and to date")) + xhiveframework.throw(_("Half day date should be in between from date and to date")) def validate_request_overlap(self): if not self.name: self.name = "New Attendance Request" - Request = frappe.qb.DocType("Attendance Request") + Request = xhiveframework.qb.DocType("Attendance Request") overlapping_request = ( - frappe.qb.from_(Request) + xhiveframework.qb.from_(Request) .select(Request.name) .where( (Request.employee == self.employee) @@ -52,11 +52,11 @@ class AttendanceRequest(Document): msg = _( "Employee {0} already has an Attendance Request {1} that overlaps with this period" ).format( - frappe.bold(self.employee), + xhiveframework.bold(self.employee), get_link_to_form("Attendance Request", overlapping_request), ) - frappe.throw( + xhiveframework.throw( msg, title=_("Overlapping Attendance Request"), exc=OverlappingAttendanceRequestError ) @@ -64,12 +64,12 @@ class AttendanceRequest(Document): self.create_attendance_records() def on_cancel(self): - attendance_list = frappe.get_all( + attendance_list = xhiveframework.get_all( "Attendance", {"employee": self.employee, "attendance_request": self.name, "docstatus": 1} ) if attendance_list: for attendance in attendance_list: - attendance_obj = frappe.get_doc("Attendance", attendance["name"]) + attendance_obj = xhiveframework.get_doc("Attendance", attendance["name"]) attendance_obj.cancel() def create_attendance_records(self): @@ -85,28 +85,28 @@ class AttendanceRequest(Document): if attendance_name: # update existing attendance, change the status - doc = frappe.get_doc("Attendance", attendance_name) + doc = xhiveframework.get_doc("Attendance", attendance_name) old_status = doc.status if old_status != status: doc.db_set({"status": status, "attendance_request": self.name}) text = _("changed the status from {0} to {1} via Attendance Request").format( - frappe.bold(old_status), frappe.bold(status) + xhiveframework.bold(old_status), xhiveframework.bold(status) ) doc.add_comment(comment_type="Info", text=text) - frappe.msgprint( + xhiveframework.msgprint( _("Updated status from {0} to {1} for date {2} in the attendance record {3}").format( - frappe.bold(old_status), - frappe.bold(status), - frappe.bold(format_date(date)), + xhiveframework.bold(old_status), + xhiveframework.bold(status), + xhiveframework.bold(format_date(date)), get_link_to_form("Attendance", doc.name), ), title=_("Attendance Updated"), ) else: # submit a new attendance record - doc = frappe.new_doc("Attendance") + doc = xhiveframework.new_doc("Attendance") doc.employee = self.employee doc.attendance_date = date doc.company = self.company @@ -118,18 +118,18 @@ class AttendanceRequest(Document): def should_mark_attendance(self, attendance_date: str) -> bool: # Check if attendance_date is a holiday if is_holiday(self.employee, attendance_date): - frappe.msgprint( + xhiveframework.msgprint( _("Attendance not submitted for {0} as it is a Holiday.").format( - frappe.bold(format_date(attendance_date)) + xhiveframework.bold(format_date(attendance_date)) ) ) return False # Check if employee is on leave if self.has_leave_record(attendance_date): - frappe.msgprint( + xhiveframework.msgprint( _("Attendance not submitted for {0} as {1} is on leave.").format( - frappe.bold(format_date(attendance_date)), frappe.bold(self.employee) + xhiveframework.bold(format_date(attendance_date)), xhiveframework.bold(self.employee) ) ) return False @@ -137,7 +137,7 @@ class AttendanceRequest(Document): return True def has_leave_record(self, attendance_date: str) -> str | None: - return frappe.db.exists( + return xhiveframework.db.exists( "Leave Application", { "employee": self.employee, @@ -148,7 +148,7 @@ class AttendanceRequest(Document): ) def get_attendance_record(self, attendance_date: str) -> str | None: - return frappe.db.exists( + return xhiveframework.db.exists( "Attendance", { "employee": self.employee, @@ -165,7 +165,7 @@ class AttendanceRequest(Document): else: return "Present" - @frappe.whitelist() + @xhiveframework.whitelist() def get_attendance_warnings(self) -> list: attendance_warnings = [] request_days = date_diff(self.to_date, self.from_date) + 1 diff --git a/hrms/hr/doctype/attendance_request/attendance_warnings.html b/hrms/hr/doctype/attendance_request/attendance_warnings.html index 8944dfb..fa3b059 100644 --- a/hrms/hr/doctype/attendance_request/attendance_warnings.html +++ b/hrms/hr/doctype/attendance_request/attendance_warnings.html @@ -14,7 +14,7 @@ {% for(var i=0; i < warnings.length; i++) { %} - {{ frappe.datetime.str_to_user(warnings[i].date) }} + {{ xhiveframework.datetime.str_to_user(warnings[i].date) }} {{ __(warnings[i].action) }} {{ __(warnings[i].reason) }} {{ warnings[i].record }} diff --git a/hrms/hr/doctype/attendance_request/test_attendance_request.py b/hrms/hr/doctype/attendance_request/test_attendance_request.py index b9b73f4..e992e65 100644 --- a/hrms/hr/doctype/attendance_request/test_attendance_request.py +++ b/hrms/hr/doctype/attendance_request/test_attendance_request.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, add_months, get_year_ending, get_year_start, getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, add_months, get_year_ending, get_year_start, getdate from hrms.hr.doctype.attendance.attendance import mark_attendance from hrms.hr.doctype.attendance_request.attendance_request import OverlappingAttendanceRequestError @@ -19,10 +19,10 @@ from hrms.tests.test_utils import get_first_sunday test_dependencies = ["Employee"] -class TestAttendanceRequest(FrappeTestCase): +class TestAttendanceRequest(XhiveframeworkTestCase): def setUp(self): for doctype in ["Attendance Request", "Attendance"]: - frappe.db.delete(doctype) + xhiveframework.db.delete(doctype) self.from_date = get_year_start(add_months(getdate(), -1)) self.to_date = get_year_ending(getdate()) @@ -31,7 +31,7 @@ class TestAttendanceRequest(FrappeTestCase): ) self.employee = get_employee() - frappe.db.set_value("Employee", self.employee.name, "holiday_list", self.holiday_list) + xhiveframework.db.set_value("Employee", self.employee.name, "holiday_list", self.holiday_list) def test_attendance_request_overlap(self): create_attendance_request(employee=self.employee.name, reason="On Duty", company="_Test Company") @@ -43,7 +43,7 @@ class TestAttendanceRequest(FrappeTestCase): (today, add_days(today, 1)), (add_days(today, -2), add_days(today, 2)), ] - attendance_request = frappe.get_doc( + attendance_request = xhiveframework.get_doc( { "doctype": "Attendance Request", "employee": self.employee.name, @@ -101,7 +101,7 @@ class TestAttendanceRequest(FrappeTestCase): attendance_request = create_attendance_request( employee=self.employee.name, reason="Work From Home", company="_Test Company" ) - prev_attendance = frappe.get_doc("Attendance", attendance_name) + prev_attendance = xhiveframework.get_doc("Attendance", attendance_name) # attendance request should overwrite attendance status from Absent to Work From Home self.assertEqual(prev_attendance.status, "Work From Home") @@ -109,7 +109,7 @@ class TestAttendanceRequest(FrappeTestCase): def test_skip_attendance_on_holiday(self): today = getdate() - holiday_list = frappe.get_doc("Holiday List", self.holiday_list) + holiday_list = xhiveframework.get_doc("Holiday List", self.holiday_list) holiday_list.append( "holidays", { @@ -130,8 +130,8 @@ class TestAttendanceRequest(FrappeTestCase): self.assertEqual(records[0].status, "Present") def test_skip_attendance_on_leave(self): - frappe.delete_doc_if_exists("Leave Type", "Test Skip Attendance", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Skip Attendance", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Skip Attendance", doctype="Leave Type") ).insert() @@ -153,7 +153,7 @@ class TestAttendanceRequest(FrappeTestCase): self.assertEqual(records[0].status, "Present") def get_attendance_records(self, attendance_request: str) -> list[dict]: - return frappe.db.get_all( + return xhiveframework.db.get_all( "Attendance", { "attendance_request": attendance_request, @@ -163,14 +163,14 @@ class TestAttendanceRequest(FrappeTestCase): def get_employee(): - return frappe.get_doc("Employee", "_T-Employee-00001") + return xhiveframework.get_doc("Employee", "_T-Employee-00001") def create_attendance_request(**args: dict) -> dict: - args = frappe._dict(args) + args = xhiveframework._dict(args) today = getdate() - attendance_request = frappe.get_doc( + attendance_request = xhiveframework.get_doc( { "doctype": "Attendance Request", "employee": args.employee or get_employee().name, diff --git a/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.js b/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.js index 1baa1e0..8a3182c 100644 --- a/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.js +++ b/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Compensatory Leave Request', { +xhiveframework.ui.form.on('Compensatory Leave Request', { refresh: function(frm) { frm.set_query("leave_type", function() { return { diff --git a/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.py b/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.py index 689cecc..e90eb35 100644 --- a/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.py +++ b/hrms/hr/doctype/compensatory_leave_request/compensatory_leave_request.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, cint, date_diff, format_date, getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import add_days, cint, date_diff, format_date, getdate from hrms.hr.utils import ( create_additional_leave_ledger_entry, @@ -23,19 +23,19 @@ class CompensatoryLeaveRequest(Document): validate_dates(self, self.work_from_date, self.work_end_date) if self.half_day: if not self.half_day_date: - frappe.throw(_("Half Day Date is mandatory")) + xhiveframework.throw(_("Half Day Date is mandatory")) if ( not getdate(self.work_from_date) <= getdate(self.half_day_date) <= getdate(self.work_end_date) ): - frappe.throw(_("Half Day Date should be in between Work From Date and Work End Date")) + xhiveframework.throw(_("Half Day Date should be in between Work From Date and Work End Date")) validate_overlap(self, self.work_from_date, self.work_end_date) self.validate_holidays() self.validate_attendance() if not self.leave_type: - frappe.throw(_("Leave Type is madatory")) + xhiveframework.throw(_("Leave Type is madatory")) def validate_attendance(self): - attendance = frappe.get_all( + attendance = xhiveframework.get_all( "Attendance", filters={ "attendance_date": ["between", (self.work_from_date, self.work_end_date)], @@ -47,22 +47,22 @@ class CompensatoryLeaveRequest(Document): ) if len(attendance) < date_diff(self.work_end_date, self.work_from_date) + 1: - frappe.throw(_("You are not present all day(s) between compensatory leave request days")) + xhiveframework.throw(_("You are not present all day(s) between compensatory leave request days")) def validate_holidays(self): holidays = get_holiday_dates_for_employee(self.employee, self.work_from_date, self.work_end_date) if len(holidays) < date_diff(self.work_end_date, self.work_from_date) + 1: if date_diff(self.work_end_date, self.work_from_date): msg = _("The days between {0} to {1} are not valid holidays.").format( - frappe.bold(format_date(self.work_from_date)), frappe.bold(format_date(self.work_end_date)) + xhiveframework.bold(format_date(self.work_from_date)), xhiveframework.bold(format_date(self.work_end_date)) ) else: - msg = _("{0} is not a holiday.").format(frappe.bold(format_date(self.work_from_date))) + msg = _("{0} is not a holiday.").format(xhiveframework.bold(format_date(self.work_from_date))) - frappe.throw(msg) + xhiveframework.throw(msg) def on_submit(self): - company = frappe.db.get_value("Employee", self.employee, "company") + company = xhiveframework.db.get_value("Employee", self.employee, "company") date_difference = date_diff(self.work_end_date, self.work_from_date) + 1 if self.half_day: date_difference -= 0.5 @@ -84,7 +84,7 @@ class CompensatoryLeaveRequest(Document): leave_allocation = self.create_leave_allocation(leave_period, date_difference) self.db_set("leave_allocation", leave_allocation.name) else: - frappe.throw( + xhiveframework.throw( _("There is no leave period in between {0} and {1}").format( format_date(self.work_from_date), format_date(self.work_end_date) ) @@ -95,7 +95,7 @@ class CompensatoryLeaveRequest(Document): date_difference = date_diff(self.work_end_date, self.work_from_date) + 1 if self.half_day: date_difference -= 0.5 - leave_allocation = frappe.get_doc("Leave Allocation", self.leave_allocation) + leave_allocation = xhiveframework.get_doc("Leave Allocation", self.leave_allocation) if leave_allocation: leave_allocation.new_leaves_allocated -= date_difference if leave_allocation.new_leaves_allocated - date_difference <= 0: @@ -110,7 +110,7 @@ class CompensatoryLeaveRequest(Document): ) def get_existing_allocation_for_period(self, leave_period): - leave_allocation = frappe.db.sql( + leave_allocation = xhiveframework.db.sql( """ select name from `tabLeave Allocation` @@ -130,13 +130,13 @@ class CompensatoryLeaveRequest(Document): ) if leave_allocation: - return frappe.get_doc("Leave Allocation", leave_allocation[0].name) + return xhiveframework.get_doc("Leave Allocation", leave_allocation[0].name) else: return False def create_leave_allocation(self, leave_period, date_difference): - is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward") - allocation = frappe.get_doc( + is_carry_forward = xhiveframework.db.get_value("Leave Type", self.leave_type, "is_carry_forward") + allocation = xhiveframework.get_doc( dict( doctype="Leave Allocation", employee=self.employee, diff --git a/hrms/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py b/hrms/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py index 2cdc77a..ec17f44 100644 --- a/hrms/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py +++ b/hrms/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py @@ -1,10 +1,10 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, add_months, today +import xhiveframework +from xhiveframework.utils import add_days, add_months, today from hrms.hr.doctype.attendance_request.test_attendance_request import get_employee from hrms.hr.doctype.leave_application.leave_application import get_leave_balance_on @@ -15,10 +15,10 @@ test_dependencies = ["Employee"] class TestCompensatoryLeaveRequest(unittest.TestCase): def setUp(self): - frappe.db.sql(""" delete from `tabCompensatory Leave Request`""") - frappe.db.sql(""" delete from `tabLeave Ledger Entry`""") - frappe.db.sql(""" delete from `tabLeave Allocation`""") - frappe.db.sql( + xhiveframework.db.sql(""" delete from `tabCompensatory Leave Request`""") + xhiveframework.db.sql(""" delete from `tabLeave Ledger Entry`""") + xhiveframework.db.sql(""" delete from `tabLeave Allocation`""") + xhiveframework.db.sql( """ delete from `tabAttendance` where attendance_date in {0} """.format( (today(), add_days(today(), -1)) ) @@ -55,7 +55,7 @@ class TestCompensatoryLeaveRequest(unittest.TestCase): compensatory_leave_request.submit() # leave allocation creation on submit - leaves_allocated = frappe.db.get_value( + leaves_allocated = xhiveframework.db.get_value( "Leave Allocation", {"name": compensatory_leave_request.leave_allocation}, ["total_leaves_allocated"], @@ -67,7 +67,7 @@ class TestCompensatoryLeaveRequest(unittest.TestCase): compensatory_leave_request.submit() # leave allocation updates on submission of second compensatory leave request - leaves_allocated = frappe.db.get_value( + leaves_allocated = xhiveframework.db.get_value( "Leave Allocation", {"name": compensatory_leave_request.leave_allocation}, ["total_leaves_allocated"], @@ -82,7 +82,7 @@ class TestCompensatoryLeaveRequest(unittest.TestCase): compensatory_leave_request.submit() filters = dict(transaction_name=compensatory_leave_request.leave_allocation) - leave_ledger_entry = frappe.get_all("Leave Ledger Entry", fields="*", filters=filters) + leave_ledger_entry = xhiveframework.get_all("Leave Ledger Entry", fields="*", filters=filters) self.assertEqual(len(leave_ledger_entry), 1) self.assertEqual(leave_ledger_entry[0].employee, compensatory_leave_request.employee) @@ -91,7 +91,7 @@ class TestCompensatoryLeaveRequest(unittest.TestCase): # check reverse leave ledger entry on cancellation compensatory_leave_request.cancel() - leave_ledger_entry = frappe.get_all( + leave_ledger_entry = xhiveframework.get_all( "Leave Ledger Entry", fields="*", filters=filters, order_by="creation desc" ) @@ -102,7 +102,7 @@ class TestCompensatoryLeaveRequest(unittest.TestCase): def get_compensatory_leave_request(employee, leave_date=today()): - prev_comp_leave_req = frappe.db.get_value( + prev_comp_leave_req = xhiveframework.db.get_value( "Compensatory Leave Request", dict( leave_type="Compensatory Off", @@ -113,9 +113,9 @@ def get_compensatory_leave_request(employee, leave_date=today()): "name", ) if prev_comp_leave_req: - return frappe.get_doc("Compensatory Leave Request", prev_comp_leave_req) + return xhiveframework.get_doc("Compensatory Leave Request", prev_comp_leave_req) - return frappe.get_doc( + return xhiveframework.get_doc( dict( doctype="Compensatory Leave Request", employee=employee, @@ -128,10 +128,10 @@ def get_compensatory_leave_request(employee, leave_date=today()): def mark_attendance(employee, date=today(), status="Present"): - if not frappe.db.exists( + if not xhiveframework.db.exists( dict(doctype="Attendance", employee=employee.name, attendance_date=date, status="Present") ): - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( {"doctype": "Attendance", "employee": employee.name, "attendance_date": date, "status": status} ) attendance.save() @@ -139,10 +139,10 @@ def mark_attendance(employee, date=today(), status="Present"): def create_holiday_list(): - if frappe.db.exists("Holiday List", "_Test Compensatory Leave"): + if xhiveframework.db.exists("Holiday List", "_Test Compensatory Leave"): return - holiday_list = frappe.get_doc( + holiday_list = xhiveframework.get_doc( { "doctype": "Holiday List", "from_date": add_months(today(), -3), diff --git a/hrms/hr/doctype/daily_work_summary/daily_work_summary.js b/hrms/hr/doctype/daily_work_summary/daily_work_summary.js index 8236480..ad8e8c4 100644 --- a/hrms/hr/doctype/daily_work_summary/daily_work_summary.js +++ b/hrms/hr/doctype/daily_work_summary/daily_work_summary.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Daily Work Summary', { +xhiveframework.ui.form.on('Daily Work Summary', { refresh: function (frm) { } diff --git a/hrms/hr/doctype/daily_work_summary/daily_work_summary.py b/hrms/hr/doctype/daily_work_summary/daily_work_summary.py index babbbeb..07e027b 100644 --- a/hrms/hr/doctype/daily_work_summary/daily_work_summary.py +++ b/hrms/hr/doctype/daily_work_summary/daily_work_summary.py @@ -1,25 +1,25 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt from email_reply_parser import EmailReplyParser -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import global_date_format +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import global_date_format class DailyWorkSummary(Document): def send_mails(self, dws_group, emails): """Send emails to get daily work summary to all users \ in selected daily work summary group""" - incoming_email_account = frappe.db.get_value( + incoming_email_account = xhiveframework.db.get_value( "Email Account", dict(enable_incoming=1, default_incoming=1), "email_id" ) self.db_set("email_sent_to", "\n".join(emails)) - frappe.sendmail( + xhiveframework.sendmail( recipients=emails, message=dws_group.message, subject=dws_group.subject, @@ -32,7 +32,7 @@ class DailyWorkSummary(Document): """Send summary of all replies. Called at midnight""" args = self.get_message_details() emails = get_user_emails_from_group(self.daily_work_summary_group) - frappe.sendmail( + xhiveframework.sendmail( recipients=emails, template="daily_work_summary", args=args, @@ -45,9 +45,9 @@ class DailyWorkSummary(Document): def get_message_details(self): """Return args for template""" - dws_group = frappe.get_doc("Daily Work Summary Group", self.daily_work_summary_group) + dws_group = xhiveframework.get_doc("Daily Work Summary Group", self.daily_work_summary_group) - replies = frappe.get_all( + replies = xhiveframework.get_all( "Communication", fields=["content", "text_content", "sender"], filters=dict( @@ -62,7 +62,7 @@ class DailyWorkSummary(Document): did_not_reply = self.email_sent_to.split() for d in replies: - user = frappe.db.get_values( + user = xhiveframework.db.get_values( "User", {"email": d.sender}, ["full_name", "user_image"], as_dict=True ) @@ -73,11 +73,11 @@ class DailyWorkSummary(Document): # make thumbnail image try: if original_image: - file_name = frappe.get_list("File", {"file_url": original_image}) + file_name = xhiveframework.get_list("File", {"file_url": original_image}) if file_name: file_name = file_name[0].name - file_doc = frappe.get_doc("File", file_name) + file_doc = xhiveframework.get_doc("File", file_name) thumbnail_image = file_doc.make_thumbnail( set_as_thumbnail=False, width=100, height=100, crop=True ) @@ -88,10 +88,10 @@ class DailyWorkSummary(Document): if d.sender in did_not_reply: did_not_reply.remove(d.sender) if d.text_content: - d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content)) + d.content = xhiveframework.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content)) did_not_reply = [ - (frappe.db.get_value("User", {"email": email}, "full_name") or email) for email in did_not_reply + (xhiveframework.db.get_value("User", {"email": email}, "full_name") or email) for email in did_not_reply ] return dict( @@ -109,7 +109,7 @@ def get_user_emails_from_group(group): :param group: Daily Work Summary Group `name`""" group_doc = group if isinstance(group_doc, str): - group_doc = frappe.get_doc("Daily Work Summary Group", group) + group_doc = xhiveframework.get_doc("Daily Work Summary Group", group) emails = get_users_email(group_doc) @@ -117,4 +117,4 @@ def get_user_emails_from_group(group): def get_users_email(doc): - return [d.email for d in doc.users if frappe.db.get_value("User", d.user, "enabled")] + return [d.email for d in doc.users if xhiveframework.db.get_value("User", d.user, "enabled")] diff --git a/hrms/hr/doctype/daily_work_summary/test_daily_work_summary.py b/hrms/hr/doctype/daily_work_summary/test_daily_work_summary.py index dba51cc..b74453d 100644 --- a/hrms/hr/doctype/daily_work_summary/test_daily_work_summary.py +++ b/hrms/hr/doctype/daily_work_summary/test_daily_work_summary.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import os import unittest -import frappe -import frappe.utils +import xhiveframework +import xhiveframework.utils -# test_records = frappe.get_test_records('Daily Work Summary') +# test_records = xhiveframework.get_test_records('Daily Work Summary') class TestDailyWorkSummary(unittest.TestCase): @@ -22,7 +22,7 @@ class TestDailyWorkSummary(unittest.TestCase): def test_email_trigger_failed(self): hour = "00:00" - if frappe.utils.nowtime().split(":")[0] == "00": + if xhiveframework.utils.nowtime().split(":")[0] == "00": hour = "01:00" self.setup_and_prepare_test(hour) @@ -46,12 +46,12 @@ class TestDailyWorkSummary(unittest.TestCase): ] # pull the mail - email_account = frappe.get_doc("Email Account", "_Test Email Account 1") + email_account = xhiveframework.get_doc("Email Account", "_Test Email Account 1") email_account.db_set("enable_incoming", 1) email_account.receive(test_mails=test_mails) - daily_work_summary = frappe.get_doc( - "Daily Work Summary", frappe.get_all("Daily Work Summary")[0].name + daily_work_summary = xhiveframework.get_doc( + "Daily Work Summary", xhiveframework.get_all("Daily Work Summary")[0].name ) args = daily_work_summary.get_message_details() @@ -59,13 +59,13 @@ class TestDailyWorkSummary(unittest.TestCase): 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`") + xhiveframework.db.sql("delete from `tabDaily Work Summary`") + xhiveframework.db.sql("delete from `tabEmail Queue`") + xhiveframework.db.sql("delete from `tabEmail Queue Recipient`") + xhiveframework.db.sql("delete from `tabCommunication`") + xhiveframework.db.sql("delete from `tabDaily Work Summary Group`") - self.users = frappe.get_all( + self.users = xhiveframework.get_all( "User", fields=["email"], filters=dict(email=("!=", "test@example.com")) ) self.setup_groups(hour) @@ -76,7 +76,7 @@ class TestDailyWorkSummary(unittest.TestCase): # check if emails are created - self.emails = frappe.db.sql( + self.emails = xhiveframework.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""", @@ -86,10 +86,10 @@ class TestDailyWorkSummary(unittest.TestCase): def setup_groups(self, hour=None): # setup email to trigger at this hour if not hour: - hour = frappe.utils.nowtime().split(":")[0] + hour = xhiveframework.utils.nowtime().split(":")[0] hour = hour + ":00" - groups = frappe.get_doc( + groups = xhiveframework.get_doc( dict( doctype="Daily Work Summary Group", name="Daily Work Summary", diff --git a/hrms/hr/doctype/daily_work_summary/test_data/test-reply.raw b/hrms/hr/doctype/daily_work_summary/test_data/test-reply.raw index ba01bc2..c822c0c 100644 --- a/hrms/hr/doctype/daily_work_summary/test_data/test-reply.raw +++ b/hrms/hr/doctype/daily_work_summary/test_data/test-reply.raw @@ -19,17 +19,17 @@ Content-Type: text/plain; I built Daily Work Summary! -> On 10-Nov-2016, at 3:20 PM, Frappe wrote: +> On 10-Nov-2016, at 3:20 PM, Xhiveframework wrote: >=20 > Please share what did you do today. If you reply by midnight, your = response will be recorded! >=20 > This email was sent to rmehta@gmail.com > Unsubscribe from this list = - -> Sent via ERPNext +> Sent via XhiveERP --Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361 @@ -37,7 +37,7 @@ Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii -I built Daily Work Summary!

On 10-Nov-2016, at 3:20 PM, Frappe <test@erpnext.com> wrote:

+I built Daily Work Summary!

On 10-Nov-2016, at 3:20 PM, Xhiveframework <test@xhiveerp.com> wrote:

@@ -57,13 +57,13 @@ Content-Type: text/html;
diff --git a/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.js b/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.js index 43206d5..fe9ab60 100644 --- a/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.js +++ b/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.js @@ -1,11 +1,11 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Daily Work Summary Group', { +xhiveframework.ui.form.on('Daily Work Summary Group', { refresh: function (frm) { if (!frm.is_new()) { frm.add_custom_button(__('Daily Work Summary'), function () { - frappe.set_route('List', 'Daily Work Summary'); + xhiveframework.set_route('List', 'Daily Work Summary'); }); } } diff --git a/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.py b/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.py index 3cef68d..25e4bf0 100644 --- a/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.py +++ b/hrms/hr/doctype/daily_work_summary_group/daily_work_summary_group.py @@ -1,13 +1,13 @@ -# # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# # Copyright (c) 2015, Xhive LLC # # For license information, please see license.txt -import frappe -import frappe.utils -from frappe import _ -from frappe.model.document import Document +import xhiveframework +import xhiveframework.utils +from xhiveframework import _ +from xhiveframework.model.document import Document -from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday +from xhiveerp.setup.doctype.holiday_list.holiday_list import is_holiday from hrms.hr.doctype.daily_work_summary.daily_work_summary import get_user_emails_from_group @@ -15,8 +15,8 @@ from hrms.hr.doctype.daily_work_summary.daily_work_summary import get_user_email class DailyWorkSummaryGroup(Document): def validate(self): if self.users: - if not frappe.flags.in_test and not is_incoming_account_enabled(): - frappe.throw( + if not xhiveframework.flags.in_test and not is_incoming_account_enabled(): + xhiveframework.throw( _("Please enable default incoming account before creating Daily Work Summary Group") ) @@ -24,9 +24,9 @@ class DailyWorkSummaryGroup(Document): def trigger_emails(): """Send emails to Employees at the given hour asking them what did they work on today""" - groups = frappe.get_all("Daily Work Summary Group") + groups = xhiveframework.get_all("Daily Work Summary Group") for d in groups: - group_doc = frappe.get_doc("Daily Work Summary Group", d) + group_doc = xhiveframework.get_doc("Daily Work Summary Group", d) if ( is_current_hour(group_doc.send_emails_at) and not is_holiday(group_doc.holiday_list) @@ -35,22 +35,22 @@ def trigger_emails(): emails = get_user_emails_from_group(group_doc) # find emails relating to a company if emails: - daily_work_summary = frappe.get_doc( + daily_work_summary = xhiveframework.get_doc( dict(doctype="Daily Work Summary", daily_work_summary_group=group_doc.name) ).insert() daily_work_summary.send_mails(group_doc, emails) def is_current_hour(hour): - return frappe.utils.nowtime().split(":")[0] == hour.split(":")[0] + return xhiveframework.utils.nowtime().split(":")[0] == hour.split(":")[0] def send_summary(): """Send summary to everyone""" - for d in frappe.get_all("Daily Work Summary", dict(status="Open")): - daily_work_summary = frappe.get_doc("Daily Work Summary", d.name) + for d in xhiveframework.get_all("Daily Work Summary", dict(status="Open")): + daily_work_summary = xhiveframework.get_doc("Daily Work Summary", d.name) daily_work_summary.send_summary() def is_incoming_account_enabled(): - return frappe.db.get_value("Email Account", dict(enable_incoming=1, default_incoming=1)) + return xhiveframework.db.get_value("Email Account", dict(enable_incoming=1, default_incoming=1)) diff --git a/hrms/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py b/hrms/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py index 6e0809a..5a956ac 100644 --- a/hrms/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py +++ b/hrms/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class DailyWorkSummaryGroupUser(Document): diff --git a/hrms/hr/doctype/department_approver/department_approver.py b/hrms/hr/doctype/department_approver/department_approver.py index 7db8bff..bbb4842 100644 --- a/hrms/hr/doctype/department_approver/department_approver.py +++ b/hrms/hr/doctype/department_approver/department_approver.py @@ -1,27 +1,27 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document class DepartmentApprover(Document): pass -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs +@xhiveframework.whitelist() +@xhiveframework.validate_and_sanitize_search_inputs def get_approvers(doctype, txt, searchfield, start, page_len, filters): if not filters.get("employee"): - frappe.throw(_("Please select Employee first.")) + xhiveframework.throw(_("Please select Employee first.")) approvers = [] department_details = {} department_list = [] - employee = frappe.get_value( + employee = xhiveframework.get_value( "Employee", filters.get("employee"), ["employee_name", "department", "leave_approver", "expense_approver", "shift_request_approver"], @@ -30,11 +30,11 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters): employee_department = filters.get("department") or employee.department if employee_department: - department_details = frappe.db.get_value( + department_details = xhiveframework.db.get_value( "Department", {"name": employee_department}, ["lft", "rgt"], as_dict=True ) if department_details: - department_list = frappe.db.sql( + department_list = xhiveframework.db.sql( """select name from `tabDepartment` where lft <= %s and rgt >= %s and disabled=0 @@ -45,17 +45,17 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters): if filters.get("doctype") == "Leave Application" and employee.leave_approver: approvers.append( - frappe.db.get_value("User", employee.leave_approver, ["name", "first_name", "last_name"]) + xhiveframework.db.get_value("User", employee.leave_approver, ["name", "first_name", "last_name"]) ) if filters.get("doctype") == "Expense Claim" and employee.expense_approver: approvers.append( - frappe.db.get_value("User", employee.expense_approver, ["name", "first_name", "last_name"]) + xhiveframework.db.get_value("User", employee.expense_approver, ["name", "first_name", "last_name"]) ) if filters.get("doctype") == "Shift Request" and employee.shift_request_approver: approvers.append( - frappe.db.get_value( + xhiveframework.db.get_value( "User", employee.shift_request_approver, ["name", "first_name", "last_name"] ) ) @@ -71,7 +71,7 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters): field_name = "Shift Request Approver" if department_list: for d in department_list: - approvers += frappe.db.sql( + approvers += xhiveframework.db.sql( """select user.name, user.first_name, user.last_name from tabUser user, `tabDepartment Approver` approver where approver.parent = %s @@ -84,10 +84,10 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters): if len(approvers) == 0: error_msg = _("Please set {0} for the Employee: {1}").format( - _(field_name), frappe.bold(employee.employee_name) + _(field_name), xhiveframework.bold(employee.employee_name) ) if department_list: - error_msg += " " + _("or for Department: {0}").format(frappe.bold(employee_department)) - frappe.throw(error_msg, title=_("{0} Missing").format(_(field_name))) + error_msg += " " + _("or for Department: {0}").format(xhiveframework.bold(employee_department)) + xhiveframework.throw(error_msg, title=_("{0} Missing").format(_(field_name))) return set(tuple(approver) for approver in approvers) diff --git a/hrms/hr/doctype/designation_skill/designation_skill.py b/hrms/hr/doctype/designation_skill/designation_skill.py index c35223b..bc7e0a6 100644 --- a/hrms/hr/doctype/designation_skill/designation_skill.py +++ b/hrms/hr/doctype/designation_skill/designation_skill.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class DesignationSkill(Document): diff --git a/hrms/hr/doctype/employee_advance/employee_advance.js b/hrms/hr/doctype/employee_advance/employee_advance.js index 0a88833..f2d9a84 100644 --- a/hrms/hr/doctype/employee_advance/employee_advance.js +++ b/hrms/hr/doctype/employee_advance/employee_advance.js @@ -1,7 +1,7 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2017, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Advance', { +xhiveframework.ui.form.on('Employee Advance', { setup: function(frm) { frm.add_fetch("employee", "company", "company"); frm.add_fetch("company", "default_employee_advance_account", "advance_account"); @@ -16,9 +16,9 @@ frappe.ui.form.on('Employee Advance', { frm.set_query("advance_account", function() { if (!frm.doc.employee) { - frappe.msgprint(__("Please select employee first")); + xhiveframework.msgprint(__("Please select employee first")); } - let company_currency = erpnext.get_currency(frm.doc.company); + let company_currency = xhiveerp.get_currency(frm.doc.company); let currencies = [company_currency]; if (frm.doc.currency && (frm.doc.currency != company_currency)) { currencies.push(frm.doc.currency); @@ -46,7 +46,7 @@ frappe.ui.form.on('Employee Advance', { refresh: function(frm) { if (frm.doc.docstatus === 1 && (flt(frm.doc.paid_amount) < flt(frm.doc.advance_amount)) && - frappe.model.can_create("Payment Entry")) { + xhiveframework.model.can_create("Payment Entry")) { frm.add_custom_button(__('Payment'), function () { frm.events.make_payment_entry(frm); @@ -54,7 +54,7 @@ frappe.ui.form.on('Employee Advance', { } else if ( frm.doc.docstatus === 1 && flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount) && - frappe.model.can_create("Expense Claim") + xhiveframework.model.can_create("Expense Claim") ) { frm.add_custom_button( __("Expense Claim"), @@ -69,11 +69,11 @@ frappe.ui.form.on('Employee Advance', { frm.doc.docstatus === 1 && (flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount)) ) { - if (frm.doc.repay_unclaimed_amount_from_salary == 0 && frappe.model.can_create("Journal Entry")) { + if (frm.doc.repay_unclaimed_amount_from_salary == 0 && xhiveframework.model.can_create("Journal Entry")) { frm.add_custom_button(__("Return"), function() { frm.trigger('make_return_entry'); }, __('Create')); - } else if (frm.doc.repay_unclaimed_amount_from_salary == 1 && frappe.model.can_create("Additional Salary")) { + } else if (frm.doc.repay_unclaimed_amount_from_salary == 1 && xhiveframework.model.can_create("Additional Salary")) { frm.add_custom_button(__("Deduction from Salary"), function() { frm.events.make_deduction_via_additional_salary(frm); }, __('Create')); @@ -82,14 +82,14 @@ frappe.ui.form.on('Employee Advance', { }, make_deduction_via_additional_salary: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.employee_advance.employee_advance.create_return_through_additional_salary", args: { doc: frm.doc }, callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); }, @@ -99,21 +99,21 @@ frappe.ui.form.on('Employee Advance', { if (frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) { method = "hrms.hr.doctype.employee_advance.employee_advance.make_bank_entry"; } - return frappe.call({ + return xhiveframework.call({ method: method, args: { "dt": frm.doc.doctype, "dn": frm.doc.name }, callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); }, make_expense_claim: function(frm) { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.expense_claim.expense_claim.get_expense_claim", args: { "employee_name": frm.doc.employee, @@ -124,14 +124,14 @@ frappe.ui.form.on('Employee Advance', { "claimed_amount": frm.doc.claimed_amount }, callback: function(r) { - const doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + const doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); }, make_return_entry: function(frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.employee_advance.employee_advance.make_return_entry', args: { 'employee': frm.doc.employee, @@ -144,15 +144,15 @@ frappe.ui.form.on('Employee Advance', { 'exchange_rate': frm.doc.exchange_rate }, callback: function(r) { - const doclist = frappe.model.sync(r.message); - frappe.set_route('Form', doclist[0].doctype, doclist[0].name); + const doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route('Form', doclist[0].doctype, doclist[0].name); } }); }, employee: function(frm) { if (frm.doc.employee) { - frappe.run_serially([ + xhiveframework.run_serially([ () => frm.trigger('get_employee_currency'), () => frm.trigger('get_pending_amount') ]); @@ -160,7 +160,7 @@ frappe.ui.form.on('Employee Advance', { }, get_pending_amount: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.employee_advance.employee_advance.get_pending_amount", args: { "employee": frm.doc.employee, @@ -173,7 +173,7 @@ frappe.ui.form.on('Employee Advance', { }, get_employee_currency: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", args: { employee: frm.doc.employee, @@ -192,9 +192,9 @@ frappe.ui.form.on('Employee Advance', { var from_currency = frm.doc.currency; var company_currency; if (!frm.doc.company) { - company_currency = erpnext.get_currency(frappe.defaults.get_default("Company")); + company_currency = xhiveerp.get_currency(xhiveframework.defaults.get_default("Company")); } else { - company_currency = erpnext.get_currency(frm.doc.company); + company_currency = xhiveerp.get_currency(frm.doc.company); } if (from_currency != company_currency) { frm.events.set_exchange_rate(frm, from_currency, company_currency); @@ -208,8 +208,8 @@ frappe.ui.form.on('Employee Advance', { }, set_exchange_rate: function(frm, from_currency, company_currency) { - frappe.call({ - method: "erpnext.setup.utils.get_exchange_rate", + xhiveframework.call({ + method: "xhiveerp.setup.utils.get_exchange_rate", args: { from_currency: from_currency, to_currency: company_currency, diff --git a/hrms/hr/doctype/employee_advance/employee_advance.py b/hrms/hr/doctype/employee_advance/employee_advance.py index 8b4d313..8d9e38a 100644 --- a/hrms/hr/doctype/employee_advance/employee_advance.py +++ b/hrms/hr/doctype/employee_advance/employee_advance.py @@ -1,26 +1,26 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2017, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder.functions import Sum -from frappe.utils import flt, nowdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder.functions import Sum +from xhiveframework.utils import flt, nowdate -import erpnext -from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account +import xhiveerp +from xhiveerp.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from hrms.hr.utils import validate_active_employee -class EmployeeAdvanceOverPayment(frappe.ValidationError): +class EmployeeAdvanceOverPayment(xhiveframework.ValidationError): pass class EmployeeAdvance(Document): def onload(self): - self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value( + self.get("__onload").make_payment_via_journal_entry = xhiveframework.db.get_single_value( "Accounts Settings", "make_payment_via_journal_entry" ) @@ -69,10 +69,10 @@ class EmployeeAdvance(Document): self.status = status def set_total_advance_paid(self): - gle = frappe.qb.DocType("GL Entry") + gle = xhiveframework.qb.DocType("GL Entry") paid_amount = ( - frappe.qb.from_(gle) + xhiveframework.qb.from_(gle) .select(Sum(gle.debit).as_("paid_amount")) .where( (gle.against_voucher_type == "Employee Advance") @@ -85,7 +85,7 @@ class EmployeeAdvance(Document): ).run(as_dict=True)[0].paid_amount or 0 return_amount = ( - frappe.qb.from_(gle) + xhiveframework.qb.from_(gle) .select(Sum(gle.credit).as_("return_amount")) .where( (gle.against_voucher_type == "Employee Advance") @@ -104,13 +104,13 @@ class EmployeeAdvance(Document): return_amount = flt(return_amount) / flt(self.exchange_rate) if flt(paid_amount) > self.advance_amount: - frappe.throw( + xhiveframework.throw( _("Row {0}# Paid Amount cannot be greater than requested advance amount"), EmployeeAdvanceOverPayment, ) if flt(return_amount) > self.paid_amount - self.claimed_amount: - frappe.throw(_("Return amount cannot be greater unclaimed amount")) + xhiveframework.throw(_("Return amount cannot be greater unclaimed amount")) self.db_set("paid_amount", paid_amount) self.db_set("return_amount", return_amount) @@ -118,7 +118,7 @@ class EmployeeAdvance(Document): def update_claimed_amount(self): claimed_amount = ( - frappe.db.sql( + xhiveframework.db.sql( """ SELECT sum(ifnull(allocated_amount, 0)) FROM `tabExpense Claim Advance` eca, `tabExpense Claim` ec @@ -134,14 +134,14 @@ class EmployeeAdvance(Document): or 0 ) - frappe.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount)) + xhiveframework.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount)) self.reload() self.set_status(update=True) -@frappe.whitelist() +@xhiveframework.whitelist() def get_pending_amount(employee, posting_date): - employee_due_amount = frappe.get_all( + employee_due_amount = xhiveframework.get_all( "Employee Advance", filters={"employee": employee, "docstatus": 1, "posting_date": ("<=", posting_date)}, fields=["advance_amount", "paid_amount"], @@ -149,16 +149,16 @@ def get_pending_amount(employee, posting_date): return sum([(emp.advance_amount - emp.paid_amount) for emp in employee_due_amount]) -@frappe.whitelist() +@xhiveframework.whitelist() def make_bank_entry(dt, dn): - doc = frappe.get_doc(dt, dn) + doc = xhiveframework.get_doc(dt, dn) payment_account = get_default_bank_cash_account( doc.company, account_type="Cash", mode_of_payment=doc.mode_of_payment ) if not payment_account: - frappe.throw(_("Please set a Default Cash Account in Company defaults")) + xhiveframework.throw(_("Please set a Default Cash Account in Company defaults")) - advance_account_currency = frappe.db.get_value("Account", doc.advance_account, "account_currency") + advance_account_currency = xhiveframework.db.get_value("Account", doc.advance_account, "account_currency") advance_amount, advance_exchange_rate = get_advance_amount_advance_exchange_rate( advance_account_currency, doc @@ -166,7 +166,7 @@ def make_bank_entry(dt, dn): paying_amount, paying_exchange_rate = get_paying_amount_paying_exchange_rate(payment_account, doc) - je = frappe.new_doc("Journal Entry") + je = xhiveframework.new_doc("Journal Entry") je.posting_date = nowdate() je.voucher_type = "Bank Entry" je.company = doc.company @@ -183,7 +183,7 @@ def make_bank_entry(dt, dn): "reference_type": "Employee Advance", "reference_name": doc.name, "party_type": "Employee", - "cost_center": erpnext.get_default_cost_center(doc.company), + "cost_center": xhiveerp.get_default_cost_center(doc.company), "party": doc.employee, "is_advance": "Yes", }, @@ -193,7 +193,7 @@ def make_bank_entry(dt, dn): "accounts", { "account": payment_account.account, - "cost_center": erpnext.get_default_cost_center(doc.company), + "cost_center": xhiveerp.get_default_cost_center(doc.company), "credit_in_account_currency": flt(paying_amount), "account_currency": payment_account.account_currency, "account_type": payment_account.account_type, @@ -226,14 +226,14 @@ def get_paying_amount_paying_exchange_rate(payment_account, doc): return paying_amount, paying_exchange_rate -@frappe.whitelist() +@xhiveframework.whitelist() def create_return_through_additional_salary(doc): import json if isinstance(doc, str): - doc = frappe._dict(json.loads(doc)) + doc = xhiveframework._dict(json.loads(doc)) - additional_salary = frappe.new_doc("Additional Salary") + additional_salary = xhiveframework.new_doc("Additional Salary") additional_salary.employee = doc.employee additional_salary.currency = doc.currency additional_salary.amount = doc.paid_amount - doc.claimed_amount @@ -244,7 +244,7 @@ def create_return_through_additional_salary(doc): return additional_salary -@frappe.whitelist() +@xhiveframework.whitelist() def make_return_entry( employee, company, @@ -259,11 +259,11 @@ def make_return_entry( company, account_type="Cash", mode_of_payment=mode_of_payment ) if not bank_cash_account: - frappe.throw(_("Please set a Default Cash Account in Company defaults")) + xhiveframework.throw(_("Please set a Default Cash Account in Company defaults")) - advance_account_currency = frappe.db.get_value("Account", advance_account, "account_currency") + advance_account_currency = xhiveframework.db.get_value("Account", advance_account, "account_currency") - je = frappe.new_doc("Journal Entry") + je = xhiveframework.new_doc("Journal Entry") je.posting_date = nowdate() je.voucher_type = get_voucher_type(mode_of_payment) je.company = company @@ -288,7 +288,7 @@ def make_return_entry( "party_type": "Employee", "party": employee, "is_advance": "Yes", - "cost_center": erpnext.get_default_cost_center(company), + "cost_center": xhiveerp.get_default_cost_center(company), }, ) @@ -306,7 +306,7 @@ def make_return_entry( "account_currency": bank_cash_account.account_currency, "account_type": bank_cash_account.account_type, "exchange_rate": flt(exchange_rate) if bank_cash_account.account_currency == currency else 1, - "cost_center": erpnext.get_default_cost_center(company), + "cost_center": xhiveerp.get_default_cost_center(company), }, ) @@ -317,7 +317,7 @@ def get_voucher_type(mode_of_payment=None): voucher_type = "Cash Entry" if mode_of_payment: - mode_of_payment_type = frappe.get_cached_value("Mode of Payment", mode_of_payment, "type") + mode_of_payment_type = xhiveframework.get_cached_value("Mode of Payment", mode_of_payment, "type") if mode_of_payment_type == "Bank": voucher_type = "Bank Entry" diff --git a/hrms/hr/doctype/employee_advance/test_employee_advance.py b/hrms/hr/doctype/employee_advance/test_employee_advance.py index d80ebbf..ee2951e 100644 --- a/hrms/hr/doctype/employee_advance/test_employee_advance.py +++ b/hrms/hr/doctype/employee_advance/test_employee_advance.py @@ -1,13 +1,13 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2017, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import flt, nowdate +import xhiveframework +from xhiveframework.utils import flt, nowdate -import erpnext -from erpnext.setup.doctype.employee.test_employee import make_employee +import xhiveerp +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.employee_advance.employee_advance import ( EmployeeAdvanceOverPayment, @@ -26,7 +26,7 @@ from hrms.payroll.doctype.salary_structure.test_salary_structure import make_sal class TestEmployeeAdvance(unittest.TestCase): def setUp(self): - frappe.db.delete("Employee Advance") + xhiveframework.db.delete("Employee Advance") def test_paid_amount_and_status(self): employee_name = make_employee("_T@employe.advance") @@ -135,7 +135,7 @@ class TestEmployeeAdvance(unittest.TestCase): exchange_rate=advance.exchange_rate, ) - entry = frappe.get_doc(entry) + entry = xhiveframework.get_doc(entry) entry.insert() entry.submit() @@ -202,11 +202,11 @@ class TestEmployeeAdvance(unittest.TestCase): self.assertEqual(advance.status, "Paid") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def make_payment_entry(advance): - journal_entry = frappe.get_doc(make_bank_entry("Employee Advance", advance.name)) + journal_entry = xhiveframework.get_doc(make_bank_entry("Employee Advance", advance.name)) journal_entry.cheque_no = "123123" journal_entry.cheque_date = nowdate() journal_entry.save() @@ -215,11 +215,11 @@ def make_payment_entry(advance): def make_employee_advance(employee_name, args=None): - doc = frappe.new_doc("Employee Advance") + doc = xhiveframework.new_doc("Employee Advance") doc.employee = employee_name doc.company = "_Test Company" doc.purpose = "For site visit" - doc.currency = erpnext.get_company_currency("_Test company") + doc.currency = xhiveerp.get_company_currency("_Test company") doc.exchange_rate = 1 doc.advance_amount = 1000 doc.posting_date = nowdate() diff --git a/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.js index de927a8..044bdea 100644 --- a/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +++ b/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.js @@ -1,4 +1,4 @@ -frappe.ui.form.on("Employee Attendance Tool", { +xhiveframework.ui.form.on("Employee Attendance Tool", { refresh(frm) { frm.trigger("reset_attendance_fields") frm.trigger("load_employees"); @@ -6,7 +6,7 @@ frappe.ui.form.on("Employee Attendance Tool", { }, onload(frm) { - frm.set_value("date", frappe.datetime.get_today()); + frm.set_value("date", xhiveframework.datetime.get_today()); }, date(frm) { @@ -40,7 +40,7 @@ frappe.ui.form.on("Employee Attendance Tool", { if (!frm.doc.date) return; - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.employee_attendance_tool.employee_attendance_tool.get_employees", args: { date: frm.doc.date, @@ -74,7 +74,7 @@ frappe.ui.form.on("Employee Attendance Tool", { $wrapper.empty(); const employee_wrapper = $(`
`).appendTo($wrapper); - frm.employees_multicheck = frappe.ui.form.make_control({ + frm.employees_multicheck = xhiveframework.ui.form.make_control({ parent: employee_wrapper, df: { fieldname: "employees_multicheck", @@ -122,7 +122,7 @@ frappe.ui.form.on("Employee Attendance Tool", { noDataMessage: __("No Data"), disableReorderColumn: true, }; - frm.marked_emp_datatable = new frappe.DataTable( + frm.marked_emp_datatable = new xhiveframework.DataTable( summary_wrapper.get(0), datatable_options, ); @@ -172,7 +172,7 @@ frappe.ui.form.on("Employee Attendance Tool", { frm.disable_save(); frm.page.set_primary_action(__("Mark Attendance"), () => { if (frm.employees.length === 0) { - frappe.msgprint({ + xhiveframework.msgprint({ message: __("Attendance for all the employees under this criteria has been marked already."), title: __("Attendance Marked"), indicator: "green" @@ -181,14 +181,14 @@ frappe.ui.form.on("Employee Attendance Tool", { } if (frm.employees_multicheck.get_checked_options().length === 0) { - frappe.throw({ + xhiveframework.throw({ message: __("Please select the employees you want to mark attendance for."), title: __("Mandatory") }); } if (!frm.doc.status) { - frappe.throw({ + xhiveframework.throw({ message: __("Please select the attendance status."), title: __("Mandatory") }); @@ -201,7 +201,7 @@ frappe.ui.form.on("Employee Attendance Tool", { mark_attendance(frm) { const marked_employees = frm.employees_multicheck.get_checked_options(); - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", args: { employee_list: marked_employees, @@ -215,7 +215,7 @@ frappe.ui.form.on("Employee Attendance Tool", { freeze_message: __("Marking Attendance") }).then((r) => { if (!r.exc) { - frappe.show_alert({ message: __("Attendance marked successfully"), indicator: "green" }); + xhiveframework.show_alert({ message: __("Attendance marked successfully"), indicator: "green" }); frm.refresh(); } }); diff --git a/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.py b/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.py index 36f625b..41b5eee 100644 --- a/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.py +++ b/hrms/hr/doctype/employee_attendance_tool/employee_attendance_tool.py @@ -1,20 +1,20 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt import datetime import json -import frappe -from frappe.model.document import Document -from frappe.utils import getdate +import xhiveframework +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate class EmployeeAttendanceTool(Document): pass -@frappe.whitelist() +@xhiveframework.whitelist() def get_employees( date: str | datetime.date, department: str = None, branch: str = None, company: str = None ) -> dict[str, list]: @@ -24,10 +24,10 @@ def get_employees( if value: filters[field] = value - employee_list = frappe.get_list( + employee_list = xhiveframework.get_list( "Employee", fields=["employee", "employee_name"], filters=filters, order_by="employee_name" ) - attendance_list = frappe.get_list( + attendance_list = xhiveframework.get_list( "Attendance", fields=["employee", "employee_name", "status"], filters={ @@ -53,7 +53,7 @@ def _get_unmarked_attendance(employee_list: list[dict], attendance_list: list[di return unmarked_attendance -@frappe.whitelist() +@xhiveframework.whitelist() def mark_employee_attendance( employee_list: list | str, status: str, @@ -72,7 +72,7 @@ def mark_employee_attendance( if status == "On Leave" and leave_type: leave_type = leave_type - attendance = frappe.get_doc( + attendance = xhiveframework.get_doc( dict( doctype="Attendance", employee=employee, diff --git a/hrms/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.py b/hrms/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.py index ca4cb0e..a44b749 100644 --- a/hrms/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.py +++ b/hrms/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.py @@ -1,11 +1,11 @@ -# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2023, Xhive LLC # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import getdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.attendance.attendance import mark_attendance from hrms.hr.doctype.employee_attendance_tool.employee_attendance_tool import ( @@ -15,9 +15,9 @@ from hrms.hr.doctype.employee_attendance_tool.employee_attendance_tool import ( from hrms.hr.doctype.shift_type.test_shift_type import setup_shift_type -class TestEmployeeAttendanceTool(FrappeTestCase): +class TestEmployeeAttendanceTool(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Attendance") + xhiveframework.db.delete("Attendance") self.employee1 = make_employee("test_present@example.com", company="_Test Company") self.employee2 = make_employee("test_absent@example.com", company="_Test Company") @@ -56,7 +56,7 @@ class TestEmployeeAttendanceTool(FrappeTestCase): late_entry=1, ) - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"employee": self.employee1, "attendance_date": date}, ["status", "shift", "late_entry"], diff --git a/hrms/hr/doctype/employee_boarding_activity/employee_boarding_activity.py b/hrms/hr/doctype/employee_boarding_activity/employee_boarding_activity.py index e824081..1073358 100644 --- a/hrms/hr/doctype/employee_boarding_activity/employee_boarding_activity.py +++ b/hrms/hr/doctype/employee_boarding_activity/employee_boarding_activity.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeeBoardingActivity(Document): diff --git a/hrms/hr/doctype/employee_checkin/employee_checkin.js b/hrms/hr/doctype/employee_checkin/employee_checkin.js index 30a8812..2063b48 100644 --- a/hrms/hr/doctype/employee_checkin/employee_checkin.js +++ b/hrms/hr/doctype/employee_checkin/employee_checkin.js @@ -1,7 +1,7 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Checkin', { +xhiveframework.ui.form.on('Employee Checkin', { // setup: (frm) => { // } diff --git a/hrms/hr/doctype/employee_checkin/employee_checkin.py b/hrms/hr/doctype/employee_checkin/employee_checkin.py index a46a556..0722d11 100644 --- a/hrms/hr/doctype/employee_checkin/employee_checkin.py +++ b/hrms/hr/doctype/employee_checkin/employee_checkin.py @@ -1,11 +1,11 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cint, get_datetime, get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import cint, get_datetime, get_link_to_form from hrms.hr.doctype.attendance.attendance import ( get_duplicate_attendance_record, @@ -24,12 +24,12 @@ class EmployeeCheckin(Document): self.fetch_shift() def validate_duplicate_log(self): - doc = frappe.db.exists( + doc = xhiveframework.db.exists( "Employee Checkin", {"employee": self.employee, "time": self.time, "name": ["!=", self.name]} ) if doc: - doc_link = frappe.get_desk_link("Employee Checkin", doc) - frappe.throw( + doc_link = xhiveframework.get_desk_link("Employee Checkin", doc) + xhiveframework.throw( _("This employee already has a log with the same timestamp.{0}").format("
" + doc_link) ) @@ -44,7 +44,7 @@ class EmployeeCheckin(Document): and not self.log_type and not self.skip_auto_attendance ): - frappe.throw( + xhiveframework.throw( _("Log Type is required for check-ins falling in the shift: {0}.").format( shift_actual_timings.shift_type.name ) @@ -59,7 +59,7 @@ class EmployeeCheckin(Document): self.shift = None -@frappe.whitelist() +@xhiveframework.whitelist() def add_log_based_on_employee_field( employee_field_value, timestamp, @@ -79,9 +79,9 @@ def add_log_based_on_employee_field( """ if not employee_field_value or not timestamp: - frappe.throw(_("'employee_field_value' and 'timestamp' are required.")) + xhiveframework.throw(_("'employee_field_value' and 'timestamp' are required.")) - employee = frappe.db.get_values( + employee = xhiveframework.db.get_values( "Employee", {employee_fieldname: employee_field_value}, ["name", "employee_name", employee_fieldname], @@ -90,13 +90,13 @@ def add_log_based_on_employee_field( if employee: employee = employee[0] else: - frappe.throw( + xhiveframework.throw( _("No Employee found for the given employee field value. '{}': {}").format( employee_fieldname, employee_field_value ) ) - doc = frappe.new_doc("Employee Checkin") + doc = xhiveframework.new_doc("Employee Checkin") doc.employee = employee.name doc.employee_name = employee.employee_name doc.time = timestamp @@ -136,7 +136,7 @@ def mark_attendance_and_link_log( return None elif attendance_status in ("Present", "Absent", "Half Day"): - employee_doc = frappe.get_doc("Employee", employee) + employee_doc = xhiveframework.get_doc("Employee", employee) duplicate = get_duplicate_attendance_record(employee, attendance_date, shift) overlapping = get_overlapping_shift_attendance(employee, attendance_date, shift) @@ -154,7 +154,7 @@ def mark_attendance_and_link_log( "in_time": in_time, "out_time": out_time, } - attendance = frappe.get_doc(doc_dict).insert() + attendance = xhiveframework.get_doc(doc_dict).insert() attendance.submit() if attendance_status == "Absent": @@ -162,7 +162,7 @@ def mark_attendance_and_link_log( text=_("Employee was marked Absent for not meeting the working hours threshold.") ) - frappe.db.sql( + xhiveframework.db.sql( """update `tabEmployee Checkin` set attendance = %s where name in %s""", @@ -175,7 +175,7 @@ def mark_attendance_and_link_log( return None else: - frappe.throw(_("{} is an invalid Attendance Status.").format(attendance_status)) + xhiveframework.throw(_("{} is an invalid Attendance Status.").format(attendance_status)) def calculate_working_hours(logs, check_in_out_type, working_hours_calc_type): @@ -258,7 +258,7 @@ def add_comment_in_checkins(log_names, duplicate, overlapping): ) for name in log_names: - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Comment", "comment_type": "Comment", @@ -270,9 +270,9 @@ def add_comment_in_checkins(log_names, duplicate, overlapping): def skip_attendance_in_checkins(log_names): - EmployeeCheckin = frappe.qb.DocType("Employee Checkin") + EmployeeCheckin = xhiveframework.qb.DocType("Employee Checkin") ( - frappe.qb.update(EmployeeCheckin) + xhiveframework.qb.update(EmployeeCheckin) .set("skip_auto_attendance", 1) .where(EmployeeCheckin.name.isin(log_names)) ).run() diff --git a/hrms/hr/doctype/employee_checkin/test_employee_checkin.py b/hrms/hr/doctype/employee_checkin/test_employee_checkin.py index aa30a72..66b4da4 100644 --- a/hrms/hr/doctype/employee_checkin/test_employee_checkin.py +++ b/hrms/hr/doctype/employee_checkin/test_employee_checkin.py @@ -1,12 +1,12 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2019, Xhive LLC # See license.txt import unittest from datetime import datetime, timedelta -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import ( +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import ( add_days, get_time, get_year_ending, @@ -16,8 +16,8 @@ from frappe.utils import ( nowdate, ) -from erpnext.setup.doctype.employee.test_employee import make_employee -from erpnext.setup.doctype.holiday_list.test_holiday_list import set_holiday_list +from xhiveerp.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.holiday_list.test_holiday_list import set_holiday_list from hrms.hr.doctype.employee_checkin.employee_checkin import ( add_log_based_on_employee_field, @@ -29,11 +29,11 @@ from hrms.hr.doctype.shift_type.test_shift_type import make_shift_assignment, se from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list -class TestEmployeeCheckin(FrappeTestCase): +class TestEmployeeCheckin(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Shift Type") - frappe.db.delete("Shift Assignment") - frappe.db.delete("Employee Checkin") + xhiveframework.db.delete("Shift Type") + xhiveframework.db.delete("Shift Assignment") + xhiveframework.db.delete("Employee Checkin") from_date = get_year_start(getdate()) to_date = get_year_ending(getdate()) @@ -41,7 +41,7 @@ class TestEmployeeCheckin(FrappeTestCase): def test_add_log_based_on_employee_field(self): employee = make_employee("test_add_log_based_on_employee_field@example.com") - employee = frappe.get_doc("Employee", employee) + employee = xhiveframework.get_doc("Employee", employee) employee.attendance_device_id = "3344" employee.save() @@ -57,21 +57,21 @@ class TestEmployeeCheckin(FrappeTestCase): logs = make_n_checkins(employee, 3) mark_attendance_and_link_log(logs, "Skip", nowdate()) log_names = [log.name for log in logs] - logs_count = frappe.db.count( + logs_count = xhiveframework.db.count( "Employee Checkin", {"name": ["in", log_names], "skip_auto_attendance": 1} ) self.assertEqual(logs_count, 3) logs = make_n_checkins(employee, 4, 2) now_date = nowdate() - frappe.db.delete("Attendance", {"employee": employee}) + xhiveframework.db.delete("Attendance", {"employee": employee}) attendance = mark_attendance_and_link_log(logs, "Present", now_date, 8.2) log_names = [log.name for log in logs] - logs_count = frappe.db.count( + logs_count = xhiveframework.db.count( "Employee Checkin", {"name": ["in", log_names], "attendance": attendance.name} ) self.assertEqual(logs_count, 4) - attendance_count = frappe.db.count( + attendance_count = xhiveframework.db.count( "Attendance", {"status": "Present", "working_hours": 8.2, "employee": employee, "attendance_date": now_date}, ) @@ -81,11 +81,11 @@ class TestEmployeeCheckin(FrappeTestCase): employee = make_employee("test_mark_attendance_and_link_log@example.com") logs = make_n_checkins(employee, 3) - frappe.db.delete("Attendance", {"employee": employee}) + xhiveframework.db.delete("Attendance", {"employee": employee}) attendance = mark_attendance_and_link_log(logs, "Present", nowdate(), 8.2) attendance.cancel() - linked_logs = frappe.db.get_all("Employee Checkin", {"attendance": attendance.name}) + linked_logs = xhiveframework.db.get_all("Employee Checkin", {"attendance": attendance.name}) self.assertEquals(len(linked_logs), 0) def test_calculate_working_hours(self): @@ -114,8 +114,8 @@ class TestEmployeeCheckin(FrappeTestCase): {"time": now_datetime() - timedelta(minutes=150), "log_type": "IN"}, {"time": now_datetime() - timedelta(minutes=60), "log_type": "OUT"}, ] - logs_type_1 = [frappe._dict(x) for x in logs_type_1] - logs_type_2 = [frappe._dict(x) for x in logs_type_2] + logs_type_1 = [xhiveframework._dict(x) for x in logs_type_1] + logs_type_2 = [xhiveframework._dict(x) for x in logs_type_2] working_hours = calculate_working_hours( logs_type_1, check_in_out_type[0], working_hours_calc_type[0] @@ -219,7 +219,7 @@ class TestEmployeeCheckin(FrappeTestCase): ) date = getdate() - frappe.db.set_value("Employee", employee, "default_shift", default_shift.name) + xhiveframework.db.set_value("Employee", employee, "default_shift", default_shift.name) timestamp = datetime.combine(date, get_time("14:45:00")) log = make_checkin(employee, timestamp) @@ -305,7 +305,7 @@ def make_n_checkins(employee, n, hours_to_reverse=1): def make_checkin(employee, time=now_datetime()): - log = frappe.get_doc( + log = xhiveframework.get_doc( { "doctype": "Employee Checkin", "employee": employee, diff --git a/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.js b/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.js index 7b5bf27..f39e953 100644 --- a/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.js +++ b/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.js @@ -1,7 +1,7 @@ -// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2023, Xhive LLC // For license information, please see license.txt -// frappe.ui.form.on("Employee Feedback Criteria", { +// xhiveframework.ui.form.on("Employee Feedback Criteria", { // refresh(frm) { // }, diff --git a/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.py b/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.py index d18f247..6eef4c3 100644 --- a/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.py +++ b/hrms/hr/doctype/employee_feedback_criteria/employee_feedback_criteria.py @@ -1,8 +1,8 @@ -# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2023, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class EmployeeFeedbackCriteria(Document): diff --git a/hrms/hr/doctype/employee_feedback_criteria/test_employee_feedback_criteria.py b/hrms/hr/doctype/employee_feedback_criteria/test_employee_feedback_criteria.py index dd300f8..7d8fafd 100644 --- a/hrms/hr/doctype/employee_feedback_criteria/test_employee_feedback_criteria.py +++ b/hrms/hr/doctype/employee_feedback_criteria/test_employee_feedback_criteria.py @@ -1,9 +1,9 @@ -# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2023, Xhive LLC # See license.txt -# import frappe -from frappe.tests.utils import FrappeTestCase +# import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -class TestEmployeeFeedbackCriteria(FrappeTestCase): +class TestEmployeeFeedbackCriteria(XhiveframeworkTestCase): pass diff --git a/hrms/hr/doctype/employee_feedback_rating/employee_feedback_rating.py b/hrms/hr/doctype/employee_feedback_rating/employee_feedback_rating.py index 29eff69..a346e51 100644 --- a/hrms/hr/doctype/employee_feedback_rating/employee_feedback_rating.py +++ b/hrms/hr/doctype/employee_feedback_rating/employee_feedback_rating.py @@ -1,8 +1,8 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class EmployeeFeedbackRating(Document): diff --git a/hrms/hr/doctype/employee_grade/employee_grade.js b/hrms/hr/doctype/employee_grade/employee_grade.js index 6c67f54..17c5e2d 100644 --- a/hrms/hr/doctype/employee_grade/employee_grade.js +++ b/hrms/hr/doctype/employee_grade/employee_grade.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Grade', { +xhiveframework.ui.form.on('Employee Grade', { refresh: function (frm) { }, diff --git a/hrms/hr/doctype/employee_grade/employee_grade.py b/hrms/hr/doctype/employee_grade/employee_grade.py index 41b7915..e783937 100644 --- a/hrms/hr/doctype/employee_grade/employee_grade.py +++ b/hrms/hr/doctype/employee_grade/employee_grade.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeeGrade(Document): diff --git a/hrms/hr/doctype/employee_grade/test_employee_grade.py b/hrms/hr/doctype/employee_grade/test_employee_grade.py index a70d685..c32c62a 100644 --- a/hrms/hr/doctype/employee_grade/test_employee_grade.py +++ b/hrms/hr/doctype/employee_grade/test_employee_grade.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/employee_grievance/employee_grievance.js b/hrms/hr/doctype/employee_grievance/employee_grievance.js index 25c5bad..4a91824 100644 --- a/hrms/hr/doctype/employee_grievance/employee_grievance.js +++ b/hrms/hr/doctype/employee_grievance/employee_grievance.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Grievance', { +xhiveframework.ui.form.on('Employee Grievance', { setup: function(frm) { frm.set_query('grievance_against_party', function() { return { diff --git a/hrms/hr/doctype/employee_grievance/employee_grievance.py b/hrms/hr/doctype/employee_grievance/employee_grievance.py index 45de79f..24fc7b1 100644 --- a/hrms/hr/doctype/employee_grievance/employee_grievance.py +++ b/hrms/hr/doctype/employee_grievance/employee_grievance.py @@ -1,15 +1,15 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _, bold -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _, bold +from xhiveframework.model.document import Document class EmployeeGrievance(Document): def on_submit(self): if self.status not in ["Invalid", "Resolved"]: - frappe.throw( + xhiveframework.throw( _("Only Employee Grievance with status {0} or {1} can be submitted").format( bold("Invalid"), bold("Resolved") ) diff --git a/hrms/hr/doctype/employee_grievance/employee_grievance_list.js b/hrms/hr/doctype/employee_grievance/employee_grievance_list.js index 11672ca..128e328 100644 --- a/hrms/hr/doctype/employee_grievance/employee_grievance_list.js +++ b/hrms/hr/doctype/employee_grievance/employee_grievance_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Employee Grievance"] = { +xhiveframework.listview_settings["Employee Grievance"] = { has_indicator_for_draft: 1, get_indicator: function(doc) { var colors = { diff --git a/hrms/hr/doctype/employee_grievance/test_employee_grievance.py b/hrms/hr/doctype/employee_grievance/test_employee_grievance.py index cf6a915..b3e21e5 100644 --- a/hrms/hr/doctype/employee_grievance/test_employee_grievance.py +++ b/hrms/hr/doctype/employee_grievance/test_employee_grievance.py @@ -1,12 +1,12 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import today +import xhiveframework +from xhiveframework.utils import today -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee class TestEmployeeGrievance(unittest.TestCase): @@ -19,7 +19,7 @@ def create_employee_grievance(): emp_1 = make_employee("test_emp_grievance_@example.com", company="_Test Company") emp_2 = make_employee("testculprit@example.com", company="_Test Company") - grievance = frappe.new_doc("Employee Grievance") + grievance = xhiveframework.new_doc("Employee Grievance") grievance.subject = "Test Employee Grievance" grievance.raised_by = emp_1 grievance.date = today() @@ -45,9 +45,9 @@ def create_employee_grievance(): def create_grievance_type(): - if frappe.db.exists("Grievance Type", "Employee Abuse"): - return frappe.get_doc("Grievance Type", "Employee Abuse") - grievance_type = frappe.new_doc("Grievance Type") + if xhiveframework.db.exists("Grievance Type", "Employee Abuse"): + return xhiveframework.get_doc("Grievance Type", "Employee Abuse") + grievance_type = xhiveframework.new_doc("Grievance Type") grievance_type.name = "Employee Abuse" grievance_type.description = "Test" grievance_type.save() diff --git a/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.js b/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.js index 69d46e2..0ee172c 100644 --- a/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.js +++ b/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Health Insurance', { +xhiveframework.ui.form.on('Employee Health Insurance', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.py b/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.py index 4a8c437..bb762fd 100644 --- a/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.py +++ b/hrms/hr/doctype/employee_health_insurance/employee_health_insurance.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeeHealthInsurance(Document): diff --git a/hrms/hr/doctype/employee_health_insurance/test_employee_health_insurance.py b/hrms/hr/doctype/employee_health_insurance/test_employee_health_insurance.py index 4f042b7..816692f 100644 --- a/hrms/hr/doctype/employee_health_insurance/test_employee_health_insurance.py +++ b/hrms/hr/doctype/employee_health_insurance/test_employee_health_insurance.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/employee_loan/employee_loan.js b/hrms/hr/doctype/employee_loan/employee_loan.js index f1e3dd9..3838a10 100644 --- a/hrms/hr/doctype/employee_loan/employee_loan.js +++ b/hrms/hr/doctype/employee_loan/employee_loan.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Loan', { +xhiveframework.ui.form.on('Employee Loan', { onload: function (frm) { frm.set_query("employee_loan_application", function () { return { @@ -54,7 +54,7 @@ frappe.ui.form.on('Employee Loan', { }, make_jv: function (frm) { - frappe.call({ + xhiveframework.call({ args: { "employee_loan": frm.doc.name, "company": frm.doc.company, @@ -66,16 +66,16 @@ frappe.ui.form.on('Employee Loan', { method: "hrms.hr.doctype.employee_loan.employee_loan.make_jv_entry", callback: function (r) { if (r.message) - var doc = frappe.model.sync(r.message)[0]; - frappe.set_route("Form", doc.doctype, doc.name); + var doc = xhiveframework.model.sync(r.message)[0]; + xhiveframework.set_route("Form", doc.doctype, doc.name); } }) }, mode_of_payment: function (frm) { if (frm.doc.mode_of_payment && frm.doc.company) { - frappe.call({ - method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", + xhiveframework.call({ + method: "xhiveerp.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", args: { "mode_of_payment": frm.doc.mode_of_payment, "company": frm.doc.company @@ -91,7 +91,7 @@ frappe.ui.form.on('Employee Loan', { employee_loan_application: function (frm) { if(frm.doc.employee_loan_application){ - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.employee_loan.employee_loan.get_employee_loan_application", args: { "employee_loan_application": frm.doc.employee_loan_application diff --git a/hrms/hr/doctype/employee_onboarding/employee_onboarding.js b/hrms/hr/doctype/employee_onboarding/employee_onboarding.js index 506e374..e1ee484 100644 --- a/hrms/hr/doctype/employee_onboarding/employee_onboarding.js +++ b/hrms/hr/doctype/employee_onboarding/employee_onboarding.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Onboarding', { +xhiveframework.ui.form.on('Employee Onboarding', { setup: function(frm) { frm.set_query("job_applicant", function () { return { @@ -24,20 +24,20 @@ frappe.ui.form.on('Employee Onboarding', { refresh: function(frm) { if (frm.doc.employee) { frm.add_custom_button(__('Employee'), function() { - frappe.set_route("Form", "Employee", frm.doc.employee); + xhiveframework.set_route("Form", "Employee", frm.doc.employee); },__("View")); } if (frm.doc.project) { frm.add_custom_button(__('Project'), function() { - frappe.set_route("Form", "Project", frm.doc.project); + xhiveframework.set_route("Form", "Project", frm.doc.project); },__("View")); frm.add_custom_button(__('Task'), function() { - frappe.set_route('List', 'Task', {project: frm.doc.project}); + xhiveframework.set_route('List', 'Task', {project: frm.doc.project}); },__("View")); } if ((!frm.doc.employee) && (frm.doc.docstatus === 1)) { frm.add_custom_button(__('Employee'), function () { - frappe.model.open_mapped_doc({ + xhiveframework.model.open_mapped_doc({ method: "hrms.hr.doctype.employee_onboarding.employee_onboarding.make_employee", frm: frm }); @@ -49,7 +49,7 @@ frappe.ui.form.on('Employee Onboarding', { employee_onboarding_template: function(frm) { frm.set_value("activities" ,""); if (frm.doc.employee_onboarding_template) { - frappe.call({ + xhiveframework.call({ method: "hrms.controllers.employee_boarding_controller.get_onboarding_details", args: { "parent": frm.doc.employee_onboarding_template, @@ -69,7 +69,7 @@ frappe.ui.form.on('Employee Onboarding', { job_applicant: function(frm) { if (frm.doc.job_applicant) { - frappe.db.get_value('Employee', {'job_applicant': frm.doc.job_applicant}, 'name', (r) => { + xhiveframework.db.get_value('Employee', {'job_applicant': frm.doc.job_applicant}, 'name', (r) => { if (r.name) { frm.set_value('employee', r.name); } else { diff --git a/hrms/hr/doctype/employee_onboarding/employee_onboarding.py b/hrms/hr/doctype/employee_onboarding/employee_onboarding.py index 3fb5a64..12fd8fe 100644 --- a/hrms/hr/doctype/employee_onboarding/employee_onboarding.py +++ b/hrms/hr/doctype/employee_onboarding/employee_onboarding.py @@ -1,15 +1,15 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.mapper import get_mapped_doc +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.mapper import get_mapped_doc from hrms.controllers.employee_boarding_controller import EmployeeBoardingController -class IncompleteTaskError(frappe.ValidationError): +class IncompleteTaskError(xhiveframework.ValidationError): pass @@ -21,30 +21,30 @@ class EmployeeOnboarding(EmployeeBoardingController): def set_employee(self): if not self.employee: - self.employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") + self.employee = xhiveframework.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") def validate_duplicate_employee_onboarding(self): - emp_onboarding = frappe.db.exists( + emp_onboarding = xhiveframework.db.exists( "Employee Onboarding", {"job_applicant": self.job_applicant, "docstatus": ("!=", 2)} ) if emp_onboarding and emp_onboarding != self.name: - frappe.throw( + xhiveframework.throw( _("Employee Onboarding: {0} already exists for Job Applicant: {1}").format( - frappe.bold(emp_onboarding), frappe.bold(self.job_applicant) + xhiveframework.bold(emp_onboarding), xhiveframework.bold(self.job_applicant) ) ) def validate_employee_creation(self): if self.docstatus != 1: - frappe.throw(_("Submit this to create the Employee record")) + xhiveframework.throw(_("Submit this to create the Employee record")) else: for activity in self.activities: if not activity.required_for_employee_creation: continue else: - task_status = frappe.db.get_value("Task", activity.task, "status") + task_status = xhiveframework.db.get_value("Task", activity.task, "status") if task_status not in ["Completed", "Cancelled"]: - frappe.throw( + xhiveframework.throw( _("All the mandatory tasks for employee creation are not completed yet."), IncompleteTaskError, ) @@ -59,13 +59,13 @@ class EmployeeOnboarding(EmployeeBoardingController): super(EmployeeOnboarding, self).on_cancel() -@frappe.whitelist() +@xhiveframework.whitelist() def make_employee(source_name, target_doc=None): - doc = frappe.get_doc("Employee Onboarding", source_name) + doc = xhiveframework.get_doc("Employee Onboarding", source_name) doc.validate_employee_creation() def set_missing_values(source, target): - target.personal_email = frappe.db.get_value("Job Applicant", source.job_applicant, "email_id") + target.personal_email = xhiveframework.db.get_value("Job Applicant", source.job_applicant, "email_id") target.status = "Active" doc = get_mapped_doc( diff --git a/hrms/hr/doctype/employee_onboarding/employee_onboarding_list.js b/hrms/hr/doctype/employee_onboarding/employee_onboarding_list.js index a33619b..c2708c1 100644 --- a/hrms/hr/doctype/employee_onboarding/employee_onboarding_list.js +++ b/hrms/hr/doctype/employee_onboarding/employee_onboarding_list.js @@ -1,7 +1,7 @@ -frappe.listview_settings['Employee Onboarding'] = { +xhiveframework.listview_settings['Employee Onboarding'] = { add_fields: ["boarding_status", "employee_name", "date_of_joining", "department"], filters:[["boarding_status","=", "Pending"]], get_indicator: function(doc) { - return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; + return [__(doc.boarding_status), xhiveframework.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; } }; diff --git a/hrms/hr/doctype/employee_onboarding/test_employee_onboarding.py b/hrms/hr/doctype/employee_onboarding/test_employee_onboarding.py index 2aede16..fb2c3ca 100644 --- a/hrms/hr/doctype/employee_onboarding/test_employee_onboarding.py +++ b/hrms/hr/doctype/employee_onboarding/test_employee_onboarding.py @@ -1,10 +1,10 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, getdate +import xhiveframework +from xhiveframework.utils import add_days, getdate from hrms.hr.doctype.employee_onboarding.employee_onboarding import ( IncompleteTaskError, @@ -16,17 +16,17 @@ from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list class TestEmployeeOnboarding(unittest.TestCase): def setUp(self): - if frappe.db.exists("Employee Onboarding", {"employee_name": "Test Researcher"}): - frappe.delete_doc("Employee Onboarding", {"employee_name": "Test Researcher"}) + if xhiveframework.db.exists("Employee Onboarding", {"employee_name": "Test Researcher"}): + xhiveframework.delete_doc("Employee Onboarding", {"employee_name": "Test Researcher"}) project = "Employee Onboarding : test@researcher.com" - frappe.db.sql("delete from tabProject where name=%s", project) - frappe.db.sql("delete from tabTask where project=%s", project) + xhiveframework.db.sql("delete from tabProject where name=%s", project) + xhiveframework.db.sql("delete from tabTask where project=%s", project) def test_employee_onboarding_incomplete_task(self): onboarding = create_employee_onboarding() - project_name = frappe.db.get_value("Project", onboarding.project, "project_name") + project_name = xhiveframework.db.get_value("Project", onboarding.project, "project_name") self.assertEqual(project_name, "Employee Onboarding : test@researcher.com") # don't allow making employee if onboarding is not complete @@ -36,13 +36,13 @@ class TestEmployeeOnboarding(unittest.TestCase): self.assertEqual(onboarding.boarding_status, "Pending") # start and end dates - start_date, end_date = frappe.db.get_value( + start_date, end_date = xhiveframework.db.get_value( "Task", onboarding.activities[0].task, ["exp_start_date", "exp_end_date"] ) self.assertEqual(getdate(start_date), getdate(onboarding.boarding_begins_on)) self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[0].duration)) - start_date, end_date = frappe.db.get_value( + start_date, end_date = xhiveframework.db.get_value( "Task", onboarding.activities[1].task, ["exp_start_date", "exp_end_date"] ) self.assertEqual( @@ -51,9 +51,9 @@ class TestEmployeeOnboarding(unittest.TestCase): self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[1].duration)) # complete the task - project = frappe.get_doc("Project", onboarding.project) - for task in frappe.get_all("Task", dict(project=project.name)): - task = frappe.get_doc("Task", task.name) + project = xhiveframework.get_doc("Project", onboarding.project) + for task in xhiveframework.get_all("Task", dict(project=project.name)): + task = xhiveframework.get_doc("Task", task.name) task.status = "Completed" task.save() @@ -72,13 +72,13 @@ class TestEmployeeOnboarding(unittest.TestCase): self.assertEqual(employee.employee_name, "Test Researcher") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def get_job_applicant(): - if frappe.db.exists("Job Applicant", "test@researcher.com"): - return frappe.get_doc("Job Applicant", "test@researcher.com") - applicant = frappe.new_doc("Job Applicant") + if xhiveframework.db.exists("Job Applicant", "test@researcher.com"): + return xhiveframework.get_doc("Job Applicant", "test@researcher.com") + applicant = xhiveframework.new_doc("Job Applicant") applicant.applicant_name = "Test Researcher" applicant.email_id = "test@researcher.com" applicant.designation = "Researcher" @@ -89,9 +89,9 @@ def get_job_applicant(): def get_job_offer(applicant_name): - job_offer = frappe.db.exists("Job Offer", {"job_applicant": applicant_name}) + job_offer = xhiveframework.db.exists("Job Offer", {"job_applicant": applicant_name}) if job_offer: - return frappe.get_doc("Job Offer", job_offer) + return xhiveframework.get_doc("Job Offer", job_offer) job_offer = create_job_offer(job_applicant=applicant_name) job_offer.submit() @@ -103,11 +103,11 @@ def create_employee_onboarding(): job_offer = get_job_offer(applicant.name) holiday_list = make_holiday_list("_Test Employee Boarding") - holiday_list = frappe.get_doc("Holiday List", holiday_list) + holiday_list = xhiveframework.get_doc("Holiday List", holiday_list) holiday_list.holidays = [] holiday_list.save() - onboarding = frappe.new_doc("Employee Onboarding") + onboarding = xhiveframework.new_doc("Employee Onboarding") onboarding.job_applicant = applicant.name onboarding.job_offer = job_offer.name onboarding.date_of_joining = onboarding.boarding_begins_on = getdate() diff --git a/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.js b/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.js index 5e1b6e9..5d2e7a4 100644 --- a/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.js +++ b/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Onboarding Template', { +xhiveframework.ui.form.on('Employee Onboarding Template', { setup: function(frm) { frm.set_query("department", function() { return { diff --git a/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.py b/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.py index 199013a..6ec1aa1 100644 --- a/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.py +++ b/hrms/hr/doctype/employee_onboarding_template/employee_onboarding_template.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeeOnboardingTemplate(Document): diff --git a/hrms/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py b/hrms/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py index db09011..a519284 100644 --- a/hrms/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py +++ b/hrms/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.js b/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.js index 310f453..44ea3d1 100644 --- a/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.js +++ b/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.js @@ -1,7 +1,7 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2022, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Employee Performance Feedback", { +xhiveframework.ui.form.on("Employee Performance Feedback", { onload(frm) { frm.trigger("set_reviewer"); }, @@ -42,7 +42,7 @@ frappe.ui.form.on("Employee Performance Feedback", { set_reviewer(frm) { if (!frm.doc.reviewer) { - frappe.db.get_value("Employee", { user_id: frappe.session.user }, "name").then(employee_record => { + xhiveframework.db.get_value("Employee", { user_id: xhiveframework.session.user }, "name").then(employee_record => { const session_employee = employee_record?.message?.name; if (session_employee) frm.set_value("reviewer", session_employee); diff --git a/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.py b/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.py index d3b8d29..f34beb6 100644 --- a/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.py +++ b/hrms/hr/doctype/employee_performance_feedback/employee_performance_feedback.py @@ -1,10 +1,10 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import flt, get_link_to_form from hrms.hr.doctype.appraisal_cycle.appraisal_cycle import validate_active_appraisal_cycle from hrms.hr.utils import validate_active_employee @@ -27,9 +27,9 @@ class EmployeePerformanceFeedback(Document): def validate_employee(self): if self.employee == self.reviewer: - frappe.throw( + xhiveframework.throw( _("Employees cannot give feedback to themselves. Use {0} instead: {1}").format( - frappe.bold(_("Self Appraisal")), get_link_to_form("Appraisal", self.appraisal) + xhiveframework.bold(_("Self Appraisal")), get_link_to_form("Appraisal", self.appraisal) ) ) @@ -37,10 +37,10 @@ class EmployeePerformanceFeedback(Document): validate_active_employee(self.reviewer) def validate_appraisal(self): - employee = frappe.db.get_value("Appraisal", self.appraisal, "employee") + employee = xhiveframework.db.get_value("Appraisal", self.appraisal, "employee") if employee != self.employee: - frappe.throw( + xhiveframework.throw( _("Appraisal {0} does not belong to Employee {1}").format(self.appraisal, self.employee) ) @@ -48,7 +48,7 @@ class EmployeePerformanceFeedback(Document): total_weightage = sum(flt(d.per_weightage) for d in self.feedback_ratings) if flt(total_weightage, 2) != 100.0: - frappe.throw( + xhiveframework.throw( _("Total weightage for all criteria must add up to 100. Currently, it is {0}%").format( total_weightage ), @@ -67,16 +67,16 @@ class EmployeePerformanceFeedback(Document): if not self.appraisal: return - appraisal = frappe.get_doc("Appraisal", self.appraisal) + appraisal = xhiveframework.get_doc("Appraisal", self.appraisal) appraisal.calculate_avg_feedback_score(update=True) - @frappe.whitelist() + @xhiveframework.whitelist() def set_feedback_criteria(self): if not self.appraisal: return - template = frappe.db.get_value("Appraisal", self.appraisal, "appraisal_template") - template = frappe.get_doc("Appraisal Template", template) + template = xhiveframework.db.get_value("Appraisal", self.appraisal, "appraisal_template") + template = xhiveframework.get_doc("Appraisal Template", template) self.set("feedback_ratings", []) for entry in template.rating_criteria: diff --git a/hrms/hr/doctype/employee_performance_feedback/test_employee_performance_feedback.py b/hrms/hr/doctype/employee_performance_feedback/test_employee_performance_feedback.py index ecfe466..6706966 100644 --- a/hrms/hr/doctype/employee_performance_feedback/test_employee_performance_feedback.py +++ b/hrms/hr/doctype/employee_performance_feedback/test_employee_performance_feedback.py @@ -1,21 +1,21 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -from erpnext.setup.doctype.designation.test_designation import create_designation -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.appraisal_cycle.test_appraisal_cycle import create_appraisal_cycle from hrms.hr.doctype.appraisal_template.test_appraisal_template import create_appraisal_template from hrms.tests.test_utils import create_company -class TestEmployeePerformanceFeedback(FrappeTestCase): +class TestEmployeePerformanceFeedback(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Employee Performance Feedback") - frappe.db.delete("Appraisal") + xhiveframework.db.delete("Employee Performance Feedback") + xhiveframework.db.delete("Appraisal") company = create_company("_Test Appraisal").name self.template = create_appraisal_template() @@ -31,10 +31,10 @@ class TestEmployeePerformanceFeedback(FrappeTestCase): cycle = create_appraisal_cycle(designation="Engineer") cycle.create_appraisals() - self.appraisal = frappe.db.get_all("Appraisal", filters={"appraisal_cycle": cycle.name})[0].name + self.appraisal = xhiveframework.db.get_all("Appraisal", filters={"appraisal_cycle": cycle.name})[0].name def test_validate_employees(self): - feedback = frappe.get_doc( + feedback = xhiveframework.get_doc( { "doctype": "Employee Performance Feedback", "employee": self.employee, @@ -44,7 +44,7 @@ class TestEmployeePerformanceFeedback(FrappeTestCase): ) feedback.set_feedback_criteria() - self.assertRaises(frappe.ValidationError, feedback.insert) + self.assertRaises(xhiveframework.ValidationError, feedback.insert) def test_set_feedback_criteria(self): feedback = create_performance_feedback( @@ -103,7 +103,7 @@ class TestEmployeePerformanceFeedback(FrappeTestCase): feedback2.submit() - avg_feedback_score = frappe.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") + avg_feedback_score = xhiveframework.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") self.assertEqual(avg_feedback_score, 3.575) def test_update_avg_feedback_score_on_cancel(self): @@ -120,17 +120,17 @@ class TestEmployeePerformanceFeedback(FrappeTestCase): ratings[1].rating = 0.7 feedback.submit() - avg_feedback_score = frappe.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") + avg_feedback_score = xhiveframework.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") self.assertEqual(avg_feedback_score, 3.85) feedback.cancel() - avg_feedback_score = frappe.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") + avg_feedback_score = xhiveframework.db.get_value("Appraisal", self.appraisal, "avg_feedback_score") self.assertEqual(avg_feedback_score, 0.0) def create_performance_feedback(employee, reviewer, appraisal): - feedback = frappe.get_doc( + feedback = xhiveframework.get_doc( { "doctype": "Employee Performance Feedback", "employee": employee, diff --git a/hrms/hr/doctype/employee_promotion/employee_promotion.js b/hrms/hr/doctype/employee_promotion/employee_promotion.js index 3b3b12e..05d5fba 100644 --- a/hrms/hr/doctype/employee_promotion/employee_promotion.js +++ b/hrms/hr/doctype/employee_promotion/employee_promotion.js @@ -1,9 +1,9 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt {% include 'hrms/hr/employee_property_update.js' %} -frappe.ui.form.on('Employee Promotion', { +xhiveframework.ui.form.on('Employee Promotion', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/employee_promotion/employee_promotion.py b/hrms/hr/doctype/employee_promotion/employee_promotion.py index e0cc316..b3e79fd 100644 --- a/hrms/hr/doctype/employee_promotion/employee_promotion.py +++ b/hrms/hr/doctype/employee_promotion/employee_promotion.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate from hrms.hr.utils import update_employee_work_history, validate_active_employee @@ -16,13 +16,13 @@ class EmployeePromotion(Document): def before_submit(self): if getdate(self.promotion_date) > getdate(): - frappe.throw( + xhiveframework.throw( _("Employee Promotion cannot be submitted before Promotion Date"), - frappe.DocstatusTransitionError, + xhiveframework.DocstatusTransitionError, ) def on_submit(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) employee = update_employee_work_history( employee, self.promotion_details, date=self.promotion_date ) @@ -33,7 +33,7 @@ class EmployeePromotion(Document): employee.save() def on_cancel(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) employee = update_employee_work_history(employee, self.promotion_details, cancel=True) if self.revised_ctc: diff --git a/hrms/hr/doctype/employee_promotion/test_employee_promotion.py b/hrms/hr/doctype/employee_promotion/test_employee_promotion.py index edd2134..90700d2 100644 --- a/hrms/hr/doctype/employee_promotion/test_employee_promotion.py +++ b/hrms/hr/doctype/employee_promotion/test_employee_promotion.py @@ -1,22 +1,22 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, getdate from hrms.payroll.doctype.salary_structure.test_salary_structure import make_employee -class TestEmployeePromotion(FrappeTestCase): +class TestEmployeePromotion(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Employee Promotion") + xhiveframework.db.delete("Employee Promotion") def test_submit_before_promotion_date(self): employee = make_employee("employee@promotions.com") - promotion = frappe.get_doc( + promotion = xhiveframework.get_doc( { "doctype": "Employee Promotion", "employee": employee, @@ -31,7 +31,7 @@ class TestEmployeePromotion(FrappeTestCase): } ) promotion.promotion_date = add_days(getdate(), 1) - self.assertRaises(frappe.DocstatusTransitionError, promotion.submit) + self.assertRaises(xhiveframework.DocstatusTransitionError, promotion.submit) promotion.promotion_date = getdate() promotion.submit() @@ -39,7 +39,7 @@ class TestEmployeePromotion(FrappeTestCase): def test_employee_history(self): for grade in ["L1", "L2"]: - frappe.get_doc({"doctype": "Employee Grade", "__newname": grade}).insert() + xhiveframework.get_doc({"doctype": "Employee Grade", "__newname": grade}).insert() employee = make_employee( "test_employee_promotion@example.com", @@ -52,7 +52,7 @@ class TestEmployeePromotion(FrappeTestCase): ctc="500000", ) - promotion = frappe.get_doc( + promotion = xhiveframework.get_doc( { "doctype": "Employee Promotion", "employee": employee, @@ -71,7 +71,7 @@ class TestEmployeePromotion(FrappeTestCase): ).submit() # employee fields updated - employee = frappe.get_doc("Employee", employee) + employee = xhiveframework.get_doc("Employee", employee) self.assertEqual(employee.grade, "L2") self.assertEqual(employee.designation, "Project Manager") self.assertEqual(employee.ctc, 1000000) diff --git a/hrms/hr/doctype/employee_property_history/employee_property_history.py b/hrms/hr/doctype/employee_property_history/employee_property_history.py index 345899e..846019e 100644 --- a/hrms/hr/doctype/employee_property_history/employee_property_history.py +++ b/hrms/hr/doctype/employee_property_history/employee_property_history.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeePropertyHistory(Document): diff --git a/hrms/hr/doctype/employee_referral/employee_referral.js b/hrms/hr/doctype/employee_referral/employee_referral.js index 9f822d0..0db7b65 100644 --- a/hrms/hr/doctype/employee_referral/employee_referral.js +++ b/hrms/hr/doctype/employee_referral/employee_referral.js @@ -1,11 +1,11 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Employee Referral", { +xhiveframework.ui.form.on("Employee Referral", { refresh: function(frm) { if (frm.doc.docstatus === 1 && frm.doc.status === "Pending") { frm.add_custom_button(__("Reject Employee Referral"), function() { - frappe.confirm( + xhiveframework.confirm( __("Are you sure you want to reject the Employee Referral?"), function() { frm.doc.status = "Rejected"; @@ -25,7 +25,7 @@ frappe.ui.form.on("Employee Referral", { // To check whether Payment is done or not if (frm.doc.docstatus === 1 && frm.doc.status === "Accepted") { - frappe.db.get_list("Additional Salary", { + xhiveframework.db.get_list("Additional Salary", { filters: { ref_docname: cur_frm.doc.name, docstatus: 1 @@ -45,21 +45,21 @@ frappe.ui.form.on("Employee Referral", { }, create_job_applicant: function(frm) { - frappe.model.open_mapped_doc({ + xhiveframework.model.open_mapped_doc({ method: "hrms.hr.doctype.employee_referral.employee_referral.create_job_applicant", frm: frm }); }, create_additional_salary: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.employee_referral.employee_referral.create_additional_salary", args: { doc: frm.doc }, callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); }, diff --git a/hrms/hr/doctype/employee_referral/employee_referral.py b/hrms/hr/doctype/employee_referral/employee_referral.py index f813e1c..5d69ba3 100644 --- a/hrms/hr/doctype/employee_referral/employee_referral.py +++ b/hrms/hr/doctype/employee_referral/employee_referral.py @@ -1,11 +1,11 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import get_link_to_form from hrms.hr.utils import validate_active_employee @@ -27,15 +27,15 @@ class EmployeeReferral(Document): self.referral_payment_status = "Unpaid" -@frappe.whitelist() +@xhiveframework.whitelist() def create_job_applicant(source_name, target_doc=None): - emp_ref = frappe.get_doc("Employee Referral", source_name) + emp_ref = xhiveframework.get_doc("Employee Referral", source_name) # just for Api call if some set status apart from default Status status = emp_ref.status if emp_ref.status in ["Pending", "In process"]: status = "Open" - job_applicant = frappe.new_doc("Job Applicant") + job_applicant = xhiveframework.new_doc("Job Applicant") job_applicant.source = "Employee Referral" job_applicant.employee_referral = emp_ref.name job_applicant.status = status @@ -47,7 +47,7 @@ def create_job_applicant(source_name, target_doc=None): job_applicant.resume_link = emp_ref.resume_link job_applicant.save() - frappe.msgprint( + xhiveframework.msgprint( _("Job Applicant {0} created successfully.").format( get_link_to_form("Job Applicant", job_applicant.name) ), @@ -60,17 +60,17 @@ def create_job_applicant(source_name, target_doc=None): return job_applicant -@frappe.whitelist() +@xhiveframework.whitelist() def create_additional_salary(doc): import json if isinstance(doc, str): - doc = frappe._dict(json.loads(doc)) + doc = xhiveframework._dict(json.loads(doc)) - if not frappe.db.exists("Additional Salary", {"ref_docname": doc.name}): - additional_salary = frappe.new_doc("Additional Salary") + if not xhiveframework.db.exists("Additional Salary", {"ref_docname": doc.name}): + additional_salary = xhiveframework.new_doc("Additional Salary") additional_salary.employee = doc.referrer - additional_salary.company = frappe.db.get_value("Employee", doc.referrer, "company") + additional_salary.company = xhiveframework.db.get_value("Employee", doc.referrer, "company") additional_salary.overwrite_salary_structure_amount = 0 additional_salary.ref_doctype = doc.doctype additional_salary.ref_docname = doc.name diff --git a/hrms/hr/doctype/employee_referral/employee_referral_list.js b/hrms/hr/doctype/employee_referral/employee_referral_list.js index 38dfc4d..1711836 100644 --- a/hrms/hr/doctype/employee_referral/employee_referral_list.js +++ b/hrms/hr/doctype/employee_referral/employee_referral_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Employee Referral'] = { +xhiveframework.listview_settings['Employee Referral'] = { add_fields: ["status"], get_indicator: function (doc) { if (doc.status == "Pending") { diff --git a/hrms/hr/doctype/employee_referral/test_employee_referral.py b/hrms/hr/doctype/employee_referral/test_employee_referral.py index db0e31c..2c5fbac 100644 --- a/hrms/hr/doctype/employee_referral/test_employee_referral.py +++ b/hrms/hr/doctype/employee_referral/test_employee_referral.py @@ -1,13 +1,13 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import today +import xhiveframework +from xhiveframework.utils import today -from erpnext.setup.doctype.designation.test_designation import create_designation -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.employee_referral.employee_referral import ( create_additional_salary, @@ -17,8 +17,8 @@ from hrms.hr.doctype.employee_referral.employee_referral import ( class TestEmployeeReferral(unittest.TestCase): def setUp(self): - frappe.db.sql("DELETE FROM `tabJob Applicant`") - frappe.db.sql("DELETE FROM `tabEmployee Referral`") + xhiveframework.db.sql("DELETE FROM `tabJob Applicant`") + xhiveframework.db.sql("DELETE FROM `tabEmployee Referral`") def test_workflow_and_status_sync(self): emp_ref = create_employee_referral() @@ -52,12 +52,12 @@ class TestEmployeeReferral(unittest.TestCase): self.assertTrue(add_sal.ref_docname, emp_ref.name) def tearDown(self): - frappe.db.sql("DELETE FROM `tabJob Applicant`") - frappe.db.sql("DELETE FROM `tabEmployee Referral`") + xhiveframework.db.sql("DELETE FROM `tabJob Applicant`") + xhiveframework.db.sql("DELETE FROM `tabEmployee Referral`") def create_employee_referral(): - emp_ref = frappe.new_doc("Employee Referral") + emp_ref = xhiveframework.new_doc("Employee Referral") emp_ref.first_name = "Mahesh" emp_ref.last_name = "Singh" emp_ref.email = "a@b.c" diff --git a/hrms/hr/doctype/employee_separation/employee_separation.js b/hrms/hr/doctype/employee_separation/employee_separation.js index d2829af..8c1b827 100644 --- a/hrms/hr/doctype/employee_separation/employee_separation.js +++ b/hrms/hr/doctype/employee_separation/employee_separation.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Separation', { +xhiveframework.ui.form.on('Employee Separation', { setup: function(frm) { frm.add_fetch("employee_separation_template", "company", "company"); frm.add_fetch("employee_separation_template", "department", "department"); @@ -12,15 +12,15 @@ frappe.ui.form.on('Employee Separation', { refresh: function(frm) { if (frm.doc.employee) { frm.add_custom_button(__('Employee'), function() { - frappe.set_route("Form", "Employee", frm.doc.employee); + xhiveframework.set_route("Form", "Employee", frm.doc.employee); },__("View")); } if (frm.doc.project) { frm.add_custom_button(__('Project'), function() { - frappe.set_route("Form", "Project", frm.doc.project); + xhiveframework.set_route("Form", "Project", frm.doc.project); },__("View")); frm.add_custom_button(__('Task'), function() { - frappe.set_route('List', 'Task', {project: frm.doc.project}); + xhiveframework.set_route('List', 'Task', {project: frm.doc.project}); },__("View")); } }, @@ -28,7 +28,7 @@ frappe.ui.form.on('Employee Separation', { employee_separation_template: function(frm) { frm.set_value("activities" ,""); if (frm.doc.employee_separation_template) { - frappe.call({ + xhiveframework.call({ method: "hrms.controllers.employee_boarding_controller.get_onboarding_details", args: { "parent": frm.doc.employee_separation_template, @@ -37,7 +37,7 @@ frappe.ui.form.on('Employee Separation', { callback: function(r) { if (r.message) { $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Employee Boarding Activity", "activities"); + var row = xhiveframework.model.add_child(frm.doc, "Employee Boarding Activity", "activities"); $.extend(row, d); }); } diff --git a/hrms/hr/doctype/employee_separation/employee_separation.py b/hrms/hr/doctype/employee_separation/employee_separation.py index 6ecfb84..c91c608 100644 --- a/hrms/hr/doctype/employee_separation/employee_separation.py +++ b/hrms/hr/doctype/employee_separation/employee_separation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt diff --git a/hrms/hr/doctype/employee_separation/employee_separation_list.js b/hrms/hr/doctype/employee_separation/employee_separation_list.js index 76c58f5..38ac27d 100644 --- a/hrms/hr/doctype/employee_separation/employee_separation_list.js +++ b/hrms/hr/doctype/employee_separation/employee_separation_list.js @@ -1,7 +1,7 @@ -frappe.listview_settings['Employee Separation'] = { +xhiveframework.listview_settings['Employee Separation'] = { add_fields: ["boarding_status", "employee_name", "department"], filters:[["boarding_status","=", "Pending"]], get_indicator: function(doc) { - return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; + return [__(doc.boarding_status), xhiveframework.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; } }; diff --git a/hrms/hr/doctype/employee_separation/test_employee_separation.py b/hrms/hr/doctype/employee_separation/test_employee_separation.py index df31d09..f6c4e4a 100644 --- a/hrms/hr/doctype/employee_separation/test_employee_separation.py +++ b/hrms/hr/doctype/employee_separation/test_employee_separation.py @@ -1,10 +1,10 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import getdate +import xhiveframework +from xhiveframework.utils import getdate test_dependencies = ["Employee Onboarding"] @@ -16,7 +16,7 @@ class TestEmployeeSeparation(unittest.TestCase): self.assertEqual(separation.docstatus, 1) self.assertEqual(separation.boarding_status, "Pending") - project = frappe.get_doc("Project", separation.project) + project = xhiveframework.get_doc("Project", separation.project) project.percent_complete_method = "Manual" project.status = "Completed" project.save() @@ -28,16 +28,16 @@ class TestEmployeeSeparation(unittest.TestCase): self.assertEqual(separation.project, "") def tearDown(self): - for entry in frappe.get_all("Employee Separation"): - doc = frappe.get_doc("Employee Separation", entry.name) + for entry in xhiveframework.get_all("Employee Separation"): + doc = xhiveframework.get_doc("Employee Separation", entry.name) if doc.docstatus == 1: doc.cancel() doc.delete() def create_employee_separation(): - employee = frappe.db.get_value("Employee", {"status": "Active", "company": "_Test Company"}) - separation = frappe.new_doc("Employee Separation") + employee = xhiveframework.db.get_value("Employee", {"status": "Active", "company": "_Test Company"}) + separation = xhiveframework.new_doc("Employee Separation") separation.employee = employee separation.boarding_begins_on = getdate() separation.company = "_Test Company" diff --git a/hrms/hr/doctype/employee_separation_template/employee_separation_template.js b/hrms/hr/doctype/employee_separation_template/employee_separation_template.js index 172ff9f..a24fbdf 100644 --- a/hrms/hr/doctype/employee_separation_template/employee_separation_template.js +++ b/hrms/hr/doctype/employee_separation_template/employee_separation_template.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Separation Template', { +xhiveframework.ui.form.on('Employee Separation Template', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/employee_separation_template/employee_separation_template.py b/hrms/hr/doctype/employee_separation_template/employee_separation_template.py index 70b84b1..ec35b7a 100644 --- a/hrms/hr/doctype/employee_separation_template/employee_separation_template.py +++ b/hrms/hr/doctype/employee_separation_template/employee_separation_template.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmployeeSeparationTemplate(Document): diff --git a/hrms/hr/doctype/employee_separation_template/test_employee_separation_template.py b/hrms/hr/doctype/employee_separation_template/test_employee_separation_template.py index 6a0c947..937cfa2 100644 --- a/hrms/hr/doctype/employee_separation_template/test_employee_separation_template.py +++ b/hrms/hr/doctype/employee_separation_template/test_employee_separation_template.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/employee_skill/employee_skill.py b/hrms/hr/doctype/employee_skill/employee_skill.py index 13bee34..8dacc7a 100644 --- a/hrms/hr/doctype/employee_skill/employee_skill.py +++ b/hrms/hr/doctype/employee_skill/employee_skill.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class EmployeeSkill(Document): diff --git a/hrms/hr/doctype/employee_skill_map/employee_skill_map.js b/hrms/hr/doctype/employee_skill_map/employee_skill_map.js index b82b18d..83d8811 100644 --- a/hrms/hr/doctype/employee_skill_map/employee_skill_map.js +++ b/hrms/hr/doctype/employee_skill_map/employee_skill_map.js @@ -1,16 +1,16 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Employee Skill Map', { +xhiveframework.ui.form.on('Employee Skill Map', { // refresh: function(frm) { // } designation: (frm) => { frm.set_value('employee_skills', null); if (frm.doc.designation) { - frappe.db.get_doc('Designation', frm.doc.designation).then((designation) => { + xhiveframework.db.get_doc('Designation', frm.doc.designation).then((designation) => { designation.skills.forEach(designation_skill => { - let row = frappe.model.add_child(frm.doc, 'Employee Skill', 'employee_skills'); + let row = xhiveframework.model.add_child(frm.doc, 'Employee Skill', 'employee_skills'); row.skill = designation_skill.skill; row.proficiency = 1; }); diff --git a/hrms/hr/doctype/employee_skill_map/employee_skill_map.py b/hrms/hr/doctype/employee_skill_map/employee_skill_map.py index ea7da9e..f836735 100644 --- a/hrms/hr/doctype/employee_skill_map/employee_skill_map.py +++ b/hrms/hr/doctype/employee_skill_map/employee_skill_map.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class EmployeeSkillMap(Document): diff --git a/hrms/hr/doctype/employee_training/employee_training.py b/hrms/hr/doctype/employee_training/employee_training.py index cd92dd6..7c9dc2d 100644 --- a/hrms/hr/doctype/employee_training/employee_training.py +++ b/hrms/hr/doctype/employee_training/employee_training.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class EmployeeTraining(Document): diff --git a/hrms/hr/doctype/employee_transfer/employee_transfer.js b/hrms/hr/doctype/employee_transfer/employee_transfer.js index 762672b..9ea64a9 100644 --- a/hrms/hr/doctype/employee_transfer/employee_transfer.js +++ b/hrms/hr/doctype/employee_transfer/employee_transfer.js @@ -1,9 +1,9 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt {% include 'hrms/hr/employee_property_update.js' %} -frappe.ui.form.on('Employee Transfer', { +xhiveframework.ui.form.on('Employee Transfer', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/employee_transfer/employee_transfer.py b/hrms/hr/doctype/employee_transfer/employee_transfer.py index 2cdb492..f604c0f 100644 --- a/hrms/hr/doctype/employee_transfer/employee_transfer.py +++ b/hrms/hr/doctype/employee_transfer/employee_transfer.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate from hrms.hr.utils import update_employee_work_history @@ -13,15 +13,15 @@ from hrms.hr.utils import update_employee_work_history class EmployeeTransfer(Document): def before_submit(self): if getdate(self.transfer_date) > getdate(): - frappe.throw( + xhiveframework.throw( _("Employee Transfer cannot be submitted before Transfer Date"), - frappe.DocstatusTransitionError, + xhiveframework.DocstatusTransitionError, ) def on_submit(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) if self.create_new_employee_id: - new_employee = frappe.copy_doc(employee) + new_employee = xhiveframework.copy_doc(employee) new_employee.name = None new_employee.employee_number = None new_employee = update_employee_work_history( @@ -50,10 +50,10 @@ class EmployeeTransfer(Document): employee.save() def on_cancel(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) if self.create_new_employee_id: if self.new_employee_id: - frappe.throw( + xhiveframework.throw( _("Please delete the Employee {0} to cancel this document").format( "{0}".format(self.new_employee_id) ) diff --git a/hrms/hr/doctype/employee_transfer/test_employee_transfer.py b/hrms/hr/doctype/employee_transfer/test_employee_transfer.py index 9ba6991..19c5701 100644 --- a/hrms/hr/doctype/employee_transfer/test_employee_transfer.py +++ b/hrms/hr/doctype/employee_transfer/test_employee_transfer.py @@ -1,13 +1,13 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import change_settings -from frappe.utils import add_days, getdate +import xhiveframework +from xhiveframework.tests.utils import change_settings +from xhiveframework.utils import add_days, getdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee class TestEmployeeTransfer(unittest.TestCase): @@ -15,15 +15,15 @@ class TestEmployeeTransfer(unittest.TestCase): create_company() def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def test_submit_before_transfer_date(self): make_employee("employee2@transfers.com") - transfer_obj = frappe.get_doc( + transfer_obj = xhiveframework.get_doc( { "doctype": "Employee Transfer", - "employee": frappe.get_value("Employee", {"user_id": "employee2@transfers.com"}, "name"), + "employee": xhiveframework.get_value("Employee", {"user_id": "employee2@transfers.com"}, "name"), "transfer_details": [ { "property": "Designation", @@ -36,8 +36,8 @@ class TestEmployeeTransfer(unittest.TestCase): ) transfer_obj.transfer_date = add_days(getdate(), 1) transfer_obj.save() - self.assertRaises(frappe.DocstatusTransitionError, transfer_obj.submit) - transfer = frappe.get_doc("Employee Transfer", transfer_obj.name) + self.assertRaises(xhiveframework.DocstatusTransitionError, transfer_obj.submit) + transfer = xhiveframework.get_doc("Employee Transfer", transfer_obj.name) transfer.transfer_date = getdate() transfer.submit() self.assertEqual(transfer.docstatus, 1) @@ -45,10 +45,10 @@ class TestEmployeeTransfer(unittest.TestCase): def test_new_employee_creation(self): make_employee("employee3@transfers.com") - transfer = frappe.get_doc( + transfer = xhiveframework.get_doc( { "doctype": "Employee Transfer", - "employee": frappe.get_value("Employee", {"user_id": "employee3@transfers.com"}, "name"), + "employee": xhiveframework.get_value("Employee", {"user_id": "employee3@transfers.com"}, "name"), "create_new_employee_id": 1, "transfer_date": getdate(), "transfer_details": [ @@ -63,8 +63,8 @@ class TestEmployeeTransfer(unittest.TestCase): ).insert() transfer.submit() self.assertTrue(transfer.new_employee_id) - self.assertEqual(frappe.get_value("Employee", transfer.new_employee_id, "status"), "Active") - self.assertEqual(frappe.get_value("Employee", transfer.employee, "status"), "Left") + self.assertEqual(xhiveframework.get_value("Employee", transfer.new_employee_id, "status"), "Active") + self.assertEqual(xhiveframework.get_value("Employee", transfer.employee, "status"), "Left") def test_employee_history(self): employee = make_employee( @@ -83,7 +83,7 @@ class TestEmployeeTransfer(unittest.TestCase): dt = [getdate("01-10-2021"), getdate()] to_date = [add_days(dt[1], -1), None] - employee = frappe.get_doc("Employee", employee) + employee = xhiveframework.get_doc("Employee", employee) for data in employee.internal_work_history: self.assertEqual(data.department, department[count]) self.assertEqual(data.designation, designation[count]) @@ -112,8 +112,8 @@ class TestEmployeeTransfer(unittest.TestCase): def create_company(): - if not frappe.db.exists("Company", "Test Company"): - frappe.get_doc( + if not xhiveframework.db.exists("Company", "Test Company"): + xhiveframework.get_doc( { "doctype": "Company", "company_name": "Test Company", @@ -124,7 +124,7 @@ def create_company(): def create_employee_transfer(employee): - doc = frappe.get_doc( + doc = xhiveframework.get_doc( { "doctype": "Employee Transfer", "employee": employee, diff --git a/hrms/hr/doctype/employment_type/employment_type.py b/hrms/hr/doctype/employment_type/employment_type.py index b2262c0..a04a0f4 100644 --- a/hrms/hr/doctype/employment_type/employment_type.py +++ b/hrms/hr/doctype/employment_type/employment_type.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class EmploymentType(Document): diff --git a/hrms/hr/doctype/employment_type/test_employment_type.py b/hrms/hr/doctype/employment_type/test_employment_type.py index fdf6965..82d2e40 100644 --- a/hrms/hr/doctype/employment_type/test_employment_type.py +++ b/hrms/hr/doctype/employment_type/test_employment_type.py @@ -1,6 +1,6 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe +import xhiveframework -test_records = frappe.get_test_records("Employment Type") +test_records = xhiveframework.get_test_records("Employment Type") diff --git a/hrms/hr/doctype/exit_interview/exit_interview.js b/hrms/hr/doctype/exit_interview/exit_interview.js index c4fefd0..502fe45 100644 --- a/hrms/hr/doctype/exit_interview/exit_interview.js +++ b/hrms/hr/doctype/exit_interview/exit_interview.js @@ -1,9 +1,9 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Exit Interview', { +xhiveframework.ui.form.on('Exit Interview', { refresh: function(frm) { - if (!frm.doc.__islocal && !frm.doc.questionnaire_email_sent && frappe.boot.user.can_write.includes('Exit Interview')) { + if (!frm.doc.__islocal && !frm.doc.questionnaire_email_sent && xhiveframework.boot.user.can_write.includes('Exit Interview')) { frm.add_custom_button(__('Send Exit Questionnaire'), function () { frm.trigger('send_exit_questionnaire'); }); @@ -11,9 +11,9 @@ frappe.ui.form.on('Exit Interview', { }, employee: function(frm) { - frappe.db.get_value('Employee', frm.doc.employee, 'relieving_date', (message) => { + xhiveframework.db.get_value('Employee', frm.doc.employee, 'relieving_date', (message) => { if (!message.relieving_date) { - frappe.throw({ + xhiveframework.throw({ message: __('Please set the relieving date for employee {0}', ['' + frm.doc.employee + '']), title: __('Relieving Date Missing') @@ -23,7 +23,7 @@ frappe.ui.form.on('Exit Interview', { }, send_exit_questionnaire: function(frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire', args: { 'interviews': [frm.doc] diff --git a/hrms/hr/doctype/exit_interview/exit_interview.py b/hrms/hr/doctype/exit_interview/exit_interview.py index d6b71e0..708825b 100644 --- a/hrms/hr/doctype/exit_interview/exit_interview.py +++ b/hrms/hr/doctype/exit_interview/exit_interview.py @@ -1,12 +1,12 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import get_link_to_form -from erpnext.setup.doctype.employee.employee import get_employee_email +from xhiveerp.setup.doctype.employee.employee import get_employee_email class ExitInterview(Document): @@ -16,8 +16,8 @@ class ExitInterview(Document): self.set_employee_email() def validate_relieving_date(self): - if not frappe.db.get_value("Employee", self.employee, "relieving_date"): - frappe.throw( + if not xhiveframework.db.get_value("Employee", self.employee, "relieving_date"): + xhiveframework.throw( _("Please set the relieving date for employee {0}").format( get_link_to_form("Employee", self.employee) ), @@ -25,24 +25,24 @@ class ExitInterview(Document): ) def validate_duplicate_interview(self): - doc = frappe.db.exists( + doc = xhiveframework.db.exists( "Exit Interview", {"employee": self.employee, "name": ("!=", self.name), "docstatus": ("!=", 2)} ) if doc: - frappe.throw( + xhiveframework.throw( _("Exit Interview {0} already exists for Employee: {1}").format( - get_link_to_form("Exit Interview", doc), frappe.bold(self.employee) + get_link_to_form("Exit Interview", doc), xhiveframework.bold(self.employee) ), - frappe.DuplicateEntryError, + xhiveframework.DuplicateEntryError, ) def set_employee_email(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) self.email = get_employee_email(employee) def on_submit(self): if self.status != "Completed": - frappe.throw(_("Only Completed documents can be submitted")) + xhiveframework.throw(_("Only Completed documents can be submitted")) self.update_interview_date_in_employee() @@ -52,12 +52,12 @@ class ExitInterview(Document): def update_interview_date_in_employee(self): if self.docstatus == 1: - frappe.db.set_value("Employee", self.employee, "held_on", self.date) + xhiveframework.db.set_value("Employee", self.employee, "held_on", self.date) elif self.docstatus == 2: - frappe.db.set_value("Employee", self.employee, "held_on", None) + xhiveframework.db.set_value("Employee", self.employee, "held_on", None) -@frappe.whitelist() +@xhiveframework.whitelist() def send_exit_questionnaire(interviews): interviews = get_interviews(interviews) validate_questionnaire_settings() @@ -66,25 +66,25 @@ def send_exit_questionnaire(interviews): email_failure = [] for exit_interview in interviews: - interview = frappe.get_doc("Exit Interview", exit_interview.get("name")) + interview = xhiveframework.get_doc("Exit Interview", exit_interview.get("name")) if interview.get("questionnaire_email_sent"): continue - employee = frappe.get_doc("Employee", interview.employee) + employee = xhiveframework.get_doc("Employee", interview.employee) email = get_employee_email(employee) context = interview.as_dict() context.update(employee.as_dict()) - template_name = frappe.db.get_single_value( + template_name = xhiveframework.db.get_single_value( "HR Settings", "exit_questionnaire_notification_template" ) - template = frappe.get_doc("Email Template", template_name) + template = xhiveframework.get_doc("Email Template", template_name) if email: - frappe.sendmail( + xhiveframework.sendmail( recipients=email, subject=template.subject, - message=frappe.render_template(template.response, context), + message=xhiveframework.render_template(template.response, context), reference_doctype=interview.doctype, reference_name=interview.name, ) @@ -104,13 +104,13 @@ def get_interviews(interviews): interviews = json.loads(interviews) if not len(interviews): - frappe.throw(_("Atleast one interview has to be selected.")) + xhiveframework.throw(_("Atleast one interview has to be selected.")) return interviews def validate_questionnaire_settings(): - settings = frappe.db.get_value( + settings = xhiveframework.db.get_value( "HR Settings", "HR Settings", ["exit_questionnaire_web_form", "exit_questionnaire_notification_template"], @@ -120,10 +120,10 @@ def validate_questionnaire_settings(): if ( not settings.exit_questionnaire_web_form or not settings.exit_questionnaire_notification_template ): - frappe.throw( + xhiveframework.throw( _("Please set {0} and {1} in {2}.").format( - frappe.bold("Exit Questionnaire Web Form"), - frappe.bold("Notification Template"), + xhiveframework.bold("Exit Questionnaire Web Form"), + xhiveframework.bold("Notification Template"), get_link_to_form("HR Settings", "HR Settings"), ), title=_("Settings Missing"), @@ -133,14 +133,14 @@ def validate_questionnaire_settings(): def show_email_summary(email_success, email_failure): message = "" if email_success: - message += _("{0}: {1}").format(frappe.bold("Sent Successfully"), ", ".join(email_success)) + message += _("{0}: {1}").format(xhiveframework.bold("Sent Successfully"), ", ".join(email_success)) if message and email_failure: message += "

" if email_failure: message += _("{0} due to missing email information for employee(s): {1}").format( - frappe.bold("Sending Failed"), ", ".join(email_failure) + xhiveframework.bold("Sending Failed"), ", ".join(email_failure) ) - frappe.msgprint( + xhiveframework.msgprint( message, title=_("Exit Questionnaire"), indicator="blue", is_minimizable=True, wide=True ) diff --git a/hrms/hr/doctype/exit_interview/exit_interview_list.js b/hrms/hr/doctype/exit_interview/exit_interview_list.js index 32d3668..7843cb5 100644 --- a/hrms/hr/doctype/exit_interview/exit_interview_list.js +++ b/hrms/hr/doctype/exit_interview/exit_interview_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Exit Interview'] = { +xhiveframework.listview_settings['Exit Interview'] = { has_indicator_for_draft: 1, get_indicator: function(doc) { let status_color = { @@ -11,10 +11,10 @@ frappe.listview_settings['Exit Interview'] = { }, onload: function(listview) { - if (frappe.boot.user.can_write.includes('Exit Interview')) { + if (xhiveframework.boot.user.can_write.includes('Exit Interview')) { listview.page.add_action_item(__('Send Exit Questionnaires'), function() { const interviews = listview.get_checked_items(); - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire', freeze: true, args: { diff --git a/hrms/hr/doctype/exit_interview/exit_questionnaire_notification_template.html b/hrms/hr/doctype/exit_interview/exit_questionnaire_notification_template.html index 0317b1a..ccaaed3 100644 --- a/hrms/hr/doctype/exit_interview/exit_questionnaire_notification_template.html +++ b/hrms/hr/doctype/exit_interview/exit_questionnaire_notification_template.html @@ -8,8 +8,8 @@ Thank you for the contribution you have made during your time at {{ company }}. We value your opinion and welcome the feedback on your experience working with us. Request you to take out a few minutes to fill up this Exit Questionnaire. - {% set web_form = frappe.db.get_value('HR Settings', 'HR Settings', 'exit_questionnaire_web_form') %} - {% set web_form_link = frappe.utils.get_url(uri=frappe.db.get_value('Web Form', web_form, 'route')) %} + {% set web_form = xhiveframework.db.get_value('HR Settings', 'HR Settings', 'exit_questionnaire_web_form') %} + {% set web_form_link = xhiveframework.utils.get_url(uri=xhiveframework.db.get_value('Web Form', web_form, 'route')) %}

{{ _('Submit Now') }} diff --git a/hrms/hr/doctype/exit_interview/test_exit_interview.py b/hrms/hr/doctype/exit_interview/test_exit_interview.py index 2da8598..e12866c 100644 --- a/hrms/hr/doctype/exit_interview/test_exit_interview.py +++ b/hrms/hr/doctype/exit_interview/test_exit_interview.py @@ -1,48 +1,48 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import os import unittest -import frappe -from frappe import _ -from frappe.core.doctype.user_permission.test_user_permission import create_user -from frappe.tests.test_webform import create_custom_doctype, create_webform -from frappe.utils import getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.core.doctype.user_permission.test_user_permission import create_user +from xhiveframework.tests.test_webform import create_custom_doctype, create_webform +from xhiveframework.utils import getdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.exit_interview.exit_interview import send_exit_questionnaire class TestExitInterview(unittest.TestCase): def setUp(self): - frappe.db.sql("delete from `tabExit Interview`") + xhiveframework.db.sql("delete from `tabExit Interview`") def test_duplicate_interview(self): employee = make_employee("employeeexitint1@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) + xhiveframework.db.set_value("Employee", employee, "relieving_date", getdate()) interview = create_exit_interview(employee) - doc = frappe.copy_doc(interview) - self.assertRaises(frappe.DuplicateEntryError, doc.save) + doc = xhiveframework.copy_doc(interview) + self.assertRaises(xhiveframework.DuplicateEntryError, doc.save) def test_relieving_date_validation(self): employee = make_employee("employeeexitint2@example.com") # unset relieving date - frappe.db.set_value("Employee", employee, "relieving_date", None) + xhiveframework.db.set_value("Employee", employee, "relieving_date", None) interview = create_exit_interview(employee, save=False) - self.assertRaises(frappe.ValidationError, interview.save) + self.assertRaises(xhiveframework.ValidationError, interview.save) # set relieving date - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) + xhiveframework.db.set_value("Employee", employee, "relieving_date", getdate()) interview = create_exit_interview(employee) self.assertTrue(interview.name) def test_interview_date_updated_in_employee_master(self): employee = make_employee("employeeexit3@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) + xhiveframework.db.set_value("Employee", employee, "relieving_date", getdate()) interview = create_exit_interview(employee) interview.status = "Completed" @@ -50,20 +50,20 @@ class TestExitInterview(unittest.TestCase): # exit interview date updated on submit interview.submit() - self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), interview.date) + self.assertEqual(xhiveframework.db.get_value("Employee", employee, "held_on"), interview.date) # exit interview reset on cancel interview.reload() interview.cancel() - self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), None) + self.assertEqual(xhiveframework.db.get_value("Employee", employee, "held_on"), None) def test_send_exit_questionnaire(self): create_custom_doctype() create_webform() template = create_notification_template() - webform = frappe.db.get_all("Web Form", limit=1) - frappe.db.set_value( + webform = xhiveframework.db.get_all("Web Form", limit=1) + xhiveframework.db.set_value( "HR Settings", "HR Settings", { @@ -73,22 +73,22 @@ class TestExitInterview(unittest.TestCase): ) employee = make_employee("employeeexit3@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) + xhiveframework.db.set_value("Employee", employee, "relieving_date", getdate()) interview = create_exit_interview(employee) send_exit_questionnaire([interview]) - email_queue = frappe.db.get_all("Email Queue", ["name", "message"], limit=1) + email_queue = xhiveframework.db.get_all("Email Queue", ["name", "message"], limit=1) self.assertTrue("Subject: Exit Questionnaire Notification" in email_queue[0].message) def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_exit_interview(employee, save=True): interviewer = create_user("test_exit_interviewer@example.com") - doc = frappe.get_doc( + doc = xhiveframework.get_doc( { "doctype": "Exit Interview", "employee": employee, @@ -106,20 +106,20 @@ def create_exit_interview(employee, save=True): def create_notification_template(): - template = frappe.db.exists("Email Template", _("Exit Questionnaire Notification")) + template = xhiveframework.db.exists("Email Template", _("Exit Questionnaire Notification")) if not template: - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( + base_path = xhiveframework.get_app_path("xhiveerp", "hr", "doctype") + response = xhiveframework.read_file( os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html") ) - template = frappe.get_doc( + template = xhiveframework.get_doc( { "doctype": "Email Template", "name": _("Exit Questionnaire Notification"), "response": response, "subject": _("Exit Questionnaire Notification"), - "owner": frappe.session.user, + "owner": xhiveframework.session.user, } ).insert(ignore_permissions=True) template = template.name diff --git a/hrms/hr/doctype/expected_skill_set/expected_skill_set.py b/hrms/hr/doctype/expected_skill_set/expected_skill_set.py index 0062ba9..11dcc67 100644 --- a/hrms/hr/doctype/expected_skill_set/expected_skill_set.py +++ b/hrms/hr/doctype/expected_skill_set/expected_skill_set.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class ExpectedSkillSet(Document): diff --git a/hrms/hr/doctype/expense_claim/expense_claim.js b/hrms/hr/doctype/expense_claim/expense_claim.js index 166c7fc..ac0052b 100644 --- a/hrms/hr/doctype/expense_claim/expense_claim.js +++ b/hrms/hr/doctype/expense_claim/expense_claim.js @@ -1,22 +1,22 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.provide("hrms.hr"); -frappe.provide("erpnext.accounts.dimensions"); +xhiveframework.provide("hrms.hr"); +xhiveframework.provide("xhiveerp.accounts.dimensions"); -frappe.ui.form.on('Expense Claim', { +xhiveframework.ui.form.on('Expense Claim', { onload: function(frm) { - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); + xhiveerp.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); }, company: function(frm) { - erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); + xhiveerp.accounts.dimensions.update_dimension(frm, frm.doctype); var expenses = frm.doc.expenses; for (var i = 0; i < expenses.length; i++) { var expense = expenses[i]; if (!expense.expense_type) { continue; } - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center", args: { "expense_claim_type": expense.expense_type, @@ -33,12 +33,12 @@ frappe.ui.form.on('Expense Claim', { }, }); -frappe.ui.form.on('Expense Claim Detail', { +xhiveframework.ui.form.on('Expense Claim Detail', { expense_type: function(frm, cdt, cdn) { var d = locals[cdt][cdn]; if (!frm.doc.company) { d.expense_type = ""; - frappe.msgprint(__("Please set the Company")); + xhiveframework.msgprint(__("Please set the Company")); this.frm.refresh_fields(); return; } @@ -46,7 +46,7 @@ frappe.ui.form.on('Expense Claim Detail', { if(!d.expense_type) { return; } - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center", args: { "expense_claim_type": d.expense_type, @@ -68,7 +68,7 @@ cur_frm.add_fetch('expense_type','description','description'); cur_frm.cscript.onload = function(doc) { if (doc.__islocal) { - cur_frm.set_value("posting_date", frappe.datetime.get_today()); + cur_frm.set_value("posting_date", xhiveframework.datetime.get_today()); cur_frm.cscript.clear_sanctioned(doc); } }; @@ -102,14 +102,14 @@ cur_frm.cscript.refresh = function(doc) { entry_reference_name = "Payment Entry Reference.reference_name"; } - if (cint(doc.total_amount_reimbursed) > 0 && frappe.model.can_read(entry_doctype)) { + if (cint(doc.total_amount_reimbursed) > 0 && xhiveframework.model.can_read(entry_doctype)) { cur_frm.add_custom_button(__('Bank Entries'), function() { - frappe.route_options = { + xhiveframework.route_options = { party_type: "Employee", party: doc.employee, company: doc.company }; - frappe.set_route("List", entry_doctype); + xhiveframework.set_route("List", entry_doctype); }, __("View")); } /* eslint-enable */ @@ -119,7 +119,7 @@ cur_frm.cscript.refresh = function(doc) { cur_frm.cscript.set_help = function(doc) { cur_frm.set_intro(""); - if(doc.__islocal && !in_list(frappe.user_roles, "HR User")) { + if(doc.__islocal && !in_list(xhiveframework.user_roles, "HR User")) { cur_frm.set_intro(__("Fill the form and save it")); } }; @@ -149,7 +149,7 @@ cur_frm.fields_dict['cost_center'].get_query = function(doc) { } }; -erpnext.expense_claim = { +xhiveerp.expense_claim = { set_title: function(frm) { if (!frm.doc.task) { frm.set_value("title", frm.doc.employee_name); @@ -160,7 +160,7 @@ erpnext.expense_claim = { } }; -frappe.ui.form.on("Expense Claim", { +xhiveframework.ui.form.on("Expense Claim", { setup: function(frm) { frm.add_fetch("company", "cost_center", "cost_center"); frm.add_fetch("company", "default_expense_claim_payable_account", "payable_account"); @@ -216,14 +216,14 @@ frappe.ui.form.on("Expense Claim", { frm.set_query("employee", function() { return { - query: "erpnext.controllers.queries.employee_query" + query: "xhiveerp.controllers.queries.employee_query" }; }); }, onload: function(frm) { if (frm.doc.docstatus == 0) { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.leave_application.leave_application.get_mandatory_approval", args: { doctype: frm.doc.doctype, @@ -242,7 +242,7 @@ frappe.ui.form.on("Expense Claim", { if(frm.doc.docstatus > 0 && frm.doc.approval_status !== "Rejected") { frm.add_custom_button(__('Accounting Ledger'), function() { - frappe.route_options = { + xhiveframework.route_options = { voucher_no: frm.doc.name, company: frm.doc.company, from_date: frm.doc.posting_date, @@ -250,14 +250,14 @@ frappe.ui.form.on("Expense Claim", { group_by: '', show_cancelled_entries: frm.doc.docstatus === 2 }; - frappe.set_route("query-report", "General Ledger"); + xhiveframework.set_route("query-report", "General Ledger"); }, __("View")); } if ( frm.doc.docstatus === 1 && frm.doc.status !== "Paid" - && frappe.model.can_create("Payment Entry") + && xhiveframework.model.can_create("Payment Entry") ) { frm.add_custom_button(__('Payment'), function() { frm.events.make_payment_entry(frm); }, __('Create')); @@ -293,15 +293,15 @@ frappe.ui.form.on("Expense Claim", { if(frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) { method = "hrms.hr.doctype.expense_claim.expense_claim.make_bank_entry"; } - return frappe.call({ + return xhiveframework.call({ method: method, args: { "dt": frm.doc.doctype, "dn": frm.doc.name }, callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); }, @@ -315,11 +315,11 @@ frappe.ui.form.on("Expense Claim", { }, employee_name: function(frm) { - erpnext.expense_claim.set_title(frm); + xhiveerp.expense_claim.set_title(frm); }, task: function(frm) { - erpnext.expense_claim.set_title(frm); + xhiveerp.expense_claim.set_title(frm); }, employee: function(frm) { @@ -343,7 +343,7 @@ frappe.ui.form.on("Expense Claim", { }, get_taxes: function(frm) { if(frm.doc.taxes) { - frappe.call({ + xhiveframework.call({ method: "calculate_taxes", doc: frm.doc, callback: () => { @@ -355,9 +355,9 @@ frappe.ui.form.on("Expense Claim", { }, get_advances: function(frm) { - frappe.model.clear_table(frm.doc, "advances"); + xhiveframework.model.clear_table(frm.doc, "advances"); if (frm.doc.employee) { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.expense_claim.expense_claim.get_advances", args: { employee: frm.doc.employee @@ -366,7 +366,7 @@ frappe.ui.form.on("Expense Claim", { if(r.message) { $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Expense Claim Advance", "advances"); + var row = xhiveframework.model.add_child(frm.doc, "Expense Claim Advance", "advances"); row.employee_advance = d.name; row.posting_date = d.posting_date; row.advance_account = d.advance_account; @@ -382,10 +382,10 @@ frappe.ui.form.on("Expense Claim", { } }); -frappe.ui.form.on("Expense Claim Detail", { +xhiveframework.ui.form.on("Expense Claim Detail", { amount: function(frm, cdt, cdn) { var child = locals[cdt][cdn]; - frappe.model.set_value(cdt, cdn, 'sanctioned_amount', child.amount); + xhiveframework.model.set_value(cdt, cdn, 'sanctioned_amount', child.amount); }, sanctioned_amount: function(frm, cdt, cdn) { @@ -395,20 +395,20 @@ frappe.ui.form.on("Expense Claim Detail", { }, cost_center: function(frm, cdt, cdn) { - erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "expenses", "cost_center"); + xhiveerp.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "expenses", "cost_center"); } }); -frappe.ui.form.on("Expense Claim Advance", { +xhiveframework.ui.form.on("Expense Claim Advance", { employee_advance: function(frm, cdt, cdn) { var child = locals[cdt][cdn]; if(!frm.doc.employee){ - frappe.msgprint(__('Select an employee to get the employee advance.')); + xhiveframework.msgprint(__('Select an employee to get the employee advance.')); frm.doc.advances = []; refresh_field("advances"); } else { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.expense_claim.expense_claim.get_advances", args: { employee: frm.doc.employee, @@ -431,7 +431,7 @@ frappe.ui.form.on("Expense Claim Advance", { } }); -frappe.ui.form.on("Expense Taxes and Charges", { +xhiveframework.ui.form.on("Expense Taxes and Charges", { account_head: function(frm, cdt, cdn) { var child = locals[cdt][cdn]; if(child.account_head && !child.description) { diff --git a/hrms/hr/doctype/expense_claim/expense_claim.py b/hrms/hr/doctype/expense_claim/expense_claim.py index 3978fd8..b4d4274 100644 --- a/hrms/hr/doctype/expense_claim/expense_claim.py +++ b/hrms/hr/doctype/expense_claim/expense_claim.py @@ -1,32 +1,32 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.mapper import get_mapped_doc -from frappe.query_builder.functions import Sum -from frappe.utils import cstr, flt, get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.mapper import get_mapped_doc +from xhiveframework.query_builder.functions import Sum +from xhiveframework.utils import cstr, flt, get_link_to_form -import erpnext -from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account -from erpnext.accounts.general_ledger import make_gl_entries -from erpnext.controllers.accounts_controller import AccountsController +import xhiveerp +from xhiveerp.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account +from xhiveerp.accounts.general_ledger import make_gl_entries +from xhiveerp.controllers.accounts_controller import AccountsController from hrms.hr.utils import set_employee_name, share_doc_with_approver, validate_active_employee -class InvalidExpenseApproverError(frappe.ValidationError): +class InvalidExpenseApproverError(xhiveframework.ValidationError): pass -class ExpenseApproverIdentityError(frappe.ValidationError): +class ExpenseApproverIdentityError(xhiveframework.ValidationError): pass class ExpenseClaim(AccountsController): def onload(self): - self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value( + self.get("__onload").make_payment_via_journal_entry = xhiveframework.db.get_single_value( "Accounts Settings", "make_payment_via_journal_entry" ) @@ -42,7 +42,7 @@ class ExpenseClaim(AccountsController): self.calculate_taxes() self.set_status() if self.task and not self.project: - self.project = frappe.db.get_value("Task", self.task, "project") + self.project = xhiveframework.db.get_value("Task", self.task, "project") def set_status(self, update=False): status = {"0": "Draft", "1": "Submitted", "2": "Cancelled"}[cstr(self.docstatus or 0)] @@ -85,17 +85,17 @@ class ExpenseClaim(AccountsController): def set_payable_account(self): if not self.payable_account and not self.is_paid: - self.payable_account = frappe.get_cached_value( + self.payable_account = xhiveframework.get_cached_value( "Company", self.company, "default_expense_claim_payable_account" ) def set_cost_center(self): if not self.cost_center: - self.cost_center = frappe.get_cached_value("Company", self.company, "cost_center") + self.cost_center = xhiveframework.get_cached_value("Company", self.company, "cost_center") def on_submit(self): if self.approval_status == "Draft": - frappe.throw(_("""Approval Status must be 'Approved' or 'Rejected'""")) + xhiveframework.throw(_("""Approval Status must be 'Approved' or 'Rejected'""")) self.update_task_and_project() self.make_gl_entries() @@ -116,15 +116,15 @@ class ExpenseClaim(AccountsController): def update_claimed_amount_in_employee_advance(self): for d in self.get("advances"): - frappe.get_doc("Employee Advance", d.employee_advance).update_claimed_amount() + xhiveframework.get_doc("Employee Advance", d.employee_advance).update_claimed_amount() def update_task_and_project(self): if self.task: - task = frappe.get_doc("Task", self.task) + task = xhiveframework.get_doc("Task", self.task) - ExpenseClaim = frappe.qb.DocType("Expense Claim") + ExpenseClaim = xhiveframework.qb.DocType("Expense Claim") task.total_expense_claim = ( - frappe.qb.from_(ExpenseClaim) + xhiveframework.qb.from_(ExpenseClaim) .select(Sum(ExpenseClaim.total_sanctioned_amount)) .where( (ExpenseClaim.docstatus == 1) @@ -135,7 +135,7 @@ class ExpenseClaim(AccountsController): task.save() elif self.project: - frappe.get_doc("Project", self.project).update_project() + xhiveframework.get_doc("Project", self.project).update_project() def make_gl_entries(self, cancel=False): if flt(self.total_sanctioned_amount) > 0: @@ -252,15 +252,15 @@ class ExpenseClaim(AccountsController): def validate_account_details(self): for data in self.expenses: if not data.cost_center: - frappe.throw( + xhiveframework.throw( _("Row {0}: {1} is required in the expenses table to book an expense claim.").format( - data.idx, frappe.bold("Cost Center") + data.idx, xhiveframework.bold("Cost Center") ) ) if self.is_paid: if not self.mode_of_payment: - frappe.throw(_("Mode of payment is required to make a payment").format(self.employee)) + xhiveframework.throw(_("Mode of payment is required to make a payment").format(self.employee)) def calculate_total_amount(self): self.total_claimed_amount = 0 @@ -272,7 +272,7 @@ class ExpenseClaim(AccountsController): self.total_claimed_amount += flt(d.amount) self.total_sanctioned_amount += flt(d.sanctioned_amount) - @frappe.whitelist() + @xhiveframework.whitelist() def calculate_taxes(self): self.total_taxes_and_charges = 0 for tax in self.taxes: @@ -291,7 +291,7 @@ class ExpenseClaim(AccountsController): def validate_advances(self): self.total_advance_amount = 0 for d in self.get("advances"): - ref_doc = frappe.db.get_value( + ref_doc = xhiveframework.db.get_value( "Employee Advance", d.employee_advance, ["posting_date", "paid_amount", "claimed_amount", "advance_account"], @@ -303,7 +303,7 @@ class ExpenseClaim(AccountsController): d.unclaimed_amount = flt(ref_doc.paid_amount) - flt(ref_doc.claimed_amount) if d.allocated_amount and flt(d.allocated_amount) > flt(d.unclaimed_amount): - frappe.throw( + xhiveframework.throw( _("Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2}").format( d.idx, d.allocated_amount, d.unclaimed_amount ) @@ -319,12 +319,12 @@ class ExpenseClaim(AccountsController): ) if flt(self.total_advance_amount, precision) > amount_with_taxes: - frappe.throw(_("Total advance amount cannot be greater than total sanctioned amount")) + xhiveframework.throw(_("Total advance amount cannot be greater than total sanctioned amount")) def validate_sanctioned_amount(self): for d in self.get("expenses"): if flt(d.sanctioned_amount) > flt(d.amount): - frappe.throw( + xhiveframework.throw( _("Sanctioned Amount cannot be greater than Claim Amount in Row {0}.").format(d.idx) ) @@ -340,7 +340,7 @@ def update_reimbursed_amount(doc): total_amount_reimbursed = get_total_reimbursed_amount(doc) doc.total_amount_reimbursed = total_amount_reimbursed - frappe.db.set_value("Expense Claim", doc.name, "total_amount_reimbursed", total_amount_reimbursed) + xhiveframework.db.set_value("Expense Claim", doc.name, "total_amount_reimbursed", total_amount_reimbursed) doc.set_status(update=True) @@ -350,13 +350,13 @@ def get_total_reimbursed_amount(doc): # No need to check for cancelled state here as it will anyways update status as cancelled return doc.grand_total else: - amount_via_jv = frappe.db.get_value( + amount_via_jv = xhiveframework.db.get_value( "Journal Entry Account", {"reference_name": doc.name, "docstatus": 1}, "sum(debit_in_account_currency - credit_in_account_currency)", ) - amount_via_payment_entry = frappe.db.get_value( + amount_via_payment_entry = xhiveframework.db.get_value( "Payment Entry Reference", {"reference_name": doc.name, "docstatus": 1}, "sum(allocated_amount)" ) @@ -365,7 +365,7 @@ def get_total_reimbursed_amount(doc): def get_outstanding_amount_for_claim(claim): if isinstance(claim, str): - claim = frappe.db.get_value( + claim = xhiveframework.db.get_value( "Expense Claim", claim, ( @@ -387,18 +387,18 @@ def get_outstanding_amount_for_claim(claim): return outstanding_amt -@frappe.whitelist() +@xhiveframework.whitelist() def make_bank_entry(dt, dn): - from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account + from xhiveerp.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account - expense_claim = frappe.get_doc(dt, dn) + expense_claim = xhiveframework.get_doc(dt, dn) default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Bank") if not default_bank_cash_account: default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Cash") payable_amount = get_outstanding_amount_for_claim(expense_claim) - je = frappe.new_doc("Journal Entry") + je = xhiveframework.new_doc("Journal Entry") je.voucher_type = "Bank Entry" je.company = expense_claim.company je.remark = "Payment against Expense Claim: " + dn @@ -411,7 +411,7 @@ def make_bank_entry(dt, dn): "reference_type": "Expense Claim", "party_type": "Employee", "party": expense_claim.employee, - "cost_center": erpnext.get_default_cost_center(expense_claim.company), + "cost_center": xhiveerp.get_default_cost_center(expense_claim.company), "reference_name": expense_claim.name, }, ) @@ -423,7 +423,7 @@ def make_bank_entry(dt, dn): "credit_in_account_currency": payable_amount, "balance": default_bank_cash_account.balance, "account_currency": default_bank_cash_account.account_currency, - "cost_center": erpnext.get_default_cost_center(expense_claim.company), + "cost_center": xhiveerp.get_default_cost_center(expense_claim.company), "account_type": default_bank_cash_account.account_type, }, ) @@ -431,34 +431,34 @@ def make_bank_entry(dt, dn): return je.as_dict() -@frappe.whitelist() +@xhiveframework.whitelist() def get_expense_claim_account_and_cost_center(expense_claim_type, company): data = get_expense_claim_account(expense_claim_type, company) - cost_center = erpnext.get_default_cost_center(company) + cost_center = xhiveerp.get_default_cost_center(company) return {"account": data.get("account"), "cost_center": cost_center} -@frappe.whitelist() +@xhiveframework.whitelist() def get_expense_claim_account(expense_claim_type, company): - account = frappe.db.get_value( + account = xhiveframework.db.get_value( "Expense Claim Account", {"parent": expense_claim_type, "company": company}, "default_account" ) if not account: - frappe.throw( + xhiveframework.throw( _("Set the default account for the {0} {1}").format( - frappe.bold("Expense Claim Type"), get_link_to_form("Expense Claim Type", expense_claim_type) + xhiveframework.bold("Expense Claim Type"), get_link_to_form("Expense Claim Type", expense_claim_type) ) ) return {"account": account} -@frappe.whitelist() +@xhiveframework.whitelist() def get_advances(employee, advance_id=None): - advance = frappe.qb.DocType("Employee Advance") + advance = xhiveframework.qb.DocType("Employee Advance") - query = frappe.qb.from_(advance).select( + query = xhiveframework.qb.from_(advance).select( advance.name, advance.posting_date, advance.paid_amount, @@ -479,16 +479,16 @@ def get_advances(employee, advance_id=None): return query.run(as_dict=True) -@frappe.whitelist() +@xhiveframework.whitelist() def get_expense_claim( employee_name, company, employee_advance_name, posting_date, paid_amount, claimed_amount ): - default_payable_account = frappe.get_cached_value( + default_payable_account = xhiveframework.get_cached_value( "Company", company, "default_expense_claim_payable_account" ) - default_cost_center = frappe.get_cached_value("Company", company, "cost_center") + default_cost_center = xhiveframework.get_cached_value("Company", company, "cost_center") - expense_claim = frappe.new_doc("Expense Claim") + expense_claim = xhiveframework.new_doc("Expense Claim") expense_claim.company = company expense_claim.employee = employee_name expense_claim.payable_account = default_payable_account @@ -521,7 +521,7 @@ def update_payment_for_expense_claim(doc, method=None): for d in doc.get(payment_table): if d.get(doctype_field) == "Expense Claim" and d.reference_name: - expense_claim = frappe.get_doc("Expense Claim", d.reference_name) + expense_claim = xhiveframework.get_doc("Expense Claim", d.reference_name) if doc.docstatus == 2: update_reimbursed_amount(expense_claim) else: @@ -534,14 +534,14 @@ def validate_expense_claim_in_jv(doc, method=None): if d.reference_type == "Expense Claim": outstanding_amt = get_outstanding_amount_for_claim(d.reference_name) if d.debit > outstanding_amt: - frappe.throw( + xhiveframework.throw( _( "Row No {0}: Amount cannot be greater than the Outstanding Amount against Expense Claim {1}. Outstanding Amount is {2}" ).format(d.idx, d.reference_name, outstanding_amt) ) -@frappe.whitelist() +@xhiveframework.whitelist() def make_expense_claim_for_delivery_trip(source_name, target_doc=None): doc = get_mapped_doc( "Delivery Trip", diff --git a/hrms/hr/doctype/expense_claim/expense_claim_dashboard.py b/hrms/hr/doctype/expense_claim/expense_claim_dashboard.py index 8b1acc6..8360e7f 100644 --- a/hrms/hr/doctype/expense_claim/expense_claim_dashboard.py +++ b/hrms/hr/doctype/expense_claim/expense_claim_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/expense_claim/expense_claim_list.js b/hrms/hr/doctype/expense_claim/expense_claim_list.js index 9bafc18..d275583 100644 --- a/hrms/hr/doctype/expense_claim/expense_claim_list.js +++ b/hrms/hr/doctype/expense_claim/expense_claim_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Expense Claim'] = { +xhiveframework.listview_settings['Expense Claim'] = { add_fields: ["total_claimed_amount", "docstatus", "company"], get_indicator: function(doc) { if(doc.status == "Paid") { diff --git a/hrms/hr/doctype/expense_claim/test_expense_claim.py b/hrms/hr/doctype/expense_claim/test_expense_claim.py index b7d4b2f..b377312 100644 --- a/hrms/hr/doctype/expense_claim/test_expense_claim.py +++ b/hrms/hr/doctype/expense_claim/test_expense_claim.py @@ -1,15 +1,15 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import flt, nowdate, random_string +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import flt, nowdate, random_string -from erpnext.accounts.doctype.account.test_account import create_account -from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.accounts.doctype.account.test_account import create_account +from xhiveerp.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.expense_claim.expense_claim import ( make_bank_entry, @@ -20,10 +20,10 @@ test_dependencies = ["Employee"] company_name = "_Test Company 3" -class TestExpenseClaim(FrappeTestCase): +class TestExpenseClaim(XhiveframeworkTestCase): def setUp(self): - if not frappe.db.get_value("Cost Center", {"company": company_name}): - frappe.get_doc( + if not xhiveframework.db.get_value("Cost Center", {"company": company_name}): + xhiveframework.get_doc( { "doctype": "Cost Center", "cost_center_name": "_Test Cost Center 3", @@ -34,14 +34,14 @@ class TestExpenseClaim(FrappeTestCase): ).insert() def test_total_expense_claim_for_project(self): - frappe.db.sql("""delete from `tabTask`""") - frappe.db.sql("""delete from `tabProject`""") - frappe.db.sql("update `tabExpense Claim` set project = '', task = ''") + xhiveframework.db.sql("""delete from `tabTask`""") + xhiveframework.db.sql("""delete from `tabProject`""") + xhiveframework.db.sql("update `tabExpense Claim` set project = '', task = ''") - project = frappe.get_doc({"project_name": "_Test Project 1", "doctype": "Project"}) + project = xhiveframework.get_doc({"project_name": "_Test Project 1", "doctype": "Project"}) project.save() - task = frappe.get_doc( + task = xhiveframework.get_doc( dict(doctype="Task", subject="_Test Project Task 1", status="Open", project=project.name) ).insert() @@ -52,20 +52,20 @@ class TestExpenseClaim(FrappeTestCase): payable_account, 300, 200, company_name, "Travel Expenses - _TC3", project.name, task_name ) - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200) + self.assertEqual(xhiveframework.db.get_value("Task", task_name, "total_expense_claim"), 200) + self.assertEqual(xhiveframework.db.get_value("Project", project.name, "total_expense_claim"), 200) expense_claim2 = make_expense_claim( payable_account, 600, 500, company_name, "Travel Expenses - _TC3", project.name, task_name ) - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 700) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 700) + self.assertEqual(xhiveframework.db.get_value("Task", task_name, "total_expense_claim"), 700) + self.assertEqual(xhiveframework.db.get_value("Project", project.name, "total_expense_claim"), 700) expense_claim2.cancel() - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200) + self.assertEqual(xhiveframework.db.get_value("Task", task_name, "total_expense_claim"), 200) + self.assertEqual(xhiveframework.db.get_value("Project", project.name, "total_expense_claim"), 200) def test_expense_claim_status_as_payment_from_journal_entry(self): # Via Journal Entry @@ -89,7 +89,7 @@ class TestExpenseClaim(FrappeTestCase): self.assertEqual(claim.status, "Submitted") # no gl entries created - gl_entry = frappe.get_all( + gl_entry = xhiveframework.get_all( "GL Entry", {"voucher_type": "Expense Claim", "voucher_no": claim.name} ) self.assertEqual(len(gl_entry), 0) @@ -115,7 +115,7 @@ class TestExpenseClaim(FrappeTestCase): # Allocation via Payment Reconciliation Tool for mutiple employees using journal entry payable_account = get_payable_account(company_name) # Make employee - employee = frappe.db.get_value( + employee = xhiveframework.db.get_value( "Employee", {"status": "Active", "company": company_name, "first_name": "test_employee1@expenseclaim.com"}, "name", @@ -175,7 +175,7 @@ class TestExpenseClaim(FrappeTestCase): make_payment_entry, ) - frappe.db.delete("Employee Advance") + xhiveframework.db.delete("Employee Advance") payable_account = get_payable_account("_Test Company") claim = make_expense_claim( @@ -201,7 +201,7 @@ class TestExpenseClaim(FrappeTestCase): make_payment_entry, ) - frappe.db.delete("Employee Advance") + xhiveframework.db.delete("Employee Advance") payable_account = get_payable_account("_Test Company") taxes = generate_taxes("_Test Company") @@ -237,7 +237,7 @@ class TestExpenseClaim(FrappeTestCase): make_payment_entry as make_advance_payment, ) - frappe.db.delete("Employee Advance") + xhiveframework.db.delete("Employee Advance") payable_account = get_payable_account("_Test Company") claim = make_expense_claim( @@ -277,7 +277,7 @@ class TestExpenseClaim(FrappeTestCase): ) expense_claim.submit() - gl_entries = frappe.db.sql( + gl_entries = xhiveframework.db.sql( """select account, debit, credit from `tabGL Entry` where voucher_type='Expense Claim' and voucher_no=%s order by account asc""", @@ -303,7 +303,7 @@ class TestExpenseClaim(FrappeTestCase): def test_rejected_expense_claim(self): payable_account = get_payable_account(company_name) - expense_claim = frappe.get_doc( + expense_claim = xhiveframework.get_doc( { "doctype": "Expense Claim", "employee": "_T-Employee-00001", @@ -324,7 +324,7 @@ class TestExpenseClaim(FrappeTestCase): self.assertEqual(expense_claim.status, "Rejected") self.assertEqual(expense_claim.total_sanctioned_amount, 0.0) - gl_entry = frappe.get_all( + gl_entry = xhiveframework.get_all( "GL Entry", {"voucher_type": "Expense Claim", "voucher_no": expense_claim.name} ) self.assertEqual(len(gl_entry), 0) @@ -340,23 +340,23 @@ class TestExpenseClaim(FrappeTestCase): ) expense_claim.expense_approver = user expense_claim.save() - self.assertTrue(expense_claim.name in frappe.share.get_shared("Expense Claim", user)) + self.assertTrue(expense_claim.name in xhiveframework.share.get_shared("Expense Claim", user)) # check shared doc revoked expense_claim.reload() expense_claim.expense_approver = "test@example.com" expense_claim.save() - self.assertTrue(expense_claim.name not in frappe.share.get_shared("Expense Claim", user)) + self.assertTrue(expense_claim.name not in xhiveframework.share.get_shared("Expense Claim", user)) expense_claim.reload() expense_claim.expense_approver = user expense_claim.save() - frappe.set_user(user) + xhiveframework.set_user(user) expense_claim.reload() expense_claim.status = "Approved" expense_claim.submit() - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") def test_multiple_payment_entries_against_expense(self): # Creating expense claim @@ -392,13 +392,13 @@ class TestExpenseClaim(FrappeTestCase): self.assertEqual(total_amount_reimbursed, 5500) def test_expense_claim_against_delivery_trip(self): - from erpnext.stock.doctype.delivery_trip.test_delivery_trip import ( + from xhiveerp.stock.doctype.delivery_trip.test_delivery_trip import ( create_address, create_delivery_trip, create_driver, create_vehicle, ) - from erpnext.tests.utils import create_test_contact_and_address + from xhiveerp.tests.utils import create_test_contact_and_address driver = create_driver() create_vehicle() @@ -429,12 +429,12 @@ class TestExpenseClaim(FrappeTestCase): def get_payable_account(company): - return frappe.get_cached_value("Company", company, "default_payable_account") + return xhiveframework.get_cached_value("Company", company, "default_payable_account") def generate_taxes(company=None): company = company or company_name - parent_account = frappe.db.get_value( + parent_account = xhiveframework.db.get_value( "Account", filters={"account_name": "Duties and Taxes", "company": company} ) account = create_account( @@ -464,11 +464,11 @@ def make_expense_claim( ): if not employee: - employee = frappe.db.get_value("Employee", {"status": "Active", "company": company}) + employee = xhiveframework.db.get_value("Employee", {"status": "Active", "company": company}) if not employee: employee = make_employee("test_employee@expenseclaim.com", company=company) - currency, cost_center = frappe.db.get_value( + currency, cost_center = xhiveframework.db.get_value( "Company", company, ["default_currency", "cost_center"] ) expense_claim = { @@ -492,7 +492,7 @@ def make_expense_claim( if taxes: expense_claim.update(taxes) - expense_claim = frappe.get_doc(expense_claim) + expense_claim = xhiveframework.get_doc(expense_claim) if project: expense_claim.project = project @@ -507,10 +507,10 @@ def make_expense_claim( def get_outstanding_and_total_reimbursed_amounts(expense_claim): outstanding_amount = flt( - frappe.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount") - ) - flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")) + xhiveframework.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount") + ) - flt(xhiveframework.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")) total_amount_reimbursed = flt( - frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed") + xhiveframework.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed") ) return outstanding_amount, total_amount_reimbursed @@ -533,7 +533,7 @@ def make_payment_entry(expense_claim, payable_account, amt): def make_journal_entry(expense_claim, do_not_submit=False): je_dict = make_bank_entry("Expense Claim", expense_claim.name) - je = frappe.get_doc(je_dict) + je = xhiveframework.get_doc(je_dict) je.posting_date = nowdate() je.cheque_no = random_string(5) je.cheque_date = nowdate() @@ -562,7 +562,7 @@ def _make_payment_entry(expense_claim): def create_payment_reconciliation(company, employee, payable_account): - pr = frappe.new_doc("Payment Reconciliation") + pr = xhiveframework.new_doc("Payment Reconciliation") pr.company = company pr.party_type = "Employee" pr.party = employee @@ -577,5 +577,5 @@ def allocate_using_payment_reconciliation(expense_claim, employee, journal_entry invoices = [x.as_dict() for x in pr.get("invoices") if x.invoice_number == expense_claim.name] payments = [x.as_dict() for x in pr.get("payments") if x.reference_name == journal_entry.name] - pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.allocate_entries(xhiveframework._dict({"invoices": invoices, "payments": payments})) pr.reconcile() diff --git a/hrms/hr/doctype/expense_claim_account/expense_claim_account.py b/hrms/hr/doctype/expense_claim_account/expense_claim_account.py index 0d46a22..b7ad56f 100644 --- a/hrms/hr/doctype/expense_claim_account/expense_claim_account.py +++ b/hrms/hr/doctype/expense_claim_account/expense_claim_account.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class ExpenseClaimAccount(Document): diff --git a/hrms/hr/doctype/expense_claim_advance/expense_claim_advance.py b/hrms/hr/doctype/expense_claim_advance/expense_claim_advance.py index 68b2963..d83fed5 100644 --- a/hrms/hr/doctype/expense_claim_advance/expense_claim_advance.py +++ b/hrms/hr/doctype/expense_claim_advance/expense_claim_advance.py @@ -1,8 +1,8 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2017, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class ExpenseClaimAdvance(Document): diff --git a/hrms/hr/doctype/expense_claim_detail/expense_claim_detail.py b/hrms/hr/doctype/expense_claim_detail/expense_claim_detail.py index f58f128..690aa91 100644 --- a/hrms/hr/doctype/expense_claim_detail/expense_claim_detail.py +++ b/hrms/hr/doctype/expense_claim_detail/expense_claim_detail.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class ExpenseClaimDetail(Document): diff --git a/hrms/hr/doctype/expense_claim_type/expense_claim_type.js b/hrms/hr/doctype/expense_claim_type/expense_claim_type.js index d007e1a..15d93a1 100644 --- a/hrms/hr/doctype/expense_claim_type/expense_claim_type.js +++ b/hrms/hr/doctype/expense_claim_type/expense_claim_type.js @@ -1,7 +1,7 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.ui.form.on("Expense Claim Type", { +xhiveframework.ui.form.on("Expense Claim Type", { refresh: function(frm) { frm.fields_dict["accounts"].grid.get_field("default_account").get_query = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; diff --git a/hrms/hr/doctype/expense_claim_type/expense_claim_type.py b/hrms/hr/doctype/expense_claim_type/expense_claim_type.py index 6d29f7d..ddaf08c 100644 --- a/hrms/hr/doctype/expense_claim_type/expense_claim_type.py +++ b/hrms/hr/doctype/expense_claim_type/expense_claim_type.py @@ -1,10 +1,10 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document class ExpenseClaimType(Document): @@ -19,12 +19,12 @@ class ExpenseClaimType(Document): accounts_list.append(entry.company) if len(accounts_list) != len(set(accounts_list)): - frappe.throw(_("Same Company is entered more than once")) + xhiveframework.throw(_("Same Company is entered more than once")) def validate_accounts(self): for entry in self.accounts: """Error when Company of Ledger account doesn't match with Company Selected""" - if frappe.db.get_value("Account", entry.default_account, "company") != entry.company: - frappe.throw( + if xhiveframework.db.get_value("Account", entry.default_account, "company") != entry.company: + xhiveframework.throw( _("Account {0} does not match with Company {1}").format(entry.default_account, entry.company) ) diff --git a/hrms/hr/doctype/expense_claim_type/test_expense_claim_type.py b/hrms/hr/doctype/expense_claim_type/test_expense_claim_type.py index 62348e2..9c1db37 100644 --- a/hrms/hr/doctype/expense_claim_type/test_expense_claim_type.py +++ b/hrms/hr/doctype/expense_claim_type/test_expense_claim_type.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -# test_records = frappe.get_test_records('Expense Claim Type') +# test_records = xhiveframework.get_test_records('Expense Claim Type') class TestExpenseClaimType(unittest.TestCase): diff --git a/hrms/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py b/hrms/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py index a28ef57..7d68294 100644 --- a/hrms/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py +++ b/hrms/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class ExpenseTaxesandCharges(Document): diff --git a/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.js b/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.js index 1965b46..3a6cf6d 100644 --- a/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.js +++ b/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Full and Final Asset', { +xhiveframework.ui.form.on('Full and Final Asset', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.py b/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.py index 661af7d..fbb53d3 100644 --- a/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.py +++ b/hrms/hr/doctype/full_and_final_asset/full_and_final_asset.py @@ -1,8 +1,8 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class FullandFinalAsset(Document): diff --git a/hrms/hr/doctype/full_and_final_asset/test_full_and_final_asset.py b/hrms/hr/doctype/full_and_final_asset/test_full_and_final_asset.py index 9afe0f2..6dd743f 100644 --- a/hrms/hr/doctype/full_and_final_asset/test_full_and_final_asset.py +++ b/hrms/hr/doctype/full_and_final_asset/test_full_and_final_asset.py @@ -1,7 +1,7 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py b/hrms/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py index 4b239ab..53b0436 100644 --- a/hrms/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py +++ b/hrms/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py @@ -1,8 +1,8 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class FullandFinalOutstandingStatement(Document): diff --git a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.js b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.js index 7646479..6fce34b 100644 --- a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.js +++ b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Full and Final Statement', { +xhiveframework.ui.form.on('Full and Final Statement', { refresh: function(frm) { frm.events.set_queries(frm, "payables"); frm.events.set_queries(frm, "receivables"); @@ -28,18 +28,18 @@ frappe.ui.form.on('Full and Final Statement', { let filters = {}; frm.set_query('reference_document', type, function(doc, cdt, cdn) { - let fnf_doc = frappe.get_doc(cdt, cdn); + let fnf_doc = xhiveframework.get_doc(cdt, cdn); - frappe.model.with_doctype(fnf_doc.reference_document_type, function() { - if (frappe.model.is_tree(fnf_doc.reference_document_type)) { + xhiveframework.model.with_doctype(fnf_doc.reference_document_type, function() { + if (xhiveframework.model.is_tree(fnf_doc.reference_document_type)) { filters['is_group'] = 0; } - if (frappe.meta.has_field(fnf_doc.reference_document_type, 'company')) { + if (xhiveframework.meta.has_field(fnf_doc.reference_document_type, 'company')) { filters['company'] = frm.doc.company; } - if (frappe.meta.has_field(fnf_doc.reference_document_type, 'employee')) { + if (xhiveframework.meta.has_field(fnf_doc.reference_document_type, 'employee')) { filters['employee'] = frm.doc.employee; } }); @@ -56,7 +56,7 @@ frappe.ui.form.on('Full and Final Statement', { get_outstanding_statements: function(frm) { if (frm.doc.employee) { - frappe.call({ + xhiveframework.call({ method: "get_outstanding_statements", doc: frm.doc, callback: function() { @@ -67,22 +67,22 @@ frappe.ui.form.on('Full and Final Statement', { }, create_journal_entry: function(frm) { - frappe.call({ + xhiveframework.call({ method: "create_journal_entry", doc: frm.doc, callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); } }); -frappe.ui.form.on("Full and Final Outstanding Statement", { +xhiveframework.ui.form.on("Full and Final Outstanding Statement", { reference_document: function(frm, cdt, cdn) { var child = locals[cdt][cdn]; if (child.reference_document_type && child.reference_document) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.full_and_final_statement.full_and_final_statement.get_account_and_amount", args: { ref_doctype: child.reference_document_type, @@ -90,8 +90,8 @@ frappe.ui.form.on("Full and Final Outstanding Statement", { }, callback: function(r) { if (r.message) { - frappe.model.set_value(cdt, cdn, "account", r.message[0]); - frappe.model.set_value(cdt, cdn, "amount", r.message[1]); + xhiveframework.model.set_value(cdt, cdn, "account", r.message[0]); + xhiveframework.model.set_value(cdt, cdn, "amount", r.message[1]); } } }); diff --git a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py index f5d8fa5..9d1ea19 100644 --- a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py +++ b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py @@ -1,10 +1,10 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, get_link_to_form, today +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import flt, get_link_to_form, today class FullandFinalStatement(Document): @@ -18,14 +18,14 @@ class FullandFinalStatement(Document): def validate_settlement(self, component_type): for data in self.get(component_type, []): if data.status == "Unsettled": - frappe.throw(_("Settle all Payables and Receivables before submission")) + xhiveframework.throw(_("Settle all Payables and Receivables before submission")) def validate_asset(self): for data in self.assets_allocated: if data.status == "Owned": - frappe.throw(_("All allocated assets should be returned before submission")) + xhiveframework.throw(_("All allocated assets should be returned before submission")) - @frappe.whitelist() + @xhiveframework.whitelist() def get_outstanding_statements(self): if self.relieving_date: if not len(self.get("payables", [])): @@ -39,7 +39,7 @@ class FullandFinalStatement(Document): for data in self.get_assets_movement(): self.append("assets_allocated", data) else: - frappe.throw( + xhiveframework.throw( _("Set Relieving Date for Employee: {0}").format(get_link_to_form("Employee", self.employee)) ) @@ -70,7 +70,7 @@ class FullandFinalStatement(Document): ] def get_assets_movement(self): - asset_movements = frappe.get_all( + asset_movements = xhiveframework.get_all( "Asset Movement Item", filters={"docstatus": 1}, fields=["asset", "from_employee", "to_employee", "parent", "asset_name"], @@ -96,16 +96,16 @@ class FullandFinalStatement(Document): { "reference": movement.parent, "asset_name": movement.asset_name, - "date": frappe.db.get_value("Asset Movement", movement.parent, "transaction_date"), + "date": xhiveframework.db.get_value("Asset Movement", movement.parent, "transaction_date"), "status": "Owned", } ) return data - @frappe.whitelist() + @xhiveframework.whitelist() def create_journal_entry(self): - precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency") - jv = frappe.new_doc("Journal Entry") + precision = xhiveframework.get_precision("Journal Entry Account", "debit_in_account_currency") + jv = xhiveframework.new_doc("Journal Entry") jv.company = self.company jv.voucher_type = "Bank Entry" jv.posting_date = today() @@ -148,31 +148,31 @@ class FullandFinalStatement(Document): return jv -@frappe.whitelist() +@xhiveframework.whitelist() def get_account_and_amount(ref_doctype, ref_document): if not ref_doctype or not ref_document: return None if ref_doctype == "Salary Slip": - salary_details = frappe.db.get_value( + salary_details = xhiveframework.db.get_value( "Salary Slip", ref_document, ["payroll_entry", "net_pay"], as_dict=1 ) amount = salary_details.net_pay payable_account = ( - frappe.db.get_value("Payroll Entry", salary_details.payroll_entry, "payroll_payable_account") + xhiveframework.db.get_value("Payroll Entry", salary_details.payroll_entry, "payroll_payable_account") if salary_details.payroll_entry else None ) return [payable_account, amount] if ref_doctype == "Gratuity": - payable_account, amount = frappe.db.get_value( + payable_account, amount = xhiveframework.db.get_value( "Gratuity", ref_document, ["payable_account", "amount"] ) return [payable_account, amount] if ref_doctype == "Expense Claim": - details = frappe.db.get_value( + details = xhiveframework.db.get_value( "Expense Claim", ref_document, ["payable_account", "grand_total", "total_amount_reimbursed", "total_advance_amount"], @@ -183,7 +183,7 @@ def get_account_and_amount(ref_doctype, ref_document): return [payable_account, amount] if ref_doctype == "Loan": - details = frappe.db.get_value( + details = xhiveframework.db.get_value( "Loan", ref_document, ["payment_account", "total_payment", "total_amount_paid"], as_dict=1 ) payment_account = details.payment_account @@ -191,7 +191,7 @@ def get_account_and_amount(ref_doctype, ref_document): return [payment_account, amount] if ref_doctype == "Employee Advance": - details = frappe.db.get_value( + details = xhiveframework.db.get_value( "Employee Advance", ref_document, ["advance_account", "paid_amount", "claimed_amount", "return_amount"], @@ -208,4 +208,4 @@ def update_full_and_final_statement_status(doc, method=None): for entry in doc.accounts: if entry.reference_type == "Full and Final Statement": - frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", status) + xhiveframework.db.set_value("Full and Final Statement", entry.reference_name, "status", status) diff --git a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement_list.js b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement_list.js index 4aedec7..6c80bf1 100644 --- a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement_list.js +++ b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Full and Final Statement"] = { +xhiveframework.listview_settings["Full and Final Statement"] = { get_indicator: function(doc) { var colors = { "Draft": "red", diff --git a/hrms/hr/doctype/full_and_final_statement/test_full_and_final_statement.py b/hrms/hr/doctype/full_and_final_statement/test_full_and_final_statement.py index 2e2f0d4..8c0348e 100644 --- a/hrms/hr/doctype/full_and_final_statement/test_full_and_final_statement.py +++ b/hrms/hr/doctype/full_and_final_statement/test_full_and_final_statement.py @@ -1,14 +1,14 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, today +import xhiveframework +from xhiveframework.utils import add_days, today -from erpnext.assets.doctype.asset.test_asset import create_asset_data -from erpnext.setup.doctype.employee.test_employee import make_employee -from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt +from xhiveerp.assets.doctype.asset.test_asset import create_asset_data +from xhiveerp.setup.doctype.employee.test_employee import make_employee +from xhiveerp.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt class TestFullandFinalStatement(unittest.TestCase): @@ -16,14 +16,14 @@ class TestFullandFinalStatement(unittest.TestCase): create_asset_data() def tearDown(self): - frappe.db.sql("Delete from `tabFull and Final Statement`") - frappe.db.sql("Delete from `tabAsset`") - frappe.db.sql("Delete from `tabAsset Movement`") + xhiveframework.db.sql("Delete from `tabFull and Final Statement`") + xhiveframework.db.sql("Delete from `tabAsset`") + xhiveframework.db.sql("Delete from `tabAsset Movement`") def test_check_bootstraped_data_asset_movement_and_jv_creation(self): employee = make_employee("test_fnf@example.com", company="_Test Company") movement = create_asset_movement(employee) - frappe.db.set_value("Employee", employee, "relieving_date", add_days(today(), 30)) + xhiveframework.db.set_value("Employee", employee, "relieving_date", add_days(today(), 30)) fnf = create_full_and_final_statement(employee) payables_bootstraped_component = [ @@ -47,7 +47,7 @@ class TestFullandFinalStatement(unittest.TestCase): def create_full_and_final_statement(employee): - fnf = frappe.new_doc("Full and Final Statement") + fnf = xhiveframework.new_doc("Full and Final Statement") fnf.employee = employee fnf.transaction_date = today() fnf.save() @@ -56,7 +56,7 @@ def create_full_and_final_statement(employee): def create_asset_movement(employee): asset_name = create_asset() - movement = frappe.new_doc("Asset Movement") + movement = xhiveframework.new_doc("Asset Movement") movement.company = "_Test Company" movement.purpose = "Issue" movement.transaction_date = today() @@ -73,8 +73,8 @@ def create_asset(): item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location" ) - asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") - asset = frappe.get_doc("Asset", asset_name) + asset_name = xhiveframework.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") + asset = xhiveframework.get_doc("Asset", asset_name) asset.calculate_depreciation = 0 asset.available_for_use_date = today() asset.submit() diff --git a/hrms/hr/doctype/goal/goal.js b/hrms/hr/doctype/goal/goal.js index ee41772..65f68d6 100644 --- a/hrms/hr/doctype/goal/goal.js +++ b/hrms/hr/doctype/goal/goal.js @@ -1,7 +1,7 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2022, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Goal", { +xhiveframework.ui.form.on("Goal", { refresh(frm) { frm.trigger("set_filters"); frm.trigger("add_custom_buttons"); @@ -66,7 +66,7 @@ frappe.ui.form.on("Goal", { if (!frm.doc.appraisal_cycle) { frm.set_value("kra", ""); - frappe.msgprint({ + xhiveframework.msgprint({ message: __("Please select the Appraisal Cycle first."), title: __("Mandatory") }); @@ -80,11 +80,11 @@ frappe.ui.form.on("Goal", { msg += "
"; msg += __("Do you still want to proceed?"); - frappe.confirm( + xhiveframework.confirm( msg, () => {}, () => { - frappe.db.get_value("Goal", frm.doc.name, "kra", (r) => frm.set_value("kra", r.kra)); + xhiveframework.db.get_value("Goal", frm.doc.name, "kra", (r) => frm.set_value("kra", r.kra)); } ); }, diff --git a/hrms/hr/doctype/goal/goal.py b/hrms/hr/doctype/goal/goal.py index 858c045..e2129ac 100644 --- a/hrms/hr/doctype/goal/goal.py +++ b/hrms/hr/doctype/goal/goal.py @@ -1,13 +1,13 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt from pypika import CustomFunction -import frappe -from frappe import _ -from frappe.query_builder.functions import Avg -from frappe.utils import cint, flt -from frappe.utils.nestedset import NestedSet +import xhiveframework +from xhiveframework import _ +from xhiveframework.query_builder.functions import Avg +from xhiveframework.utils import cint, flt +from xhiveframework.utils.nestedset import NestedSet from hrms.hr.doctype.appraisal_cycle.appraisal_cycle import validate_active_appraisal_cycle from hrms.hr.utils import validate_active_employee @@ -56,29 +56,29 @@ class Goal(NestedSet): if not self.parent_goal: return - parent_details = frappe.db.get_value( + parent_details = xhiveframework.db.get_value( "Goal", self.parent_goal, ["employee", "kra", "appraisal_cycle"], as_dict=True ) if not parent_details: return if self.employee != parent_details.employee: - frappe.throw( + xhiveframework.throw( _("Goal should be owned by the same employee as its parent goal."), title=_("Not Allowed") ) if self.kra != parent_details.kra: - frappe.throw( + xhiveframework.throw( _("Goal should be aligned with the same KRA as its parent goal."), title=_("Not Allowed") ) if self.appraisal_cycle != parent_details.appraisal_cycle: - frappe.throw( + xhiveframework.throw( _("Goal should belong to the same Appraisal Cycle as its parent goal."), title=_("Not Allowed"), ) def validate_progress(self): if flt(self.progress) > 100: - frappe.throw(_("Goal progress percentage cannot be more than 100.")) + xhiveframework.throw(_("Goal progress percentage cannot be more than 100.")) def set_status(self, status=None): if self.status != "Archived": @@ -92,10 +92,10 @@ class Goal(NestedSet): def update_kra_in_child_goals(self, doc_before_save): """Aligns children's KRA to parent goal's KRA if parent goal's KRA is changed""" if doc_before_save.kra != self.kra and self.is_group: - Goal = frappe.qb.DocType("Goal") - (frappe.qb.update(Goal).set(Goal.kra, self.kra).where((Goal.parent_goal == self.name))).run() + Goal = xhiveframework.qb.DocType("Goal") + (xhiveframework.qb.update(Goal).set(Goal.kra, self.kra).where((Goal.parent_goal == self.name))).run() - frappe.msgprint(_("KRA updated for all child goals."), alert=True, indicator="green") + xhiveframework.msgprint(_("KRA updated for all child goals."), alert=True, indicator="green") def update_parent_progress(self, old_parent=None): parent_goal = old_parent or self.parent_goal @@ -103,9 +103,9 @@ class Goal(NestedSet): if not parent_goal: return - Goal = frappe.qb.DocType("Goal") + Goal = xhiveframework.qb.DocType("Goal") avg_goal_completion = ( - frappe.qb.from_(Goal) + xhiveframework.qb.from_(Goal) .select(Avg(Goal.progress).as_("avg_goal_completion")) .where( (Goal.parent_goal == parent_goal) @@ -115,7 +115,7 @@ class Goal(NestedSet): ) ).run()[0][0] - parent_goal_doc = frappe.get_doc("Goal", parent_goal) + parent_goal_doc = xhiveframework.get_doc("Goal", parent_goal) parent_goal_doc.progress = flt(avg_goal_completion, parent_goal_doc.precision("progress")) parent_goal_doc.ignore_permissions = True parent_goal_doc.ignore_mandatory = True @@ -125,20 +125,20 @@ class Goal(NestedSet): if not self.appraisal_cycle: return - appraisal = frappe.db.get_value( + appraisal = xhiveframework.db.get_value( "Appraisal", {"employee": self.employee, "appraisal_cycle": self.appraisal_cycle} ) if appraisal: - appraisal = frappe.get_doc("Appraisal", appraisal) + appraisal = xhiveframework.get_doc("Appraisal", appraisal) appraisal.set_goal_score(update=True) -@frappe.whitelist() +@xhiveframework.whitelist() def get_children(doctype: str, parent: str, is_root: bool = False, **filters) -> list[dict]: - Goal = frappe.qb.DocType(doctype) + Goal = xhiveframework.qb.DocType(doctype) query = ( - frappe.qb.from_(Goal) + xhiveframework.qb.from_(Goal) .select( Goal.name.as_("value"), Goal.goal_name.as_("title"), @@ -169,7 +169,7 @@ def get_children(doctype: str, parent: str, is_root: bool = False, **filters) -> query = query.where(ifnull(Goal.parent_goal, "") == "") if filters.get("date_range"): - date_range = frappe.parse_json(filters.get("date_range")) + date_range = xhiveframework.parse_json(filters.get("date_range")) query = query.where( (Goal.start_date.between(date_range[0], date_range[1])) @@ -185,19 +185,19 @@ def get_children(doctype: str, parent: str, is_root: bool = False, **filters) -> def _update_goal_completion_status(goals: list[dict]) -> list[dict]: for goal in goals: if goal.expandable: # group node - total_goals = frappe.db.count("Goal", dict(parent_goal=goal.value)) + total_goals = xhiveframework.db.count("Goal", dict(parent_goal=goal.value)) if total_goals: - completed = frappe.db.count("Goal", {"parent_goal": goal.value, "status": "Completed"}) or 0 + completed = xhiveframework.db.count("Goal", {"parent_goal": goal.value, "status": "Completed"}) or 0 # set completion status of group node goal["completion_count"] = _("{0} of {1} Completed").format(completed, total_goals) return goals -@frappe.whitelist() +@xhiveframework.whitelist() def update_progress(progress: float, goal: str) -> None: - goal = frappe.get_doc("Goal", goal) + goal = xhiveframework.get_doc("Goal", goal) goal.progress = progress goal.flags.ignore_mandatory = True goal.save() @@ -205,14 +205,14 @@ def update_progress(progress: float, goal: str) -> None: return goal -@frappe.whitelist() +@xhiveframework.whitelist() def add_tree_node(): - from frappe.desk.treeview import make_tree_args + from xhiveframework.desk.treeview import make_tree_args - args = frappe.form_dict + args = xhiveframework.form_dict args = make_tree_args(**args) - if args.parent_goal == "All Goals" or not frappe.db.exists("Goal", args.parent_goal): + if args.parent_goal == "All Goals" or not xhiveframework.db.exists("Goal", args.parent_goal): args.parent_goal = None - frappe.get_doc(args).insert() + xhiveframework.get_doc(args).insert() diff --git a/hrms/hr/doctype/goal/goal_list.js b/hrms/hr/doctype/goal/goal_list.js index 696e390..c76a8f6 100644 --- a/hrms/hr/doctype/goal/goal_list.js +++ b/hrms/hr/doctype/goal/goal_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Goal"] = { +xhiveframework.listview_settings["Goal"] = { add_fields: ["end_date", "status"], get_indicator: function(doc) { const status_color = { diff --git a/hrms/hr/doctype/goal/goal_tree.js b/hrms/hr/doctype/goal/goal_tree.js index 76c899e..4931282 100644 --- a/hrms/hr/doctype/goal/goal_tree.js +++ b/hrms/hr/doctype/goal/goal_tree.js @@ -1,14 +1,14 @@ -frappe.provide("frappe.treeview_settings"); +xhiveframework.provide("xhiveframework.treeview_settings"); -frappe.treeview_settings["Goal"] = { +xhiveframework.treeview_settings["Goal"] = { get_tree_nodes: "hrms.hr.doctype.goal.goal.get_children", filters: [ { fieldname: "company", fieldtype: "Select", - options: erpnext.utils.get_tree_options("company"), + options: xhiveerp.utils.get_tree_options("company"), label: __("Company"), - default: erpnext.utils.get_tree_default("company") + default: xhiveerp.utils.get_tree_default("company") }, { fieldname: "appraisal_cycle", @@ -16,7 +16,7 @@ frappe.treeview_settings["Goal"] = { options: "Appraisal Cycle", label: __("Appraisal Cycle"), get_query() { - const company = frappe.treeview_settings["Goal"].page.fields_dict.company.get_value(); + const company = xhiveframework.treeview_settings["Goal"].page.fields_dict.company.get_value(); return { filters: { @@ -60,7 +60,7 @@ frappe.treeview_settings["Goal"] = { options: "Employee", reqd: 1, default() { - const treeview = frappe.treeview_settings["Goal"].treeview; + const treeview = xhiveframework.treeview_settings["Goal"].treeview; let employee = ( treeview.tree.get_selected_node().data.employee || treeview.tree.session_employee || "" @@ -82,13 +82,13 @@ frappe.treeview_settings["Goal"] = { fieldname: "start_date", label: __("Start Date"), reqd: 1, - default: frappe.datetime.month_start(), + default: xhiveframework.datetime.month_start(), }, { fieldtype: "Date", fieldname: "end_date", label: __("End Date"), - default: frappe.datetime.month_end(), + default: xhiveframework.datetime.month_end(), }, { fieldtype: "Section Break", @@ -102,7 +102,7 @@ frappe.treeview_settings["Goal"] = { label: __("Appraisal Cycle"), options: "Appraisal Cycle", get_query() { - const company = frappe.treeview_settings["Goal"].page.fields_dict.company.get_value(); + const company = xhiveframework.treeview_settings["Goal"].page.fields_dict.company.get_value(); return { filters: { @@ -112,7 +112,7 @@ frappe.treeview_settings["Goal"] = { } }, default() { - const treeview = frappe.treeview_settings["Goal"].treeview; + const treeview = xhiveframework.treeview_settings["Goal"].treeview; let appraisal_cycle = ( treeview.page.fields_dict.appraisal_cycle.get_value() || treeview.tree.get_selected_node().data.appraisal_cycle || "" @@ -140,7 +140,7 @@ frappe.treeview_settings["Goal"] = { }; }, default() { - const treeview = frappe.treeview_settings["Goal"].treeview + const treeview = xhiveframework.treeview_settings["Goal"].treeview return treeview.tree.get_selected_node().data.kra } }, @@ -157,12 +157,12 @@ frappe.treeview_settings["Goal"] = { }, ], onload(treeview) { - frappe.treeview_settings["Goal"].page = {}; - $.extend(frappe.treeview_settings["Goal"].page, treeview.page); + xhiveframework.treeview_settings["Goal"].page = {}; + $.extend(xhiveframework.treeview_settings["Goal"].page, treeview.page); treeview.make_tree(); // set the current session employee - frappe.db.get_value("Employee", { user_id: frappe.session.user }, "name").then(employee_record => { + xhiveframework.db.get_value("Employee", { user_id: xhiveframework.session.user }, "name").then(employee_record => { treeview.tree.session_employee = employee_record?.message?.name; }); }, @@ -207,8 +207,8 @@ frappe.treeview_settings["Goal"] = { root_label: __("All Goals"), ignore_fields: ["parent_goal"], post_render(treeview) { - frappe.treeview_settings["Goal"].treeview = {}; - $.extend(frappe.treeview_settings["Goal"].treeview, treeview); + xhiveframework.treeview_settings["Goal"].treeview = {}; + $.extend(xhiveframework.treeview_settings["Goal"].treeview, treeview); }, get_label(node) { if (node.title && node.title !== node.label) { @@ -224,7 +224,7 @@ frappe.treeview_settings["Goal"] = { return !node.root && !node.expandable; }, click: function(node) { - const dialog = new frappe.ui.Dialog({ + const dialog = new xhiveframework.ui.Dialog({ title: __("Update Progress"), fields: [ { @@ -236,7 +236,7 @@ frappe.treeview_settings["Goal"] = { ], primary_action: function() { dialog.hide(); - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.goal.goal.update_progress", args: { progress: dialog.get_values()["progress"], @@ -244,14 +244,14 @@ frappe.treeview_settings["Goal"] = { }, }).then(r => { if (!r.exc && r.message) { - frappe.treeview_settings["Goal"].treeview.tree.load_children(node.parent_node, true); + xhiveframework.treeview_settings["Goal"].treeview.tree.load_children(node.parent_node, true); - frappe.show_alert({ + xhiveframework.show_alert({ message: __("Progress Updated successfully"), indicator: "green" }); } else { - frappe.msgprint(__("Could not update progress")); + xhiveframework.msgprint(__("Could not update progress")); } }); }, diff --git a/hrms/hr/doctype/goal/test_goal.py b/hrms/hr/doctype/goal/test_goal.py index 1aa8a1d..0fbd27a 100644 --- a/hrms/hr/doctype/goal/test_goal.py +++ b/hrms/hr/doctype/goal/test_goal.py @@ -1,18 +1,18 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.appraisal_template.test_appraisal_template import create_kras from hrms.hr.doctype.goal.goal import get_children -class TestGoal(FrappeTestCase): +class TestGoal(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Goal") + xhiveframework.db.delete("Goal") create_kras(["Development", "Quality"]) self.employee1 = make_employee("employee1@example.com", company="_Test Company") @@ -20,7 +20,7 @@ class TestGoal(FrappeTestCase): def test_validate_parent_fields(self): parent_goal = create_goal(self.employee1, "Development", 1) - child_goal = frappe.get_doc( + child_goal = xhiveframework.get_doc( { "doctype": "Goal", "goal_name": "Test", @@ -32,7 +32,7 @@ class TestGoal(FrappeTestCase): ) # parent goal and child goal should have same employee - self.assertRaises(frappe.ValidationError, child_goal.insert) + self.assertRaises(xhiveframework.ValidationError, child_goal.insert) def test_set_status(self): goal = create_goal(self.employee1, "Development") @@ -182,7 +182,7 @@ def create_goal( appraisal_cycle=None, progress=0, ): - return frappe.get_doc( + return xhiveframework.get_doc( { "doctype": "Goal", "goal_name": "Test", diff --git a/hrms/hr/doctype/grievance_type/grievance_type.js b/hrms/hr/doctype/grievance_type/grievance_type.js index 425f2fd..c85fe56 100644 --- a/hrms/hr/doctype/grievance_type/grievance_type.js +++ b/hrms/hr/doctype/grievance_type/grievance_type.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Grievance Type', { +xhiveframework.ui.form.on('Grievance Type', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/grievance_type/grievance_type.py b/hrms/hr/doctype/grievance_type/grievance_type.py index 5d8d41c..53ebe26 100644 --- a/hrms/hr/doctype/grievance_type/grievance_type.py +++ b/hrms/hr/doctype/grievance_type/grievance_type.py @@ -1,8 +1,8 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class GrievanceType(Document): diff --git a/hrms/hr/doctype/grievance_type/test_grievance_type.py b/hrms/hr/doctype/grievance_type/test_grievance_type.py index 481f4e5..8cf4550 100644 --- a/hrms/hr/doctype/grievance_type/test_grievance_type.py +++ b/hrms/hr/doctype/grievance_type/test_grievance_type.py @@ -1,7 +1,7 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/hr_settings/hr_settings.js b/hrms/hr/doctype/hr_settings/hr_settings.js index 6e26a1f..f6da658 100644 --- a/hrms/hr/doctype/hr_settings/hr_settings.js +++ b/hrms/hr/doctype/hr_settings/hr_settings.js @@ -1,10 +1,10 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('HR Settings', { +xhiveframework.ui.form.on('HR Settings', { }); -frappe.tour['HR Settings'] = [ +xhiveframework.tour['HR Settings'] = [ { fieldname: 'emp_created_by', title: 'Employee Naming By', diff --git a/hrms/hr/doctype/hr_settings/hr_settings.py b/hrms/hr/doctype/hr_settings/hr_settings.py index ac897e1..bf02c6f 100644 --- a/hrms/hr/doctype/hr_settings/hr_settings.py +++ b/hrms/hr/doctype/hr_settings/hr_settings.py @@ -1,11 +1,11 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -import frappe -from frappe.model.document import Document -from frappe.utils import format_date +import xhiveframework +from xhiveframework.model.document import Document +from xhiveframework.utils import format_date # Wether to proceed with frequency change PROCEED_WITH_FREQUENCY_CHANGE = False @@ -22,7 +22,7 @@ class HRSettings(Document): PROCEED_WITH_FREQUENCY_CHANGE = False def set_naming_series(self): - from erpnext.utilities.naming import set_by_naming_series + from xhiveerp.utilities.naming import set_by_naming_series set_by_naming_series( "Employee", @@ -35,14 +35,14 @@ class HRSettings(Document): weekly_job, monthly_job = None, None try: - weekly_job = frappe.get_doc( + weekly_job = xhiveframework.get_doc( "Scheduled Job Type", "employee_reminders.send_reminders_in_advance_weekly" ) - monthly_job = frappe.get_doc( + monthly_job = xhiveframework.get_doc( "Scheduled Job Type", "employee_reminders.send_reminders_in_advance_monthly" ) - except frappe.DoesNotExistError: + except xhiveframework.DoesNotExistError: return next_weekly_trigger = weekly_job.get_next_execution() @@ -63,32 +63,32 @@ class HRSettings(Document): return self.has_value_changed("frequency") and self.frequency == "Weekly" def show_freq_change_warning(self, from_date, to_date): - from_date = frappe.bold(format_date(from_date)) - to_date = frappe.bold(format_date(to_date)) + from_date = xhiveframework.bold(format_date(from_date)) + to_date = xhiveframework.bold(format_date(to_date)) - raise_exception = frappe.ValidationError + raise_exception = xhiveframework.ValidationError if ( - frappe.flags.in_test - or frappe.flags.in_patch - or frappe.flags.in_install - or frappe.flags.in_migrate + xhiveframework.flags.in_test + or xhiveframework.flags.in_patch + or xhiveframework.flags.in_install + or xhiveframework.flags.in_migrate ): raise_exception = False - frappe.msgprint( - msg=frappe._( + xhiveframework.msgprint( + msg=xhiveframework._( "Employees will miss holiday reminders from {} until {}.
Do you want to proceed with this change?" ).format(from_date, to_date), title="Confirm change in Frequency", primary_action={ - "label": frappe._("Yes, Proceed"), + "label": xhiveframework._("Yes, Proceed"), "client_action": "hrms.proceed_save_with_reminders_frequency_change", }, raise_exception=raise_exception, ) -@frappe.whitelist() +@xhiveframework.whitelist() def set_proceed_with_frequency_change(): """Enables proceed with frequency change""" global PROCEED_WITH_FREQUENCY_CHANGE diff --git a/hrms/hr/doctype/hr_settings/test_hr_settings.py b/hrms/hr/doctype/hr_settings/test_hr_settings.py index 7e13213..ec90245 100644 --- a/hrms/hr/doctype/hr_settings/test_hr_settings.py +++ b/hrms/hr/doctype/hr_settings/test_hr_settings.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/identification_document_type/identification_document_type.js b/hrms/hr/doctype/identification_document_type/identification_document_type.js index 351cf9d..cfc4554 100644 --- a/hrms/hr/doctype/identification_document_type/identification_document_type.js +++ b/hrms/hr/doctype/identification_document_type/identification_document_type.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Identification Document Type', { +xhiveframework.ui.form.on('Identification Document Type', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/identification_document_type/identification_document_type.py b/hrms/hr/doctype/identification_document_type/identification_document_type.py index 3bfcfaa..5bdc6c7 100644 --- a/hrms/hr/doctype/identification_document_type/identification_document_type.py +++ b/hrms/hr/doctype/identification_document_type/identification_document_type.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class IdentificationDocumentType(Document): diff --git a/hrms/hr/doctype/identification_document_type/test_identification_document_type.py b/hrms/hr/doctype/identification_document_type/test_identification_document_type.py index 3e8f7ab..2df1a41 100644 --- a/hrms/hr/doctype/identification_document_type/test_identification_document_type.py +++ b/hrms/hr/doctype/identification_document_type/test_identification_document_type.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/interest/interest.js b/hrms/hr/doctype/interest/interest.js index 70e1b6a..6443e4b 100644 --- a/hrms/hr/doctype/interest/interest.js +++ b/hrms/hr/doctype/interest/interest.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Interest', { +xhiveframework.ui.form.on('Interest', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/interest/interest.py b/hrms/hr/doctype/interest/interest.py index 3563f7f..37b83f5 100644 --- a/hrms/hr/doctype/interest/interest.py +++ b/hrms/hr/doctype/interest/interest.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class Interest(Document): diff --git a/hrms/hr/doctype/interest/test_interest.py b/hrms/hr/doctype/interest/test_interest.py index eacb57f..60ca4e4 100644 --- a/hrms/hr/doctype/interest/test_interest.py +++ b/hrms/hr/doctype/interest/test_interest.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -# test_records = frappe.get_test_records('Interest') +# test_records = xhiveframework.get_test_records('Interest') class TestInterest(unittest.TestCase): diff --git a/hrms/hr/doctype/interview/interview.js b/hrms/hr/doctype/interview/interview.js index 6866b50..f1ebc7b 100644 --- a/hrms/hr/doctype/interview/interview.js +++ b/hrms/hr/doctype/interview/interview.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Interview', { +xhiveframework.ui.form.on('Interview', { onload: function (frm) { frm.events.set_job_applicant_query(frm); @@ -26,11 +26,11 @@ frappe.ui.form.on('Interview', { allowed_interviewers.push(values.interviewer); }); - if ((allowed_interviewers.includes(frappe.session.user))) { - frappe.db.get_value('Interview Feedback', {'interviewer': frappe.session.user, 'interview': frm.doc.name, 'docstatus': 1}, 'name', (r) => { + if ((allowed_interviewers.includes(xhiveframework.session.user))) { + xhiveframework.db.get_value('Interview Feedback', {'interviewer': xhiveframework.session.user, 'interview': frm.doc.name, 'docstatus': 1}, 'name', (r) => { if (Object.keys(r).length === 0) { frm.add_custom_button(__('Submit Feedback'), function () { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.interview.interview.get_expected_skill_set', args: { interview_round: frm.doc.interview_round @@ -48,7 +48,7 @@ frappe.ui.form.on('Interview', { }, show_reschedule_dialog: function (frm) { - let d = new frappe.ui.Dialog({ + let d = new xhiveframework.ui.Dialog({ title: 'Reschedule Interview', fields: [ { @@ -92,7 +92,7 @@ frappe.ui.form.on('Interview', { show_feedback_dialog: function (frm, data) { let fields = frm.events.get_fields_for_feedback(); - let d = new frappe.ui.Dialog({ + let d = new xhiveframework.ui.Dialog({ title: __('Submit Feedback'), fields: [ { @@ -120,12 +120,12 @@ frappe.ui.form.on('Interview', { size: 'large', minimizable: true, primary_action: function(values) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.interview.interview.create_interview_feedback', args: { data: values, interview_name: frm.doc.name, - interviewer: frappe.session.user, + interviewer: xhiveframework.session.user, job_applicant: frm.doc.job_applicant } }).then(() => { @@ -171,7 +171,7 @@ frappe.ui.form.on('Interview', { frm.events.reset_values(frm); frm.set_value('job_applicant', ''); - let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; + let round_data = (await xhiveframework.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; frm.set_value('designation', round_data.designation); frm.events.set_job_applicant_query(frm); @@ -183,7 +183,7 @@ frappe.ui.form.on('Interview', { }, set_interview_details: function (frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.interview.interview.get_interviewers', args: { interview_round: frm.doc.interview_round @@ -202,7 +202,7 @@ frappe.ui.form.on('Interview', { if (!frm.doc.interview_round) { frm.doc.job_applicant = ''; frm.refresh(); - frappe.throw(__('Select Interview Round First')); + xhiveframework.throw(__('Select Interview Round First')); } if (frm.doc.job_applicant) { @@ -213,11 +213,11 @@ frappe.ui.form.on('Interview', { }, set_designation_and_job_opening: async function (frm) { - let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; + let round_data = (await xhiveframework.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; frm.set_value('designation', round_data.designation); frm.events.set_job_applicant_query(frm); - let job_applicant_data = (await frappe.db.get_value( + let job_applicant_data = (await xhiveframework.db.get_value( 'Job Applicant', frm.doc.job_applicant, ['designation', 'job_title', 'resume_link'], )).message; diff --git a/hrms/hr/doctype/interview/interview.py b/hrms/hr/doctype/interview/interview.py index d730428..1641065 100644 --- a/hrms/hr/doctype/interview/interview.py +++ b/hrms/hr/doctype/interview/interview.py @@ -1,16 +1,16 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt import datetime -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cstr, flt, get_datetime, get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import cstr, flt, get_datetime, get_link_to_form -class DuplicateInterviewRoundError(frappe.ValidationError): +class DuplicateInterviewRoundError(xhiveframework.ValidationError): pass @@ -23,35 +23,35 @@ class Interview(Document): def on_submit(self): if self.status not in ["Cleared", "Rejected"]: - frappe.throw( + xhiveframework.throw( _("Only Interviews with Cleared or Rejected status can be submitted."), title=_("Not Allowed") ) def validate_duplicate_interview(self): - duplicate_interview = frappe.db.exists( + duplicate_interview = xhiveframework.db.exists( "Interview", {"job_applicant": self.job_applicant, "interview_round": self.interview_round, "docstatus": 1}, ) if duplicate_interview: - frappe.throw( + xhiveframework.throw( _( "Job Applicants are not allowed to appear twice for the same Interview round. Interview {0} already scheduled for Job Applicant {1}" ).format( - frappe.bold(get_link_to_form("Interview", duplicate_interview)), - frappe.bold(self.job_applicant), + xhiveframework.bold(get_link_to_form("Interview", duplicate_interview)), + xhiveframework.bold(self.job_applicant), ) ) def validate_designation(self): - applicant_designation = frappe.db.get_value("Job Applicant", self.job_applicant, "designation") + applicant_designation = xhiveframework.db.get_value("Job Applicant", self.job_applicant, "designation") if self.designation: if self.designation != applicant_designation: - frappe.throw( + xhiveframework.throw( _( "Interview Round {0} is only for Designation {1}. Job Applicant has applied for the role {2}" ).format( - self.interview_round, frappe.bold(self.designation), applicant_designation + self.interview_round, xhiveframework.bold(self.designation), applicant_designation ), exc=DuplicateInterviewRoundError, ) @@ -61,7 +61,7 @@ class Interview(Document): def validate_overlap(self): interviewers = [entry.interviewer for entry in self.interview_details] or [""] - overlaps = frappe.db.sql( + overlaps = xhiveframework.db.sql( """ SELECT interview.name FROM `tabInterview` as interview @@ -90,7 +90,7 @@ class Interview(Document): overlapping_details = _("Interview overlaps with {0}").format( get_link_to_form("Interview", overlaps[0][0]) ) - frappe.throw(overlapping_details, title=_("Overlap")) + xhiveframework.throw(overlapping_details, title=_("Overlap")) def set_average_rating(self): total_rating = 0 @@ -102,7 +102,7 @@ class Interview(Document): total_rating / len(self.interview_details) if len(self.interview_details) else 0 ) - @frappe.whitelist() + @xhiveframework.whitelist() def reschedule_interview(self, scheduled_on, from_time, to_time): original_date = self.scheduled_on original_from_time = self.from_time @@ -114,7 +114,7 @@ class Interview(Document): recipients = get_recipients(self.name) try: - frappe.sendmail( + xhiveframework.sendmail( recipients=recipients, subject=_("Interview: {0} Rescheduled").format(self.name), message=_("Your Interview session is rescheduled from {0} {1} - {2} to {3} {4} - {5}").format( @@ -129,34 +129,34 @@ class Interview(Document): reference_name=self.name, ) except Exception: - frappe.msgprint( + xhiveframework.msgprint( _("Failed to send the Interview Reschedule notification. Please configure your email account.") ) - frappe.msgprint(_("Interview Rescheduled successfully"), indicator="green") + xhiveframework.msgprint(_("Interview Rescheduled successfully"), indicator="green") def get_recipients(name, for_feedback=0): - interview = frappe.get_doc("Interview", name) + interview = xhiveframework.get_doc("Interview", name) if for_feedback: recipients = [d.interviewer for d in interview.interview_details if not d.interview_feedback] else: recipients = [d.interviewer for d in interview.interview_details] - recipients.append(frappe.db.get_value("Job Applicant", interview.job_applicant, "email_id")) + recipients.append(xhiveframework.db.get_value("Job Applicant", interview.job_applicant, "email_id")) return recipients -@frappe.whitelist() +@xhiveframework.whitelist() def get_interviewers(interview_round): - return frappe.get_all( + return xhiveframework.get_all( "Interviewer", filters={"parent": interview_round}, fields=["user as interviewer"] ) def send_interview_reminder(): - reminder_settings = frappe.db.get_value( + reminder_settings = xhiveframework.db.get_value( "HR Settings", "HR Settings", ["send_interview_reminder", "interview_reminder_template"], @@ -166,13 +166,13 @@ def send_interview_reminder(): if not reminder_settings.send_interview_reminder: return - remind_before = cstr(frappe.db.get_single_value("HR Settings", "remind_before")) or "01:00:00" + remind_before = cstr(xhiveframework.db.get_single_value("HR Settings", "remind_before")) or "01:00:00" remind_before = datetime.datetime.strptime(remind_before, "%H:%M:%S") reminder_date_time = datetime.datetime.now() + datetime.timedelta( hours=remind_before.hour, minutes=remind_before.minute, seconds=remind_before.second ) - interviews = frappe.get_all( + interviews = xhiveframework.get_all( "Interview", filters={ "scheduled_on": ["between", (datetime.datetime.now(), reminder_date_time)], @@ -182,17 +182,17 @@ def send_interview_reminder(): }, ) - interview_template = frappe.get_doc( + interview_template = xhiveframework.get_doc( "Email Template", reminder_settings.interview_reminder_template ) for d in interviews: - doc = frappe.get_doc("Interview", d.name) + doc = xhiveframework.get_doc("Interview", d.name) context = doc.as_dict() - message = frappe.render_template(interview_template.response, context) + message = xhiveframework.render_template(interview_template.response, context) recipients = get_recipients(doc.name) - frappe.sendmail( + xhiveframework.sendmail( recipients=recipients, subject=interview_template.subject, message=message, @@ -204,7 +204,7 @@ def send_interview_reminder(): def send_daily_feedback_reminder(): - reminder_settings = frappe.db.get_value( + reminder_settings = xhiveframework.db.get_value( "HR Settings", "HR Settings", ["send_interview_feedback_reminder", "feedback_reminder_notification_template"], @@ -214,23 +214,23 @@ def send_daily_feedback_reminder(): if not reminder_settings.send_interview_feedback_reminder: return - interview_feedback_template = frappe.get_doc( + interview_feedback_template = xhiveframework.get_doc( "Email Template", reminder_settings.feedback_reminder_notification_template ) - interviews = frappe.get_all( + interviews = xhiveframework.get_all( "Interview", filters={"status": ["in", ["Under Review", "Pending"]], "docstatus": ["!=", 2]} ) for entry in interviews: recipients = get_recipients(entry.name, for_feedback=1) - doc = frappe.get_doc("Interview", entry.name) + doc = xhiveframework.get_doc("Interview", entry.name) context = doc.as_dict() - message = frappe.render_template(interview_feedback_template.response, context) + message = xhiveframework.render_template(interview_feedback_template.response, context) if len(recipients): - frappe.sendmail( + xhiveframework.sendmail( recipients=recipients, subject=interview_feedback_template.subject, message=message, @@ -239,28 +239,28 @@ def send_daily_feedback_reminder(): ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_expected_skill_set(interview_round): - return frappe.get_all("Expected Skill Set", filters={"parent": interview_round}, fields=["skill"]) + return xhiveframework.get_all("Expected Skill Set", filters={"parent": interview_round}, fields=["skill"]) -@frappe.whitelist() +@xhiveframework.whitelist() def create_interview_feedback(data, interview_name, interviewer, job_applicant): import json if isinstance(data, str): - data = frappe._dict(json.loads(data)) + data = xhiveframework._dict(json.loads(data)) - if frappe.session.user != interviewer: - frappe.throw(_("Only Interviewer Are allowed to submit Interview Feedback")) + if xhiveframework.session.user != interviewer: + xhiveframework.throw(_("Only Interviewer Are allowed to submit Interview Feedback")) - interview_feedback = frappe.new_doc("Interview Feedback") + interview_feedback = xhiveframework.new_doc("Interview Feedback") interview_feedback.interview = interview_name interview_feedback.interviewer = interviewer interview_feedback.job_applicant = job_applicant for d in data.skill_set: - d = frappe._dict(d) + d = xhiveframework._dict(d) interview_feedback.append("skill_assessment", {"skill": d.skill, "rating": d.rating}) interview_feedback.feedback = data.feedback @@ -269,15 +269,15 @@ def create_interview_feedback(data, interview_name, interviewer, job_applicant): interview_feedback.save() interview_feedback.submit() - frappe.msgprint( + xhiveframework.msgprint( _("Interview Feedback {0} submitted successfully").format( get_link_to_form("Interview Feedback", interview_feedback.name) ) ) -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs +@xhiveframework.whitelist() +@xhiveframework.validate_and_sanitize_search_inputs def get_interviewer_list(doctype, txt, searchfield, start, page_len, filters): filters = [ ["Has Role", "parent", "like", "%{}%".format(txt)], @@ -288,7 +288,7 @@ def get_interviewer_list(doctype, txt, searchfield, start, page_len, filters): if filters and isinstance(filters, list): filters.extend(filters) - return frappe.get_all( + return xhiveframework.get_all( "Has Role", limit_start=start, limit_page_length=page_len, @@ -298,7 +298,7 @@ def get_interviewer_list(doctype, txt, searchfield, start, page_len, filters): ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_events(start, end, filters=None): """Returns events for Gantt / Calendar view rendering. @@ -306,7 +306,7 @@ def get_events(start, end, filters=None): :param end: End date-time. :param filters: Filters (JSON). """ - from frappe.desk.calendar import get_event_conditions + from xhiveframework.desk.calendar import get_event_conditions events = [] @@ -319,7 +319,7 @@ def get_events(start, end, filters=None): conditions = get_event_conditions("Interview", filters) - interviews = frappe.db.sql( + interviews = xhiveframework.db.sql( """ SELECT DISTINCT `tabInterview`.name, `tabInterview`.job_applicant, `tabInterview`.interview_round, diff --git a/hrms/hr/doctype/interview/interview_calendar.js b/hrms/hr/doctype/interview/interview_calendar.js index 6d12134..cb1f30e 100644 --- a/hrms/hr/doctype/interview/interview_calendar.js +++ b/hrms/hr/doctype/interview/interview_calendar.js @@ -1,5 +1,5 @@ -frappe.views.calendar['Interview'] = { +xhiveframework.views.calendar['Interview'] = { field_map: { 'start': 'from', 'end': 'to', diff --git a/hrms/hr/doctype/interview/interview_list.js b/hrms/hr/doctype/interview/interview_list.js index b1f072f..9cd733f 100644 --- a/hrms/hr/doctype/interview/interview_list.js +++ b/hrms/hr/doctype/interview/interview_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Interview'] = { +xhiveframework.listview_settings['Interview'] = { has_indicator_for_draft: 1, get_indicator: function(doc) { let status_color = { diff --git a/hrms/hr/doctype/interview/test_interview.py b/hrms/hr/doctype/interview/test_interview.py index c1cee01..fc4b6b2 100644 --- a/hrms/hr/doctype/interview/test_interview.py +++ b/hrms/hr/doctype/interview/test_interview.py @@ -1,16 +1,16 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import datetime import os import unittest -import frappe -from frappe import _ -from frappe.core.doctype.user_permission.test_user_permission import create_user -from frappe.utils import add_days, get_time, getdate, nowtime +import xhiveframework +from xhiveframework import _ +from xhiveframework.core.doctype.user_permission.test_user_permission import create_user +from xhiveframework.utils import add_days, get_time, getdate, nowtime -from erpnext.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.designation.test_designation import create_designation from hrms.hr.doctype.interview.interview import DuplicateInterviewRoundError from hrms.hr.doctype.job_applicant.job_applicant import get_interview_details @@ -35,7 +35,7 @@ class TestInterview(unittest.TestCase): ) previous_scheduled_date = interview.scheduled_on - frappe.db.sql("DELETE FROM `tabEmail Queue`") + xhiveframework.db.sql("DELETE FROM `tabEmail Queue`") interview.reschedule_interview( add_days(getdate(previous_scheduled_date), 2), from_time="11:00:00", to_time="12:00:00" @@ -46,7 +46,7 @@ class TestInterview(unittest.TestCase): self.assertEqual(get_time(interview.from_time), get_time("11:00:00")) self.assertEqual(get_time(interview.to_time), get_time("12:00:00")) - notification = frappe.get_all( + notification = xhiveframework.get_all( "Email Queue", filters={"message": ("like", "%Your Interview session is rescheduled from%")} ) self.assertIsNotNone(notification) @@ -61,12 +61,12 @@ class TestInterview(unittest.TestCase): interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) - frappe.db.sql("DELETE FROM `tabEmail Queue`") + xhiveframework.db.sql("DELETE FROM `tabEmail Queue`") send_interview_reminder() interview.reload() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue("Subject: Interview Reminder" in email_queue[0].message) def test_notification_for_feedback_submission(self): @@ -78,10 +78,10 @@ class TestInterview(unittest.TestCase): scheduled_on = add_days(getdate(), -4) create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) - frappe.db.sql("DELETE FROM `tabEmail Queue`") + xhiveframework.db.sql("DELETE FROM `tabEmail Queue`") send_daily_feedback_reminder() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) + email_queue = xhiveframework.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue("Subject: Interview Feedback Reminder" in email_queue[0].message) def test_get_interview_details_for_applicant_dashboard(self): @@ -102,7 +102,7 @@ class TestInterview(unittest.TestCase): ) def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_interview_and_dependencies( @@ -118,7 +118,7 @@ def create_interview_and_dependencies( "Technical Round", ["Python", "JS"], designation=designation, save=True ) - interview = frappe.new_doc("Interview") + interview = xhiveframework.new_doc("Interview") interview.interview_round = interview_round.name interview.job_applicant = job_applicant interview.scheduled_on = scheduled_on or getdate() @@ -136,7 +136,7 @@ def create_interview_and_dependencies( def create_interview_round(name, skill_set, interviewers=[], designation=None, save=True): create_skill_set(skill_set) - interview_round = frappe.new_doc("Interview Round") + interview_round = xhiveframework.new_doc("Interview Round") interview_round.round_name = name interview_round.interview_type = create_interview_type() # average rating = 4 @@ -158,17 +158,17 @@ def create_interview_round(name, skill_set, interviewers=[], designation=None, s def create_skill_set(skill_set): for skill in skill_set: - if not frappe.db.exists("Skill", skill): - doc = frappe.new_doc("Skill") + if not xhiveframework.db.exists("Skill", skill): + doc = xhiveframework.new_doc("Skill") doc.skill_name = skill doc.save() def create_interview_type(name="test_interview_type"): - if frappe.db.exists("Interview Type", name): - return frappe.get_doc("Interview Type", name).name + if xhiveframework.db.exists("Interview Type", name): + return xhiveframework.get_doc("Interview Type", name).name else: - doc = frappe.new_doc("Interview Type") + doc = xhiveframework.new_doc("Interview Type") doc.name = name doc.description = "_Test_Description" doc.save() @@ -177,39 +177,39 @@ def create_interview_type(name="test_interview_type"): def setup_reminder_settings(): - if not frappe.db.exists("Email Template", _("Interview Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( + if not xhiveframework.db.exists("Email Template", _("Interview Reminder")): + base_path = xhiveframework.get_app_path("xhiveerp", "hr", "doctype") + response = xhiveframework.read_file( os.path.join(base_path, "interview/interview_reminder_notification_template.html") ) - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Email Template", "name": _("Interview Reminder"), "response": response, "subject": _("Interview Reminder"), - "owner": frappe.session.user, + "owner": xhiveframework.session.user, } ).insert(ignore_permissions=True) - if not frappe.db.exists("Email Template", _("Interview Feedback Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( + if not xhiveframework.db.exists("Email Template", _("Interview Feedback Reminder")): + base_path = xhiveframework.get_app_path("xhiveerp", "hr", "doctype") + response = xhiveframework.read_file( os.path.join(base_path, "interview/interview_feedback_reminder_template.html") ) - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Email Template", "name": _("Interview Feedback Reminder"), "response": response, "subject": _("Interview Feedback Reminder"), - "owner": frappe.session.user, + "owner": xhiveframework.session.user, } ).insert(ignore_permissions=True) - hr_settings = frappe.get_doc("HR Settings") + hr_settings = xhiveframework.get_doc("HR Settings") hr_settings.interview_reminder_template = _("Interview Reminder") hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder") hr_settings.save() diff --git a/hrms/hr/doctype/interview_detail/interview_detail.js b/hrms/hr/doctype/interview_detail/interview_detail.js index 88518ca..8726be8 100644 --- a/hrms/hr/doctype/interview_detail/interview_detail.js +++ b/hrms/hr/doctype/interview_detail/interview_detail.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Interview Detail', { +xhiveframework.ui.form.on('Interview Detail', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/interview_detail/interview_detail.py b/hrms/hr/doctype/interview_detail/interview_detail.py index d44e29a..a5ecd3f 100644 --- a/hrms/hr/doctype/interview_detail/interview_detail.py +++ b/hrms/hr/doctype/interview_detail/interview_detail.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class InterviewDetail(Document): diff --git a/hrms/hr/doctype/interview_detail/test_interview_detail.py b/hrms/hr/doctype/interview_detail/test_interview_detail.py index 68a1f72..347fccd 100644 --- a/hrms/hr/doctype/interview_detail/test_interview_detail.py +++ b/hrms/hr/doctype/interview_detail/test_interview_detail.py @@ -1,7 +1,7 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/interview_feedback/interview_feedback.js b/hrms/hr/doctype/interview_feedback/interview_feedback.js index 2c5b6a7..4a8a084 100644 --- a/hrms/hr/doctype/interview_feedback/interview_feedback.js +++ b/hrms/hr/doctype/interview_feedback/interview_feedback.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Interview Feedback', { +xhiveframework.ui.form.on('Interview Feedback', { onload: function(frm) { frm.ignore_doctypes_on_cancel_all = ['Interview']; @@ -15,7 +15,7 @@ frappe.ui.form.on('Interview Feedback', { }, interview_round: function(frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.interview.interview.get_expected_skill_set', args: { interview_round: frm.doc.interview_round @@ -27,7 +27,7 @@ frappe.ui.form.on('Interview Feedback', { }, interview: function(frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.interview_feedback.interview_feedback.get_applicable_interviewers', args: { interview: frm.doc.interview || '' @@ -47,7 +47,7 @@ frappe.ui.form.on('Interview Feedback', { interviewer: function(frm) { if (!frm.doc.interview) { - frappe.throw(__('Select Interview first')); + xhiveframework.throw(__('Select Interview first')); frm.set_value('interviewer', ''); } } diff --git a/hrms/hr/doctype/interview_feedback/interview_feedback.py b/hrms/hr/doctype/interview_feedback/interview_feedback.py index 5bb498f..656438b 100644 --- a/hrms/hr/doctype/interview_feedback/interview_feedback.py +++ b/hrms/hr/doctype/interview_feedback/interview_feedback.py @@ -1,11 +1,11 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, get_link_to_form, getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import flt, get_link_to_form, getdate class InterviewFeedback(Document): @@ -24,30 +24,30 @@ class InterviewFeedback(Document): def validate_interviewer(self): applicable_interviewers = get_applicable_interviewers(self.interview) if self.interviewer not in applicable_interviewers: - frappe.throw( + xhiveframework.throw( _("{0} is not allowed to submit Interview Feedback for the Interview: {1}").format( - frappe.bold(self.interviewer), frappe.bold(self.interview) + xhiveframework.bold(self.interviewer), xhiveframework.bold(self.interview) ) ) def validate_interview_date(self): - scheduled_date = frappe.db.get_value("Interview", self.interview, "scheduled_on") + scheduled_date = xhiveframework.db.get_value("Interview", self.interview, "scheduled_on") if getdate() < getdate(scheduled_date) and self.docstatus == 1: - frappe.throw( + xhiveframework.throw( _("{0} submission before {1} is not allowed").format( - frappe.bold("Interview Feedback"), frappe.bold("Interview Scheduled Date") + xhiveframework.bold("Interview Feedback"), xhiveframework.bold("Interview Scheduled Date") ) ) def validate_duplicate(self): - duplicate_feedback = frappe.db.exists( + duplicate_feedback = xhiveframework.db.exists( "Interview Feedback", {"interviewer": self.interviewer, "interview": self.interview, "docstatus": 1}, ) if duplicate_feedback: - frappe.throw( + xhiveframework.throw( _( "Feedback already submitted for the Interview {0}. Please cancel the previous Interview Feedback {1} to continue." ).format( @@ -66,7 +66,7 @@ class InterviewFeedback(Document): ) def update_interview_details(self): - doc = frappe.get_doc("Interview", self.interview) + doc = xhiveframework.get_doc("Interview", self.interview) if self.docstatus == 2: for entry in doc.interview_details: @@ -85,7 +85,7 @@ class InterviewFeedback(Document): doc.notify_update() -@frappe.whitelist() +@xhiveframework.whitelist() def get_applicable_interviewers(interview): - data = frappe.get_all("Interview Detail", filters={"parent": interview}, fields=["interviewer"]) + data = xhiveframework.get_all("Interview Detail", filters={"parent": interview}, fields=["interviewer"]) return [d.interviewer for d in data] diff --git a/hrms/hr/doctype/interview_feedback/test_interview_feedback.py b/hrms/hr/doctype/interview_feedback/test_interview_feedback.py index 8cfc0e6..a61ae4a 100644 --- a/hrms/hr/doctype/interview_feedback/test_interview_feedback.py +++ b/hrms/hr/doctype/interview_feedback/test_interview_feedback.py @@ -1,10 +1,10 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, flt, getdate +import xhiveframework +from xhiveframework.utils import add_days, flt, getdate from hrms.hr.doctype.interview.test_interview import ( create_interview_and_dependencies, @@ -15,7 +15,7 @@ from hrms.hr.doctype.job_applicant.test_job_applicant import create_job_applican class TestInterviewFeedback(unittest.TestCase): def test_validation_for_skill_set(self): - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") job_applicant = create_job_applicant() interview = create_interview_and_dependencies( job_applicant.name, scheduled_on=add_days(getdate(), -1) @@ -27,11 +27,11 @@ class TestInterviewFeedback(unittest.TestCase): interview_feedback = create_interview_feedback(interview.name, interviewer, skill_ratings) interview_feedback.append("skill_assessment", {"skill": "Leadership", "rating": 0.8}) - frappe.set_user(interviewer) + xhiveframework.set_user(interviewer) - self.assertRaises(frappe.ValidationError, interview_feedback.save) + self.assertRaises(xhiveframework.ValidationError, interview_feedback.save) - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") def test_average_ratings_on_feedback_submission_and_cancellation(self): job_applicant = create_job_applicant() @@ -42,7 +42,7 @@ class TestInterviewFeedback(unittest.TestCase): # For First Interviewer Feedback interviewer = interview.interview_details[0].interviewer - frappe.set_user(interviewer) + xhiveframework.set_user(interviewer) # calculating Average feedback_1 = create_interview_feedback(interview.name, interviewer, skill_ratings) @@ -58,7 +58,7 @@ class TestInterviewFeedback(unittest.TestCase): self.assertEqual(flt(avg_rating, 2), flt(feedback_1.average_rating, 2)) - avg_on_interview_detail = frappe.db.get_value( + avg_on_interview_detail = xhiveframework.db.get_value( "Interview Detail", { "parent": feedback_1.interview, @@ -73,7 +73,7 @@ class TestInterviewFeedback(unittest.TestCase): """For Second Interviewer Feedback""" interviewer = interview.interview_details[1].interviewer - frappe.set_user(interviewer) + xhiveframework.set_user(interviewer) feedback_2 = create_interview_feedback(interview.name, interviewer, skill_ratings) interview.reload() @@ -81,14 +81,14 @@ class TestInterviewFeedback(unittest.TestCase): feedback_2.cancel() interview.reload() - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_interview_feedback(interview, interviewer, skills_ratings): - interview_feedback = frappe.new_doc("Interview Feedback") + interview_feedback = xhiveframework.new_doc("Interview Feedback") interview_feedback.interview = interview interview_feedback.interviewer = interviewer interview_feedback.result = "Cleared" @@ -105,7 +105,7 @@ def create_interview_feedback(interview, interviewer, skills_ratings): def get_skills_rating(interview_round): import random - skills = frappe.get_all( + skills = xhiveframework.get_all( "Expected Skill Set", filters={"parent": interview_round}, fields=["skill"] ) for d in skills: diff --git a/hrms/hr/doctype/interview_round/interview_round.js b/hrms/hr/doctype/interview_round/interview_round.js index 115dd86..9204e8e 100644 --- a/hrms/hr/doctype/interview_round/interview_round.js +++ b/hrms/hr/doctype/interview_round/interview_round.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Interview Round", { +xhiveframework.ui.form.on("Interview Round", { refresh: function(frm) { if (!frm.doc.__islocal) { frm.add_custom_button(__("Create Interview"), function() { @@ -10,14 +10,14 @@ frappe.ui.form.on("Interview Round", { } }, create_interview: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.interview_round.interview_round.create_interview", args: { doc: frm.doc }, callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); } diff --git a/hrms/hr/doctype/interview_round/interview_round.py b/hrms/hr/doctype/interview_round/interview_round.py index 83dbf0e..58920c7 100644 --- a/hrms/hr/doctype/interview_round/interview_round.py +++ b/hrms/hr/doctype/interview_round/interview_round.py @@ -1,24 +1,24 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt import json -import frappe -from frappe.model.document import Document +import xhiveframework +from xhiveframework.model.document import Document class InterviewRound(Document): pass -@frappe.whitelist() +@xhiveframework.whitelist() def create_interview(doc): if isinstance(doc, str): doc = json.loads(doc) - doc = frappe.get_doc(doc) + doc = xhiveframework.get_doc(doc) - interview = frappe.new_doc("Interview") + interview = xhiveframework.new_doc("Interview") interview.interview_round = doc.name interview.designation = doc.designation diff --git a/hrms/hr/doctype/interview_round/test_interview_round.py b/hrms/hr/doctype/interview_round/test_interview_round.py index 9568165..d15a732 100644 --- a/hrms/hr/doctype/interview_round/test_interview_round.py +++ b/hrms/hr/doctype/interview_round/test_interview_round.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt import unittest -# import frappe +# import xhiveframework class TestInterviewRound(unittest.TestCase): diff --git a/hrms/hr/doctype/interview_type/interview_type.js b/hrms/hr/doctype/interview_type/interview_type.js index af77b52..1f12e4c 100644 --- a/hrms/hr/doctype/interview_type/interview_type.js +++ b/hrms/hr/doctype/interview_type/interview_type.js @@ -1,7 +1,7 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2021, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Interview Type', { +xhiveframework.ui.form.on('Interview Type', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/interview_type/interview_type.py b/hrms/hr/doctype/interview_type/interview_type.py index f5ebda4..6b06ccf 100644 --- a/hrms/hr/doctype/interview_type/interview_type.py +++ b/hrms/hr/doctype/interview_type/interview_type.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class InterviewType(Document): diff --git a/hrms/hr/doctype/interview_type/test_interview_type.py b/hrms/hr/doctype/interview_type/test_interview_type.py index 96fdfca..d1426cd 100644 --- a/hrms/hr/doctype/interview_type/test_interview_type.py +++ b/hrms/hr/doctype/interview_type/test_interview_type.py @@ -1,7 +1,7 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2021, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/interviewer/interviewer.py b/hrms/hr/doctype/interviewer/interviewer.py index 2dc4a14..25bad3f 100644 --- a/hrms/hr/doctype/interviewer/interviewer.py +++ b/hrms/hr/doctype/interviewer/interviewer.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class Interviewer(Document): diff --git a/hrms/hr/doctype/job_applicant/job_applicant.js b/hrms/hr/doctype/job_applicant/job_applicant.js index d7f9c83..4bfe07c 100644 --- a/hrms/hr/doctype/job_applicant/job_applicant.js +++ b/hrms/hr/doctype/job_applicant/job_applicant.js @@ -1,4 +1,4 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt // For license information, please see license.txt @@ -6,7 +6,7 @@ // for communication cur_frm.email_field = "email_id"; -frappe.ui.form.on("Job Applicant", { +xhiveframework.ui.form.on("Job Applicant", { refresh: function(frm) { frm.set_query("job_title", function() { return { @@ -31,25 +31,25 @@ frappe.ui.form.on("Job Applicant", { $('[data-doctype="Employee Onboarding"]').find("button").show(); $('[data-doctype="Job Offer"]').find("button").hide(); frm.add_custom_button(__("Job Offer"), function() { - frappe.set_route("Form", "Job Offer", frm.doc.__onload.job_offer); + xhiveframework.set_route("Form", "Job Offer", frm.doc.__onload.job_offer); }, __("View")); } else { $('[data-doctype="Employee Onboarding"]').find("button").hide(); $('[data-doctype="Job Offer"]').find("button").show(); frm.add_custom_button(__("Job Offer"), function() { - frappe.route_options = { + xhiveframework.route_options = { "job_applicant": frm.doc.name, "applicant_name": frm.doc.applicant_name, "designation": frm.doc.job_opening || frm.doc.designation, }; - frappe.new_doc("Job Offer"); + xhiveframework.new_doc("Job Offer"); }, __("Create")); } } }, make_dashboard: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.job_applicant.job_applicant.get_interview_details", args: { job_applicant: frm.doc.name @@ -58,7 +58,7 @@ frappe.ui.form.on("Job Applicant", { if (r.message) { $("div").remove(".form-dashboard-section.custom"); frm.dashboard.add_section( - frappe.render_template("job_applicant_dashboard", { + xhiveframework.render_template("job_applicant_dashboard", { data: r.message.interviews, number_of_stars: r.message.stars }), @@ -70,7 +70,7 @@ frappe.ui.form.on("Job Applicant", { }, create_dialog: function(frm) { - let d = new frappe.ui.Dialog({ + let d = new xhiveframework.ui.Dialog({ title: 'Enter Interview Round', fields: [ { @@ -90,15 +90,15 @@ frappe.ui.form.on("Job Applicant", { }, create_interview: function (frm, values) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.job_applicant.job_applicant.create_interview", args: { doc: frm.doc, interview_round: values.interview_round }, callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + var doclist = xhiveframework.model.sync(r.message); + xhiveframework.set_route("Form", doclist[0].doctype, doclist[0].name); } }); } diff --git a/hrms/hr/doctype/job_applicant/job_applicant.py b/hrms/hr/doctype/job_applicant/job_applicant.py index 492563e..338f61d 100644 --- a/hrms/hr/doctype/job_applicant/job_applicant.py +++ b/hrms/hr/doctype/job_applicant/job_applicant.py @@ -1,25 +1,25 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.naming import append_number_if_name_exists -from frappe.utils import flt, validate_email_address +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.model.naming import append_number_if_name_exists +from xhiveframework.utils import flt, validate_email_address from hrms.hr.doctype.interview.interview import get_interviewers -class DuplicationError(frappe.ValidationError): +class DuplicationError(xhiveframework.ValidationError): pass class JobApplicant(Document): def onload(self): - job_offer = frappe.get_all("Job Offer", filters={"job_applicant": self.name}) + job_offer = xhiveframework.get_all("Job Offer", filters={"job_applicant": self.name}) if job_offer: self.get("__onload").job_offer = job_offer[0].name @@ -27,7 +27,7 @@ class JobApplicant(Document): self.name = self.email_id # applicant can apply more than once for a different job title or reapply - if frappe.db.exists("Job Applicant", self.name): + if xhiveframework.db.exists("Job Applicant", self.name): self.name = append_number_if_name_exists("Job Applicant", self.name) def validate(self): @@ -43,38 +43,38 @@ class JobApplicant(Document): def before_insert(self): if self.job_title: - job_opening_status = frappe.db.get_value("Job Opening", self.job_title, "status") + job_opening_status = xhiveframework.db.get_value("Job Opening", self.job_title, "status") if job_opening_status == "Closed": - frappe.throw( + xhiveframework.throw( _("Cannot create a Job Applicant against a closed Job Opening"), title=_("Not Allowed") ) def set_status_for_employee_referral(self): - emp_ref = frappe.get_doc("Employee Referral", self.employee_referral) + emp_ref = xhiveframework.get_doc("Employee Referral", self.employee_referral) if self.status in ["Open", "Replied", "Hold"]: emp_ref.db_set("status", "In Process") elif self.status in ["Accepted", "Rejected"]: emp_ref.db_set("status", self.status) -@frappe.whitelist() +@xhiveframework.whitelist() def create_interview(doc, interview_round): import json if isinstance(doc, str): doc = json.loads(doc) - doc = frappe.get_doc(doc) + doc = xhiveframework.get_doc(doc) - round_designation = frappe.db.get_value("Interview Round", interview_round, "designation") + round_designation = xhiveframework.db.get_value("Interview Round", interview_round, "designation") if round_designation and doc.designation and round_designation != doc.designation: - frappe.throw( + xhiveframework.throw( _("Interview Round {0} is only applicable for the Designation {1}").format( interview_round, round_designation ) ) - interview = frappe.new_doc("Interview") + interview = xhiveframework.new_doc("Interview") interview.interview_round = interview_round interview.job_applicant = doc.name interview.designation = doc.designation @@ -87,15 +87,15 @@ def create_interview(doc, interview_round): return interview -@frappe.whitelist() +@xhiveframework.whitelist() def get_interview_details(job_applicant): - interview_details = frappe.db.get_all( + interview_details = xhiveframework.db.get_all( "Interview", filters={"job_applicant": job_applicant, "docstatus": ["!=", 2]}, fields=["name", "interview_round", "scheduled_on", "average_rating", "status"], ) interview_detail_map = {} - meta = frappe.get_meta("Interview") + meta = xhiveframework.get_meta("Interview") number_of_stars = meta.get_options("average_rating") or 5 for detail in interview_details: @@ -106,10 +106,10 @@ def get_interview_details(job_applicant): return {"interviews": interview_detail_map, "stars": number_of_stars} -@frappe.whitelist() +@xhiveframework.whitelist() def get_applicant_to_hire_percentage(): - total_applicants = frappe.db.count("Job Applicant") - total_hired = frappe.db.count("Job Applicant", filters={"status": "Accepted"}) + total_applicants = xhiveframework.db.count("Job Applicant") + total_hired = xhiveframework.db.count("Job Applicant", filters={"status": "Accepted"}) return { "value": flt(total_hired) / flt(total_applicants) * 100 if total_applicants else 0, diff --git a/hrms/hr/doctype/job_applicant/job_applicant_dashboard.html b/hrms/hr/doctype/job_applicant/job_applicant_dashboard.html index 2616768..2519b7a 100644 --- a/hrms/hr/doctype/job_applicant/job_applicant_dashboard.html +++ b/hrms/hr/doctype/job_applicant/job_applicant_dashboard.html @@ -16,7 +16,7 @@ {%= key %} {%= value["interview_round"] %} - {%= frappe.datetime.str_to_user(value["scheduled_on"]) %} + {%= xhiveframework.datetime.str_to_user(value["scheduled_on"]) %} {%= value["status"] %} {% let right_class = ''; %} {% let left_class = ''; %} diff --git a/hrms/hr/doctype/job_applicant/job_applicant_list.js b/hrms/hr/doctype/job_applicant/job_applicant_list.js index 2ad0d59..f609feb 100644 --- a/hrms/hr/doctype/job_applicant/job_applicant_list.js +++ b/hrms/hr/doctype/job_applicant/job_applicant_list.js @@ -1,7 +1,7 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2020, Xhive LLC // MIT License. See license.txt -frappe.listview_settings['Job Applicant'] = { +xhiveframework.listview_settings['Job Applicant'] = { add_fields: ["status"], get_indicator: function (doc) { if (doc.status == "Accepted") { diff --git a/hrms/hr/doctype/job_applicant/test_job_applicant.py b/hrms/hr/doctype/job_applicant/test_job_applicant.py index a22bd04..062fac2 100644 --- a/hrms/hr/doctype/job_applicant/test_job_applicant.py +++ b/hrms/hr/doctype/job_applicant/test_job_applicant.py @@ -1,16 +1,16 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -import frappe +import xhiveframework -from erpnext.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.designation.test_designation import create_designation class TestJobApplicant(unittest.TestCase): def test_job_applicant_naming(self): - applicant = frappe.get_doc( + applicant = xhiveframework.get_doc( { "doctype": "Job Applicant", "status": "Open", @@ -20,7 +20,7 @@ class TestJobApplicant(unittest.TestCase): ).insert() self.assertEqual(applicant.name, "job_applicant_naming@example.com") - applicant = frappe.get_doc( + applicant = xhiveframework.get_doc( { "doctype": "Job Applicant", "status": "Open", @@ -31,21 +31,21 @@ class TestJobApplicant(unittest.TestCase): self.assertEqual(applicant.name, "job_applicant_naming@example.com-1") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_job_applicant(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) filters = { "applicant_name": args.applicant_name or "_Test Applicant", "email_id": args.email_id or "test_applicant@example.com", } - if frappe.db.exists("Job Applicant", filters): - return frappe.get_doc("Job Applicant", filters) + if xhiveframework.db.exists("Job Applicant", filters): + return xhiveframework.get_doc("Job Applicant", filters) - job_applicant = frappe.get_doc( + job_applicant = xhiveframework.get_doc( { "doctype": "Job Applicant", "status": args.status or "Open", diff --git a/hrms/hr/doctype/job_applicant_source/job_applicant_source.js b/hrms/hr/doctype/job_applicant_source/job_applicant_source.js index 8725f23..a8de624 100644 --- a/hrms/hr/doctype/job_applicant_source/job_applicant_source.js +++ b/hrms/hr/doctype/job_applicant_source/job_applicant_source.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Job Applicant Source', { +xhiveframework.ui.form.on('Job Applicant Source', { refresh: function() { } diff --git a/hrms/hr/doctype/job_applicant_source/job_applicant_source.py b/hrms/hr/doctype/job_applicant_source/job_applicant_source.py index 1f208c1..9887866 100644 --- a/hrms/hr/doctype/job_applicant_source/job_applicant_source.py +++ b/hrms/hr/doctype/job_applicant_source/job_applicant_source.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class JobApplicantSource(Document): diff --git a/hrms/hr/doctype/job_applicant_source/test_job_applicant_source.py b/hrms/hr/doctype/job_applicant_source/test_job_applicant_source.py index cee5daf..2e8cf0b 100644 --- a/hrms/hr/doctype/job_applicant_source/test_job_applicant_source.py +++ b/hrms/hr/doctype/job_applicant_source/test_job_applicant_source.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/job_offer/job_offer.js b/hrms/hr/doctype/job_offer/job_offer.js index b246ed5..f84d2ee 100644 --- a/hrms/hr/doctype/job_offer/job_offer.js +++ b/hrms/hr/doctype/job_offer/job_offer.js @@ -1,9 +1,9 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.provide("erpnext.job_offer"); +xhiveframework.provide("xhiveerp.job_offer"); -frappe.ui.form.on("Job Offer", { +xhiveframework.ui.form.on("Job Offer", { onload: function (frm) { frm.set_query("select_terms", function() { return { filters: { hr: 1 } }; @@ -15,7 +15,7 @@ frappe.ui.form.on("Job Offer", { }, select_terms: function (frm) { - erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) { + xhiveerp.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) { if (!r.exc) { frm.set_value("terms", r.message); } @@ -27,7 +27,7 @@ frappe.ui.form.on("Job Offer", { && (frm.doc.docstatus === 1) && (!frm.doc.__onload || !frm.doc.__onload.employee)) { frm.add_custom_button(__('Create Employee'), function () { - erpnext.job_offer.make_employee(frm); + xhiveerp.job_offer.make_employee(frm); } ); } @@ -35,7 +35,7 @@ frappe.ui.form.on("Job Offer", { if(frm.doc.__onload && frm.doc.__onload.employee) { frm.add_custom_button(__('Show Employee'), function () { - frappe.set_route("Form", "Employee", frm.doc.__onload.employee); + xhiveframework.set_route("Form", "Employee", frm.doc.__onload.employee); } ); } @@ -43,8 +43,8 @@ frappe.ui.form.on("Job Offer", { }); -erpnext.job_offer.make_employee = function (frm) { - frappe.model.open_mapped_doc({ +xhiveerp.job_offer.make_employee = function (frm) { + xhiveframework.model.open_mapped_doc({ method: "hrms.hr.doctype.job_offer.job_offer.make_employee", frm: frm }); diff --git a/hrms/hr/doctype/job_offer/job_offer.py b/hrms/hr/doctype/job_offer/job_offer.py index d9c2951..3ea3bdd 100644 --- a/hrms/hr/doctype/job_offer/job_offer.py +++ b/hrms/hr/doctype/job_offer/job_offer.py @@ -1,49 +1,49 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# Copyright (c) 2015, Xhive LLC and contributors # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import cint, flt, get_link_to_form +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.model.mapper import get_mapped_doc +from xhiveframework.utils import cint, flt, get_link_to_form class JobOffer(Document): def onload(self): - employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") or "" + employee = xhiveframework.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") or "" self.set_onload("employee", employee) def validate(self): self.validate_vacancies() - job_offer = frappe.db.exists( + job_offer = xhiveframework.db.exists( "Job Offer", {"job_applicant": self.job_applicant, "docstatus": ["!=", 2]} ) if job_offer and job_offer != self.name: - frappe.throw( + xhiveframework.throw( _("Job Offer: {0} is already for Job Applicant: {1}").format( - frappe.bold(job_offer), frappe.bold(self.job_applicant) + xhiveframework.bold(job_offer), xhiveframework.bold(self.job_applicant) ) ) def validate_vacancies(self): staffing_plan = get_staffing_plan_detail(self.designation, self.company, self.offer_date) - check_vacancies = frappe.get_single("HR Settings").check_vacancies + check_vacancies = xhiveframework.get_single("HR Settings").check_vacancies if staffing_plan and check_vacancies: job_offers = self.get_job_offer(staffing_plan.from_date, staffing_plan.to_date) if not staffing_plan.get("vacancies") or cint(staffing_plan.vacancies) - len(job_offers) <= 0: - error_variable = "for " + frappe.bold(self.designation) + error_variable = "for " + xhiveframework.bold(self.designation) if staffing_plan.get("parent"): - error_variable = frappe.bold(get_link_to_form("Staffing Plan", staffing_plan.parent)) + error_variable = xhiveframework.bold(get_link_to_form("Staffing Plan", staffing_plan.parent)) - frappe.throw(_("There are no vacancies under staffing plan {0}").format(error_variable)) + xhiveframework.throw(_("There are no vacancies under staffing plan {0}").format(error_variable)) def on_change(self): update_job_applicant(self.status, self.job_applicant) def get_job_offer(self, from_date, to_date): """Returns job offer created during a time period""" - return frappe.get_all( + return xhiveframework.get_all( "Job Offer", filters={ "offer_date": ["between", (from_date, to_date)], @@ -57,11 +57,11 @@ class JobOffer(Document): def update_job_applicant(status, job_applicant): if status in ("Accepted", "Rejected"): - frappe.set_value("Job Applicant", job_applicant, "status", status) + xhiveframework.set_value("Job Applicant", job_applicant, "status", status) def get_staffing_plan_detail(designation, company, offer_date): - detail = frappe.db.sql( + detail = xhiveframework.db.sql( """ SELECT DISTINCT spd.parent, sp.from_date as from_date, @@ -81,13 +81,13 @@ def get_staffing_plan_detail(designation, company, offer_date): as_dict=1, ) - return frappe._dict(detail[0]) if (detail and detail[0].parent) else None + return xhiveframework._dict(detail[0]) if (detail and detail[0].parent) else None -@frappe.whitelist() +@xhiveframework.whitelist() def make_employee(source_name, target_doc=None): def set_missing_values(source, target): - target.personal_email, target.first_name = frappe.db.get_value( + target.personal_email, target.first_name = xhiveframework.db.get_value( "Job Applicant", source.job_applicant, ["email_id", "applicant_name"] ) @@ -106,7 +106,7 @@ def make_employee(source_name, target_doc=None): return doc -@frappe.whitelist() +@xhiveframework.whitelist() def get_offer_acceptance_rate(company=None, department=None): filters = {"docstatus": 1} if company: @@ -114,10 +114,10 @@ def get_offer_acceptance_rate(company=None, department=None): if department: filters["department"] = department - total_offers = frappe.db.count("Job Offer", filters=filters) + total_offers = xhiveframework.db.count("Job Offer", filters=filters) filters["status"] = "Accepted" - total_accepted = frappe.db.count("Job Offer", filters=filters) + total_accepted = xhiveframework.db.count("Job Offer", filters=filters) return { "value": flt(total_accepted) / flt(total_offers) * 100 if total_offers else 0, diff --git a/hrms/hr/doctype/job_offer/job_offer_list.js b/hrms/hr/doctype/job_offer/job_offer_list.js index 4fa5be7..b9938ec 100644 --- a/hrms/hr/doctype/job_offer/job_offer_list.js +++ b/hrms/hr/doctype/job_offer/job_offer_list.js @@ -1,7 +1,7 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2020, Xhive LLC // MIT License. See license.txt -frappe.listview_settings['Job Offer'] = { +xhiveframework.listview_settings['Job Offer'] = { add_fields: ["company", "designation", "job_applicant", "status"], get_indicator: function (doc) { if (doc.status == "Accepted") { diff --git a/hrms/hr/doctype/job_offer/test_job_offer.py b/hrms/hr/doctype/job_offer/test_job_offer.py index 49d9f7b..6562c0f 100644 --- a/hrms/hr/doctype/job_offer/test_job_offer.py +++ b/hrms/hr/doctype/job_offer/test_job_offer.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, nowdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, nowdate -from erpnext.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.designation.test_designation import create_designation from hrms.hr.doctype.job_applicant.job_applicant import get_applicant_to_hire_percentage from hrms.hr.doctype.job_applicant.test_job_applicant import create_job_applicant @@ -15,15 +15,15 @@ from hrms.hr.doctype.job_offer.job_offer import get_offer_acceptance_rate from hrms.hr.doctype.staffing_plan.test_staffing_plan import make_company -class TestJobOffer(FrappeTestCase): +class TestJobOffer(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Job Applicant") - frappe.db.delete("Job Offer") + xhiveframework.db.delete("Job Applicant") + xhiveframework.db.delete("Job Offer") create_designation(designation_name="Researcher") def test_job_offer_creation_against_vacancies(self): - frappe.db.set_value("HR Settings", None, "check_vacancies", 1) + xhiveframework.db.set_value("HR Settings", None, "check_vacancies", 1) job_applicant = create_job_applicant(email_id="test_job_offer@example.com") job_offer = create_job_offer(job_applicant=job_applicant.name, designation="UX Designer") @@ -33,15 +33,15 @@ class TestJobOffer(FrappeTestCase): {"designation": "UX Designer", "vacancies": 0, "estimated_cost_per_position": 5000} ], ) - self.assertRaises(frappe.ValidationError, job_offer.submit) + self.assertRaises(xhiveframework.ValidationError, job_offer.submit) # test creation of job offer when vacancies are not present - frappe.db.set_value("HR Settings", None, "check_vacancies", 0) + xhiveframework.db.set_value("HR Settings", None, "check_vacancies", 0) job_offer.submit() - self.assertTrue(frappe.db.exists("Job Offer", job_offer.name)) + self.assertTrue(xhiveframework.db.exists("Job Offer", job_offer.name)) def test_job_applicant_update(self): - frappe.db.set_value("HR Settings", None, "check_vacancies", 0) + xhiveframework.db.set_value("HR Settings", None, "check_vacancies", 0) create_staffing_plan() job_applicant = create_job_applicant(email_id="test_job_applicants@example.com") job_offer = create_job_offer(job_applicant=job_applicant.name) @@ -54,7 +54,7 @@ class TestJobOffer(FrappeTestCase): job_offer.submit() job_applicant.reload() self.assertEquals(job_applicant.status, "Rejected") - frappe.db.set_value("HR Settings", None, "check_vacancies", 1) + xhiveframework.db.set_value("HR Settings", None, "check_vacancies", 1) def test_recruitment_metrics(self): job_applicant1 = create_job_applicant(email_id="test_job_applicant1@example.com") @@ -73,14 +73,14 @@ class TestJobOffer(FrappeTestCase): def create_job_offer(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) if not args.job_applicant: job_applicant = create_job_applicant() - if not frappe.db.exists("Designation", args.designation): + if not xhiveframework.db.exists("Designation", args.designation): designation = create_designation(designation_name=args.designation) - job_offer = frappe.get_doc( + job_offer = xhiveframework.get_doc( { "doctype": "Job Offer", "job_applicant": args.job_applicant or job_applicant.name, @@ -93,12 +93,12 @@ def create_job_offer(**args): def create_staffing_plan(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) make_company() - frappe.db.set_value("Company", "_Test Company", "is_group", 1) - if frappe.db.exists("Staffing Plan", args.name or "Test"): + xhiveframework.db.set_value("Company", "_Test Company", "is_group", 1) + if xhiveframework.db.exists("Staffing Plan", args.name or "Test"): return - staffing_plan = frappe.get_doc( + staffing_plan = xhiveframework.get_doc( { "doctype": "Staffing Plan", "name": args.name or "Test", diff --git a/hrms/hr/doctype/job_offer_term/job_offer_term.py b/hrms/hr/doctype/job_offer_term/job_offer_term.py index d2eae46..e4d96e7 100644 --- a/hrms/hr/doctype/job_offer_term/job_offer_term.py +++ b/hrms/hr/doctype/job_offer_term/job_offer_term.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# Copyright (c) 2015, Xhive LLC and contributors # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class JobOfferTerm(Document): diff --git a/hrms/hr/doctype/job_opening/job_opening.js b/hrms/hr/doctype/job_opening/job_opening.js index 9cdb44e..c26f2bd 100644 --- a/hrms/hr/doctype/job_opening/job_opening.js +++ b/hrms/hr/doctype/job_opening/job_opening.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Job Opening', { +xhiveframework.ui.form.on('Job Opening', { onload: function(frm) { frm.set_query("department", function() { return { @@ -13,12 +13,12 @@ frappe.ui.form.on('Job Opening', { }, designation: function(frm) { if(frm.doc.designation && frm.doc.company){ - frappe.call({ + xhiveframework.call({ "method": "hrms.hr.doctype.staffing_plan.staffing_plan.get_active_staffing_plan_details", args: { company: frm.doc.company, designation: frm.doc.designation, - date: frappe.datetime.now_date() // ToDo - Date in Job Opening? + date: xhiveframework.datetime.now_date() // ToDo - Date in Job Opening? }, callback: function (data) { if(data.message){ @@ -27,7 +27,7 @@ frappe.ui.form.on('Job Opening', { } else { frm.set_value('staffing_plan', ""); frm.set_value('planned_vacancies', 0); - frappe.show_alert({ + xhiveframework.show_alert({ indicator: 'orange', message: __('No Staffing Plans found for this Designation') }); diff --git a/hrms/hr/doctype/job_opening/job_opening.py b/hrms/hr/doctype/job_opening/job_opening.py index 266a6a2..8872c56 100644 --- a/hrms/hr/doctype/job_opening/job_opening.py +++ b/hrms/hr/doctype/job_opening/job_opening.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.utils import get_link_to_form, getdate -from frappe.website.website_generator import WebsiteGenerator +import xhiveframework +from xhiveframework import _ +from xhiveframework.utils import get_link_to_form, getdate +from xhiveframework.website.website_generator import WebsiteGenerator from hrms.hr.doctype.staffing_plan.staffing_plan import ( get_active_staffing_plan_details, @@ -16,7 +16,7 @@ from hrms.hr.doctype.staffing_plan.staffing_plan import ( class JobOpening(WebsiteGenerator): - website = frappe._dict( + website = xhiveframework._dict( template="templates/generators/job_opening.html", condition_field="publish", page_title_field="job_title", @@ -24,7 +24,7 @@ class JobOpening(WebsiteGenerator): def validate(self): if not self.route: - self.route = frappe.scrub(self.job_title).replace("_", "-") + self.route = xhiveframework.scrub(self.job_title).replace("_", "-") self.validate_current_vacancies() self.update_job_requisition_status() @@ -35,37 +35,37 @@ class JobOpening(WebsiteGenerator): self.staffing_plan = staffing_plan[0].name self.planned_vacancies = staffing_plan[0].vacancies elif not self.planned_vacancies: - self.planned_vacancies = frappe.db.get_value( + self.planned_vacancies = xhiveframework.db.get_value( "Staffing Plan Detail", {"parent": self.staffing_plan, "designation": self.designation}, "vacancies", ) if self.staffing_plan and self.planned_vacancies: - staffing_plan_company = frappe.db.get_value("Staffing Plan", self.staffing_plan, "company") + staffing_plan_company = xhiveframework.db.get_value("Staffing Plan", self.staffing_plan, "company") designation_counts = get_designation_counts(self.designation, self.company, self.name) current_count = designation_counts["employee_count"] + designation_counts["job_openings"] - number_of_positions = frappe.db.get_value( + number_of_positions = xhiveframework.db.get_value( "Staffing Plan Detail", {"parent": self.staffing_plan, "designation": self.designation}, "number_of_positions", ) if number_of_positions <= current_count: - frappe.throw( + xhiveframework.throw( _( "Job Openings for the designation {0} are already open or the hiring is complete as per the Staffing Plan {1}" ).format( - frappe.bold(self.designation), get_link_to_form("Staffing Plan", self.staffing_plan) + xhiveframework.bold(self.designation), get_link_to_form("Staffing Plan", self.staffing_plan) ), title=_("Vacancies fulfilled"), ) def update_job_requisition_status(self): if self.status == "Closed" and self.job_requisition: - job_requisition = frappe.get_doc("Job Requisition", self.job_requisition) + job_requisition = xhiveframework.get_doc("Job Requisition", self.job_requisition) job_requisition.status = "Filled" job_requisition.completed_on = getdate() job_requisition.flags.ignore_permissions = True @@ -105,6 +105,6 @@ def get_job_openings( {"job_title": ["like", "%{0}%".format(txt)], "description": ["like", "%{0}%".format(txt)]} ) - return frappe.get_all( + return xhiveframework.get_all( doctype, filters, fields, start=limit_start, page_length=limit_page_length, order_by=order_by ) diff --git a/hrms/hr/doctype/job_opening/templates/job_opening_row.html b/hrms/hr/doctype/job_opening/templates/job_opening_row.html index cc8523e..548fc30 100644 --- a/hrms/hr/doctype/job_opening/templates/job_opening_row.html +++ b/hrms/hr/doctype/job_opening/templates/job_opening_row.html @@ -2,7 +2,7 @@

{{ doc.job_title }}

{{ doc.description }}

{%- if doc.publish_salary_range -%} -

{{_("Salary range per month")}}: {{ frappe.format_value(frappe.utils.flt(doc.lower_range), currency=doc.currency) }} - {{ frappe.format_value(frappe.utils.flt(doc.upper_range), currency=doc.currency) }}

+

{{_("Salary range per month")}}: {{ xhiveframework.format_value(xhiveframework.utils.flt(doc.lower_range), currency=doc.currency) }} - {{ xhiveframework.format_value(xhiveframework.utils.flt(doc.upper_range), currency=doc.currency) }}

{% endif %}
{%- if doc.job_application_route -%} diff --git a/hrms/hr/doctype/job_opening/test_job_opening.py b/hrms/hr/doctype/job_opening/test_job_opening.py index 2689754..590be55 100644 --- a/hrms/hr/doctype/job_opening/test_job_opening.py +++ b/hrms/hr/doctype/job_opening/test_job_opening.py @@ -1,32 +1,32 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, getdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.staffing_plan.test_staffing_plan import make_company -class TestJobOpening(FrappeTestCase): +class TestJobOpening(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Staffing Plan") - frappe.db.delete("Staffing Plan Detail") - frappe.db.delete("Job Opening") + xhiveframework.db.delete("Staffing Plan") + xhiveframework.db.delete("Staffing Plan Detail") + xhiveframework.db.delete("Job Opening") make_company("_Test Opening Company", "_TOC") - frappe.db.delete("Employee", {"company": "_Test Opening Company"}) + xhiveframework.db.delete("Employee", {"company": "_Test Opening Company"}) def test_vacancies_fulfilled(self): make_employee( "test_job_opening@example.com", company="_Test Opening Company", designation="Designer" ) - staffing_plan = frappe.get_doc( + staffing_plan = xhiveframework.get_doc( { "doctype": "Staffing Plan", "company": "_Test Opening Company", @@ -51,7 +51,7 @@ class TestJobOpening(FrappeTestCase): # vacancies as per staffing plan already fulfilled via job opening and existing employee count opening_2 = get_job_opening(job_title="Designer New") - self.assertRaises(frappe.ValidationError, opening_2.insert) + self.assertRaises(xhiveframework.ValidationError, opening_2.insert) # allows updating existing job opening opening_1.status = "Closed" @@ -59,13 +59,13 @@ class TestJobOpening(FrappeTestCase): def get_job_opening(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) - opening = frappe.db.exists("Job Opening", {"job_title": args.job_title or "Designer"}) + opening = xhiveframework.db.exists("Job Opening", {"job_title": args.job_title or "Designer"}) if opening: - return frappe.get_doc("Job Opening", opening) + return xhiveframework.get_doc("Job Opening", opening) - opening = frappe.get_doc( + opening = xhiveframework.get_doc( { "doctype": "Job Opening", "job_title": "Designer", diff --git a/hrms/hr/doctype/job_requisition/job_requisition.js b/hrms/hr/doctype/job_requisition/job_requisition.js index 61c1124..d72ba4d 100644 --- a/hrms/hr/doctype/job_requisition/job_requisition.js +++ b/hrms/hr/doctype/job_requisition/job_requisition.js @@ -1,10 +1,10 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2022, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Job Requisition", { +xhiveframework.ui.form.on("Job Requisition", { refresh: function(frm) { if (!frm.doc.__islocal && !["Filled", "On Hold", "Cancelled"].includes(frm.doc.status)) { - frappe.db.get_list("Employee Referral", { + xhiveframework.db.get_list("Employee Referral", { filters: { for_designation: frm.doc.designation, status: "Pending" } }).then((data) => { if (data && data.length) { @@ -18,7 +18,7 @@ frappe.ui.form.on("Job Requisition", { $("#referral_links").on("click", (e) => { e.preventDefault(); - frappe.set_route("List", "Employee Referral", { + xhiveframework.set_route("List", "Employee Referral", { for_designation: frm.doc.designation, status: "Pending" }); @@ -29,14 +29,14 @@ frappe.ui.form.on("Job Requisition", { if (frm.doc.status === "Open & Approved") { frm.add_custom_button(__("Create Job Opening"), () => { - frappe.model.open_mapped_doc({ + xhiveframework.model.open_mapped_doc({ method: "hrms.hr.doctype.job_requisition.job_requisition.make_job_opening", frm: frm }); }, __("Actions")); frm.add_custom_button(__("Associate Job Opening"), () => { - frappe.prompt({ + xhiveframework.prompt({ label: __("Job Opening"), fieldname: "job_opening", fieldtype: "Link", diff --git a/hrms/hr/doctype/job_requisition/job_requisition.py b/hrms/hr/doctype/job_requisition/job_requisition.py index e92610d..33d4169 100644 --- a/hrms/hr/doctype/job_requisition/job_requisition.py +++ b/hrms/hr/doctype/job_requisition/job_requisition.py @@ -1,11 +1,11 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import format_duration, get_link_to_form, time_diff_in_seconds +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.model.mapper import get_mapped_doc +from xhiveframework.utils import format_duration, get_link_to_form, time_diff_in_seconds class JobRequisition(Document): @@ -14,7 +14,7 @@ class JobRequisition(Document): self.set_time_to_fill() def validate_duplicates(self): - duplicate = frappe.db.exists( + duplicate = xhiveframework.db.exists( "Job Requisition", { "designation": self.designation, @@ -26,10 +26,10 @@ class JobRequisition(Document): ) if duplicate: - frappe.throw( + xhiveframework.throw( _("A Job Requisition for {0} requested by {1} already exists: {2}").format( - frappe.bold(self.designation), - frappe.bold(self.requested_by), + xhiveframework.bold(self.designation), + xhiveframework.bold(self.requested_by), get_link_to_form("Job Requisition", duplicate), ), title=_("Duplicate Job Requisition"), @@ -39,25 +39,25 @@ class JobRequisition(Document): if self.status == "Filled" and self.completed_on: self.time_to_fill = time_diff_in_seconds(self.completed_on, self.posting_date) - @frappe.whitelist() + @xhiveframework.whitelist() def associate_job_opening(self, job_opening): - frappe.db.set_value( + xhiveframework.db.set_value( "Job Opening", job_opening, {"job_requisition": self.name, "vacancies": self.no_of_positions} ) - frappe.msgprint( + xhiveframework.msgprint( _("Job Requisition {0} has been associated with Job Opening {1}").format( - frappe.bold(self.name), get_link_to_form("Job Opening", job_opening) + xhiveframework.bold(self.name), get_link_to_form("Job Opening", job_opening) ), title=_("Job Opening Associated"), ) -@frappe.whitelist() +@xhiveframework.whitelist() def make_job_opening(source_name, target_doc=None): def set_missing_values(source, target): target.job_title = source.designation target.status = "Open" - target.currency = frappe.db.get_value("Company", source.company, "default_currency") + target.currency = xhiveframework.db.get_value("Company", source.company, "default_currency") target.lower_range = source.expected_compensation target.description = source.description @@ -80,7 +80,7 @@ def make_job_opening(source_name, target_doc=None): ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_avg_time_to_fill(company=None, department=None, designation=None): filters = {"status": "Filled"} if company: @@ -90,7 +90,7 @@ def get_avg_time_to_fill(company=None, department=None, designation=None): if designation: filters["designation"] = designation - avg_time_to_fill = frappe.db.get_all( + avg_time_to_fill = xhiveframework.db.get_all( "Job Requisition", filters=filters, fields=["avg(time_to_fill) as average_time"], diff --git a/hrms/hr/doctype/job_requisition/job_requisition_list.js b/hrms/hr/doctype/job_requisition/job_requisition_list.js index 6e2d3d8..0cc35f8 100644 --- a/hrms/hr/doctype/job_requisition/job_requisition_list.js +++ b/hrms/hr/doctype/job_requisition/job_requisition_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Job Requisition"] = { +xhiveframework.listview_settings["Job Requisition"] = { get_indicator: function(doc) { const status_color = { "Pending": "yellow", diff --git a/hrms/hr/doctype/job_requisition/test_job_requisition.py b/hrms/hr/doctype/job_requisition/test_job_requisition.py index 2d68ab5..61798dc 100644 --- a/hrms/hr/doctype/job_requisition/test_job_requisition.py +++ b/hrms/hr/doctype/job_requisition/test_job_requisition.py @@ -1,17 +1,17 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -from erpnext.setup.doctype.designation.test_designation import create_designation -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.designation.test_designation import create_designation +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.job_opening.test_job_opening import get_job_opening from hrms.hr.doctype.job_requisition.job_requisition import make_job_opening -class TestJobRequisition(FrappeTestCase): +class TestJobRequisition(XhiveframeworkTestCase): def setUp(self): self.employee = make_employee("test_employee_1@company.com", company="_Test Company") @@ -47,15 +47,15 @@ class TestJobRequisition(FrappeTestCase): def make_job_requisition(**args): - frappe.db.delete("Job Requisition") - args = frappe._dict(args) + xhiveframework.db.delete("Job Requisition") + args = xhiveframework._dict(args) - return frappe.get_doc( + return xhiveframework.get_doc( { "doctype": "Job Requisition", "designation": args.designation or create_designation().name, "department": args.department - or frappe.db.get_value("Employee", args.requested_by, "department"), + or xhiveframework.db.get_value("Employee", args.requested_by, "department"), "no_of_positions": args.no_of_positions or 1, "expected_compensation": args.expected_compensation or 500000, "company": "_Test Company", diff --git a/hrms/hr/doctype/kra/kra.js b/hrms/hr/doctype/kra/kra.js index 237ba0e..9ff5820 100644 --- a/hrms/hr/doctype/kra/kra.js +++ b/hrms/hr/doctype/kra/kra.js @@ -1,7 +1,7 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2022, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('KRA', { +xhiveframework.ui.form.on('KRA', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/kra/kra.py b/hrms/hr/doctype/kra/kra.py index c56a36a..06a600d 100644 --- a/hrms/hr/doctype/kra/kra.py +++ b/hrms/hr/doctype/kra/kra.py @@ -1,8 +1,8 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class KRA(Document): diff --git a/hrms/hr/doctype/kra/test_kra.py b/hrms/hr/doctype/kra/test_kra.py index 3f05a6a..08f6451 100644 --- a/hrms/hr/doctype/kra/test_kra.py +++ b/hrms/hr/doctype/kra/test_kra.py @@ -1,9 +1,9 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Xhive LLC # See license.txt -# import frappe -from frappe.tests.utils import FrappeTestCase +# import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase -class TestKRA(FrappeTestCase): +class TestKRA(XhiveframeworkTestCase): pass diff --git a/hrms/hr/doctype/leave_allocation/leave_allocation.js b/hrms/hr/doctype/leave_allocation/leave_allocation.js index 4bd60bf..d5b69d6 100644 --- a/hrms/hr/doctype/leave_allocation/leave_allocation.js +++ b/hrms/hr/doctype/leave_allocation/leave_allocation.js @@ -1,18 +1,18 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); -frappe.ui.form.on("Leave Allocation", { +xhiveframework.ui.form.on("Leave Allocation", { onload: function(frm) { // Ignore cancellation of doctype on cancel all. frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; - if (!frm.doc.from_date) frm.set_value("from_date", frappe.datetime.get_today()); + if (!frm.doc.from_date) frm.set_value("from_date", xhiveframework.datetime.get_today()); frm.set_query("employee", function() { return { - query: "erpnext.controllers.queries.employee_query" + query: "xhiveerp.controllers.queries.employee_query" }; }); frm.set_query("leave_type", function() { @@ -26,7 +26,7 @@ frappe.ui.form.on("Leave Allocation", { refresh: function(frm) { if (frm.doc.docstatus === 1 && frm.doc.expired) { - var valid_expiry = moment(frappe.datetime.get_today()).isBetween(frm.doc.from_date, frm.doc.to_date); + var valid_expiry = moment(xhiveframework.datetime.get_today()).isBetween(frm.doc.from_date, frm.doc.to_date); if (valid_expiry) { // expire current allocation frm.add_custom_button(__('Expire Allocation'), function() { @@ -36,7 +36,7 @@ frappe.ui.form.on("Leave Allocation", { } if (!frm.doc.__islocal && frm.doc.leave_policy_assignment) { - frappe.db.get_value("Leave Type", frm.doc.leave_type, "is_earned_leave", (r) => { + xhiveframework.db.get_value("Leave Type", frm.doc.leave_type, "is_earned_leave", (r) => { if (cint(r?.is_earned_leave)) frm.set_df_property("new_leaves_allocated", "read_only", 1); }); @@ -44,16 +44,16 @@ frappe.ui.form.on("Leave Allocation", { }, expire_allocation: function(frm) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry.expire_allocation', args: { 'allocation': frm.doc, - 'expiry_date': frappe.datetime.get_today() + 'expiry_date': xhiveframework.datetime.get_today() }, freeze: true, callback: function(r) { if (!r.exc) { - frappe.msgprint(__("Allocation Expired!")); + xhiveframework.msgprint(__("Allocation Expired!")); } frm.refresh(); } @@ -85,7 +85,7 @@ frappe.ui.form.on("Leave Allocation", { leave_policy: function(frm) { if (frm.doc.leave_policy && frm.doc.leave_type) { - frappe.db.get_value("Leave Policy Detail", { + xhiveframework.db.get_value("Leave Policy Detail", { 'parent': frm.doc.leave_policy, 'leave_type': frm.doc.leave_type }, 'annual_allocation', (r) => { @@ -95,7 +95,7 @@ frappe.ui.form.on("Leave Allocation", { }, calculate_total_leaves_allocated: function(frm) { if (cint(frm.doc.carry_forward) == 1 && frm.doc.leave_type && frm.doc.employee) { - return frappe.call({ + return xhiveframework.call({ method: "set_total_leaves_allocated", doc: frm.doc, callback: function() { @@ -109,7 +109,7 @@ frappe.ui.form.on("Leave Allocation", { } }); -frappe.tour["Leave Allocation"] = [ +xhiveframework.tour["Leave Allocation"] = [ { fieldname: "employee", title: "Employee", diff --git a/hrms/hr/doctype/leave_allocation/leave_allocation.py b/hrms/hr/doctype/leave_allocation/leave_allocation.py index fe34dea..8051836 100644 --- a/hrms/hr/doctype/leave_allocation/leave_allocation.py +++ b/hrms/hr/doctype/leave_allocation/leave_allocation.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, date_diff, flt, formatdate, get_link_to_form, getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import add_days, date_diff, flt, formatdate, get_link_to_form, getdate from hrms.hr.doctype.leave_application.leave_application import get_approved_leaves_for_period from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import ( @@ -15,23 +15,23 @@ from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import ( from hrms.hr.utils import get_leave_period, set_employee_name -class OverlapError(frappe.ValidationError): +class OverlapError(xhiveframework.ValidationError): pass -class BackDatedAllocationError(frappe.ValidationError): +class BackDatedAllocationError(xhiveframework.ValidationError): pass -class OverAllocationError(frappe.ValidationError): +class OverAllocationError(xhiveframework.ValidationError): pass -class LessAllocationError(frappe.ValidationError): +class LessAllocationError(xhiveframework.ValidationError): pass -class ValueMultiplierError(frappe.ValidationError): +class ValueMultiplierError(xhiveframework.ValidationError): pass @@ -51,10 +51,10 @@ class LeaveAllocation(Document): self.validate_leave_allocation_days() def validate_leave_allocation_days(self): - company = frappe.db.get_value("Employee", self.employee, "company") + company = xhiveframework.db.get_value("Employee", self.employee, "company") leave_period = get_leave_period(self.from_date, self.to_date, company) max_leaves_allowed = flt( - frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") + xhiveframework.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") ) if max_leaves_allowed > 0: leave_allocated = 0 @@ -68,7 +68,7 @@ class LeaveAllocation(Document): ) leave_allocated += flt(self.new_leaves_allocated) if leave_allocated > max_leaves_allowed: - frappe.throw( + xhiveframework.throw( _( "Total allocated leaves are more than maximum allocation allowed for {0} leave type for employee {1} in the period" ).format(self.leave_type, self.employee), @@ -90,7 +90,7 @@ class LeaveAllocation(Document): if self.carry_forward: self.set_carry_forwarded_leaves_in_previous_allocation(on_cancel=True) - # nosemgrep: frappe-semgrep-rules.rules.frappe-modifying-but-not-comitting + # nosemgrep: xhiveframework-semgrep-rules.rules.xhiveframework-modifying-but-not-comitting def on_update_after_submit(self): if self.has_value_changed("new_leaves_allocated"): self.validate_earned_leave_update() @@ -116,7 +116,7 @@ class LeaveAllocation(Document): self.db_update() def get_existing_leave_count(self): - ledger_entries = frappe.get_all( + ledger_entries = xhiveframework.get_all( "Leave Ledger Entry", filters={ "transaction_type": "Leave Allocation", @@ -133,31 +133,31 @@ class LeaveAllocation(Document): return ledger_entries[0].total_leaves if ledger_entries else 0 def validate_earned_leave_update(self): - if self.leave_policy_assignment and frappe.db.get_value( + if self.leave_policy_assignment and xhiveframework.db.get_value( "Leave Type", self.leave_type, "is_earned_leave" ): msg = _("Cannot update allocation for {0} after submission").format( - frappe.bold(_("Earned Leaves")) + xhiveframework.bold(_("Earned Leaves")) ) msg += "

" msg += _( "Earned Leaves are auto-allocated via scheduler based on the annual allocation set in the Leave Policy: {0}" ).format(get_link_to_form("Leave Policy", self.leave_policy)) - frappe.throw(msg, title=_("Not Allowed")) + xhiveframework.throw(msg, title=_("Not Allowed")) def validate_against_leave_applications(self): leaves_taken = get_approved_leaves_for_period( self.employee, self.leave_type, self.from_date, self.to_date ) if flt(leaves_taken) > flt(self.total_leaves_allocated): - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): - frappe.msgprint( + if xhiveframework.db.get_value("Leave Type", self.leave_type, "allow_negative"): + xhiveframework.msgprint( _( "Note: Total allocated leaves {0} shouldn't be less than already approved leaves {1} for the period" ).format(self.total_leaves_allocated, leaves_taken) ) else: - frappe.throw( + xhiveframework.throw( _( "Total allocated leaves {0} cannot be less than already approved leaves {1} for the period" ).format(self.total_leaves_allocated, leaves_taken), @@ -165,27 +165,27 @@ class LeaveAllocation(Document): ) def update_leave_policy_assignments_when_no_allocations_left(self): - allocations = frappe.db.get_list( + allocations = xhiveframework.db.get_list( "Leave Allocation", filters={"docstatus": 1, "leave_policy_assignment": self.leave_policy_assignment}, ) if len(allocations) == 0: - frappe.db.set_value( + xhiveframework.db.set_value( "Leave Policy Assignment", self.leave_policy_assignment, "leaves_allocated", 0 ) def validate_period(self): if date_diff(self.to_date, self.from_date) <= 0: - frappe.throw(_("To date cannot be before from date")) + xhiveframework.throw(_("To date cannot be before from date")) def validate_lwp(self): - if frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"): - frappe.throw( + if xhiveframework.db.get_value("Leave Type", self.leave_type, "is_lwp"): + xhiveframework.throw( _("Leave Type {0} cannot be allocated since it is leave without pay").format(self.leave_type) ) def validate_allocation_overlap(self): - leave_allocation = frappe.db.sql( + leave_allocation = xhiveframework.db.sql( """ SELECT name @@ -198,20 +198,20 @@ class LeaveAllocation(Document): ) if leave_allocation: - frappe.msgprint( + xhiveframework.msgprint( _("{0} already allocated for Employee {1} for period {2} to {3}").format( self.leave_type, self.employee, formatdate(self.from_date), formatdate(self.to_date) ) ) - frappe.throw( + xhiveframework.throw( _("Reference") + ': {0}'.format(leave_allocation[0][0]), OverlapError, ) def validate_back_dated_allocation(self): - future_allocation = frappe.db.sql( + future_allocation = xhiveframework.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""", @@ -220,14 +220,14 @@ class LeaveAllocation(Document): ) if future_allocation: - frappe.throw( + xhiveframework.throw( _( "Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}" ).format(formatdate(future_allocation[0].from_date), future_allocation[0].name), BackDatedAllocationError, ) - @frappe.whitelist() + @xhiveframework.whitelist() def set_total_leaves_allocated(self): self.unused_leaves = get_carry_forwarded_leaves( self.employee, self.leave_type, self.from_date, self.carry_forward @@ -242,15 +242,15 @@ class LeaveAllocation(Document): if ( not self.total_leaves_allocated - and not frappe.db.get_value("Leave Type", self.leave_type, "is_earned_leave") - and not frappe.db.get_value("Leave Type", self.leave_type, "is_compensatory") + and not xhiveframework.db.get_value("Leave Type", self.leave_type, "is_earned_leave") + and not xhiveframework.db.get_value("Leave Type", self.leave_type, "is_compensatory") ): - frappe.throw( + xhiveframework.throw( _("Total leaves allocated is mandatory for Leave Type {0}").format(self.leave_type) ) def limit_carry_forward_based_on_max_allowed_leaves(self): - max_leaves_allowed = frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") + max_leaves_allowed = xhiveframework.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") if max_leaves_allowed and self.total_leaves_allocated > flt(max_leaves_allowed): self.total_leaves_allocated = flt(max_leaves_allowed) self.unused_leaves = max_leaves_allowed - flt(self.new_leaves_allocated) @@ -261,7 +261,7 @@ class LeaveAllocation(Document): if on_cancel: self.unused_leaves = 0.0 if previous_allocation: - frappe.db.set_value( + xhiveframework.db.set_value( "Leave Allocation", previous_allocation.name, "carry_forwarded_leaves_count", @@ -272,14 +272,14 @@ class LeaveAllocation(Document): # Adding a day to include To Date in the difference date_difference = date_diff(self.to_date, self.from_date) + 1 if date_difference < self.total_leaves_allocated: - if frappe.db.get_value("Leave Type", self.leave_type, "allow_over_allocation"): - frappe.msgprint( + if xhiveframework.db.get_value("Leave Type", self.leave_type, "allow_over_allocation"): + xhiveframework.msgprint( _("Total Leaves Allocated are more than the number of days in the allocation period"), indicator="orange", alert=True, ) else: - frappe.throw( + xhiveframework.throw( _("Total Leaves Allocated are more than the number of days in the allocation period"), exc=OverAllocationError, title=_("Over Allocation"), @@ -287,7 +287,7 @@ class LeaveAllocation(Document): def create_leave_ledger_entry(self, submit=True): if self.unused_leaves: - expiry_days = frappe.db.get_value( + expiry_days = xhiveframework.db.get_value( "Leave Type", self.leave_type, "expire_carry_forwarded_leaves_after_days" ) end_date = add_days(self.from_date, expiry_days - 1) if expiry_days else self.to_date @@ -310,7 +310,7 @@ class LeaveAllocation(Document): def get_previous_allocation(from_date, leave_type, employee): """Returns document properties of previous allocation""" - return frappe.db.get_value( + return xhiveframework.db.get_value( "Leave Allocation", filters={ "to_date": ("<", from_date), @@ -327,11 +327,11 @@ def get_previous_allocation(from_date, leave_type, employee): def get_leave_allocation_for_period( employee, leave_type, from_date, to_date, exclude_allocation=None ): - from frappe.query_builder.functions import Sum + from xhiveframework.query_builder.functions import Sum - Allocation = frappe.qb.DocType("Leave Allocation") + Allocation = xhiveframework.qb.DocType("Leave Allocation") return ( - frappe.qb.from_(Allocation) + xhiveframework.qb.from_(Allocation) .select(Sum(Allocation.total_leaves_allocated).as_("total_allocated_leaves")) .where( (Allocation.employee == employee) @@ -347,7 +347,7 @@ def get_leave_allocation_for_period( ).run()[0][0] or 0.0 -@frappe.whitelist() +@xhiveframework.whitelist() def get_carry_forwarded_leaves(employee, leave_type, date, carry_forward=None): """Returns carry forwarded leaves for the given employee""" unused_leaves = 0.0 @@ -358,7 +358,7 @@ def get_carry_forwarded_leaves(employee, leave_type, date, carry_forward=None): employee, leave_type, previous_allocation.from_date, previous_allocation.to_date ) if unused_leaves: - max_carry_forwarded_leaves = frappe.db.get_value( + max_carry_forwarded_leaves = xhiveframework.db.get_value( "Leave Type", leave_type, "maximum_carry_forwarded_leaves" ) if max_carry_forwarded_leaves and unused_leaves > flt(max_carry_forwarded_leaves): @@ -369,7 +369,7 @@ def get_carry_forwarded_leaves(employee, leave_type, date, carry_forward=None): def get_unused_leaves(employee, leave_type, from_date, to_date): """Returns unused leaves between the given period while skipping leave allocation expiry""" - leaves = frappe.get_all( + leaves = xhiveframework.get_all( "Leave Ledger Entry", filters={ "employee": employee, @@ -384,5 +384,5 @@ def get_unused_leaves(employee, leave_type, from_date, to_date): def validate_carry_forward(leave_type): - if not frappe.db.get_value("Leave Type", leave_type, "is_carry_forward"): - frappe.throw(_("Leave Type {0} cannot be carry-forwarded").format(leave_type)) + if not xhiveframework.db.get_value("Leave Type", leave_type, "is_carry_forward"): + xhiveframework.throw(_("Leave Type {0} cannot be carry-forwarded").format(leave_type)) diff --git a/hrms/hr/doctype/leave_allocation/leave_allocation_list.js b/hrms/hr/doctype/leave_allocation/leave_allocation_list.js index 3ab176f..f6ad72a 100644 --- a/hrms/hr/doctype/leave_allocation/leave_allocation_list.js +++ b/hrms/hr/doctype/leave_allocation/leave_allocation_list.js @@ -1,8 +1,8 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2019, Xhive LLC // License: GNU General Public License v3. See license.txt // render -frappe.listview_settings['Leave Allocation'] = { +xhiveframework.listview_settings['Leave Allocation'] = { get_indicator: function(doc) { if(doc.status==="Expired") { return [__("Expired"), "gray", "expired, =, 1"]; diff --git a/hrms/hr/doctype/leave_allocation/test_earned_leaves.py b/hrms/hr/doctype/leave_allocation/test_earned_leaves.py index 8983e5b..f31c000 100644 --- a/hrms/hr/doctype/leave_allocation/test_earned_leaves.py +++ b/hrms/hr/doctype/leave_allocation/test_earned_leaves.py @@ -1,6 +1,6 @@ -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import ( +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import ( add_days, add_months, date_diff, @@ -12,7 +12,7 @@ from frappe.utils import ( getdate, ) -from erpnext.setup.doctype.holiday_list.test_holiday_list import set_holiday_list +from xhiveerp.setup.doctype.holiday_list.test_holiday_list import set_holiday_list from hrms.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation from hrms.hr.doctype.leave_application.leave_application import ( @@ -29,7 +29,7 @@ from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list from hrms.tests.test_utils import get_first_sunday -class TestLeaveAllocation(FrappeTestCase): +class TestLeaveAllocation(XhiveframeworkTestCase): def setUp(self): for doctype in [ "Leave Period", @@ -38,9 +38,9 @@ class TestLeaveAllocation(FrappeTestCase): "Leave Policy Assignment", "Leave Ledger Entry", ]: - frappe.db.delete(doctype) + xhiveframework.db.delete(doctype) - employee = frappe.get_doc("Employee", "_T-Employee-00001") + employee = xhiveframework.get_doc("Employee", "_T-Employee-00001") self.original_doj = employee.date_of_joining employee.date_of_joining = add_months(getdate(), -24) @@ -57,7 +57,7 @@ class TestLeaveAllocation(FrappeTestCase): """Tests if Earned Leave allocation is 0 initially as it happens via scheduler""" # second last day of the month # leaves allocated should be 0 since it is an earned leave and allocation happens via scheduler based on set frequency - frappe.flags.current_date = add_days(get_last_day(getdate()), -1) + xhiveframework.flags.current_date = add_days(get_last_day(getdate()), -1) leave_policy_assignments = make_policy_assignment(self.employee) leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) @@ -67,21 +67,21 @@ class TestLeaveAllocation(FrappeTestCase): """Tests if validation error is raised when updating Earned Leave allocation after submission""" leave_policy_assignments = make_policy_assignment(self.employee) - allocation = frappe.db.get_value( + allocation = xhiveframework.db.get_value( "Leave Allocation", {"leave_policy_assignment": leave_policy_assignments[0]}, "name", ) - allocation = frappe.get_doc("Leave Allocation", allocation) + allocation = xhiveframework.get_doc("Leave Allocation", allocation) allocation.new_leaves_allocated = 2 - self.assertRaises(frappe.ValidationError, allocation.save) + self.assertRaises(xhiveframework.ValidationError, allocation.save) def test_alloc_based_on_leave_period(self): """Case 1: Tests if assignment created one month after the leave period allocates 1 leave for past month""" start_date = get_first_day(add_months(getdate(), -1)) - frappe.flags.current_date = get_first_day(getdate()) + xhiveframework.flags.current_date = get_first_day(getdate()) leave_policy_assignments = make_policy_assignment(self.employee, start_date=start_date) leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) @@ -93,7 +93,7 @@ class TestLeaveAllocation(FrappeTestCase): since the daily job might have already executed (12:00:00 AM)""" start_date = get_first_day(add_months(getdate(), -2)) - frappe.flags.current_date = get_last_day(getdate()) + xhiveframework.flags.current_date = get_last_day(getdate()) leave_policy_assignments = make_policy_assignment(self.employee, start_date=start_date) leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) @@ -115,13 +115,13 @@ class TestLeaveAllocation(FrappeTestCase): ) leave_allocation.submit() - frappe.flags.current_date = get_last_day(add_months(getdate(), -1)) + xhiveframework.flags.current_date = get_last_day(add_months(getdate(), -1)) # carry forwarded leaves = 5, 2 leaves allocated for passed months leave_policy_assignments = make_policy_assignment( self.employee, start_date=start_date, carry_forward=1 ) - details = frappe.db.get_value( + details = xhiveframework.db.get_value( "Leave Allocation", {"leave_policy_assignment": leave_policy_assignments[0]}, ["total_leaves_allocated", "new_leaves_allocated", "unused_leaves", "name"], @@ -138,13 +138,13 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # assignment created on the last day of the current month - frappe.flags.current_date = get_last_day(getdate()) + xhiveframework.flags.current_date = get_last_day(getdate()) leave_policy_assignments = make_policy_assignment( self.employee, assignment_based_on="Joining Date" ) leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) - effective_from = frappe.db.get_value( + effective_from = xhiveframework.db.get_value( "Leave Policy Assignment", leave_policy_assignments[0], "effective_from" ) self.assertEqual(effective_from, self.employee.date_of_joining) @@ -159,7 +159,7 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # assignment created on the same day of the current month, should allocate leaves including the current month - frappe.flags.current_date = get_first_day(getdate()) + xhiveframework.flags.current_date = get_first_day(getdate()) leave_policy_assignments = make_policy_assignment( self.employee, start_date=start_date, allocate_on_day="Date of Joining" @@ -175,63 +175,63 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # assignment created on the first day of the current month - frappe.flags.current_date = get_first_day(getdate()) + xhiveframework.flags.current_date = get_first_day(getdate()) leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="Date of Joining", assignment_based_on="Joining Date" ) leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) - effective_from = frappe.db.get_value( + effective_from = xhiveframework.db.get_value( "Leave Policy Assignment", leave_policy_assignments[0], "effective_from" ) self.assertEqual(effective_from, self.employee.date_of_joining) self.assertEqual(leaves_allocated, 3) def test_earned_leaves_creation(self): - frappe.flags.current_date = get_year_start(getdate()) + xhiveframework.flags.current_date = get_year_start(getdate()) make_policy_assignment( self.employee, annual_allocation=6, allocate_on_day="First Day", - start_date=frappe.flags.current_date, + start_date=xhiveframework.flags.current_date, ) # leaves for 6 months = 3, but max leaves restricts allocation to 2 - frappe.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 2) + xhiveframework.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 2) allocate_earned_leaves_for_months(6) self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 2 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 2 ) # validate earned leaves creation without maximum leaves - frappe.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 0) + xhiveframework.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 0) allocate_earned_leaves_for_months(6) self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 5 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 5 ) def test_overallocation(self): """Tests earned leave allocation does not exceed annual allocation""" - frappe.flags.current_date = get_year_start(getdate()) + xhiveframework.flags.current_date = get_year_start(getdate()) make_policy_assignment( self.employee, annual_allocation=22, allocate_on_day="First Day", - start_date=frappe.flags.current_date, + start_date=xhiveframework.flags.current_date, ) # leaves for 12 months = 22 # With rounding, 22 leaves would be allocated in 11 months only - frappe.db.set_value("Leave Type", self.leave_type, "rounding", 1.0) + xhiveframework.db.set_value("Leave Type", self.leave_type, "rounding", 1.0) allocate_earned_leaves_for_months(11) self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 22 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 22 ) # should not allocate more leaves than annual allocation allocate_earned_leaves_for_months(1) self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 22 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 22 ) def test_over_allocation_during_assignment_creation(self): @@ -243,7 +243,7 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # create backdated assignment for last year - frappe.flags.current_date = get_first_day(getdate()) + xhiveframework.flags.current_date = get_first_day(getdate()) leave_policy_assignments = make_policy_assignment( self.employee, start_date=start_date, allocate_on_day="Date of Joining" @@ -270,7 +270,7 @@ class TestLeaveAllocation(FrappeTestCase): ) leave_allocation.submit() - frappe.flags.current_date = year_start + xhiveframework.flags.current_date = year_start # carry forwarded leaves = 5 make_policy_assignment( self.employee, @@ -280,18 +280,18 @@ class TestLeaveAllocation(FrappeTestCase): carry_forward=True, ) - frappe.db.set_value("Leave Type", self.leave_type, "rounding", 1.0) + xhiveframework.db.set_value("Leave Type", self.leave_type, "rounding", 1.0) allocate_earned_leaves_for_months(11) # 5 carry forwarded leaves + 22 EL allocated = 27 leaves self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 27 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 27 ) # should not allocate more leaves than annual allocation (22 excluding 5 cf leaves) allocate_earned_leaves_for_months(1) self.assertEqual( - get_leave_balance_on(self.employee.name, self.leave_type, frappe.flags.current_date), 27 + get_leave_balance_on(self.employee.name, self.leave_type, xhiveframework.flags.current_date), 27 ) def test_allocate_on_first_day(self): @@ -301,7 +301,7 @@ class TestLeaveAllocation(FrappeTestCase): first_day = get_first_day(getdate()) # Case 1: Allocates 1 leave for the previous month if created on the previous month's last day - frappe.flags.current_date = prev_month_last_day + xhiveframework.flags.current_date = prev_month_last_day leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="First Day", start_date=start_date ) @@ -309,7 +309,7 @@ class TestLeaveAllocation(FrappeTestCase): self.assertEqual(leaves_allocated, 1) # Case 2: Allocates 1 leave on the current month's first day (via scheduler) - frappe.flags.current_date = first_day + xhiveframework.flags.current_date = first_day allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) self.assertEqual(leaves_allocated, 2) @@ -320,7 +320,7 @@ class TestLeaveAllocation(FrappeTestCase): last_day = get_last_day(getdate()) # Case 1: Allocates 1 leave for the previous month if created on the previous month's last day - frappe.flags.current_date = prev_month_last_day + xhiveframework.flags.current_date = prev_month_last_day leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="Last Day", start_date=prev_month_last_day ) @@ -328,13 +328,13 @@ class TestLeaveAllocation(FrappeTestCase): self.assertEqual(leaves_allocated, 1) # Case 2: Allocates 1 leave on the current month's last day (via scheduler) - frappe.flags.current_date = last_day + xhiveframework.flags.current_date = last_day allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) self.assertEqual(leaves_allocated, 2) # Case 3: Doesn't allocate before the current month's last day (via scheduler) - frappe.flags.current_date = add_days(last_day, -1) + xhiveframework.flags.current_date = add_days(last_day, -1) allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) # balance is still 2 @@ -351,7 +351,7 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # Case 1: Allocates pro-rated leave for the previous month if created on the previous month's day of joining - frappe.flags.current_date = doj + xhiveframework.flags.current_date = doj leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="Date of Joining", start_date=start_date ) @@ -362,14 +362,14 @@ class TestLeaveAllocation(FrappeTestCase): self.assertEqual(leaves_allocated, pro_rated_leave) # Case 2: Doesn't allocate before the current month's doj (via scheduler) - frappe.flags.current_date = add_days(current_month_doj, -1) + xhiveframework.flags.current_date = add_days(current_month_doj, -1) allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) # balance is still the same self.assertEqual(leaves_allocated, pro_rated_leave) # Case 3: Allocates 1 leave on the current month's day of joining (via scheduler) - frappe.flags.current_date = current_month_doj + xhiveframework.flags.current_date = current_month_doj allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) self.assertEqual(leaves_allocated, pro_rated_leave + 1) @@ -382,7 +382,7 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # assigning before DOJ - frappe.flags.current_date = add_days(doj, -1) + xhiveframework.flags.current_date = add_days(doj, -1) leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="Date of Joining", start_date=start_date ) @@ -397,13 +397,13 @@ class TestLeaveAllocation(FrappeTestCase): self.employee.save() # assigning before DOJ, no leaves allocated initially - frappe.flags.current_date = add_days(doj, -1) + xhiveframework.flags.current_date = add_days(doj, -1) leave_policy_assignments = make_policy_assignment( self.employee, allocate_on_day="First Day", start_date=start_date ) # pro-rated leaves allocated during the first month - frappe.flags.current_date = add_days(doj, -1) + xhiveframework.flags.current_date = add_days(doj, -1) allocate_earned_leaves() leaves_allocated = get_allocated_leaves(leave_policy_assignments[0]) pro_rated_leave = round_earned_leaves( @@ -413,20 +413,20 @@ class TestLeaveAllocation(FrappeTestCase): @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") def test_get_earned_leave_details_for_dashboard(self): - frappe.flags.current_date = get_year_start(getdate()) + xhiveframework.flags.current_date = get_year_start(getdate()) leave_policy_assignments = make_policy_assignment( self.employee, annual_allocation=6, allocate_on_day="First Day", - start_date=add_months(frappe.flags.current_date, -3), + start_date=add_months(xhiveframework.flags.current_date, -3), ) - allocation = frappe.db.get_value( + allocation = xhiveframework.db.get_value( "Leave Allocation", {"leave_policy_assignment": leave_policy_assignments[0]}, "name", ) # 2 leaves allocated for past months - allocation = frappe.get_doc("Leave Allocation", allocation) + allocation = xhiveframework.get_doc("Leave Allocation", allocation) allocate_earned_leaves_for_months(6) @@ -448,7 +448,7 @@ class TestLeaveAllocation(FrappeTestCase): self.assertEqual(leave_allocation, expected) # total leaves allocated = 5 on the current date - details = get_leave_details(self.employee.name, frappe.flags.current_date) + details = get_leave_details(self.employee.name, xhiveframework.flags.current_date) leave_allocation = details["leave_allocation"][self.leave_type] expected = { "total_leaves": 5.0, @@ -460,17 +460,17 @@ class TestLeaveAllocation(FrappeTestCase): self.assertEqual(leave_allocation, expected) def tearDown(self): - frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) - frappe.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 0) - frappe.flags.current_date = None + xhiveframework.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) + xhiveframework.db.set_value("Leave Type", self.leave_type, "max_leaves_allowed", 0) + xhiveframework.flags.current_date = None def create_earned_leave_type(leave_type, allocate_on_day="Last Day"): - frappe.delete_doc_if_exists("Leave Type", leave_type, force=1) - frappe.delete_doc_if_exists("Leave Type", "Test Earned Leave Type", force=1) - frappe.delete_doc_if_exists("Leave Type", "Test Earned Leave Type 2", force=1) + xhiveframework.delete_doc_if_exists("Leave Type", leave_type, force=1) + xhiveframework.delete_doc_if_exists("Leave Type", "Test Earned Leave Type", force=1) + xhiveframework.delete_doc_if_exists("Leave Type", "Test Earned Leave Type 2", force=1) - return frappe.get_doc( + return xhiveframework.get_doc( dict( leave_type_name=leave_type, doctype="Leave Type", @@ -485,12 +485,12 @@ def create_earned_leave_type(leave_type, allocate_on_day="Last Day"): def create_leave_period(name, start_date=None): - frappe.delete_doc_if_exists("Leave Period", name, force=1) + xhiveframework.delete_doc_if_exists("Leave Period", name, force=1) if not start_date: start_date = get_first_day(getdate()) - return frappe.get_doc( + return xhiveframework.get_doc( dict( name=name, doctype="Leave Period", @@ -513,7 +513,7 @@ def make_policy_assignment( ): leave_type = create_earned_leave_type("Test Earned Leave", allocate_on_day) leave_period = create_leave_period("Test Earned Leave Period", start_date=start_date) - leave_policy = frappe.get_doc( + leave_policy = xhiveframework.get_doc( { "doctype": "Leave Policy", "title": "Test Earned Leave Policy", @@ -531,13 +531,13 @@ def make_policy_assignment( } leave_policy_assignments = create_assignment_for_multiple_employees( - [employee.name], frappe._dict(data) + [employee.name], xhiveframework._dict(data) ) return leave_policy_assignments def get_allocated_leaves(assignment): - return frappe.db.get_value( + return xhiveframework.db.get_value( "Leave Allocation", {"leave_policy_assignment": assignment}, "total_leaves_allocated", @@ -546,5 +546,5 @@ def get_allocated_leaves(assignment): def allocate_earned_leaves_for_months(months): for i in range(0, months): - frappe.flags.current_date = add_months(frappe.flags.current_date, 1) + xhiveframework.flags.current_date = add_months(xhiveframework.flags.current_date, 1) allocate_earned_leaves() diff --git a/hrms/hr/doctype/leave_allocation/test_leave_allocation.py b/hrms/hr/doctype/leave_allocation/test_leave_allocation.py index b89f66d..3593c55 100644 --- a/hrms/hr/doctype/leave_allocation/test_leave_allocation.py +++ b/hrms/hr/doctype/leave_allocation/test_leave_allocation.py @@ -1,11 +1,11 @@ import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, add_months, getdate, nowdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, add_months, getdate, nowdate -import erpnext -from erpnext.setup.doctype.employee.test_employee import make_employee +import xhiveerp +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.leave_allocation.leave_allocation import ( BackDatedAllocationError, @@ -15,14 +15,14 @@ from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expire from hrms.hr.doctype.leave_type.test_leave_type import create_leave_type -class TestLeaveAllocation(FrappeTestCase): +class TestLeaveAllocation(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Leave Period") - frappe.db.delete("Leave Allocation") - frappe.db.delete("Leave Ledger Entry") + xhiveframework.db.delete("Leave Period") + xhiveframework.db.delete("Leave Allocation") + xhiveframework.db.delete("Leave Ledger Entry") emp_id = make_employee("test_leave_allocation@salary.com", company="_Test Company") - self.employee = frappe.get_doc("Employee", emp_id) + self.employee = xhiveframework.get_doc("Employee", emp_id) def test_overlapping_allocation(self): leaves = [ @@ -49,11 +49,11 @@ class TestLeaveAllocation(FrappeTestCase): }, ] - frappe.get_doc(leaves[0]).save() - self.assertRaises(frappe.ValidationError, frappe.get_doc(leaves[1]).save) + xhiveframework.get_doc(leaves[0]).save() + self.assertRaises(xhiveframework.ValidationError, xhiveframework.get_doc(leaves[1]).save) def test_invalid_period(self): - doc = frappe.get_doc( + doc = xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, @@ -67,12 +67,12 @@ class TestLeaveAllocation(FrappeTestCase): ) # invalid period - self.assertRaises(frappe.ValidationError, doc.save) + self.assertRaises(xhiveframework.ValidationError, doc.save) def test_validation_for_over_allocation(self): leave_type = create_leave_type(leave_type_name="Test Over Allocation", is_carry_forward=1) - doc = frappe.get_doc( + doc = xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, @@ -93,7 +93,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_type.save() # allows creating a leave allocation with more leave days than period days - doc = frappe.get_doc( + doc = xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, @@ -108,7 +108,7 @@ class TestLeaveAllocation(FrappeTestCase): ).insert() def test_validation_for_over_allocation_post_submission(self): - allocation = frappe.get_doc( + allocation = xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, @@ -126,8 +126,8 @@ class TestLeaveAllocation(FrappeTestCase): self.assertRaises(OverAllocationError, allocation.save) def test_validation_for_over_allocation_based_on_leave_setup(self): - frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period") - leave_period = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Period", "Test Allocation Period") + leave_period = xhiveframework.get_doc( dict( name="Test Allocation Period", doctype="Leave Period", @@ -163,8 +163,8 @@ class TestLeaveAllocation(FrappeTestCase): self.assertRaises(OverAllocationError, allocation.save) def test_validation_for_over_allocation_based_on_leave_setup_post_submission(self): - frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period") - leave_period = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Period", "Test Allocation Period") + leave_period = xhiveframework.get_doc( dict( name="Test Allocation Period", doctype="Leave Period", @@ -332,7 +332,7 @@ class TestLeaveAllocation(FrappeTestCase): ) leave_allocation.submit() - leave_ledger_entry = frappe.get_all( + leave_ledger_entry = xhiveframework.get_all( "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_allocation.name) ) @@ -344,7 +344,7 @@ class TestLeaveAllocation(FrappeTestCase): # check if leave ledger entry is deleted on cancellation leave_allocation.cancel() self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_allocation.name}) + xhiveframework.db.exists("Leave Ledger Entry", {"transaction_name": leave_allocation.name}) ) def test_leave_addition_after_submit(self): @@ -359,7 +359,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_allocation.save() leave_allocation.reload() - updated_entry = frappe.db.get_all( + updated_entry = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_name": leave_allocation.name}, pluck="leaves", @@ -389,7 +389,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_allocation.save() leave_allocation.reload() - updated_entry = frappe.db.get_all( + updated_entry = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_name": leave_allocation.name}, pluck="leaves", @@ -411,7 +411,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_allocation.submit() leave_allocation.reload() - updated_entry = frappe.db.get_all( + updated_entry = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_name": leave_allocation.name}, pluck="leaves", @@ -439,7 +439,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_allocation.new_leaves_allocated = 8 leave_allocation.save() - updated_entry = frappe.db.get_all( + updated_entry = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_name": leave_allocation.name}, pluck="leaves", @@ -453,7 +453,7 @@ class TestLeaveAllocation(FrappeTestCase): from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list make_holiday_list() - frappe.db.set_value( + xhiveframework.db.set_value( "Company", self.employee.company, "default_holiday_list", "Salary Slip Test Holiday List" ) @@ -463,7 +463,7 @@ class TestLeaveAllocation(FrappeTestCase): leave_allocation.submit() self.assertTrue(leave_allocation.total_leaves_allocated, 15) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( { "doctype": "Leave Application", "employee": self.employee.name, @@ -482,16 +482,16 @@ class TestLeaveAllocation(FrappeTestCase): # allocate less leaves than the ones which are already approved leave_allocation.new_leaves_allocated = leave_application.total_leave_days - 1 leave_allocation.total_leaves_allocated = leave_application.total_leave_days - 1 - self.assertRaises(frappe.ValidationError, leave_allocation.submit) + self.assertRaises(xhiveframework.ValidationError, leave_allocation.submit) def create_leave_allocation(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) emp_id = make_employee("test_emp_leave_allocation@salary.com") - employee = frappe.get_doc("Employee", emp_id) + employee = xhiveframework.get_doc("Employee", emp_id) - return frappe.get_doc( + return xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, diff --git a/hrms/hr/doctype/leave_application/leave_application.js b/hrms/hr/doctype/leave_application/leave_application.js index 5f16ee7..361b1cf 100644 --- a/hrms/hr/doctype/leave_application/leave_application.js +++ b/hrms/hr/doctype/leave_application/leave_application.js @@ -1,10 +1,10 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); cur_frm.add_fetch('employee', 'company', 'company'); -frappe.ui.form.on("Leave Application", { +xhiveframework.ui.form.on("Leave Application", { setup: function(frm) { frm.set_query("leave_approver", function() { return { @@ -16,17 +16,17 @@ frappe.ui.form.on("Leave Application", { }; }); - frm.set_query("employee", erpnext.queries.employee); + frm.set_query("employee", xhiveerp.queries.employee); }, onload: function(frm) { // Ignore cancellation of doctype on cancel all. frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; if (!frm.doc.posting_date) { - frm.set_value("posting_date", frappe.datetime.get_today()); + frm.set_value("posting_date", xhiveframework.datetime.get_today()); } if (frm.doc.docstatus == 0) { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.leave_application.leave_application.get_mandatory_approval", args: { doctype: frm.doc.doctype, @@ -53,7 +53,7 @@ frappe.ui.form.on("Leave Application", { var leave_details; let lwps; if (frm.doc.employee) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.leave_application.leave_application.get_leave_details", async: false, args: { @@ -72,7 +72,7 @@ frappe.ui.form.on("Leave Application", { }); $("div").remove(".form-dashboard-section.custom"); frm.dashboard.add_section( - frappe.render_template('leave_application_dashboard', { + xhiveframework.render_template('leave_application_dashboard', { data: leave_details }), __("Allocated Leaves") @@ -98,12 +98,12 @@ frappe.ui.form.on("Leave Application", { frm.trigger("calculate_total_days"); } cur_frm.set_intro(""); - if (frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) { + if (frm.doc.__islocal && !in_list(xhiveframework.user_roles, "Employee")) { frm.set_intro(__("Fill the form and save it")); } - if (!frm.doc.employee && frappe.defaults.get_user_permissions()) { - const perm = frappe.defaults.get_user_permissions(); + if (!frm.doc.employee && xhiveframework.defaults.get_user_permissions()) { + const perm = xhiveframework.defaults.get_user_permissions(); if (perm && perm['Employee']) { frm.set_value('employee', perm['Employee'].map(perm_doc => perm_doc.doc)[0]); } @@ -118,7 +118,7 @@ frappe.ui.form.on("Leave Application", { leave_approver: function(frm) { if (frm.doc.leave_approver) { - frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver)); + frm.set_value("leave_approver_name", xhiveframework.user.full_name(frm.doc.leave_approver)); } }, @@ -159,14 +159,14 @@ frappe.ui.form.on("Leave Application", { frm.set_value('half_day_date', ''); var half_day_datepicker = frm.fields_dict.half_day_date.datepicker; half_day_datepicker.update({ - minDate: frappe.datetime.str_to_obj(frm.doc.from_date), - maxDate: frappe.datetime.str_to_obj(frm.doc.to_date) + minDate: xhiveframework.datetime.str_to_obj(frm.doc.from_date), + maxDate: xhiveframework.datetime.str_to_obj(frm.doc.to_date) }); }, get_leave_balance: function(frm) { if (frm.doc.docstatus === 0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date && frm.doc.to_date) { - return frappe.call({ + return xhiveframework.call({ method: "hrms.hr.doctype.leave_application.leave_application.get_leave_balance_on", args: { employee: frm.doc.employee, @@ -193,12 +193,12 @@ frappe.ui.form.on("Leave Application", { var to_date = Date.parse(frm.doc.to_date); if (to_date < from_date) { - frappe.msgprint(__("To Date cannot be less than From Date")); + xhiveframework.msgprint(__("To Date cannot be less than From Date")); frm.set_value('to_date', ''); return; } // server call is done to include holidays in leave days calculations - return frappe.call({ + return xhiveframework.call({ method: 'hrms.hr.doctype.leave_application.leave_application.get_number_of_leave_days', args: { "employee": frm.doc.employee, @@ -221,7 +221,7 @@ frappe.ui.form.on("Leave Application", { set_leave_approver: function(frm) { if (frm.doc.employee) { // server call is done to include holidays in leave days calculations - return frappe.call({ + return xhiveframework.call({ method: 'hrms.hr.doctype.leave_application.leave_application.get_leave_approver', args: { "employee": frm.doc.employee, @@ -236,7 +236,7 @@ frappe.ui.form.on("Leave Application", { } }); -frappe.tour["Leave Application"] = [ +xhiveframework.tour["Leave Application"] = [ { fieldname: "employee", title: "Employee", diff --git a/hrms/hr/doctype/leave_application/leave_application.py b/hrms/hr/doctype/leave_application/leave_application.py index 698c486..382a237 100644 --- a/hrms/hr/doctype/leave_application/leave_application.py +++ b/hrms/hr/doctype/leave_application/leave_application.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt import datetime from typing import Dict, Optional, Tuple, Union -import frappe -from frappe import _ -from frappe.query_builder.functions import Max, Min, Sum -from frappe.utils import ( +import xhiveframework +from xhiveframework import _ +from xhiveframework.query_builder.functions import Max, Min, Sum +from xhiveframework.utils import ( add_days, cint, cstr, @@ -20,8 +20,8 @@ from frappe.utils import ( nowdate, ) -from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange -from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee +from xhiveerp.buying.doctype.supplier_scorecard.supplier_scorecard import daterange +from xhiveerp.setup.doctype.employee.employee import get_holiday_list_for_employee from hrms.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry @@ -34,31 +34,31 @@ from hrms.hr.utils import ( ) -class LeaveDayBlockedError(frappe.ValidationError): +class LeaveDayBlockedError(xhiveframework.ValidationError): pass -class OverlapError(frappe.ValidationError): +class OverlapError(xhiveframework.ValidationError): pass -class AttendanceAlreadyMarkedError(frappe.ValidationError): +class AttendanceAlreadyMarkedError(xhiveframework.ValidationError): pass -class NotAnOptionalHoliday(frappe.ValidationError): +class NotAnOptionalHoliday(xhiveframework.ValidationError): pass -class InsufficientLeaveBalanceError(frappe.ValidationError): +class InsufficientLeaveBalanceError(xhiveframework.ValidationError): pass -class LeaveAcrossAllocationsError(frappe.ValidationError): +class LeaveAcrossAllocationsError(xhiveframework.ValidationError): pass -from frappe.model.document import Document +from xhiveframework.model.document import Document class LeaveApplication(Document): @@ -77,21 +77,21 @@ class LeaveApplication(Document): self.validate_salary_processed_days() self.validate_attendance() self.set_half_day_date() - if frappe.db.get_value("Leave Type", self.leave_type, "is_optional_leave"): + if xhiveframework.db.get_value("Leave Type", self.leave_type, "is_optional_leave"): self.validate_optional_leave() self.validate_applicable_after() def on_update(self): if self.status == "Open" and self.docstatus < 1: # notify leave approver about creation - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): + if xhiveframework.db.get_single_value("HR Settings", "send_leave_notification"): self.notify_leave_approver() share_doc_with_approver(self, self.leave_approver) def on_submit(self): if self.status in ["Open", "Cancelled"]: - frappe.throw( + xhiveframework.throw( _("Only Leave Applications with status 'Approved' and 'Rejected' can be submitted") ) @@ -99,7 +99,7 @@ class LeaveApplication(Document): self.update_attendance() # notify leave applier about approval - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): + if xhiveframework.db.get_single_value("HR Settings", "send_leave_notification"): self.notify_employee() self.create_leave_ledger_entry() @@ -111,56 +111,56 @@ class LeaveApplication(Document): def on_cancel(self): self.create_leave_ledger_entry(submit=False) # notify leave applier about cancellation - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): + if xhiveframework.db.get_single_value("HR Settings", "send_leave_notification"): self.notify_employee() self.cancel_attendance() def validate_applicable_after(self): if self.leave_type: - leave_type = frappe.get_doc("Leave Type", self.leave_type) + leave_type = xhiveframework.get_doc("Leave Type", self.leave_type) if leave_type.applicable_after > 0: - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") + date_of_joining = xhiveframework.db.get_value("Employee", self.employee, "date_of_joining") leave_days = get_approved_leaves_for_period( self.employee, False, date_of_joining, self.from_date ) number_of_days = date_diff(getdate(self.from_date), date_of_joining) if number_of_days >= 0: holidays = 0 - if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"): + if not xhiveframework.db.get_value("Leave Type", self.leave_type, "include_holiday"): holidays = get_holidays(self.employee, date_of_joining, self.from_date) number_of_days = number_of_days - leave_days - holidays if number_of_days < leave_type.applicable_after: - frappe.throw( + xhiveframework.throw( _("{0} applicable after {1} working days").format( self.leave_type, leave_type.applicable_after ) ) def validate_dates(self): - if frappe.db.get_single_value("HR Settings", "restrict_backdated_leave_application"): + if xhiveframework.db.get_single_value("HR Settings", "restrict_backdated_leave_application"): if self.from_date and getdate(self.from_date) < getdate(): - allowed_role = frappe.db.get_single_value( + allowed_role = xhiveframework.db.get_single_value( "HR Settings", "role_allowed_to_create_backdated_leave_application" ) - user = frappe.get_doc("User", frappe.session.user) + user = xhiveframework.get_doc("User", xhiveframework.session.user) user_roles = [d.role for d in user.roles] if not allowed_role: - frappe.throw( + xhiveframework.throw( _("Backdated Leave Application is restricted. Please set the {} in {}").format( - frappe.bold("Role Allowed to Create Backdated Leave Application"), + xhiveframework.bold("Role Allowed to Create Backdated Leave Application"), get_link_to_form("HR Settings", "HR Settings"), ) ) if allowed_role and allowed_role not in user_roles: - frappe.throw( + xhiveframework.throw( _("Only users with the {0} role can create backdated leave applications").format( allowed_role ) ) if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)): - frappe.throw(_("To date cannot be before from date")) + xhiveframework.throw(_("To date cannot be before from date")) if ( self.half_day @@ -171,22 +171,22 @@ class LeaveApplication(Document): ) ): - frappe.throw(_("Half Day Date should be between From Date and To Date")) + xhiveframework.throw(_("Half Day Date should be between From Date and To Date")) if not is_lwp(self.leave_type): self.validate_dates_across_allocation() self.validate_back_dated_application() def validate_dates_across_allocation(self): - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): + if xhiveframework.db.get_value("Leave Type", self.leave_type, "allow_negative"): return alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates() if not (alloc_on_from_date or alloc_on_to_date): - frappe.throw(_("Application period cannot be outside leave allocation period")) + xhiveframework.throw(_("Application period cannot be outside leave allocation period")) elif self.is_separate_ledger_entry_required(alloc_on_from_date, alloc_on_to_date): - frappe.throw( + xhiveframework.throw( _("Application period cannot be across two allocation records"), exc=LeaveAcrossAllocationsError, ) @@ -195,9 +195,9 @@ class LeaveApplication(Document): """Returns allocation name, from and to dates for application dates""" def _get_leave_allocation_record(date): - LeaveAllocation = frappe.qb.DocType("Leave Allocation") + LeaveAllocation = xhiveframework.qb.DocType("Leave Allocation") allocation = ( - frappe.qb.from_(LeaveAllocation) + xhiveframework.qb.from_(LeaveAllocation) .select(LeaveAllocation.name, LeaveAllocation.from_date, LeaveAllocation.to_date) .where( (LeaveAllocation.employee == self.employee) @@ -215,7 +215,7 @@ class LeaveApplication(Document): return allocation_based_on_from_date, allocation_based_on_to_date def validate_back_dated_application(self): - future_allocation = frappe.db.sql( + future_allocation = xhiveframework.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""", @@ -224,7 +224,7 @@ class LeaveApplication(Document): ) if future_allocation: - frappe.throw( + xhiveframework.throw( _( "Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}" ).format(formatdate(future_allocation[0].from_date), future_allocation[0].name) @@ -235,12 +235,12 @@ class LeaveApplication(Document): return holiday_dates = [] - if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"): + if not xhiveframework.db.get_value("Leave Type", self.leave_type, "include_holiday"): holiday_dates = get_holiday_dates_for_employee(self.employee, self.from_date, self.to_date) for dt in daterange(getdate(self.from_date), getdate(self.to_date)): date = dt.strftime("%Y-%m-%d") - attendance_name = frappe.db.exists( + attendance_name = xhiveframework.db.exists( "Attendance", dict(employee=self.employee, attendance_date=date, docstatus=("!=", 2)) ) @@ -249,11 +249,11 @@ class LeaveApplication(Document): if date in holiday_dates: if attendance_name: # cancel and delete existing attendance for holidays - attendance = frappe.get_doc("Attendance", attendance_name) + attendance = xhiveframework.get_doc("Attendance", attendance_name) attendance.flags.ignore_permissions = True if attendance.docstatus == 1: attendance.cancel() - frappe.delete_doc("Attendance", attendance_name, force=1) + xhiveframework.delete_doc("Attendance", attendance_name, force=1) continue self.create_or_update_attendance(attendance_name, date) @@ -267,12 +267,12 @@ class LeaveApplication(Document): if attendance_name: # update existing attendance, change absent to on leave - doc = frappe.get_doc("Attendance", attendance_name) + doc = xhiveframework.get_doc("Attendance", attendance_name) if doc.status != status: doc.db_set({"status": status, "leave_type": self.leave_type, "leave_application": self.name}) else: # make new attendance and submit it - doc = frappe.new_doc("Attendance") + doc = xhiveframework.new_doc("Attendance") doc.employee = self.employee doc.employee_name = self.employee_name doc.attendance_date = date @@ -286,20 +286,20 @@ class LeaveApplication(Document): def cancel_attendance(self): if self.docstatus == 2: - attendance = frappe.db.sql( + attendance = xhiveframework.db.sql( """select name from `tabAttendance` where employee = %s\ and (attendance_date between %s and %s) and docstatus < 2 and status in ('On Leave', 'Half Day')""", (self.employee, self.from_date, self.to_date), as_dict=1, ) for name in attendance: - frappe.db.set_value("Attendance", name, "docstatus", 2) + xhiveframework.db.set_value("Attendance", name, "docstatus", 2) def validate_salary_processed_days(self): - if not frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"): + if not xhiveframework.db.get_value("Leave Type", self.leave_type, "is_lwp"): return - last_processed_pay_slip = frappe.db.sql( + last_processed_pay_slip = xhiveframework.db.sql( """ select start_date, end_date from `tabSalary Slip` where docstatus = 1 and employee = %s @@ -310,7 +310,7 @@ class LeaveApplication(Document): ) if last_processed_pay_slip: - frappe.throw( + xhiveframework.throw( _( "Salary already processed for period between {0} and {1}, Leave application period cannot be between this date range." ).format( @@ -329,9 +329,9 @@ class LeaveApplication(Document): ) if block_dates: - frappe.msgprint(_("Warning: Leave application contains following block dates") + ":") + xhiveframework.msgprint(_("Warning: Leave application contains following block dates") + ":") for d in block_dates: - frappe.msgprint(formatdate(d.block_date) + ": " + d.reason) + xhiveframework.msgprint(formatdate(d.block_date) + ": " + d.reason) def validate_block_days(self): block_dates = get_applicable_block_dates( @@ -339,7 +339,7 @@ class LeaveApplication(Document): ) if block_dates and self.status == "Approved": - frappe.throw(_("You are not authorized to approve leaves on Block Dates"), LeaveDayBlockedError) + xhiveframework.throw(_("You are not authorized to approve leaves on Block Dates"), LeaveDayBlockedError) def validate_balance_leaves(self): if self.from_date and self.to_date: @@ -348,7 +348,7 @@ class LeaveApplication(Document): ) if self.total_leave_days <= 0: - frappe.throw( + xhiveframework.throw( _( "The day(s) on which you are applying for leave are holidays. You need not apply for leave." ) @@ -374,10 +374,10 @@ class LeaveApplication(Document): def show_insufficient_balance_message(self, leave_balance_for_consumption: float) -> None: alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates() - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): + if xhiveframework.db.get_value("Leave Type", self.leave_type, "allow_negative"): if leave_balance_for_consumption != self.leave_balance: msg = _("Warning: Insufficient leave balance for Leave Type {0} in this allocation.").format( - frappe.bold(self.leave_type) + xhiveframework.bold(self.leave_type) ) msg += "

" msg += _( @@ -385,13 +385,13 @@ class LeaveApplication(Document): ) else: msg = _("Warning: Insufficient leave balance for Leave Type {0}.").format( - frappe.bold(self.leave_type) + xhiveframework.bold(self.leave_type) ) - frappe.msgprint(msg, title=_("Warning"), indicator="orange") + xhiveframework.msgprint(msg, title=_("Warning"), indicator="orange") else: - frappe.throw( - _("Insufficient leave balance for Leave Type {0}").format(frappe.bold(self.leave_type)), + xhiveframework.throw( + _("Insufficient leave balance for Leave Type {0}").format(xhiveframework.bold(self.leave_type)), exc=InsufficientLeaveBalanceError, title=_("Insufficient Balance"), ) @@ -401,7 +401,7 @@ class LeaveApplication(Document): # hack! if name is null, it could cause problems with != self.name = "New Leave Application" - for d in frappe.db.sql( + for d in xhiveframework.db.sql( """ select name, leave_type, posting_date, from_date, to_date, total_leave_days, half_day_date @@ -439,10 +439,10 @@ class LeaveApplication(Document): msg = _("Employee {0} has already applied for {1} between {2} and {3} : {4}").format( self.employee, d["leave_type"], formatdate(d["from_date"]), formatdate(d["to_date"]), form_link ) - frappe.throw(msg, OverlapError) + xhiveframework.throw(msg, OverlapError) def get_total_leaves_on_half_day(self): - leave_count_on_half_day_date = frappe.db.sql( + leave_count_on_half_day_date = xhiveframework.db.sql( """select count(name) from `tabLeave Application` where employee = %(employee)s and docstatus < 2 @@ -456,18 +456,18 @@ class LeaveApplication(Document): return leave_count_on_half_day_date * 0.5 def validate_max_days(self): - max_days = frappe.db.get_value("Leave Type", self.leave_type, "max_continuous_days_allowed") + max_days = xhiveframework.db.get_value("Leave Type", self.leave_type, "max_continuous_days_allowed") if max_days and self.total_leave_days > cint(max_days): - frappe.throw(_("Leave of type {0} cannot be longer than {1}").format(self.leave_type, max_days)) + xhiveframework.throw(_("Leave of type {0} cannot be longer than {1}").format(self.leave_type, max_days)) def validate_attendance(self): - attendance = frappe.db.sql( + attendance = xhiveframework.db.sql( """select name from `tabAttendance` where employee = %s and (attendance_date between %s and %s) and status = 'Present' and docstatus = 1""", (self.employee, self.from_date, self.to_date), ) if attendance: - frappe.throw( + xhiveframework.throw( _("Attendance for employee {0} is already marked for this day").format(self.employee), AttendanceAlreadyMarkedError, ) @@ -475,20 +475,20 @@ class LeaveApplication(Document): def validate_optional_leave(self): leave_period = get_leave_period(self.from_date, self.to_date, self.company) if not leave_period: - frappe.throw(_("Cannot find active Leave Period")) - optional_holiday_list = frappe.db.get_value( + xhiveframework.throw(_("Cannot find active Leave Period")) + optional_holiday_list = xhiveframework.db.get_value( "Leave Period", leave_period[0]["name"], "optional_holiday_list" ) if not optional_holiday_list: - frappe.throw( + xhiveframework.throw( _("Optional Holiday List not set for leave period {0}").format(leave_period[0]["name"]) ) day = getdate(self.from_date) while day <= getdate(self.to_date): - if not frappe.db.exists( + if not xhiveframework.db.exists( {"doctype": "Holiday", "parent": optional_holiday_list, "holiday_date": day} ): - frappe.throw( + xhiveframework.throw( _("{0} is not in Optional Holiday List").format(formatdate(day)), NotAnOptionalHoliday ) day = add_days(day, 1) @@ -501,19 +501,19 @@ class LeaveApplication(Document): self.half_day_date = None def notify_employee(self): - employee = frappe.get_doc("Employee", self.employee) + employee = xhiveframework.get_doc("Employee", self.employee) if not employee.user_id: return - parent_doc = frappe.get_doc("Leave Application", self.name) + parent_doc = xhiveframework.get_doc("Leave Application", self.name) args = parent_doc.as_dict() - template = frappe.db.get_single_value("HR Settings", "leave_status_notification_template") + template = xhiveframework.db.get_single_value("HR Settings", "leave_status_notification_template") if not template: - frappe.msgprint(_("Please set default template for Leave Status Notification in HR Settings.")) + xhiveframework.msgprint(_("Please set default template for Leave Status Notification in HR Settings.")) return - email_template = frappe.get_doc("Email Template", template) - message = frappe.render_template(email_template.response, args) + email_template = xhiveframework.get_doc("Email Template", template) + message = xhiveframework.render_template(email_template.response, args) self.notify( { @@ -528,17 +528,17 @@ class LeaveApplication(Document): def notify_leave_approver(self): if self.leave_approver: - parent_doc = frappe.get_doc("Leave Application", self.name) + parent_doc = xhiveframework.get_doc("Leave Application", self.name) args = parent_doc.as_dict() - template = frappe.db.get_single_value("HR Settings", "leave_approval_notification_template") + template = xhiveframework.db.get_single_value("HR Settings", "leave_approval_notification_template") if not template: - frappe.msgprint( + xhiveframework.msgprint( _("Please set default template for Leave Approval Notification in HR Settings.") ) return - email_template = frappe.get_doc("Email Template", template) - message = frappe.render_template(email_template.response, args) + email_template = xhiveframework.get_doc("Email Template", template) + message = xhiveframework.render_template(email_template.response, args) self.notify( { @@ -551,27 +551,27 @@ class LeaveApplication(Document): ) def notify(self, args): - args = frappe._dict(args) + args = xhiveframework._dict(args) # args -> message, message_to, subject if cint(self.follow_via_email): contact = args.message_to if not isinstance(contact, list): if not args.notify == "employee": - contact = frappe.get_doc("User", contact).email or contact + contact = xhiveframework.get_doc("User", contact).email or contact sender = dict() - sender["email"] = frappe.get_doc("User", frappe.session.user).email + sender["email"] = xhiveframework.get_doc("User", xhiveframework.session.user).email sender["full_name"] = get_fullname(sender["email"]) try: - frappe.sendmail( + xhiveframework.sendmail( recipients=contact, sender=sender["email"], subject=args.subject, message=args.message, ) - frappe.msgprint(_("Email sent to {0}").format(contact)) - except frappe.OutgoingEmailError: + xhiveframework.msgprint(_("Email sent to {0}").format(contact)) + except xhiveframework.OutgoingEmailError: pass def create_leave_ledger_entry(self, submit=True): @@ -581,7 +581,7 @@ class LeaveApplication(Document): expiry_date = get_allocation_expiry_for_cf_leaves( self.employee, self.leave_type, self.to_date, self.from_date ) - lwp = frappe.db.get_value("Leave Type", self.leave_type, "is_lwp") + lwp = xhiveframework.db.get_value("Leave Type", self.leave_type, "is_lwp") if expiry_date: self.create_ledger_entry_for_intermediate_allocation_expiry(expiry_date, submit, lwp) @@ -592,7 +592,7 @@ class LeaveApplication(Document): # else will be stopped in validation itself self.create_separate_ledger_entries(alloc_on_from_date, alloc_on_to_date, submit, lwp) else: - raise_exception = False if frappe.flags.in_patch else True + raise_exception = False if xhiveframework.flags.in_patch else True args = dict( leaves=self.total_leave_days * -1, from_date=self.from_date, @@ -626,7 +626,7 @@ class LeaveApplication(Document): and alloc_on_to_date and add_days(alloc_on_from_date.to_date, 1) != alloc_on_to_date.from_date ): - frappe.throw( + xhiveframework.throw( _( "Leave Application period cannot be across two non-consecutive leave allocations {0} and {1}." ).format( @@ -635,7 +635,7 @@ class LeaveApplication(Document): ) ) - raise_exception = False if frappe.flags.in_patch else True + raise_exception = False if xhiveframework.flags.in_patch else True if alloc_on_from_date: first_alloc_end = alloc_on_from_date.to_date @@ -681,7 +681,7 @@ class LeaveApplication(Document): def create_ledger_entry_for_intermediate_allocation_expiry(self, expiry_date, submit, lwp): """Splits leave application into two ledger entries to consider expiry of allocation""" - raise_exception = False if frappe.flags.in_patch else True + raise_exception = False if xhiveframework.flags.in_patch else True leaves = get_number_of_leave_days( self.employee, self.leave_type, self.from_date, expiry_date, self.half_day, self.half_day_date @@ -713,7 +713,7 @@ def get_allocation_expiry_for_cf_leaves( employee: str, leave_type: str, to_date: datetime.date, from_date: datetime.date ) -> str: """Returns expiry of carry forward allocation in leave ledger entry""" - expiry = frappe.get_all( + expiry = xhiveframework.get_all( "Leave Ledger Entry", filters={ "employee": employee, @@ -728,7 +728,7 @@ def get_allocation_expiry_for_cf_leaves( return expiry[0]["to_date"] if expiry else "" -@frappe.whitelist() +@xhiveframework.whitelist() def get_number_of_leave_days( employee: str, leave_type: str, @@ -751,21 +751,21 @@ def get_number_of_leave_days( else: number_of_days = date_diff(to_date, from_date) + 1 - if not frappe.db.get_value("Leave Type", leave_type, "include_holiday"): + if not xhiveframework.db.get_value("Leave Type", leave_type, "include_holiday"): number_of_days = flt(number_of_days) - flt( get_holidays(employee, from_date, to_date, holiday_list=holiday_list) ) return number_of_days -@frappe.whitelist() +@xhiveframework.whitelist() def get_leave_details(employee, date): allocation_records = get_leave_allocation_records(employee, date) leave_allocation = {} - precision = cint(frappe.db.get_single_value("System Settings", "float_precision", cache=True)) + precision = cint(xhiveframework.db.get_single_value("System Settings", "float_precision", cache=True)) for d in allocation_records: - allocation = allocation_records.get(d, frappe._dict()) + allocation = allocation_records.get(d, xhiveframework._dict()) remaining_leaves = get_leave_balance_on( employee, d, date, to_date=allocation.to_date, consider_all_leaves_in_the_allocation_period=True ) @@ -786,7 +786,7 @@ def get_leave_details(employee, date): } # is used in set query - lwp = frappe.get_list("Leave Type", filters={"is_lwp": 1}, pluck="name") + lwp = xhiveframework.get_list("Leave Type", filters={"is_lwp": 1}, pluck="name") return { "leave_allocation": leave_allocation, @@ -795,7 +795,7 @@ def get_leave_details(employee, date): } -@frappe.whitelist() +@xhiveframework.whitelist() def get_leave_balance_on( employee: str, leave_type: str, @@ -822,7 +822,7 @@ def get_leave_balance_on( to_date = nowdate() allocation_records = get_leave_allocation_records(employee, date, leave_type) - allocation = allocation_records.get(leave_type, frappe._dict()) + allocation = allocation_records.get(leave_type, xhiveframework._dict()) end_date = allocation.to_date if cint(consider_all_leaves_in_the_allocation_period) else date cf_expiry = get_allocation_expiry_for_cf_leaves( @@ -841,21 +841,21 @@ def get_leave_balance_on( def get_leave_allocation_records(employee, date, leave_type=None): """Returns the total allocated leaves and carry forwarded leaves based on ledger entries""" - Ledger = frappe.qb.DocType("Leave Ledger Entry") - LeaveAllocation = frappe.qb.DocType("Leave Allocation") + Ledger = xhiveframework.qb.DocType("Leave Ledger Entry") + LeaveAllocation = xhiveframework.qb.DocType("Leave Allocation") cf_leave_case = ( - frappe.qb.terms.Case().when(Ledger.is_carry_forward == "1", Ledger.leaves).else_(0) + xhiveframework.qb.terms.Case().when(Ledger.is_carry_forward == "1", Ledger.leaves).else_(0) ) sum_cf_leaves = Sum(cf_leave_case).as_("cf_leaves") new_leaves_case = ( - frappe.qb.terms.Case().when(Ledger.is_carry_forward == "0", Ledger.leaves).else_(0) + xhiveframework.qb.terms.Case().when(Ledger.is_carry_forward == "0", Ledger.leaves).else_(0) ) sum_new_leaves = Sum(new_leaves_case).as_("new_leaves") query = ( - frappe.qb.from_(Ledger) + xhiveframework.qb.from_(Ledger) .inner_join(LeaveAllocation) .on(Ledger.transaction_name == LeaveAllocation.name) .select( @@ -895,11 +895,11 @@ def get_leave_allocation_records(employee, date, leave_type=None): allocation_details = query.run(as_dict=True) - allocated_leaves = frappe._dict() + allocated_leaves = xhiveframework._dict() for d in allocation_details: allocated_leaves.setdefault( d.leave_type, - frappe._dict( + xhiveframework._dict( { "from_date": d.from_date, "to_date": d.to_date, @@ -918,7 +918,7 @@ def get_leaves_pending_approval_for_period( employee: str, leave_type: str, from_date: datetime.date, to_date: datetime.date ) -> float: """Returns leaves that are pending for approval""" - leaves = frappe.get_all( + leaves = xhiveframework.get_all( "Leave Application", filters={"employee": employee, "leave_type": leave_type, "status": "Open"}, or_filters={ @@ -970,7 +970,7 @@ def get_remaining_leaves( ) remaining_leaves = _get_remaining_leaves(leave_balance_for_consumption, allocation.to_date) - return frappe._dict(leave_balance=leave_balance, leave_balance_for_consumption=remaining_leaves) + return xhiveframework._dict(leave_balance=leave_balance, leave_balance_for_consumption=remaining_leaves) def get_new_and_cf_leaves_taken(allocation: Dict, cf_expiry: str) -> Tuple[float, float]: @@ -1028,7 +1028,7 @@ def get_leaves_for_period( # fetch half day date for leaves with half days if leave_entry.leaves % 1: half_day = 1 - half_day_date = frappe.db.get_value( + half_day_date = xhiveframework.db.get_value( "Leave Application", {"name": leave_entry.transaction_name}, ["half_day_date"] ) @@ -1050,7 +1050,7 @@ def get_leaves_for_period( def get_leave_entries(employee, leave_type, from_date, to_date): """Returns leave entries between from_date and to_date.""" - return frappe.db.sql( + return xhiveframework.db.sql( """ SELECT employee, leave_type, from_date, to_date, leaves, transaction_name, transaction_type, holiday_list, @@ -1069,13 +1069,13 @@ def get_leave_entries(employee, leave_type, from_date, to_date): ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_holidays(employee, from_date, to_date, holiday_list=None): """get holidays between two dates for the given employee""" if not holiday_list: holiday_list = get_holiday_list_for_employee(employee) - holidays = frappe.db.sql( + holidays = xhiveframework.db.sql( """select count(distinct holiday_date) from `tabHoliday` h1, `tabHoliday List` h2 where h1.parent = h2.name and h1.holiday_date between %s and %s and h2.name = %s""", @@ -1086,29 +1086,29 @@ def get_holidays(employee, from_date, to_date, holiday_list=None): def is_lwp(leave_type): - lwp = frappe.db.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type) + lwp = xhiveframework.db.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type) return lwp and cint(lwp[0][0]) or 0 -@frappe.whitelist() +@xhiveframework.whitelist() def get_events(start, end, filters=None): - from frappe.desk.reportview import get_filters_cond + from xhiveframework.desk.reportview import get_filters_cond events = [] - employee = frappe.db.get_value( - "Employee", filters={"user_id": frappe.session.user}, fieldname=["name", "company"], as_dict=True + employee = xhiveframework.db.get_value( + "Employee", filters={"user_id": xhiveframework.session.user}, fieldname=["name", "company"], as_dict=True ) if employee: employee, company = employee.name, employee.company else: employee = "" - company = frappe.db.get_value("Global Defaults", None, "default_company") + company = xhiveframework.db.get_value("Global Defaults", None, "default_company") conditions = get_filters_cond("Leave Application", filters, []) # show department leaves for employee - if "Employee" in frappe.get_roles(): + if "Employee" in xhiveframework.get_roles(): add_department_leaves(events, start, end, employee, company) add_leaves(events, start, end, conditions) @@ -1119,13 +1119,13 @@ def get_events(start, end, filters=None): def add_department_leaves(events, start, end, employee, company): - department = frappe.db.get_value("Employee", employee, "department") + department = xhiveframework.db.get_value("Employee", employee, "department") if not department: return # department leaves - department_employees = frappe.db.sql_list( + department_employees = xhiveframework.db.sql_list( """select name from tabEmployee where department=%s and company=%s""", (department, company), @@ -1136,12 +1136,12 @@ def add_department_leaves(events, start, end, employee, company): def add_leaves(events, start, end, filter_conditions=None): - from frappe.desk.reportview import build_match_conditions + from xhiveframework.desk.reportview import build_match_conditions conditions = [] if not cint( - frappe.db.get_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar") + xhiveframework.db.get_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar") ): match_conditions = build_match_conditions("Leave Application") @@ -1172,7 +1172,7 @@ def add_leaves(events, start, end, filter_conditions=None): if filter_conditions: query += filter_conditions - for d in frappe.db.sql(query, {"start": start, "end": end}, as_dict=True): + for d in xhiveframework.db.sql(query, {"start": start, "end": end}, as_dict=True): e = { "name": d.name, "doctype": "Leave Application", @@ -1212,7 +1212,7 @@ def add_holidays(events, start, end, employee, company): if not applicable_holiday_list: return - for holiday in frappe.db.sql( + for holiday in xhiveframework.db.sql( """select name, holiday_date, description from `tabHoliday` where parent=%s and holiday_date between %s and %s""", (applicable_holiday_list, start, end), @@ -1229,15 +1229,15 @@ def add_holidays(events, start, end, employee, company): ) -@frappe.whitelist() +@xhiveframework.whitelist() def get_mandatory_approval(doctype): mandatory = "" if doctype == "Leave Application": - mandatory = frappe.db.get_single_value( + mandatory = xhiveframework.db.get_single_value( "HR Settings", "leave_approver_mandatory_in_leave_application" ) else: - mandatory = frappe.db.get_single_value( + mandatory = xhiveframework.db.get_single_value( "HR Settings", "expense_approver_mandatory_in_expense_claim" ) @@ -1245,9 +1245,9 @@ def get_mandatory_approval(doctype): def get_approved_leaves_for_period(employee, leave_type, from_date, to_date): - LeaveApplication = frappe.qb.DocType("Leave Application") + LeaveApplication = xhiveframework.qb.DocType("Leave Application") query = ( - frappe.qb.from_(LeaveApplication) + xhiveframework.qb.from_(LeaveApplication) .select( LeaveApplication.employee, LeaveApplication.leave_type, @@ -1289,14 +1289,14 @@ def get_approved_leaves_for_period(employee, leave_type, from_date, to_date): return leave_days -@frappe.whitelist() +@xhiveframework.whitelist() def get_leave_approver(employee): - leave_approver, department = frappe.db.get_value( + leave_approver, department = xhiveframework.db.get_value( "Employee", employee, ["leave_approver", "department"] ) if not leave_approver and department: - leave_approver = frappe.db.get_value( + leave_approver = xhiveframework.db.get_value( "Department Approver", {"parent": department, "parentfield": "leave_approvers", "idx": 1}, "approver", diff --git a/hrms/hr/doctype/leave_application/leave_application_calendar.js b/hrms/hr/doctype/leave_application/leave_application_calendar.js index 3eca7d2..9c0fc71 100644 --- a/hrms/hr/doctype/leave_application/leave_application_calendar.js +++ b/hrms/hr/doctype/leave_application/leave_application_calendar.js @@ -1,7 +1,7 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.views.calendar["Leave Application"] = { +xhiveframework.views.calendar["Leave Application"] = { field_map: { "start": "from_date", "end": "to_date", diff --git a/hrms/hr/doctype/leave_application/leave_application_dashboard.py b/hrms/hr/doctype/leave_application/leave_application_dashboard.py index ee5cbe9..1c9d146 100644 --- a/hrms/hr/doctype/leave_application/leave_application_dashboard.py +++ b/hrms/hr/doctype/leave_application/leave_application_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/leave_application/leave_application_email_template.html b/hrms/hr/doctype/leave_application/leave_application_email_template.html index dae9084..a0629da 100644 --- a/hrms/hr/doctype/leave_application/leave_application_email_template.html +++ b/hrms/hr/doctype/leave_application/leave_application_email_template.html @@ -24,7 +24,7 @@ - {% set doc_link = frappe.utils.get_url_to_form('Leave Application', name) %} + {% set doc_link = xhiveframework.utils.get_url_to_form('Leave Application', name) %}

- {{ _('Open Now') }} \ No newline at end of file + {{ _('Open Now') }} diff --git a/hrms/hr/doctype/leave_application/leave_application_list.js b/hrms/hr/doctype/leave_application/leave_application_list.js index 157271a..254f7aa 100644 --- a/hrms/hr/doctype/leave_application/leave_application_list.js +++ b/hrms/hr/doctype/leave_application/leave_application_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings["Leave Application"] = { +xhiveframework.listview_settings["Leave Application"] = { add_fields: ["leave_type", "employee", "employee_name", "total_leave_days", "from_date", "to_date"], has_indicator_for_draft: 1, get_indicator: function (doc) { diff --git a/hrms/hr/doctype/leave_application/test_leave_application.py b/hrms/hr/doctype/leave_application/test_leave_application.py index 4c7b376..eebd47e 100644 --- a/hrms/hr/doctype/leave_application/test_leave_application.py +++ b/hrms/hr/doctype/leave_application/test_leave_application.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt import unittest -import frappe -from frappe.permissions import clear_user_permissions_for_doctype -from frappe.utils import ( +import xhiveframework +from xhiveframework.permissions import clear_user_permissions_for_doctype +from xhiveframework.utils import ( add_days, add_months, get_first_day, @@ -16,8 +16,8 @@ from frappe.utils import ( nowdate, ) -from erpnext.setup.doctype.employee.test_employee import make_employee -from erpnext.setup.doctype.holiday_list.test_holiday_list import set_holiday_list +from xhiveerp.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.holiday_list.test_holiday_list import set_holiday_list from hrms.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation from hrms.hr.doctype.leave_application.leave_application import ( @@ -87,13 +87,13 @@ class TestLeaveApplication(unittest.TestCase): "Leave Period", "Leave Policy Assignment", ]: - frappe.db.delete(dt) + xhiveframework.db.delete(dt) - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") set_leave_approver() - frappe.db.delete("Attendance", {"employee": "_T-Employee-00001"}) - frappe.db.set_value("Employee", "_T-Employee-00001", "holiday_list", "") + xhiveframework.db.delete("Attendance", {"employee": "_T-Employee-00001"}) + xhiveframework.db.set_value("Employee", "_T-Employee-00001", "holiday_list", "") from_date = get_year_start(getdate()) to_date = get_year_ending(getdate()) @@ -102,26 +102,26 @@ class TestLeaveApplication(unittest.TestCase): "Holiday List w/o Weekly Offs", from_date=from_date, to_date=to_date, add_weekly_offs=False ) - if not frappe.db.exists("Leave Type", "_Test Leave Type"): - frappe.get_doc( + if not xhiveframework.db.exists("Leave Type", "_Test Leave Type"): + xhiveframework.get_doc( dict(leave_type_name="_Test Leave Type", doctype="Leave Type", include_holiday=True) ).insert() def tearDown(self): - frappe.db.rollback() - frappe.set_user("Administrator") + xhiveframework.db.rollback() + xhiveframework.set_user("Administrator") def _clear_roles(self): - frappe.db.sql( + xhiveframework.db.sql( """delete from `tabHas Role` where parent in ('test@example.com', 'test1@example.com', 'test2@example.com')""" ) def _clear_applications(self): - frappe.db.sql("""delete from `tabLeave Application`""") + xhiveframework.db.sql("""delete from `tabLeave Application`""") def get_application(self, doc): - application = frappe.copy_doc(doc) + application = xhiveframework.copy_doc(doc) application.from_date = "2013-01-01" application.to_date = "2013-01-05" return application @@ -129,8 +129,8 @@ class TestLeaveApplication(unittest.TestCase): @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") def test_validate_application_across_allocations(self): # Test validation for application dates when negative balance is disabled - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False) ).insert() @@ -138,7 +138,7 @@ class TestLeaveApplication(unittest.TestCase): date = getdate() first_sunday = get_first_sunday(self.holiday_list, for_date=get_year_start(date)) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -151,13 +151,13 @@ class TestLeaveApplication(unittest.TestCase): ) ) # Application period cannot be outside leave allocation period - self.assertRaises(frappe.ValidationError, leave_application.insert) + self.assertRaises(xhiveframework.ValidationError, leave_application.insert) make_allocation_record( leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date) ) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -176,8 +176,8 @@ class TestLeaveApplication(unittest.TestCase): @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") def test_insufficient_leave_balance_validation(self): # CASE 1: Validation when allow negative is disabled - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False) ).insert() @@ -192,7 +192,7 @@ class TestLeaveApplication(unittest.TestCase): to_date=get_year_ending(date), leaves=2, ) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -207,7 +207,7 @@ class TestLeaveApplication(unittest.TestCase): self.assertRaises(InsufficientLeaveBalanceError, leave_application.insert) # CASE 2: Allows creating application with a warning message when allow negative is enabled - frappe.db.set_value("Leave Type", "Test Leave Validation", "allow_negative", True) + xhiveframework.db.set_value("Leave Type", "Test Leave Validation", "allow_negative", True) make_leave_application( employee.name, add_days(first_sunday, 1), add_days(first_sunday, 3), leave_type.name ) @@ -216,8 +216,8 @@ class TestLeaveApplication(unittest.TestCase): def test_separate_leave_ledger_entry_for_boundary_applications(self): # When application falls in 2 different allocations and Allow Negative is enabled # creates separate leave ledger entries - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) + leave_type = xhiveframework.get_doc( dict( leave_type_name="Test Leave Validation", doctype="Leave Type", @@ -246,7 +246,7 @@ class TestLeaveApplication(unittest.TestCase): ) # 2 separate leave ledger entries - ledgers = frappe.db.get_all( + ledgers = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_type": "Leave Application", "transaction_name": application.name}, ["leaves", "from_date", "to_date"], @@ -266,7 +266,7 @@ class TestLeaveApplication(unittest.TestCase): ) # 2 separate leave ledger entries - ledgers = frappe.db.get_all( + ledgers = xhiveframework.db.get_all( "Leave Ledger Entry", {"transaction_type": "Leave Application", "transaction_name": application.name}, ["leaves", "from_date", "to_date"], @@ -290,7 +290,7 @@ class TestLeaveApplication(unittest.TestCase): application.insert() application.submit() - attendance = frappe.get_all( + attendance = xhiveframework.get_all( "Attendance", ["name", "status", "attendance_date"], dict(attendance_date=("between", ["2018-01-01", "2018-01-03"]), docstatus=("!=", 2)), @@ -310,8 +310,8 @@ class TestLeaveApplication(unittest.TestCase): @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") def test_attendance_for_include_holidays(self): # Case 1: leave type with 'Include holidays within leaves as leaves' enabled - frappe.delete_doc_if_exists("Leave Type", "Test Include Holidays", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Include Holidays", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Include Holidays", doctype="Leave Type", include_holiday=True) ).insert() @@ -328,15 +328,15 @@ class TestLeaveApplication(unittest.TestCase): ) leave_application.reload() self.assertEqual(leave_application.total_leave_days, 4) - self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 4) + self.assertEqual(xhiveframework.db.count("Attendance", {"leave_application": leave_application.name}), 4) leave_application.cancel() @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") def test_attendance_update_for_exclude_holidays(self): # Case 2: leave type with 'Include holidays within leaves as leaves' disabled - frappe.delete_doc_if_exists("Leave Type", "Test Do Not Include Holidays", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Do Not Include Holidays", force=1) + leave_type = xhiveframework.get_doc( dict( leave_type_name="Test Do Not Include Holidays", doctype="Leave Type", include_holiday=False ) @@ -352,13 +352,13 @@ class TestLeaveApplication(unittest.TestCase): # already marked attendance on a holiday should be deleted in this case config = {"doctype": "Attendance", "employee": employee.name, "status": "Present"} - attendance_on_holiday = frappe.get_doc(config) + attendance_on_holiday = xhiveframework.get_doc(config) attendance_on_holiday.attendance_date = first_sunday attendance_on_holiday.flags.ignore_validate = True attendance_on_holiday.save() # already marked attendance on a non-holiday should be updated - attendance = frappe.get_doc(config) + attendance = xhiveframework.get_doc(config) attendance.attendance_date = add_days(first_sunday, 3) attendance.flags.ignore_validate = True attendance.save() @@ -370,23 +370,23 @@ class TestLeaveApplication(unittest.TestCase): # holiday should be excluded while marking attendance self.assertEqual(leave_application.total_leave_days, 3) - self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 3) + self.assertEqual(xhiveframework.db.count("Attendance", {"leave_application": leave_application.name}), 3) # attendance on holiday deleted - self.assertFalse(frappe.db.exists("Attendance", attendance_on_holiday.name)) + self.assertFalse(xhiveframework.db.exists("Attendance", attendance_on_holiday.name)) # attendance on non-holiday updated - self.assertEqual(frappe.db.get_value("Attendance", attendance.name, "status"), "On Leave") + self.assertEqual(xhiveframework.db.get_value("Attendance", attendance.name, "status"), "On Leave") def test_block_list(self): self._clear_roles() - from frappe.utils.user import add_role + from xhiveframework.utils.user import add_role add_role("test@example.com", "HR User") clear_user_permissions_for_doctype("Employee") - frappe.db.set_value( + xhiveframework.db.set_value( "Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List" ) @@ -398,10 +398,10 @@ class TestLeaveApplication(unittest.TestCase): application.status = "Approved" self.assertRaises(LeaveDayBlockedError, application.submit) - frappe.set_user("test@example.com") + xhiveframework.set_user("test@example.com") # clear other applications - frappe.db.sql("delete from `tabLeave Application`") + xhiveframework.db.sql("delete from `tabLeave Application`") application = self.get_application(_test_records[0]) self.assertTrue(application.insert()) @@ -410,10 +410,10 @@ class TestLeaveApplication(unittest.TestCase): self._clear_roles() self._clear_applications() - from frappe.utils.user import add_role + from xhiveframework.utils.user import add_role add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") + xhiveframework.set_user("test@example.com") make_allocation_record() @@ -427,10 +427,10 @@ class TestLeaveApplication(unittest.TestCase): self._clear_roles() self._clear_applications() - from frappe.utils.user import add_role + from xhiveframework.utils.user import add_role add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") + xhiveframework.set_user("test@example.com") make_allocation_record() @@ -461,11 +461,11 @@ class TestLeaveApplication(unittest.TestCase): self._clear_roles() self._clear_applications() - from frappe.utils.user import add_role + from xhiveframework.utils.user import add_role add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") + xhiveframework.set_user("test@example.com") make_allocation_record() @@ -484,11 +484,11 @@ class TestLeaveApplication(unittest.TestCase): self._clear_roles() self._clear_applications() - from frappe.utils.user import add_role + from xhiveframework.utils.user import add_role add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") + xhiveframework.set_user("test@example.com") make_allocation_record() @@ -525,8 +525,8 @@ class TestLeaveApplication(unittest.TestCase): first_sunday = get_first_sunday(self.holiday_list) optional_leave_date = add_days(first_sunday, 1) - if not frappe.db.exists("Holiday List", holiday_list): - frappe.get_doc( + if not xhiveframework.db.exists("Holiday List", holiday_list): + xhiveframework.get_doc( dict( doctype="Holiday List", holiday_list_name=holiday_list, @@ -536,10 +536,10 @@ class TestLeaveApplication(unittest.TestCase): ) ).insert() - frappe.db.set_value("Leave Period", leave_period.name, "optional_holiday_list", holiday_list) + xhiveframework.db.set_value("Leave Period", leave_period.name, "optional_holiday_list", holiday_list) leave_type = "Test Optional Type" - if not frappe.db.exists("Leave Type", leave_type): - frappe.get_doc( + if not xhiveframework.db.exists("Leave Type", leave_type): + xhiveframework.get_doc( dict(leave_type_name=leave_type, doctype="Leave Type", is_optional_leave=1) ).insert() @@ -547,7 +547,7 @@ class TestLeaveApplication(unittest.TestCase): date = add_days(first_sunday, 2) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -574,8 +574,8 @@ class TestLeaveApplication(unittest.TestCase): def test_leaves_allowed(self): employee = get_employee() leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Leave Type", doctype="Leave Type", max_leaves_allowed=5) ).insert() @@ -583,7 +583,7 @@ class TestLeaveApplication(unittest.TestCase): allocate_leaves(employee, leave_period, leave_type.name, 5) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -598,7 +598,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_application.submit() - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -611,20 +611,20 @@ class TestLeaveApplication(unittest.TestCase): status="Approved", ) ) - self.assertRaises(frappe.ValidationError, leave_application.insert) + self.assertRaises(xhiveframework.ValidationError, leave_application.insert) def test_applicable_after(self): employee = get_employee() leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) + leave_type = xhiveframework.get_doc( dict(leave_type_name="Test Leave Type", doctype="Leave Type", applicable_after=15) ).insert() date = add_days(nowdate(), -7) - frappe.db.set_value("Employee", employee.name, "date_of_joining", date) + xhiveframework.db.set_value("Employee", employee.name, "date_of_joining", date) allocate_leaves(employee, leave_period, leave_type.name, 10) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -638,16 +638,16 @@ class TestLeaveApplication(unittest.TestCase): ) ) - self.assertRaises(frappe.ValidationError, leave_application.insert) + self.assertRaises(xhiveframework.ValidationError, leave_application.insert) - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type 1", force=1) - leave_type_1 = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Type 1", force=1) + leave_type_1 = xhiveframework.get_doc( dict(leave_type_name="Test Leave Type 1", doctype="Leave Type") ).insert() allocate_leaves(employee, leave_period, leave_type_1.name, 10) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -662,13 +662,13 @@ class TestLeaveApplication(unittest.TestCase): ) self.assertTrue(leave_application.insert()) - frappe.db.set_value("Employee", employee.name, "date_of_joining", "2010-01-01") + xhiveframework.db.set_value("Employee", employee.name, "date_of_joining", "2010-01-01") def test_max_continuous_leaves(self): employee = get_employee() leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( + xhiveframework.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) + leave_type = xhiveframework.get_doc( dict( leave_type_name="Test Leave Type", doctype="Leave Type", @@ -681,7 +681,7 @@ class TestLeaveApplication(unittest.TestCase): allocate_leaves(employee, leave_period, leave_type.name, 10) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -695,7 +695,7 @@ class TestLeaveApplication(unittest.TestCase): ) ) - self.assertRaises(frappe.ValidationError, leave_application.insert) + self.assertRaises(xhiveframework.ValidationError, leave_application.insert) def test_leave_balance_near_allocaton_expiry(self): employee = get_employee() @@ -718,10 +718,10 @@ class TestLeaveApplication(unittest.TestCase): employee = get_employee() leave_type = "Sick Leave" - if not frappe.db.exists("Leave Type", leave_type): - frappe.get_doc(dict(leave_type_name=leave_type, doctype="Leave Type")).insert() + if not xhiveframework.db.exists("Leave Type", leave_type): + xhiveframework.get_doc(dict(leave_type_name=leave_type, doctype="Leave Type")).insert() - allocation = frappe.get_doc( + allocation = xhiveframework.get_doc( dict( doctype="Leave Allocation", employee=employee.name, @@ -733,7 +733,7 @@ class TestLeaveApplication(unittest.TestCase): ) allocation.insert(ignore_permissions=True) allocation.submit() - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -760,7 +760,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_allocation.submit() - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -774,7 +774,7 @@ class TestLeaveApplication(unittest.TestCase): ) ) leave_application.submit() - leave_ledger_entry = frappe.get_all( + leave_ledger_entry = xhiveframework.get_all( "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_application.name) ) @@ -785,7 +785,7 @@ class TestLeaveApplication(unittest.TestCase): # check if leave ledger entry is deleted on cancellation leave_application.cancel() self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_application.name}) + xhiveframework.db.exists("Leave Ledger Entry", {"transaction_name": leave_application.name}) ) def test_ledger_entry_creation_on_intermediate_allocation_expiry(self): @@ -799,7 +799,7 @@ class TestLeaveApplication(unittest.TestCase): create_carry_forwarded_allocation(employee, leave_type) - leave_application = frappe.get_doc( + leave_application = xhiveframework.get_doc( dict( doctype="Leave Application", employee=employee.name, @@ -816,7 +816,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_application.submit() - leave_ledger_entry = frappe.get_all( + leave_ledger_entry = xhiveframework.get_all( "Leave Ledger Entry", "*", filters=dict(transaction_name=leave_application.name) ) @@ -853,7 +853,7 @@ class TestLeaveApplication(unittest.TestCase): employee.reload() employee.leave_approver = user employee.save() - self.assertTrue("Leave Approver" in frappe.get_roles(user)) + self.assertTrue("Leave Approver" in xhiveframework.get_roles(user)) make_allocation_record(employee.name) @@ -862,25 +862,25 @@ class TestLeaveApplication(unittest.TestCase): application.to_date = "2018-01-03" application.leave_approver = user application.insert() - self.assertTrue(application.name in frappe.share.get_shared("Leave Application", user)) + self.assertTrue(application.name in xhiveframework.share.get_shared("Leave Application", user)) # check shared doc revoked application.reload() application.leave_approver = "test@example.com" application.save() - self.assertTrue(application.name not in frappe.share.get_shared("Leave Application", user)) + self.assertTrue(application.name not in xhiveframework.share.get_shared("Leave Application", user)) application.reload() application.leave_approver = user application.save() - frappe.set_user(user) + xhiveframework.set_user(user) application.reload() application.status = "Approved" application.submit() # unset leave approver - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") employee.reload() employee.leave_approver = "" employee.save() @@ -937,7 +937,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -970,7 +970,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -1004,7 +1004,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -1046,7 +1046,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -1080,7 +1080,7 @@ class TestLeaveApplication(unittest.TestCase): ) leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -1116,7 +1116,7 @@ class TestLeaveApplication(unittest.TestCase): create_carry_forwarded_allocation(employee, leave_type, date="2019-01-01") # new allocation with cf leaves leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - cf_expiry = frappe.db.get_value( + cf_expiry = xhiveframework.db.get_value( "Leave Ledger Entry", {"transaction_name": leave_alloc.name, "is_carry_forward": 1}, "to_date" ) @@ -1157,7 +1157,7 @@ def create_carry_forwarded_allocation(employee, leave_type, date=None): def make_allocation_record( employee=None, leave_type=None, from_date=None, to_date=None, carry_forward=False, leaves=None ): - allocation = frappe.get_doc( + allocation = xhiveframework.get_doc( { "doctype": "Leave Allocation", "employee": employee or "_T-Employee-00001", @@ -1176,22 +1176,22 @@ def make_allocation_record( def get_employee(): - return frappe.get_doc("Employee", "_T-Employee-00001") + return xhiveframework.get_doc("Employee", "_T-Employee-00001") def set_leave_approver(): employee = get_employee() - dept_doc = frappe.get_doc("Department", employee.department) + dept_doc = xhiveframework.get_doc("Department", employee.department) dept_doc.append("leave_approvers", {"approver": "test@example.com"}) dept_doc.save(ignore_permissions=True) def get_leave_period(): - leave_period_name = frappe.db.get_value("Leave Period", {"company": "_Test Company"}) + leave_period_name = xhiveframework.db.get_value("Leave Period", {"company": "_Test Company"}) if leave_period_name: - return frappe.get_doc("Leave Period", leave_period_name) + return xhiveframework.get_doc("Leave Period", leave_period_name) else: - return frappe.get_doc( + return xhiveframework.get_doc( dict( name="Test Leave Period", doctype="Leave Period", @@ -1204,7 +1204,7 @@ def get_leave_period(): def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, eligible_leaves=0): - allocate_leave = frappe.get_doc( + allocate_leave = xhiveframework.get_doc( { "doctype": "Leave Allocation", "__islocal": 1, diff --git a/hrms/hr/doctype/leave_block_list/leave_block_list.js b/hrms/hr/doctype/leave_block_list/leave_block_list.js index 85563a9..7e7c686 100644 --- a/hrms/hr/doctype/leave_block_list/leave_block_list.js +++ b/hrms/hr/doctype/leave_block_list/leave_block_list.js @@ -1,9 +1,9 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Block List', { +xhiveframework.ui.form.on('Leave Block List', { add_day_wise_dates: function(frm) { - let d = new frappe.ui.Dialog({ + let d = new xhiveframework.ui.Dialog({ title: 'Add Leave Block Dates', fields: [ { diff --git a/hrms/hr/doctype/leave_block_list/leave_block_list.py b/hrms/hr/doctype/leave_block_list/leave_block_list.py index ce7bb45..2cc58f0 100644 --- a/hrms/hr/doctype/leave_block_list/leave_block_list.py +++ b/hrms/hr/doctype/leave_block_list/leave_block_list.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate class LeaveBlockList(Document): @@ -16,10 +16,10 @@ class LeaveBlockList(Document): for d in self.get("leave_block_list_dates"): # date is not repeated if d.block_date in dates: - frappe.msgprint(_("Date is repeated") + ":" + d.block_date, raise_exception=1) + xhiveframework.msgprint(_("Date is repeated") + ":" + d.block_date, raise_exception=1) dates.append(d.block_date) - @frappe.whitelist() + @xhiveframework.whitelist() def set_weekly_off_dates(self, start_date, end_date, days, reason): date_list = self.get_block_dates_from_date(start_date, end_date, days) for date in date_list: @@ -42,11 +42,11 @@ class LeaveBlockList(Document): return date_list -@frappe.whitelist() +@xhiveframework.whitelist() def get_applicable_block_dates( from_date, to_date, employee=None, company=None, all_lists=False, leave_type=None ): - return frappe.db.get_all( + return xhiveframework.db.get_all( "Leave Block List Date", filters={ "parent": ["IN", get_applicable_block_lists(employee, company, all_lists, leave_type)], @@ -60,12 +60,12 @@ def get_applicable_block_lists(employee=None, company=None, all_lists=False, lea block_lists = [] if not employee: - employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user}) + employee = xhiveframework.db.get_value("Employee", {"user_id": xhiveframework.session.user}) if not employee: return [] if not company: - company = frappe.db.get_value("Employee", employee, "company") + company = xhiveframework.db.get_value("Employee", employee, "company") def add_block_list(block_list): for d in block_list: @@ -73,10 +73,10 @@ def get_applicable_block_lists(employee=None, company=None, all_lists=False, lea block_lists.append(d) # per department - department = frappe.db.get_value("Employee", employee, "department") + department = xhiveframework.db.get_value("Employee", employee, "department") if department: - block_list = frappe.db.get_value("Department", department, "leave_block_list") - block_list_leave_type = frappe.db.get_value("Leave Block List", block_list, "leave_type") + block_list = xhiveframework.db.get_value("Department", department, "leave_block_list") + block_list_leave_type = xhiveframework.db.get_value("Leave Block List", block_list, "leave_type") if not block_list_leave_type or not leave_type or block_list_leave_type == leave_type: add_block_list([block_list]) @@ -85,13 +85,13 @@ def get_applicable_block_lists(employee=None, company=None, all_lists=False, lea if leave_type: conditions["leave_type"] = ["IN", (leave_type, "", None)] - add_block_list(frappe.db.get_all("Leave Block List", filters=conditions, pluck="name")) + add_block_list(xhiveframework.db.get_all("Leave Block List", filters=conditions, pluck="name")) return list(set(block_lists)) def is_user_in_allow_list(block_list): - return frappe.db.get_value( + return xhiveframework.db.get_value( "Leave Block List Allow", - {"parent": block_list, "allow_user": frappe.session.user}, + {"parent": block_list, "allow_user": xhiveframework.session.user}, "allow_user", ) diff --git a/hrms/hr/doctype/leave_block_list/test_leave_block_list.py b/hrms/hr/doctype/leave_block_list/test_leave_block_list.py index 702311a..8ae6529 100644 --- a/hrms/hr/doctype/leave_block_list/test_leave_block_list.py +++ b/hrms/hr/doctype/leave_block_list/test_leave_block_list.py @@ -1,24 +1,24 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt import unittest -import frappe -from frappe.utils import getdate +import xhiveframework +from xhiveframework.utils import getdate from hrms.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates test_dependencies = ["Employee"] -test_records = frappe.get_test_records("Leave Block List") +test_records = xhiveframework.get_test_records("Leave Block List") class TestLeaveBlockList(unittest.TestCase): def tearDown(self): - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") def test_get_applicable_block_dates(self): - frappe.set_user("test@example.com") - frappe.db.set_value( + xhiveframework.set_user("test@example.com") + xhiveframework.db.set_value( "Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List" ) self.assertTrue( @@ -27,8 +27,8 @@ class TestLeaveBlockList(unittest.TestCase): ) def test_get_applicable_block_dates_for_allowed_user(self): - frappe.set_user("test1@example.com") - frappe.db.set_value( + xhiveframework.set_user("test1@example.com") + xhiveframework.db.set_value( "Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List" ) self.assertEqual( @@ -36,8 +36,8 @@ class TestLeaveBlockList(unittest.TestCase): ) def test_get_applicable_block_dates_all_lists(self): - frappe.set_user("test1@example.com") - frappe.db.set_value( + xhiveframework.set_user("test1@example.com") + xhiveframework.db.set_value( "Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List" ) self.assertTrue( @@ -48,8 +48,8 @@ class TestLeaveBlockList(unittest.TestCase): ) def test_get_applicable_block_dates_all_lists_for_leave_type(self): - frappe.set_user("test1@example.com") - frappe.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "") + xhiveframework.set_user("test1@example.com") + xhiveframework.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "") block_days = [ d.block_date @@ -63,8 +63,8 @@ class TestLeaveBlockList(unittest.TestCase): self.assertFalse(getdate("2013-01-25") in block_days) def test_get_applicable_block_dates_for_allowed_user_for_leave_type(self): - frappe.set_user("test1@example.com") - frappe.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "") + xhiveframework.set_user("test1@example.com") + xhiveframework.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "") block_days = [ d.block_date diff --git a/hrms/hr/doctype/leave_block_list_allow/leave_block_list_allow.py b/hrms/hr/doctype/leave_block_list_allow/leave_block_list_allow.py index 50dc125..10f9764 100644 --- a/hrms/hr/doctype/leave_block_list_allow/leave_block_list_allow.py +++ b/hrms/hr/doctype/leave_block_list_allow/leave_block_list_allow.py @@ -1,10 +1,10 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class LeaveBlockListAllow(Document): diff --git a/hrms/hr/doctype/leave_block_list_date/leave_block_list_date.py b/hrms/hr/doctype/leave_block_list_date/leave_block_list_date.py index 36550cc..2c716ec 100644 --- a/hrms/hr/doctype/leave_block_list_date/leave_block_list_date.py +++ b/hrms/hr/doctype/leave_block_list_date/leave_block_list_date.py @@ -1,10 +1,10 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class LeaveBlockListDate(Document): diff --git a/hrms/hr/doctype/leave_control_panel/leave_control_panel.js b/hrms/hr/doctype/leave_control_panel/leave_control_panel.js index 4a45080..f4e12e2 100644 --- a/hrms/hr/doctype/leave_control_panel/leave_control_panel.js +++ b/hrms/hr/doctype/leave_control_panel/leave_control_panel.js @@ -1,10 +1,10 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.ui.form.on("Leave Control Panel", { +xhiveframework.ui.form.on("Leave Control Panel", { onload: function(frm) { if (!frm.doc.from_date) { - frm.set_value('from_date', frappe.datetime.get_today()); + frm.set_value('from_date', xhiveframework.datetime.get_today()); } }, refresh: function(frm) { diff --git a/hrms/hr/doctype/leave_control_panel/leave_control_panel.py b/hrms/hr/doctype/leave_control_panel/leave_control_panel.py index 86cd543..4e9c2bf 100644 --- a/hrms/hr/doctype/leave_control_panel/leave_control_panel.py +++ b/hrms/hr/doctype/leave_control_panel/leave_control_panel.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _, msgprint -from frappe.model.document import Document -from frappe.utils import cint, comma_and, cstr, flt +import xhiveframework +from xhiveframework import _, msgprint +from xhiveframework.model.document import Document +from xhiveframework.utils import cint, comma_and, cstr, flt class LeaveControlPanel(Document): @@ -32,7 +32,7 @@ class LeaveControlPanel(Document): condition_str = " and " + " and ".join(conditions) if len(conditions) else "" - e = frappe.db.sql( + e = xhiveframework.db.sql( "select name from tabEmployee where status='Active' {condition}".format( condition=condition_str ), @@ -44,23 +44,23 @@ class LeaveControlPanel(Document): def validate_values(self): for f in ["from_date", "to_date", "leave_type", "no_of_days"]: if not self.get(f): - frappe.throw(_("{0} is required").format(self.meta.get_label(f))) + xhiveframework.throw(_("{0} is required").format(self.meta.get_label(f))) self.validate_from_to_dates("from_date", "to_date") - @frappe.whitelist() + @xhiveframework.whitelist() def allocate_leave(self): self.validate_values() leave_allocated_for = [] employees = self.get_employees() if not employees: - frappe.throw(_("No employee found")) + xhiveframework.throw(_("No employee found")) for d in self.get_employees(): try: - la = frappe.new_doc("Leave Allocation") + la = xhiveframework.new_doc("Leave Allocation") la.set("__islocal", 1) la.employee = cstr(d[0]) - la.employee_name = frappe.db.get_value("Employee", cstr(d[0]), "employee_name") + la.employee_name = xhiveframework.db.get_value("Employee", cstr(d[0]), "employee_name") la.leave_type = self.leave_type la.from_date = self.from_date la.to_date = self.to_date diff --git a/hrms/hr/doctype/leave_control_panel/test_leave_control_panel.py b/hrms/hr/doctype/leave_control_panel/test_leave_control_panel.py index d5a9bc0..5321421 100644 --- a/hrms/hr/doctype/leave_control_panel/test_leave_control_panel.py +++ b/hrms/hr/doctype/leave_control_panel/test_leave_control_panel.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/leave_encashment/leave_encashment.js b/hrms/hr/doctype/leave_encashment/leave_encashment.js index 45e4144..d6b98e9 100644 --- a/hrms/hr/doctype/leave_encashment/leave_encashment.js +++ b/hrms/hr/doctype/leave_encashment/leave_encashment.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Encashment', { +xhiveframework.ui.form.on('Leave Encashment', { onload: function(frm) { // Ignore cancellation of doctype on cancel all. frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; @@ -17,13 +17,13 @@ frappe.ui.form.on('Leave Encashment', { }, refresh: function(frm) { cur_frm.set_intro(""); - if(frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) { + if(frm.doc.__islocal && !in_list(xhiveframework.user_roles, "Employee")) { frm.set_intro(__("Fill the form and save it")); } }, employee: function(frm) { if (frm.doc.employee) { - frappe.run_serially([ + xhiveframework.run_serially([ () => frm.trigger('get_employee_currency'), () => frm.trigger('get_leave_details_for_encashment') ]); @@ -37,7 +37,7 @@ frappe.ui.form.on('Leave Encashment', { }, get_leave_details_for_encashment: function(frm) { if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type) { - return frappe.call({ + return xhiveframework.call({ method: "get_leave_details_for_encashment", doc: frm.doc, callback: function(r) { @@ -48,7 +48,7 @@ frappe.ui.form.on('Leave Encashment', { }, get_employee_currency: function(frm) { - frappe.call({ + xhiveframework.call({ method: "hrms.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", args: { employee: frm.doc.employee, diff --git a/hrms/hr/doctype/leave_encashment/leave_encashment.py b/hrms/hr/doctype/leave_encashment/leave_encashment.py index dad89fc..ac5e404 100644 --- a/hrms/hr/doctype/leave_encashment/leave_encashment.py +++ b/hrms/hr/doctype/leave_encashment/leave_encashment.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate, nowdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate, nowdate from hrms.hr.doctype.leave_application.leave_application import get_leaves_for_period from hrms.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry @@ -26,8 +26,8 @@ class LeaveEncashment(Document): self.encashment_date = getdate(nowdate()) def validate_salary_structure(self): - if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}): - frappe.throw( + if not xhiveframework.db.exists("Salary Structure Assignment", {"employee": self.employee}): + xhiveframework.throw( _("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format( self.employee ) @@ -35,18 +35,18 @@ class LeaveEncashment(Document): def before_submit(self): if self.encashment_amount <= 0: - frappe.throw(_("You can only submit Leave Encashment for a valid encashment amount")) + xhiveframework.throw(_("You can only submit Leave Encashment for a valid encashment amount")) def on_submit(self): if not self.leave_allocation: self.leave_allocation = self.get_leave_allocation().get("name") - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.company = frappe.get_value("Employee", self.employee, "company") + additional_salary = xhiveframework.new_doc("Additional Salary") + additional_salary.company = xhiveframework.get_value("Employee", self.employee, "company") additional_salary.employee = self.employee additional_salary.currency = self.currency - earning_component = frappe.get_value("Leave Type", self.leave_type, "earning_component") + earning_component = xhiveframework.get_value("Leave Type", self.leave_type, "earning_component") if not earning_component: - frappe.throw(_("Please set Earning Component for Leave type: {0}.").format(self.leave_type)) + xhiveframework.throw(_("Please set Earning Component for Leave type: {0}.").format(self.leave_type)) additional_salary.salary_component = earning_component additional_salary.payroll_date = self.encashment_date additional_salary.amount = self.encashment_amount @@ -55,11 +55,11 @@ class LeaveEncashment(Document): additional_salary.submit() # Set encashed leaves in Allocation - frappe.db.set_value( + xhiveframework.db.set_value( "Leave Allocation", self.leave_allocation, "total_leaves_encashed", - frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") + xhiveframework.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") + self.encashable_days, ) @@ -67,38 +67,38 @@ class LeaveEncashment(Document): def on_cancel(self): if self.additional_salary: - frappe.get_doc("Additional Salary", self.additional_salary).cancel() + xhiveframework.get_doc("Additional Salary", self.additional_salary).cancel() self.db_set("additional_salary", "") if self.leave_allocation: - frappe.db.set_value( + xhiveframework.db.set_value( "Leave Allocation", self.leave_allocation, "total_leaves_encashed", - frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") + xhiveframework.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") - self.encashable_days, ) self.create_leave_ledger_entry(submit=False) - @frappe.whitelist() + @xhiveframework.whitelist() def get_leave_details_for_encashment(self): salary_structure = get_assigned_salary_structure( self.employee, self.encashment_date or getdate(nowdate()) ) if not salary_structure: - frappe.throw( + xhiveframework.throw( _("No Salary Structure assigned for Employee {0} on given date {1}").format( self.employee, self.encashment_date ) ) - if not frappe.db.get_value("Leave Type", self.leave_type, "allow_encashment"): - frappe.throw(_("Leave Type {0} is not encashable").format(self.leave_type)) + if not xhiveframework.db.get_value("Leave Type", self.leave_type, "allow_encashment"): + xhiveframework.throw(_("Leave Type {0} is not encashable").format(self.leave_type)) allocation = self.get_leave_allocation() if not allocation: - frappe.throw( + xhiveframework.throw( _("No Leaves Allocated to Employee: {0} for Leave Type: {1}").format( self.employee, self.leave_type ) @@ -113,12 +113,12 @@ class LeaveEncashment(Document): ) ) - encashable_days = self.leave_balance - frappe.db.get_value( + encashable_days = self.leave_balance - xhiveframework.db.get_value( "Leave Type", self.leave_type, "encashment_threshold_days" ) self.encashable_days = encashable_days if encashable_days > 0 else 0 - per_day_encashment = frappe.db.get_value( + per_day_encashment = xhiveframework.db.get_value( "Salary Structure", salary_structure, "leave_encashment_amount_per_day" ) self.encashment_amount = ( @@ -131,9 +131,9 @@ class LeaveEncashment(Document): def get_leave_allocation(self): date = self.encashment_date or getdate() - LeaveAllocation = frappe.qb.DocType("Leave Allocation") + LeaveAllocation = xhiveframework.qb.DocType("Leave Allocation") leave_allocation = ( - frappe.qb.from_(LeaveAllocation) + xhiveframework.qb.from_(LeaveAllocation) .select( LeaveAllocation.name, LeaveAllocation.from_date, @@ -152,7 +152,7 @@ class LeaveEncashment(Document): return leave_allocation[0] if leave_allocation else None def create_leave_ledger_entry(self, submit=True): - args = frappe._dict( + args = xhiveframework._dict( leaves=self.encashable_days * -1, from_date=self.encashment_date, to_date=self.encashment_date, @@ -167,7 +167,7 @@ class LeaveEncashment(Document): to_date = leave_allocation.get("to_date") if to_date < getdate(nowdate()): - args = frappe._dict( + args = xhiveframework._dict( leaves=self.encashable_days, from_date=to_date, to_date=to_date, is_carry_forward=0 ) create_leave_ledger_entry(self, args, submit) @@ -178,7 +178,7 @@ def create_leave_encashment(leave_allocation): for allocation in leave_allocation: if not get_assigned_salary_structure(allocation.employee, allocation.to_date): continue - leave_encashment = frappe.get_doc( + leave_encashment = xhiveframework.get_doc( dict( doctype="Leave Encashment", leave_period=allocation.leave_period, diff --git a/hrms/hr/doctype/leave_encashment/test_leave_encashment.py b/hrms/hr/doctype/leave_encashment/test_leave_encashment.py index 4cc6268..6c45ae9 100644 --- a/hrms/hr/doctype/leave_encashment/test_leave_encashment.py +++ b/hrms/hr/doctype/leave_encashment/test_leave_encashment.py @@ -1,14 +1,14 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, get_year_ending, get_year_start, getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, get_year_ending, get_year_start, getdate -from erpnext.setup.doctype.employee.test_employee import make_employee -from erpnext.setup.doctype.holiday_list.test_holiday_list import set_holiday_list +from xhiveerp.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.holiday_list.test_holiday_list import set_holiday_list from hrms.hr.doctype.leave_period.test_leave_period import create_leave_period from hrms.hr.doctype.leave_policy.test_leave_policy import create_leave_policy @@ -21,20 +21,20 @@ from hrms.payroll.doctype.salary_slip.test_salary_slip import ( ) from hrms.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure -test_records = frappe.get_test_records("Leave Type") +test_records = xhiveframework.get_test_records("Leave Type") -class TestLeaveEncashment(FrappeTestCase): +class TestLeaveEncashment(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Leave Period") - frappe.db.delete("Leave Policy Assignment") - frappe.db.delete("Leave Allocation") - frappe.db.delete("Leave Ledger Entry") - frappe.db.delete("Additional Salary") - frappe.db.delete("Leave Encashment") + xhiveframework.db.delete("Leave Period") + xhiveframework.db.delete("Leave Policy Assignment") + xhiveframework.db.delete("Leave Allocation") + xhiveframework.db.delete("Leave Ledger Entry") + xhiveframework.db.delete("Additional Salary") + xhiveframework.db.delete("Leave Encashment") - if not frappe.db.exists("Leave Type", "_Test Leave Type Encashment"): - frappe.get_doc(test_records[2]).insert() + if not xhiveframework.db.exists("Leave Type", "_Test Leave Type Encashment"): + xhiveframework.get_doc(test_records[2]).insert() date = getdate() year_start = getdate(get_year_start(date)) @@ -60,7 +60,7 @@ class TestLeaveEncashment(FrappeTestCase): } leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee], frappe._dict(data) + [self.employee], xhiveframework._dict(data) ) salary_structure = make_salary_structure( @@ -72,7 +72,7 @@ class TestLeaveEncashment(FrappeTestCase): @set_holiday_list("_Test Leave Encashment", "_Test Company") def test_leave_balance_value_and_amount(self): - leave_encashment = frappe.get_doc( + leave_encashment = xhiveframework.get_doc( dict( doctype="Leave Encashment", employee=self.employee, @@ -90,7 +90,7 @@ class TestLeaveEncashment(FrappeTestCase): leave_encashment.submit() # assert links - add_sal = frappe.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0] + add_sal = xhiveframework.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0] self.assertTrue(add_sal) @set_holiday_list("_Test Leave Encashment", "_Test Company") @@ -101,7 +101,7 @@ class TestLeaveEncashment(FrappeTestCase): ) leave_application.reload() - leave_encashment = frappe.get_doc( + leave_encashment = xhiveframework.get_doc( dict( doctype="Leave Encashment", employee=self.employee, @@ -121,12 +121,12 @@ class TestLeaveEncashment(FrappeTestCase): leave_encashment.submit() # assert links - add_sal = frappe.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0] + add_sal = xhiveframework.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0] self.assertTrue(add_sal) @set_holiday_list("_Test Leave Encashment", "_Test Company") def test_creation_of_leave_ledger_entry_on_submit(self): - leave_encashment = frappe.get_doc( + leave_encashment = xhiveframework.get_doc( dict( doctype="Leave Encashment", employee=self.employee, @@ -139,7 +139,7 @@ class TestLeaveEncashment(FrappeTestCase): leave_encashment.submit() - leave_ledger_entry = frappe.get_all( + leave_ledger_entry = xhiveframework.get_all( "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_encashment.name) ) @@ -150,11 +150,11 @@ class TestLeaveEncashment(FrappeTestCase): # check if leave ledger entry is deleted on cancellation - frappe.db.sql( + xhiveframework.db.sql( "Delete from `tabAdditional Salary` WHERE ref_docname = %s", (leave_encashment.name) ) leave_encashment.cancel() self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_encashment.name}) + xhiveframework.db.exists("Leave Ledger Entry", {"transaction_name": leave_encashment.name}) ) diff --git a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.js b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.js index c68d518..0cb775d 100644 --- a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.js +++ b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.js @@ -1,7 +1,7 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Ledger Entry', { +xhiveframework.ui.form.on('Leave Ledger Entry', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.py b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.py index f7a23a5..d5b1ed8 100644 --- a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.py +++ b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry.py @@ -1,29 +1,29 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import DATE_FORMAT, flt, getdate, today +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import DATE_FORMAT, flt, getdate, today class LeaveLedgerEntry(Document): def validate(self): if getdate(self.from_date) > getdate(self.to_date): - frappe.throw(_("To date needs to be before from date")) + xhiveframework.throw(_("To date needs to be before from date")) def on_cancel(self): # allow cancellation of expiry leaves if self.is_expired: - frappe.db.set_value("Leave Allocation", self.transaction_name, "expired", 0) + xhiveframework.db.set_value("Leave Allocation", self.transaction_name, "expired", 0) else: - frappe.throw(_("Only expired allocation can be cancelled")) + xhiveframework.throw(_("Only expired allocation can be cancelled")) def validate_leave_allocation_against_leave_application(ledger): """Checks that leave allocation has no leave application against it""" - leave_application_records = frappe.db.sql_list( + leave_application_records = xhiveframework.db.sql_list( """ SELECT transaction_name FROM `tabLeave Ledger Entry` @@ -38,7 +38,7 @@ def validate_leave_allocation_against_leave_application(ledger): ) if leave_application_records: - frappe.throw( + xhiveframework.throw( _("Leave allocation {0} is linked with the Leave Application {1}").format( ledger.transaction_name, ", ".join(leave_application_records) ) @@ -46,7 +46,7 @@ def validate_leave_allocation_against_leave_application(ledger): def create_leave_ledger_entry(ref_doc, args, submit=True): - ledger = frappe._dict( + ledger = xhiveframework._dict( doctype="Leave Ledger Entry", employee=ref_doc.employee, employee_name=ref_doc.employee_name, @@ -60,7 +60,7 @@ def create_leave_ledger_entry(ref_doc, args, submit=True): ledger.update(args) if submit: - doc = frappe.get_doc(ledger) + doc = xhiveframework.get_doc(ledger) doc.flags.ignore_permissions = 1 doc.submit() else: @@ -73,7 +73,7 @@ def delete_ledger_entry(ledger): validate_leave_allocation_against_leave_application(ledger) expired_entry = get_previous_expiry_ledger_entry(ledger) - frappe.db.sql( + xhiveframework.db.sql( """DELETE FROM `tabLeave Ledger Entry` WHERE @@ -85,7 +85,7 @@ def delete_ledger_entry(ledger): def get_previous_expiry_ledger_entry(ledger): """Returns the expiry ledger entry having same creation date as the ledger entry to be cancelled""" - creation_date = frappe.db.get_value( + creation_date = xhiveframework.db.get_value( "Leave Ledger Entry", filters={ "transaction_name": ledger.transaction_name, @@ -97,7 +97,7 @@ def get_previous_expiry_ledger_entry(ledger): creation_date = creation_date.strftime(DATE_FORMAT) if creation_date else "" - return frappe.db.get_value( + return xhiveframework.db.get_value( "Leave Ledger Entry", filters={ "creation": ("like", creation_date + "%"), @@ -120,14 +120,14 @@ def process_expired_allocation(): """ # fetch leave type records that has carry forwarded leaves expiry - leave_type_records = frappe.db.get_values( + leave_type_records = xhiveframework.db.get_values( "Leave Type", filters={"expire_carry_forwarded_leaves_after_days": (">", 0)}, fieldname=["name"] ) leave_type = [record[0] for record in leave_type_records] or [""] # fetch non expired leave ledger entry of transaction_type allocation - expire_allocation = frappe.db.sql( + expire_allocation = xhiveframework.db.sql( """ SELECT leaves, to_date, employee, leave_type, @@ -166,7 +166,7 @@ def create_expiry_ledger_entry(allocations): def get_remaining_leaves(allocation): """Returns remaining leaves from the given allocation""" - return frappe.db.get_value( + return xhiveframework.db.get_value( "Leave Ledger Entry", filters={ "employee": allocation.employee, @@ -178,7 +178,7 @@ def get_remaining_leaves(allocation): ) -@frappe.whitelist() +@xhiveframework.whitelist() def expire_allocation(allocation, expiry_date=None): """expires non-carry forwarded allocation""" leaves = get_remaining_leaves(allocation) @@ -197,7 +197,7 @@ def expire_allocation(allocation, expiry_date=None): ) create_leave_ledger_entry(allocation, args) - frappe.db.set_value("Leave Allocation", allocation.name, "expired", 1) + xhiveframework.db.set_value("Leave Allocation", allocation.name, "expired", 1) def expire_carried_forward_allocation(allocation): @@ -215,7 +215,7 @@ def expire_carried_forward_allocation(allocation): # allow expired leaves entry to be created if leaves > 0: - args = frappe._dict( + args = xhiveframework._dict( transaction_name=allocation.name, transaction_type="Leave Allocation", leaves=allocation.leaves * -1, diff --git a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js index 889325b..d589083 100644 --- a/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js +++ b/hrms/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Leave Ledger Entry'] = { +xhiveframework.listview_settings['Leave Ledger Entry'] = { onload: function(listview) { if(listview.page.fields_dict.transaction_type) { listview.page.fields_dict.transaction_type.get_query = function() { diff --git a/hrms/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py b/hrms/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py index 3121109..41d3ccb 100644 --- a/hrms/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py +++ b/hrms/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py @@ -1,7 +1,7 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2019, Xhive LLC # See license.txt -# import frappe +# import xhiveframework import unittest diff --git a/hrms/hr/doctype/leave_period/leave_period.js b/hrms/hr/doctype/leave_period/leave_period.js index 0e88bc1..d8118cc 100644 --- a/hrms/hr/doctype/leave_period/leave_period.js +++ b/hrms/hr/doctype/leave_period/leave_period.js @@ -1,11 +1,11 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Period', { +xhiveframework.ui.form.on('Leave Period', { from_date: (frm)=>{ if (frm.doc.from_date && !frm.doc.to_date) { - var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12); - frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1)); + var a_year_from_start = xhiveframework.datetime.add_months(frm.doc.from_date, 12); + frm.set_value("to_date", xhiveframework.datetime.add_days(a_year_from_start, -1)); } }, onload: (frm) => { diff --git a/hrms/hr/doctype/leave_period/leave_period.py b/hrms/hr/doctype/leave_period/leave_period.py index 25a7784..c0fce8d 100644 --- a/hrms/hr/doctype/leave_period/leave_period.py +++ b/hrms/hr/doctype/leave_period/leave_period.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import getdate from hrms.hr.utils import validate_overlap @@ -17,4 +17,4 @@ class LeavePeriod(Document): def validate_dates(self): if getdate(self.from_date) >= getdate(self.to_date): - frappe.throw(_("To date can not be equal or less than from date")) + xhiveframework.throw(_("To date can not be equal or less than from date")) diff --git a/hrms/hr/doctype/leave_period/leave_period_dashboard.py b/hrms/hr/doctype/leave_period/leave_period_dashboard.py index 854f988..52b2242 100644 --- a/hrms/hr/doctype/leave_period/leave_period_dashboard.py +++ b/hrms/hr/doctype/leave_period/leave_period_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/leave_period/test_leave_period.py b/hrms/hr/doctype/leave_period/test_leave_period.py index 0923574..2bf2d3b 100644 --- a/hrms/hr/doctype/leave_period/test_leave_period.py +++ b/hrms/hr/doctype/leave_period/test_leave_period.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe +import xhiveframework -import erpnext +import xhiveerp test_dependencies = ["Employee", "Leave Type", "Leave Policy"] @@ -15,10 +15,10 @@ class TestLeavePeriod(unittest.TestCase): def create_leave_period(from_date, to_date, company=None): - leave_period = frappe.db.get_value( + leave_period = xhiveframework.db.get_value( "Leave Period", dict( - company=company or erpnext.get_default_company(), + company=company or xhiveerp.get_default_company(), from_date=from_date, to_date=to_date, is_active=1, @@ -26,12 +26,12 @@ def create_leave_period(from_date, to_date, company=None): "name", ) if leave_period: - return frappe.get_doc("Leave Period", leave_period) + return xhiveframework.get_doc("Leave Period", leave_period) - leave_period = frappe.get_doc( + leave_period = xhiveframework.get_doc( { "doctype": "Leave Period", - "company": company or erpnext.get_default_company(), + "company": company or xhiveerp.get_default_company(), "from_date": from_date, "to_date": to_date, "is_active": 1, diff --git a/hrms/hr/doctype/leave_policy/leave_policy.js b/hrms/hr/doctype/leave_policy/leave_policy.js index fdf8e0c..7f48090 100644 --- a/hrms/hr/doctype/leave_policy/leave_policy.js +++ b/hrms/hr/doctype/leave_policy/leave_policy.js @@ -1,15 +1,15 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Policy', { +xhiveframework.ui.form.on('Leave Policy', { }); -frappe.ui.form.on('Leave Policy Detail',{ +xhiveframework.ui.form.on('Leave Policy Detail',{ leave_type: function(frm, cdt, cdn) { var child = locals[cdt][cdn]; if(child.leave_type){ - frappe.call({ - method: "frappe.client.get_value", + xhiveframework.call({ + method: "xhiveframework.client.get_value", args: { doctype: "Leave Type", fieldname: "max_leaves_allowed", diff --git a/hrms/hr/doctype/leave_policy/leave_policy.py b/hrms/hr/doctype/leave_policy/leave_policy.py index 33c9493..919211c 100644 --- a/hrms/hr/doctype/leave_policy/leave_policy.py +++ b/hrms/hr/doctype/leave_policy/leave_policy.py @@ -1,21 +1,21 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document class LeavePolicy(Document): def validate(self): if self.leave_policy_details: for lp_detail in self.leave_policy_details: - max_leaves_allowed = frappe.db.get_value( + max_leaves_allowed = xhiveframework.db.get_value( "Leave Type", lp_detail.leave_type, "max_leaves_allowed" ) if max_leaves_allowed > 0 and lp_detail.annual_allocation > max_leaves_allowed: - frappe.throw( + xhiveframework.throw( _("Maximum leave allowed in the leave type {0} is {1}").format( lp_detail.leave_type, max_leaves_allowed ) diff --git a/hrms/hr/doctype/leave_policy/leave_policy_dashboard.py b/hrms/hr/doctype/leave_policy/leave_policy_dashboard.py index 57ea93e..90667a0 100644 --- a/hrms/hr/doctype/leave_policy/leave_policy_dashboard.py +++ b/hrms/hr/doctype/leave_policy/leave_policy_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/leave_policy/test_leave_policy.py b/hrms/hr/doctype/leave_policy/test_leave_policy.py index 33d5508..c6fabf3 100644 --- a/hrms/hr/doctype/leave_policy/test_leave_policy.py +++ b/hrms/hr/doctype/leave_policy/test_leave_policy.py @@ -1,17 +1,17 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe +import xhiveframework class TestLeavePolicy(unittest.TestCase): def test_max_leave_allowed(self): - random_leave_type = frappe.get_all("Leave Type", fields=["name", "max_leaves_allowed"]) + random_leave_type = xhiveframework.get_all("Leave Type", fields=["name", "max_leaves_allowed"]) if random_leave_type: random_leave_type = random_leave_type[0] - leave_type = frappe.get_doc("Leave Type", random_leave_type.name) + leave_type = xhiveframework.get_doc("Leave Type", random_leave_type.name) leave_type.max_leaves_allowed = 2 leave_type.save() @@ -19,13 +19,13 @@ class TestLeavePolicy(unittest.TestCase): leave_type=leave_type.name, annual_allocation=leave_type.max_leaves_allowed + 1 ) - self.assertRaises(frappe.ValidationError, leave_policy.insert) + self.assertRaises(xhiveframework.ValidationError, leave_policy.insert) def create_leave_policy(**args): """Returns an object of leave policy""" - args = frappe._dict(args) - return frappe.get_doc( + args = xhiveframework._dict(args) + return xhiveframework.get_doc( { "doctype": "Leave Policy", "title": "Test Leave Policy", diff --git a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.js b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.js index 0aaf4cf..dad2398 100644 --- a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.js +++ b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.js @@ -1,7 +1,7 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2020, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Policy Assignment', { +xhiveframework.ui.form.on('Leave Policy Assignment', { onload: function(frm) { frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; @@ -39,18 +39,18 @@ frappe.ui.form.on('Leave Policy Assignment', { set_effective_date: function(frm) { if (frm.doc.assignment_based_on == "Leave Period" && frm.doc.leave_period) { - frappe.model.with_doc("Leave Period", frm.doc.leave_period, function () { - let from_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "from_date"); - let to_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "to_date"); + xhiveframework.model.with_doc("Leave Period", frm.doc.leave_period, function () { + let from_date = xhiveframework.model.get_value("Leave Period", frm.doc.leave_period, "from_date"); + let to_date = xhiveframework.model.get_value("Leave Period", frm.doc.leave_period, "to_date"); frm.set_value("effective_from", from_date); frm.set_value("effective_to", to_date); }); } else if (frm.doc.assignment_based_on == "Joining Date" && frm.doc.employee) { - frappe.model.with_doc("Employee", frm.doc.employee, function () { - let from_date = frappe.model.get_value("Employee", frm.doc.employee, "date_of_joining"); + xhiveframework.model.with_doc("Employee", frm.doc.employee, function () { + let from_date = xhiveframework.model.get_value("Employee", frm.doc.employee, "date_of_joining"); frm.set_value("effective_from", from_date); - frm.set_value("effective_to", frappe.datetime.add_months(frm.doc.effective_from, 12)); + frm.set_value("effective_to", xhiveframework.datetime.add_months(frm.doc.effective_from, 12)); }); } frm.refresh(); diff --git a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.py b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.py index 5c32659..adc5b7a 100644 --- a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.py +++ b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment.py @@ -1,14 +1,14 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2020, Xhive LLC # For license information, please see license.txt import json from math import ceil -import frappe -from frappe import _, bold -from frappe.model.document import Document -from frappe.utils import ( +import xhiveframework +from xhiveframework import _, bold +from xhiveframework.model.document import Document +from xhiveframework.utils import ( add_months, cint, comma_and, @@ -33,14 +33,14 @@ class LeavePolicyAssignment(Document): def set_dates(self): if self.assignment_based_on == "Leave Period": - self.effective_from, self.effective_to = frappe.db.get_value( + self.effective_from, self.effective_to = xhiveframework.db.get_value( "Leave Period", self.leave_period, ["from_date", "to_date"] ) elif self.assignment_based_on == "Joining Date": - self.effective_from = frappe.db.get_value("Employee", self.employee, "date_of_joining") + self.effective_from = xhiveframework.db.get_value("Employee", self.employee, "date_of_joining") def validate_policy_assignment_overlap(self): - leave_policy_assignments = frappe.get_all( + leave_policy_assignments = xhiveframework.get_all( "Leave Policy Assignment", filters={ "employee": self.employee, @@ -52,7 +52,7 @@ class LeavePolicyAssignment(Document): ) if len(leave_policy_assignments): - frappe.throw( + xhiveframework.throw( _("Leave Policy: {0} already assigned for Employee {1} for period {2} to {3}").format( bold(self.leave_policy), bold(self.employee), @@ -66,26 +66,26 @@ class LeavePolicyAssignment(Document): return leave_types = get_leave_type_details() - leave_policy = frappe.get_doc("Leave Policy", self.leave_policy) + leave_policy = xhiveframework.get_doc("Leave Policy", self.leave_policy) for policy in leave_policy.leave_policy_details: leave_type = leave_types.get(policy.leave_type) if not leave_type.is_carry_forward: msg = _( "Leaves for the Leave Type {0} won't be carry-forwarded since carry-forwarding is disabled." - ).format(frappe.bold(get_link_to_form("Leave Type", leave_type.name))) - frappe.msgprint(msg, indicator="orange", alert=True) + ).format(xhiveframework.bold(get_link_to_form("Leave Type", leave_type.name))) + xhiveframework.msgprint(msg, indicator="orange", alert=True) - @frappe.whitelist() + @xhiveframework.whitelist() def grant_leave_alloc_for_employee(self): if self.leaves_allocated: - frappe.throw(_("Leave already have been assigned for this Leave Policy Assignment")) + xhiveframework.throw(_("Leave already have been assigned for this Leave Policy Assignment")) else: leave_allocations = {} leave_type_details = get_leave_type_details() - leave_policy = frappe.get_doc("Leave Policy", self.leave_policy) - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") + leave_policy = xhiveframework.get_doc("Leave Policy", self.leave_policy) + date_of_joining = xhiveframework.db.get_value("Employee", self.employee, "date_of_joining") for leave_policy_detail in leave_policy.leave_policy_details: leave_details = leave_type_details.get(leave_policy_detail.leave_type) @@ -111,7 +111,7 @@ class LeavePolicyAssignment(Document): new_leaves_allocated = self.get_new_leaves(annual_allocation, leave_details, date_of_joining) - allocation = frappe.get_doc( + allocation = xhiveframework.get_doc( dict( doctype="Leave Allocation", employee=self.employee, @@ -130,10 +130,10 @@ class LeavePolicyAssignment(Document): return allocation.name, new_leaves_allocated def get_new_leaves(self, annual_allocation, leave_details, date_of_joining): - from frappe.model.meta import get_field_precision + from xhiveframework.model.meta import get_field_precision precision = get_field_precision( - frappe.get_meta("Leave Allocation").get_field("new_leaves_allocated") + xhiveframework.get_meta("Leave Allocation").get_field("new_leaves_allocated") ) # Earned Leaves and Compensatory Leaves are allocated by scheduler, initially allocate 0 @@ -169,7 +169,7 @@ class LeavePolicyAssignment(Document): from hrms.hr.utils import get_monthly_earned_leave def _get_current_and_from_date(): - current_date = frappe.flags.current_date or getdate() + current_date = xhiveframework.flags.current_date or getdate() if current_date > getdate(self.effective_to): current_date = getdate(self.effective_to) @@ -195,7 +195,7 @@ class LeavePolicyAssignment(Document): def _get_pro_rata_period_end_date(consider_current_month): # for earned leave, pro-rata period ends on the last day of the month - date = getdate(frappe.flags.current_date) or getdate() + date = getdate(xhiveframework.flags.current_date) or getdate() if consider_current_month: period_end_date = get_last_day(date) else: @@ -232,7 +232,7 @@ def calculate_pro_rated_leaves( if not leaves or getdate(date_of_joining) <= getdate(period_start_date): return leaves - precision = cint(frappe.db.get_single_value("System Settings", "float_precision", cache=True)) + precision = cint(xhiveframework.db.get_single_value("System Settings", "float_precision", cache=True)) actual_period = date_diff(period_end_date, date_of_joining) + 1 complete_period = date_diff(period_end_date, period_start_date) + 1 @@ -244,7 +244,7 @@ def calculate_pro_rated_leaves( def is_earned_leave_applicable_for_current_month(date_of_joining, allocate_on_day): - date = getdate(frappe.flags.current_date) or getdate() + date = getdate(xhiveframework.flags.current_date) or getdate() # If the date of assignment creation is >= the leave type's "Allocate On" date, # then the current month should be considered @@ -258,19 +258,19 @@ def is_earned_leave_applicable_for_current_month(date_of_joining, allocate_on_da return False -@frappe.whitelist() +@xhiveframework.whitelist() def create_assignment_for_multiple_employees(employees, data): if isinstance(employees, str): employees = json.loads(employees) if isinstance(data, str): - data = frappe._dict(json.loads(data)) + data = xhiveframework._dict(json.loads(data)) docs_name = [] failed = [] for employee in employees: - assignment = frappe.new_doc("Leave Policy Assignment") + assignment = xhiveframework.new_doc("Leave Policy Assignment") assignment.employee = employee assignment.assignment_based_on = data.assignment_based_on or None assignment.leave_policy = data.leave_policy @@ -282,10 +282,10 @@ def create_assignment_for_multiple_employees(employees, data): savepoint = "before_assignment_submission" try: - frappe.db.savepoint(savepoint) + xhiveframework.db.savepoint(savepoint) assignment.submit() except Exception as e: - frappe.db.rollback(save_point=savepoint) + xhiveframework.db.rollback(save_point=savepoint) assignment.log_error("Leave Policy Assignment submission failed") failed.append(assignment.name) @@ -298,7 +298,7 @@ def create_assignment_for_multiple_employees(employees, data): def show_assignment_submission_status(failed): - frappe.clear_messages() + xhiveframework.clear_messages() assignment_list = [get_link_to_form("Leave Policy Assignment", entry) for entry in failed] msg = _("Failed to submit some leave policy assignments:") @@ -309,7 +309,7 @@ def show_assignment_submission_status(failed): .format(_("Error Log")) ) - frappe.msgprint( + xhiveframework.msgprint( msg, indicator="red", title=_("Submission Failed"), @@ -318,8 +318,8 @@ def show_assignment_submission_status(failed): def get_leave_type_details(): - leave_type_details = frappe._dict() - leave_types = frappe.get_all( + leave_type_details = xhiveframework._dict() + leave_types = xhiveframework.get_all( "Leave Type", fields=[ "name", diff --git a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py index 13b39c7..43c09c9 100644 --- a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py +++ b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js index 233f503..4c639ce 100644 --- a/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js +++ b/hrms/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js @@ -1,8 +1,8 @@ -frappe.listview_settings['Leave Policy Assignment'] = { +xhiveframework.listview_settings['Leave Policy Assignment'] = { onload: function (list_view) { let me = this; list_view.page.add_inner_button(__("Bulk Leave Policy Assignment"), function () { - me.dialog = new frappe.ui.form.MultiSelectDialog({ + me.dialog = new xhiveframework.ui.form.MultiSelectDialog({ doctype: "Employee", target: cur_list, setters: { @@ -90,7 +90,7 @@ frappe.listview_settings['Leave Policy Assignment'] = { add_filters_group: 1, primary_action_label: "Assign", action(employees, data) { - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.doctype.leave_policy_assignment.leave_policy_assignment.create_assignment_for_multiple_employees', async: false, args: { @@ -106,9 +106,9 @@ frappe.listview_settings['Leave Policy Assignment'] = { set_effective_date: function () { if (cur_dialog.fields_dict.assignment_based_on.value === "Leave Period" && cur_dialog.fields_dict.leave_period.value) { - frappe.model.with_doc("Leave Period", cur_dialog.fields_dict.leave_period.value, function () { - let from_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "from_date"); - let to_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "to_date"); + xhiveframework.model.with_doc("Leave Period", cur_dialog.fields_dict.leave_period.value, function () { + let from_date = xhiveframework.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "from_date"); + let to_date = xhiveframework.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "to_date"); cur_dialog.set_value("effective_from", from_date); cur_dialog.set_value("effective_to", to_date); }); diff --git a/hrms/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py b/hrms/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py index a96b7f7..4ad8df4 100644 --- a/hrms/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py +++ b/hrms/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py @@ -1,11 +1,11 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2020, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import get_first_day, getdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import get_first_day, getdate from hrms.hr.doctype.leave_application.test_leave_application import get_employee, get_leave_period from hrms.hr.doctype.leave_policy.test_leave_policy import create_leave_policy @@ -16,7 +16,7 @@ from hrms.hr.doctype.leave_policy_assignment.leave_policy_assignment import ( test_dependencies = ["Employee"] -class TestLeavePolicyAssignment(FrappeTestCase): +class TestLeavePolicyAssignment(XhiveframeworkTestCase): def setUp(self): for doctype in [ "Leave Period", @@ -25,7 +25,7 @@ class TestLeavePolicyAssignment(FrappeTestCase): "Leave Policy Assignment", "Leave Ledger Entry", ]: - frappe.db.delete(doctype) + xhiveframework.db.delete(doctype) employee = get_employee() self.original_doj = employee.date_of_joining @@ -46,14 +46,14 @@ class TestLeavePolicyAssignment(FrappeTestCase): "leave_period": leave_period.name, } leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) + [self.employee.name], xhiveframework._dict(data) ) self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), + xhiveframework.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), 1, ) - leave_allocation = frappe.get_list( + leave_allocation = xhiveframework.get_list( "Leave Allocation", filters={ "employee": self.employee.name, @@ -62,7 +62,7 @@ class TestLeavePolicyAssignment(FrappeTestCase): "docstatus": 1, }, )[0] - leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation) + leave_alloc_doc = xhiveframework.get_doc("Leave Allocation", leave_allocation) self.assertEqual(leave_alloc_doc.new_leaves_allocated, 10) self.assertEqual(leave_alloc_doc.leave_type, "_Test Leave Type") @@ -83,15 +83,15 @@ class TestLeavePolicyAssignment(FrappeTestCase): "leave_period": leave_period.name, } leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) + [self.employee.name], xhiveframework._dict(data) ) # every leave is allocated no more leave can be granted now self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), + xhiveframework.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), 1, ) - leave_allocation = frappe.get_list( + leave_allocation = xhiveframework.get_list( "Leave Allocation", filters={ "employee": self.employee.name, @@ -101,13 +101,13 @@ class TestLeavePolicyAssignment(FrappeTestCase): }, )[0] - leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation) + leave_alloc_doc = xhiveframework.get_doc("Leave Allocation", leave_allocation) leave_alloc_doc.cancel() leave_alloc_doc.delete() self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), + xhiveframework.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), 0, ) def tearDown(self): - frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) + xhiveframework.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) diff --git a/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.js b/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.js index ee21f8d..7b7fc9a 100644 --- a/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.js +++ b/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Leave Policy Detail', { +xhiveframework.ui.form.on('Leave Policy Detail', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.py b/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.py index 8916d3d..6a8edd7 100644 --- a/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.py +++ b/hrms/hr/doctype/leave_policy_detail/leave_policy_detail.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class LeavePolicyDetail(Document): diff --git a/hrms/hr/doctype/leave_policy_detail/test_leave_policy_detail.py b/hrms/hr/doctype/leave_policy_detail/test_leave_policy_detail.py index aacf64f..8edccd2 100644 --- a/hrms/hr/doctype/leave_policy_detail/test_leave_policy_detail.py +++ b/hrms/hr/doctype/leave_policy_detail/test_leave_policy_detail.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/leave_type/leave_type.js b/hrms/hr/doctype/leave_type/leave_type.js index b930ded..8665665 100644 --- a/hrms/hr/doctype/leave_type/leave_type.js +++ b/hrms/hr/doctype/leave_type/leave_type.js @@ -1,10 +1,10 @@ -frappe.ui.form.on("Leave Type", { +xhiveframework.ui.form.on("Leave Type", { refresh: function(frm) { } }); -frappe.tour["Leave Type"] = [ +xhiveframework.tour["Leave Type"] = [ { fieldname: "max_leaves_allowed", title: "Maximum Leave Allocation Allowed", @@ -23,7 +23,7 @@ frappe.tour["Leave Type"] = [ { fieldname: "is_compensatory", title: "Is Compensatory Leave", - description: __("Leaves you can avail against a holiday you worked on. You can claim Compensatory Off Leave using Compensatory Leave request. Click") + " here " + __('to know more') + description: __("Leaves you can avail against a holiday you worked on. You can claim Compensatory Off Leave using Compensatory Leave request. Click") + " here " + __('to know more') }, { fieldname: "allow_encashment", @@ -35,4 +35,4 @@ frappe.tour["Leave Type"] = [ title: "Is Earned Leaves", description: __("Earned Leaves are leaves earned by an Employee after working with the company for a certain amount of time. Enabling this will allocate leaves on pro-rata basis by automatically updating Leave Allocation for leaves of this type at intervals set by 'Earned Leave Frequency.") } -]; \ No newline at end of file +]; diff --git a/hrms/hr/doctype/leave_type/leave_type.py b/hrms/hr/doctype/leave_type/leave_type.py index 82b9bd6..a152cb1 100644 --- a/hrms/hr/doctype/leave_type/leave_type.py +++ b/hrms/hr/doctype/leave_type/leave_type.py @@ -1,33 +1,33 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import today +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import today class LeaveType(Document): def validate(self): if self.is_lwp: - leave_allocation = frappe.get_all( + leave_allocation = xhiveframework.get_all( "Leave Allocation", filters={"leave_type": self.name, "from_date": ("<=", today()), "to_date": (">=", today())}, fields=["name"], ) leave_allocation = [l["name"] for l in leave_allocation] if leave_allocation: - frappe.throw( + xhiveframework.throw( _( "Leave application is linked with leave allocations {0}. Leave application cannot be set as leave without pay" ).format(", ".join(leave_allocation)) ) # nosec if self.is_lwp and self.is_ppl: - frappe.throw(_("Leave Type can be either without pay or partial pay")) + xhiveframework.throw(_("Leave Type can be either without pay or partial pay")) if self.is_ppl and ( self.fraction_of_daily_salary_per_leave < 0 or self.fraction_of_daily_salary_per_leave > 1 ): - frappe.throw(_("The fraction of Daily Salary per Leave should be between 0 and 1")) + xhiveframework.throw(_("The fraction of Daily Salary per Leave should be between 0 and 1")) diff --git a/hrms/hr/doctype/leave_type/test_leave_type.py b/hrms/hr/doctype/leave_type/test_leave_type.py index 628f16d..4b54e3b 100644 --- a/hrms/hr/doctype/leave_type/test_leave_type.py +++ b/hrms/hr/doctype/leave_type/test_leave_type.py @@ -1,17 +1,17 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt -import frappe +import xhiveframework -test_records = frappe.get_test_records("Leave Type") +test_records = xhiveframework.get_test_records("Leave Type") def create_leave_type(**args): - args = frappe._dict(args) - if frappe.db.exists("Leave Type", args.leave_type_name): - frappe.delete_doc("Leave Type", args.leave_type_name) + args = xhiveframework._dict(args) + if xhiveframework.db.exists("Leave Type", args.leave_type_name): + xhiveframework.delete_doc("Leave Type", args.leave_type_name) - leave_type = frappe.get_doc( + leave_type = xhiveframework.get_doc( { "doctype": "Leave Type", "leave_type_name": args.leave_type_name or "_Test Leave Type", diff --git a/hrms/hr/doctype/offer_term/offer_term.js b/hrms/hr/doctype/offer_term/offer_term.js index 3be6e7b..f762f00 100644 --- a/hrms/hr/doctype/offer_term/offer_term.js +++ b/hrms/hr/doctype/offer_term/offer_term.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Offer Term', { +xhiveframework.ui.form.on('Offer Term', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/offer_term/offer_term.py b/hrms/hr/doctype/offer_term/offer_term.py index cee6c45..ee4cad7 100644 --- a/hrms/hr/doctype/offer_term/offer_term.py +++ b/hrms/hr/doctype/offer_term/offer_term.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors +# Copyright (c) 2015, Xhive LLC and contributors # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class OfferTerm(Document): diff --git a/hrms/hr/doctype/offer_term/test_offer_term.py b/hrms/hr/doctype/offer_term/test_offer_term.py index 2bea7b2..4aacbe6 100644 --- a/hrms/hr/doctype/offer_term/test_offer_term.py +++ b/hrms/hr/doctype/offer_term/test_offer_term.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors +# Copyright (c) 2015, Xhive LLC and Contributors # See license.txt import unittest -# test_records = frappe.get_test_records('Offer Term') +# test_records = xhiveframework.get_test_records('Offer Term') class TestOfferTerm(unittest.TestCase): diff --git a/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.js b/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.js index a9424d6..0921496 100644 --- a/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.js +++ b/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Purpose of Travel', { +xhiveframework.ui.form.on('Purpose of Travel', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.py b/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.py index c9d6e71..dc22318 100644 --- a/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.py +++ b/hrms/hr/doctype/purpose_of_travel/purpose_of_travel.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class PurposeofTravel(Document): diff --git a/hrms/hr/doctype/purpose_of_travel/test_purpose_of_travel.py b/hrms/hr/doctype/purpose_of_travel/test_purpose_of_travel.py index 354663b..457f993 100644 --- a/hrms/hr/doctype/purpose_of_travel/test_purpose_of_travel.py +++ b/hrms/hr/doctype/purpose_of_travel/test_purpose_of_travel.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/shift_assignment/shift_assignment.js b/hrms/hr/doctype/shift_assignment/shift_assignment.js index 74708b1..4315b79 100644 --- a/hrms/hr/doctype/shift_assignment/shift_assignment.js +++ b/hrms/hr/doctype/shift_assignment/shift_assignment.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Shift Assignment', { +xhiveframework.ui.form.on('Shift Assignment', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/shift_assignment/shift_assignment.py b/hrms/hr/doctype/shift_assignment/shift_assignment.py index 71de523..599f93d 100644 --- a/hrms/hr/doctype/shift_assignment/shift_assignment.py +++ b/hrms/hr/doctype/shift_assignment/shift_assignment.py @@ -1,20 +1,20 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt from datetime import datetime, timedelta from typing import Dict, List -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import cstr, get_datetime, get_link_to_form, get_time, getdate, now_datetime +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder import Criterion +from xhiveframework.utils import cstr, get_datetime, get_link_to_form, get_time, getdate, now_datetime from hrms.hr.utils import validate_active_employee -class OverlappingShiftError(frappe.ValidationError): +class OverlappingShiftError(xhiveframework.ValidationError): pass @@ -38,9 +38,9 @@ class ShiftAssignment(Document): if not self.name: self.name = "New Shift Assignment" - shift = frappe.qb.DocType("Shift Assignment") + shift = xhiveframework.qb.DocType("Shift Assignment") query = ( - frappe.qb.from_(shift) + xhiveframework.qb.from_(shift) .select(shift.name, shift.shift_type, shift.docstatus, shift.status) .where( (shift.employee == self.employee) @@ -78,24 +78,24 @@ class ShiftAssignment(Document): return query.run(as_dict=True) def throw_overlap_error(self, shift_details): - shift_details = frappe._dict(shift_details) + shift_details = xhiveframework._dict(shift_details) if shift_details.docstatus == 1 and shift_details.status == "Active": msg = _( "Employee {0} already has an active Shift {1}: {2} that overlaps within this period." ).format( - frappe.bold(self.employee), - frappe.bold(shift_details.shift_type), + xhiveframework.bold(self.employee), + xhiveframework.bold(shift_details.shift_type), get_link_to_form("Shift Assignment", shift_details.name), ) - frappe.throw(msg, title=_("Overlapping Shifts"), exc=OverlappingShiftError) + xhiveframework.throw(msg, title=_("Overlapping Shifts"), exc=OverlappingShiftError) def has_overlapping_timings(shift_1: str, shift_2: str) -> bool: """ Accepts two shift types and checks whether their timings are overlapping """ - curr_shift = frappe.db.get_value("Shift Type", shift_1, ["start_time", "end_time"], as_dict=True) - overlapping_shift = frappe.db.get_value( + curr_shift = xhiveframework.db.get_value("Shift Type", shift_1, ["start_time", "end_time"], as_dict=True) + overlapping_shift = xhiveframework.db.get_value( "Shift Type", shift_2, ["start_time", "end_time"], as_dict=True ) @@ -117,18 +117,18 @@ def has_overlapping_timings(shift_1: str, shift_2: str) -> bool: return False -@frappe.whitelist() +@xhiveframework.whitelist() def get_events(start, end, filters=None): - from frappe.desk.calendar import get_event_conditions + from xhiveframework.desk.calendar import get_event_conditions - employee = frappe.db.get_value( - "Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True + employee = xhiveframework.db.get_value( + "Employee", {"user_id": xhiveframework.session.user}, ["name", "company"], as_dict=True ) if employee: employee, company = employee.name, employee.company else: employee = "" - company = frappe.db.get_value("Global Defaults", None, "default_company") + company = xhiveframework.db.get_value("Global Defaults", None, "default_company") conditions = get_event_conditions("Shift Assignment", filters) events = add_assignments(start, end, conditions=conditions) @@ -150,7 +150,7 @@ def add_assignments(start, end, conditions=None): if conditions: query += conditions - records = frappe.db.sql(query, {"start_date": start, "end_date": end}, as_dict=True) + records = xhiveframework.db.sql(query, {"start_date": start, "end_date": end}, as_dict=True) shift_timing_map = get_shift_type_timing([d.shift_type for d in records]) for d in records: @@ -159,10 +159,10 @@ def add_assignments(start, end, conditions=None): delta = timedelta(days=1) while daily_event_start <= daily_event_end: start_timing = ( - frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["start_time"] + xhiveframework.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["start_time"] ) end_timing = ( - frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["end_time"] + xhiveframework.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["end_time"] ) daily_event_start += delta e = { @@ -183,7 +183,7 @@ def add_assignments(start, end, conditions=None): def get_shift_type_timing(shift_types): shift_timing_map = {} - data = frappe.get_all( + data = xhiveframework.get_all( "Shift Type", filters={"name": ("IN", shift_types)}, fields=["name", "start_time", "end_time"] ) @@ -238,10 +238,10 @@ def get_shift_for_time(shifts: List[Dict], for_timestamp: datetime) -> Dict: def get_shifts_for_date(employee: str, for_timestamp: datetime) -> List[Dict[str, str]]: """Returns list of shifts with details for given date""" - assignment = frappe.qb.DocType("Shift Assignment") + assignment = xhiveframework.qb.DocType("Shift Assignment") return ( - frappe.qb.from_(assignment) + xhiveframework.qb.from_(assignment) .select(assignment.name, assignment.shift_type) .where( (assignment.employee == employee) @@ -286,7 +286,7 @@ def get_employee_shift( shift_details = get_shift_for_timestamp(employee, for_timestamp) # if shift assignment is not found, consider default shift - default_shift = frappe.db.get_value("Employee", employee, "default_shift") + default_shift = xhiveframework.db.get_value("Employee", employee, "default_shift") if not shift_details and consider_default_shift: shift_details = get_shift_details(default_shift, for_timestamp) @@ -320,7 +320,7 @@ def get_prev_or_next_shift( else: direction = "<" if next_shift_direction == "reverse" else ">" sort_order = "desc" if next_shift_direction == "reverse" else "asc" - dates = frappe.db.get_all( + dates = xhiveframework.db.get_all( "Shift Assignment", ["start_date", "end_date"], { @@ -462,7 +462,7 @@ def get_shift_details(shift_type_name: str, for_timestamp: datetime = None) -> D if for_timestamp is None: for_timestamp = now_datetime() - shift_type = frappe.get_doc("Shift Type", shift_type_name) + shift_type = xhiveframework.get_doc("Shift Type", shift_type_name) shift_actual_start = shift_type.start_time - timedelta( minutes=shift_type.begin_check_in_before_shift_start_time ) @@ -490,7 +490,7 @@ def get_shift_details(shift_type_name: str, for_timestamp: datetime = None) -> D ) actual_end = end_datetime + timedelta(minutes=shift_type.allow_check_out_after_shift_end_time) - return frappe._dict( + return xhiveframework._dict( { "shift_type": shift_type, "start_datetime": start_datetime, diff --git a/hrms/hr/doctype/shift_assignment/shift_assignment_calendar.js b/hrms/hr/doctype/shift_assignment/shift_assignment_calendar.js index 1b80a2a..c78c537 100644 --- a/hrms/hr/doctype/shift_assignment/shift_assignment_calendar.js +++ b/hrms/hr/doctype/shift_assignment/shift_assignment_calendar.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.views.calendar["Shift Assignment"] = { +xhiveframework.views.calendar["Shift Assignment"] = { field_map: { "start": "start_date", "end": "end_date", diff --git a/hrms/hr/doctype/shift_assignment/test_shift_assignment.py b/hrms/hr/doctype/shift_assignment/test_shift_assignment.py index 3a4c840..9358d79 100644 --- a/hrms/hr/doctype/shift_assignment/test_shift_assignment.py +++ b/hrms/hr/doctype/shift_assignment/test_shift_assignment.py @@ -1,13 +1,13 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate, nowdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, getdate, nowdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.shift_assignment.shift_assignment import OverlappingShiftError, get_events from hrms.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type @@ -15,14 +15,14 @@ from hrms.hr.doctype.shift_type.test_shift_type import make_shift_assignment, se test_dependencies = ["Shift Type"] -class TestShiftAssignment(FrappeTestCase): +class TestShiftAssignment(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Shift Assignment") - frappe.db.delete("Shift Type") + xhiveframework.db.delete("Shift Assignment") + xhiveframework.db.delete("Shift Type") def test_make_shift_assignment(self): setup_shift_type(shift_type="Day Shift") - shift_assignment = frappe.get_doc( + shift_assignment = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": "Day Shift", @@ -38,7 +38,7 @@ class TestShiftAssignment(FrappeTestCase): def test_overlapping_for_ongoing_shift(self): # shift should be Ongoing if Only start_date is present and status = Active setup_shift_type(shift_type="Day Shift") - shift_assignment_1 = frappe.get_doc( + shift_assignment_1 = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": "Day Shift", @@ -52,7 +52,7 @@ class TestShiftAssignment(FrappeTestCase): self.assertEqual(shift_assignment_1.docstatus, 1) - shift_assignment = frappe.get_doc( + shift_assignment = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": "Day Shift", @@ -67,7 +67,7 @@ class TestShiftAssignment(FrappeTestCase): def test_overlapping_for_fixed_period_shift(self): # shift should is for Fixed period if Only start_date and end_date both are present and status = Active setup_shift_type(shift_type="Day Shift") - shift_assignment_1 = frappe.get_doc( + shift_assignment_1 = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": "Day Shift", @@ -81,7 +81,7 @@ class TestShiftAssignment(FrappeTestCase): shift_assignment_1.submit() # it should not allowed within period of any shift. - shift_assignment_3 = frappe.get_doc( + shift_assignment_3 = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": "Day Shift", @@ -109,7 +109,7 @@ class TestShiftAssignment(FrappeTestCase): date = getdate() # shift assignment without end date - shift2 = frappe.get_doc( + shift2 = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": shift_type.name, @@ -132,7 +132,7 @@ class TestShiftAssignment(FrappeTestCase): shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00") date = getdate() - shift2 = frappe.get_doc( + shift2 = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": shift_type.name, diff --git a/hrms/hr/doctype/shift_request/shift_request.js b/hrms/hr/doctype/shift_request/shift_request.js index 5f93960..5fb63c6 100644 --- a/hrms/hr/doctype/shift_request/shift_request.js +++ b/hrms/hr/doctype/shift_request/shift_request.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Shift Request', { +xhiveframework.ui.form.on('Shift Request', { setup: function(frm) { frm.set_query("approver", function() { return { @@ -12,6 +12,6 @@ frappe.ui.form.on('Shift Request', { } }; }); - frm.set_query("employee", erpnext.queries.employee); + frm.set_query("employee", xhiveerp.queries.employee); }, }); diff --git a/hrms/hr/doctype/shift_request/shift_request.py b/hrms/hr/doctype/shift_request/shift_request.py index 3afa17d..03093ef 100644 --- a/hrms/hr/doctype/shift_request/shift_request.py +++ b/hrms/hr/doctype/shift_request/shift_request.py @@ -1,18 +1,18 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import get_link_to_form, getdate +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.query_builder import Criterion +from xhiveframework.utils import get_link_to_form, getdate from hrms.hr.doctype.shift_assignment.shift_assignment import has_overlapping_timings from hrms.hr.utils import share_doc_with_approver, validate_active_employee -class OverlappingShiftRequestError(frappe.ValidationError): +class OverlappingShiftRequestError(xhiveframework.ValidationError): pass @@ -29,9 +29,9 @@ class ShiftRequest(Document): def on_submit(self): if self.status not in ["Approved", "Rejected"]: - frappe.throw(_("Only Shift Request with status 'Approved' and 'Rejected' can be submitted")) + xhiveframework.throw(_("Only Shift Request with status 'Approved' and 'Rejected' can be submitted")) if self.status == "Approved": - assignment_doc = frappe.new_doc("Shift Assignment") + assignment_doc = xhiveframework.new_doc("Shift Assignment") assignment_doc.company = self.company assignment_doc.shift_type = self.shift_type assignment_doc.employee = self.employee @@ -43,43 +43,43 @@ class ShiftRequest(Document): assignment_doc.insert() assignment_doc.submit() - frappe.msgprint( + xhiveframework.msgprint( _("Shift Assignment: {0} created for Employee: {1}").format( - frappe.bold(assignment_doc.name), frappe.bold(self.employee) + xhiveframework.bold(assignment_doc.name), xhiveframework.bold(self.employee) ) ) def on_cancel(self): - shift_assignment_list = frappe.db.get_all( + shift_assignment_list = xhiveframework.db.get_all( "Shift Assignment", {"employee": self.employee, "shift_request": self.name, "docstatus": 1} ) if shift_assignment_list: for shift in shift_assignment_list: - shift_assignment_doc = frappe.get_doc("Shift Assignment", shift["name"]) + shift_assignment_doc = xhiveframework.get_doc("Shift Assignment", shift["name"]) shift_assignment_doc.cancel() def validate_default_shift(self): - default_shift = frappe.get_value("Employee", self.employee, "default_shift") + default_shift = xhiveframework.get_value("Employee", self.employee, "default_shift") if self.shift_type == default_shift: - frappe.throw( - _("You can not request for your Default Shift: {0}").format(frappe.bold(self.shift_type)) + xhiveframework.throw( + _("You can not request for your Default Shift: {0}").format(xhiveframework.bold(self.shift_type)) ) def validate_approver(self): - department = frappe.get_value("Employee", self.employee, "department") - shift_approver = frappe.get_value("Employee", self.employee, "shift_request_approver") - approvers = frappe.db.sql( + department = xhiveframework.get_value("Employee", self.employee, "department") + shift_approver = xhiveframework.get_value("Employee", self.employee, "shift_request_approver") + approvers = xhiveframework.db.sql( """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department), ) approvers = [approver[0] for approver in approvers] approvers.append(shift_approver) if self.approver not in approvers: - frappe.throw(_("Only Approvers can Approve this Request.")) + xhiveframework.throw(_("Only Approvers can Approve this Request.")) def validate_dates(self): if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)): - frappe.throw(_("To date cannot be before from date")) + xhiveframework.throw(_("To date cannot be before from date")) def validate_overlapping_shift_requests(self): overlapping_dates = self.get_overlapping_dates() @@ -93,9 +93,9 @@ class ShiftRequest(Document): if not self.name: self.name = "New Shift Request" - shift = frappe.qb.DocType("Shift Request") + shift = xhiveframework.qb.DocType("Shift Request") query = ( - frappe.qb.from_(shift) + xhiveframework.qb.from_(shift) .select(shift.name, shift.shift_type) .where((shift.employee == self.employee) & (shift.docstatus < 2) & (shift.name != self.name)) ) @@ -128,13 +128,13 @@ class ShiftRequest(Document): return query.run(as_dict=True) def throw_overlap_error(self, shift_details): - shift_details = frappe._dict(shift_details) + shift_details = xhiveframework._dict(shift_details) msg = _( "Employee {0} has already applied for Shift {1}: {2} that overlaps within this period" ).format( - frappe.bold(self.employee), - frappe.bold(shift_details.shift_type), + xhiveframework.bold(self.employee), + xhiveframework.bold(shift_details.shift_type), get_link_to_form("Shift Request", shift_details.name), ) - frappe.throw(msg, title=_("Overlapping Shift Requests"), exc=OverlappingShiftRequestError) + xhiveframework.throw(msg, title=_("Overlapping Shift Requests"), exc=OverlappingShiftRequestError) diff --git a/hrms/hr/doctype/shift_request/test_shift_request.py b/hrms/hr/doctype/shift_request/test_shift_request.py index 79fbfe2..598df5a 100644 --- a/hrms/hr/doctype/shift_request/test_shift_request.py +++ b/hrms/hr/doctype/shift_request/test_shift_request.py @@ -1,13 +1,13 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, nowdate +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, nowdate -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.shift_request.shift_request import OverlappingShiftRequestError from hrms.hr.doctype.shift_type.test_shift_type import setup_shift_type @@ -15,17 +15,17 @@ from hrms.hr.doctype.shift_type.test_shift_type import setup_shift_type test_dependencies = ["Shift Type"] -class TestShiftRequest(FrappeTestCase): +class TestShiftRequest(XhiveframeworkTestCase): def setUp(self): for doctype in ["Shift Request", "Shift Assignment", "Shift Type"]: - frappe.db.delete(doctype) + xhiveframework.db.delete(doctype) def test_make_shift_request(self): "Test creation/updation of Shift Assignment from Shift Request." setup_shift_type(shift_type="Day Shift") - department = frappe.get_value("Employee", "_T-Employee-00001", "department") + department = xhiveframework.get_value("Employee", "_T-Employee-00001", "department") set_shift_approver(department) - approver = frappe.db.sql( + approver = xhiveframework.db.sql( """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department), )[0][0] @@ -33,7 +33,7 @@ class TestShiftRequest(FrappeTestCase): shift_request = make_shift_request(approver) # Only one shift assignment is created against a shift request - shift_assignment = frappe.db.get_value( + shift_assignment = xhiveframework.db.get_value( "Shift Assignment", filters={"shift_request": shift_request.name}, fieldname=["employee", "docstatus"], @@ -44,7 +44,7 @@ class TestShiftRequest(FrappeTestCase): shift_request.cancel() - shift_assignment_docstatus = frappe.db.get_value( + shift_assignment_docstatus = xhiveframework.db.get_value( "Shift Assignment", filters={"shift_request": shift_request.name}, fieldname="docstatus" ) self.assertEqual(shift_assignment_docstatus, 2) @@ -52,7 +52,7 @@ class TestShiftRequest(FrappeTestCase): def test_shift_request_approver_perms(self): setup_shift_type(shift_type="Day Shift") - employee = frappe.get_doc("Employee", "_T-Employee-00001") + employee = xhiveframework.get_doc("Employee", "_T-Employee-00001") user = "test_approver_perm_emp@example.com" make_employee(user, "_Test Company") @@ -62,31 +62,31 @@ class TestShiftRequest(FrappeTestCase): employee.save() shift_request = make_shift_request(user, do_not_submit=True) - self.assertTrue(shift_request.name in frappe.share.get_shared("Shift Request", user)) + self.assertTrue(shift_request.name in xhiveframework.share.get_shared("Shift Request", user)) # check shared doc revoked shift_request.reload() - department = frappe.get_value("Employee", "_T-Employee-00001", "department") + department = xhiveframework.get_value("Employee", "_T-Employee-00001", "department") set_shift_approver(department) - department_approver = frappe.db.sql( + department_approver = xhiveframework.db.sql( """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department), )[0][0] shift_request.approver = department_approver shift_request.save() - self.assertTrue(shift_request.name not in frappe.share.get_shared("Shift Request", user)) + self.assertTrue(shift_request.name not in xhiveframework.share.get_shared("Shift Request", user)) shift_request.reload() shift_request.approver = user shift_request.save() - frappe.set_user(user) + xhiveframework.set_user(user) shift_request.reload() shift_request.status = "Approved" shift_request.submit() # unset approver - frappe.set_user("Administrator") + xhiveframework.set_user("Administrator") employee.reload() employee.shift_request_approver = "" employee.save() @@ -97,7 +97,7 @@ class TestShiftRequest(FrappeTestCase): employee = make_employee(user, company="_Test Company", shift_request_approver=user) setup_shift_type(shift_type="Day Shift") - shift_request = frappe.get_doc( + shift_request = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": "Day Shift", @@ -109,7 +109,7 @@ class TestShiftRequest(FrappeTestCase): } ).submit() - shift_request = frappe.get_doc( + shift_request = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": "Day Shift", @@ -128,7 +128,7 @@ class TestShiftRequest(FrappeTestCase): employee = make_employee(user, company="_Test Company", shift_request_approver=user) setup_shift_type(shift_type="Day Shift") - shift_request = frappe.get_doc( + shift_request = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": "Day Shift", @@ -141,7 +141,7 @@ class TestShiftRequest(FrappeTestCase): } ).submit() - shift_request = frappe.get_doc( + shift_request = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": "Day Shift", @@ -165,7 +165,7 @@ class TestShiftRequest(FrappeTestCase): date = nowdate() # shift with end date - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": shift_type.name, @@ -180,7 +180,7 @@ class TestShiftRequest(FrappeTestCase): # shift setup for 11-15 shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00") - shift2 = frappe.get_doc( + shift2 = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": shift_type.name, @@ -203,7 +203,7 @@ class TestShiftRequest(FrappeTestCase): date = nowdate() # shift with end date - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": shift_type.name, @@ -218,7 +218,7 @@ class TestShiftRequest(FrappeTestCase): # shift setup for 13-15 shift_type = setup_shift_type(shift_type="Shift 2", start_time="13:00:00", end_time="15:00:00") - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": shift_type.name, @@ -232,14 +232,14 @@ class TestShiftRequest(FrappeTestCase): def set_shift_approver(department): - department_doc = frappe.get_doc("Department", department) + department_doc = xhiveframework.get_doc("Department", department) department_doc.append("shift_request_approver", {"approver": "test1@example.com"}) department_doc.save() department_doc.reload() def make_shift_request(approver, do_not_submit=0): - shift_request = frappe.get_doc( + shift_request = xhiveframework.get_doc( { "doctype": "Shift Request", "shift_type": "Day Shift", diff --git a/hrms/hr/doctype/shift_type/shift_type.js b/hrms/hr/doctype/shift_type/shift_type.js index 7138e3b..e16d5b1 100644 --- a/hrms/hr/doctype/shift_type/shift_type.js +++ b/hrms/hr/doctype/shift_type/shift_type.js @@ -1,24 +1,24 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Shift Type', { +xhiveframework.ui.form.on('Shift Type', { refresh: function(frm) { frm.add_custom_button( __('Mark Attendance'), () => { if (!frm.doc.enable_auto_attendance) { frm.scroll_to_field('enable_auto_attendance'); - frappe.throw(__('Please Enable Auto Attendance and complete the setup first.')); + xhiveframework.throw(__('Please Enable Auto Attendance and complete the setup first.')); } if (!frm.doc.process_attendance_after) { frm.scroll_to_field('process_attendance_after'); - frappe.throw(__('Please set {0}.', [__('Process Attendance After').bold()])); + xhiveframework.throw(__('Please set {0}.', [__('Process Attendance After').bold()])); } if (!frm.doc.last_sync_of_checkin) { frm.scroll_to_field('last_sync_of_checkin'); - frappe.throw(__('Please set {0}.', [__('Last Sync of Checkin').bold()])); + xhiveframework.throw(__('Please set {0}.', [__('Last Sync of Checkin').bold()])); } frm.call({ @@ -26,7 +26,7 @@ frappe.ui.form.on('Shift Type', { method: 'process_auto_attendance', freeze: true, callback: () => { - frappe.msgprint(__('Attendance has been marked as per employee check-ins')); + xhiveframework.msgprint(__('Attendance has been marked as per employee check-ins')); } }); } diff --git a/hrms/hr/doctype/shift_type/shift_type.py b/hrms/hr/doctype/shift_type/shift_type.py index 22047ba..024a8de 100644 --- a/hrms/hr/doctype/shift_type/shift_type.py +++ b/hrms/hr/doctype/shift_type/shift_type.py @@ -1,17 +1,17 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt import itertools from datetime import datetime, timedelta -import frappe -from frappe.model.document import Document -from frappe.utils import cint, get_datetime, get_time, getdate +import xhiveframework +from xhiveframework.model.document import Document +from xhiveframework.utils import cint, get_datetime, get_time, getdate -from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange -from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday +from xhiveerp.buying.doctype.supplier_scorecard.supplier_scorecard import daterange +from xhiveerp.setup.doctype.employee.employee import get_holiday_list_for_employee +from xhiveerp.setup.doctype.holiday_list.holiday_list import is_holiday from hrms.hr.doctype.attendance.attendance import mark_attendance from hrms.hr.doctype.employee_checkin.employee_checkin import ( @@ -22,7 +22,7 @@ from hrms.hr.doctype.shift_assignment.shift_assignment import get_employee_shift class ShiftType(Document): - @frappe.whitelist() + @xhiveframework.whitelist() def process_auto_attendance(self): if ( not cint(self.enable_auto_attendance) @@ -38,7 +38,7 @@ class ShiftType(Document): "shift_actual_end": ("<", self.last_sync_of_checkin), "shift": self.name, } - logs = frappe.db.get_list( + logs = xhiveframework.db.get_list( "Employee Checkin", fields="*", filters=filters, order_by="employee,time" ) @@ -136,13 +136,13 @@ class ShiftType(Document): if shift_details and shift_details.shift_type.name == self.name: attendance = mark_attendance(employee, date, "Absent", self.name) if attendance: - frappe.get_doc( + xhiveframework.get_doc( { "doctype": "Comment", "comment_type": "Comment", "reference_doctype": "Attendance", "reference_name": attendance, - "content": frappe._("Employee was marked Absent due to missing Employee Checkins."), + "content": xhiveframework._("Employee was marked Absent due to missing Employee Checkins."), } ).insert(ignore_permissions=True) @@ -151,7 +151,7 @@ class ShiftType(Document): return: start date = max of `process_attendance_after` and DOJ return: end date = min of shift before `last_sync_of_checkin` and Relieving Date """ - date_of_joining, relieving_date, employee_creation = frappe.db.get_value( + date_of_joining, relieving_date, employee_creation = xhiveframework.db.get_value( "Employee", employee, ["date_of_joining", "relieving_date", "creation"] ) @@ -185,7 +185,7 @@ class ShiftType(Document): if from_date: filters["start_date"] = (">", from_date) - assigned_employees = frappe.get_all("Shift Assignment", filters=filters, pluck="employee") + assigned_employees = xhiveframework.get_all("Shift Assignment", filters=filters, pluck="employee") if consider_default_shift: filters = {"default_shift": self.name, "status": ["!=", "Inactive"]} @@ -195,7 +195,7 @@ class ShiftType(Document): return assigned_employees def get_employees_with_default_shift(self, from_date=None): - default_shift_employees = frappe.get_all( + default_shift_employees = xhiveframework.get_all( "Employee", filters={"default_shift": self.name, "status": ("!=", "Inactive")}, pluck="name" ) @@ -209,7 +209,7 @@ class ShiftType(Document): if from_date: filters["start_date"] = (">", from_date) - active_shift_assignments = frappe.get_all( + active_shift_assignments = xhiveframework.get_all( "Shift Assignment", filters=filters, pluck="employee", @@ -235,7 +235,7 @@ class ShiftType(Document): def process_auto_attendance_for_all_shifts(): - shift_list = frappe.get_all("Shift Type", "name", {"enable_auto_attendance": "1"}, as_list=True) + shift_list = xhiveframework.get_all("Shift Type", "name", {"enable_auto_attendance": "1"}, as_list=True) for shift in shift_list: - doc = frappe.get_doc("Shift Type", shift[0]) + doc = xhiveframework.get_doc("Shift Type", shift[0]) doc.process_auto_attendance() diff --git a/hrms/hr/doctype/shift_type/test_shift_type.py b/hrms/hr/doctype/shift_type/test_shift_type.py index ee9b0a1..a0f1103 100644 --- a/hrms/hr/doctype/shift_type/test_shift_type.py +++ b/hrms/hr/doctype/shift_type/test_shift_type.py @@ -1,26 +1,26 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest from datetime import datetime, timedelta -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, get_time, get_year_ending, get_year_start, getdate, now_datetime +import xhiveframework +from xhiveframework.tests.utils import XhiveframeworkTestCase +from xhiveframework.utils import add_days, get_time, get_year_ending, get_year_start, getdate, now_datetime -from erpnext.setup.doctype.employee.test_employee import make_employee -from erpnext.setup.doctype.holiday_list.test_holiday_list import set_holiday_list +from xhiveerp.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.holiday_list.test_holiday_list import set_holiday_list from hrms.hr.doctype.leave_application.test_leave_application import get_first_sunday from hrms.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list -class TestShiftType(FrappeTestCase): +class TestShiftType(XhiveframeworkTestCase): def setUp(self): - frappe.db.delete("Shift Type") - frappe.db.delete("Shift Assignment") - frappe.db.delete("Employee Checkin") - frappe.db.delete("Attendance") + xhiveframework.db.delete("Shift Type") + xhiveframework.db.delete("Shift Assignment") + xhiveframework.db.delete("Employee Checkin") + xhiveframework.db.delete("Attendance") from_date = get_year_start(getdate()) to_date = get_year_ending(getdate()) @@ -45,7 +45,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "name"], as_dict=True ) self.assertEqual(attendance.status, "Present") @@ -72,7 +72,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "name"], as_dict=True ) self.assertEqual(attendance.status, "Present") @@ -103,7 +103,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "name", "late_entry", "early_exit"], @@ -131,7 +131,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True ) self.assertEqual(attendance.status, "Half Day") @@ -155,7 +155,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True ) self.assertEqual(attendance.status, "Absent") @@ -184,7 +184,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True ) self.assertEqual(attendance.status, "Half Day") @@ -213,7 +213,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value("Attendance", {"shift": shift_type.name}, "status") + attendance = xhiveframework.db.get_value("Attendance", {"shift": shift_type.name}, "status") self.assertEqual(attendance, "Absent") @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") @@ -222,7 +222,7 @@ class TestShiftType(FrappeTestCase): # add current date as holiday date = getdate() - holiday_list = frappe.get_doc("Holiday List", self.holiday_list) + holiday_list = xhiveframework.get_doc("Holiday List", self.holiday_list) holiday_list.append( "holidays", { @@ -250,7 +250,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"employee": employee, "attendance_date": date}, "status" ) self.assertEqual(attendance, "Present") @@ -261,7 +261,7 @@ class TestShiftType(FrappeTestCase): # add current date as holiday date = getdate() - holiday_list = frappe.get_doc("Holiday List", self.holiday_list) + holiday_list = xhiveframework.get_doc("Holiday List", self.holiday_list) holiday_list.append( "holidays", { @@ -289,7 +289,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"employee": employee, "attendance_date": date}, "status" ) self.assertIsNone(attendance) @@ -304,7 +304,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"attendance_date": date, "employee": employee}, "status" ) self.assertEqual(attendance, "Absent") @@ -318,7 +318,7 @@ class TestShiftType(FrappeTestCase): # should not mark any attendance if no shift assignment is created shift_type.process_auto_attendance() - attendance = frappe.db.get_value("Attendance", {"employee": employee}, "status") + attendance = xhiveframework.db.get_value("Attendance", {"employee": employee}, "status") self.assertIsNone(attendance) first_sunday = get_first_sunday(self.holiday_list, for_date=getdate()) @@ -326,7 +326,7 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"attendance_date": first_sunday, "employee": employee}, "status" ) self.assertIsNone(attendance) @@ -355,11 +355,11 @@ class TestShiftType(FrappeTestCase): log_out = make_checkin(employee, timestamp) default_shift.process_auto_attendance() - attendance = frappe.db.get_value("Attendance", {"employee": employee}, "status") + attendance = xhiveframework.db.get_value("Attendance", {"employee": employee}, "status") self.assertIsNone(attendance) assigned_shift.process_auto_attendance() - attendance = frappe.db.get_value("Attendance", {"employee": employee}, "status") + attendance = xhiveframework.db.get_value("Attendance", {"employee": employee}, "status") self.assertEqual(attendance, "Present") def test_get_start_and_end_dates(self): @@ -382,19 +382,19 @@ class TestShiftType(FrappeTestCase): shift_type.process_auto_attendance() # should not mark absent before shift assignment/process attendance after date - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"attendance_date": doj, "employee": employee}, "name" ) self.assertIsNone(attendance) # mark absent on Relieving Date - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"attendance_date": relieving_date, "employee": employee}, "status" ) self.assertEquals(attendance, "Absent") # should not mark absent after Relieving Date - attendance = frappe.db.get_value( + attendance = xhiveframework.db.get_value( "Attendance", {"attendance_date": add_days(relieving_date, 1), "employee": employee}, "name" ) self.assertIsNone(attendance) @@ -465,10 +465,10 @@ class TestShiftType(FrappeTestCase): def setup_shift_type(**args): - args = frappe._dict(args) + args = xhiveframework._dict(args) date = getdate() - shift_type = frappe.get_doc( + shift_type = xhiveframework.get_doc( { "doctype": "Shift Type", "__newname": args.shift_type or "_Test Shift", @@ -486,8 +486,8 @@ def setup_shift_type(**args): ) holiday_list = "Employee Checkin Test Holiday List" - if not frappe.db.exists("Holiday List", "Employee Checkin Test Holiday List"): - holiday_list = frappe.get_doc( + if not xhiveframework.db.exists("Holiday List", "Employee Checkin Test Holiday List"): + holiday_list = xhiveframework.get_doc( { "doctype": "Holiday List", "holiday_list_name": "Employee Checkin Test Holiday List", @@ -505,7 +505,7 @@ def setup_shift_type(**args): def make_shift_assignment(shift_type, employee, start_date, end_date=None): - shift_assignment = frappe.get_doc( + shift_assignment = xhiveframework.get_doc( { "doctype": "Shift Assignment", "shift_type": shift_type, diff --git a/hrms/hr/doctype/skill/skill.js b/hrms/hr/doctype/skill/skill.js index a939ff0..7457dc4 100644 --- a/hrms/hr/doctype/skill/skill.js +++ b/hrms/hr/doctype/skill/skill.js @@ -1,7 +1,7 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2019, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Skill', { +xhiveframework.ui.form.on('Skill', { // refresh: function(frm) { // } diff --git a/hrms/hr/doctype/skill/skill.py b/hrms/hr/doctype/skill/skill.py index d26e7ca..5537823 100644 --- a/hrms/hr/doctype/skill/skill.py +++ b/hrms/hr/doctype/skill/skill.py @@ -1,9 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2019, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class Skill(Document): diff --git a/hrms/hr/doctype/skill_assessment/skill_assessment.py b/hrms/hr/doctype/skill_assessment/skill_assessment.py index 13775be..33204ec 100644 --- a/hrms/hr/doctype/skill_assessment/skill_assessment.py +++ b/hrms/hr/doctype/skill_assessment/skill_assessment.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2021, Xhive LLC # For license information, please see license.txt -# import frappe -from frappe.model.document import Document +# import xhiveframework +from xhiveframework.model.document import Document class SkillAssessment(Document): diff --git a/hrms/hr/doctype/staffing_plan/staffing_plan.js b/hrms/hr/doctype/staffing_plan/staffing_plan.js index 3542d98..f2da77b 100644 --- a/hrms/hr/doctype/staffing_plan/staffing_plan.js +++ b/hrms/hr/doctype/staffing_plan/staffing_plan.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Staffing Plan', { +xhiveframework.ui.form.on('Staffing Plan', { setup: function(frm) { frm.set_query("designation", "staffing_details", function() { let designations = []; @@ -28,7 +28,7 @@ frappe.ui.form.on('Staffing Plan', { }, get_job_requisitions: function(frm) { - new frappe.ui.form.MultiSelectDialog({ + new xhiveframework.ui.form.MultiSelectDialog({ doctype: "Job Requisition", target: frm, date_field: "posting_date", @@ -52,12 +52,12 @@ frappe.ui.form.on('Staffing Plan', { }, action(selections) { const plan_name = frm.doc.__newname; - frappe.call({ + xhiveframework.call({ method: "set_job_requisitions", doc: frm.doc, args: selections, }).then(() => { - // hack to retain prompt name that gets lost on frappe.call + // hack to retain prompt name that gets lost on xhiveframework.call frm.doc.__newname = plan_name; refresh_field("staffing_details"); }); @@ -68,7 +68,7 @@ frappe.ui.form.on('Staffing Plan', { } }); -frappe.ui.form.on('Staffing Plan Detail', { +xhiveframework.ui.form.on('Staffing Plan Detail', { designation: function(frm, cdt, cdn) { let child = locals[cdt][cdn]; if(frm.doc.company && child.designation) { @@ -79,7 +79,7 @@ frappe.ui.form.on('Staffing Plan Detail', { vacancies: function(frm, cdt, cdn) { let child = locals[cdt][cdn]; if(child.vacancies < child.current_openings) { - frappe.throw(__("Vacancies cannot be lower than the current openings")); + xhiveframework.throw(__("Vacancies cannot be lower than the current openings")); } set_number_of_positions(frm, cdt, cdn); }, @@ -95,8 +95,8 @@ frappe.ui.form.on('Staffing Plan Detail', { var set_number_of_positions = function(frm, cdt, cdn) { let child = locals[cdt][cdn]; - if (!child.designation) frappe.throw(__("Please enter the designation")); - frappe.call({ + if (!child.designation) xhiveframework.throw(__("Please enter the designation")); + xhiveframework.call({ "method": "hrms.hr.doctype.staffing_plan.staffing_plan.get_designation_counts", args: { designation: child.designation, @@ -104,16 +104,16 @@ var set_number_of_positions = function(frm, cdt, cdn) { }, callback: function (data) { if(data.message){ - frappe.model.set_value(cdt, cdn, 'current_count', data.message.employee_count); - frappe.model.set_value(cdt, cdn, 'current_openings', data.message.job_openings); + xhiveframework.model.set_value(cdt, cdn, 'current_count', data.message.employee_count); + xhiveframework.model.set_value(cdt, cdn, 'current_openings', data.message.job_openings); let total_positions = cint(data.message.employee_count) + cint(child.vacancies); if (cint(child.number_of_positions) < total_positions){ - frappe.model.set_value(cdt, cdn, 'number_of_positions', total_positions); + xhiveframework.model.set_value(cdt, cdn, 'number_of_positions', total_positions); } } else{ // No employees for this designation - frappe.model.set_value(cdt, cdn, 'current_count', 0); - frappe.model.set_value(cdt, cdn, 'current_openings', 0); + xhiveframework.model.set_value(cdt, cdn, 'current_count', 0); + xhiveframework.model.set_value(cdt, cdn, 'current_openings', 0); } } }); @@ -125,10 +125,10 @@ var set_number_of_positions = function(frm, cdt, cdn) { var set_total_estimated_cost = function(frm, cdt, cdn) { let child = locals[cdt][cdn] if(child.vacancies > 0 && child.estimated_cost_per_position) { - frappe.model.set_value(cdt, cdn, 'total_estimated_cost', child.vacancies * child.estimated_cost_per_position); + xhiveframework.model.set_value(cdt, cdn, 'total_estimated_cost', child.vacancies * child.estimated_cost_per_position); } else { - frappe.model.set_value(cdt, cdn, 'total_estimated_cost', 0); + xhiveframework.model.set_value(cdt, cdn, 'total_estimated_cost', 0); } set_total_estimated_budget(frm); }; diff --git a/hrms/hr/doctype/staffing_plan/staffing_plan.py b/hrms/hr/doctype/staffing_plan/staffing_plan.py index 8192418..ab62235 100644 --- a/hrms/hr/doctype/staffing_plan/staffing_plan.py +++ b/hrms/hr/doctype/staffing_plan/staffing_plan.py @@ -1,19 +1,19 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cint, flt, getdate, nowdate -from frappe.utils.nestedset import get_descendants_of +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import cint, flt, getdate, nowdate +from xhiveframework.utils.nestedset import get_descendants_of -class SubsidiaryCompanyError(frappe.ValidationError): +class SubsidiaryCompanyError(xhiveframework.ValidationError): pass -class ParentCompanyError(frappe.ValidationError): +class ParentCompanyError(xhiveframework.ValidationError): pass @@ -26,7 +26,7 @@ class StaffingPlan(Document): def validate_period(self): # Validate Dates if self.from_date and self.to_date and self.from_date > self.to_date: - frappe.throw(_("From Date cannot be greater than To Date")) + xhiveframework.throw(_("From Date cannot be greater than To Date")) def validate_details(self): for detail in self.get("staffing_details"): @@ -57,7 +57,7 @@ class StaffingPlan(Document): def validate_overlap(self, staffing_plan_detail): # Validate if any submitted Staffing Plan exist for any Designations in this plan # and spd.vacancies>0 ? - overlap = frappe.db.sql( + overlap = xhiveframework.db.sql( """select spd.parent from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name where spd.designation=%s and sp.docstatus=1 @@ -66,14 +66,14 @@ class StaffingPlan(Document): (staffing_plan_detail.designation, self.from_date, self.to_date, self.company), ) if overlap and overlap[0][0]: - frappe.throw( + xhiveframework.throw( _("Staffing Plan {0} already exist for designation {1}").format( overlap[0][0], staffing_plan_detail.designation ) ) def validate_with_parent_plan(self, staffing_plan_detail): - if not frappe.get_cached_value("Company", self.company, "parent_company"): + if not xhiveframework.get_cached_value("Company", self.company, "parent_company"): return # No parent, nothing to validate # Get staffing plan applicable for the company (Parent Company) @@ -84,18 +84,18 @@ class StaffingPlan(Document): return # no staffing plan for any parent Company in hierarchy # Fetch parent company which owns the staffing plan. NOTE: Parent could be higher up in the hierarchy - parent_company = frappe.db.get_value("Staffing Plan", parent_plan_details[0].name, "company") + parent_company = xhiveframework.db.get_value("Staffing Plan", parent_plan_details[0].name, "company") # Parent plan available, validate with parent, siblings as well as children of staffing plan Company if cint(staffing_plan_detail.vacancies) > cint(parent_plan_details[0].vacancies) or flt( staffing_plan_detail.total_estimated_cost ) > flt(parent_plan_details[0].total_estimated_cost): - frappe.throw( + xhiveframework.throw( _( "You can only plan for upto {0} vacancies and budget {1} for {2} as per staffing plan {3} for parent company {4}." ).format( cint(parent_plan_details[0].vacancies), parent_plan_details[0].total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), + xhiveframework.bold(staffing_plan_detail.designation), parent_plan_details[0].name, parent_company, ), @@ -103,8 +103,8 @@ class StaffingPlan(Document): ) # Get vacanices already planned for all companies down the hierarchy of Parent Company - lft, rgt = frappe.get_cached_value("Company", parent_company, ["lft", "rgt"]) - all_sibling_details = frappe.db.sql( + lft, rgt = xhiveframework.get_cached_value("Company", parent_company, ["lft", "rgt"]) + all_sibling_details = xhiveframework.db.sql( """select sum(spd.vacancies) as vacancies, sum(spd.total_estimated_cost) as total_estimated_cost from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name @@ -125,13 +125,13 @@ class StaffingPlan(Document): flt(staffing_plan_detail.total_estimated_cost) + flt(all_sibling_details.total_estimated_cost) ) ): - frappe.throw( + xhiveframework.throw( _( "{0} vacancies and {1} budget for {2} already planned for subsidiary companies of {3}. You can only plan for upto {4} vacancies and and budget {5} as per staffing plan {6} for parent company {3}." ).format( cint(all_sibling_details.vacancies), all_sibling_details.total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), + xhiveframework.bold(staffing_plan_detail.designation), parent_company, cint(parent_plan_details[0].vacancies), parent_plan_details[0].total_estimated_cost, @@ -141,7 +141,7 @@ class StaffingPlan(Document): def validate_with_subsidiary_plans(self, staffing_plan_detail): # Valdate this plan with all child company plan - children_details = frappe.db.sql( + children_details = xhiveframework.db.sql( """select sum(spd.vacancies) as vacancies, sum(spd.total_estimated_cost) as total_estimated_cost from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name @@ -158,22 +158,22 @@ class StaffingPlan(Document): and cint(staffing_plan_detail.vacancies) < cint(children_details.vacancies) or flt(staffing_plan_detail.total_estimated_cost) < flt(children_details.total_estimated_cost) ): - frappe.throw( + xhiveframework.throw( _( "Subsidiary companies have already planned for {1} vacancies at a budget of {2}. Staffing Plan for {0} should allocate more vacancies and budget for {3} than planned for its subsidiary companies" ).format( self.company, cint(children_details.vacancies), children_details.total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), + xhiveframework.bold(staffing_plan_detail.designation), ), SubsidiaryCompanyError, ) - @frappe.whitelist() + @xhiveframework.whitelist() def set_job_requisitions(self, job_reqs): if job_reqs: - requisitions = frappe.db.get_list( + requisitions = xhiveframework.db.get_list( "Job Requisition", filters={"name": ["in", job_reqs]}, fields=["designation", "no_of_positions", "expected_compensation"], @@ -193,7 +193,7 @@ class StaffingPlan(Document): return self -@frappe.whitelist() +@xhiveframework.whitelist() def get_designation_counts(designation, company, job_opening=None): if not designation: return False @@ -201,7 +201,7 @@ def get_designation_counts(designation, company, job_opening=None): company_set = get_descendants_of("Company", company) company_set.append(company) - employee_count = frappe.db.count( + employee_count = xhiveframework.db.count( "Employee", {"designation": designation, "status": "Active", "company": ("in", company_set)} ) @@ -209,21 +209,21 @@ def get_designation_counts(designation, company, job_opening=None): if job_opening: filters["name"] = ("!=", job_opening) - job_openings = frappe.db.count("Job Opening", filters) + job_openings = xhiveframework.db.count("Job Opening", filters) return {"employee_count": employee_count, "job_openings": job_openings} -@frappe.whitelist() +@xhiveframework.whitelist() def get_active_staffing_plan_details(company, designation, from_date=None, to_date=None): if from_date is None: from_date = getdate(nowdate()) if to_date is None: to_date = getdate(nowdate()) if not company or not designation: - frappe.throw(_("Please select Company and Designation")) + xhiveframework.throw(_("Please select Company and Designation")) - staffing_plan = frappe.db.sql( + staffing_plan = xhiveframework.db.sql( """ select sp.name, spd.vacancies, spd.total_estimated_cost from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name @@ -234,7 +234,7 @@ def get_active_staffing_plan_details(company, designation, from_date=None, to_da ) if not staffing_plan: - parent_company = frappe.get_cached_value("Company", company, "parent_company") + parent_company = xhiveframework.get_cached_value("Company", company, "parent_company") if parent_company: staffing_plan = get_active_staffing_plan_details( parent_company, designation, from_date, to_date diff --git a/hrms/hr/doctype/staffing_plan/test_staffing_plan.py b/hrms/hr/doctype/staffing_plan/test_staffing_plan.py index 345d6f8..f5f500b 100644 --- a/hrms/hr/doctype/staffing_plan/test_staffing_plan.py +++ b/hrms/hr/doctype/staffing_plan/test_staffing_plan.py @@ -1,10 +1,10 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, nowdate +import xhiveframework +from xhiveframework.utils import add_days, nowdate from hrms.hr.doctype.staffing_plan.staffing_plan import ParentCompanyError, SubsidiaryCompanyError @@ -14,10 +14,10 @@ test_dependencies = ["Designation"] class TestStaffingPlan(unittest.TestCase): def test_staffing_plan(self): _set_up() - frappe.db.set_value("Company", "_Test Company 3", "is_group", 1) - if frappe.db.exists("Staffing Plan", "Test"): + xhiveframework.db.set_value("Company", "_Test Company 3", "is_group", 1) + if xhiveframework.db.exists("Staffing Plan", "Test"): return - staffing_plan = frappe.new_doc("Staffing Plan") + staffing_plan = xhiveframework.new_doc("Staffing Plan") staffing_plan.company = "_Test Company 10" staffing_plan.name = "Test" staffing_plan.from_date = nowdate() @@ -32,9 +32,9 @@ class TestStaffingPlan(unittest.TestCase): def test_staffing_plan_subsidiary_company(self): self.test_staffing_plan() - if frappe.db.exists("Staffing Plan", "Test 1"): + if xhiveframework.db.exists("Staffing Plan", "Test 1"): return - staffing_plan = frappe.new_doc("Staffing Plan") + staffing_plan = xhiveframework.new_doc("Staffing Plan") staffing_plan.company = "_Test Company 3" staffing_plan.name = "Test 1" staffing_plan.from_date = nowdate() @@ -47,9 +47,9 @@ class TestStaffingPlan(unittest.TestCase): def test_staffing_plan_parent_company(self): _set_up() - if frappe.db.exists("Staffing Plan", "Test"): + if xhiveframework.db.exists("Staffing Plan", "Test"): return - staffing_plan = frappe.new_doc("Staffing Plan") + staffing_plan = xhiveframework.new_doc("Staffing Plan") staffing_plan.company = "_Test Company 3" staffing_plan.name = "Test" staffing_plan.from_date = nowdate() @@ -61,9 +61,9 @@ class TestStaffingPlan(unittest.TestCase): staffing_plan.insert() staffing_plan.submit() self.assertEqual(staffing_plan.total_estimated_budget, 350000.00) - if frappe.db.exists("Staffing Plan", "Test 1"): + if xhiveframework.db.exists("Staffing Plan", "Test 1"): return - staffing_plan = frappe.new_doc("Staffing Plan") + staffing_plan = xhiveframework.new_doc("Staffing Plan") staffing_plan.company = "_Test Company 10" staffing_plan.name = "Test 1" staffing_plan.from_date = nowdate() @@ -78,7 +78,7 @@ class TestStaffingPlan(unittest.TestCase): def _set_up(): for doctype in ["Staffing Plan", "Staffing Plan Detail"]: - frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype)) + xhiveframework.db.sql("delete from `tab{doctype}`".format(doctype=doctype)) make_company() @@ -86,10 +86,10 @@ def make_company(name=None, abbr=None): if not name: name = "_Test Company 10" - if frappe.db.exists("Company", name): + if xhiveframework.db.exists("Company", name): return - company = frappe.new_doc("Company") + company = xhiveframework.new_doc("Company") company.company_name = name company.abbr = abbr or "_TC10" company.parent_company = "_Test Company 3" diff --git a/hrms/hr/doctype/staffing_plan_detail/staffing_plan_detail.py b/hrms/hr/doctype/staffing_plan_detail/staffing_plan_detail.py index 6749690..42a8aff 100644 --- a/hrms/hr/doctype/staffing_plan_detail/staffing_plan_detail.py +++ b/hrms/hr/doctype/staffing_plan_detail/staffing_plan_detail.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class StaffingPlanDetail(Document): diff --git a/hrms/hr/doctype/training_event/test_training_event.py b/hrms/hr/doctype/training_event/test_training_event.py index 22da9c9..89aad04 100644 --- a/hrms/hr/doctype/training_event/test_training_event.py +++ b/hrms/hr/doctype/training_event/test_training_event.py @@ -1,10 +1,10 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import add_days, today +import xhiveframework +from xhiveframework.utils import add_days, today from hrms.payroll.doctype.salary_structure.test_salary_structure import make_employee @@ -35,12 +35,12 @@ class TestTrainingEvent(unittest.TestCase): self.assertEqual(entry.status, "Open") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_training_program(training_program): - if not frappe.db.get_value("Training Program", training_program): - frappe.get_doc( + if not xhiveframework.db.get_value("Training Program", training_program): + xhiveframework.get_doc( { "doctype": "Training Program", "training_program": training_program, @@ -50,7 +50,7 @@ def create_training_program(training_program): def create_training_event(attendees): - return frappe.get_doc( + return xhiveframework.get_doc( { "doctype": "Training Event", "event_name": "Basic Training Event", diff --git a/hrms/hr/doctype/training_event/training_event.js b/hrms/hr/doctype/training_event/training_event.js index 642e6a1..2c00048 100644 --- a/hrms/hr/doctype/training_event/training_event.js +++ b/hrms/hr/doctype/training_event/training_event.js @@ -1,23 +1,23 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Training Event', { +xhiveframework.ui.form.on('Training Event', { onload_post_render: function (frm) { frm.get_field("employees").grid.set_multiple_add("employee"); }, refresh: function (frm) { if (!frm.doc.__islocal) { frm.add_custom_button(__("Training Result"), function () { - frappe.route_options = { + xhiveframework.route_options = { training_event: frm.doc.name }; - frappe.set_route("List", "Training Result"); + xhiveframework.set_route("List", "Training Result"); }); frm.add_custom_button(__("Training Feedback"), function () { - frappe.route_options = { + xhiveframework.route_options = { training_event: frm.doc.name }; - frappe.set_route("List", "Training Feedback"); + xhiveframework.set_route("List", "Training Feedback"); }); } frm.events.set_employee_query(frm); @@ -41,7 +41,7 @@ frappe.ui.form.on('Training Event', { } }); -frappe.ui.form.on("Training Event Employee", { +xhiveframework.ui.form.on("Training Event Employee", { employee: function(frm) { frm.events.set_employee_query(frm); } diff --git a/hrms/hr/doctype/training_event/training_event.py b/hrms/hr/doctype/training_event/training_event.py index c976328..1c4cfd7 100644 --- a/hrms/hr/doctype/training_event/training_event.py +++ b/hrms/hr/doctype/training_event/training_event.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import time_diff_in_seconds +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import time_diff_in_seconds -from erpnext.setup.doctype.employee.employee import get_employee_emails +from xhiveerp.setup.doctype.employee.employee import get_employee_emails class TrainingEvent(Document): @@ -23,7 +23,7 @@ class TrainingEvent(Document): def validate_period(self): if time_diff_in_seconds(self.end_time, self.start_time) <= 0: - frappe.throw(_("End time cannot be before start time")) + xhiveframework.throw(_("End time cannot be before start time")) def set_status_for_attendees(self): if self.event_status == "Completed": diff --git a/hrms/hr/doctype/training_event/training_event_calendar.js b/hrms/hr/doctype/training_event/training_event_calendar.js index cb168c0..6d4a57e 100644 --- a/hrms/hr/doctype/training_event/training_event_calendar.js +++ b/hrms/hr/doctype/training_event/training_event_calendar.js @@ -1,7 +1,7 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.views.calendar["Training Event"] = { +xhiveframework.views.calendar["Training Event"] = { field_map: { "start": "start_time", "end": "end_time", @@ -10,5 +10,5 @@ frappe.views.calendar["Training Event"] = { "allDay": "allDay" }, gantt: true, - get_events_method: "frappe.desk.calendar.get_events", + get_events_method: "xhiveframework.desk.calendar.get_events", } diff --git a/hrms/hr/doctype/training_event_employee/training_event_employee.py b/hrms/hr/doctype/training_event_employee/training_event_employee.py index 5dce6e1..4fdaa24 100644 --- a/hrms/hr/doctype/training_event_employee/training_event_employee.py +++ b/hrms/hr/doctype/training_event_employee/training_event_employee.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class TrainingEventEmployee(Document): diff --git a/hrms/hr/doctype/training_feedback/test_training_feedback.py b/hrms/hr/doctype/training_feedback/test_training_feedback.py index 6ed4509..fd33cef 100644 --- a/hrms/hr/doctype/training_feedback/test_training_feedback.py +++ b/hrms/hr/doctype/training_feedback/test_training_feedback.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -import frappe +import xhiveframework from hrms.hr.doctype.training_event.test_training_event import ( create_training_event, @@ -29,16 +29,16 @@ class TestTrainingFeedback(unittest.TestCase): # should not allow creating feedback since employee2 was not part of the event feedback = create_training_feedback(training_event.name, self.employee2) - self.assertRaises(frappe.ValidationError, feedback.save) + self.assertRaises(xhiveframework.ValidationError, feedback.save) # cannot record feedback for absent employee - employee = frappe.db.get_value( + employee = xhiveframework.db.get_value( "Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "name" ) - frappe.db.set_value("Training Event Employee", employee, "attendance", "Absent") + xhiveframework.db.set_value("Training Event Employee", employee, "attendance", "Absent") feedback = create_training_feedback(training_event.name, self.employee) - self.assertRaises(frappe.ValidationError, feedback.save) + self.assertRaises(xhiveframework.ValidationError, feedback.save) def test_training_feedback_status(self): training_event = create_training_event(self.attendees) @@ -51,18 +51,18 @@ class TestTrainingFeedback(unittest.TestCase): feedback = create_training_feedback(training_event.name, self.employee) feedback.submit() - status = frappe.db.get_value( + status = xhiveframework.db.get_value( "Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "status" ) self.assertEqual(status, "Feedback Submitted") def tearDown(self): - frappe.db.rollback() + xhiveframework.db.rollback() def create_training_feedback(event, employee): - return frappe.get_doc( + return xhiveframework.get_doc( { "doctype": "Training Feedback", "training_event": event, diff --git a/hrms/hr/doctype/training_feedback/training_feedback.js b/hrms/hr/doctype/training_feedback/training_feedback.js index 5e875c1..1e5a68d 100644 --- a/hrms/hr/doctype/training_feedback/training_feedback.js +++ b/hrms/hr/doctype/training_feedback/training_feedback.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Training Feedback', { +xhiveframework.ui.form.on('Training Feedback', { onload: function(frm) { frm.add_fetch("training_event", "course", "course"); frm.add_fetch("training_event", "event_name", "event_name"); diff --git a/hrms/hr/doctype/training_feedback/training_feedback.py b/hrms/hr/doctype/training_feedback/training_feedback.py index d5de28e..85affac 100644 --- a/hrms/hr/doctype/training_feedback/training_feedback.py +++ b/hrms/hr/doctype/training_feedback/training_feedback.py @@ -1,19 +1,19 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document class TrainingFeedback(Document): def validate(self): - training_event = frappe.get_doc("Training Event", self.training_event) + training_event = xhiveframework.get_doc("Training Event", self.training_event) if training_event.docstatus != 1: - frappe.throw(_("{0} must be submitted").format(_("Training Event"))) + xhiveframework.throw(_("{0} must be submitted").format(_("Training Event"))) - emp_event_details = frappe.db.get_value( + emp_event_details = xhiveframework.db.get_value( "Training Event Employee", {"parent": self.training_event, "employee": self.employee}, ["name", "attendance"], @@ -21,27 +21,27 @@ class TrainingFeedback(Document): ) if not emp_event_details: - frappe.throw( + xhiveframework.throw( _("Employee {0} not found in Training Event Participants.").format( - frappe.bold(self.employee_name) + xhiveframework.bold(self.employee_name) ) ) if emp_event_details.attendance == "Absent": - frappe.throw(_("Feedback cannot be recorded for an absent Employee.")) + xhiveframework.throw(_("Feedback cannot be recorded for an absent Employee.")) def on_submit(self): - employee = frappe.db.get_value( + employee = xhiveframework.db.get_value( "Training Event Employee", {"parent": self.training_event, "employee": self.employee} ) if employee: - frappe.db.set_value("Training Event Employee", employee, "status", "Feedback Submitted") + xhiveframework.db.set_value("Training Event Employee", employee, "status", "Feedback Submitted") def on_cancel(self): - employee = frappe.db.get_value( + employee = xhiveframework.db.get_value( "Training Event Employee", {"parent": self.training_event, "employee": self.employee} ) if employee: - frappe.db.set_value("Training Event Employee", employee, "status", "Completed") + xhiveframework.db.set_value("Training Event Employee", employee, "status", "Completed") diff --git a/hrms/hr/doctype/training_program/test_training_program.py b/hrms/hr/doctype/training_program/test_training_program.py index 5000705..b6b0144 100644 --- a/hrms/hr/doctype/training_program/test_training_program.py +++ b/hrms/hr/doctype/training_program/test_training_program.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2017, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/training_program/training_program.js b/hrms/hr/doctype/training_program/training_program.js index a4ccf54..e4217a6 100644 --- a/hrms/hr/doctype/training_program/training_program.js +++ b/hrms/hr/doctype/training_program/training_program.js @@ -1,5 +1,5 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2017, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Training Program', { +xhiveframework.ui.form.on('Training Program', { }); diff --git a/hrms/hr/doctype/training_program/training_program.py b/hrms/hr/doctype/training_program/training_program.py index 96b2fd7..c0f12bf 100644 --- a/hrms/hr/doctype/training_program/training_program.py +++ b/hrms/hr/doctype/training_program/training_program.py @@ -1,8 +1,8 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2017, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class TrainingProgram(Document): diff --git a/hrms/hr/doctype/training_program/training_program_dashboard.py b/hrms/hr/doctype/training_program/training_program_dashboard.py index 1735db1..7b5c15f 100644 --- a/hrms/hr/doctype/training_program/training_program_dashboard.py +++ b/hrms/hr/doctype/training_program/training_program_dashboard.py @@ -1,4 +1,4 @@ -from frappe import _ +from xhiveframework import _ def get_data(): diff --git a/hrms/hr/doctype/training_result/test_training_result.py b/hrms/hr/doctype/training_result/test_training_result.py index 136543c..9b049b6 100644 --- a/hrms/hr/doctype/training_result/test_training_result.py +++ b/hrms/hr/doctype/training_result/test_training_result.py @@ -1,9 +1,9 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -# test_records = frappe.get_test_records('Training Result') +# test_records = xhiveframework.get_test_records('Training Result') class TestTrainingResult(unittest.TestCase): diff --git a/hrms/hr/doctype/training_result/training_result.js b/hrms/hr/doctype/training_result/training_result.js index a8358a0..95d7778 100644 --- a/hrms/hr/doctype/training_result/training_result.js +++ b/hrms/hr/doctype/training_result/training_result.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Training Result', { +xhiveframework.ui.form.on('Training Result', { onload: function(frm) { frm.trigger("training_event"); }, @@ -12,7 +12,7 @@ frappe.ui.form.on('Training Result', { training_event: function(frm) { if (frm.doc.training_event && !frm.doc.docstatus && !frm.doc.employees) { - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.training_result.training_result.get_employees", args: { "training_event": frm.doc.training_event @@ -21,7 +21,7 @@ frappe.ui.form.on('Training Result', { frm.set_value("employees" ,""); if (r.message) { $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Training Result Employee", "employees"); + var row = xhiveframework.model.add_child(frm.doc, "Training Result Employee", "employees"); row.employee = d.employee; row.employee_name = d.employee_name; }); diff --git a/hrms/hr/doctype/training_result/training_result.py b/hrms/hr/doctype/training_result/training_result.py index ffcf1d3..a7ae26b 100644 --- a/hrms/hr/doctype/training_result/training_result.py +++ b/hrms/hr/doctype/training_result/training_result.py @@ -1,24 +1,24 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document -from erpnext.setup.doctype.employee.employee import get_employee_emails +from xhiveerp.setup.doctype.employee.employee import get_employee_emails class TrainingResult(Document): def validate(self): - training_event = frappe.get_doc("Training Event", self.training_event) + training_event = xhiveframework.get_doc("Training Event", self.training_event) if training_event.docstatus != 1: - frappe.throw(_("{0} must be submitted").format(_("Training Event"))) + xhiveframework.throw(_("{0} must be submitted").format(_("Training Event"))) self.employee_emails = ", ".join(get_employee_emails([d.employee for d in self.employees])) def on_submit(self): - training_event = frappe.get_doc("Training Event", self.training_event) + training_event = xhiveframework.get_doc("Training Event", self.training_event) training_event.status = "Completed" for e in self.employees: for e1 in training_event.employees: @@ -29,6 +29,6 @@ class TrainingResult(Document): training_event.save() -@frappe.whitelist() +@xhiveframework.whitelist() def get_employees(training_event): - return frappe.get_doc("Training Event", training_event).employees + return xhiveframework.get_doc("Training Event", training_event).employees diff --git a/hrms/hr/doctype/training_result_employee/training_result_employee.py b/hrms/hr/doctype/training_result_employee/training_result_employee.py index e048ff5..eb3af5f 100644 --- a/hrms/hr/doctype/training_result_employee/training_result_employee.py +++ b/hrms/hr/doctype/training_result_employee/training_result_employee.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class TrainingResultEmployee(Document): diff --git a/hrms/hr/doctype/travel_itinerary/travel_itinerary.py b/hrms/hr/doctype/travel_itinerary/travel_itinerary.py index 529909b..632809d 100644 --- a/hrms/hr/doctype/travel_itinerary/travel_itinerary.py +++ b/hrms/hr/doctype/travel_itinerary/travel_itinerary.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class TravelItinerary(Document): diff --git a/hrms/hr/doctype/travel_request/test_travel_request.py b/hrms/hr/doctype/travel_request/test_travel_request.py index e29a1ca..4fa0f44 100644 --- a/hrms/hr/doctype/travel_request/test_travel_request.py +++ b/hrms/hr/doctype/travel_request/test_travel_request.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2018, Xhive LLC # See license.txt import unittest diff --git a/hrms/hr/doctype/travel_request/travel_request.js b/hrms/hr/doctype/travel_request/travel_request.js index 9dd48eb..37ebb7e 100644 --- a/hrms/hr/doctype/travel_request/travel_request.js +++ b/hrms/hr/doctype/travel_request/travel_request.js @@ -1,7 +1,7 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2018, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on('Travel Request', { +xhiveframework.ui.form.on('Travel Request', { refresh: function(frm) { } diff --git a/hrms/hr/doctype/travel_request/travel_request.py b/hrms/hr/doctype/travel_request/travel_request.py index ecac86c..9e91c93 100644 --- a/hrms/hr/doctype/travel_request/travel_request.py +++ b/hrms/hr/doctype/travel_request/travel_request.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document from hrms.hr.utils import validate_active_employee diff --git a/hrms/hr/doctype/travel_request_costing/travel_request_costing.py b/hrms/hr/doctype/travel_request_costing/travel_request_costing.py index 0d1a592..3cc0cdb 100644 --- a/hrms/hr/doctype/travel_request_costing/travel_request_costing.py +++ b/hrms/hr/doctype/travel_request_costing/travel_request_costing.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2018, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class TravelRequestCosting(Document): diff --git a/hrms/hr/doctype/upload_attendance/test_upload_attendance.py b/hrms/hr/doctype/upload_attendance/test_upload_attendance.py index 1e354a5..770f9e0 100644 --- a/hrms/hr/doctype/upload_attendance/test_upload_attendance.py +++ b/hrms/hr/doctype/upload_attendance/test_upload_attendance.py @@ -1,13 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import getdate +import xhiveframework +from xhiveframework.utils import getdate -import erpnext -from erpnext.setup.doctype.employee.test_employee import make_employee +import xhiveerp +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.upload_attendance.upload_attendance import get_data @@ -17,13 +17,13 @@ test_dependencies = ["Holiday List"] class TestUploadAttendance(unittest.TestCase): @classmethod def setUpClass(cls): - frappe.db.set_value( - "Company", erpnext.get_default_company(), "default_holiday_list", "_Test Holiday List" + xhiveframework.db.set_value( + "Company", xhiveerp.get_default_company(), "default_holiday_list", "_Test Holiday List" ) def test_date_range(self): employee = make_employee("test_employee@company.com") - employee_doc = frappe.get_doc("Employee", employee) + employee_doc = xhiveframework.get_doc("Employee", employee) date_of_joining = "2018-01-02" relieving_date = "2018-01-03" from_date = "2018-01-01" diff --git a/hrms/hr/doctype/upload_attendance/upload_attendance.js b/hrms/hr/doctype/upload_attendance/upload_attendance.js index cd5c15b..7c04e4a 100644 --- a/hrms/hr/doctype/upload_attendance/upload_attendance.js +++ b/hrms/hr/doctype/upload_attendance/upload_attendance.js @@ -1,14 +1,14 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2015, Xhive LLC // License: GNU General Public License v3. See license.txt -frappe.provide("hrms.hr"); +xhiveframework.provide("hrms.hr"); -hrms.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui.form.Controller { +hrms.hr.AttendanceControlPanel = class AttendanceControlPanel extends xhiveframework.ui.form.Controller { onload() { - this.frm.set_value("att_fr_date", frappe.datetime.get_today()); - this.frm.set_value("att_to_date", frappe.datetime.get_today()); + this.frm.set_value("att_fr_date", xhiveframework.datetime.get_today()); + this.frm.set_value("att_to_date", xhiveframework.datetime.get_today()); } refresh() { @@ -19,10 +19,10 @@ hrms.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui. get_template() { if(!this.frm.doc.att_fr_date || !this.frm.doc.att_to_date) { - frappe.msgprint(__("Attendance From Date and Attendance To Date is mandatory")); + xhiveframework.msgprint(__("Attendance From Date and Attendance To Date is mandatory")); return; } - window.location.href = repl(frappe.request.url + + window.location.href = repl(xhiveframework.request.url + '?cmd=%(cmd)s&from_date=%(from_date)s&to_date=%(to_date)s', { cmd: "hrms.hr.doctype.upload_attendance.upload_attendance.get_template", from_date: this.frm.doc.att_fr_date, @@ -32,7 +32,7 @@ hrms.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui. show_upload() { var $wrapper = $(cur_frm.fields_dict.upload_html.wrapper).empty(); - new frappe.ui.FileUploader({ + new xhiveframework.ui.FileUploader({ wrapper: $wrapper, method: 'hrms.hr.doctype.upload_attendance.upload_attendance.upload' }); @@ -41,7 +41,7 @@ hrms.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui. setup_import_progress() { var $log_wrapper = $(this.frm.fields_dict.import_log.wrapper).empty(); - frappe.realtime.on('import_attendance', (data) => { + xhiveframework.realtime.on('import_attendance', (data) => { if (data.progress) { this.frm.dashboard.show_progress('Import Attendance', data.progress / data.total * 100, __('Importing {0} of {1}', [data.progress, data.total])); diff --git a/hrms/hr/doctype/upload_attendance/upload_attendance.py b/hrms/hr/doctype/upload_attendance/upload_attendance.py index 68eef4b..e07d9f2 100644 --- a/hrms/hr/doctype/upload_attendance/upload_attendance.py +++ b/hrms/hr/doctype/upload_attendance/upload_attendance.py @@ -1,16 +1,16 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # License: GNU General Public License v3. See license.txt # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, cstr, date_diff, getdate -from frappe.utils.csvutils import UnicodeWriter +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import add_days, cstr, date_diff, getdate +from xhiveframework.utils.csvutils import UnicodeWriter -from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee +from xhiveerp.setup.doctype.employee.employee import get_holiday_list_for_employee from hrms.hr.utils import get_holiday_dates_for_employee @@ -19,15 +19,15 @@ class UploadAttendance(Document): pass -@frappe.whitelist() +@xhiveframework.whitelist() def get_template(): - if not frappe.has_permission("Attendance", "create"): - raise frappe.PermissionError + if not xhiveframework.has_permission("Attendance", "create"): + raise xhiveframework.PermissionError - args = frappe.local.form_dict + args = xhiveframework.local.form_dict if getdate(args.from_date) > getdate(args.to_date): - frappe.throw(_("To Date should be greater than From Date")) + xhiveframework.throw(_("To Date should be greater than From Date")) w = UnicodeWriter() w = add_header(w) @@ -35,19 +35,19 @@ def get_template(): try: w = add_data(w, args) except Exception as e: - frappe.clear_messages() - frappe.respond_as_web_page("Holiday List Missing", html=e) + xhiveframework.clear_messages() + xhiveframework.respond_as_web_page("Holiday List Missing", html=e) return # write out response as a type csv - frappe.response["result"] = cstr(w.getvalue()) - frappe.response["type"] = "csv" - frappe.response["doctype"] = "Attendance" + xhiveframework.response["result"] = cstr(w.getvalue()) + xhiveframework.response["type"] = "csv" + xhiveframework.response["doctype"] = "Attendance" def add_header(w): status = ", ".join( - (frappe.get_meta("Attendance").get_field("status").options or "").strip().split("\n") + (xhiveframework.get_meta("Attendance").get_field("status").options or "").strip().split("\n") ) w.writerow(["Notes:"]) w.writerow(["Please do not change the template headings"]) @@ -132,7 +132,7 @@ def get_dates(args): def get_active_employees(): - employees = frappe.db.get_all( + employees = xhiveframework.db.get_all( "Employee", fields=["name", "employee_name", "date_of_joining", "company", "relieving_date"], filters={"docstatus": ["<", 2], "status": "Active"}, @@ -141,7 +141,7 @@ def get_active_employees(): def get_existing_attendance_records(args): - attendance = frappe.db.sql( + attendance = xhiveframework.db.sql( """select name, attendance_date, employee, status, leave_type, naming_series from `tabAttendance` where attendance_date between %s and %s and docstatus < 2""", (args["from_date"], args["to_date"]), @@ -156,23 +156,23 @@ def get_existing_attendance_records(args): def get_naming_series(): - series = frappe.get_meta("Attendance").get_field("naming_series").options.strip().split("\n") + series = xhiveframework.get_meta("Attendance").get_field("naming_series").options.strip().split("\n") if not series: - frappe.throw(_("Please setup numbering series for Attendance via Setup > Numbering Series")) + xhiveframework.throw(_("Please setup numbering series for Attendance via Setup > Numbering Series")) return series[0] -@frappe.whitelist() +@xhiveframework.whitelist() def upload(): - if not frappe.has_permission("Attendance", "create"): - raise frappe.PermissionError + if not xhiveframework.has_permission("Attendance", "create"): + raise xhiveframework.PermissionError - from frappe.utils.csvutils import read_csv_content + from xhiveframework.utils.csvutils import read_csv_content - rows = read_csv_content(frappe.local.uploaded_file) + rows = read_csv_content(xhiveframework.local.uploaded_file) if not rows: - frappe.throw(_("Please select a csv file")) - frappe.enqueue(import_attendances, rows=rows, now=True if len(rows) < 200 else False) + xhiveframework.throw(_("Please select a csv file")) + xhiveframework.enqueue(import_attendances, rows=rows, now=True if len(rows) < 200 else False) def import_attendances(rows): @@ -180,7 +180,7 @@ def import_attendances(rows): rows = [row for row in rows if row[4] != "Holiday"] return rows - from frappe.modules import scrub + from xhiveframework.modules import scrub rows = list(filter(lambda x: x and any(x), rows)) columns = [scrub(f) for f in rows[4]] @@ -192,32 +192,32 @@ def import_attendances(rows): rows = remove_holidays(rows) - from frappe.utils.csvutils import check_record, import_doc + from xhiveframework.utils.csvutils import check_record, import_doc for i, row in enumerate(rows): if not row: continue row_idx = i + 5 - d = frappe._dict(zip(columns, row)) + d = xhiveframework._dict(zip(columns, row)) d["doctype"] = "Attendance" if d.name: - d["docstatus"] = frappe.db.get_value("Attendance", d.name, "docstatus") + d["docstatus"] = xhiveframework.db.get_value("Attendance", d.name, "docstatus") try: check_record(d) ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True)) - frappe.publish_realtime("import_attendance", dict(progress=i, total=len(rows))) + xhiveframework.publish_realtime("import_attendance", dict(progress=i, total=len(rows))) except AttributeError: pass except Exception as e: error = True ret.append("Error for row (#%d) %s : %s" % (row_idx, len(row) > 1 and row[1] or "", cstr(e))) - frappe.errprint(frappe.get_traceback()) + xhiveframework.errprint(xhiveframework.get_traceback()) if error: - frappe.db.rollback() + xhiveframework.db.rollback() else: - frappe.db.commit() + xhiveframework.db.commit() - frappe.publish_realtime("import_attendance", dict(messages=ret, error=error)) + xhiveframework.publish_realtime("import_attendance", dict(messages=ret, error=error)) diff --git a/hrms/hr/doctype/vehicle_log/test_vehicle_log.py b/hrms/hr/doctype/vehicle_log/test_vehicle_log.py index c78b868..a869865 100644 --- a/hrms/hr/doctype/vehicle_log/test_vehicle_log.py +++ b/hrms/hr/doctype/vehicle_log/test_vehicle_log.py @@ -1,19 +1,19 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2015, Xhive LLC # See license.txt import unittest -import frappe -from frappe.utils import cstr, flt, nowdate, random_string +import xhiveframework +from xhiveframework.utils import cstr, flt, nowdate, random_string -from erpnext.setup.doctype.employee.test_employee import make_employee +from xhiveerp.setup.doctype.employee.test_employee import make_employee from hrms.hr.doctype.vehicle_log.vehicle_log import make_expense_claim class TestVehicleLog(unittest.TestCase): def setUp(self): - employee_id = frappe.db.sql( + employee_id = xhiveframework.db.sql( """select name from `tabEmployee` where name='testdriver@example.com'""" ) self.employee_id = employee_id[0][0] if employee_id else None @@ -24,14 +24,14 @@ class TestVehicleLog(unittest.TestCase): self.license_plate = get_vehicle(self.employee_id) def tearDown(self): - frappe.delete_doc("Vehicle", self.license_plate, force=1) - frappe.delete_doc("Employee", self.employee_id, force=1) + xhiveframework.delete_doc("Vehicle", self.license_plate, force=1) + xhiveframework.delete_doc("Employee", self.employee_id, force=1) def test_make_vehicle_log_and_syncing_of_odometer_value(self): vehicle_log = make_vehicle_log(self.license_plate, self.employee_id) # checking value of vehicle odometer value on submit. - vehicle = frappe.get_doc("Vehicle", self.license_plate) + vehicle = xhiveframework.get_doc("Vehicle", self.license_plate) self.assertEqual(vehicle.last_odometer, vehicle_log.odometer) # checking value vehicle odometer on vehicle log cancellation. @@ -54,8 +54,8 @@ class TestVehicleLog(unittest.TestCase): self.assertEqual(fuel_expense, 50 * 500) vehicle_log.cancel() - frappe.delete_doc("Expense Claim", expense_claim.name) - frappe.delete_doc("Vehicle Log", vehicle_log.name) + xhiveframework.delete_doc("Expense Claim", expense_claim.name) + xhiveframework.delete_doc("Vehicle Log", vehicle_log.name) def test_vehicle_log_with_service_expenses(self): vehicle_log = make_vehicle_log(self.license_plate, self.employee_id, with_services=True) @@ -65,13 +65,13 @@ class TestVehicleLog(unittest.TestCase): self.assertEqual(expenses, 27000) vehicle_log.cancel() - frappe.delete_doc("Expense Claim", expense_claim.name) - frappe.delete_doc("Vehicle Log", vehicle_log.name) + xhiveframework.delete_doc("Expense Claim", expense_claim.name) + xhiveframework.delete_doc("Vehicle Log", vehicle_log.name) def get_vehicle(employee_id): license_plate = random_string(10).upper() - vehicle = frappe.get_doc( + vehicle = xhiveframework.get_doc( { "doctype": "Vehicle", "license_plate": cstr(license_plate), @@ -88,13 +88,13 @@ def get_vehicle(employee_id): ) try: vehicle.insert(ignore_if_duplicate=True) - except frappe.DuplicateEntryError: + except xhiveframework.DuplicateEntryError: pass return license_plate def make_vehicle_log(license_plate, employee_id, with_services=False): - vehicle_log = frappe.get_doc( + vehicle_log = xhiveframework.get_doc( { "doctype": "Vehicle Log", "license_plate": cstr(license_plate), diff --git a/hrms/hr/doctype/vehicle_log/vehicle_log.js b/hrms/hr/doctype/vehicle_log/vehicle_log.js index fa0dfad..473787c 100644 --- a/hrms/hr/doctype/vehicle_log/vehicle_log.js +++ b/hrms/hr/doctype/vehicle_log/vehicle_log.js @@ -1,7 +1,7 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// Copyright (c) 2016, Xhive LLC // For license information, please see license.txt -frappe.ui.form.on("Vehicle Log", { +xhiveframework.ui.form.on("Vehicle Log", { refresh: function(frm) { if(frm.doc.docstatus == 1) { frm.add_custom_button(__('Expense Claim'), function() { @@ -12,14 +12,14 @@ frappe.ui.form.on("Vehicle Log", { }, expense_claim: function(frm){ - frappe.call({ + xhiveframework.call({ method: "hrms.hr.doctype.vehicle_log.vehicle_log.make_expense_claim", args:{ docname: frm.doc.name }, callback: function(r){ - var doc = frappe.model.sync(r.message); - frappe.set_route('Form', 'Expense Claim', r.message.name); + var doc = xhiveframework.model.sync(r.message); + xhiveframework.set_route('Form', 'Expense Claim', r.message.name); } }); } diff --git a/hrms/hr/doctype/vehicle_log/vehicle_log.py b/hrms/hr/doctype/vehicle_log/vehicle_log.py index 2c1d9a4..ded992b 100644 --- a/hrms/hr/doctype/vehicle_log/vehicle_log.py +++ b/hrms/hr/doctype/vehicle_log/vehicle_log.py @@ -1,48 +1,48 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt +import xhiveframework +from xhiveframework import _ +from xhiveframework.model.document import Document +from xhiveframework.utils import flt class VehicleLog(Document): def validate(self): if flt(self.odometer) < flt(self.last_odometer): - frappe.throw( + xhiveframework.throw( _("Current Odometer Value should be greater than Last Odometer Value {0}").format( self.last_odometer ) ) def on_submit(self): - frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", self.odometer) + xhiveframework.db.set_value("Vehicle", self.license_plate, "last_odometer", self.odometer) def on_cancel(self): distance_travelled = self.odometer - self.last_odometer if distance_travelled > 0: updated_odometer_value = ( - int(frappe.db.get_value("Vehicle", self.license_plate, "last_odometer")) - distance_travelled + int(xhiveframework.db.get_value("Vehicle", self.license_plate, "last_odometer")) - distance_travelled ) - frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", updated_odometer_value) + xhiveframework.db.set_value("Vehicle", self.license_plate, "last_odometer", updated_odometer_value) -@frappe.whitelist() +@xhiveframework.whitelist() def make_expense_claim(docname): - expense_claim = frappe.db.exists("Expense Claim", {"vehicle_log": docname}) + expense_claim = xhiveframework.db.exists("Expense Claim", {"vehicle_log": docname}) if expense_claim: - frappe.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(expense_claim)) + xhiveframework.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(expense_claim)) - vehicle_log = frappe.get_doc("Vehicle Log", docname) + vehicle_log = xhiveframework.get_doc("Vehicle Log", docname) service_expense = sum([flt(d.expense_amount) for d in vehicle_log.service_detail]) claim_amount = service_expense + (flt(vehicle_log.price) * flt(vehicle_log.fuel_qty) or 1) if not claim_amount: - frappe.throw(_("No additional expenses has been added")) + xhiveframework.throw(_("No additional expenses has been added")) - exp_claim = frappe.new_doc("Expense Claim") + exp_claim = xhiveframework.new_doc("Expense Claim") exp_claim.employee = vehicle_log.employee exp_claim.vehicle_log = vehicle_log.name exp_claim.remark = _("Expense Claim for Vehicle Log {0}").format(vehicle_log.name) diff --git a/hrms/hr/doctype/vehicle_service/vehicle_service.py b/hrms/hr/doctype/vehicle_service/vehicle_service.py index fdd4e39..3c00290 100644 --- a/hrms/hr/doctype/vehicle_service/vehicle_service.py +++ b/hrms/hr/doctype/vehicle_service/vehicle_service.py @@ -1,8 +1,8 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2015, Xhive LLC # For license information, please see license.txt -from frappe.model.document import Document +from xhiveframework.model.document import Document class VehicleService(Document): diff --git a/hrms/hr/employee_property_update.js b/hrms/hr/employee_property_update.js index 5f87ae2..c325d7e 100644 --- a/hrms/hr/employee_property_update.js +++ b/hrms/hr/employee_property_update.js @@ -1,4 +1,4 @@ -frappe.ui.form.on(cur_frm.doctype, { +xhiveframework.ui.form.on(cur_frm.doctype, { setup: function(frm) { frm.set_query("employee", function() { return { @@ -44,7 +44,7 @@ frappe.ui.form.on(cur_frm.doctype, { setup_employee_property_button: function(frm, table) { frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => { if (!frm.doc.employee) { - frappe.msgprint(__("Please select Employee first.")); + xhiveframework.msgprint(__("Please select Employee first.")); return; } @@ -54,9 +54,9 @@ frappe.ui.form.on(cur_frm.doctype, { const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"]; - frappe.model.with_doctype("Employee", () => { + xhiveframework.model.with_doctype("Employee", () => { const field_label_map = {}; - frappe.get_meta("Employee").fields.forEach(d => { + xhiveframework.get_meta("Employee").fields.forEach(d => { field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`; if ( !in_list(exclude_field_types, d.fieldtype) @@ -78,7 +78,7 @@ frappe.ui.form.on(cur_frm.doctype, { }); var show_dialog = function(frm, table, field_labels) { - var d = new frappe.ui.Dialog({ + var d = new xhiveframework.ui.Dialog({ title: "Update Property", fields: [ {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels}, @@ -99,7 +99,7 @@ var show_dialog = function(frm, table, field_labels) { let property = d.get_values().property; d.data.fieldname = property; if(!property){return;} - frappe.call({ + xhiveframework.call({ method: 'hrms.hr.utils.get_employee_field_property', args: {employee: frm.doc.employee, fieldname: property}, callback: function(r) { @@ -121,7 +121,7 @@ var show_dialog = function(frm, table, field_labels) { var render_dynamic_field = function(d, fieldtype, options, fieldname) { d.data.new = null; - var dynamic_field = frappe.ui.form.make_control({ + var dynamic_field = xhiveframework.ui.form.make_control({ df: { "fieldtype": fieldtype, "fieldname": fieldname, @@ -139,11 +139,11 @@ var add_to_details = function(frm, d, table) { let data = d.data; if (data.fieldname) { if (validate_duplicate(frm, table, data.fieldname)) { - frappe.show_alert({message: __("Property already added"), indicator: "orange"}); + xhiveframework.show_alert({message: __("Property already added"), indicator: "orange"}); return false; } if (data.current == data.new) { - frappe.show_alert({message: __("Nothing to change"), indicator: "orange"}); + xhiveframework.show_alert({message: __("Nothing to change"), indicator: "orange"}); d.get_primary_btn().attr("disabled", false); return false; } @@ -160,10 +160,10 @@ var add_to_details = function(frm, d, table) { d.fields_dict.new_value.$wrapper.html(""); d.set_value("property", ""); d.set_value("current", ""); - frappe.show_alert({message: __("Added to details"), indicator: "green"}); + xhiveframework.show_alert({message: __("Added to details"), indicator: "green"}); d.data = {}; } else { - frappe.show_alert({message: __("Value missing"), indicator: "red"}); + xhiveframework.show_alert({message: __("Value missing"), indicator: "red"}); } }; diff --git a/hrms/hr/module_onboarding/human_resource/human_resource.json b/hrms/hr/module_onboarding/human_resource/human_resource.json index cd11bd1..4514dd8 100644 --- a/hrms/hr/module_onboarding/human_resource/human_resource.json +++ b/hrms/hr/module_onboarding/human_resource/human_resource.json @@ -10,7 +10,7 @@ "creation": "2020-05-14 11:51:45.050242", "docstatus": 0, "doctype": "Module Onboarding", - "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources", + "documentation_url": "https://docs.xhiveerp.com/docs/user/manual/en/human-resources", "idx": 0, "is_complete": 0, "modified": "2021-05-19 05:32:01.794628", @@ -44,4 +44,4 @@ "subtitle": "Employee, Leaves, and more.", "success_message": "The Human Resource Module is all set up!", "title": "Let's Set Up the Human Resource Module. " -} \ No newline at end of file +} diff --git a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json index 8323ef0..bce7d9a 100644 --- a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json +++ b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json @@ -12,7 +12,7 @@ "event": "Days Before", "idx": 0, "is_standard": 1, - "message": "\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t{{_(\"Exit Interview Scheduled:\")}} {{ doc.name }}\n\t\t\t
\n\t\t
\n\n\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
  • {{_(\"Employee\")}}: {{ doc.employee }} - {{ doc.employee_name }}
  • \n\t\t\t\t\t
  • {{_(\"Date\")}}: {{ doc.date }}
  • \n\t\t\t\t\t
  • {{_(\"Interviewers\")}}:
  • \n\t\t\t\t\t{% for entry in doc.interviewers %}\n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t
    • {{ entry.user }}
    • \n\t\t\t\t\t\t
    \n\t\t\t\t\t{% endfor %}\n\t\t\t\t\t
  • {{ _(\"Interview Document\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n\t\t\t\t
\n\t\t\t
\n\t\t
\n", + "message": "\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t{{_(\"Exit Interview Scheduled:\")}} {{ doc.name }}\n\t\t\t
\n\t\t
\n\n\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
  • {{_(\"Employee\")}}: {{ doc.employee }} - {{ doc.employee_name }}
  • \n\t\t\t\t\t
  • {{_(\"Date\")}}: {{ doc.date }}
  • \n\t\t\t\t\t
  • {{_(\"Interviewers\")}}:
  • \n\t\t\t\t\t{% for entry in doc.interviewers %}\n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t
    • {{ entry.user }}
    • \n\t\t\t\t\t\t
    \n\t\t\t\t\t{% endfor %}\n\t\t\t\t\t
  • {{ _(\"Interview Document\") }}: {{ xhiveframework.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n\t\t\t\t
\n\t\t\t
\n\t\t
\n", "modified": "2021-12-05 22:26:57.096159", "modified_by": "Administrator", "module": "HR", @@ -26,4 +26,4 @@ "send_system_notification": 0, "send_to_all_assignees": 1, "subject": "Exit Interview Scheduled: {{ doc.name }}" -} \ No newline at end of file +} diff --git a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md index 6d6db40..f4e28b9 100644 --- a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md +++ b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md @@ -20,14 +20,14 @@
  • {{_("Employee")}}: {{ doc.employee }} - {{ doc.employee_name }}
  • -
  • {{_("Date")}}: {{ frappe.utils.formatdate(doc.date) }}
  • +
  • {{_("Date")}}: {{ xhiveframework.utils.formatdate(doc.date) }}
  • {{_("Interviewers")}}:
  • {% for entry in doc.interviewers %}
    • {{ entry.user }}
    {% endfor %} -
  • {{ _("Interview Document") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • +
  • {{ _("Interview Document") }}: {{ xhiveframework.utils.get_link_to_form(doc.doctype, doc.name) }}
diff --git a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py index 5f697c9..d23894e 100644 --- a/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py +++ b/hrms/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py @@ -1,4 +1,4 @@ -# import frappe +# import xhiveframework def get_context(context): diff --git a/hrms/hr/notification/training_feedback/training_feedback.html b/hrms/hr/notification/training_feedback/training_feedback.html index b49662a..b606b47 100644 --- a/hrms/hr/notification/training_feedback/training_feedback.html +++ b/hrms/hr/notification/training_feedback/training_feedback.html @@ -1,6 +1,6 @@

{{ _("Hello") }},

-

You attended training {{ frappe.utils.get_link_to_form( +

You attended training {{ xhiveframework.utils.get_link_to_form( "Training Event", doc.training_event) }}

{{ _("Please share your feedback to the training by clicking on 'Training Feedback' and then 'New'") }}

diff --git a/hrms/hr/notification/training_scheduled/training_scheduled.html b/hrms/hr/notification/training_scheduled/training_scheduled.html index 50f6d07..9b84e3d 100644 --- a/hrms/hr/notification/training_scheduled/training_scheduled.html +++ b/hrms/hr/notification/training_scheduled/training_scheduled.html @@ -21,8 +21,8 @@ {{ doc.introduction }}
  • {{_("Event Location")}}: {{ doc.location }}
  • - {% set start = frappe.utils.get_datetime(doc.start_time) %} - {% set end = frappe.utils.get_datetime(doc.end_time) %} + {% set start = xhiveframework.utils.get_datetime(doc.start_time) %} + {% set end = xhiveframework.utils.get_datetime(doc.end_time) %} {% if start.date() == end.date() %}
  • {{_("Date")}}: {{ start.strftime("%A, %d %b %Y") }}
  • @@ -34,7 +34,7 @@
  • {{_("End Time")}}: {{ end.strftime("%A, %d %b %Y at %I:%M %p") }}
  • {% endif %} -
  • {{ _('Event Link') }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • +
  • {{ _('Event Link') }}: {{ xhiveframework.utils.get_link_to_form(doc.doctype, doc.name) }}
diff --git a/hrms/hr/notification/training_scheduled/training_scheduled.json b/hrms/hr/notification/training_scheduled/training_scheduled.json index f365003..8e288ce 100644 --- a/hrms/hr/notification/training_scheduled/training_scheduled.json +++ b/hrms/hr/notification/training_scheduled/training_scheduled.json @@ -11,7 +11,7 @@ "event": "Submit", "idx": 0, "is_standard": 1, - "message": "\n \n \n \n \n \n \n \n
\n
\n {{_(\"Training Event:\")}} {{ doc.event_name }}\n
\n
\n\n\n \n \n \n \n \n \n \n
\n
\n {{ doc.introduction }}\n
    \n
  • {{_(\"Event Location\")}}: {{ doc.location }}
  • \n {% set start = frappe.utils.get_datetime(doc.start_time) %}\n {% set end = frappe.utils.get_datetime(doc.end_time) %}\n {% if start.date() == end.date() %}\n
  • {{_(\"Date\")}}: {{ start.strftime(\"%A, %d %b %Y\") }}
  • \n
  • \n {{_(\"Timing\")}}: {{ start.strftime(\"%I:%M %p\") + ' to ' + end.strftime(\"%I:%M %p\") }}\n
  • \n {% else %}\n
  • \n {{_(\"Start Time\")}}: {{ start.strftime(\"%A, %d %b %Y at %I:%M %p\") }}\n
  • \n
  • {{_(\"End Time\")}}: {{ end.strftime(\"%A, %d %b %Y at %I:%M %p\") }}
  • \n {% endif %}\n
  • {{ _(\"Event Link\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n {% if doc.is_mandatory %}\n
  • {{ _(\"Note: This Training Event is mandatory\") }}
  • \n {% endif %}\n
\n
\n
", + "message": "\n \n \n \n \n \n \n \n
\n
\n {{_(\"Training Event:\")}} {{ doc.event_name }}\n
\n
\n\n\n \n \n \n \n \n \n \n
\n
\n {{ doc.introduction }}\n
    \n
  • {{_(\"Event Location\")}}: {{ doc.location }}
  • \n {% set start = xhiveframework.utils.get_datetime(doc.start_time) %}\n {% set end = xhiveframework.utils.get_datetime(doc.end_time) %}\n {% if start.date() == end.date() %}\n
  • {{_(\"Date\")}}: {{ start.strftime(\"%A, %d %b %Y\") }}
  • \n
  • \n {{_(\"Timing\")}}: {{ start.strftime(\"%I:%M %p\") + ' to ' + end.strftime(\"%I:%M %p\") }}\n
  • \n {% else %}\n
  • \n {{_(\"Start Time\")}}: {{ start.strftime(\"%A, %d %b %Y at %I:%M %p\") }}\n
  • \n
  • {{_(\"End Time\")}}: {{ end.strftime(\"%A, %d %b %Y at %I:%M %p\") }}
  • \n {% endif %}\n
  • {{ _(\"Event Link\") }}: {{ xhiveframework.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n {% if doc.is_mandatory %}\n
  • {{ _(\"Note: This Training Event is mandatory\") }}
  • \n {% endif %}\n
\n
\n
", "modified": "2021-06-16 14:08:12.933367", "modified_by": "Administrator", "module": "HR", @@ -25,4 +25,4 @@ "send_system_notification": 0, "send_to_all_assignees": 0, "subject": "Training Scheduled: {{ doc.name }}" -} \ No newline at end of file +} diff --git a/hrms/hr/notification/training_scheduled/training_scheduled.md b/hrms/hr/notification/training_scheduled/training_scheduled.md index b9ba846..9cdad70 100644 --- a/hrms/hr/notification/training_scheduled/training_scheduled.md +++ b/hrms/hr/notification/training_scheduled/training_scheduled.md @@ -21,8 +21,8 @@ {{ doc.introduction }}
  • {{_("Event Location")}}: {{ doc.location }}
  • - {% set start = frappe.utils.get_datetime(doc.start_time) %} - {% set end = frappe.utils.get_datetime(doc.end_time) %} + {% set start = xhiveframework.utils.get_datetime(doc.start_time) %} + {% set end = xhiveframework.utils.get_datetime(doc.end_time) %} {% if start.date() == end.date() %}
  • {{_("Date")}}: {{ start.strftime("%A, %d %b %Y") }}
  • @@ -34,7 +34,7 @@
  • {{_("End Time")}}: {{ end.strftime("%A, %d %b %Y at %I:%M %p") }}
  • {% endif %} -
  • {{ _("Event Link") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • +
  • {{ _("Event Link") }}: {{ xhiveframework.utils.get_link_to_form(doc.doctype, doc.name) }}
  • {% if doc.is_mandatory %}
  • {{ _("Note: This Training Event is mandatory") }}
  • {% endif %} diff --git a/hrms/hr/number_card/early_exit_(this_month)/early_exit_(this_month).json b/hrms/hr/number_card/early_exit_(this_month)/early_exit_(this_month).json index 4087052..7541305 100644 --- a/hrms/hr/number_card/early_exit_(this_month)/early_exit_(this_month).json +++ b/hrms/hr/number_card/early_exit_(this_month)/early_exit_(this_month).json @@ -5,7 +5,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Attendance", - "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Attendance\",\"docstatus\",\"=\",\"1\",false],[\"Attendance\",\"early_exit\",\"=\",1,false],[\"Attendance\",\"attendance_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -22,4 +22,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/employee_exits_(this_year)/employee_exits_(this_year).json b/hrms/hr/number_card/employee_exits_(this_year)/employee_exits_(this_year).json index 89a0d9a..53713c9 100644 --- a/hrms/hr/number_card/employee_exits_(this_year)/employee_exits_(this_year).json +++ b/hrms/hr/number_card/employee_exits_(this_year)/employee_exits_(this_year).json @@ -3,7 +3,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"relieving_date\",\"Timespan\",\"this year\",false]]", "function": "Count", "idx": 0, @@ -18,4 +18,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Yearly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/employees_joining_(next_quarter)/employees_joining_(next_quarter).json b/hrms/hr/number_card/employees_joining_(next_quarter)/employees_joining_(next_quarter).json index 1d4c85c..c9d4c75 100644 --- a/hrms/hr/number_card/employees_joining_(next_quarter)/employees_joining_(next_quarter).json +++ b/hrms/hr/number_card/employees_joining_(next_quarter)/employees_joining_(next_quarter).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"date_of_joining\",\"Timespan\",\"next quarter\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 0, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/employees_relieving_(next_quarter)/employees_relieving_(next_quarter).json b/hrms/hr/number_card/employees_relieving_(next_quarter)/employees_relieving_(next_quarter).json index e8a5126..4bd67e1 100644 --- a/hrms/hr/number_card/employees_relieving_(next_quarter)/employees_relieving_(next_quarter).json +++ b/hrms/hr/number_card/employees_relieving_(next_quarter)/employees_relieving_(next_quarter).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"relieving_date\",\"Timespan\",\"this quarter\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 0, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/job_offer_acceptance_rate/job_offer_acceptance_rate.json b/hrms/hr/number_card/job_offer_acceptance_rate/job_offer_acceptance_rate.json index 7ef0d3e..89db32b 100644 --- a/hrms/hr/number_card/job_offer_acceptance_rate/job_offer_acceptance_rate.json +++ b/hrms/hr/number_card/job_offer_acceptance_rate/job_offer_acceptance_rate.json @@ -2,8 +2,8 @@ "creation": "2022-08-21 21:21:00.295719", "docstatus": 0, "doctype": "Number Card", - "filters_config": "[{\n\tfieldname: \"company\",\n\tlabel: __(\"Company\"),\n\tfieldtype: \"Link\",\n\toptions: \"Company\",\n\tdefault: frappe.defaults.get_user_default(\"Company\")\n},\n{\n\tfieldname: \"department\",\n\tlabel: __(\"Department\"),\n\tfieldtype: \"Link\",\n\toptions: \"Department\"\n}]", - "filters_json": "{\"company\":\"Frappe\"}", + "filters_config": "[{\n\tfieldname: \"company\",\n\tlabel: __(\"Company\"),\n\tfieldtype: \"Link\",\n\toptions: \"Company\",\n\tdefault: xhiveframework.defaults.get_user_default(\"Company\")\n},\n{\n\tfieldname: \"department\",\n\tlabel: __(\"Department\"),\n\tfieldtype: \"Link\",\n\toptions: \"Department\"\n}]", + "filters_json": "{\"company\":\"Xhiveframework\"}", "function": "Count", "idx": 0, "is_public": 1, @@ -19,4 +19,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Daily", "type": "Custom" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/job_offers_(this_month)/job_offers_(this_month).json b/hrms/hr/number_card/job_offers_(this_month)/job_offers_(this_month).json index 0d35467..6363790 100644 --- a/hrms/hr/number_card/job_offers_(this_month)/job_offers_(this_month).json +++ b/hrms/hr/number_card/job_offers_(this_month)/job_offers_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Job Offer", - "dynamic_filters_json": "[[\"Job Offer\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Job Offer\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Job Offer\",\"offer_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/job_openings/job_openings.json b/hrms/hr/number_card/job_openings/job_openings.json index 2d11cf1..9589d00 100644 --- a/hrms/hr/number_card/job_openings/job_openings.json +++ b/hrms/hr/number_card/job_openings/job_openings.json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Job Opening", - "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Job Opening\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Job Opening\",\"status\",\"=\",\"Open\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/late_entry_(this_month)/late_entry_(this_month).json b/hrms/hr/number_card/late_entry_(this_month)/late_entry_(this_month).json index beea149..4fa3f05 100644 --- a/hrms/hr/number_card/late_entry_(this_month)/late_entry_(this_month).json +++ b/hrms/hr/number_card/late_entry_(this_month)/late_entry_(this_month).json @@ -5,7 +5,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Attendance", - "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Attendance\",\"docstatus\",\"=\",\"1\",false],[\"Attendance\",\"late_entry\",\"=\",1,false],[\"Attendance\",\"attendance_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -22,4 +22,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/new_hires_(this_year)/new_hires_(this_year).json b/hrms/hr/number_card/new_hires_(this_year)/new_hires_(this_year).json index d1d7a9e..1b46349 100644 --- a/hrms/hr/number_card/new_hires_(this_year)/new_hires_(this_year).json +++ b/hrms/hr/number_card/new_hires_(this_year)/new_hires_(this_year).json @@ -3,7 +3,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"date_of_joining\",\"Timespan\",\"this year\",false]]", "function": "Count", "idx": 0, @@ -18,4 +18,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Yearly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/onboardings_(this_month)/onboardings_(this_month).json b/hrms/hr/number_card/onboardings_(this_month)/onboardings_(this_month).json index 8f6cf1e..0673457 100644 --- a/hrms/hr/number_card/onboardings_(this_month)/onboardings_(this_month).json +++ b/hrms/hr/number_card/onboardings_(this_month)/onboardings_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee Onboarding", - "dynamic_filters_json": "[[\"Employee Onboarding\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Onboarding\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Onboarding\",\"boarding_begins_on\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/promotions_(this_month)/promotions_(this_month).json b/hrms/hr/number_card/promotions_(this_month)/promotions_(this_month).json index 5f6555e..cb2edaa 100644 --- a/hrms/hr/number_card/promotions_(this_month)/promotions_(this_month).json +++ b/hrms/hr/number_card/promotions_(this_month)/promotions_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee Promotion", - "dynamic_filters_json": "[[\"Employee Promotion\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Promotion\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Promotion\",\"promotion_date\",\"Timespan\",\"last month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/separations_(this_month)/separations_(this_month).json b/hrms/hr/number_card/separations_(this_month)/separations_(this_month).json index 3d18c25..19f9e01 100644 --- a/hrms/hr/number_card/separations_(this_month)/separations_(this_month).json +++ b/hrms/hr/number_card/separations_(this_month)/separations_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee Separation", - "dynamic_filters_json": "[[\"Employee Separation\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Separation\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Separation\",\"boarding_begins_on\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/time_to_fill/time_to_fill.json b/hrms/hr/number_card/time_to_fill/time_to_fill.json index 8ec4b73..eb1c23a 100644 --- a/hrms/hr/number_card/time_to_fill/time_to_fill.json +++ b/hrms/hr/number_card/time_to_fill/time_to_fill.json @@ -3,8 +3,8 @@ "docstatus": 0, "doctype": "Number Card", "dynamic_filters_json": "", - "filters_config": "[{\n\tfieldname: \"company\",\n\tlabel: __(\"Company\"),\n\tfieldtype: \"Link\",\n\toptions: \"Company\",\n\tdefault: frappe.defaults.get_user_default(\"Company\")\n},\n{\n\tfieldname: \"department\",\n\tlabel: __(\"Department\"),\n\tfieldtype: \"Link\",\n\toptions: \"Department\"\n},\n{\n fieldname: \"designation\",\n\tlabel: __(\"Designation\"),\n\tfieldtype: \"Link\",\n\toptions: \"Designation\"\n}]", - "filters_json": "{\"company\":\"Frappe\"}", + "filters_config": "[{\n\tfieldname: \"company\",\n\tlabel: __(\"Company\"),\n\tfieldtype: \"Link\",\n\toptions: \"Company\",\n\tdefault: xhiveframework.defaults.get_user_default(\"Company\")\n},\n{\n\tfieldname: \"department\",\n\tlabel: __(\"Department\"),\n\tfieldtype: \"Link\",\n\toptions: \"Department\"\n},\n{\n fieldname: \"designation\",\n\tlabel: __(\"Designation\"),\n\tfieldtype: \"Link\",\n\toptions: \"Designation\"\n}]", + "filters_json": "{\"company\":\"Xhiveframework\"}", "function": "Count", "idx": 0, "is_public": 1, @@ -20,4 +20,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Daily", "type": "Custom" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/total_absent_(this_month)/total_absent_(this_month).json b/hrms/hr/number_card/total_absent_(this_month)/total_absent_(this_month).json index fc4dcab..6713621 100644 --- a/hrms/hr/number_card/total_absent_(this_month)/total_absent_(this_month).json +++ b/hrms/hr/number_card/total_absent_(this_month)/total_absent_(this_month).json @@ -5,7 +5,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Attendance", - "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Attendance\",\"docstatus\",\"=\",\"1\",false],[\"Attendance\",\"status\",\"=\",\"Absent\",false],[\"Attendance\",\"attendance_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -22,4 +22,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/total_employees/total_employees.json b/hrms/hr/number_card/total_employees/total_employees.json index da620dc..d1b1930 100644 --- a/hrms/hr/number_card/total_employees/total_employees.json +++ b/hrms/hr/number_card/total_employees/total_employees.json @@ -3,7 +3,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", "function": "Count", "idx": 0, @@ -18,4 +18,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/total_present_(this_month)/total_present_(this_month).json b/hrms/hr/number_card/total_present_(this_month)/total_present_(this_month).json index 482a3a0..4578738 100644 --- a/hrms/hr/number_card/total_present_(this_month)/total_present_(this_month).json +++ b/hrms/hr/number_card/total_present_(this_month)/total_present_(this_month).json @@ -5,7 +5,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Attendance", - "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Attendance\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Attendance\",\"docstatus\",\"=\",\"1\",false],[\"Attendance\",\"status\",\"=\",\"Present\",false],[\"Attendance\",\"attendance_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -22,4 +22,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/trainings_(this_month)/trainings_(this_month).json b/hrms/hr/number_card/trainings_(this_month)/trainings_(this_month).json index b9fb6d3..84064e4 100644 --- a/hrms/hr/number_card/trainings_(this_month)/trainings_(this_month).json +++ b/hrms/hr/number_card/trainings_(this_month)/trainings_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Training Event", - "dynamic_filters_json": "[[\"Training Event\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Training Event\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Training Event\",\"start_time\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/number_card/transfers_(this_month)/transfers_(this_month).json b/hrms/hr/number_card/transfers_(this_month)/transfers_(this_month).json index 9ea0069..972f658 100644 --- a/hrms/hr/number_card/transfers_(this_month)/transfers_(this_month).json +++ b/hrms/hr/number_card/transfers_(this_month)/transfers_(this_month).json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Number Card", "document_type": "Employee Transfer", - "dynamic_filters_json": "[[\"Employee Transfer\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "dynamic_filters_json": "[[\"Employee Transfer\",\"company\",\"=\",\"xhiveframework.defaults.get_user_default(\\\"Company\\\")\"]]", "filters_json": "[[\"Employee Transfer\",\"transfer_date\",\"Timespan\",\"this month\",false]]", "function": "Count", "idx": 0, @@ -21,4 +21,4 @@ "show_percentage_stats": 1, "stats_time_interval": "Monthly", "type": "Document Type" -} \ No newline at end of file +} diff --git a/hrms/hr/onboarding_step/create_holiday_list/create_holiday_list.json b/hrms/hr/onboarding_step/create_holiday_list/create_holiday_list.json index a08e85f..35834c3 100644 --- a/hrms/hr/onboarding_step/create_holiday_list/create_holiday_list.json +++ b/hrms/hr/onboarding_step/create_holiday_list/create_holiday_list.json @@ -2,7 +2,7 @@ "action": "Show Form Tour", "action_label": "Show Tour", "creation": "2020-05-28 11:47:34.700174", - "description": "

    Holiday List.

    \n\nHoliday List is a list which contains the dates of holidays. Most organizations have a standard Holiday List for their employees. However, some of them may have different holiday lists based on different Locations or Departments. In ERPNext, you can configure multiple Holiday Lists.", + "description": "

    Holiday List.

    \n\nHoliday List is a list which contains the dates of holidays. Most organizations have a standard Holiday List for their employees. However, some of them may have different holiday lists based on different Locations or Departments. In XhiveERP, you can configure multiple Holiday Lists.", "docstatus": 0, "doctype": "Onboarding Step", "idx": 0, @@ -18,4 +18,4 @@ "show_full_form": 1, "title": "Create Holiday List", "validate_action": 0 -} \ No newline at end of file +} diff --git a/hrms/hr/onboarding_step/data_import/data_import.json b/hrms/hr/onboarding_step/data_import/data_import.json index ac343c6..126d00d 100644 --- a/hrms/hr/onboarding_step/data_import/data_import.json +++ b/hrms/hr/onboarding_step/data_import/data_import.json @@ -2,7 +2,7 @@ "action": "Watch Video", "action_label": "", "creation": "2021-05-19 05:29:16.809610", - "description": "

    Data Import

    \n\nData import is the tool to migrate your existing data like Employee, Customer, Supplier, and a lot more to our ERPNext system.\nGo through the video for a detailed explanation of this tool.", + "description": "

    Data Import

    \n\nData import is the tool to migrate your existing data like Employee, Customer, Supplier, and a lot more to our XhiveERP system.\nGo through the video for a detailed explanation of this tool.", "docstatus": 0, "doctype": "Onboarding Step", "idx": 0, @@ -18,4 +18,4 @@ "title": "Data Import", "validate_action": 1, "video_url": "https://www.youtube.com/watch?v=DQyqeurPI64" -} \ No newline at end of file +} diff --git a/hrms/hr/page/organizational_chart/organizational_chart.js b/hrms/hr/page/organizational_chart/organizational_chart.js index 239f3c2..3f13dd0 100644 --- a/hrms/hr/page/organizational_chart/organizational_chart.js +++ b/hrms/hr/page/organizational_chart/organizational_chart.js @@ -1,22 +1,22 @@ -frappe.pages['organizational-chart'].on_page_load = function(wrapper) { - frappe.ui.make_app_page({ +xhiveframework.pages['organizational-chart'].on_page_load = function(wrapper) { + xhiveframework.ui.make_app_page({ parent: wrapper, title: __('Organizational Chart'), single_column: true }); $(wrapper).bind('show', () => { - frappe.require('hierarchy-chart.bundle.js', () => { + xhiveframework.require('hierarchy-chart.bundle.js', () => { let organizational_chart = undefined; let method = 'hrms.hr.page.organizational_chart.organizational_chart.get_children'; - if (frappe.is_mobile()) { - organizational_chart = new erpnext.HierarchyChartMobile('Employee', wrapper, method); + if (xhiveframework.is_mobile()) { + organizational_chart = new xhiveerp.HierarchyChartMobile('Employee', wrapper, method); } else { - organizational_chart = new erpnext.HierarchyChart('Employee', wrapper, method); + organizational_chart = new xhiveerp.HierarchyChart('Employee', wrapper, method); } - frappe.breadcrumbs.add('HR'); + xhiveframework.breadcrumbs.add('HR'); organizational_chart.show(); }); }); diff --git a/hrms/hr/page/organizational_chart/organizational_chart.py b/hrms/hr/page/organizational_chart/organizational_chart.py index 3674912..07e5299 100644 --- a/hrms/hr/page/organizational_chart/organizational_chart.py +++ b/hrms/hr/page/organizational_chart/organizational_chart.py @@ -1,7 +1,7 @@ -import frappe +import xhiveframework -@frappe.whitelist() +@xhiveframework.whitelist() def get_children(parent=None, company=None, exclude_node=None): filters = [["status", "!=", "Left"]] if company and company != "All Companies": @@ -15,7 +15,7 @@ def get_children(parent=None, company=None, exclude_node=None): if exclude_node: filters.append(["name", "!=", exclude_node]) - employees = frappe.get_list( + employees = xhiveframework.get_list( "Employee", fields=["employee_name as name", "name as id", "reports_to", "image", "designation as title"], filters=filters, @@ -23,7 +23,7 @@ def get_children(parent=None, company=None, exclude_node=None): ) for employee in employees: - is_expandable = frappe.db.count("Employee", filters={"reports_to": employee.get("id")}) + is_expandable = xhiveframework.db.count("Employee", filters={"reports_to": employee.get("id")}) employee.connections = get_connections(employee.id) employee.expandable = 1 if is_expandable else 0 @@ -33,12 +33,12 @@ def get_children(parent=None, company=None, exclude_node=None): def get_connections(employee): num_connections = 0 - nodes_to_expand = frappe.get_list("Employee", filters=[["reports_to", "=", employee]]) + nodes_to_expand = xhiveframework.get_list("Employee", filters=[["reports_to", "=", employee]]) num_connections += len(nodes_to_expand) while nodes_to_expand: parent = nodes_to_expand.pop(0) - descendants = frappe.get_list("Employee", filters=[["reports_to", "=", parent.name]]) + descendants = xhiveframework.get_list("Employee", filters=[["reports_to", "=", parent.name]]) num_connections += len(descendants) nodes_to_expand.extend(descendants) diff --git a/hrms/hr/page/team_updates/team_update_row.html b/hrms/hr/page/team_updates/team_update_row.html index 4f36754..d2c82b1 100644 --- a/hrms/hr/page/team_updates/team_update_row.html +++ b/hrms/hr/page/team_updates/team_update_row.html @@ -2,7 +2,7 @@
    {%= date_sep || "" %}
    + title="{%= by %} / {%= xhiveframework.datetime.str_to_user(creation) %}">
    {{ avatar }} diff --git a/hrms/hr/page/team_updates/team_updates.js b/hrms/hr/page/team_updates/team_updates.js index 3ea7946..40d494e 100644 --- a/hrms/hr/page/team_updates/team_updates.js +++ b/hrms/hr/page/team_updates/team_updates.js @@ -1,24 +1,24 @@ -frappe.pages['team-updates'].on_page_load = function(wrapper) { - var page = frappe.ui.make_app_page({ +xhiveframework.pages['team-updates'].on_page_load = function(wrapper) { + var page = xhiveframework.ui.make_app_page({ parent: wrapper, title: __('Team Updates'), single_column: true }); - frappe.team_updates.make(page); - frappe.team_updates.run(); + xhiveframework.team_updates.make(page); + xhiveframework.team_updates.run(); - if(frappe.model.can_read('Daily Work Summary Group')) { + if(xhiveframework.model.can_read('Daily Work Summary Group')) { page.add_menu_item(__('Daily Work Summary Group'), function() { - frappe.set_route('Form', 'Daily Work Summary Group'); + xhiveframework.set_route('Form', 'Daily Work Summary Group'); }); } } -frappe.team_updates = { +xhiveframework.team_updates = { start: 0, make: function(page) { - var me = frappe.team_updates; + var me = xhiveframework.team_updates; me.page = page; me.body = $('
    ').appendTo(me.page.main); me.more = $('