diff --git a/custom_ui/api/db/estimates.py b/custom_ui/api/db/estimates.py index c1ac907..b961ee5 100644 --- a/custom_ui/api/db/estimates.py +++ b/custom_ui/api/db/estimates.py @@ -260,119 +260,8 @@ def update_response(name, response): html = frappe.render_template(template, {"error": str(e)}) return Response(html, mimetype="text/html") -@frappe.whitelist() -def get_estimate_templates(company): - """Get available estimate templates.""" - filters = {"is_active": 1} - if company: - filters["company"] = company - try: - print("DEBUG: Fetching estimate templates for company:", company) - templates = frappe.get_all("Quotation Template", fields=["*"], filters=filters) - - result = [] - if not templates: - print("DEBUG: No templates found.") - return build_success_response(result) - print(f"DEBUG: Found {len(templates)} templates.") - for template in templates: - print("DEBUG: Processing template:", template) - items = frappe.get_all("Quotation Template Item", - fields=["item_code", "item_name", "description", "quantity", "discount_percentage", "rate"], - filters={"parent": template.name}, - order_by="idx") - - # Map fields to camelCase as requested - mapped_items = [] - for item in items: - mapped_items.append({ - "itemCode": item.item_code, - "itemName": item.item_name, - "description": item.description, - "quantity": item.qty, - "discountPercentage": item.discount_percentage, - "rate": item.rate - }) - - result.append({ - "name": template.name, - "templateName": template.template_name, - "active": template.is_active, - "description": template.description, - "items": mapped_items - }) - - return build_success_response(result) - except Exception as e: - return build_error_response(str(e), 500) -@frappe.whitelist() -def create_estimate_template(data): - """Create a new estimate template.""" - try: - print("DEBUG: Creating estimate template with data:", data) - data = json.loads(data) if isinstance(data, str) else data - - doc_data = { - "doctype": "Quotation Template", - "is_active": 1, - "description": data.get("description"), - "company": data.get("company"), - "items": [], - "template_name": data.get("template_name"), - "source_quotation": data.get("source_quotation", "") - } - - new_template = frappe.get_doc(doc_data) - - for item in data.get("items", []): - new_template.append("items", { - "item_code": item.get("item_code"), - "item_name": item.get("item_name"), - "description": item.get("description"), - "qty": item.get("qty") or item.get("quantity"), - "rate": item.get("standard_rate") or item.get("rate"), - "discount_percentage": item.get("discount_percentage") - }) - - new_template.insert() - return build_success_response(new_template.name) - except Exception as e: - return build_error_response(str(e), 500) - -# @frappe.whitelist() -# def create_template(data): -# """Create a new estimate template.""" -# try: -# data = json.loads(data) if isinstance(data, str) else data -# print("DEBUG: Creating estimate template with data:", data) - -# new_template = frappe.get_doc({ -# "doctype": "Quotation Template", -# "template_name": data.get("templateName"), -# "is_active": data.get("active", 1), -# "description": data.get("description", ""), -# "company": data.get("company", ""), -# "source_quotation": data.get("source_quotation", "") -# }) - -# for item in data.get("items", []): -# item = json.loads(item) if isinstance(item, str) else item -# new_template.append("items", { -# "item_code": item.get("itemCode"), -# "item_name": item.get("itemName"), -# "description": item.get("description"), -# "qty": item.get("quantity"), -# "discount_percentage": item.get("discountPercentage"), -# "rate": item.get("rate") -# }) - -# new_template.insert() -# print("DEBUG: New estimate template created with name:", new_template.name) -# return build_success_response(new_template.as_dict()) -# except Exception as e: -# return build_error_response(str(e), 500) @frappe.whitelist() def upsert_estimate(data): diff --git a/custom_ui/fixtures/doctype.json b/custom_ui/fixtures/doctype.json index c06140a..72f23a9 100644 --- a/custom_ui/fixtures/doctype.json +++ b/custom_ui/fixtures/doctype.json @@ -413,70 +413,6 @@ "trigger": null, "unique": 0, "width": null - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "collapsible_depends_on": null, - "columns": 0, - "default": null, - "depends_on": null, - "description": null, - "documentation_url": null, - "fetch_from": null, - "fetch_if_empty": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "hide_border": 0, - "hide_days": 0, - "hide_seconds": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_preview": 0, - "in_standard_filter": 0, - "is_virtual": 0, - "label": "Company", - "length": 0, - "link_filters": null, - "make_attachment_public": 0, - "mandatory_depends_on": null, - "max_height": null, - "no_copy": 0, - "non_negative": 0, - "oldfieldname": null, - "oldfieldtype": null, - "options": "Company", - "parent": "Quotation Template", - "parentfield": "fields", - "parenttype": "DocType", - "permlevel": 0, - "placeholder": null, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": null, - "read_only": 0, - "read_only_depends_on": null, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "show_dashboard": 0, - "show_on_timeline": 0, - "show_preview_popup": 0, - "sort_options": 0, - "translatable": 0, - "trigger": null, - "unique": 0, - "width": null } ], "force_re_route_to_default_view": 0, @@ -499,7 +435,7 @@ "max_attachments": 0, "menu_index": null, "migration_hash": null, - "modified": "2026-01-02 11:26:31.164108", + "modified": "2025-12-23 02:03:44.840865", "module": "Selling", "name": "Quotation Template", "naming_rule": "", diff --git a/frontend/src/api.js b/frontend/src/api.js index d3e2b0c..a895290 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -12,8 +12,6 @@ const FRAPPE_GET_ESTIMATE_BY_ADDRESS_METHOD = "custom_ui.api.db.estimates.get_es const FRAPPE_SEND_ESTIMATE_EMAIL_METHOD = "custom_ui.api.db.estimates.send_estimate_email"; 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"; // 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"; @@ -224,14 +222,6 @@ class Api { return await this.request(FRAPPE_ESTIMATE_UPDATE_RESPONSE_METHOD, {name: estimateName, response}); } - static async getEstimateTemplates(company) { - return await this.request(FRAPPE_GET_ESTIMATE_TEMPLATES_METHOD, { company }); - } - - static async createEstimateTemplate(data) { - return await this.request(FRAPPE_CREATE_ESTIMATE_TEMPLATE_METHOD, { data }); - } - // ============================================================================ // JOB / PROJECT METHODS // ============================================================================ diff --git a/frontend/src/components/clientSubPages/History.vue b/frontend/src/components/clientSubPages/History.vue index 4da28ec..a6c2b13 100644 --- a/frontend/src/components/clientSubPages/History.vue +++ b/frontend/src/components/clientSubPages/History.vue @@ -1,26 +1,24 @@ - - diff --git a/frontend/src/components/pages/Estimate.vue b/frontend/src/components/pages/Estimate.vue index ff53e7b..2670fe2 100644 --- a/frontend/src/components/pages/Estimate.vue +++ b/frontend/src/components/pages/Estimate.vue @@ -59,32 +59,6 @@ - -
-
- - -
-
-
-
-

Items

@@ -203,13 +177,6 @@