diff --git a/custom_ui/api/db/jobs.py b/custom_ui/api/db/jobs.py index 082733e..16bd48a 100644 --- a/custom_ui/api/db/jobs.py +++ b/custom_ui/api/db/jobs.py @@ -25,7 +25,7 @@ def create_job_from_sales_order(sales_order_name): try: sales_order = frappe.get_doc("Sales Order", sales_order_name) project_template = frappe.get_doc("Project Template", "SNW Install") - new_job = frappe.get_doc({ + new_project = frappe.get_doc({ "doctype": "Project", "custom_address": sales_order.custom_job_address, # "custom_installation_address": sales_order.custom_installation_address, @@ -35,13 +35,22 @@ def create_job_from_sales_order(sales_order_name): "sales_order": sales_order, "custom_company": sales_order.company }) - new_job.insert() + new_project.insert() + for sales_order_item in sales_order.items: + new_task = frappe.get_doc({ + "doctype": "Task", + "project": new_project.name, + "company": sales_order.company, + "custom_property": sales_order.custom_job_address, + "subject": sales_order_item.description, + }) + new_task.insert() # Iterate through new tasks (if any) and set customer, address # job_tasks = frappe.get_all("Task", filters={"Project": new_job.name}) # for task in job_tasks: # task.custom_property = new_job.job_address # task.save() - return build_success_response(new_job.as_dict()) + return build_success_response(new_project.as_dict()) except Exception as e: return build_error_response(str(e), 500) 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/common/TodoChart.vue b/frontend/src/components/common/TodoChart.vue index 8f07255..b55b655 100644 --- a/frontend/src/components/common/TodoChart.vue +++ b/frontend/src/components/common/TodoChart.vue @@ -21,7 +21,7 @@ diff --git a/frontend/src/components/pages/Home.vue b/frontend/src/components/pages/Home.vue index d1ecda7..48afc0f 100644 --- a/frontend/src/components/pages/Home.vue +++ b/frontend/src/components/pages/Home.vue @@ -15,8 +15,7 @@