Compare commits

...

4 commits

4 changed files with 99 additions and 63 deletions

View file

@ -26,7 +26,7 @@ def get_estimate_table_data_v2(filters={}, sortings=[], page=1, page_size=10):
start=(page) * page_size, start=(page) * page_size,
order_by=sortings order_by=sortings
) )
estimates = [frappe.get_doc("Quotation", name).as_dict() for name in estimate_names] estimates = [frappe.get_doc("Quotation", name).as_dict() for name in estimate_names]
tableRows = [] tableRows = []
for estimate in estimates: for estimate in estimates:
@ -41,7 +41,7 @@ def get_estimate_table_data_v2(filters={}, sortings=[], page=1, page_size=10):
tableRows.append(tableRow) tableRows.append(tableRow)
table_data_dict = build_datatable_dict(data=tableRows, count=count, page=page, page_size=page_size) table_data_dict = build_datatable_dict(data=tableRows, count=count, page=page, page_size=page_size)
return build_success_response(table_data_dict) return build_success_response(table_data_dict)
@frappe.whitelist() @frappe.whitelist()
def get_estimate_table_data(filters={}, sortings=[], page=1, page_size=10): def get_estimate_table_data(filters={}, sortings=[], page=1, page_size=10):
@ -283,14 +283,14 @@ def send_estimate_email(estimate_name):
attachments=[{"fname": f"{quotation.name}.pdf", "fcontent": pdf}] attachments=[{"fname": f"{quotation.name}.pdf", "fcontent": pdf}]
) )
print(f"DEBUG: Email sent to {email} successfully.") print(f"DEBUG: Email sent to {email} successfully.")
# Update quotation status # Update quotation status
quotation.custom_current_status = "Submitted" quotation.custom_current_status = "Submitted"
quotation.custom_sent = 1 quotation.custom_sent = 1
quotation.save() quotation.save()
quotation.submit() quotation.submit()
frappe.db.commit() frappe.db.commit()
updated_quotation = frappe.get_doc("Quotation", estimate_name) updated_quotation = frappe.get_doc("Quotation", estimate_name)
return build_success_response(updated_quotation.as_dict()) return build_success_response(updated_quotation.as_dict())
except Exception as e: except Exception as e:
@ -510,7 +510,7 @@ def upsert_estimate(data):
"company": data.get("company"), "company": data.get("company"),
"actual_customer_name": client_doc.name, "actual_customer_name": client_doc.name,
"customer_type": address_doc.customer_type, "customer_type": address_doc.customer_type,
"customer_address": client_doc.custom_billing_address, "customer_address": client_doc.primary_address,
"contact_person": data.get("contact_name"), "contact_person": data.get("contact_name"),
"letter_head": data.get("company"), "letter_head": data.get("company"),
"custom_project_template": data.get("project_template", None), "custom_project_template": data.get("project_template", None),

View file

