diff --git a/smart_service/phase_2/doctype/qwik_procedure/__init__.py b/smart_service/phase_2/doctype/qwik_procedure/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.json b/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.json new file mode 100644 index 0000000..f3d1e70 --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.json @@ -0,0 +1,46 @@ +{ + "actions": [], + "creation": "2023-09-04 11:28:17.372584", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "level", + "content", + "side" + ], + "fields": [ + { + "fieldname": "level", + "fieldtype": "Select", + "in_filter": 1, + "in_list_view": 1, + "label": "Level", + "options": "Floor Level\nHip Level\nHead Level" + }, + { + "fieldname": "content", + "fieldtype": "Text Editor", + "in_list_view": 1, + "label": "Content" + }, + { + "fieldname": "side", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Side", + "options": "LHS\nRHS" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2023-09-05 14:43:56.463049", + "modified_by": "Administrator", + "module": "Phase-2", + "name": "Qwik Procedure", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.py b/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.py new file mode 100644 index 0000000..56a1acf --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_procedure/qwik_procedure.py @@ -0,0 +1,8 @@ +# Copyright (c) 2023, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class QwikProcedure(Document): + pass diff --git a/smart_service/phase_2/doctype/qwik_service/__init__.py b/smart_service/phase_2/doctype/qwik_service/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/phase_2/doctype/qwik_service/qwik_service.js b/smart_service/phase_2/doctype/qwik_service/qwik_service.js new file mode 100644 index 0000000..d978d9e --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service/qwik_service.js @@ -0,0 +1,410 @@ +// Copyright (c) 2023, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt +var vehicle_count = 0; +var original_display_order = 0; + +frappe.ui.form.on('Qwik Service', { + refresh: function(frm) { + frm.set_query("variant", function() { + return { + "filters": { + "active_status": "Active", + } + }; + }); + if (!frm.is_new()) { + custom_tab_html(frm) + } + set_display_order(frm) + }, + onload:function(frm){ + if (!frm.is_new()) { + custom_tab_html(frm) + } + set_display_order(frm) + }, + validate:function(frm){ + cur_frm.refresh_fields("display_order") + if (frm.doc.display_order && frm.doc.name && !frm.is_new()) { + //***check if there is same display_order + frappe.db.get_list('Qwik Service', { + fields: ['display_order', 'name'], + filters: { + display_order: frm.doc.display_order, + name: ["!=", frm.doc.name], + vehicle: frm.doc.vehicle, + language: frm.doc.language, + variant: frm.doc.variant, + } + }).then(records => { + if (records.length) { + frappe.db.set_value('Qwik Service', records[0].name, { + display_order: original_display_order + }).then(r => { + let doc = r.message; + frappe.show_alert({ + message: __('Swapped display order with: ' + records[0].name), + indicator: 'green' + }, 5); + }); + } else { + if (frm.doc.display_order >= vehicle_count) { + let display_vehicle_count = vehicle_count - 1; + msgprint('There are only ' + display_vehicle_count + " " + frm.doc.doctype); + frappe.validated = false; + } + } + }); + } + }, + after_save: function (frm) { + cur_frm.refresh_fields("display_order") + frm.reload_doc() + }, + vehicle: function(frm){ + set_display_order(frm) + }, + variant: function (frm) { + frappe.call({ + method: "smart_service.phase_2.doctype.qwik_service.qwik_service.get_kilometer", + args: { + vehicle: frm.doc.vehicle, + service_kilometers: frm.doc.service_kilometers + }, + callback: function (r) { + console.log(r.message) + frm.set_df_property('kilometers', 'options', r.message); + frm.refresh_field('kilometers') + } + }) + + }, +}); + +function custom_tab_html(frm){ + // tab start + var res = $(cur_frm.fields_dict.test_html.wrapper).empty(); + var ret = '
' + + $(res).append(ret) + + $(res).find('.main').append(`
`) + res.append(``) + if(frm.doc.tab_ref){ + $('.nav').find('.nav-link').removeClass('active') + $('.nav').find('#'+frm.doc.tab_ref).addClass('active') + } + // tab end + var qwik_procedure = "" + + if (frm.doc.qwik_procedure){ + qwik_procedure = frm.doc.qwik_procedure.filter(o => o.side == "LHS") + } + if(frm.doc.tab_ref !='LHS'){ + if(qwik_procedure.length>0){ + qwik_procedure = frm.doc.qwik_procedure.filter(o => o.side == frm.doc.tab_ref) + // console.log("qwik",qwik_procedure) + } + } + + var nav_spec = {} + nav_spec.side = "LHS" + if(frm.doc.tab_ref !='LHS'){ + nav_spec.side = "RHS" + } + + all_tabs() + + $('.main').find('.nav-link').click(function (event){ + if ($(this)[0].id == "LHS"){ + frm.doc.tab_ref = "LHS" + cur_frm.refresh_fields("tab_ref") + frm.reload_doc() + nav_spec.side = "LHS" + + qwik_procedure = frm.doc.qwik_procedure.filter(o => o.side == $(this)[0].id) + + frappe.call({ + method: "smart_service.phase_2.doctype.qwik_service.qwik_service.insert_tab_ref", + args: { + docname: frm.doc.name, + tab_ref: "LHS" + }, + callback: function (r) { + frm.refresh_field('tab_ref') + frm.reload_doc() + } + }) + }else{ + nav_spec.side = "RHS" + frm.doc.tab_ref = $(this)[0].id + cur_frm.refresh_fields("tab_ref") + frm.reload_doc() + nav_spec.sides = $(this)[0].id + + qwik_procedure = frm.doc.qwik_procedure.filter(o => o.sides == $(this)[0].id) + + } + frappe.call({ + method: "smart_service.phase_2.doctype.qwik_service.qwik_service.insert_tab_ref", + args: { + docname: frm.doc.name, + tab_ref: $(this)[0].id + }, + callback: function (r) { + frm.refresh_field('tab_ref') + frm.reload_doc() + } + }) + }) + all_tabs() + + function all_tabs(frm){ + // html table + qwik_proce_dt += "" + var qwik_proce_dt = "" + qwik_proce_dt += ` + + + + + + + + ` + qwik_proce_dt += "" + // to listss + var qwik_procedure_count = 0 + if (qwik_procedure.length > 0) { + qwik_procedure.map(val => { + qwik_procedure_count += 1 + qwik_proce_dt += '' + qwik_proce_dt += '' + qwik_proce_dt += '' + qwik_proce_dt += '' + + qwik_proce_dt += '' + qwik_proce_dt += '' + + }) + } else { + qwik_proce_dt += '' + } + // button + qwik_proce_dt += '' + qwik_proce_dt += '
NoLevelContent + +
' + qwik_procedure_count + '' + val.level + '' + val.content + 'Edit
No Records Found
' + qwik_proce_dt += '' + qwik_proce_dt += '' + qwik_proce_dt += '' + // button end + qwik_proce_dt += '
' + // append + var qwik_dialog_value ="" + $(res).find('.qwik_probl').empty() + $(res).find('.qwik_probl').append(qwik_proce_dt) + + if(nav_spec.side=='LHS'){ + $(res).find('#rhs1').hide() + $(res).find('#rhs2').hide() + $(res).find('#rhs3').hide() + } + $(res).append(``) + //append end + //add button + $(res).find('.qwik_probl').find('.qwik_custom_add').click(function (event) { + qwik_dialog_value = "" + qwik_dialog_value = nav_spec + qwik_dialog_view() + }) + //end add button + // save function + $(res).find('.qwik_probl').find('.qwik_custom_save').click(function (event) { + var qwik_id_dis = [] + $(document).ready(function () { + $('.qwik_probl').find('table > tbody > tr').each(function (index, tr) { + qwik_id_dis.push(this.id); + }); + }) + }) + //end save function + //edit button + $(res).find('.qwik_probl').find('.qwik_edit_row').click(function (event) { + qwik_dialog_value = frm.doc.qwik_procedure.filter(o => o.name == $(this)[0].id)[0] + qwik_dialog_view() + }) + //end edit button + //delete all button + $(res).find('.qwik_probl').find('.qwik_procedure').find('input[type=checkbox]').change(function () { + $(".qwikcheck").prop('checked', $(this).prop('checked')); + if (this.checked) { + $(res).find('.qwik_probl').find('.qwik_custom_delete').css("display", "inline-block") + } else { + $(res).find('.qwik_probl').find('.qwik_custom_delete').css("display", "None") + } + + }) + //end delete all button + + //individual delete button + $(res).find('.qwik_probl').find('.qwik_procedure').change(function () { + if (this.checked) { + $(res).find('.qwik_probl').find('.qwik_custom_delete').css("display", "inline-block") + } else { + $(res).find('.qwik_probl').find('.qwik_custom_delete').css("display", "None") + } + + }) + //end individual delete button + + //delete function + $(res).find('.qwik_probl').find('.qwik_custom_delete').click(function (event) { + var arr = [] + $(res).find('.qwik_probl').find("input[type=checkbox]").each(function () { + var self = $(this); + if (self.is(':checked')) { + arr.push(self.attr("id")); + } + }); + if (arr[0] == "checkAll") { + arr = arr.slice(1) + } + + frappe.call({ + method: "smart_service.phase_2.doctype.qwik_service.qwik_service.delete_qwik_data", + args: { + values: arr + }, + callback: function (r) { + if (r.message.status == "success") { + cur_frm.reload_doc() + } + } + }) + }) + //delete function end + + function qwik_dialog_view(){ + let qwik_dia = new frappe.ui.Dialog({ + title: 'Enter details', + fields:[ + { + label: 'Name', + fieldname: 'name', + fieldtype: 'Data', + default: qwik_dialog_value.name, + hidden: 1 + }, + { + label: 'Level', + fieldname: 'level', + fieldtype: 'Select', + options: "Floor Level\nHip Level\nHead Level", + default: qwik_dialog_value.level, + }, + { + label: 'Content', + fieldname: 'content', + fieldtype: 'Text Editor', + default: qwik_dialog_value.content + }, + ], + // size: 'small', // small, large, extra-large + primary_action_label: 'Submit', + primary_action(values) { + if (values && values.level && values.content) { + frappe.call({ + method: "smart_service.phase_2.doctype.qwik_service.qwik_service.insert_qwik_data", + args: { + doc_name: cur_frm.doc.name, + values: values, + tab_ref:cur_frm.doc.tab_ref + }, + callback: function (r) { + if (r.message.status == "success") { + + cur_frm.reload_doc() + cur_frm.refresh() + } + } + }) + } + qwik_dia.hide(); + } + }); + qwik_dia.show(); + } +} +} + + + + + +function set_display_order(frm){ + + if (frm.is_new()) { + frm.set_df_property('display_order', 'read_only', 1); + } else { + frm.set_df_property('display_order', 'read_only', 0); + } + frappe.db.count('Qwik Service', { + filters: { + "variant": frm.doc.variant, + "language": frm.doc.language, + "vehicle": frm.doc.vehicle, + "kilometers":cur_frm.doc.kilometers + } + }).then(count => { + // console.log("counts",count) + vehicle_count = count + 1; + if (frm.is_new()) { + frm.set_value("display_order", vehicle_count); + } else { + original_display_order = frm.doc.display_order; + } + }); +} + +frappe.ui.form.on('Qwik Service Content',{ + content_type: function (frm, cdt, cdn) { + var select_value = locals[cdt][cdn] + var x = select_value.idx - 1; + let my_row = frm.fields_dict.content.grid.grid_rows[x]; + if (select_value.content_type == 'Heading' || select_value.content_type == 'Content'){ + cur_frm.get_field("pdf").grid.grid_rows[x].columns.pdf.df.read_only = 0; + cur_frm.get_field("content").grid.grid_rows[x].columns.content.df.read_only = 1; + cur_frm.refresh_fields("pdf") + } + else { + cur_frm.get_field("content").grid.grid_rows[x].columns.pdf.df.read_only = 0; + cur_frm.get_field("pdf").grid.grid_rows[x].columns.content.df.read_only = 1; + cur_frm.refresh_fields("pdf") + } + cur_frm.refresh_field("pdf"); + cur_frm.refresh_field(); + }, + validate:function(frm){ + let task_index = row.docfields.findIndex(x => x.fieldname === "pdf"); + if (row.doc.content_type == 'Heading' || row.doc.content_type == 'Content') { + row.docfields[task_index].read_only = 0; + // cur_frm.get_field("tool_usage_content").grid.grid_rows[x].columns.content.df.set=[]; + } else { + row.docfields[task_index].read_only = 1; + } + row.toggle_editable_row(true); + refresh_field("pdf"); + cur_frm.refresh_field("pdf"); + refresh_field(); + + } +}) diff --git a/smart_service/phase_2/doctype/qwik_service/qwik_service.json b/smart_service/phase_2/doctype/qwik_service/qwik_service.json new file mode 100644 index 0000000..2a19f25 --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service/qwik_service.json @@ -0,0 +1,156 @@ +{ + "_liked_by": "[\"Administrator\"]", + "actions": [], + "autoname": "format:{variant}-{kilometers}-{language}", + "creation": "2023-09-04 10:59:50.476936", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "variant", + "kilometers", + "language", + "service_time", + "column_break_vmliz", + "vehicle", + "display_order", + "active_status", + "pdf", + "keywords", + "section_break_mosyy", + "content", + "qwik_procedure", + "test_html", + "my_id", + "tab_ref" + ], + "fields": [ + { + "fieldname": "variant", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Variant", + "options": "Variant Mapping", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "kilometers", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Kilometers" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "column_break_vmliz", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant.vehicle", + "fieldname": "vehicle", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Vehicle", + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "display_order", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Display Order" + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Active Status", + "options": "Active\nInactive" + }, + { + "fieldname": "section_break_mosyy", + "fieldtype": "Section Break" + }, + { + "fieldname": "my_id", + "fieldtype": "Int", + "hidden": 1, + "label": "My Id" + }, + { + "fieldname": "qwik_procedure", + "fieldtype": "Table", + "label": "Qwik Procedure", + "options": "Qwik Procedure" + }, + { + "fieldname": "test_html", + "fieldtype": "HTML", + "label": "Test Html" + }, + { + "fieldname": "content", + "fieldtype": "Table", + "label": "Content", + "options": "Qwik Service Content" + }, + { + "fieldname": "service_time", + "fieldtype": "Data", + "label": "Service Time", + "reqd": 1 + }, + { + "fieldname": "pdf", + "fieldtype": "Attach", + "label": "PDF" + }, + { + "fieldname": "tab_ref", + "fieldtype": "Data", + "hidden": 1, + "label": "Tab ref" + }, + { + "fieldname": "keywords", + "fieldtype": "Small Text", + "label": "Keywords" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2023-09-15 13:03:18.140036", + "modified_by": "Administrator", + "module": "Phase-2", + "name": "Qwik Service", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/phase_2/doctype/qwik_service/qwik_service.py b/smart_service/phase_2/doctype/qwik_service/qwik_service.py new file mode 100644 index 0000000..99d6f47 --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service/qwik_service.py @@ -0,0 +1,96 @@ +# Copyright (c) 2023, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document +import json + +class QwikService(Document): + def validate(self): + try: + if self.is_new(): + if self.variant and self.language: + check_exe=frappe.db.sql('''select * from `tabQwik Service` where variant='%s' and language ='en' and name !='%s'; '''%(self.variant,self.name),as_dict=1) + if check_exe: + if self.language != "en": + for d in check_exe: + self.display_order = d['display_order'] + self.active_status = d['active_status'] + if not check_exe: + if self.language != "en": + frappe.throw("First language will be english only") + except Exception as e: + raise e + + + def on_update(self): + if self.language == "en": + try: + check_exe = frappe.db.get_list("Qwik Service", + filters={"variant": self.variant, "language": ["!=", "en"], + "name": ["!=", self.name]}, + fields={"name", "language", "display_order", "active_status"}) + if check_exe: + for i in check_exe: + res = frappe.get_doc( + "Qwik Service", i['name']) + res.display_order = self.display_order + res.active_status = self.active_status + res.save() + except Exception as e: + raise e + + +@frappe.whitelist() +def insert_tab_ref(docname,tab_ref): + try: + if docname and tab_ref: + frappe.db.sql("""UPDATE `tabQwik Service` set tab_ref='%s' WHERE name ='%s'""" %(tab_ref,docname)) + frappe.db.commit() + except Exception as e: + frappe.log_error("insert_tab",frappe.get_traceback()) + +@frappe.whitelist() +def insert_qwik_data(doc_name, values, tab_ref): + try: + val = json.loads(values) + get_count = frappe.db.sql("""select name from `tabQWIK Procedure` where parent='%s'""" %(doc_name),as_dict=1) + get_count = len(get_count)+1 + result = frappe.get_doc("Qwik Service", doc_name) + result.tab_ref = tab_ref + result.save() + frappe.db.commit() + if val.get('name') != None: + doc = frappe.get_doc("Qwik Procedure", val['name']) + doc.level = val.get('level') + doc.content = val.get('content') + # doc.active_status = val.get('active_status') + doc.save() + frappe.db.commit() + + else: + res = frappe.get_doc("Qwik Service", doc_name) + res.append("qwik_procedure", val) + res.save() + + return {"status": "success"} + except Exception as e: + frappe.log_error("insert_qwik_data", str(e)) + return {"status": "failure"} + +@frappe.whitelist() +def delete_qwik_data(values): + try: + val = json.loads(values) + if len(val) > 0: + for d in val: + frappe.delete_doc("QWIK Procedure", d) + frappe.db.commit() + return {"status": "success"} + except Exception as e: + frappe.log_error("delete_qwik_data", str(e)) + +@frappe.whitelist() +def get_kilometer(vehicle): + kilometer_list = frappe.db.sql("""select service_kilometers from `tabVehicle_SK` where parent='%s'; """%(vehicle),as_list=1) + return kilometer_list diff --git a/smart_service/phase_2/doctype/qwik_service/test_qwik_service.py b/smart_service/phase_2/doctype/qwik_service/test_qwik_service.py new file mode 100644 index 0000000..e4b7e36 --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service/test_qwik_service.py @@ -0,0 +1,8 @@ +# Copyright (c) 2023, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestQwikService(unittest.TestCase): + pass diff --git a/smart_service/phase_2/doctype/qwik_service_content/__init__.py b/smart_service/phase_2/doctype/qwik_service_content/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.json b/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.json new file mode 100644 index 0000000..215f735 --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.json @@ -0,0 +1,38 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2023-09-04 13:26:03.319418", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "content_type", + "content" + ], + "fields": [ + { + "fieldname": "content", + "fieldtype": "Text Editor", + "in_list_view": 1, + "label": "Content" + }, + { + "fieldname": "content_type", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Content Type", + "options": "Pre-Work\nConsumables\nTools" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2023-09-04 17:19:19.054634", + "modified_by": "Administrator", + "module": "Phase-2", + "name": "Qwik Service Content", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.py b/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.py new file mode 100644 index 0000000..1815c2d --- /dev/null +++ b/smart_service/phase_2/doctype/qwik_service_content/qwik_service_content.py @@ -0,0 +1,8 @@ +# Copyright (c) 2023, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class QwikServiceContent(Document): + pass diff --git a/smart_service/phase_2/doctype/special_tool_information/special_tool_information.json b/smart_service/phase_2/doctype/special_tool_information/special_tool_information.json index 41a849c..d346320 100644 --- a/smart_service/phase_2/doctype/special_tool_information/special_tool_information.json +++ b/smart_service/phase_2/doctype/special_tool_information/special_tool_information.json @@ -16,6 +16,7 @@ "sub_category", "column_break_whk88", "display_order", + "keywords", "my_id", "section_break_e91wx", "tool_usage_content" @@ -96,11 +97,16 @@ "fieldtype": "Select", "label": "Active Status", "options": "Active\nInactive" + }, + { + "fieldname": "keywords", + "fieldtype": "Small Text", + "label": "Keywords" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-09-01 17:06:34.665767", + "modified": "2023-09-15 10:43:27.405396", "modified_by": "Administrator", "module": "Phase-2", "name": "Special Tool Information",