Added API calls for the Job Dials and a column for the Invoice Status in the datatable.

This commit is contained in:
rocketdebris 2026-01-24 17:07:02 -05:00
parent 37bd0f60a3
commit 00f6d69482

View file

@ -7,6 +7,64 @@ from frappe.utils import getdate
# JOB MANAGEMENT API METHODS
# ===============================================================================
@frappe.whitelist()
def get_jobs_in_queue_count(company):
try:
filters = {
'company': company,
'is_scheduled': True,
}
count = frappe.db.count("Project", filters=filters)
return build_success_response([count])
except Exception as e:
return build_error_response(str(e), 500)
@frappe.whitelist()
def get_jobs_in_progress_count(company):
try:
today = getdate()
filters = {
'company': company,
'invoice_status': 'Not Ready',
'expected_start_date': ['<=', today],
'expected_end_date': ['>=', today],
}
count = frappe.db.count("Project", filters=filters)
return build_success_response([count])
except Exception as e:
return build_error_response(str(e), 500)
@frappe.whitelist()
def get_jobs_late_count(company):
try:
today = getdate()
filters = {
'company': company,
'invoice_status': 'Not Ready',
'expected_end_date': ['<', today]
}
count = frappe.db.count("Project", filters=filters)
return build_success_response([count])
except Exception as e:
return build_error_response(str(e), 500)
@frappe.whitelist()
def get_jobs_to_invoice_count(company):
try:
filters = {
'company': company,
'invoice_status': 'Ready to Invoice',
}
count = frappe.db.count("Project", filters=filters)
return build_success_response([count])
except Exception as e:
return build_error_response(str(e), 500)
@frappe.whitelist()
def get_job_templates(company=None):
"""Get list of job (project) templates."""
@ -19,6 +77,7 @@ def get_job_templates(company=None):
except Exception as e:
return build_error_response(str(e), 500)
@frappe.whitelist()
def create_job_from_sales_order(sales_order_name):
"""Create a Job (Project) from a given Sales Order"""
@ -152,9 +211,10 @@ def get_jobs_table_data(filters={}, sortings=[], page=1, page_size=10):
tableRow = {}
tableRow["id"] = project["name"]
tableRow["name"] = project["name"]
tableRow["installation_address"] = project.get("custom_installation_address", "")
tableRow["job_address"] = project["job_address"]
tableRow["customer"] = project.get("customer", "")
tableRow["status"] = project.get("status", "")
tableRow["invoice_status"] = project.get("invoice_status")
tableRow["percent_complete"] = project.get("percent_complete", 0)
tableRows.append(tableRow)
@ -203,7 +263,7 @@ def get_projects_for_calendar(start_date, end_date, company=None, project_templa
filters["project_template"] = ["in", project_templates]
unscheduled_filters = filters.copy()
unscheduled_filters["is_scheduled"] = 0
# add to filter for if expected_start_date is between start_date and end_date OR expected_end_date is between start_date and end_date
filters["expected_start_date"] = ["<=", getdate(end_date)]
filters["expected_end_date"] = [">=", getdate(start_date)]
@ -239,4 +299,4 @@ def update_job_scheduled_dates(job_name: str, new_start_date: str = None, new_en
project.save()
return build_success_response(project.as_dict())
except Exception as e:
return build_error_response(str(e), 500)
return build_error_response(str(e), 500)