diff --git a/virtual_pro/events/quotation_dashboard.py b/virtual_pro/events/quotation_dashboard.py
new file mode 100644
index 0000000..3a68803
--- /dev/null
+++ b/virtual_pro/events/quotation_dashboard.py
@@ -0,0 +1,15 @@
+from frappe import _
+
+
+def get_quotation_dashboard(data):
+ return {
+ "fieldname": "prevdoc_docname",
+ "non_standard_fieldnames": {
+ "Auto Repeat": "reference_document",
+ "Sales Invoice": "custom_quotation",
+ },
+ "transactions": [
+ {"label": _("Sales Order"), "items": ["Sales Order", "Sales Invoice"]},
+ {"label": _("Subscription"), "items": ["Auto Repeat"]},
+ ],
+ }
diff --git a/virtual_pro/hooks.py b/virtual_pro/hooks.py
index 064a97f..3fdd934 100644
--- a/virtual_pro/hooks.py
+++ b/virtual_pro/hooks.py
@@ -192,9 +192,9 @@
# each overriding function accepts a `data` argument;
# generated from the base implementation of the doctype dashboard,
# along with any modifications made in other Frappe apps
-# override_doctype_dashboards = {
-# "Task": "virtual_pro.task.get_dashboard_data"
-# }
+override_doctype_dashboards = {
+ "Quotation": "virtual_pro.events.quotation_dashboard.get_quotation_dashboard"
+}
# exempt linked doctypes from being automatically cancelled
#
diff --git a/virtual_pro/virtual_pro/doctype/enquiry/enquiry.js b/virtual_pro/virtual_pro/doctype/enquiry/enquiry.js
index 385899d..87ed174 100644
--- a/virtual_pro/virtual_pro/doctype/enquiry/enquiry.js
+++ b/virtual_pro/virtual_pro/doctype/enquiry/enquiry.js
@@ -6,13 +6,14 @@ frappe.ui.form.on('Enquiry', {
frm.add_custom_button('Change Status', () => {
show_status_dialog(frm);
});
-
- frm.add_custom_button("Create Quotation", function() {
- frappe.model.open_mapped_doc({
- method: "virtual_pro.virtual_pro.doctype.enquiry.enquiry.make_quotation",
- frm: frm
- });
- },__('Create'));
+ if (!frm.doc.quotation) {
+ frm.add_custom_button("Create Quotation", function() {
+ frappe.model.open_mapped_doc({
+ method: "virtual_pro.virtual_pro.doctype.enquiry.enquiry.make_quotation",
+ frm: frm
+ });
+ }, __('Create'));
+ }
}
cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
}
diff --git a/virtual_pro/virtual_pro/doctype/enquiry/enquiry.json b/virtual_pro/virtual_pro/doctype/enquiry/enquiry.json
index be3ec52..2e22695 100644
--- a/virtual_pro/virtual_pro/doctype/enquiry/enquiry.json
+++ b/virtual_pro/virtual_pro/doctype/enquiry/enquiry.json
@@ -175,7 +175,7 @@
"fieldname": "source_name",
"fieldtype": "Select",
"label": "Source",
- "options": "\nGoogle Ads\nSEO\nMeta Ads\nReference\nVpro clients",
+ "options": "\nGoogle Ads\nSEO\nMeta Ads\nReference\nVpro clients\nWhatsApp",
"reqd": 1
},
{
@@ -188,7 +188,7 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2025-06-21 09:53:36.995758",
+ "modified": "2025-06-21 13:08:54.716395",
"modified_by": "Administrator",
"module": "Virtual Pro",
"name": "Enquiry",
diff --git a/virtual_pro/virtual_pro/print_format/invoice/invoice.json b/virtual_pro/virtual_pro/print_format/invoice/invoice.json
index fdfa88e..703d65e 100644
--- a/virtual_pro/virtual_pro/print_format/invoice/invoice.json
+++ b/virtual_pro/virtual_pro/print_format/invoice/invoice.json
@@ -9,14 +9,14 @@
"docstatus": 0,
"doctype": "Print Format",
"font_size": 14,
- "html": "\n\n
\n \n Virtual PRO Invoice\n \n\n\n \n \n \n\n \n
\n
\n
Virtual PRO
\n
\n #Wafi Residence Office LHEU
\n Dubai Health Care City
\n #Innov8 Incubator
\n Al quoz 1, Dubai
\n Email: info@virtualpro.ae
\n Mobile: +971 581537204\n
\n
\n
\n
\n\n \n
\n Bill To: {{ doc.customer_name or doc.customer }}\n
\n\n \n
\n \n \n | # | \n Description | \n Qty | \n Rate | \n Amount | \n
\n \n \n {% for item in doc.items %}\n \n | {{ loop.index }} | \n {{ item.item_name or item.description }} | \n {{ \"%.2f\"|format(item.qty) }} | \n {{ doc.currency }} {{ \"%.2f\"|format(item.rate) }} | \n {{ doc.currency }} {{ \"%.2f\"|format(item.amount) }} | \n
\n {% endfor %}\n \n
\n\n \n
\n
\n Sub Total\n {{ doc.currency }} {{ \"%.2f\"|format(doc.net_total) }}\n
\n \n {% if doc.taxes %}\n {% for tax in doc.taxes %}\n
\n {{ tax.description }}\n {{ doc.currency }} {{ \"%.2f\"|format(tax.tax_amount) }}\n
\n {% endfor %}\n {% endif %}\n \n
\n Total\n {{ doc.currency }} {{ \"%.2f\"|format(doc.grand_total) }}\n
\n \n
\n Balance Due\n {{ doc.currency }} {{ \"%.2f\"|format(doc.outstanding_amount or doc.grand_total) }}\n
\n
\n\n \n \n
\n\n",
+ "html": "\n\n\n \n Virtual PRO Invoice\n \n\n\n \n \n \n\n \n
\n
\n
Virtual PRO
\n
\n #Wafi Residence Office LHEU
\n Dubai Health Care City
\n #Innov8 Incubator
\n Al quoz 1, Dubai
\n Email: info@virtualpro.ae
\n Mobile: +971 581537204\n
\n
\n
\n
\n\n \n
\n Bill To: {{ doc.customer_name or doc.customer }}\n
\n\n \n
\n \n \n | # | \n Description | \n Qty | \n Rate | \n Amount | \n
\n \n \n {% for item in doc.items %}\n \n | {{ loop.index }} | \n {{ item.item_name or item.description }} | \n {{ \"%.2f\"|format(item.qty) }} | \n {{ doc.currency }} {{ \"%.2f\"|format(item.rate) }} | \n {{ doc.currency }} {{ \"%.2f\"|format(item.amount) }} | \n
\n {% endfor %}\n \n
\n\n \n
\n
\n Sub Total\n {{ doc.currency }} {{ \"%.2f\"|format(doc.net_total) }}\n
\n \n {% if doc.taxes %}\n {% for tax in doc.taxes %}\n
\n {{ tax.description }}\n {{ doc.currency }} {{ \"%.2f\"|format(tax.tax_amount) }}\n
\n {% endfor %}\n {% endif %}\n \n
\n Total\n {{ doc.currency }} {{ \"%.2f\"|format(doc.grand_total) }}\n
\n \n
\n Balance Due\n {{ doc.currency }} {{ \"%.2f\"|format(doc.outstanding_amount or doc.grand_total) }}\n
\n
\n\n \n \n
\n\n",
"idx": 0,
"line_breaks": 0,
"margin_bottom": 15.0,
"margin_left": 15.0,
"margin_right": 15.0,
"margin_top": 15.0,
- "modified": "2025-06-21 09:54:33.745687",
+ "modified": "2025-06-21 12:48:13.533966",
"modified_by": "Administrator",
"module": "Virtual Pro",
"name": "invoice",
diff --git a/virtual_pro/virtual_pro/workspace/virtual_pro/virtual_pro.json b/virtual_pro/virtual_pro/workspace/virtual_pro/virtual_pro.json
index 51d97b7..c1e73d4 100644
--- a/virtual_pro/virtual_pro/workspace/virtual_pro/virtual_pro.json
+++ b/virtual_pro/virtual_pro/workspace/virtual_pro/virtual_pro.json
@@ -1,6 +1,6 @@
{
"charts": [],
- "content": "[{\"id\":\"-R9HiknfVA\",\"type\":\"header\",\"data\":{\"text\":\"Virtual Pro\",\"col\":12}},{\"id\":\"4WYhjFAFqF\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Enquiry\",\"col\":3}},{\"id\":\"Xj0wFLq0xb\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Service Request\",\"col\":3}},{\"id\":\"nlekOW0Vww\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"ToDo\",\"col\":3}},{\"id\":\"YyHNwxyaAf\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Task\",\"col\":3}},{\"id\":\"PQrkTjaOwh\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Order\",\"col\":3}},{\"id\":\"UMIROPe2Ju\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payment Entry\",\"col\":3}},{\"id\":\"CH_jUkf7ta\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":3}},{\"id\":\"en_3CTXRJE\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Virtual Pro Settings\",\"col\":3}},{\"id\":\"p_MEl48Nse\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Services\",\"col\":3}}]",
+ "content": "[{\"id\":\"-R9HiknfVA\",\"type\":\"header\",\"data\":{\"text\":\"Virtual Pro\",\"col\":12}},{\"id\":\"4WYhjFAFqF\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Enquiry\",\"col\":3}},{\"id\":\"Xj0wFLq0xb\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Service Request\",\"col\":3}},{\"id\":\"nlekOW0Vww\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"ToDo\",\"col\":3}},{\"id\":\"YyHNwxyaAf\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Task\",\"col\":3}},{\"id\":\"PQrkTjaOwh\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Order\",\"col\":3}},{\"id\":\"UMIROPe2Ju\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payment Entry\",\"col\":3}},{\"id\":\"CH_jUkf7ta\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":3}},{\"id\":\"en_3CTXRJE\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Virtual Pro Settings\",\"col\":3}},{\"id\":\"p_MEl48Nse\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Services\",\"col\":3}},{\"id\":\"b2NzE7fjHI\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Type\",\"col\":3}},{\"id\":\"ahNtXWwuaz\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Service Steps\",\"col\":3}}]",
"creation": "2025-06-07 11:46:58.272112",
"custom_blocks": [],
"docstatus": 0,
@@ -13,7 +13,7 @@
"is_hidden": 0,
"label": "Virtual Pro",
"links": [],
- "modified": "2025-06-17 10:10:17.123918",
+ "modified": "2025-06-21 12:33:07.951876",
"modified_by": "Administrator",
"module": "Virtual Pro",
"name": "Virtual Pro",
@@ -41,6 +41,14 @@
"stats_filter": "[]",
"type": "DocType"
},
+ {
+ "color": "Grey",
+ "doc_view": "List",
+ "label": "Type",
+ "link_to": "Type",
+ "stats_filter": "[]",
+ "type": "DocType"
+ },
{
"color": "Grey",
"doc_view": "List",
@@ -49,6 +57,14 @@
"stats_filter": "[]",
"type": "DocType"
},
+ {
+ "color": "Grey",
+ "doc_view": "List",
+ "label": "Service Steps",
+ "link_to": "Service Steps",
+ "stats_filter": "[]",
+ "type": "DocType"
+ },
{
"color": "Grey",
"doc_view": "List",