@ -382,6 +382,12 @@ custom_fields = {
) )
], ],
"Quotation": [ "Quotation": [
dict(
fieldname="custom_installation_address",
label="Installation Address",
fieldtype="Link",
options="Address"
),
dict( dict(
fieldname="requires_half_payment", fieldname="requires_half_payment",
label="Requires Half Payment", label="Requires Half Payment",
@ -389,20 +395,12 @@ custom_fields = {
default=0, default=0,
insert_after="custom_installation_address" insert_after="custom_installation_address"
), ),
dict(
fieldname="custom_quotation_template",
label="Quotation Template",
fieldtype="Link",
options="Quotation Template",
insert_after="company",
description="The template used for generating this quotation."
),
dict( dict(
fieldname="custom_project_template", fieldname="custom_project_template",
label="Project Template", label="Project Template",
fieldtype="Link", fieldtype="Link",
options="Project Template", options="Project Template",
insert_after="custom_quotation_template", insert_after="requires_half_payment",
description="The project template to use when creating a project from this quotation.", description="The project template to use when creating a project from this quotation.",
allow_on_submit=1 allow_on_submit=1
), ),
@ -422,13 +420,6 @@ custom_fields = {
options="On-Site Meeting", options="On-Site Meeting",
insert_after="custom_job_address" insert_after="custom_job_address"
), ),
dict(
fieldname="from_onsite_meeting",
label="From On-Site Meeting",
fieldtype="Link",
options="On-Site Meeting",
insert_after="custom_job_address"
),
dict( dict(
fieldname="actual_customer_name", fieldname="actual_customer_name",
label="Customer", label="Customer",
@ -444,9 +435,39 @@ custom_fields = {
options="Customer\nLead", options="Customer\nLead",
insert_after="customer_name", insert_after="customer_name",
allow_on_submit=1 allow_on_submit=1
) ),
dict(
fieldname="custom_current_status",
label="Status",
fieldtype="Select",
options="Draft\nSubmitted\nEstimate Accepted\nLost\nWon",
insert_after="Date",
allow_on_submit=1
),
dict(
fieldname="custom_sent",
label="Sent",
fieldtype="Check",
insert_after="custom_current_status",
default=0,
allow_on_submit=1
),
dict(
fieldname="custom_followup_needed",
label="Follow-up Needed",
fieldtype="Check",
insert_after="custom_sent",
default=0,
allow_on_submit=1
),
], ],
"Sales Order": [ "Sales Order": [
dict(
fieldname="custom_installation_address",
label="Installation Address",
fieldtype="Link",
options="Address"
),
dict( dict(
fieldname="requires_half_payment", fieldname="requires_half_payment",
label="Requires Half Payment", label="Requires Half Payment",
@ -471,7 +492,14 @@ custom_fields = {
insert_after="custom_installation_address", insert_after="custom_installation_address",
description="The address where the job will be performed.", description="The address where the job will be performed.",
allow_on_submit=1 allow_on_submit=1
) ),
dict(
fieldname="custom_department_type",
label="Department Type",
fieldtype="Select",
options="\nFencing Install\nWarranty\nSprinkler Service\nLandscape Installation\nLawn Maintenance",
insert_after="delivery_date",
),
], ],
"Project": [ "Project": [
dict( dict(
@ -581,5 +609,13 @@ custom_fields = {
options="Project Template", options="Project Template",
insert_after="project" insert_after="project"
) )
],
"Territory": [
dict(
fieldname="custom_map",
label="Map",
fieldtype="Attach Image",
insert_after="is_group"
)
] ]
} }

View file

@ -69,7 +69,7 @@
"docstatus": 0, "docstatus": 0,
"doctype": "Client Script", "doctype": "Client Script",
"dt": "Quotation", "dt": "Quotation",
"enabled": 1, "enabled": 0,
"modified": "2025-01-08 05:04:26.743210", "modified": "2025-01-08 05:04:26.743210",
"module": null, "module": null,
"name": "Quotation - Set Same Valid Until Date", "name": "Quotation - Set Same Valid Until Date",

View file

@ -12,6 +12,45 @@
"territory_manager": null, "territory_manager": null,
"territory_name": "Rest Of The World" "territory_name": "Rest Of The World"
}, },
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-04-08 03:16:41.446439",
"name": "United States",
"old_parent": "All Territories",
"parent_territory": "All Territories",
"targets": [],
"territory_manager": null,
"territory_name": "United States"
},
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-10-24 16:28:49.004134",
"name": "Idaho",
"old_parent": "United States",
"parent_territory": "United States",
"targets": [],
"territory_manager": null,
"territory_name": "Idaho"
},
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-10-24 16:29:21.492438",
"name": "Washington",
"old_parent": "United States",
"parent_territory": "United States",
"targets": [],
"territory_manager": null,
"territory_name": "Washington"
},
{ {
"custom_map": null, "custom_map": null,
"docstatus": 0, "docstatus": 0,
@ -1246,44 +1285,5 @@
"targets": [], "targets": [],
"territory_manager": null, "territory_manager": null,
"territory_name": "Hayden Canyon" "territory_name": "Hayden Canyon"
},
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-10-24 16:29:21.492438",
"name": "Washington",
"old_parent": "United States",
"parent_territory": "United States",
"targets": [],
"territory_manager": null,
"territory_name": "Washington"
},
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-04-08 03:16:41.446439",
"name": "United States",
"old_parent": "All Territories",
"parent_territory": "All Territories",
"targets": [],
"territory_manager": null,
"territory_name": "United States"
},
{
"custom_map": null,
"docstatus": 0,
"doctype": "Territory",
"is_group": 1,
"modified": "2024-10-24 16:28:49.004134",
"name": "Idaho",
"old_parent": "United States",
"parent_territory": "United States",
"targets": [],
"territory_manager": null,
"territory_name": "Idaho"
} }
] ]