From 5b2e3621008440430be91d2e3fb935e7280dca2c Mon Sep 17 00:00:00 2001 From: rocketdebris Date: Thu, 22 Jan 2026 14:03:43 -0500 Subject: [PATCH] Added Company filter for chart data on Home page. --- custom_ui/api/db/tasks.py | 43 +++++++++++++------------- frontend/src/api.js | 15 +++++++-- frontend/src/components/pages/Home.vue | 29 +++++++++++------ 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/custom_ui/api/db/tasks.py b/custom_ui/api/db/tasks.py index e4f9ba0..dd6835f 100644 --- a/custom_ui/api/db/tasks.py +++ b/custom_ui/api/db/tasks.py @@ -43,33 +43,32 @@ def get_task_status_options(): @frappe.whitelist() -def get_tasks_due(subject_filter): +def get_tasks_due(subject_filter, current_company): """Return the number of items due today of the type of subject_filter""" try: - filters = { - 'subject': ['like', f'%{subject_filter}%'], - 'status': ['not in', ["Template", "Completed", "Cancelled"]] - } - count = frappe.db.count("Task", filters=filters) - return build_success_response(count) - except frappe.ValidationError as ve: - return build_error_response(str(ve), 400) - except Exception as e: - return build_error_response(str(e), 500) - -@frappe.whitelist() -def get_tasks_completed(subject_filter): - """Return the number of items due today marked complete of the type of subject_filter""" - try: - filters = { + due_filters = { 'subject': ['like', f'%{subject_filter}%'], - 'status': ['not in', ["Template", "Cancelled"]] + 'status': ['not in', ["Template", "Completed", "Cancelled"]], + 'company': current_company, + # Add due date filter here } - print("Completed Task filter", filters) - count = frappe.db.count("Task", filters=filters) - print("Matching Records:", count) - return build_success_response(count) + completed_filters = { + 'subject': ['like', f'%{subject_filter}%'], + 'status': ['not in', ["Template", "Cancelled"]], + 'company': current_company, + # Add due date filter here + } + overdue_filters = { + 'subject': ['like', f'%{subject_filter}%'], + 'status': ['not in', ["Template", "Completed", "Cancelled"]], + 'company': current_company, + # Add overdue date filtering here + } + due_count = frappe.db.count("Task", filters=due_filters) + completed_count = frappe.db.count("Task", filters=completed_filters) + overdue_count = frappe.db.count("Task", filters=overdue_filters) + return build_success_response([due_count, completed_count, overdue_count]) except frappe.ValidationError as ve: return build_error_response(str(ve), 400) except Exception as e: diff --git a/frontend/src/api.js b/frontend/src/api.js index 86e37f1..9c71024 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -14,6 +14,8 @@ const FRAPPE_LOCK_ESTIMATE_METHOD = "custom_ui.api.db.estimates.lock_estimate"; const FRAPPE_ESTIMATE_UPDATE_RESPONSE_METHOD = "custom_ui.api.db.estimates.manual_response"; const FRAPPE_GET_ESTIMATE_TEMPLATES_METHOD = "custom_ui.api.db.estimates.get_estimate_templates"; const FRAPPE_CREATE_ESTIMATE_TEMPLATE_METHOD = "custom_ui.api.db.estimates.create_estimate_template"; +const FRAPPE_GET_UNAPPROVED_ESTIMATES_COUNT_METHOD = "custom_ui.api.db.estimates.get_unnaproved_estimates_count"; +const FRAPPE_GET_ESTIMATES_HALF_DOWN_COUNT_METHOD = "custom_ui.api.db.estimates.get_estimates_half_down_count"; // Job methods const FRAPPE_GET_JOB_METHOD = "custom_ui.api.db.jobs.get_job"; const FRAPPE_GET_JOBS_METHOD = "custom_ui.api.db.jobs.get_jobs_table_data"; @@ -29,7 +31,6 @@ const FRAPPE_GET_TASKS_METHOD = "custom_ui.api.db.tasks.get_tasks_table_data"; const FRAPPE_GET_TASKS_STATUS_OPTIONS = "custom_ui.api.db.tasks.get_task_status_options"; const FRAPPE_SET_TASK_STATUS_METHOD = "custom_ui.api.db.tasks.set_task_status"; const FRAPPE_GET_TASKS_DUE_METHOD = "custom_ui.api.db.tasks.get_tasks_due"; -const FRAPPE_GET_TASKS_COMPLETED_METHOD = "custom_ui.api.db.tasks.get_tasks_completed"; // Invoice methods const FRAPPE_GET_INVOICES_METHOD = "custom_ui.api.db.invoices.get_invoice_table_data"; const FRAPPE_UPSERT_INVOICE_METHOD = "custom_ui.api.db.invoices.upsert_invoice"; @@ -264,6 +265,14 @@ class Api { return await this.request(FRAPPE_CREATE_ESTIMATE_TEMPLATE_METHOD, { data }); } + static async getUnapprovedEstimatesCount() { + return await this.request(FRAPPE_GET_UNAPPROVED_ESTIMATES_COUNT_METHOD, {}); + } + + static async getEstimatesHalfDownCount() { + return await this.request(FRAPPE_GET_ESTIMATES_HALF_DOWN_COUNT_METHOD, {}); + } + // ============================================================================ // JOB / PROJECT METHODS // ============================================================================ @@ -436,8 +445,8 @@ class Api { return await this.request(FRAPPE_SET_TASK_STATUS_METHOD, { taskName, newStatus }); } - static async getTasksDue(subjectFilter) { - const result = await this.request(FRAPPE_GET_TASKS_DUE_METHOD, {subjectFilter}); + static async getTasksDue(subjectFilter, currentCompany) { + const result = await this.request(FRAPPE_GET_TASKS_DUE_METHOD, {subjectFilter, currentCompany}); return result; } diff --git a/frontend/src/components/pages/Home.vue b/frontend/src/components/pages/Home.vue index d5e0621..48afc0f 100644 --- a/frontend/src/components/pages/Home.vue +++ b/frontend/src/components/pages/Home.vue @@ -312,7 +312,7 @@