From 9c2df3b0ef8f4fd50d36e674590e90b1f2dfb91c Mon Sep 17 00:00:00 2001
From: hns g`k0uHXuL=gQLL?8o3AjbiSi&=m~3PUi1CZpd
", "file": "", "display_order": 4}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Notice", "content": "
", "file": "", "display_order": 5}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
", "file": "", "display_order": 6}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "display_order": 7}], "Removal": [{"procedure_name": "Removal", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 8}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 9}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Caution", "content": "
", "file": "", "display_order": 10}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Description", "content": "
", "file": "", "display_order": 11}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "display_order": 12}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "display_order": 13}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "Description", "content": "
", "file": "", "display_order": 14}], "Installation": [{"procedure_name": "Installation", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 15}, {"procedure_name": "Installation", "step_name": "Step-1", "content_type": "Description", "content": "
", "file": "", "display_order": 16}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "display_order": 17}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Description", "content": "
", "file": "", "display_order": 18}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
", "file": "", "display_order": 19}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
", "file": "", "display_order": 20}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "display_order": 21}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "Description", "content": "
", "file": "", "display_order": 22}]}}]}, {"systemdisplayorder": 6, "system_name": "Fuel System", "active_status": "Active", "icon_file": null, "myid": "1002", "Assets": [], "Subsystems": [{"subSystemdisplayorder": 7, "systems": "Fuel System", "sub_systems": "Water In Fuel Filter - Clean", "symptom": 0, "component": 0, "estimated_time": null, "rts": null, "mat": "Show", "cover_image": null, "active_status": "Active", "Config Kilometer": [{"kilometer_name": "60000", "kilometer_IDX": 14, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 12, "kilometers_applicable": 1}, {"kilometer_name": "90000", "kilometer_IDX": 20, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 33, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 4, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 6, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 2, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 6, "kilometers_applicable": 1}, {"kilometer_name": "40000", "kilometer_IDX": 15, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 16, "kilometers_applicable": 1}, {"kilometer_name": "90000", "kilometer_IDX": 30, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 8, "kilometers_applicable": 1}, {"kilometer_name": "60000", "kilometer_IDX": 21, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 3, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 12, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 27, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 24, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 18, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 18, "kilometers_applicable": 1}, {"kilometer_name": "40000", "kilometer_IDX": 10, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 22, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 9, "kilometers_applicable": 1}], "procedure_status": "Publish Ready", "procedure_link": "Thar.AX-0311-Water In Fuel Filter - Clean-en", "ProcedureDetails": {"Overview": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "display_order": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "display_order": 2}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
", "file": "", "display_order": 3}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "display_order": 4}], "Sediment Draining": [{"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 5}, {"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "Description", "content": "
", "file": "", "display_order": 6}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "display_order": 7}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Description", "content": "Connect the transparent pipe to the drain \u00a0plug outlet of the fuel filter assembly
", "file": "", "display_order": 8}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Caution", "content": "
", "file": "", "display_order": 9}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "display_order": 10}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "Description", "content": "
", "file": "", "display_order": 11}, {"procedure_name": "Sediment Draining", "step_name": "Step-4", "content_type": "Description", "content": "
", "file": "", "display_order": 12}]}}]}]}}, {"Variant": {"name": "Thar.AX-0328", "variant": "Thar.AX", "vehicle": "Thar", "family_code": "J09", "vehicle_segment": "Personal", "active_status": "Active", "fuel": "DSL", "transmission": "AT", "drive": "4WD", "Assets": [], "Service Kilometres": [{"service_kilometers": "1000", "idx": 1}, {"service_kilometers": "10000", "idx": 2}, {"service_kilometers": "100000", "idx": 11}, {"service_kilometers": "20000", "idx": 3}, {"service_kilometers": "30000", "idx": 4}, {"service_kilometers": "40000", "idx": 5}, {"service_kilometers": "50000", "idx": 6}, {"service_kilometers": "60000", "idx": 7}, {"service_kilometers": "70000", "idx": 8}, {"service_kilometers": "80000", "idx": 9}, {"service_kilometers": "90000", "idx": 10}], "Systems": [{"systemdisplayorder": 1, "system_name": "Brakes", "active_status": "Active", "icon_file": null, "myid": "1016", "Assets": [{"systemdisplayorder": 1, "system_asset": "/files/Mahindra.jpg"}], "Subsystems": [{"subSystemdisplayorder": 2, "systems": "Brakes", "sub_systems": "Inter cooler", "symptom": 0, "component": 0, "estimated_time": null, "rts": null, "mat": "mat", "cover_image": null, "active_status": "Active", "Config Kilometer": [{"kilometer_name": "40000", "kilometer_IDX": 9, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 21, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 11, "kilometers_applicable": 1}, {"kilometer_name": "90000", "kilometer_IDX": 19, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 3, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 5, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 15, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 17, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 1, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 7, "kilometers_applicable": 1}, {"kilometer_name": "60000", "kilometer_IDX": 13, "kilometers_applicable": 1}], "procedure_status": "Publish Ready", "procedure_link": "Thar.AX-0328-Inter cooler-en", "ProcedureDetails": {"Overview": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "display_order": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "display_order": 2}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Description", "content": "The intercooler typically an air-to-air heat exchanger. Intercooler cools the air compressed by the turbocharger by reducing its temperature and increasing the density of the air supplied to the engine and thus improving the volumetric efficiency by increasing intake air charge density through nearly isobaric (constant pressure) cooling. The cooled air density improves, helping in increasing the power output and improving the fuel consumption.", "file": "", "display_order": 3}], "Removal and Installation": [{"procedure_name": "Removal and Installation", "step_name": "Step-1", "content_type": "Description", "content": "Using 10 mm socket spanner, Loosen battery negative terminal mounting nut and disconnect the terminal.", "file": "", "display_order": 4}, {"procedure_name": "Removal and Installation", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 5}, {"procedure_name": "Removal and Installation", "step_name": "Step-1", "content_type": "Caution", "content": "Should not remove the battery connection when the EWP is ON, Ensure to disconnect only when the EWP is off, Failing to do may affect the dozing module performance.Before disconnecting the battery, check for the audible sound of EWP \u00a0ON.", "file": "", "display_order": 6}, {"procedure_name": "Removal and Installation", "step_name": "Step-1", "content_type": "Torque Value", "content": "Torque : 6.0\u00b10.6 Nm", "file": "", "display_order": 7}, {"procedure_name": "Removal and Installation", "step_name": "Step-2", "content_type": "Description", "content": "Using 7 mm socket spanner, Loosen the intercooler inlet hose clip and disconnect the hose intercooler end.", "file": "", "display_order": 8}, {"procedure_name": "Removal and Installation", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "display_order": 9}, {"procedure_name": "Removal and Installation", "step_name": "Step-2", "content_type": "Torque Value", "content": "Torque : 6.5\u00b10.6 Nm", "file": "", "display_order": 10}, {"procedure_name": "Removal and Installation", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "display_order": 11}, {"procedure_name": "Removal and Installation", "step_name": "Step-3", "content_type": "Description", "content": "Using 7 mm socket spanner, Loosen the intercooler outlet hose clip and disconnect the hose intercooler end.", "file": "", "display_order": 12}, {"procedure_name": "Removal and Installation", "step_name": "Step-3", "content_type": "Torque Value", "content": "Torque : 6.5\u00b10.6 Nm", "file": "", "display_order": 13}, {"procedure_name": "Removal and Installation", "step_name": "Step-4", "content_type": "File", "content": "", "file": "", "display_order": 14}, {"procedure_name": "Removal and Installation", "step_name": "Step-4", "content_type": "Description", "content": "Using 10 mm socket spanner, remove boost pressure sensor mounting bolt and detach it.", "file": "", "display_order": 15}, {"procedure_name": "Removal and Installation", "step_name": "Step-4", "content_type": "Torque Value", "content": "Torque : 2.5 \u00b1 0.5 Nm", "file": "", "display_order": 16}, {"procedure_name": "Removal and Installation", "step_name": "Step-5", "content_type": "File", "content": "", "file": "", "display_order": 17}, {"procedure_name": "Removal and Installation", "step_name": "Step-5", "content_type": "Description", "content": "Disconnect the boost pressure sensor electrical connector.", "file": "", "display_order": 18}, {"procedure_name": "Removal and Installation", "step_name": "Step-6", "content_type": "File", "content": "", "file": "", "display_order": 19}, {"procedure_name": "Removal and Installation", "step_name": "Step-6", "content_type": "Description", "content": "Using 10 mm socket spanner, Unscrew degassing tank mounting bolts and partially detach it.", "file": "", "display_order": 20}, {"procedure_name": "Removal and Installation", "step_name": "Step-6", "content_type": "Torque Value", "content": "Torque : 4.5\u00b10.5 Nm", "file": "", "display_order": 21}, {"procedure_name": "Removal and Installation", "step_name": "Step-7", "content_type": "File", "content": "", "file": "", "display_order": 22}, {"procedure_name": "Removal and Installation", "step_name": "Step-7", "content_type": "Description", "content": "Using 13 mm Socket Spanner, Unscrew the Intercooler mounting bolts.", "file": "", "display_order": 23}, {"procedure_name": "Removal and Installation", "step_name": "Step-7", "content_type": "Torque Value", "content": "Torque : 12.5 \u00b1 1.5 Nm", "file": "", "display_order": 24}, {"procedure_name": "Removal and Installation", "step_name": "Step-8", "content_type": "File", "content": "", "file": "", "display_order": 25}, {"procedure_name": "Removal and Installation", "step_name": "Step-8", "content_type": "File", "content": "", "file": "", "display_order": 26}, {"procedure_name": "Removal and Installation", "step_name": "Step-8", "content_type": "Description", "content": "Carefully remove the intercooler from vehicle.", "file": "", "display_order": 27}, {"procedure_name": "Removal and Installation", "step_name": "Step-9", "content_type": "Description", "content": "Install in the reverse order of removal.", "file": "", "display_order": 28}], "Inspection": [{"procedure_name": "Inspection", "step_name": "Step-1", "content_type": "Description", "content": "Check for the external damage. If found replace it.Check for any oil seepage ,if found please inspect the turbocharger for any oil leakage.Inspect intercooler hoses for any damage. Replace if found any.Inspect intercooler rubber Isolators for any damage. Replace if found any.", "file": "", "display_order": 29}], "Summary": [{"procedure_name": "Summary", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "display_order": 30}, {"procedure_name": "Summary", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "display_order": 31}]}}, {"subSystemdisplayorder": 1, "systems": "Brakes", "sub_systems": "Water In Fuel Filter - Clean", "symptom": 0, "component": 0, "estimated_time": null, "rts": null, "mat": "mat", "cover_image": null, "active_status": "Active", "Config Kilometer": [{"kilometer_name": "60000", "kilometer_IDX": 14, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 12, "kilometers_applicable": 1}, {"kilometer_name": "90000", "kilometer_IDX": 20, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 33, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 4, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 6, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 2, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 6, "kilometers_applicable": 1}, {"kilometer_name": "40000", "kilometer_IDX": 15, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 16, "kilometers_applicable": 1}, {"kilometer_name": "90000", "kilometer_IDX": 30, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 8, "kilometers_applicable": 1}, {"kilometer_name": "60000", "kilometer_IDX": 21, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 3, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 12, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 27, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 24, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 18, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 18, "kilometers_applicable": 1}, {"kilometer_name": "40000", "kilometer_IDX": 10, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 22, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 9, "kilometers_applicable": 1}], "procedure_status": "Publish Ready", "procedure_link": "Thar.AX-0328-Water In Fuel Filter - Clean-en", "ProcedureDetails": {"Overview": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": null, "display_order": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": null, "display_order": 2}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
", "file": null, "display_order": 3}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": null, "display_order": 4}], "Sediment Draining": [{"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "File", "content": "", "file": null, "display_order": 5}, {"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "Description", "content": "
", "file": null, "display_order": 6}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "File", "content": "", "file": null, "display_order": 7}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Description", "content": "Connect the transparent pipe to the drain \u00a0plug outlet of the fuel filter assembly
", "file": null, "display_order": 8}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Caution", "content": "
", "file": null, "display_order": 9}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "File", "content": "", "file": null, "display_order": 10}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "Description", "content": "
", "file": null, "display_order": 11}, {"procedure_name": "Sediment Draining", "step_name": "Step-4", "content_type": "Description", "content": "
", "file": null, "display_order": 12}]}}]}]}}, {"StepCount": 77}]
\ No newline at end of file
diff --git a/smart_service/mahindra_smart_service/__init__.py b/smart_service/mahindra_smart_service/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/smart_service/mahindra_smart_service/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0bbb2518d6995623bf69b1b8fd29eec9ff03b59a
GIT binary patch
literal 191
zcmWIL<>g`kg0pH>i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10HKO;XkRX?pL
zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6~)JA
c=4F<|$LkeT-r}&y%}*)KNwovn{uziF0IY>H4*&oF
literal 0
HcmV?d00001
diff --git a/smart_service/mahindra_smart_service/doctype/__init__.py b/smart_service/mahindra_smart_service/doctype/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/smart_service/mahindra_smart_service/doctype/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b434d19577a5baf46c8e884074ea12c37e396de9
GIT binary patch
literal 199
zcmWIL<>g`kg4IS!#_?z<;SH!vSUP--^{j#O
Ux50P|xzUH`
${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(spreadsheets.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(documents.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(videos.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else{ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + } + + } else if(data.private==0){ + if(pictures.includes(data.fileformat)){ + // console.log(data); + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(pdfs.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(spreadsheets.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(documents.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else if(videos.includes(data.fileformat)){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + }else{ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_file(" + JSON.stringify(data.filename) + ")" + } + } + } + else if(data && column.fieldname=="filename" && data.folder==1) { + if(data.private==1){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_folder(" + JSON.stringify(data.filename) + ")" + }else if(data.private==0){ + value = `${value}
` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_folder(" + JSON.stringify(data.filename) + ")" + } + }else{ + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_folder(" + JSON.stringify(data.filename) + ")" + } + if(data && column.fieldname=="private" ){ + if(data.private==1){ + column.align='left'; + value = ` Private ` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_folder(" + JSON.stringify(data.filename) + ")" + }else if(data.private==0){ + column.align='left'; + value = ` Public ` + column.link_onclick = "frappe.query_reports['_File Structure'].set_route_to_folder(" + JSON.stringify(data.filename) + ")" + } + } + if(data && column.fieldname=="path" ){ + column.align='left'; + } + if(data && column.fieldname=="attached_to" ){ + column.align='left'; + } + if(data && column.fieldname=="modified" ){ + column.align='left'; + } + value = default_formatter(value, row, column, data); + return value; + }, + + "set_route_to_file": function (data) { + // console.log(data); + // window.open("http://ss.hnsonline.com:81/files/" + data); + window.open("http://192.168.1.58:81/files/" + data); + }, + + "set_route_to_folder": function (data) { + // console.log(data); + // window.open("http://ss.hnsonline.com:81/files/" + data); + + }, + "tree": true, + "name_field": "filename", + "parent_field": "", + "initial_depth": 0 +}; diff --git a/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.json b/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.json new file mode 100644 index 0000000..d9b754d --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.json @@ -0,0 +1,43 @@ +{ + "add_total_row": 0, + "columns": [ + { + "fieldname": "filename", + "fieldtype": "Dynamic Link", + "label": "Files and Folders", + "width": 300 + }, + { + "fieldname": "attached_to", + "fieldtype": "Dynamic Link", + "label": "Attached To", + "width": 0 + } + ], + "creation": "2021-11-03 16:08:49.650166", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "json": "{}", + "modified": "2021-11-10 15:06:12.308461", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "_File Structure", + "owner": "mahibaalana@hnsonline.com", + "prepared_report": 0, + "ref_doctype": "File", + "report_name": "_File Structure", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "All" + } + ] +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.py b/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.py new file mode 100644 index 0000000..2a58413 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_file_structure/_file_structure.py @@ -0,0 +1,168 @@ +# Copyright (c) 2013, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +import datetime + + +def execute(filters=None): + data = files_tree() + columns = get_columns() + return columns, data + + + +#Import data, process and return tree +def files_tree(): + # files_list = [{'filename': 'Air Filter Element - Clean.mp4', 'modified': datetime.datetime(2021, 11, 2, 15, 26, 40, 660271), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'Attachments', 'modified': datetime.datetime(2021, 10, 28, 10, 5, 31, 64495), 'path': 'Home', 'folder': 1, 'home': 0, 'attached_to': None}, {'filename': 'Home', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 515878), 'path': None, 'folder': 1, 'home': 1, 'attached_to': None}, {'filename': 'HR', 'modified': datetime.datetime(2021, 10, 29, 18, 38, 4, 699706), 'path': 'Home', 'folder': 1, 'home': 0, 'attached_to': None}, {'filename': 'HR-EMP-00014.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 37, 30, 841175), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'chitra@hnsonlie.com'}, {'filename': 'HR-EMP-00014.jpg', 'modified': datetime.datetime(2021, 10, 30, 11, 59, 55, 430869), 'path': 'Home/Attachments', 'folder': 0, 'home': 0, 'attached_to': 'chitra@hnsonline.com'}, {'filename': 'HR-EMP-00027.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 37, 30, 831552), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'radhika@hnsonline.com'}, {'filename': 'HR-EMP-00123.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 37, 30, 850617), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'lincy@hnsoline.com'}, {'filename': 'HR-EMP-00123.jpg', 'modified': datetime.datetime(2021, 10, 30, 11, 52, 41, 949433), 'path': 'Home/Attachments', 'folder': 0, 'home': 0, 'attached_to': 'lincy@hnsonline.com'}, {'filename': 'HR-EMP-00198.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 37, 30, 810586), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'mahibaalana@hnsonline.com'}, {'filename': 'HR-EMP-00265.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 38, 4, 670057), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'new-procedure-2'}, {'filename': 'HR-EMP-00265.jpg', 'modified': datetime.datetime(2021, 10, 29, 18, 37, 30, 859817), 'path': 'Home/HR', 'folder': 0, 'home': 0, 'attached_to': 'mohammedmusthaqr@hnsonline.com'}, {'filename': 'Mahindra-1-insights.jpg', 'modified': datetime.datetime(2021, 11, 8, 18, 33, 4, 881826), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Administrator'}, {'filename': 'MAN-00968_Repair Manual THAR mHAWK130 Diesel MT AT_Rev5 - HI.pdf', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 492050), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001'}, {'filename': 'MAN-00968_Repair Manual THAR mHAWK130 Diesel MT AT_Rev5.pdf', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 505751), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001'}, {'filename': 'Sub_Systems.xlsx', 'modified': datetime.datetime(2021, 10, 29, 16, 40, 22, 424448), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Sub Systems Import on 2021-10-29 16:35:38.714291'}, {'filename': 'TestFile1', 'modified': datetime.datetime(2021, 10, 28, 10, 5, 31, 64495), 'path': 'Home/THAR/TestFolder/TestFolder1', 'folder': 0, 'home': 0, 'attached_to': None}, {'filename': 'TestFolder1', 'modified': datetime.datetime(2021, 10, 28, 10, 5, 31, 64495), 'path': 'Home/THAR/TestFolder', 'folder': 1, 'home': 0, 'attached_to': None}, {'filename': 'TestFile', 'modified': datetime.datetime(2021, 10, 28, 10, 5, 31, 64495), 'path': 'Home/THAR/TestFolder', 'folder': 0, 'home': 0, 'attached_to': None}, {'filename': 'TestFolder', 'modified': datetime.datetime(2021, 10, 28, 10, 5, 31, 64495), 'path': 'Home/THAR', 'folder': 1, 'home': 0, 'attached_to': None}, {'filename': 'THAR', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 521651), 'path': 'Home', 'folder': 1, 'home': 0, 'attached_to': None}, {'filename': 'Variant_Mapping_upload.xlsx', 'modified': datetime.datetime(2021, 10, 29, 17, 37, 5, 497102), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Variant Mapping Import on 2021-10-29 17:35:30.519107'}, {'filename': 'W1A140025.jpg', 'modified': datetime.datetime(2021, 11, 2, 18, 8, 34, 893967), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'new-system-mapping-2'}, {'filename': 'W4A020008.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 456818), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'new-procedure-1'}, {'filename': 'W4A020008b09d62.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 446269), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'new-procedure-2'}, {'filename': 'W4A020008b09d62.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 436281), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'new-procedure-2'}, {'filename': 'W4A020011.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 359736), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020012.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 331649), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020012.jpg', 'modified': datetime.datetime(2021, 11, 3, 11, 24, 18, 934831), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Chassis System'}, {'filename': 'W4A020012.jpg', 'modified': datetime.datetime(2021, 11, 3, 11, 15, 38, 753147), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Ignition System'}, {'filename': 'W4A020013.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 373176), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020016.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 399755), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020017.jpg', 'modified': datetime.datetime(2021, 11, 8, 17, 0, 34, 563139), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'new-user-feedback-1'}, {'filename': 'W4A020017.jpg', 'modified': datetime.datetime(2021, 11, 2, 13, 0, 7, 947262), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020123.jpg', 'modified': datetime.datetime(2021, 11, 8, 17, 8, 21, 37288), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'User Manual'}, {'filename': 'W4A020123.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 425834), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020123a3a61c.jpg', 'modified': datetime.datetime(2021, 11, 2, 13, 1, 44, 612418), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020123a3a61c.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 412820), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020124.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 55, 26, 386603), 'path': 'Home/THAR', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}, {'filename': 'W4A020124f5c6bd.jpg', 'modified': datetime.datetime(2021, 11, 2, 12, 59, 23, 383773), 'path': 'Home', 'folder': 0, 'home': 0, 'attached_to': 'Thar-AX-0001-Air Filter Element Clean'}] + files_lst = frappe.db.sql("""SELECT tabFile.file_name as filename, tabFile.modified as modified, tabFile.is_private as private, tabFile.folder as path, tabFile.is_folder as folder, tabFile.is_home_folder as home, + tabFile.attached_to_name as attached_to FROM tabFile order by filename asc""", as_dict=1) + classified = classification(files_lst) + indented = indentation(classified) + tree = arrangement(indented) + return tree + +#Classification of Files, folders and root folder +def classification(files_list): + b = [] + for i in files_list: + if i['folder'] == 0 and i['home'] == 0: + # print('File:',i['filename']) + # print('Path:',i['path']) + Path_items = i['path'].split('/') + fileformat = i['filename'].split('.') + length = Path_items.__len__() + i['Depth'] = length + i['type'] = 'file' + i['Path_items']=Path_items + i['fileformat']=fileformat[-1] + # print(Path) + # print(Path.__len__()) + + elif i['folder'] == 1 and i['home'] == 0: + # print('Folder:',i['filename']) + # print('Path:',i['path']) + Path_items = i['path'].split('/') + length = Path_items.__len__() + i['Depth'] = length + i['type'] = 'folder' + i['Path_items']=Path_items + i['fileformat']='folder' + # print(Path) + # print(Path.__len__()) + # print(Path[-1]) + elif i['folder'] == 1 and i['home'] == 1: + # print('Root:',i['filename']) + # print('Path:',i['path']) + length = 0 + i['Depth'] = length + i['type'] = 'root' + i['fileformat']='home' + # print(len) + b.append(i) + return b + + +#Adding Indents based on their depth +def indentation(b): + c = {} + for i in b: + if i['folder'] == 1 and i['home'] == 1: + i['indent'] = 0 + lst = [] + lst.append(i) + c['root'] = lst + + elif i['folder'] == 1 and i['home'] == 0: + lst = [] + temp1=[] + temp2=[] + for j in b: + pathinfo = 'Home' + indent = pathinfo.count('/') + if pathinfo == j['path']: + j['indent'] = indent+1 + if j['folder']==1: + temp1.append(j) + elif j['folder']==0: + temp2.append(j) + for k in temp1: + lst.append(k) + for l in temp2: + lst.append(l) + c[pathinfo] = lst + lst = [] + temp1=[] + temp2=[] + for j in b: + pathinfo = i['path']+'/'+i['filename'] + indent = pathinfo.count('/') + if pathinfo == j['path']: + j['indent'] = indent+1 + if j['folder']==1: + temp1.append(j) + elif j['folder']==0: + temp2.append(j) + for k in temp1: + lst.append(k) + for l in temp2: + lst.append(l) + c[pathinfo] = lst + return c + +#Arranging them to the required order for frappe +def arrangement(c): + out=[] + temp=c['root'] + out.append(temp[0]) + temp1= 'Home' + def repeating_method(temp2,c): + for x in c[temp2]: + out.append(x) + if x['folder']==1 and x['home']==0: + temp3=x['path']+'/'+x['filename'] + repeating_method(temp3,c) + repeating_method(temp1,c) + return out + + +#Columns to be displayed in tree view +def get_columns(): + return [ + { + "fieldname": "filename", + "label": _("Files and Folders"), + "fieldtype": 'Dynamic Link', + "options": "", + "width": 550 + }, + { + "fieldname": "private", + "label": _("Permission"), + "fieldtype": 'Data', + "options": "", + "width": 96 + }, + { + "fieldname": "path", + "label": _("Path"), + "fieldtype": "Data", + "options": "", + "width": 175 + }, + { + "fieldname": "attached_to", + "label": _("Attached to"), + "fieldtype": 'Dynamic Link', + "options": "", + "width": 175 + }, + { + "fieldname": "modified", + "label": _("Modified On"), + "fieldtype": "Data", + "options": "", + "width": 220 + } + ] diff --git a/smart_service/mahindra_smart_service/report/_fuel_translation/__init__.py b/smart_service/mahindra_smart_service/report/_fuel_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_fuel_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_fuel_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10c5209406a727a84560ef5cb6df1168b115e4cd GIT binary patch literal 216 zcmWIL<>g`kf-uE-i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j@KO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6&0lx zKRMrkmx3)H~
z4vB-RR#E#ZsDQr}1!7l%E2qceroHCwq5I|j!awVj|H$sh@v>roq1
z$J*NnlO`yEE>o@5YY#fz7()x=5jOW0Mm-M=RmNhUe|&Yb*9ot#tDxTxo3YwyK6`D{
zdS)%`wl=S#Bfc7U0+lr5Q0+vm@K~!8Y(`zFg68BP74~~7x!UZjUMrLX6*j+&ve4hv
zh46#0HAuoD!Qde?gonQ?)D-Fyh!J{}7%>|aX{;EED!iqJQ1m_5v#df*2iY`IOkf*=
z+Y{5$1T=`JeHRsJ3~>baP;Oc30@uWO&=PUayk|)qh_s~riG{<#sG*fY_Aqieu~TzT
zNN3AN-NC_GdnO$qB*R_)TwD(Rh%+zMN5431hpnW(ngnYryKxeB>Td(_sJqcz8LZVa
z(&|D#P+>Q@a>}TfCx}lSHdt$Z#i6VD>8;kU
${value}
` + break; + case 1: + value = `${value}
` + break; + case 0: + value = `${value}
` + break; + default: + value = `${value}
` + break; + } + } + if (data && column.fieldname == "length") { + column.align = 'center'; + switch (data.indent) { + case 2: + value = ` ${value} Procedures` + break; + case 3: + value = ` ${value} Steps` + break; + } + } + if (data && column.fieldname == "active_status") { + column.align = 'center'; + switch (value) { + case "Active": + value = ` ${value} ` + break; + + case "Inactive": + value = ` ${value} ` + break; + } + } + + if (data && column.fieldname == "workflow_state") { + column.link_onclick = "frappe.query_reports['_Procedure Report'].set_route(" + JSON.stringify(data.procedure) + ")" + } + + value = default_formatter(value, row, column, data); + return value; + }, + "set_route": function (data) { + console.log(data) + frappe.set_route("Form", "Procedure", data) + }, + // "set_route_to_procedure": function (data) { + // da = "http://192.168.1.58:81/printview?doctype=Procedure&name=" + data + "&format=Standard&no_letterhead=1&letterhead=No%20Letterhead&settings=%7B%7D&_lang=en" + // window.open(da); + // }, + "tree": true, + "name_field": "procedure_name", + "parent_field": "", + "initial_depth": 2 +}; diff --git a/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.json b/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.json new file mode 100644 index 0000000..1a908bc --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.json @@ -0,0 +1,38 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2021-11-10 12:27:31.252097", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [ + { + "fieldname": "Variant Mapping", + "fieldtype": "Link", + "label": "Variant Mapping", + "mandatory": 1, + "options": "Variant Mapping", + "wildcard_filter": 0 + } + ], + "idx": 0, + "is_standard": "Yes", + "modified": "2021-11-11 14:30:33.952027", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "_Procedure Report", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Procedure", + "report_name": "_Procedure Report", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "_Author" + } + ] +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.py b/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.py new file mode 100644 index 0000000..8e928a4 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.py @@ -0,0 +1,222 @@ +# # Copyright (c) 2013, Frappe Technologies and contributors +# # License: MIT. See LICENSE +from __future__ import unicode_literals +import functools +import frappe +from frappe import _ + + +def execute(filters=None): + validate_filters(filters) + data = get_data(filters) + columns = get_columns() + return columns, data + +def validate_filters(filters): + return + +def get_data(filters): + fil = None + if(filters.variant_mapping!=None): + fil = filters.variant_mapping + "%" + + data = frappe.db.sql( + """ + select `tabSystem Mapping_Sub System`.parent,`tabSystem Mapping_Sub System`.systems,`tabSystem Mapping_Sub System`.sub_systems,`tabSystem Mapping_Sub System`.`procedure` , + `tabProcedure_Details`.idx ,`tabProcedure_Details`.procedure_name ,`tabProcedure_Details`.step_name, + `tabProcedure`.active_status,`tabProcedure`.workflow_state + from (`tabSystem Mapping_Sub System` + inner join tabProcedure_Details + on `tabSystem Mapping_Sub System`.`procedure` = `tabProcedure_Details`.parent ) + inner join tabProcedure + on `tabSystem Mapping_Sub System`.`procedure` = tabProcedure.name + where `tabSystem Mapping_Sub System`.parent LIKE %s + GROUP by `tabSystem Mapping_Sub System`.`procedure` ,tabProcedure_Details.procedure_name ,tabProcedure_Details.step_name + order by `tabSystem Mapping_Sub System`.systems ,`tabSystem Mapping_Sub System`.sub_systems,`procedure`,idx; + """,fil,as_dict=True) + + + filterData = filters.variant_mapping + if(filterData!=None and len(data) > 0): + data = modifyData(data,filterData) + return data + + +def modifyData(dataInput,filterParent): + list1 = [] + inputData = modifyChildData(dataInput, indent=4, header=0) + parentAppend = addParent(filterParent, indent=0, header=1) + list1.insert(0, parentAppend[0]) + + sMap, sSize = getParentMap(inputData, 'systems') + + for i in sMap: + sMap1, sSize1 = getParentMap(sMap[i], 'systems') + sMapAppend = appendToDic1(sMap1, filterParent, indent=1, header=0) + list1.append(sMapAppend[0]) + + ssMap, ssSize = getParentMap(sMap[i], 'sub_systems') + ssMapAppend = appendToDic2(ssMap, indent=2, header=1) + + for j in ssMapAppend: + val = j['procedure_name'] + procMap, procSize = getParentMap(ssMap[val], 'procedure_name') + procValuesDic = appendToDic3(procMap, procSize, j, indent=3, header = 0) + + j['length'] = len(procValuesDic) + list1.append(j) + + for d in procValuesDic: + list1.append(d) + pval = d['procedure_name'] + + for s in procMap[pval]: + s['procedure_name']= s['step_name'] + list1.append(s) + + appendData = addDuplicateData(list1) + appendData = removeDuplicateAndHeader(appendData) + return appendData + +def appendToDic1(mapData, parent, indent, header): + mapDataAppend = [] + for d in mapData: + active = mapData[d][0]['active_status'] + keyDict = { + 'systems': "", + 'sub_systems': "", + 'parent': d, + 'procedure_name': d, + 'active_status': active, + 'indent': indent, + 'header': header + } + mapDataAppend.append(keyDict) + return mapDataAppend + +def appendToDic2(mapData, indent, header): + mapDataAppend = [] + for d in mapData: + da = mapData[d][0] + keyDict = { + 'systems': da['systems'], + 'sub_systems': da['sub_systems'], + 'parent': da['parent'], + 'procedure_name': d, + 'active_status':da['active_status'], + 'indent': indent, + 'header': header, + 'workflow_state': da['workflow_state'], + 'procedure': da['procedure'], + } + mapDataAppend.append(keyDict) + return mapDataAppend + +def appendToDic3(mapData,procSize,j,indent,header): + mapDataAppend = [] + i = 0 + for u in mapData: + procDict = { + 'systems': mapData[u][0]['systems'], + 'sub_systems': mapData[u][0]['sub_systems'], + 'parent': j["parent"], + 'procedure_name': u, + 'active_status': "Active", + 'indent': indent, + 'header': header, + 'length': procSize[i] + } + i+=1 + mapDataAppend.append(procDict) + return mapDataAppend + + +def modifyChildData(childData, indent, header): + for a in childData: + a.update({'indent': indent}) + a.update({'header': header}) + return childData + +def addParent(variantParent, indent, header): + varParDict = [{ + 'systems': "", + 'sub_systems': "", + 'parent': variantParent, + 'procedure_name': variantParent, + 'indent': indent, + 'header':header + }] + return varParDict + +def getParentMap(input_list, parameter): + sizeList = [] + parentChildMap = {} + for b in input_list: + parentChildMap.setdefault(b[parameter] or None, []).append(b) + for c in parentChildMap: + sizeList.append(len(parentChildMap[c])) + return parentChildMap, sizeList + +def addDuplicateData(data1): + prevValue = "" + for i in data1: + if i['procedure_name'] == prevValue: + dup = {"duplicate": "yes"} + else: + dup = {"duplicate": "no"} + i.update(dup) + prevValue = i['procedure_name'] + return data1 + +def removeDuplicateAndHeader(data1): + for k in data1: + if k['header'] == 0: + k['active_status'] = "" + k['workflow_state'] = "" + return data1 + +def print(dataText): + frappe.msgprint(str(dataText)) + + +def get_columns(): + columns = [ + { + "fieldname": "procedure_name", + "label": _("Procedures"), + "fieldtype": "Data", + "width": 400 + }, + { + "fieldname": "active_status", + "label": _("Status"), + "fieldtype": "Data", + "options": "", + "width": 100 + }, + { + "fieldname":"length", + "label":"Elements Length", + "fieldtype":"Data", + "width": 150 + }, + { + "fieldname": "workflow_state", + "label": _("English"), + "fieldtype": "Link", + "options": "Procedure", + "width": 150 + } + ] + + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" """,as_dict=1) + lang=[] + for i in custom_lang: + langField = { + "fieldname": i['lang_name'], + "label": i['lang_name'], + "width": 150 + } + lang.append(langField) + columns += lang + return columns \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_sub_systems_translation/__init__.py b/smart_service/mahindra_smart_service/report/_sub_systems_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_sub_systems_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_sub_systems_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d91e97d5ee3652a900b52867c037bf1650dcc2a GIT binary patch literal 223 zcmZ9GJqiLr425UGLWDhtg^u2cVBii{o7rcTzKOqu!rHUIZcUepx^4hhn`e-J>Jn zDEZRaxG|c2av&n_a2+<(x(Z#X9VO&T-xG7Q&^`1cE?s99Ns6Ps)a#Cl4;*!(vzr5mZh)qX!ZccXE1k`~1);l)~1(HJEFgjV2ZQMm|X4;RKC?iQeBc6$Q@O)OFaqAk%VV7McLj$a7+yOfuF9W7I!7QG_EF@-908I1vAuqw0 zX7pArFR@1Qib)YXQ*I3o+s&Qk_MVN_2LEtjKYq6R)OPshr<=DvzkPG__MNW#*{0Xn z*Y3e~taLxLcK|nbdqVBoKOPDxriky}w^u~8V)rE%(mpuJw<0$bdk}&}S3&eCosxm7 z+t;@rw43&KUo~4c@J6N$)B-tgqaye0wN {TT(k_XH6Inq^?Z@a(3eQb+Bc-pR%%Xr{+d| 3Fgmt<=xLc0KLCgjm(Cjxzx(?QFPGKa=_U_;b)&C}ZupIP|?h*lp1ZMWok2O#WY0 z&_9;oiqm$PR~x16G#~HTU++FS%Z`XYWypP$JYGWD-SdcMY%{O^y$O$o>c`R(nOA01 zxjr&AVxD$BXfYiOKv_S1*0G-XU7ePMr^p5GK{O!s8K#;epAR84#3;hXQ3Z@3S^%D7 z{8^5G_oUToKFdvieRR{b8_gVd;_vZ!vxQ9MQ>fVmoik0Q&e?Z%WLdmXxmz>I*=-nY zftWKLJbRGIy@WeCBAhJYRULDjilg%w?*sjRjGP&-q8q<}f@S43AZ7d@HPmrXE2UL0 zOG^&guXE`*7V_i)l!=I=nN!MBdJL!{NU7{p;abLS@C_o#1xN>3eaXQkoR$H608M=i zfUrfwq$PTVR@kUF*k$W)^XekYFlTZ+) 68Rlo2*(c-l2D|@KC80} ztwD7vEe$SiJ%VbkeJGq;H#as?D^Ea!3a-2BTQ@c~2GuEFOg3)8#!vHgp^oOwLbE=b z+Wx0{@fMTysAh2A)1C4}fk9zw3v{emvIscxGJ-1zJ_L|j_(p(A56PU=Oo_!=UO;da z!4d*|Q%w0Bi?ahw!5a;HZc;`o1b+Wm;Qd8bqRY@EV&Pk6A+0!0H`cKfjwA6glxdJI z "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabSub Systems`.modified as "Modified On", + `tabSub Systems`.active_status as "Status", + `tabSub Systems`.sub_system_name as 'Vehicle Segment' + + + %s + From _d6463952657fa86c.`tabSub Systems` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabSub Systems`.sub_system_name = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,_d6463952657fa86c.tabTranslation.source_text as sourceText + , _d6463952657fa86c.tabTranslation.translated_text as translated_text + %s + From _d6463952657fa86c.tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + ON _d6463952657fa86c.`tabSub Systems`.sub_system_name = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Sub Systems") + ":Data/:300", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::300") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_systems_translation/__init__.py b/smart_service/mahindra_smart_service/report/_systems_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_systems_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_systems_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94ea9aa915a3fc8ab887f95b1b68c1aee75a7533 GIT binary patch literal 219 zcmWIL<>g`kg6IFICW7e4AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY %N|V(%^1VJ6PT*@H-9WXfMq+wOOMrf)lYCET z?rKqGNg-6d6N!h^@hCDFKPJo!#x4w10nmdVBO^Lun!F<4FjyIyz9J(wq(jz44QLBE zmVvqB^@BK!R8qhVh;plDlJEKf=%bSS!-L6#w>cQ8y ~gU zW2O6{y$86l+Y{>0{_a>vF++Uko?Q`9#qLWkq _0xwW{5juv_q6SIYQd~w-HV4Fst(2DQ#W#W9f<1@^dO&8=Dg`mmLh! zXB`fdwdMDl=$GZ zf8{ TFI^=-Q(hy#K-WKgFeF2Yv^b}|bEP#X&y=0PJ39}d zLu((J;m(alBeAj~GbrJ?yR~z@(dgvIKA0ZfY%~VnFV_1Snl=r`+I;EypZdTXEW+bn zz "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabSystems`.modified as "Modified On", + `tabSystems`.active_status as "Status", + `tabSystems`.system_name as 'Vehicle Segment' + + + %s + From _d6463952657fa86c.`tabSystems` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabSystems`.system_name = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,_d6463952657fa86c.tabTranslation.source_text as sourceText + , _d6463952657fa86c.tabTranslation.translated_text as translated_text + %s + From _d6463952657fa86c.tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + ON _d6463952657fa86c.`tabSystems`.system_name = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Systems") + ":Data/:300", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::300") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/__init__.py b/smart_service/mahindra_smart_service/report/_transmission_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fcea61d51d86fe5d82fef895b7af67e395f1ff29 GIT binary patch literal 224 zcmWIL<>g`kf`esC5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_(enx(7s(xBg zVnIP_d~s1(yn!K &x3Gs5=($={rLFIyv&mLc)fzkTO2mI`6;D2sdgaeeFkC% E043N$F8}}l literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/_transmission_translation.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/_transmission_translation.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5888628ad9591278dcea5ed1b9cfb49e0eef9a0 GIT binary patch literal 2643 zcmbsrO>Y}TbY^$G{%jl6(xiyP%2JeCGEN$33ZboNQ&$wFj@kr}EYN1NGj_JxT_-cM z{jh8asl9TAD@a`UOMB(i14k|#fcIwCmYokcu=c!tv-7^@y*Ka8mlrNn2t0qi_{IBU ziICrLGW(b?`3#2q3IHRFh9sh0N)b0gqiew149&>uT2Y}}i0rPd*R0Tpirr#V>Xu+$ zWd&xxq1`eoveFyUt*|nyz`M$fUDBw%1=*xQ(}g4s`~l-`7$`2hP<9$-YWY$LfI+O% zVxKGKDc&&BQY8CF0zXpMrzjwQEO;9*wqVFQfIj>TGNxlgk=NuK129w3*JNyr=*Z}y z1+)Vat03I<2VoM$GA-c*RCx_6E%t&C?2&14vTET gW1 CEi~kgv$8B#oINBsZ4a>QVbrofwR8jl=gd|7rE=Qa zAUjUN&}nxbG#pPl%Ti!250{!JSeIqC?EMHQa+inPS5Bo|#tmx?d0y |DP#Nx ZndA9i3Bt#V}v)WfcMfP8o@O~&D4yT=R%4XEG z-F~>|e6jQBEH6$OGB@s{-pRg^cjsT3rk q&hkN=D&+(S0qgG@l~Gdy*IU2k9}eb5bgc1y@#-G5h?t?1Q_50$45U0vspwYWI3`~B1c^iq3W4q|8MuVgGJtnr$oBydW5Kj& ziC&=Vlyu=c+sQMH_~$?lB;JGA1La@r=HP3crY$37Dm^0$}zc>0>=d zN~)j}JTtL>voiDoV`M-dcn@p-PnIf-Ojfx@fTy}heumq@@%<4QQRKz9?y P`#>AYRAz*pV!)PP}Oa}#WA*rEtD;xd9O2;K#d+IT^LHV<{2G%SIASzJJH z6~Q6`yim*p9s9BiL&60Of^JcRRtWt5wjulrMu{%L5J-g=nOa(L-Cm*+!ChD2O-Ngi z*0R)WB`OG|)-Et51a^FZiIG{0w*s9!THuT++9*uIv~(MqOcL_D$R#mNYdQ-TjEY_A F`~%Xv=Ar-q literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.js b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.js new file mode 100644 index 0000000..3124715 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.js @@ -0,0 +1,19 @@ +// Copyright (c) 2016, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["_Transmission Translation"] = { + "filters": [ + + ], + "formatter": function (value, row, column, data, default_formatter) { + console.log(value) + if(value==null){ + value=' ' + column.align='left'; + } + value = default_formatter(value, row, column, data); + return value; + +} +}; diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.json b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.json new file mode 100644 index 0000000..0ca425a --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.json @@ -0,0 +1,32 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2021-11-29 12:14:17.565403", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "modified": "2021-11-29 12:14:17.565403", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "_Transmission Translation", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Transmission", + "report_name": "_Transmission Translation", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "_Admin" + }, + { + "role": "_Master Read" + } + ] +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.py b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.py new file mode 100644 index 0000000..a1f883c --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.py @@ -0,0 +1,146 @@ +# Copyright (c) 2013, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe + +from __future__ import unicode_literals +import frappe +from frappe.utils import cstr, cint, getdate +from frappe import msgprint, _ + +def execute(filters=None): + columns, data = [], [] + columns,lang = get_columns() + data = get_data() + return columns, data + +def get_data(): + + custom_lang = frappe.db.sql("""SELECT lang_code FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabTransmission`.modified as "Modified On", + `tabTransmission`.active_status as "Status", + `tabTransmission`.transmission as 'Transmission' + + + %s + From _d6463952657fa86c.`tabTransmission` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabTransmission`.transmission = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,_d6463952657fa86c.tabTranslation.source_text as sourceText + , _d6463952657fa86c.tabTranslation.translated_text as translated_text + %s + From _d6463952657fa86c.tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + ON _d6463952657fa86c.`tabTransmission`.transmission = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Transmission") + ":Data/:220", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::220") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_variant_translation/__init__.py b/smart_service/mahindra_smart_service/report/_variant_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_variant_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_variant_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4717220e0083544448db3a3c28f7cdd517ccc30 GIT binary patch literal 219 zcmWIL<>g`kf`sEs6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_Renx(7s(xBg zVnIP_d~s1(yn!K `XrfbUuNW>;vJ1(~v~8Ln-nsWE}=yBQzqjV@9P;DY812o-;!h*&RD7 zcgoPO@e;RQ(@urky!@JUs=UIh@U3ySOByq8KsRa7Y%Yxhzt4pm21-aTOxg`2GyOzK zph2uMyC)R)lxVQ593{OIiG$SjDJm!)6TS@E7PO=eqz5k}BRXP=ydqyS;0#4ykr5lx zA?u lsP@)~AlcY_f8NiuspYvN31hF;wJg~%&l U z=}Pb9M7W7Ob64*az4s4A>>sVbM6!}Zo>Xok o4Cw-|_+%r!G zUaVXty*LRy74+kO9c-Sw%xv*O_^A>#3_=+Qp;dS-D(8UrabW!5Yzdl<*K1%DIi|;q zQ_i^Y0~--;j_8m)Cf_(C#!ExSt(zpLU3P bt%8NjUxTyl*2MeB~Trb@h0>2F#5FJZavR~a=QSu^5S!jy9i74W$d{gDBQUq zs?Wics0Jt+$D>h11c93eTrbuzET%vbLVw=L3D^PXh1g^W)sNRt mb1N^98RLhUk(`E&a#r*8X?Ah nvt^}N=IUBh0Jn5NG+Heh3P(F_hyyAEb3Md;gD4w^lQ2uDD z($L^DHwmnnohLuRMS8kDBtwd8@vE<+EA2sT>a-84n~&kXS=n4$U(KxiTu;XCtgd$K z;v7!~*YsdsMcxjstq#7sSW}lV>Kbp$=SzqNl*>2PH$M32?%KxPdtL9t4Zn#w|3B6D z4Hm emD~RS279R= literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.js b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.js new file mode 100644 index 0000000..d9e9cae --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.js @@ -0,0 +1,18 @@ +// Copyright (c) 2016, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["_Variant Translation"] = { + "filters": [ + + ], + "formatter": function (value, row, column, data, default_formatter) { + console.log(value) + if(value==null){ + value=' ' + column.align='left'; + } + value = default_formatter(value, row, column, data); + return value; + } +}; diff --git a/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.json b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.json new file mode 100644 index 0000000..e6c5e61 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.json @@ -0,0 +1,32 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2021-11-30 12:10:32.622816", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "modified": "2021-11-30 12:10:32.622816", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "_Variant Translation", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Variant", + "report_name": "_Variant Translation", + "report_type": "Script Report", + "roles": [ + { + "role": "_Admin" + }, + { + "role": "System Manager" + }, + { + "role": "_Master Read" + } + ] +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.py b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.py new file mode 100644 index 0000000..3b046e9 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.py @@ -0,0 +1,146 @@ +# Copyright (c) 2013, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe + +from __future__ import unicode_literals +import frappe +from frappe.utils import cstr, cint, getdate +from frappe import msgprint, _ + +def execute(filters=None): + columns, data = [], [] + columns,lang = get_columns() + data = get_data() + return columns, data + +def get_data(): + + custom_lang = frappe.db.sql("""SELECT lang_code FROM `tabCustom Languages` where lang_code <> "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabVariant`.modified as "Modified On", + `tabVariant`.active_status as "Status", + `tabVariant`.vehicle as "Vehicle", + `tabVariant`.variant as 'Variant' + + %s + From `tabVariant` + LEFT JOIN `tabTranslation` as tabTrans + ON `tabVariant`.variant = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,tabTranslation.source_text as sourceText + , tabTranslation.translated_text as translated_text + %s + From tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM tabLanguage as tanLang) as tabLang + ON tabTranslation.language = tabLang.languageCode) as tabTranslation + ON `tabVariant`.variant = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Data/:240", _("Status") + ":Data/:100", _("Vehicle") + ":Data/:200",_("Variant") + ":Data/:220", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::220") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__init__.py b/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe6bc4146f74e3ddd97ecd2d774bdb7ca048cb35 GIT binary patch literal 227 zcmWIL<>g`kf+aPR6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_Venx(7s(xBg zVnIP_d~s1(yn!K 2KczG$ M)ehvs&p^xo0L`mI5&!@I literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/_vehicle_segment_translation.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/_vehicle_segment_translation.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..320cfbd87637a5da85a126656544745d30a9e1e3 GIT binary patch literal 2682 zcmbtWPj4GV6rY)0um7cOP)nL34l7GhYRNchpecm5qD@^ X0E_?vK%w9S5z!%^G@9o;bb`m7S+Vgg1=lz@aelu^rx^$^R;Bf}O zxJx$(`5gz-j{$?vpsD9TIN>xPA?;9#eHO3|gSQbFq1iFRLZ=W~9V?qN0~QuL#jw;V z!MMr`+ 6YHWnO`Im9srkUw8|;Nu8#PapZe_E}X#ELb`!!*NxQll$JpK zNT`12E;*&9vC{1Mo+s#mTIRGpQN4QSVnGFN2Xke_T82hhnWO z-Q#27D0$+n-x`lTI24h0v<4GuO@*%1juP_3_r%;NbdUUqOV^oYlH#~8^_p`cj(jfw z-J%zYNIP1(kqTVx_oIKEY#zT#i{hp5VlAo|loAj^EAX?ZT!g-dA0`jZ7NBMEdjlO! zUeFheQ_i^Y0~--;j%Y$2k#Fr0 juebmo1Tz0Z}#XK)eUbz-gXx7SC`N5;G|P zr#X1YOVFp8yp`Katg*dfQiKeZ+ry*1)=q1C-^Qpzp180dKihq3JACt_%@04hy|H=w zPS^c-(`z1R_i#H_x*ys*z#F?gp$_ctj)W9b!guf6H4)Y9zT`sMhp+Of$PL9lK(Xj5 zK%vqp8LEbTbNj(w%l`WFR@(;MsI-Y*pyq9K &i0uE9tL7wcf;(Eg z)OKqJbVqRz*sb=Xy6q}^MM*^TaJexjx}x%F_cz#=dm<2?wkzc_F8Fzl4tp<0$3Zjf zbHD2gjuN$}lfiCOYg{DZdfGn$d}&w5nW5TV)~z)zG%|-tw6!|t$tsx3|0@dKk0qq# zY>duZ0$SZ^J>Iv!*nM(dTv28!um@;;@(E>kFA|#b@Sr)rjC-egnyMd5Ph^>zap&eZ z{K$D05a7u)KtQr_cFhxC^F2Im30IOE-Uo!B^f@7$6Q73_24jr63DQ6jAPDFMNto3L zd{5f#*0VhPH^;kAyV1;Y9o#YK?_|B%hs@ sSJjs;IYp$ij@Q&_r4@d3#H2lUKj7E}2t6f`TZ5h>$`si6izy_8nH z?6`6;hUt|-Eaa;PP(~t-p-w4J=>S+okW!geVVlNo@Fg ZlrC-g*SpUi(m3w>H+-Q!77^h86tou5H~~UmsqX%g5>D#>V>a`}vyDzz}B; zZOk5b7hn(*{(ox8TRh0e^@RJLPRpkb3=3OZ;A7pAMc|QFkz7OaE|Ap1dj#AD;GidU zQ)1zkmyj$WSw@2Qj;Xw3;dY=YoFtHKMk@q "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabVehicle Segment`.modified as "Modified On", + `tabVehicle Segment`.active_status as "Status", + `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' + + + %s + From _d6463952657fa86c.`tabVehicle Segment` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,_d6463952657fa86c.tabTranslation.source_text as sourceText + , _d6463952657fa86c.tabTranslation.translated_text as translated_text + %s + From _d6463952657fa86c.tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Vehicle Segment") + ":Data/:220", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::220") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/__init__.py b/smart_service/mahindra_smart_service/report/_vehicle_translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9dedd8f4461a8f369238a6f060fd60af36d73cca GIT binary patch literal 219 zcmWIL<>g`kf-1#%i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5juKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6&0lx z Bq-s=4F<|$LkeT-r}&y%}*)KNwovH>@yHE F002AvKRy5e literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/_vehicle_translation.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/_vehicle_translation.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46d29166332570d32a343fecee2b33ef711bf2cc GIT binary patch literal 2578 zcmbtWUvC>l5Z~Q9pZ}$8P)m~{9!{2`)RJ-1KvM{9MVq>!D0M^=ie!N (h{g2 z={VmJn!8$5SzHKJ=S1Qpbv%j+vd4rsgSHDzRe*Hh$H jo>&-#Zr6{vbe(x7DNcG)Z#bu->wAH4 zv~(jCxZ3YU=T6p7Ud4IwQg{O`%IJgw5JF4vv#4B#zK0W&2Ul~@5`VpcjwUbY3&tsD z-1wP|2{*@dL>`gv?J?uI5#!bklF~N2PR0g!(YOQt?XLo-Ipxfs;mnQ9Q4ToG{zG1X zK27AUbia|6?Ux_rAtJ@*uzS$hYwRA{=w*lt7xv?4`%i6$Z-27=@n^TUwr}5QyPs}* z^&{;b?+%pih4vos4&07VNA?e0A;paF-TQV$L>0Ryxsdkpt8^)HLvaYu%ex9tr*uq) zs%GEZeQ?mQzx}e&v_Us2t)msFc^3`2XRoiRb^8z*&e{VahwoxkpTtXWM~j!*ZtQ{X zXb=Q;qxq<6yUJcu5)nLHtu2VIsdU*Da1ReeAUtiCibXu|^Art7^{~hNwl6qxR-R4< z`%$H~$mx38KLu=RR}T`!m4l>Pshv@pVGVVzXFIKfy7a%M;Qd&FyU(6|)-=?**LZwr zf3^SQJU=1tjH8Zlx5*UB?q4J{J^RGWdsDf(>J6j^mjpaLxBbn`eaLw>ps@37fI+f$ z_G}Z|(z`di6Iz~be3 ^#KqdDi_!_2dIOVUs#>Jo%!OCWo0Q0EUay=!pK zGQsH-nlRBggPn^MAA$UTpk*$S7`o4);8 BT{xwXXCBLcV$c zX+GlU+L-c~_JLIdF_o<{T(f~2e2q+U39fZgA5wA!heaUoK~o Jn zcGddJyuQp5&beHTwatQ- H@4`VE<3fe~Sq> z%lq8-bgMWuV3^z40UN89%ma_SisTxS_kqL~)_17VkdR5$lvrTpB_!98tRTVffth$? zfpwrM_`ZU8o0QQKf!{wCM1GkS=qfacT=*Tb6qg*QJ -uyFWE)M%m4rY literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.js b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.js new file mode 100644 index 0000000..72b0ed8 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.js @@ -0,0 +1,19 @@ +// Copyright (c) 2016, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["_Vehicle Translation"] = { + "filters": [ + + ], + "formatter": function (value, row, column, data, default_formatter) { + console.log(value) + if(value==null){ + value=' ' + column.align='left'; + } + value = default_formatter(value, row, column, data); + return value; + +} +}; diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.json b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.json new file mode 100644 index 0000000..833f0d6 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.json @@ -0,0 +1,29 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2021-11-24 16:56:50.600660", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "modified": "2021-11-24 16:56:50.600660", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "_Vehicle Translation", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Vehicle", + "report_name": "_Vehicle Translation", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "_Admin" + } + ] +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.py b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.py new file mode 100644 index 0000000..d967737 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.py @@ -0,0 +1,146 @@ +# Copyright (c) 2013, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe + +from __future__ import unicode_literals +import frappe +from frappe.utils import cstr, cint, getdate +from frappe import msgprint, _ + +def execute(filters=None): + columns, data = [], [] + columns,lang = get_columns() + data = get_data() + return columns, data + +def get_data(): + + custom_lang = frappe.db.sql("""SELECT lang_code FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_list=True) + + + queryAppendLang = "" + for d in custom_lang: + q = ", (CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" %(d[0],d[0]) + queryAppendLang += q + + sel = "" + for d in custom_lang: + r = ",tabTranslation.%s as %s"%(d[0],d[0]) + sel+= r + + + actualQuery = """Select + `tabVehicle`.modified as "Modified On", + `tabVehicle`.active_status as "Status", + `tabVehicle`.vehicle as 'Vehicle' + + + %s + From _d6463952657fa86c.`tabVehicle` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabVehicle`.vehicle = tabTrans.source_text + LEFT JOIN (Select tabLang.languageCode as languageCode + ,_d6463952657fa86c.tabTranslation.source_text as sourceText + , _d6463952657fa86c.tabTranslation.translated_text as translated_text + %s + From _d6463952657fa86c.tabTranslation + INNER JOIN (SELECT tanLang.language_name as language_name + , tanLang.language_code as languageCode + FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + ON _d6463952657fa86c.`tabVehicle`.vehicle = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabVehicle Segment`.modified as "Modified On", + # `tabVehicle Segment`.active_status as "Status", + # `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , + # `tabVehicle Segment`.vehicle_segment as 'English', + + # tabTranslation.hi as हिंदी, + # tabTranslation.ta as தமிழ், + # tabTranslation.gu as ગુજરાતી, + # tabTranslation.kn as ಕನ್ನಡ, + # tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు + # From _d6463952657fa86c.`tabVehicle Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + + # LEFT JOIN (Select tabLang.languageCode as languageCode + # ,_d6463952657fa86c.tabTranslation.source_text as sourceText + # , _d6463952657fa86c.tabTranslation.translated_text as translated_text + # , (CASE WHEN tabLang.languageCode = "en" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as en + # , (CASE WHEN tabLang.languageCode = "gu" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as gu + # , (CASE WHEN tabLang.languageCode = "hi" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as hi + # , (CASE WHEN tabLang.languageCode = "kn" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as kn + # , (CASE WHEN tabLang.languageCode = "ml" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ml + # , (CASE WHEN tabLang.languageCode = "mr" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as mr + # , (CASE WHEN tabLang.languageCode = "ta" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as ta + # , (CASE WHEN tabLang.languageCode = "te" THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as te + # From _d6463952657fa86c.tabTranslation + # INNER JOIN (SELECT tanLang.language_name as language_name + # , tanLang.language_code as languageCode + # FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang + # ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation + # ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Vehicle") + ":Data/:220", + ] + lang = [] + custom_lang = frappe.db.sql("""SELECT lang_code,lang_name,active_status FROM _d6463952657fa86c.`tabCustom Languages` where lang_code <> "en" order by lang_name""",as_dict=1) + # frappe.msgprint(str(custom_lang)) + for d in custom_lang: + lang.append(cstr(d["lang_name"])+ "::220") + # frappe.msgprint(str(lang)) + columns += lang + return columns,lang + + + + + +# customLang = ['en', 'hi', 'ta', 'te'] + +# queryAppendLang = [] +# for d in customLang: +# # print(d) +# query = " ,(CASE WHEN tabLang.languageCode = '%s' THEN _d6463952657fa86c.tabTranslation.translated_text ELSE null END) as %s" % (d, d) +# queryAppendLang.append(query) + +# actualQuery = """Select +# `tabVehicle Segment`.modified as "Modified On", +# `tabVehicle Segment`.active_status as "Status", +# `tabVehicle Segment`.vehicle_segment as 'Vehicle Segment' , +# `tabVehicle Segment`.vehicle_segment as 'English', + +# tabTranslation.hi as हिंदी, +# tabTranslation.ta as தமிழ், +# tabTranslation.gu as ગુજરાતી, +# tabTranslation.kn as ಕನ್ನಡ, +# tabTranslation.ml as മലയാളം, tabTranslation.mr as मराठी,tabTranslation.te as తెలుగు +# From _d6463952657fa86c.`tabVehicle Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTrans.source_text + +# LEFT JOIN (Select tabLang.languageCode as languageCode +# ,_d6463952657fa86c.tabTranslation.source_text as sourceText +# , _d6463952657fa86c.tabTranslation.translated_text as translated_text %s From _d6463952657fa86c.tabTranslation +# INNER JOIN (SELECT tanLang.language_name as language_name +# , tanLang.language_code as languageCode +# FROM _d6463952657fa86c.tabLanguage as tanLang) as tabLang +# ON _d6463952657fa86c.tabTranslation.language = tabLang.languageCode) as tabTranslation +# ON _d6463952657fa86c.`tabVehicle Segment`.vehicle_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/masters/__init__.py b/smart_service/masters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbdfeb3c530a053cfb3fc1d44b594cfa427ec09d GIT binary patch literal 176 zcmWIL<>g`k0-K`#L=gQLL?8o3AjbiSi&=m~3PUi1CZpd aZC5rWna}$e7;)_#@$}*Ev(RjIu#U-gl#rpB_nR%Hd Z@$q^EmA5!-a`RJ4b5iX<)_n$I1^{!dEwumu literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/__init__.py b/smart_service/masters/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f070af181ceb1a3bec22f169a6a8ac428c536bca GIT binary patch literal 184 zcmWIL<>g`k0>$F~L=gQLL?8o3AjbiSi&=m~3PUi1CZpd aZC5rWna}$e7;)_#@$}*Ev(RjIu#U-gl#ri4v$t9Hq hsrvEpnR%Hd@$q^EmA5!-a`RJ4b5iX<)_w+J1_1Y=Fv g`kf{)p=6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_Uenx(7s(xBg zVnIP_d~s1(yn!K 1G(Tc5HkP(=AAX` literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/app_labels/__pycache__/app_labels.cpython-38.pyc b/smart_service/masters/doctype/app_labels/__pycache__/app_labels.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0ece8e4d47ce32a1f00f26b0f39ce023279b2e8 GIT binary patch literal 487 zcmZ8ey-ve05Vqr_xK%sy5E*D-N2o}ZSWp+#C8}h(@u9Y|lVGQnI>XEG3OtHeroI9b zXQvVsC*Aoz-~ZimG8qx1<>^bVGD5xsxTF-p4B5?5D59t)hL)5DJ<&;-;LCJkSjo KOkwO0Ny0<9$E*1D=t%aMdy8 HG%#nsNKJUp literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/app_labels/__pycache__/test_app_labels.cpython-38.pyc b/smart_service/masters/doctype/app_labels/__pycache__/test_app_labels.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8feff1bb5264d3feb9f1b9c1a9e47e57a56b605e GIT binary patch literal 396 zcmZ9Hy-ve05Xa9+fv9R;fjt8lc7%!;SWp*W$#QbzLoMXP*iNO+@D@A)JW^IBMpmYt zlZsZHbbsGZzR!m=9Ru6X^Sk=w_bb4@jTolv?wCb`7A53x13J?28|aweNxa5+q{SU% zqi@cESrK&K1jCfwO;`wWpy&XaXgH-%pt z3I$m93rWxG;f_zu+D1J3D4Y|5MD(1+dD7NPAJX$A+;pvYR>;_`Iz*wgOD=}XE)V`1 FMH_Z=V)Fn1 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/app_labels/app_labels.js b/smart_service/masters/doctype/app_labels/app_labels.js new file mode 100644 index 0000000..2aafaad --- /dev/null +++ b/smart_service/masters/doctype/app_labels/app_labels.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('App Labels', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/masters/doctype/app_labels/app_labels.json b/smart_service/masters/doctype/app_labels/app_labels.json new file mode 100644 index 0000000..710d14b --- /dev/null +++ b/smart_service/masters/doctype/app_labels/app_labels.json @@ -0,0 +1,121 @@ +{ + "actions": [], + "allow_import": 1, + "autoname": "AL-.####", + "creation": "2021-11-22 15:37:44.849837", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "english_label", + "is_group", + "page_name", + "parent_app_labels", + "column_break_2", + "language", + "label", + "lft", + "rgt", + "old_parent" + ], + "fields": [ + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1 + }, + { + "fieldname": "label", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Translated Label", + "reqd": 1 + }, + { + "fieldname": "english_label", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "English Label", + "reqd": 1 + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "lft", + "fieldtype": "Int", + "hidden": 1, + "label": "Left", + "no_copy": 1, + "read_only": 1 + }, + { + "fieldname": "rgt", + "fieldtype": "Int", + "hidden": 1, + "label": "Right", + "no_copy": 1, + "read_only": 1 + }, + { + "default": "0", + "fieldname": "is_group", + "fieldtype": "Check", + "label": "Is Group" + }, + { + "fieldname": "old_parent", + "fieldtype": "Link", + "hidden": 1, + "label": "Old Parent", + "options": "App Labels" + }, + { + "fieldname": "parent_app_labels", + "fieldtype": "Link", + "label": "Parent App Labels", + "options": "App Labels" + }, + { + "fieldname": "page_name", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Page Name", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "is_tree": 1, + "links": [], + "modified": "2021-12-22 12:07:54.181243", + "modified_by": "Administrator", + "module": "Masters", + "name": "App Labels", + "nsm_parent_field": "parent_app_labels", + "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", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/app_labels/app_labels.py b/smart_service/masters/doctype/app_labels/app_labels.py new file mode 100644 index 0000000..7b7c455 --- /dev/null +++ b/smart_service/masters/doctype/app_labels/app_labels.py @@ -0,0 +1,36 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document +import frappe +from frappe import _ +import datetime +import json + + +class AppLabels(Document): + pass + # def labels_json(): + # labels_lst = frappe.db.sql("""SELECT `tabApp Labels`.name as name, `tabApp Labels`.english_label as element, `tabApp Labels`.language as lang, `tabApp Labels`.label as label, `tabApp Labels`.parent as parent, `tabApp Labels`.is_group as is_group FROM _d6463952657fa86c.`tabApp Labels` order by name asc""", as_dict=1) + # final = [] + # labels = set() + # for i in labels_lst: + # if i['parent'] != None: + # labels.add(i['element']) + # for j in labels: + # temp_lst = [] + # temp_dict = {} + # for k in labels_lst: + # if j == k['element'] and k['lang']=='en': + # temp=k + # elif j == k['element'] and k['lang']!='en': + # temp_lst.append(k) + # for l in temp_lst: + # temp[l['name']]=l + # temp_dict[temp['name']]=temp + # final.append(temp_dict) + # # x = json.dumps(final) + # frappe.msgprint(str(final)) + # return final + # labels_json() diff --git a/smart_service/masters/doctype/app_labels/test_app_labels.py b/smart_service/masters/doctype/app_labels/test_app_labels.py new file mode 100644 index 0000000..423833d --- /dev/null +++ b/smart_service/masters/doctype/app_labels/test_app_labels.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestAppLabels(unittest.TestCase): + pass diff --git a/smart_service/masters/doctype/app_labels_data/__init__.py b/smart_service/masters/doctype/app_labels_data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/app_labels_data/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/app_labels_data/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7746eb6152d58919c41ddf56cca98b01df668101 GIT binary patch literal 200 zcmWIL<>g`kg8S_g5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_+enx(7s(xBg zVnIP_d~s1(yn!K lIYq;;_lhPbtkwwF5chGY~TX01A^g=l}o! literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/app_labels_data/__pycache__/app_labels_data.cpython-38.pyc b/smart_service/masters/doctype/app_labels_data/__pycache__/app_labels_data.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be603fb72cffaf9eaf73e80038ed67d5437293f5 GIT binary patch literal 424 zcmZ8dJx{|h5Vez5SXIi#&YFP)c7%$A#DZ85OO}%xA1aca7~84T86;Nz27f6MVqoGg zFmX;mt$NbEyXX7xv+w8g86*3AeUl#)zarVS36TZ4KPFI2am@^`IA_;PB`SSkDn U7LAfTvFCvGUH`0qq*#CzPw!VEN#rwFus=;q>f}oh-4bS0xpE>5X&& zJi7H`jeE>UAJF+ywRPB7j02#zs`hzdH!h|7qXwT42tM$r{%F)ukZ{xmEgb&D#jc@e UD}2lZ6?$<#zVl-GzcEXG0YQXp2mk;8 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/app_labels_data/app_labels_data.json b/smart_service/masters/doctype/app_labels_data/app_labels_data.json new file mode 100644 index 0000000..2372e19 --- /dev/null +++ b/smart_service/masters/doctype/app_labels_data/app_labels_data.json @@ -0,0 +1,48 @@ +{ + "actions": [], + "creation": "2021-11-03 13:00:16.647782", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "source_text", + "language", + "translated_text" + ], + "fields": [ + { + "fieldname": "source_text", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Source Text", + "reqd": 1 + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Language", + "reqd": 1 + }, + { + "fieldname": "translated_text", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Translated Text", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-11-14 09:21:59.807093", + "modified_by": "Administrator", + "module": "Masters", + "name": "App Labels_data", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/app_labels_data/app_labels_data.py b/smart_service/masters/doctype/app_labels_data/app_labels_data.py new file mode 100644 index 0000000..18b168a --- /dev/null +++ b/smart_service/masters/doctype/app_labels_data/app_labels_data.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class AppLabels_data(Document): + pass diff --git a/smart_service/masters/doctype/custom_languages/__init__.py b/smart_service/masters/doctype/custom_languages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/custom_languages/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/custom_languages/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac0527564e0b9c5d112bdeff974942b0b1f933b7 GIT binary patch literal 201 zcmWIL<>g`k0>$F~L=gQLL?8o3AjbiSi&=m~3PUi1CZpd aZC5rWna}$e7;)_#@$}*Ev(RjIu#U-gl#ri4v$t9Hq ysrt#K#U=T<@i~ck>7|M3sm1#7@tJv ^SgjD567aT0t vayCzvI*eT_JqL5bbu;k&W-@oXnt=+Y*mYrTA-DGi} z094u`KtBU;we8A~rvOi#F2~B7@O!*$2w!WpsvW8aubT#e{2ES9f7J0kR%WHRK#H99 zEfD(kqrpGQX=>4vvbAY94JtEGLAk~Hcab+6A2UIqpol{v2OaniMv|P-vCMhp@GU-c W4L!f;W0r8CPtL}do=>+M)94%ZT5Tu* literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/custom_languages/__pycache__/test_custom_languages.cpython-38.pyc b/smart_service/masters/doctype/custom_languages/__pycache__/test_custom_languages.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b40b02e7089ef1365719d991cf22240e58f7c753 GIT binary patch literal 414 zcmZ8cJx{|h5Vey6QPocDNQ@c4up?B7fdzE|mMkX|A8k>b1fNr>VuYRF!N%{&%EVvj z#5pNY^`v`u&-dYX_v7(UupQI8{^a--$hHlbOxWp&!3ZM@k%? 1KZ*)0p^bBd5#%%&nYKs8v5WrTZ zDMCI1cy4sjS3ZQ>=Y<`tU(~#^s2-iJYXovjI6L34lLsvGx#9vTvf6ndbjwAKJIreG z=t!9=_p2IJ-l>A(SC;ZD6?R`w>y?XG#z8nRB#G>J8fQsUE_@iulI}{)|Avl#*?ks9 O+vK9Z@^bHQQS<|8g=!H1 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/custom_languages/custom_languages.js b/smart_service/masters/doctype/custom_languages/custom_languages.js new file mode 100644 index 0000000..8692c24 --- /dev/null +++ b/smart_service/masters/doctype/custom_languages/custom_languages.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Custom Languages', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/masters/doctype/custom_languages/custom_languages.json b/smart_service/masters/doctype/custom_languages/custom_languages.json new file mode 100644 index 0000000..4fe51a2 --- /dev/null +++ b/smart_service/masters/doctype/custom_languages/custom_languages.json @@ -0,0 +1,87 @@ +{ + "actions": [], + "autoname": "format:{lang_code}", + "creation": "2021-11-13 13:41:13.235099", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "lang_code", + "active_status", + "column_break_2", + "lang_name", + "display_order", + "myid" + ], + "fields": [ + { + "fieldname": "lang_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Lang Code", + "options": "Language", + "reqd": 1 + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "default": "-", + "fetch_from": "Language.language_code", + "fieldname": "lang_name", + "fieldtype": "Data", + "label": "Lang Name", + "read_only": 1 + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Active Status", + "options": "Active\nInactive", + "reqd": 1 + }, + { + "fieldname": "display_order", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Display Order", + "reqd": 1 + }, + { + "fieldname": "myid", + "fieldtype": "Data", + "in_list_view": 1, + "label": "myID", + "read_only": 1, + "set_only_once": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-27 18:16:45.663974", + "modified_by": "Administrator", + "module": "Masters", + "name": "Custom Languages", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "search_fields": "lang_code,lang_name,active_status", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "lang_name", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/custom_languages/custom_languages.py b/smart_service/masters/doctype/custom_languages/custom_languages.py new file mode 100644 index 0000000..20dc91b --- /dev/null +++ b/smart_service/masters/doctype/custom_languages/custom_languages.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class CustomLanguages(Document): + pass diff --git a/smart_service/masters/doctype/custom_languages/test_custom_languages.py b/smart_service/masters/doctype/custom_languages/test_custom_languages.py new file mode 100644 index 0000000..39e59d2 --- /dev/null +++ b/smart_service/masters/doctype/custom_languages/test_custom_languages.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestCustomLanguages(unittest.TestCase): + pass diff --git a/smart_service/masters/doctype/drive/__init__.py b/smart_service/masters/doctype/drive/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/drive/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/drive/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45bb17caedc1be973bbe8879e2287d3c01e95b2c GIT binary patch literal 190 zcmWIL<>g`k0@t<)i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10bKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuF_SlS?WK nQuR}cGRso+ {b`q&Gh?&2^|6$6?#9v_I zoD@-U(mmhveZ9M1Eat#={raXp`2F mwtLyTA{Lx{s1(bT#t zeViaZb*h{)?_f`O#0cLHa$6gc8>^az(AgfB7YBC!NL8_woN&?^Wm|M)`&~i*m{G1J z>!hxWcHfZHUdx18v$rAd^7~xC5Q~v}rKi)*j73tJar1b#^;KidpU5eSIWfeS(@j^= I@5Chd0X{rm@Bjb+ literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/drive/__pycache__/test_drive.cpython-38.pyc b/smart_service/masters/doctype/drive/__pycache__/test_drive.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1eb9bc68fbf06a6ea53fa41dc5186a18ff54d212 GIT binary patch literal 382 zcmZ8cJ5Iwu5S?8IFi~;^dKa+JBNPb`T^gWqGg`cZV&osYYfGs?)SLo|E4iiO3RIc3 zBZwGj-n^&z-_Pe$V7q>M*B>0eg4neQiv_zoVlZGt0V&*oktTWt6A?U#mnfA++(I(> z<{DUL0e4NXSg^Yp13@YbY&&Fsct_4(*}S7=67?}+rAtEWr-)^3+9L27;&ZEuG4ly_ zpT`XFLuyr*q#mtq8bW6~JU!d0;|Hp;mEwd`uGH3}BirQ}{ZplOo~%=*&iuL|Wx_4W z^Hn&|lV)utFFXhj1QLruCs7)=RqjJ&8iy|~HE#$Ne+P~%wD$4&_|L`O?;yDWH$7b0 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/drive/drive.js b/smart_service/masters/doctype/drive/drive.js new file mode 100644 index 0000000..352aa3a --- /dev/null +++ b/smart_service/masters/doctype/drive/drive.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Drive', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/masters/doctype/drive/drive.json b/smart_service/masters/doctype/drive/drive.json new file mode 100644 index 0000000..24e49fb --- /dev/null +++ b/smart_service/masters/doctype/drive/drive.json @@ -0,0 +1,80 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "format:{drive}", + "creation": "2021-10-28 13:22:52.454082", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "drive", + "active_status", + "myid" + ], + "fields": [ + { + "allow_in_quick_entry": 1, + "fieldname": "drive", + "fieldtype": "Data", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Drive", + "reqd": 1, + "translatable": 1 + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "hidden": 1, + "label": "Active Status", + "options": "Active\nInactive" + }, + { + "fieldname": "myid", + "fieldtype": "Data", + "hidden": 1, + "in_list_view": 1, + "label": "myID", + "set_only_once": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-11-24 13:04:07.842822", + "modified_by": "Administrator", + "module": "Masters", + "name": "Drive", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "_Admin", + "share": 1, + "write": 1 + } + ], + "search_fields": "drive", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "drive", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/drive/drive.py b/smart_service/masters/doctype/drive/drive.py new file mode 100644 index 0000000..001c057 --- /dev/null +++ b/smart_service/masters/doctype/drive/drive.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class Drive(Document): + pass diff --git a/smart_service/masters/doctype/drive/test_drive.py b/smart_service/masters/doctype/drive/test_drive.py new file mode 100644 index 0000000..116f6e3 --- /dev/null +++ b/smart_service/masters/doctype/drive/test_drive.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestDrive(unittest.TestCase): + pass diff --git a/smart_service/masters/doctype/fuel/__init__.py b/smart_service/masters/doctype/fuel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/fuel/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/fuel/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9489358cc4ca511342d4888d7de53390093dbfe6 GIT binary patch literal 189 zcmWIL<>g`kf{Sev5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_genx(7s(xBg zVnIP_d~s1(yn!K ~*&C!pK&& {`rZ$?lIB3>Z;?6@?IR1xA|a8B9dtDJrCi zZy=q0aTTOuP!~ H6+dP!C$E@}p zIiH)R?6xh>VkskJ?bb!SDQxqSL5YzEorlxLj3rW)aqD=q3sqyyzr-n0oEX&EbkX_j IZ(<^U0Gz*HE&u=k literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/fuel/__pycache__/test_fuel.cpython-38.pyc b/smart_service/masters/doctype/fuel/__pycache__/test_fuel.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..034960889367d675fd6ed4bfa5303ee193b773b7 GIT binary patch literal 379 zcmZ8cu};G<5IrXatg8J5_6%Uy5vqg)TNhx-ax(E%EsB$1JC! &MQ+FVbib{ zTTy{MVMM3R#wGmSQFI@H6g|( g`k0;i4%i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5jtKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuF_SlS?WK rfU*!(@!6R D@@$s2?nI-Y@dIgoYIBatBQ%ZAE?LaR148#loRPQ*_ literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/service_kilometers/__pycache__/service_kilometers.cpython-38.pyc b/smart_service/masters/doctype/service_kilometers/__pycache__/service_kilometers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..198e01726f7768653049e594caa57e3f080fbb8f GIT binary patch literal 433 zcmZuty-ve05I!fZh^lm8U}w!h3_C& mWR5rN}?22G8V|6hbf=p=OX2H!tw?8MlTIO`MEGk0{S$Ca; zU4&RFLx|l3(NwxEydNVzw5k{~Z(#R$TyMS}<$}BAomF*B= Kg9kCrS;l|%)&Eq0h>tl*xzt4ut}Ld6)BJHKgas2 WzUG(y;6 tJU;2!;VqTvQgXsdTPWkub`$@xLRmju z>MC{Xnq*&v58K70<8^=4ga4y?Z313p&!6doNNji -+H0AtFQQ5y^FlG NjZV8u&vv$rf* g`kf{7gy5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!enx(7s(xBg zVnIP_d~s1(yn!K RKS^3E|ALjX zppiJq%+A~ScyIT9vk3*;>+_3x=kvpXrL7oj+3Adf7Ft%q$XrTsE3~KmC!u|mkACjy zRVL!~CwGZhj=@b+_6F;&bQepL47ThPaX^tvEqGY+us4QTUt|MyXy`8X#{i&K1_8zp zz%;tATpj^D^s1UGZ^EANo+*4)>Ao?T?yPEC1hPlCxcouq1=i(0 R{n2|LxNGk?N@u}XN+^bgi`O+9~t=PcmD O7+lToyI%ipjJ$72HfPEJ literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/sub_systems/__pycache__/test_sub_systems.cpython-38.pyc b/smart_service/masters/doctype/sub_systems/__pycache__/test_sub_systems.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a03b134132fb584f534af531369a2d275317fbd6 GIT binary patch literal 399 zcmZ8cy-ve05I!dbqN?Q)*fW4(N2n45TbID%<>bUhEsB%Wb}D6tfe{`9@kUvhcm<}O zn+hUMy3hCdyWfZTd }jL3rA%?LCIrr=N!^{4mR`K-;e&UtOzGL8ELv64n3_ESVttF{dB3~|%S za!@|N9#gM9{A~EDHkv g`k0{!+0i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10XKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuF_SlS?WK nfU=c9er~aTe0*kJW=VX!UP0w84x8Nkl+v73JCOCCftUdR#2_?0 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/systems/__pycache__/systems.cpython-38.pyc b/smart_service/masters/doctype/systems/__pycache__/systems.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a921c8833787acd5f7d60f0f3fbee45d971281c2 GIT binary patch literal 401 zcmZ8cJx{|h5IrZY8dd4Y&YFR^> XTvYd>4sFmU**h!_#AhGf{_(Kd?nfMD# zoD(W4PP%vZd|%J^tJM *4 zCSOzo>pbeAF@hDjpOYAnOvBj0`;%Ma!>04WSijDaK1HmQHHiHT(bl>xV?0NEYE?O8 zKENH*M|=4$#J09ZJUG=f2EE(i`Nc?Q_om9Xf)ZYMt6V^D+^)#YKeCFZJ1=ydhpwUQ zu#E_`8IG`QI>%|~G@cQIl g`kf}d>@5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_kenx(7s(xBg zVnIP_d~s1(yn!K G`=I80h$7kkcmc+;F6;$5hu*uC&Da}c>1G(Wd5HkP(cat|9 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/transmission/__pycache__/test_transmission.cpython-38.pyc b/smart_service/masters/doctype/transmission/__pycache__/test_transmission.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd1d89411ce7c93fdc7e70cd88d11014004ea12c GIT binary patch literal 403 zcmZ8cy-ve05I!e`MpY~E1ne2Wup?B7fvpQ=$#OEWQG? ~)ahD)g${NIOf@o{qmLZ-Z zKDVmuGaulNdD;$sNv>*Z v|N^*iES>-&EaqA*C2h1w+#*x%@ z?l+B*ejrJD)`-KO^Je2BUOx_3g&+|-p2k_yR)r4@SrSgWQM@ly{LAg5(Ap(e{dLzz He}keeq!nh_ literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/transmission/__pycache__/transmission.cpython-38.pyc b/smart_service/masters/doctype/transmission/__pycache__/transmission.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45156b362cd2dec48db7a96f07c49a467df26683 GIT binary patch literal 416 zcmZ8dJx{|h5IrZYh^lmCXU#wiJ3<|h*jRw2i{-|L8Yy;yFR9cS#LVB|FNKkbp8yl* z1VrGZd%oxUdiL#dxd670r)T}j=UX6Cn=x6j(-DIKBPy_BEd*SGiA?+mCPwiPuOl Y6nqSFdlyIU? N&c+v>&wnPS(H9T)Y4895 literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/transmission/test_transmission.py b/smart_service/masters/doctype/transmission/test_transmission.py new file mode 100644 index 0000000..2240e19 --- /dev/null +++ b/smart_service/masters/doctype/transmission/test_transmission.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestTransmission(unittest.TestCase): + pass diff --git a/smart_service/masters/doctype/transmission/transmission.js b/smart_service/masters/doctype/transmission/transmission.js new file mode 100644 index 0000000..92b96f3 --- /dev/null +++ b/smart_service/masters/doctype/transmission/transmission.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Transmission', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/masters/doctype/transmission/transmission.json b/smart_service/masters/doctype/transmission/transmission.json new file mode 100644 index 0000000..83af98f --- /dev/null +++ b/smart_service/masters/doctype/transmission/transmission.json @@ -0,0 +1,80 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "format:{transmission}", + "creation": "2021-10-28 13:17:21.403818", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "transmission", + "active_status", + "myid" + ], + "fields": [ + { + "allow_in_quick_entry": 1, + "fieldname": "transmission", + "fieldtype": "Data", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Transmission", + "reqd": 1, + "translatable": 1 + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "hidden": 1, + "label": "Active Status", + "options": "Active\nInactive" + }, + { + "fieldname": "myid", + "fieldtype": "Data", + "hidden": 1, + "in_list_view": 1, + "label": "myID", + "set_only_once": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-11-24 13:01:53.341348", + "modified_by": "Administrator", + "module": "Masters", + "name": "Transmission", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "_Admin", + "share": 1, + "write": 1 + } + ], + "search_fields": "transmission", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "transmission", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/transmission/transmission.py b/smart_service/masters/doctype/transmission/transmission.py new file mode 100644 index 0000000..f4e87c2 --- /dev/null +++ b/smart_service/masters/doctype/transmission/transmission.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class Transmission(Document): + pass diff --git a/smart_service/masters/doctype/variant/__init__.py b/smart_service/masters/doctype/variant/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/variant/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/variant/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad8ca93a9cb26a2d792a7ca3f6e58dec4e4d6186 GIT binary patch literal 192 zcmWIL<>g`k0_pY%i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10XKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuF_SlS?WK pQuWIci!u}QO7!F7GxIV_;^XxSDsOSv JM+p`Fm}1UHN4i_X%R9OG50Yh-GcsBE&Pq=T;ZP z&nMV@ZnTw6E?0F)^3m$1A#}FGv-6Qo9;nJzl0TeurM4a&*)GrMAC=m9vQC;h^XrCW zH*6z4Z-yhBHftO4(1UPB2oka7G*(Gl %cDo(n0_k3T^cdOMB*p6S{)Cb4UKn`ujWX &{Zu>hN%Ag2|fQrwjyzFu=othofO}uiREu?M)UB31X!zAr4DK zTbr&7d5ZYdsdB2kgIn;D5x$Mw)RyF zD&Lax($u=$H6;5<%|7PM&c%E$-1HGcB1Rt69!+<17D{E#3&zj8&^7k_37xWp3qx`- L{p)hR-g`kf=8RCCxYn5AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY<~{fzwFRQA^-C_(vQJCU}AJ8%LDT8@(vDy~4q zI9b7pk>>e5&Bt$UmdiPCe7wKtSAIW(*o_&B6{kC7FknOp3NFD!CVmDJ6Fi8gSVcx$ zK|1^59$04qcSEpPak>Qqff5F`6VZ@dlk>Nf7wa@062w|pggDF*tHyL?;0wgZPM1^V z4eUN|8R0vVc~g 9L_4H5}lI8_J<1RPK<2o8I|-K@Q2D{nTnom8pXQ*z}U z(j)J|Q~1iMufT~JZ%fl!@_2qc_I%&W*S) B zPo`+aQbx%~A_5U^hzKQH2WcS5HoPJt67hztX&T+wEs=OT7W4}lw6EbcG9FNuysz^` zC1*BA&+dY1nxCJ7B1uXGNtvL6ZAco30A2}Q_)SjBobIHdj{6;KgT)I1H|h8n2p1Zu z3XNVb{(c`#>q?Faoz3Tx8@=Q&U)@+QCUTZfM-VV0Q)Sw6BlWV( x}N0D(dOd_ui_j}iP9A$vw%gJQ{+3VKB;XeaC>5DYu`lU-6DiJHhZw9y4! z`+FDIvv};{JX1=F^F!cK=C=R5U+B8(AKPs5p;Yp?e~r`w(XGsIQRdb~SpoD6Viz|g zyQDHd=DM6&$Hc@1=2W@JPIY|-y43^b0$|dG1w8ivscWOtGle5-{M-f|+M^x1PxUkK z-NTKgAUPiQJ}7s%{Y h!Oc#2)OsFjc!+9CDo30!De8R$dI zY59D2&;T4l|D+lM2tU;t+4nth?XziVr78g?*6NdYe)4}}M_qE%%)lFTnJ$Qgc3Cfo IStpL!KQQypivR!s literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/vehi/test_vehi.py b/smart_service/masters/doctype/vehi/test_vehi.py new file mode 100644 index 0000000..27f3769 --- /dev/null +++ b/smart_service/masters/doctype/vehi/test_vehi.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestVehi(unittest.TestCase): + pass diff --git a/smart_service/masters/doctype/vehi/vehi.html b/smart_service/masters/doctype/vehi/vehi.html new file mode 100644 index 0000000..0dea03d --- /dev/null +++ b/smart_service/masters/doctype/vehi/vehi.html @@ -0,0 +1 @@ + diff --git a/smart_service/masters/doctype/vehi/vehi.js b/smart_service/masters/doctype/vehi/vehi.js new file mode 100644 index 0000000..4e25aab --- /dev/null +++ b/smart_service/masters/doctype/vehi/vehi.js @@ -0,0 +1,192 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Vehi', { + refresh: function(frm) { + }, + new_file: function(frm){ + //function open_multi_select_dialog() { + //cy.window().its('frappe').then(frappe => { + new frappe.ui.form.MultiSelectDialog({ + fields: [ + { + fieldname: 'folder', + label: __('Folder'), + fieldtype: 'Link', + options: "File", + get_query: { + filters: { + is_folder: ["=", "1"]} + }, + onchange: function() { + var folder = dialog.get_values()['folder']; + file_folder = folder + dialog.refresh() + }, + }, + { + fieldname: 'file_name', + label: __('File Name'), + fieldtype: 'Link', + options: 'File', + reqd: 0, + get_query: function(){ + return { + filters: { + folder: ["=", file_folder] + } + + } + }, + }, + ], + + + + doctype: "Contact", + target: {}, + setters: { + status: null, + gender: null + }, + add_filters_group: 1, + //allow_child_item_selection: 1, + //child_fieldname: "email_ids", + //child_columns: ["email_id", "is_primary"] + }); + //}); + //} +}, + + clear:function(frm){ + var me = this; + var file_folder = ''; + var child_docname = "items" + let dialog =new frappe.ui.Dialog({ + title : __('Select Files'), + fields: [ + { + fieldname: 'folder', + label: __('Folder'), + fieldtype: 'Link', + options: "File", + get_query: { + filters: { + is_folder: ["=", "1"]} + }, + onchange: function() { + var folder = dialog.get_values()['folder']; + file_folder = folder + dialog.refresh() + }, + }, + { + fieldname: 'file_name', + label: __('File Name'), + fieldtype: 'Link', + options: 'File', + reqd: 0, + get_query: function(){ + return { + filters: { + folder: ["=", file_folder] + } + + } + }, + }, + ], + primary_action: (data) => { + cur_frm.set_value("file_path",data['file_name']) + dialog.hide(); + }, + secondary_action: function() { + console.log("secondary"); + this.body = $(``); + // + //+ //this.add_files(this.$refs.file_input.files); + //cy.window().its('frappe').then(frappe => { + // new frappe.ui.FileUploader(); + //}); + //window.location.reload() + }, + primary_action_label: __('Ok'), + secondary_action_label: __('Make File') + + }); + + dialog.show(); + dialog.refresh(); + + }, + browse:function(frm){ + new frappe.ui.form.MultiSelectDialog({ + doctype: "File", + target: cur_frm, + setters: { + folder:cur_frm.doc.is_folder , + file_name: null, + }, + get_query_filters: { + filters: { + folder: ["=", "09de19e896"]} + }, + + on_change: () => { + console.log("called") + this.$results.on('click', '.list-item-container :checkbox', (e) => { + this.$results.find('.list-item-container .list-row-check') + //.prop("checked", ($(e.target).is(':checked'),false)); + .prop("checked", false); + }); + }, + add_filters_group: 1, + child_fieldname: "email_ids", + child_columns: ["email_id", "is_primary"], + + primary_action_label: 'Ok', + + action(selections) { + console.log("called") + var x = ($(this).find('.list-row-check:checkbox:checked').length); + console.log("XX" + x) + + this.$results.on('click', '.list-item-container', function (e) { + if (!$(e.target).is(':checkbox') && !$(e.target).is('a')) { + $(this).find(':checkbox').trigger('click'); + } + }); + //////$(".modal").modal("hide"); + + var a = ['results_area']; + //var b = $checkbox.is(':checked'); + console.log(selections.name) + //console.log("AA"+ b) + //$('#myCheckbox').prop('checked', false); + + + jQuery(".list-item-container").change(function() { + jQuery('.list-row-check[data-groupID="' + jQuery(this).data("groupid") + '"]') + .prop('checked', jQuery(this).prop("checked")); + }); + jQuery('.list-row-check').change(function() { + console.log("jquery" + jQuery('.list-row-check:checked').length + jQuery('.list-row-check').length) + //this.$results.find('.list-item-container .list-row-check') + //.prop("checked", ($(e.target).is(':checked'),false)); + //.prop("checked", false); + console.log("FF" + jQuery('.list-row-check')['file_name']) + //if(false == jQuery(this).prop("checked")) { + jQuery(".list-row-check").prop('checked', false); + //} + ////if (jQuery('.list-row-check:checked').length == jQuery('.list-row-check').length ){ + // jQuery("#list-row-check-checkall").prop('checked', true); + //} + }); + }, + + }); + + } + +}); diff --git a/smart_service/masters/doctype/vehi/vehi.json b/smart_service/masters/doctype/vehi/vehi.json new file mode 100644 index 0000000..f8931a3 --- /dev/null +++ b/smart_service/masters/doctype/vehi/vehi.json @@ -0,0 +1,44 @@ +{ + "actions": [], + "autoname": "VN.##", + "creation": "2021-11-19 19:51:22.283760", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "vehicle_name" + ], + "fields": [ + { + "fieldname": "vehicle_name", + "fieldtype": "Data", + "label": "Vehicle Name" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-11-19 19:51:22.283760", + "modified_by": "Administrator", + "module": "Masters", + "name": "Vehi", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "search_fields": "vehicle_name", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "vehicle_name", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/vehi/vehi.py b/smart_service/masters/doctype/vehi/vehi.py new file mode 100644 index 0000000..ed3cadd --- /dev/null +++ b/smart_service/masters/doctype/vehi/vehi.py @@ -0,0 +1,21 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document + +class Vehi(Document): + def validate(self): + pass +@frappe.whitelist() +#def file_name(doctype, txt, searchfield, start, page_len, filters): +def file_name(doc): + frappe.msgprint("called") + file = frappe.db.sql("""select * from `tabFile` """,as_dict=1) + frappe.msgprint("after") + frappe.throw(str(file)) + return file +@frappe.whitelist() +#def folder_query(doctype, txt, searchfield, start, page_len, filters): +def folder_query(doc): + frappe.msgprint("called") diff --git a/smart_service/masters/doctype/vehi_master/__init__.py b/smart_service/masters/doctype/vehi_master/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/doctype/vehi_master/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/doctype/vehi_master/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7abe8fbd5e2e4d5f8517c7331508ee430dab363d GIT binary patch literal 196 zcmWIL<>g`k0>#bK6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_!enx(7s(xBg zVnIP_d~s1(yn!KzshEu;VlmRZowxJm_b{JNf$j9`U48QV?aA0COcw0+gh7KA1tf3_I?&-8=#bz=yoO1j z#T~?xAJ)J!^*A=cWWjD{3 xN{v-$**%5Jw;9&DsP!{K%i=gGg+7941j)<<9Gq$lrCNc$!!2mmMNs+DBKzZPy2X Gje=j_0%Ujq literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/vehi_master/__pycache__/vehi_master.cpython-38.pyc b/smart_service/masters/doctype/vehi_master/__pycache__/vehi_master.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7d67acf55f6719aaa859a6f04ea07e76a851a0 GIT binary patch literal 413 zcmZ8dy-ve05Vn(6L?s>BVaz}bJ3<|h*jNw@SxzQCluB_D>?BfWcn6+=nYZ!E#49jy zj*A*`(tW 5@|&ty#$9sLmV?HoFa5>bIFSvxO$m?{Trq0q)Ev3vN36D>rR~w&WwA>D8mSS$ ztpIeZhT6v|z{?=(kojQdhz3pYQ;VwAD4vb%Is|J*xVYT2^CxV|N>IWItEK6|q8Ya( z{$oMh3e}eVu0t^%Hk!wIw=*&6dTkpKBz)q2>yx0L)52KiG-&z= g`kg6Q@Mi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10XKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuF_SlS?WK pQuWJHGcuENQuX8GGxIV_;^XxSDsOSv fjN2=0H@`shSRK}qt)8#4cQK_sWW2LTBw{A#w z!#2|KW;nuGvo-+_J@RMxAQBsn!z5~}-1*!j^0! 7%FknOlRun?O6`07xFJNL4&v6l% z*$rg#FYba&49R7qdrNhv!^5EoCTn(|G7uEP01pcuj)uh@l^b2rbruf^Vy!G84ogJa zn7#^miuly4YO1`0Tkw(*zKtv!OY+gFwk7m#i>GJ5?Bs!JT}m!^>8)}ddUD&1rhm*T z-;wjuG`ichB)5~AeazdPi}_x-=_7_jj6A44n(pQ-l&YK;jGuR*YwY g`kf@$p&5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_+enx(7s(xBg zVnIP_d~s1(yn!K TiNr?Rvv8?sF z@c9h!X|0N}@&RU__YLsV$*e9(-W%04gx0ipdbVN5cT}aB P4*YdKiNwI;Fp1Vx?)*#=`4cY{|LQybMUR;u O?W6PY#*4kbMZqtT8fh8; literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/vehicle_segment/__pycache__/vehicle_segment.cpython-38.pyc b/smart_service/masters/doctype/vehicle_segment/__pycache__/vehicle_segment.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ef2c8da0615874ac82a78c7d3403a0b53f0ab08 GIT binary patch literal 424 zcmZ8du};G<5Vez5L{-Yh&YFQ3c7!@0v9VMzWH}l8AeG`I*h!?$Ah9y>5B!oPCMJG? ziE{#?>Ph$P=X-a4_RVs+U=(jJukwS|&p>u#Mr1|ljtMl=ykdqIoU<#YBOO089V35= zi%8GbESrCkie=m g`kf=7QQB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY 2KczG$)ehu>&p^xo06xk#YybcN literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/vehicle_sk/__pycache__/vehicle_sk.cpython-38.pyc b/smart_service/masters/doctype/vehicle_sk/__pycache__/vehicle_sk.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1665c4e289189f4a58ed21a0c9c5c2a8dcd54e24 GIT binary patch literal 410 zcmZ8dy-ve05Vn(6L{U1jvt}TM9ia|L3`i^$3|UUbK9oY71Ure;86JSw;F0hM6R&_6 zdP$0?IO)#!`MaObzF90{M)vXZD&Oh+9KgQK2rS9n5e3aOFPY&v=j@W{K!-0(hsdA9 zJkYZhOXpuy#ZvC0i&}LCt5yvc`^E_@$z4JLS t^5p literal 0 HcmV?d00001 diff --git a/smart_service/masters/doctype/vehicle_sk/vehicle_sk.json b/smart_service/masters/doctype/vehicle_sk/vehicle_sk.json new file mode 100644 index 0000000..3fa686b --- /dev/null +++ b/smart_service/masters/doctype/vehicle_sk/vehicle_sk.json @@ -0,0 +1,32 @@ +{ + "actions": [], + "creation": "2021-10-28 12:28:55.621507", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "service_kilometers" + ], + "fields": [ + { + "bold": 1, + "fieldname": "service_kilometers", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Service Kilometers", + "options": "Service Kilometers" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-11-14 17:41:14.333545", + "modified_by": "Administrator", + "module": "Masters", + "name": "Vehicle_SK", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/masters/doctype/vehicle_sk/vehicle_sk.py b/smart_service/masters/doctype/vehicle_sk/vehicle_sk.py new file mode 100644 index 0000000..e54fbad --- /dev/null +++ b/smart_service/masters/doctype/vehicle_sk/vehicle_sk.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class Vehicle_SK(Document): + pass diff --git a/smart_service/masters/report/__init__.py b/smart_service/masters/report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/masters/report/__pycache__/__init__.cpython-38.pyc b/smart_service/masters/report/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8019bae721994fb813b2cb6cf4375c17841d6d58 GIT binary patch literal 183 zcmWIL<>g`k0#U_zi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10IKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuH?93-XIf g^yA|*^D;}~ g`k0#U_zi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10RKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQi%U|AiuH?93-XIf y^yAY?Q*+`=iW2jRa}rB3^YirM<1_OzOXB183My}L*yQG?l;)(`f!y&Kh#3HPTQ_(B literal 0 HcmV?d00001 diff --git a/smart_service/masters/report/_fuel_translation/__pycache__/_fuel_translation.cpython-38.pyc b/smart_service/masters/report/_fuel_translation/__pycache__/_fuel_translation.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90c79584fd3bc39e9b724fce4b5cfa9f58a14531 GIT binary patch literal 349 zcmZWku};G<5Vf5^P^B^;@d1n(ieX0xiM hcH=wP`5+drd;%L2 zX9}W%XT9fpcW3*2J)KS%;qd5LztaAe%{B@$7ew4AF@@nqJn Ox=2;q*$4qs)p$F)9#d&_)FEH@B_H>4;T^~}=wSeb zVX00|zuoK>`eq@ifD)Y!Q6Yq7*T5g=H0C#CfWe0-RXc)JG3Xwxj-BuSXO4%*RKWu@ mV}#xOi;{%#2@l!P@bxD8opTfIP&MtHId4V_=ehTt$UXrrc2zt8 literal 0 HcmV?d00001 diff --git a/smart_service/masters/report/_fuel_translation/_fuel_translation.js b/smart_service/masters/report/_fuel_translation/_fuel_translation.js new file mode 100644 index 0000000..176bcf4 --- /dev/null +++ b/smart_service/masters/report/_fuel_translation/_fuel_translation.js @@ -0,0 +1,9 @@ +// Copyright (c) 2016, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports["_Fuel Translation"] = { + "filters": [ + + ] +}; diff --git a/smart_service/masters/report/_fuel_translation/_fuel_translation.json b/smart_service/masters/report/_fuel_translation/_fuel_translation.json new file mode 100644 index 0000000..464e172 --- /dev/null +++ b/smart_service/masters/report/_fuel_translation/_fuel_translation.json @@ -0,0 +1,29 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2021-11-24 16:55:09.198495", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "modified": "2021-11-24 16:55:09.198495", + "modified_by": "Administrator", + "module": "Masters", + "name": "_Fuel Translation", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Fuel", + "report_name": "_Fuel Translation", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "_Admin" + } + ] +} \ No newline at end of file diff --git a/smart_service/masters/report/_fuel_translation/_fuel_translation.py b/smart_service/masters/report/_fuel_translation/_fuel_translation.py new file mode 100644 index 0000000..2ba6ec2 --- /dev/null +++ b/smart_service/masters/report/_fuel_translation/_fuel_translation.py @@ -0,0 +1,8 @@ +# Copyright (c) 2013, Hard n Soft Technologies Pvt Ltd and contributors +# For license information, please see license.txt + +# import frappe + +def execute(filters=None): + columns, data = [], [] + return columns, data diff --git a/smart_service/modules.txt b/smart_service/modules.txt new file mode 100644 index 0000000..6b93949 --- /dev/null +++ b/smart_service/modules.txt @@ -0,0 +1,5 @@ +Mahindra Smart Service +Add Ons +Masters +Reports +Transactions \ No newline at end of file diff --git a/smart_service/patches.txt b/smart_service/patches.txt new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/public/__pycache__/api.cpython-38.pyc b/smart_service/public/__pycache__/api.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0470f337a8db7f7923a20b9c8d5f3d791674457 GIT binary patch literal 1178 zcmZ8gy>8S%5Z+m@f8zKq0R%!wK#(YK0S6K#Li~shLJ=b18q0W>J70XZwd+d&ITf^d z1B8;2_n_hdD7K}_BS3+eu@5O^r5Vrc{P>&k=k38DWO&rK@97W0*iUj!9tWKVDCRCI z$s`nPOiy00IgA0AVlyrsDGoro()+|d!q}0%3_h{3kg&z#m1C@An=x3CE}H2JG*;81 zsP>Y{LYXGx6kZ+|p8?8a6!QhuhwBZS!683l`@H2dr)4cjIN-oqekhI@u$Qd7D;Q?E zGjAu pbH!oGvq1L^ht5#JYtzw?Hz zn60%A>UESea^ D1?5OwFpQDvdl=iX4if!z1+?8KARlY2WeeGdppYE7kT0gDxu2o2eQJGea4G2t` z&Xsl5Jk5*vto7dNw62w=Mce3UHOb3oX-TiP5q*&*RAs}uGEGuYf(_NXOx1+n*mM6Q z>gKV-tWc>=mQxt(7FCuOHqgq{SfuP=qDrOHMiEA1eS`C2JB=)3)}N>*kyWONeR`GD zfYcCG>{@4Gv?emxK?f(9_khO{jry-~*Xk?Nmof48^U<`Lt5H8|V)Slu`_9t4`9_u5 zbc9PVBQsBRgUiypd8STz_2NyDXPB4Ys^8N{fCH%FNstQ za>Zzh_nEZQZn63bSr<`lpqO=343`k$$Rr*F&_!dne|N{SmAz@+s3JE_w~j8M@AiLR X8{C^$a#5)Jv@k;>1rRwQgqQvTmB1(a literal 0 HcmV?d00001 diff --git a/smart_service/public/__pycache__/oauthtest.cpython-38.pyc b/smart_service/public/__pycache__/oauthtest.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2659e7d66be93e6cd4cc56ed46da964ad836bf68 GIT binary patch literal 902 zcmZWnJCD>b5VqsI_5}wLheQJnMGDwMqC6oU5_H?ZHrqtG*d$r9$;#vG=}@+TE4hC_ zaaZ0?;V-zQ+Kv_~X0j`>I&6779w#%Ozi+0aQJ>-X_2ozM&138*9rlO7!%JN79F1g> zmuyD6Q?do0an2N*J5osZf=f^O=j ;w=vr_w|=Rr%;eUcg3{J|M-Vmy;q&1uM5iiKq=_l&>Jc<)ssN&3HrToG zCv|3n1qPE$*&taKU8GMAs8lOsds3~6RK r0dvD@-X?}~BO zIw+zy(E(=C)F7IYYl0Q|`hfhqWbTmZs3DT93&{#;vo1-|v9(7YvDQ(i>0x_fpvv$V zLqK^MA38(s ^?D5`ZkKB?r1x&&HynZiB{oSUNEX8!q$Aw}%$a0U@Cpy=z*t!Q4eK0H zVuNG@D|U2Fz-R_}*w}MTX`zEGQ>KgxF-q5_C}I`pGw32Ya(PbpGEEeJ|MXGs{7&~n ztx&DSlG6y}m;`#`qtd%bs6WcKVH^o=m$b9Jspd;873^{LN?^K7>N(m{UVl$`S0!qg QN-s&}HdcK`lshZ#3vr)E#Q*>R literal 0 HcmV?d00001 diff --git a/smart_service/public/api.py b/smart_service/public/api.py new file mode 100644 index 0000000..8b272d9 --- /dev/null +++ b/smart_service/public/api.py @@ -0,0 +1,40 @@ +import frappe +from frappe import auth + + +@frappe.whitelist(allow_guest=True) +def login(usr, pwd): + try: + login_manager = frappe.auth.LoginManager() + login_manager.authenticate(user=usr, pwd=pwd) + login_manager.post_login() + except frappe.exceptions.AuthenticationError: + frappe.clear_messages() + frappe.local.response["message"] = { + "success_key": 0, + "message": "Authentication Error!" + } + return + + api_generate = generate_keys(frappe.session.user) + user = frappe.get_doc('User', frappe.session.user) + frappe.response["message"] = { + "success_key": 1, + "message": "Authentication success", + "sid": frappe.session.sid, + "api_key": user.api_key, + "api_secret": api_generate, + "username": user.username, + "email": user.email, + } + + +def generate_keys(user): + user_details = frappe.get_doc('User', user) + api_secret = frappe.generate_hash(length=15) + if not user_details.api_key: + api_key = frappe.generate_hash(length=15) + user_details.api_key = api_key + user_details.api_secret = api_secret + user_details.save() + return api_secret diff --git a/smart_service/public/build.json b/smart_service/public/build.json new file mode 100644 index 0000000..1940a31 --- /dev/null +++ b/smart_service/public/build.json @@ -0,0 +1,6 @@ +{ + "css/smart_service.min.css": [ + "public/css/smart_service.css" + ] + +} \ No newline at end of file diff --git a/smart_service/public/css/smart_service.css b/smart_service/public/css/smart_service.css new file mode 100644 index 0000000..1a2060b --- /dev/null +++ b/smart_service/public/css/smart_service.css @@ -0,0 +1,86 @@ +.btn.btn-primary { + background-color: #E31A37; + border-color: #E31A37; + outline: 0!important; + box-shadow: none!important; + + + color: var(--white); + white-space: nowrap; + --icon-stroke: #E31A37!important; + --icon-fill-bg: #E31A37!important; +} +.btn.btn-primary:active{ + background-color: #c50000!important; + border-color: #E31A37!important; + outline: 0!important; + box-shadow: 0 0 2px 2px #E31A37!important; + /* h-offset v-offset blur spread colour */ +} + + +.app-logo { + width: 100px !important; +} +.navbar{ + box-shadow: 7px -2px 11px #E31A37; +} + + +.a.nav-link.btn-login-area.active,.navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: #E31A37!important; +} + + +.btn-primary-light.active { +background-color: #E31A37; +border-color: #E31A37; +outline: 0!important; +box-shadow: 0 0 2px 2px #E31A37!important; + +} +.login-captcha-refresh{ + right: 9px; + top: 9px; + position: absolute; + z-index: 2; + cursor: pointer; + font-size: 12px; +} +.txt-input-captcha{ + margin-left: 60px; + width: 81%; +} +.captcha-txt{ + font-size: 15px; + color: #E31A37; + font-weight: bold; +} +.loadingBlock{ top: 65%; + left: 48%;position: absolute;z-index:9999; } +.gear{width: 80px; height: 80px; border-radius:10%; margin:80px auto; border:5px solid #E31A37 ; position:relative; +} + +.gear:after{content:"";width: 100px; height: 100px;border-radius:100%; display:block; border:5px dashed #E31A37 ;position:absolute; top:-24px; left: -24px; box-shadow: inset 0px 0 0 20px #E31A37; transform:scale(.5) rotate(0deg); + animation:gear 8s linear infinite;} + +.gear:before{content:"";width: 58px; height: 58px;border-radius:100%; + display:block; border:5px dashed #E31A37 ; position:absolute; top:26px; right: -14px; box-shadow: inset 0px 0 0 10px #E31A37; transform:scale(.5) rotate(0deg); + animation:gear2 3s linear infinite;} + +@keyframes gear { + 0%{transform:scale(.5) rotate(0deg);} + 100%{transform:scale(.5) rotate(360deg);} +} +@-webkit-keyframes gear { + 0%{transform:scale(.5) rotate(0deg);} + 100%{transform:scale(.5) rotate(360deg);} +} + +@keyframes gear2 { + 0%{transform:scale(.5) rotate(0deg);} + 100%{transform:scale(.5) rotate(-360deg);} +} + + + diff --git a/smart_service/public/icons/dot.png b/smart_service/public/icons/dot.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bd13f16b43cad72821a82a95da50c818587ce4 GIT binary patch literal 7307 zcmeG>X;f3^wzjs?IzU^h=#5}&Bh&$?)e;quI#mNgt~k(|8d_?liWq@nCWczBq9RZe zkO~UdT5T;t97+S`1XMr_Q>=&)k;4#%VhAS#A%q0-_IJYVTX(H{-+OD_wcam(!P(#5 z``h#0-_G&BhHRWM^)FK=O`0@=zG;2vq)9Krzb{UDWeWTm;yxUmG-+-qef^qk+$Wm0 zy;s}f6Kiw|8z*E?_>wU1!^dkky?6bkMNKDvX!zB2ReDiV$h;ND)W<5nUX^&i=hW2o zX~&u$y}VfEoV{T~kZWOym&Unf&W4s>7yYp5m6>aNw`R|3Sr_+3|76C-)6{M}PElsF znPr3ZiCuc3x!YR77CjX(4h{N6?(1ue+p+st<~d)*Crb}r;`+H|)~ModEpvoFI qFp7vyoz;xU( zYO4^NFZUHDB)z7#@j~khzRK;LQ@|KExs38&BXqZI!+j36CF0rE8^*CwJr|X^qlOHI z{yH@|r~CApuU(wg7c*? fqw9}J!Yd7jHWEe}a zdDOB??L@`Cwwq-$Sl&>F4cunIvSm%)e;E1fy}7-Ys21jH>Ma6G&_db}zejj!Z=;^y ziP#n1%{y~ub)ix%E6Uo#sr$m;kw~Q%&rW#Zf^r(FY !Yy zr*#->RO$DiPSV~NQ(Mk-i|E6_A79znuVLt`seS%t=~Qf-i!B(2!sl5g@sS^)Cv97E zWuvAouRC4+sKHeO^q$wCKC qlv@oo(u`$0B9i#He{)){MGUonK zI8vP~mzk-`1uNUsnKjIvQ1$UnL7pf<`&oOr$D? gKKd6<7GJ=AEat*@`2!&3O+w^0vs7~U~`ywnyGqq!mxD;E>|#<<_E z4D)++`Tfx91eZ*AsO>YA$8`sya(nkH95PMYkjUcIqbco1!dZFTFzi&m>EMyRlp5cY zw#lFEXKlcHE61csF`8dFLBgVZCpU%kB|VoOd;3OWR6%J-mZ_t|_hr9%e$b_|`AziV zH FXh9RDVYsv5Kh`eddni6){|q zW=wuQ>1f659cm3> DQSUH)x ehtBp6pA95u~@|p4!Nd5?b>BJkYj^ zCOMSSmqQ-h%FErkRLvaYs`P;i!&`sdt2&h*j GVD>%r z&B(bdrL3+xO|lvH^{>FZ1a~{*$I=t4(j;f`0$vhtml5Rp#neT$08TxGR=d%vzX`LA zaszv-&{CDAe1oVE?bliLSkPOUw4H2sISqjC6Rq?;{uL-PKkD1%>4Tl-EBQ%0$ocfU z(hv7@Jxz@!s~(b(xs&LoIvt-O?!hbR`D$|ygsfyaEBSmtKLZ1q6BE^sL}7N)8N@Dk zAIys }kfXv|+zfv593D+!i{GHITx3M?rz@p*{5wh> zEprrC;|n4x)uocUiSLW}W%}@m8DbT#qK9ytxJ59xM4eYs&A&X>x>s5B9Uo}iv^zDR z?G)mJh|0Y8h@Qb0P>!q<+@KH6q~L$!1q5Dy;NJmKbF`U~6EoOrWfiebsJOX~sH&)$ zBxIxTY=@f`v=#K$AT|eyb%QU6JwecD-EZz^T!4?jl6#4lA-ENl0v=&vnQ4>7Q^Z-Z zMH3JT7VTi+*?{wryabUR>sY^+2tON-@0})6v|W9aC8_m>Scu{n@TTBt}>vEvNf)^zEOu8*Xq;W~JlRUAGFK3NDae(JZ#s@O$;) zup1nPu!|%SnNquMsd|o6yp+|OovXtUdRARzJ!62IfZz9J9GU^2R9<8eTv|$ z QJxCsN> ODC z_8R=!;53L2QO7wC;P5S$bCVSOThnR~dsersCb9E)0Q(J$2}WUl$03D-1WXdvR3m`y zV_`m$mz5)1HaE_Vz2(tflHaajR?qhaZrZ4yBC#|5A(*EM_eBVu1sAg_z!vWy&tEgW zTywUDSsE5-z5 K`O^OZ#+3^ ~#e_DJ)q$_W zxfk@H${FNoP=-?5swvk(X%VO4nXaJly9CR0#A6)u;s?Z$Tnb8&h2wu0+#)#)a!6r* zFnv#o;{ObV1k|bu@>4T$DrqN?houv=_2j2pJQ&gdx1TqCL!!44<=T&W!QE?#NV^&Z z5F)!FMBW)n8X#?9f)F`{l(^rjA_3Bg@H+iK+G5w~;DkiTIh0xpxQ4WC=Bi#l{IB>2 z6Sno@km_*ANRMw+8*B6I`p*B;axi_pNb(SrfP1sSz4tJf#@b^@%67QNZaWFz_{@`( zmxJQKj) r7hmw5ayvVdgh(q F(4uxK&;0}vuhN#VgbtAk9M!ldB#P%B26s>+76M=? zmw+0 aUOYAJU0~mk9O-R(* JDr#;4kgZ0qn=L2uY*pWKZOOBt(^;F6>-RkTlZ{EDzy7wwio{96THkD zIAV!(A5_<&sze>;oLiw?WGIez;zmPqFdd03ssWlsRck@_Hgv5Y?j5k&-4P4KfIXTt zDn=jkug-H?0xd{CykKPu*&a;~GYhMZ(mHVmJCefs`1|hHuXP6hY&s}ZwM}L*p(a1+ z-8CPmjECTIACR-8A F?Y2q7Q7_)XM$`))d5zagyOql5_?_H&)P z5~170qsp^V*3xn&8s0QBDXbb<4fMeVQVPi=G0gpd>uU0{w`tG&t-om=W(PMVFac^T zzY(vNFK#3CNYmzCS}9mcIKRchz8voT>Cz=uH)@78lt$^c{oGx8zAW}K8oT^(Eh|8t z4x_~}PNgBAbN7lJ`hd$6`n?OokHG25&Jz8bFr7GqTU_;xE)-UtEUCh_3P8&c$WZ(y zg++le(gCKh5Kt< r4B%Ck{%6gF5-!YWXm&hd zk_I=`r@64t$jp~7&-5N9$1BPOC1D!h29s1jOs*AL`^+^3#`hdR<#mPQ{q~V-GoIlZ z$yi_(=(^IIpdLRnD{RI&3U4&*^ceSu5`r=A7bk4SJfCR42ZlN{IO0EY!S3rY?uGQ^ zIQ7l=I0~9$wI?g{sKn3Ic4u$=SeH#!R#sBO$GM^|NSnR*QK}T?$SQo-MmJuSyMn?N zg4f-DZ_VoV(sg;Bl0+JxZTAr1+-B&y@lSo-< NCfP6 BuG<64)=cM3v+k%6yCn{7**HOyDr?B2xo!zGJ1p&X z-D3@q#i(>qer!J-&5`{gcAGIB+cur2c*AD0yqZh`- Tw?+r4qMN|j*&BLC728)b7?q&4p>fyk> 2KS4Vt?(jU9dm94yF5!@yfvidW~~9<-Y|E5$ma9;8=IC(j;pJ !;q0^X6 zF!h-6I^QBpcuTHBuf{uI8E%>t)&M_-) zDt8a-%Em!WP;9htD|$-54oRS!)teofL9zM|DXRH$S?Uy`^{O0R!>~IN7vZ^7_NLg( z5hqQXsN0wlEF0&d_r|KuY^twAa+r)^b!vqgl}2w2dSDt=p{Kw4I%l(x=3W+Tb$XT< zsrB%nU@Vfzy%FvY5{Dhie(?0|@v=m1yz@^28EL2Os)qXd{RH%5;im<=%fB5_(1PO< zg=wO*{l+`U0X0F7+ vdog00 zn%d7?y{JoGB2TB|P0;an-RQmNY=wP@Clp&%{9W~em7a2FOOl+>)y%*f(!IH|y4P$n z`rs!08EVdq@(A0*+W{BC!`;NwAi%Ie!Nn| c`|9`~+dxm4{t)~>-%YQAiu11* z@c-COyG<<8(Ut%y^WSUPyS;WR{L=;=1sB3o&Yz(Bk5~N9&4@zbxf#ibe;$pHt^eB( iPXG6$ZtfVHm#)c~VLXsp3O_PVqHhRUU%d9SZ~qI)bVMxx literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_description_black_24dp.png b/smart_service/public/icons/outline_description_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac5de53b5041e7a48842005fb4f042fa569110e GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iFi#i95R22v2@B*uBvhRFAkTa4 z@#PO3&X$b23Yk8FHc ;AU?M=}%?-0gY)Z`?6=mz3Mz27kV4 rwx)ybGo)-brUXjV@SHhN!pyL#dvV7FiBGCP8yGxY{an^LB{Ts5Kp-)C literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_directions_car_black_24dp.png b/smart_service/public/icons/outline_directions_car_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..81b1ee0c698150fa89682044a0f4351016d3d107 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+i>7Fi*Ar_~T6C@rknDtQmaJ|k4 zZD(Gyr;~W #rrJQP?Xb*RBe{Q~P$iGPMQDGv^; zYV3Y!91zACx`8X>6o1=qiwFD*azt0Pd0W`>G*1sOZD{$x$Wz(jpnYNMT8&2rf-+Ke zj3@m;tgM?3i{v>Rvoa1mS1`G$?9ixeVftXYYz70vQm&c&pN>|q06LMu)78&qol`;+ E0M=+rY5)KL literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_engineering_black_24dp.png b/smart_service/public/icons/outline_engineering_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..de3659168c618036d98dc0f7247aa50da98b5ed6 GIT binary patch literal 330 zcmV-Q0k!^#P) 0HpdDo6;?dz`{7KS`KhmA)r~a~Yi_KXIT8~+6LF+rAR;1SV5Z|< z4?XwV8Y&SH5tW&NnCO{^(lZAlA|fIVO!fV8E-no1X}A*0rk2H(C%a H07nd4Zh}X3| c^TGS~7u(i%#!V|VGynhq07*qoM6N<$g1GL7ApigX literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_folder_open_black_24dp.png b/smart_service/public/icons/outline_folder_open_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3d4c78afa35a027ff95ba517de738339b6f263 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1cTX3`5R22v2@-k-<~}q$T(1)0 z?{T &+dhc!ggsN6nqcYx4Ey7;%NMTA}eG4!}}grKFoh6B{y-FiOq#c<_C|M cZ((G3?9sZo?bnw#KqDDEUHx3vIVCg!0MP|67XSbN literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_manage_accounts_black_24dp.png b/smart_service/public/icons/outline_manage_accounts_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd433bcf7adf68dd767d27c30154c9e63d071bf GIT binary patch literal 250 zcmV 3ddiGfl? zX<%|JxbooHo2?R4vDq8ki0OCnjhFo~t}&BZ1u;9w?`*|~C$}zLfSyIIPx# literal 0 HcmV?d00001 diff --git a/smart_service/public/icons/outline_stairs_black_24dp.png b/smart_service/public/icons/outline_stairs_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2e79ec2dfcff06dd0ebb2f2a8726949e55555d93 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+i3{Mxw5R22v2@+clG(R*vTyOKi zFo2b-q9xpt!_Mg{gU}&%gC`p^PqfYU^X8r0S$e5P!N#wPZAP-kB?11HXDy~Pnnjb0 z8QKq|EZLwKb+~ZDa?cABd~ ZjycDs^Tu870q5U=%lU z637$ExD8bD6tD3UBdFv#SXG}0@?<~gRBQ9nV4=;oHzm(}@hxKON}hw&+KC`fhSd7@ z+w)~QKvMD??2A%_-jqBCtEH1eo+UfMRq`C{i&BK%lspHkB_+?n;+ qq~ux3$cW68uH-o=C`J8<$rFk0A(1#{k^p9G z#3e+0Su_%6a$z6bHd)pU0C-*6cG*tc%S4_;^bi1UOtm(fQhlmiF9K?L4t7 |%(*f$}M zor&460q`Y3pMRR%-S}xx?#u7Z{s1f*7d+o1LSQ{V_iW>l$+KZEHWBSxL`&zMJzAEw zHAtO=jp?;#n@sene|e7o5a9|Uekd87G{Y#*@p|JtebD~=>|T?TT8@7Fe*bsml<3`- z%r{9UYz#@y 6vV8R@&{V-?!QMAfCEaA-W%xp1D0fyN-zO zB=wiq-#K#)5tk=-H*TBsu{}O_6%jaDW7_071KBT#Xe}%9WYR>$PjVcuGd1>cPqj8? z{PTSJ%G|tdQ5_M-4CddzC{g33cKc?K$fFw0l{~pqgY-{h^8E7Ew=de3^+1A}33={} z&(;C4Drq+t8KTByYjYv4?X=|i^p)B7sDg=PXErbT V64eigvpl~Xo0&d5b?WgT$cu>H@b9>ov;pA3Ao>nl zuWnlRCCM&O$uoc;fAy#W{KY-i9}z9Y<>jX#&u6b(nEaphoxcOZcQc f1NSvOdZjZ(oCK#ZR?1FJ|TQ zd^$ecAjGSAj+xs=+rAle+3bwZJ_f`tOEm9sgtWgkxw~;bsb3{eA42Z7@yT(0_58}> zFW^*b^K3L3nfp9 xfoy)aA3U3`H{#w`F!an6t|6h^FGwvlbaVtq*>Y$w8`ZXb+xNW A*>zKCw`cqxQ`g7(I8}o=JQPOmN}drw56gDlKfJgX(}X-Nn|^Own16jtn{G`$ z+x&UlTHYR?T~0dGC=z+bZQV`CEY17RBy^_Tp7stnO!_-c@(laP4#{@?NDWClKgaE0 z@Rcz>(BTg9Y~SR|9``~H(m`(cl0;&@Gco%d0M8_~M?`-?#5eOkHRW+6`2Z!v>1>5# zQfY_fz{tZr&O$LEvm`x+{GCtN=lus8CjA`;c{16%@w{E};?i}I0;9ejNebsu@&o`T zPZ$}=D}=;RAdxjj72p%)%LW>aBTreJC()-C(Ju}9bVLu)8V7_A5a37BXXD6|F}6oX zpGexuf;^oxPqJeVb9%SH<~qufJbBCjv|J&Iy#e76k^SL42?fVNo=k`wx@FmR?9L`? z%&Y@8f+XvrADJ{sJ4&7|;wGU={U|BvS;Mbv|Kte}8YG`IPVetK6SMaL@Fx=aIPx@c zi)2Hdy$2GKIk1e0j Tp~=$w+LtC6fu z+ntvsr +je)2<{Uey ^6eZ7`$y2&bNqhss1(ZCMJQJ7BNhME{ zZFC}tAp%OCLqMJ!#BABHglKnFyiQc;!NFEYH6coTt|OoaMggFtE|z}%ancW}9vJm^ zU}Qj^x0AA%!rrN1QEh|%K;t}JMB^(Ii9$0{<@SduRQh5ndG?~G $Bev zl*u7i5|Igwk<1R&^uWkPT)0@2Jd;+a#(8!jWI|@TZI54EN}lof7?V?02S!Ss(TdSH z&-g`~)wW$yd^hRaWkS{&rDyh?VI&>1l4p_0lc-@4h_7Cbo2o%=P4#)65T7SclZd$1 zshLmRhYw$K;=j%$ZVeWVJT03tsk~$(RHgTmB@wo!XPV`jCw=_0{=1Ur2_ny|7f+eU zbCB40eJOcncVKiJ`cv{$^2}x370vR@1%!k~l{}R^Kc3v(csK3hQ=eygpJ&c#ziCzK zJg4ND44;yxlBbeq@_W)FAv{D3y#>;1%%pmLiXry(h>~YAd`g}&@)Q?HO@=&E3Ej3A zc-ziHH>paW>B{M2OPa-pLpqmXyEW54ZY56vc@D7xl{^bho;-Y$>g7_>=~r%8EYD%Z zC&{(Je@D*P5GtZE)!H-;)ycDcw+`U4aQrvIF3s|ubqRDSi$biz@kqoXG2a=V`;>rA z3mW-ss 9{yzZc0zAntQdexr35!)Xr&^mv7r^-kCY>_? zi2C7}WJ0XkIh9_Mfa;f-YDK42W<7Vw*f`#kL#-sTgOZ8E$RW=`4Mh7<1QY>9piBrT zd6r3=Iu}Ji5f~T(N}dCQT02q%6oE1!pyXL5ZR%VU0YzY72q<|D3~KF25l{rmgn*J~ znY5{MQ3Mo$fgzyeIWVZTBSk jl}4jE#KRO1P03RX zl?o~X#Ycb%j4bQ2=}eGl9f hvMv13>idW?x&W)vlP1Vc6uAJcmsqIvzzJ zCj_o7F5W X%)q)e6r&g`a>#c`Bm_C;|Z2 z78ceJ(b(z?!;Xmd5b@?pt(KUw9VAZz_+qtI^Q_Rqsz%APu&UF6D+1{exK^!RM9bo8 zVlO+b5IrQKCI0USz?NrKvYhjG%i@2l2=KbUSF-I(tBpo%eGJD{fVjk0gb>j>5-p|K z{->X9K2Iun=7X!Yst61{0@oK8$r~gA++MBK9P*6&U0YmSLV#OG&k^md*6U}Jo-5SYPAZ6RVWc9&qAq72dfBVgFw&8yKTQ=;)lGxxX4!|JN{B4 zy0==dchzcj2o~TnS=JZ=IPskX&_vt5FYTvVt&W`nxJrogp;sysH3@Nj#J2B9PX6D2 z|NVK3=rVBK&=+A-9Y9k=5h!_Pvlg`#MW9d!1bvsLp+naf7S;jr9hZ3StkmmAg{R#E zq6dgL76gS)=_Ni=CU+pZ71l;rn@Dsiij*BI8?oL)m?0W7i6T()EYy BTGJ}+%KU|H_BZF@S5+`RVUw)nw5uPrXJMd-wm z5`Z`Ypods{t>46mfG$@?0?BiKN}kdcqjHKsNf7Agw45!p5yU5+FH&Nm1qd-Ro-`N% zVCskU)Wh>TKz!^QqlkpN`d9KS$!gbWC;}NG&=aO4wD8;lAD=+S-^jnuS86ry|B)l~ zTe)#t{H(~+Z$V0YtVb5I-&!T=Is^-woLZh4E=p}m5hwxz!2_M76ic@f(^Vj<9$9ll z_Ya7waocsqq9+(XCZ04%o{~eGFueViE&wEM*L~#q!VfHXPRX+ft6j&a2xN#rFih#F zX(B#-?y8g&jIU%%4gi*=*+{0=r2iBjh?*6mD@mu`erSUIwQc)s62ZG}46Zii_ CK&t9W94ds^FipcWjVBGuod?9_5!=2eAyNNny&JQ+7W^P| z>4=D9K>d*h`(WD_C4u}(o<&&gIz~kxLj(dbp1|97w5(~4dGuMK)BYNqNn87<;hBUf zd2NKod3OG|W)rR5t=I2G^_S|y;5NpYQX@o55|ZXelsq$Bl-iUcPy__Jw#G4sK3%>; zqUK7y{)XxN{6tL#AyH0-5dar&?ka)j^iQ;911yD+Xdo==Apz_mKqmp >_JHpnE^6RPyWxJ$+UYC>R34({D%!$q87WTPyYYd6Ox35w+k1 zJF0CbcGI%B7&BX>M`@I7LHaFXB~KIWsH`HO2#65~iSdlJ2K%u-O~RC<6L8ZgxpI9c zwUmFpicm_PQY2MQ5l{q-5HOAL*`nefwo}+ir@O$}0i| zMxZAYNKgbht@UXdrep$Zz`{IAzx1E(bEwh*(fOo!O_P3=Jkz43&nW^0M<5smB+VaB zV|@m$>xfO|WGnRmpeZG~u6%jl2f!_O{E4R~N$$NwrH-|Wc)@>ny;`0U Z>B~V6%U$mxR$-g0Ua$In8{nRw#CxjlyN7H_o+WuH zbQ+3)1c83)cm}OczKYoClW0FIBPS5!$@Mt-w0zG7n6`+ 2(t`GXq z->!S&&N=osyd3+mLL(8ym>WRUSgF^KiYmK>PF^R@F!E&@`P&Rupz<*0kB*Y3WW}kB zB2W?pGOXk2M 4+u3tx S8}#8(I0DygyE?6+fk6pnzaSfD(Y9Mgl`gy zgQA%DK%@b|N#Oqcb9UFJhGZa!E%L$YwU;ymJN#Z*PEObJtO+6+C2YPMl;zFYdj60! z1Ya&}r3CTWOIHWi{vT?sk3z4Pj(?Ma^VZtWI dJY89y6#p=_zwholLEp*=zMa%0P_vH?2jIe*4F_b;)NhPT-*P*KmY `5q7{1*a17#UzW%OGJ#AW6Uc hsP4*IHXn7&YXBWl3* zM-Fa#{_~uUQ&kl7#N%QosyyJmUd2kxf=-RW5r#zHXDTWQIk-P`i*%hXdvEz7+c+u5 ze!1)5q|Iwf`OCfM$*zZ<&GECXbei(c_CF*gf273S8MCb@o`Y}$jlarU3RLY(**0GC zhJJHF5FN`&%A&*FFw0YI2*s~=h8VGq*6P0$rMrjaw=zD|U+c&|`w^Y_Fa;!Q@S;r; z?9NvQ{!kDY6> n7i%A8dqnz0 z{8~j0M$q>xC|xI+fz+9fe4_0Hq4&{%yWc3f(t7!#yVAu+Q sh%KMgRK#f@fjYb!hwo-j=#$1g_OB94& z!5DxI%rQiVws$2NH 6ap5vAG`x` zN6wn ^RGkumGv3+_FH(%%f-6;{uUW&Fmwaa*| z;fogS;N2o8w1rK^|2<5aKBER3yF^wp ^(XXe3EWg^D{_Z`C+6_vO&KcEQ9B2^j;3}F*0V*4y>>2zcq z`F%==rqV);Sz6l8LZi$vO;Yr*;%XyxO4OcPJ+uKG4h|{}m`5sJVq)N9HQ>=nZ4$DA zK_B}f7dVJ-YRgO))Cp`=m0rT#kOp^GOKv{(V+gN W_*BL&b|p zwe%#enG7uEWF~ay()-5S?qq^T6Ycgjb7X`65UgmZ-H1BlwDxtAK|7sB}SnS$W%V zZi@LDn;3^44TuI1bL~3dQAF2srvJIix&C}Q>h%04HEKZ!pF|BI3V@7vD&fKm0{y&m zDofi~&EhsmutG2iTP5c`as72;D4~?foSJM3TF10qvW{TaaX+oeZ1dolC0w6&47J~B zo3!PKFN|zS9Zy^3QuT;di$+rrZQe-yo8E@6&2soPELcww{JUR1{)PbG?&qIjO&5kp zYRP5=>YL~qhPUd*c^}%Ulb!cfTm(do^A_+qy}kT72gg)fMFR)7i4c#c_7Ja*nxPmT zL58Q0&unx4;M`fe?pT|>o>t)y5hjwasnC%l$Qfqq8f6;y?zO+7Tlwv!%@Pkt&bAFG zh>U(Czq-NW&CCTY8)+G?VoS<;53REhvo%o!& UN>(=@C?taTiJmQ!- @(K-Gqfn&o5uzGRe86mCA(Xs#0> zrTtbc1fa9IrE$xjIbr5;N8=s02)q}QeIRwXviN=%sI&HY>~wd&V?CK)V0I_X(n&+p zZy|Vccw+}LbAF=VpmNtx$z~|(d~Xic#SBvbcP@dYRdxCosX(4u_JY(_X1GRXo6)~I zI>p$Gtq*~zW$PCt1fL@gh60G6RKeQBnppToxzVqbVW_g^4l$>Jwoc+b5{#ymK2Mbw zSM(9OJv)2xXJlHvDAZx&WqR1=p4)$zAv1L_qGCt^<^_+c;8#X)(~v&RP*<}21@+N+ z&-W7F^$gcPcrnt6(%%v!iK`^?>q<^7RGrqJ9;*AvnZNQ1>&hHL`m0C ND4@fSU=da~xUj3F@7(K~;QuLD3(9pT;oqqkj zaCkroJeAANa#=FId*buXHhZvJGO(@Ly`>at-RYgkNt *aSNfZ9v!Kd6ek~f~+oN6J@Z&S< zFoD(z3M0RmG%D}v3JLGLD5q3GvHc@l7v(IKXDQqgEJ!?v?V`*q809VYyD$xZuULk3 z8 dr;QiV>+*_`t>i*?8ZU$?lZIS$Xh zEF;cniU##+Z(YZ`dNklXGO1egrMWapMue$?Y07mO%7~fxx7sQQRwtca-u1ud y3B-ACxweZa|Lz^WX&F!Bjb^@)X z^X}>;){4dNfMO{XAfH!Ge1o4kwz1kE`dRDezanj#1f` #q2a-6vGdFldr>tq7V0GiEM?# zfi}*7!>O#=b#!VUxI+>(xZ}gpw3>VNj!E{SDBGQ&czodd8Orouv1)H;(_WKBLFaPq z7zPvj`wMk1R381J13Vg)BCiDH-v#dduEpe(YcO%MpTBa<^RpP)_z0baSVduReTt59 z1-HPRZD#Ln9e&=SX`!iBD7?h&`ir$Ac`EMUgsI}pTq)y-iblAYF4n*h$EnO6?W%ZK zs`Yif2QGK#7yR8#g{bSF&9=oh>dp(xvOhDns5sOkY{ B1+$>H$OGS7Wx{wTQJkiRUHA3;e&qasgfU80lRi6{D+=-JH2iSCB@+8lmFhv zG1`7o?!^tF6#HvMep+@NG zkM9q)!AtwR16cwM<|mIm3+7Ex(`>{_ok*8I^4s{_A`G9@12FBy0T-m6j>M<$J}QU` zb`L@VBmlQv9%m-mi!J7|uCuz9O9jIA!rn`)i~M3}(ovdN6;&7;)v?XR3gC~T^>%_6 z>K9Sn#&0_#3s?gbHHvv@TDIjPafbAA u%=&NpyeQi3dQuWR8evesf-(@YrUbk z`FR7 gEi^-BZ@-MIO1K?nxL^Cx$JW@gUMS=bo@wqe$@8tE`+N z-m=;BV;*^AyDpueF(z#UJn+%g>e9i6sPWU0SfJP%w^q5T7?P~ZJMn`p*utynN#bo! z6J5^*JDpu5U;&XL6iZmH+$haD|I8}J5Q&nHAz6zt$ zEs;-Hbq+WfL_VpzJRGBB*G!9Y4UVdRZ+*#qP!Ij1z(+Y2hRywMPSpLXow$|MS<=t+ zk#=%m95z#J9UDe=LF6@#`WdsWcy)~sSr4*Y)7DohF1FtkxyT6~C%iSmZZCvMm{)!| zN9GdXK2MrI^G=@eu~?`j!CKh@#_PGJh+P^r78EtlRHvAGyJF)tZ+`=BAS9NcKS?dl zeLg|qZ#Z9gkj8HA@xp$dcx`x{MdeHxN{+dx7P{ljUL&6~3I>dv=zpY=^v}}l++*O% zf}$}P;DWeNGZ)PP*8OAH1W1vai{nX)VslaCDaSkJ>Ph3_j15?6N1+YX`VaN-7b;*@ z8hSl95o!l_?PvufUrl;7o<)zm*tS~kgd0!O8><#7NB0Dzo?7x95?XuPI(DyUJ(hJ9 zPu#MswX$KzfvDwl!iN`}<11HiU;*c^7#`qb!X(#Mw*Kfo&oCKq5A|50Riv$o^HoQk z FMrR@&tPqZs9;bDwXt+OHvaWm*Z^SJ19Wg->I6pk0Atl`SBy)Y!t zPiI)23N6N0B$@Hf3}^GXYC%!hlKYYi5Z~<1V=BrMu*578x J~ z`nv4HtUoDA6Ip`RGK3GPCd_qZsR+?qZ1jQ%m`rj%`sB9@w)Xg2yWCty0xqmSC#tTh z4HI%U9&Qzh(HxakV-ND{WK-7KG#5K57P_Y>FH#OpiBN=}-pt4&(IdJ;0&PWq!|P4U zJY%`s74UWJ?&NILuN8RMA$h;6>Awo;<^5q3?duTgKDNVJaxfVe3?KcH1DMxFw#DEV zWKQqD5_f)iJSqO9nJ;Kx-L!g!jAV ?)LwL7e>T zy7F@_KbG?`eoZ+&txSNYDz^Wogw@%iR;aHXwIxB8s;(k%*Z_1Lpyt|6de>o0;nW{* zdA2_)29r3jnK~ff7O=pwEM(BRzve1EvYlco8CHJ!>GtCk{hDjYrE4nv>baucCyX-7 zL>jRy^pW?<4U6G_eL!CW1FWYt=aZ-;Jt#=@0Q^+B7eiT5HleM03h Gncxd8{wHJD(oeeMAq6qXs%#w!3}) zxZqLYusImtRG~cc7%}gSLT*dCglDWbr$FiwF?7%Wj45U9U{w;86b6tTjsb-G6BO>9 zDX>m2j- 4NiRS@Ic5G0W>V+%27}HAW zTEl> ?E -W8$dL?h#xx%kjF?is#s4q0UoWCC!g)10# z9JDjpPOhZC$*C#qVqN1?)gx{OnTvg%TZG;JqB-jm?#dUGvHHAgGCVH|8qabUz6_+F zX`bD5AB}}0C`9W6V)k_k!*>tKD_XHKL<5w^Bc>Xa(4*P!CA-6Yd4A_-Srhls+0kt0 zXUl{J#`HZXFGT@gM{}C+3_)Pu2yW+PHN)Dbk5B3KhF9wHvUG}_S;a>y=|0~R U%r$A7)YJaZ9$PNE zsd?EJ)o|q1R2&T@`D7vT?tlotDObI%b{TyfUI#z&-DzeC7qa1cqdzWG0rxCsR8j2y zY)GuK_+tr##LK;dtvxeZjkJt|1%Sbc )!VD27(0+A)lqC+U4m^L*l zCH kyjqzYmltI;<$ z+xBctvxeSl)Z0NPF}fVV5hV|HvP%SovWaz=D>+XNO37qZL*&3dedN$Ev}ma*wZ?U2 z&wx{$W12ijIY2(3#NekFdnYHo)XbljZ}ripU%Ty~XT71dP!E?HH)wLbdC&cdY1wEp zARBN&-Tba|uf%OnhV%MUAMBf6 M}r2g^yv2j%$yFgWW zBM``0e#@ME`dFLk&}I?5;97mlT((c6pI`0d%aeIh^UEMz&=>ufq>u)5+~QwClE{8* zQ1V&%uyjDksl`+hvSl^i){z^AA2uk&)L2))sjWr7<}b2uzO8HNFsA+UAxSx&R#H<9 ziXw@CI* ca7(_ENdZAfx!lUPpQ5CQQafG>oE5 z>63(PU&l^V^o{f=fFG>uH|*ku%Nm7jLH(r%$>t*F&AKc-@osBanL?DrHtN<~MeY=U za;So|oHWtEU)+x_QFDuS)rm5#<*Efm4!r!Udtz}sun|4+ZGrZO=RP)n_yR9cfW^@P zAE6yjd8TopnCsl9>#2<@4hO#*3C~S`o9tS-++BYs>GSx8M~6qiLvCrWR(A|2aS$yY zQt}4B@D-}@4?WtY(Mmc{7+J`JU#Atby|=DWlf@rzvq{4ysy~oyG`b%x^Z*U`)`6IA z(dW72zh*sZ--uNNnN2Tmy^|qFAGy{TSjH)aq}vjdl}1L~g%w6QUksI{!N0M_JL?p{ ztF!cbAcEUYwQ?z{gAnDmNCe>MC-+00UKMFOxTj(&;A3}!l4!o0;j-CJy`xk>BNfn~ zC4lrZ4mA*>mJIm1ouKwrND|kta1=)|+SPC94=(q_E1R9ZAr~L#@?B5EjSP4crH!iQ zcXu% Y%AN*tMKy79~`wbs7F6F@VkK!nV~#4ec9T`%E`bW?*HU#cTk4%OW3Gc z1|sBLK6m|UCbt9Eb|;b&2Iv? vPJFVtylW<^lu@etQPEl! zyIf2QGyqBVVrG|OeRYUPVonjmiiWP)sLPVEQE*^YiqLgtL?Co+1Z0YFUQ$Omg1@R8gzTB CL96f|;+z9cVgcd7jjL<=H| z@B**0D1sZ1da5ZD&OcKex}qljYOUIL6e9M^t?~B0D^`$RLaTgY0`{9Z;1X^eH6AU< z>^gs?zlU0MPo*^Yzc<8`;8>r1wuAMn*F-FYOEx1c%Jm)y(bd!HP1yZHq9WY}KgtOj zyJ5%x3alqMVqK=MWG2eI6IeeT9zQjnYmjDGmg)P+ >Yqh}3mLQSGpJJQ^ zG6QjdG8axD(AwJs{W&D6E!iRFOPeFypQ)ygDS&|i=o}d3jBl>-z9FC%v=cQ~){g)J zBZ6*}_NhQ*n9>Z3BsCjcmn)*Rr-| e^$izhpa1!Chg%QRDWN3DZw z-@qt5dr-q3y$?~gDgze_S^O*A#+XU7ICVxti#$ihs*@rIRw^^Tv`vhx9o%=lA(}Wj zkX1D%+7U({ZSAE+s##945&gvQ7Y#^}5 g+ zKU}keB*l%f@=P>sOw~iWhZU^e+pe_xV9Dq^g+)yxSUiycLmd%%#JhbSuq!wt 8?d1w z8cG8g=V
{W}AJ!PCiE_4W`?I#%b6YHM;)fdKx?{S-Zdtze!>TA;~#P)BG|KHsZJMyH9Pe zn5+c5@}M}xO5i+n4#V++Byp*Lz+2QAFO3Y8-e6ikS% hans`%$)%{vd z0@Mh!VQz+nOi4)dpJ(08fS}&CBI+FwX$PoKo=LTG6+BGC&Ec=8AMximgFIN>ZJy8} zT8%{-8}eamz>f-OgY~fUn_3C1ovq25k#oYRm^&bv2Q82M{PQyfFt6+E`8bDLR-0bT zL=*WqrYtSz4gTIiqcyV7=*H-zPptYet`KhG02a&8#-fwG(3%0)eDsffzq21 ~^(9YLsKHRou<-$@f#%H7YQ=`>yf?`AuFOME?o=ac z%bl1L+~8 St7Y+^PkPBB58PvHSh{ZN6A%T-6KffNEf%a4S~5}{Rr5efDi?G|>| zP>ySy|GKM=p7xGO;n;O7KH!t$Bum_MGiA8g!S=I_U V}e6?K!pUh?aZ8jyf&W zkwGI>A9Db$w#si>VVyuGL#}OA?NxA>pVdpwVs+XPqswm8L0yTP0|h*-144yxhH>ZP z!D~}*c)X`TgN(REDqz)Cv@bIp*$uvMNqsm&$#OSfXlrF;h<>>2YXSId6%F>2Xp)x! z+^T=8MXqLpfen$j^ ~?~Fpbt8eS~HGUC? z>xuIQcR`~@z3WNPTZVDtUU|>TQi>qsym@Qg58iyjTDJ9qR#Yj`JW`vk)s(Msi}{ae zKW1lAU<*ul$OHb%XnR?1tA>x4$egqfW^FAoOvAsgu*@^w8 %0o?if4W&`)-|P+}p3Q;1cm58kzVDykT)eWqxcQ{D_vaVMtc*bg@^D_L zrw`xm>8n*Lv23pcQR9B8%BVT-6A@b`N>XjaT1SKYL``e#RO8BM)ss*A&0%$gEZQ%P z>a7a ;OQoOHM<&nfG~J0aj*8S?rjySJ+T$k?YrLG}Xr*a#URIZ9q)K#p2UXZJ z4ulp`Z8x2<%5ul!aY7pk>+kD^nr*t3SJ@kGq`-nFK^nQYe2kI%4mnrYwNjFeDd2A| zm1hiR69NG)+S=cbeX`T?>B&LEhp%R3e&0vXxRMrVRfjv~%2i1pD}!_wO2fL0Na?}N z4!C*5t?{)iL0kj@SPKV+s}(W{i#DWapt#n@*Pjh8I)}GDM;j9^)pqE*HX}|W5G3g- z6j;e%Y$^l*EEBX`W*`xJi310Qp%w=mdqaPpdTT1cgP<3oZR$f|fW`Pt3~bPg*l^$< zfsruKh|gEXP4)jz2Sv6BHse|5LR-P`8l`C{Zk&^|)4!+N+;>NBAqmi$tg9(3cOY~q zQ6zBt`Q8OI)YQ}zm{lhxb(x0llCdTpZB8>$T;Q7T-y4??j$z~(zrMQOt-NV@>}AUf zvz+jkFRN@R#eqM0@!=i^baz|t;xg&--t>kS8^Qx2)A>S&0{;nx2EZVH^rH(NYuC$H z*p7)ZaCAq4cY!R8X(-hwxd8dQMozey=Qqn-?l_jUlUG5P-O-^BQ9Pu-lC pavZX>EWfB zql7*ckvjkn4=-+Bpce>iR6*=3h5Y?ZAW!rmO%w8lN9}vwNJ{DfA6T)c6d1F)>3DYh zJaxG{rp=A0sIfgrXqrc6+q&7u^P-W4fx&MjM;H6Ps_N}>l&Q`GU0|zZ&K%Uw04qQL zpH|O5m<3Aop$`FLQ@ (AY4CsBUsp$6bcZc3z7*`)ODr4NNEX0pD_pst{?b}(rE z929~7B1+wqSE(nbuGRf%9~C6Y6s2MEzb8eA2sR9m0uAI(W|ba~Ecl0KFjCM*hFsz? zN OcO8#_zH&nvX{Xop)_F^wWo>aYVIwwK;M?}dOi zlZ0UlaW!D1Ynvh-txgxkQiIUPS?-{(*9-d#u+D8&u71}Fd+)c|&{>hA5kt1SGFKM$ zhTWA%-re=A>KQK=xk5C(05t?odG<{5Rb65FXYUO^K|pnP$xa|y>n*YLk`k$ufa;v| zeK9)RP5ytz6k 5?QlCGA@CPdB=34(_>2 z=4JewT )B4JZjn@>gJ~NNX++QkT6$SyPnb(iscgNGb3c6 z_7@iUqpQEa@KfyzMXsY7$Pvy@q`}Jm*V*_js?|68_LPJ@UN6$a2hq{x&Qq#)Pck0$ zJJn>#IZobfyEGs&XD*eUchF(NN|>3b|2A%WfG2*OKyhO>7$|KEkhebwBM>TrU|u?| zNo>S)^rWK~i_;)J4W=}tSj66_-#SA*!%WJ5K0}fU2{6va@Hxie+4kGYL6ymCF9w9v=QxuvL#+xO0d6!n zz(4R+%$565s%d`_CcOcU&o5jtgEfFDMbt<`%L6k_opPwWhFeoRbV9`MCDpSq&&0%} zR(Se4eJ-D-uA%~>udk0o;SeYHINd$Y_%&~PTya8?^SVXr)O|2E0TX$|09EP^HPLak p3a zh!}L*t~8qv!h0ma0D!Z?{BU2Kj*th-keY1Mgl3=BeQ0eVFmgBR8vl?GIxDMWY1FTo z_+0Q2`9 |6Ivquw6mm&p;W*$)6Jv%FTRpz` zUeRB7T#UT~MM2*MUSn(mr!zbG(gJeP+-|nZ6va^ZSUqJk(~`J#XO}#Q7DGnPI`7cQ z9zI`Kq6OMx-OCU16lmdmi|L0wy{0b&k1RbQ+3G@lQ1wB@!~>x*w}#+OE%NVz$o=KM z%TY(1UZ#>amL%s^h^h6H9dc3$H^0De@B6wGg|L8?L9jabN$*{HB$UxGr~ZQeZ|>+x z!AQ5k#Bc_QGxl bWNkC!zoUV zB=hyJS&&@5&vbTX$9~ i;@P(BldaMfPu5Rg#_aU z>;_Bm!&GJYsGPd$JZWE4Xyo=WOPYNvL|AG#goIXu>t>2d$I>G{8W`m0sH;Op$kT z7ngRE{-_|?zak!YV@rPn*&QbbFS`UUPbgH-Pe+7sQi}84zIr9@-%L(UE|@eKH|sar z#Cr&m@j*@-0oKNq7W1+d7x1yMu}1^uD$+!l)Sp%US `RhS3bbK2>owKeOjd+(RyWDpB zUT$2B*K>|(S11X=<>y5?iRqG8%pP9;m!soAe}6I(DoGz#p7PA}^z_Jq$S8I)$?Lp- zFcl4eCr;A1o5<8xUVGXes!qF7Uoi#dc-dspnon=u>PH)1F}_HY3i&g9Uou4|Wgpj1 zW{FhF {cd&yN71m0anZDszZp`Hy^TVv8TnyY54I7?ALPjIDG`HZ6l^_{FT{TWCmw)gJ zMV@JT47c}$NvOMRT(&%b4mw!C?@#{#6f>0?chz6)iAkX6wqcF3oH|AuWp3P4Weq{4 z#nKusQ1oDUX~`wzXQ>iO+Lstvz=OqCNOtT~w+`;j1!AKuC8OhQYgkS?gC?5&frgyo z)SWg3nP*b`(Ot07B Y>D6_uL z#o_GuzIOROWYkrJjg4)!_K1E!2n|oXC?MKWXRd^{w6z`5?S9c }K @ zgp5Xt_LkP46V077yjRbuLA_c~8SoovupWCqFb@R_|Bq!MA`sw>3z5DWo}#~ZLdbG0 zSv^uuF|L}hIRcZidy?7vzuYYLOavazRj|X?wfGrjqcA5k4rZX713r-*^5Yvm>RG9$ zP@!Ku7)I!>89!Pb1dV&4oNgSSKlqkS-oGJ^1=B82;S8~fgDJ1Ir}6|oxs!FAQ2c4H zKWbAS(e-ZSEhMk73{JY`#|sXmRD+4ZYKvP%zZAsyV;%D+%(KEzCUU~7Y^d3E$3-+1 zpGRiGS!gesz5uWvi9cGA_AlY1LiiF9+(3 3>r2?bA9E40mI=(NXbcA@6zv19Q_6nhtl zq_Im0IgnxOLYS=@KYzvXjw`(3aV-SJI`@(*xqVptUOA(a{%lavuh(;3a~>nuJ)am@ zc9_#bW+{TQqZ@G-RZeZPruBUnj%i18c$hId`fD+Tb?ui@S5xD2&(8sF_HKj^cRVVf z{% b5Yp}JgLB1^aWO0$;Wu&Gvb`vcL3QBS@j++ >dnjbA@fe*+zi96)*09y+2#I`m7T48#Q~2vXZ79PR)aX!ltc>~Y)eaBp`mDQ zX%z`c!$_}t;Z8fq_riJ@y3RLA1>PkSIz+J^TkU-i9i*AYn3Hdg7?28?v9RlE+I_bl zB(L!P-rq(e4;TBBdS4%N>vXfznWF&%HE{nEXyg%|VLcitey0r_xi|sRf8LdgNs4GD zQ_XyL8-}!}JU>S_CNB+;hxqaTjUDlB ~zOc7CzIOFs!IVJEhl>eE(0}V{l-VDj=s_f>aN57Qpdi(=eUenCbNp?|IU?A< zz^d(5aSqru8 dmeoGI>;4xx J^NRiCp?B?4=kOqQ7$N6=V~!C3Qp#it|AFM)nWFtYho3d!L4Aw2H)t72-Vt zc>QGW%8F6=Y^V?(u;r+I@>Y;id>X!6-)ZZ_jr!#zJs=`-nF(IVL>>H8L1^gqb(2SN zBxiYt;XED)F6wCo5l~woJf>-UR#4MQHr*b%?%7*d=)IO!I80FWiNiVn^C0n#EGb9O zz&Q3z>t_O9oET8!8@WdDY3jp|e$g<$-lix!Lb!(qLP;VQt^uF!_7Y3QQavEhzyLWd z`=5X}fNH2z9r;X>VakTOm!DUEw$0coq=V-yFXdC*+|DE{We_`VB5^GIYx;hspHDoP z2eB85c{@`tI#K1 =E!(oB2`o`wSczM_jy@3g{&j%(8ae)DN)H(a`~c6lkd%WH>3r4Vv1)bdDs# zcAwY_unl74Nio)TD%jo*tI97gFYEV!kRkd1!|Tf<6q!HJ5cO^*9*dTo!c@%jG;=40 zH+@Mn{;bUZzKdA4GB&A?GQ>EWk==Lml%TNcdsOH{ jL7GN7 z<)P0qIsA_3jpQAezcSwt(v?u`(%<|2*vijOoOVNh%D6svP%L<_Pw1%Rn c>^!PUbjq4vtJXuLRd5$RsZS=^`#<-Tm{ zi9cz8-!6o~+w8qpp;%IlRh@79Ge)VTrxlU9ByHSR*PlLaazQ4M1fv))6 G1#-f z+=C}I1`%?wyYNsTOo5QpDG-8}_tsoteK#fXSGlq}MkYBY4Iz>9IgJ%$b-4-Ptj>$U z@`3JJa2=_TfZ~lMQ(#+Z(Kncd3vVQ+(`PW9iPT)Q$SJxXu~={Ex4-6cGMV1w9187d z$T30J>=)m%8E{4Bg?j7%ip+U?BpIo{U7c$_IxsYT+ZnZchabj{QM+d2s@#c<;Em%W ztRFu>kLP}i5x2`W;C3vg9rjAqRr}R-p@Q~Dur!12P8h@wwZYDF)KLVw*(3Rj|G#YJ zIv%D_to58QsV9&UCyCIa$jHb@1I~pDf?L{OLXF=OmDe|NJ1t~hC2q86=qXfg5O&1- z^e0-@5s4D9dyQc>PQx$nYB5pdmdFvmBsa};wh0VIam~S)5?m4ZCSnJI8;04Y@W+0Z zXeMIk(nsP-tre22-=qV33--q>OErB~l_p}Lt)PI)hG+r6Fq6&gwv7?;#9vqusz4Q- z8;XF9NoC57^ecmE)0bMq{N2)#Zl|GPVQVFRwB;E3*9nu5N1T^{3xShB238J;H