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 @@