diff --git a/smart_service/fixtures/client_script.json b/smart_service/fixtures/client_script.json index dcaed40..c18fbf9 100644 --- a/smart_service/fixtures/client_script.json +++ b/smart_service/fixtures/client_script.json @@ -17,12 +17,12 @@ "doctype": "Client Script", "dt": "Procedure", "enabled": 1, - "modified": "2022-03-29 16:14:33.283915", + "modified": "2022-03-31 21:28:50.644218", "name": "Procedure-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "var trigger = true;\n\ncur_frm.fields_dict['variant_mapping'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.transactions.doctype.procedure.procedure.variant\",};\n};\ncur_frm.fields_dict['sub_systems'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.transactions.doctype.procedure.procedure.sub_systems\",};\n};\n\nfrappe.ui.form.on('Procedure', {\n onload: function (frm) {\n if (frm.doc.workflow_state == 'Publish Ready'){\n frm.set_read_only();\n }\n var html = \"\";\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"
HTML Tag\" + \"How to tag <...>\" + \"Result
Bold\" + \"<b>Using a 10 mm socket.</b>\" + \"Using a 10 mm socket.
Break\" + \"Using a <br>10 mm socket.\" + \"Using a
10 mm socket.
Italic\" + \"<i>Using a 10 mm socket.</i>\" + \"Using a 10 mm socket.
Unordered List\" + \"<ul><li>Using a 10 mm socket.</li><li>the steering fluid line.</li></ul>\" + \"
  • Using a 10 mm socket.
  • the steering fluid line.
Ordered List\" + \"<ol><li>Using a 10 mm socket.</li><li>the steering fluid line.</li></ol>\" + \"
  1. Using a 10 mm socket.
  2. the steering fluid line.
\";\n $(frm.fields_dict.html_reference.wrapper).html(html);\n },\n procedure_details_on_form_rendered: function(frm,cdt,cdn){\n\t\tcur_frm.cscript.highlight_row(frm.open_grid_row());\n\t\t\n\t},\n validate: function(frm){\n var regex = /[@#$%^&*+\\=\\[\\]{};:\\\\|.\\/?]+/;\n for (var i=0;iContent: Only letters, numbers and - ,'<>_()! are allowed.\"));\n frappe.validated = false;\n } \n }\n \n frm.doc.procedure_filter = \"All\";\n if(frm.doc.procedure_filter == \"All\"){\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n }\n\n frm.refresh();\n },\n refresh: function (frm) {\n select_row(frm);\n if(frm.doc.procedure_filter == \"All\"){\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n }\n var previous_procedure_name = \"\";\n var previous_step_name = \"\";\n $(\"select[data-fieldname='procedure_filter']\").empty();\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(\"All\", \"All\"));\n $(\"select[data-fieldname='step_filter']\").empty();\n $(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n cur_frm.doc.procedure_filter = \"All\";\n cur_frm.doc.step_filter = \"All\";\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.step_name){\n fn_addSteptolist(row.doc.step_name);\n }\n\n if (row.doc.procedure_name){\n fn_addProceduretolist(row.doc.procedure_name);\n }\n \n if (row.doc.procedure_name == previous_procedure_name){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"procedure_name\"]').find('a[data-doctype=\"Procedure Name\"]').css({'color': '#EDEDED'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'background-color': '#FFFFFF'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'border-bottom': '1px Solid #ebeef0'});\n }else{\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"procedure_name\"]').find('a[data-doctype=\"Procedure Name\"]').css({'color': '#000000'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'background-color': '#EDEDED'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'border-bottom': '1px Solid #7b7c7c'});\n }\n previous_procedure_name = row.doc.procedure_name;\n \n \n if (row.doc.step_name == previous_step_name){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"step_name\"]').find('a[data-doctype=\"Procedure Step Name\"]').css({'color': '#DFDFDF'});\n }else{\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"step_name\"]').find('a[data-doctype=\"Procedure Step Name\"]').css({'color': '#000000'});\n }\n previous_step_name = row.doc.step_name;\n let id = row.doc.idx;\n\n });\n\n if (frm.doc.workflow_state == \"Publish Ready\" && frappe.user_roles.indexOf(\"_Admin\") > 0){\n frm.add_custom_button(__('Revoke Publish'), function(){\n //get all system mapping with the procedure linked\n frappe.db.get_list('System Mapping_Sub System', {\n fields: ['parent', 'procedure', 'procedure_status'],\n filters: {\n procedure: frm.doc.name\n }\n }).then(records => {\n var html = \"

\";\n $.each(records, function(index, row){\n html = html + \"\" +\"\";\n });\n html = html + \"
\" + row.parent + \"\" + row.procedure + \"
\";\n frappe.warn('Are you sure you want to Revoke?',\n 'Since there are System Mappings attached to it!!! ' + html,\n () => {\n frm.set_value(\"workflow_state\",\"Draft\");\n frm.save();\n // action to perform if Continue is selected\n },\n 'Continue', false // Sets dialog as minimizable\n );\n });\n });\n }\n },\n \n procedure_filter: function (frm) {\n //if (!trigger){ trigger = true; return;}\n select_row(frm);\n if (frm.doc.procedure_filter ==\"All\"){\n frm.doc.step_filter = \"All\";\n cur_frm.refresh_field('step_filter');\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n } else {\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name != frm.doc.procedure_filter){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').hide();\n } else {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n }\n });\n }\n //frm.refresh();\n \n //Filtered by as per step filter\n if(frm.doc.name && frm.is_new() == undefined){\n $(\"select[data-fieldname='step_filter']\").empty();\n\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n\t\tvar x = frappe.db.get_list('Procedure_Details', {\n\t\t\tfields: ['step_name'],\n\t\t\tfilters: {\n\t\t\t\tprocedure_name: frm.doc.procedure_filter,\n\t\t\t\tparent: frm.doc.name\n\t\t\t}\n\t\t\n\t\t}).then(steps => {\n\t\tvar child;\n\t\t\t$.each(steps, function(index, row){\n\t\t\t\tfn_steplist(row.step_name);\n\t\t\t})\n\t\t})\n }\n \n $(\"select[data-fieldname='step_filter']\").empty();\n\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n for(var i = 0;i {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n } else {\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name == frm.doc.procedure_filter && row.doc.step_name == frm.doc.step_filter){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n }else if(row.doc.procedure_name == frm.doc.procedure_filter && frm.doc.step_filter == \"All\"){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n \n }else {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').hide();\n }\n });\n }\n },\n \n before_workflow_action: (frm) => {\n if ((frm.doc.workflow_state == 'Review Pending' || frm.doc.workflow_state == 'Publish Ready') && (frm.selected_workflow_action == 'Revoke')){\n //frappe.throw(\"Any connected Publish Planning will get affected. Please check!\");\n frappe.call({\n \"method\": \"smart_service.transactions.doctype.procedure.procedure.get_publish_details\",\n \"args\": {\n \"procedure_name\": frm.doc.name,\n \"status\":'Published1',\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){\n \t var publish_list = r.message;\n \t if (publish_list.length){\n \t var html = \"This Procedure is linked with the following Publish Docs:
    \";\n \t publish_list.forEach((array_row) => {\n \t html = html + \"
  1. \" + array_row + \"
  2. \";\n \t });\n \t html = html + \"
\";\n frappe.msgprint({\n title: __('Notification'),\n indicator: 'green',\n message: __(html)\n });\n \t }\n \t}\n });\n }\n },\n mat:function(frm){\n if (!frm.is_new()){\n frappe.msgprint({\n title: __('Notification'),\n indicator: 'green',\n message: __('Updating MAT will impact its connected System Mapping and so with Kilometer Mapping. Please Check!')\n });\n }\n }\n});\n\nfrappe.ui.form.on('Procedure_Details', {\n procedure_name: function (frm,cdt,cdn) {\n var title = frm.doc.procedure_filter;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n let value = row.doc.procedure_name;\n if (value)\n if ($(\"select[data-fieldname='procedure_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(value, value));\n }\n \n });\n frm.doc.procedure_filter = title;\n // frm.refresh();\n },\n step_name: function (frm,cdt,cdn) {\n // frm.refresh();\n var filtered_step = frm.doc.step_filter;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n let value = row.doc.step_name;\n if (value && frm.doc.procedure_filter == \"All\"){\n if ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n }\n }\n if(value && frm.doc.procedure_filter == row.doc.procedure_name){\n fn_stepfilter(row.doc.step_name)\n }\n });\n frm.doc.step_filter = filtered_step;\n\n },\n content_type: function (frm,cdt,cdn) {\n var df;\n let d = locals[cdt][cdn];\n var id = d.idx;\n id = id-1;\n let row = frm.fields_dict.procedure_details.grid.grid_rows[id];\n if (d.content_type == 'Link'){\n let d = new frappe.ui.Dialog({\n title: 'Select a Procedure',\n fields:[\n {\n label: 'Procedure',\n fieldname: 'procedure_map',\n fieldtype: 'Link',\n options:'Procedure'\n }\n ],\n primary_action_label: 'Select',\n primary_action(values) {\n // row.doc.content = values.procedure_map;\n var url = window.location.host;\n var content = values.procedure_map;\n row.doc.temp_cnt = values.procedure_map;\n row.doc.content = content.link(\"http://\" + url + \"/app/procedure/\" + content);\n // row.doc.content = '' + content + '';\n d.hide();\n frm.refresh();\n }\n });\n d.show();\n } else {\n d.content = d.content1;\n }\n },\n procedure_details_move: function (frm,cdt,cdn) {\n frm.refresh();\n },\n procedure_details_remove: function(frm,cdt,cdn){\n frm.doc.procedure_filter = \"All\";\n frm.doc.step_filter = \"All\";\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name){\n fn_addProceduretolist(row.doc.procedure_name);\n }\n })\n frm.refresh_field('procedure_details');\n cur_frm.refresh_fields();\n frm.refresh();\n },\n procedure_details_add: function(frm,cdt,cdn) {\n select_row(frm);\n \tvar d = locals[cdt][cdn];\n \tvar id = d.idx;\n id = id-1;\n var row = frm.fields_dict.procedure_details.grid.grid_rows[id];\n var prevrow = frm.fields_dict.procedure_details.grid.grid_rows[id-1];\n if (frm.doc.procedure_filter == \"All\"){\n if (prevrow !== undefined) {\n row.doc.procedure_name = prevrow.doc.procedure_name;\n row.doc.step_name = prevrow.doc.step_name;\n }\n }else{\n row.doc.procedure_name = frm.doc.procedure_filter;\n // row.doc.step_name = prevrow.doc.step_name;\n }\n if (frm.doc.step_filter == \"All\" && frm.doc.procedure_filter == \"All\"){\n if (prevrow !== undefined) {\n row.doc.procedure_name = prevrow.doc.procedure_name;\n row.doc.step_name = prevrow.doc.step_name;\n }\n }\n else if(frm.doc.step_filter == \"All\" && frm.doc.procedure_filter != \"All\"){\n row.doc.procedure_name = frm.doc.procedure_filter;\n // row.doc.step_name = prevrow.doc.step_name;\n }else{\n row.doc.procedure_name = frm.doc.procedure_filter;\n row.doc.step_name = frm.doc.step_filter;\n }\n\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.step_name && row.doc.procedure_name == frm.doc.procedure_filter){\n fn_addSteptolist(row.doc.step_name);\n }\n })\n\n refresh_field(\"procedure_filter\");\n refresh_field(\"step_filter\");\n },\n});\n\nfunction fn_addProceduretolist(value){\n if (value === \"\") {return;}\n if ($(\"select[data-fieldname='procedure_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(value, value));\n }\n}\nfunction fn_addSteptolist(value){\n if (value === \"\") {return;}\n if ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n }\n}\n\nfunction fn_steplist(value){\n\tif (value === \"\") {return;}\n\t\tif ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n\t\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n\t\t}\n}\n\nfunction fn_stepfilter(value){\n\tif (value === \"\") {return;}\n\t \n\t\tif ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n\t\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n\t\t}\n}\nfunction select_row(frm){\n if(frm.doc.procedure_filter != \"All\"){\n\t$('div[data-fieldname=procedure_details]').find('div[class=form-grid]').find('div[class=grid-heading-row]').find('div[class=\"row-index sortable-handle col col-xs-1\"]').find('input[class=\"grid-row-check pull-left\"]').css({'visibility': 'hidden'});\n\t}\n\telse{\n\t$('div[data-fieldname=procedure_details]').find('div[class=form-grid]').find('div[class=grid-heading-row]').find('div[class=\"row-index sortable-handle col col-xs-1\"]').find('input[class=\"grid-row-check pull-left\"]').css({'visibility': 'visible'});\n\n\t}\n\n}\ncur_frm.cscript.highlight_row = function(grid_row){\n\tvar idx = grid_row.doc.idx;\n\tcur_frm.fields_dict[\"procedure_details\"].$wrapper.find('.grid-body .rows').find(\".grid-row\").each(function(i, item) {\n\tlet d = locals[cur_frm.fields_dict[\"procedure_details\"].grid.doctype][$(item).attr('data-name')];\n\tif(d[\"idx\"] === idx){\n\t\tgrid_row.toggle_editable_row(true);\n\t}\n\t});\n}\n\n", + "script": "var trigger = true;\n\ncur_frm.fields_dict['variant_mapping'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.transactions.doctype.procedure.procedure.variant\",};\n};\ncur_frm.fields_dict['sub_systems'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.transactions.doctype.procedure.procedure.sub_systems\",};\n};\n\nfrappe.ui.form.on('Procedure', {\n onload: function (frm) {\n if (frm.doc.workflow_state == 'Publish Ready'){\n frm.set_read_only();\n }\n var html = \"\";\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"\" ;\n html = html + \"
HTML Tag\" + \"How to tag <...>\" + \"Result
Bold\" + \"<b>Using a 10 mm socket.</b>\" + \"Using a 10 mm socket.
Break\" + \"Using a <br>10 mm socket.\" + \"Using a
10 mm socket.
Italic\" + \"<i>Using a 10 mm socket.</i>\" + \"Using a 10 mm socket.
Unordered List\" + \"<ul><li>Using a 10 mm socket.</li><li>the steering fluid line.</li></ul>\" + \"
  • Using a 10 mm socket.
  • the steering fluid line.
Ordered List\" + \"<ol><li>Using a 10 mm socket.</li><li>the steering fluid line.</li></ol>\" + \"
  1. Using a 10 mm socket.
  2. the steering fluid line.
\";\n $(frm.fields_dict.html_reference.wrapper).html(html);\n },\n procedure_details_on_form_rendered: function(frm,cdt,cdn){\n\t\tcur_frm.cscript.highlight_row(frm.open_grid_row());\n\t\t\n\t},\n validate: function(frm){\n var regex = /[@#$%^&*+\\=\\[\\]{};`~:\\\\|.\\/?]+/;\n for (var i=0;iContent: Only letters, numbers and - ,'<>_()! are allowed.\"));\n frappe.validated = false;\n }\n } \n }\n \n frm.doc.procedure_filter = \"All\";\n if(frm.doc.procedure_filter == \"All\"){\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n }\n\n frm.refresh();\n },\n refresh: function (frm) {\n select_row(frm);\n if(frm.doc.procedure_filter == \"All\"){\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n }\n var previous_procedure_name = \"\";\n var previous_step_name = \"\";\n $(\"select[data-fieldname='procedure_filter']\").empty();\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(\"All\", \"All\"));\n $(\"select[data-fieldname='step_filter']\").empty();\n $(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n cur_frm.doc.procedure_filter = \"All\";\n cur_frm.doc.step_filter = \"All\";\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.step_name){\n fn_addSteptolist(row.doc.step_name);\n }\n\n if (row.doc.procedure_name){\n fn_addProceduretolist(row.doc.procedure_name);\n }\n \n if (row.doc.procedure_name == previous_procedure_name){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"procedure_name\"]').find('a[data-doctype=\"Procedure Name\"]').css({'color': '#EDEDED'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'background-color': '#FFFFFF'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'border-bottom': '1px Solid #ebeef0'});\n }else{\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"procedure_name\"]').find('a[data-doctype=\"Procedure Name\"]').css({'color': '#000000'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'background-color': '#EDEDED'});\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').css({'border-bottom': '1px Solid #7b7c7c'});\n }\n previous_procedure_name = row.doc.procedure_name;\n \n \n if (row.doc.step_name == previous_step_name){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"step_name\"]').find('a[data-doctype=\"Procedure Step Name\"]').css({'color': '#DFDFDF'});\n }else{\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').find('div.col[data-fieldname=\"step_name\"]').find('a[data-doctype=\"Procedure Step Name\"]').css({'color': '#000000'});\n }\n previous_step_name = row.doc.step_name;\n let id = row.doc.idx;\n\n });\n\n if (frm.doc.workflow_state == \"Publish Ready\" && frappe.user_roles.indexOf(\"_Admin\") > 0){\n frm.add_custom_button(__('Revoke Publish'), function(){\n //get all system mapping with the procedure linked\n frappe.db.get_list('System Mapping_Sub System', {\n fields: ['parent', 'procedure', 'procedure_status'],\n filters: {\n procedure: frm.doc.name\n }\n }).then(records => {\n var html = \"

\";\n $.each(records, function(index, row){\n html = html + \"\" +\"\";\n });\n html = html + \"
\" + row.parent + \"\" + row.procedure + \"
\";\n frappe.warn('Are you sure you want to Revoke?',\n 'Since there are System Mappings attached to it!!! ' + html,\n () => {\n frm.set_value(\"workflow_state\",\"Draft\");\n frm.save();\n // action to perform if Continue is selected\n },\n 'Continue', false // Sets dialog as minimizable\n );\n });\n });\n }\n },\n \n procedure_filter: function (frm) {\n //if (!trigger){ trigger = true; return;}\n select_row(frm);\n if (frm.doc.procedure_filter ==\"All\"){\n frm.doc.step_filter = \"All\";\n cur_frm.refresh_field('step_filter');\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n } else {\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name != frm.doc.procedure_filter){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').hide();\n } else {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n }\n });\n }\n //frm.refresh();\n \n //Filtered by as per step filter\n if(frm.doc.name && frm.is_new() == undefined){\n $(\"select[data-fieldname='step_filter']\").empty();\n\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n\t\tvar x = frappe.db.get_list('Procedure_Details', {\n\t\t\tfields: ['step_name'],\n\t\t\tfilters: {\n\t\t\t\tprocedure_name: frm.doc.procedure_filter,\n\t\t\t\tparent: frm.doc.name\n\t\t\t}\n\t\t\n\t\t}).then(steps => {\n\t\tvar child;\n\t\t\t$.each(steps, function(index, row){\n\t\t\t\tfn_steplist(row.step_name);\n\t\t\t})\n\t\t})\n }\n \n $(\"select[data-fieldname='step_filter']\").empty();\n\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(\"All\", \"All\"));\n for(var i = 0;i {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n });\n } else {\n frm.get_field('procedure_details').grid.static_rows = false;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name == frm.doc.procedure_filter && row.doc.step_name == frm.doc.step_filter){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n }else if(row.doc.procedure_name == frm.doc.procedure_filter && frm.doc.step_filter == \"All\"){\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').show();\n \n }else {\n $(\"div[data-fieldname=procedure_details]\").find('div.grid-row[data-idx=\"'+ row.doc.idx + '\"]').hide();\n }\n });\n }\n },\n \n before_workflow_action: (frm) => {\n if ((frm.doc.workflow_state == 'Review Pending' || frm.doc.workflow_state == 'Publish Ready') && (frm.selected_workflow_action == 'Revoke')){\n //frappe.throw(\"Any connected Publish Planning will get affected. Please check!\");\n frappe.call({\n \"method\": \"smart_service.transactions.doctype.procedure.procedure.get_publish_details\",\n \"args\": {\n \"procedure_name\": frm.doc.name,\n \"status\":'Published1',\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){\n \t var publish_list = r.message;\n \t if (publish_list.length){\n \t var html = \"This Procedure is linked with the following Publish Docs:
    \";\n \t publish_list.forEach((array_row) => {\n \t html = html + \"
  1. \" + array_row + \"
  2. \";\n \t });\n \t html = html + \"
\";\n frappe.msgprint({\n title: __('Notification'),\n indicator: 'green',\n message: __(html)\n });\n \t }\n \t}\n });\n }\n },\n mat:function(frm){\n if (!frm.is_new()){\n frappe.msgprint({\n title: __('Notification'),\n indicator: 'green',\n message: __('Updating MAT will impact its connected System Mapping and so with Kilometer Mapping. Please Check!')\n });\n }\n }\n});\n\nfrappe.ui.form.on('Procedure_Details', {\n procedure_name: function (frm,cdt,cdn) {\n var title = frm.doc.procedure_filter;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n let value = row.doc.procedure_name;\n if (value)\n if ($(\"select[data-fieldname='procedure_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(value, value));\n }\n \n });\n frm.doc.procedure_filter = title;\n // frm.refresh();\n },\n step_name: function (frm,cdt,cdn) {\n // frm.refresh();\n var filtered_step = frm.doc.step_filter;\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n let value = row.doc.step_name;\n if (value && frm.doc.procedure_filter == \"All\"){\n if ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n }\n }\n if(value && frm.doc.procedure_filter == row.doc.procedure_name){\n fn_stepfilter(row.doc.step_name)\n }\n });\n frm.doc.step_filter = filtered_step;\n\n },\n content_type: function (frm,cdt,cdn) {\n var df;\n let d = locals[cdt][cdn];\n var id = d.idx;\n id = id-1;\n let row = frm.fields_dict.procedure_details.grid.grid_rows[id];\n if (d.content_type == 'Link'){\n let d = new frappe.ui.Dialog({\n title: 'Select a Procedure',\n fields:[\n {\n label: 'Procedure',\n fieldname: 'procedure_map',\n fieldtype: 'Link',\n options:'Procedure'\n }\n ],\n primary_action_label: 'Select',\n primary_action(values) {\n // row.doc.content = values.procedure_map;\n var url = window.location.host;\n var content = values.procedure_map;\n row.doc.temp_cnt = values.procedure_map;\n row.doc.content = content.link(\"http://\" + url + \"/app/procedure/\" + content);\n // row.doc.content = '' + content + '';\n d.hide();\n frm.refresh();\n }\n });\n d.show();\n } else {\n d.content = d.content1;\n }\n },\n procedure_details_move: function (frm,cdt,cdn) {\n frm.refresh();\n },\n procedure_details_remove: function(frm,cdt,cdn){\n frm.doc.procedure_filter = \"All\";\n frm.doc.step_filter = \"All\";\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.procedure_name){\n fn_addProceduretolist(row.doc.procedure_name);\n }\n })\n frm.refresh_field('procedure_details');\n cur_frm.refresh_fields();\n frm.refresh();\n },\n procedure_details_add: function(frm,cdt,cdn) {\n select_row(frm);\n \tvar d = locals[cdt][cdn];\n \tvar id = d.idx;\n id = id-1;\n var row = frm.fields_dict.procedure_details.grid.grid_rows[id];\n var prevrow = frm.fields_dict.procedure_details.grid.grid_rows[id-1];\n if (frm.doc.procedure_filter == \"All\"){\n if (prevrow !== undefined) {\n row.doc.procedure_name = prevrow.doc.procedure_name;\n row.doc.step_name = prevrow.doc.step_name;\n }\n }else{\n row.doc.procedure_name = frm.doc.procedure_filter;\n // row.doc.step_name = prevrow.doc.step_name;\n }\n if (frm.doc.step_filter == \"All\" && frm.doc.procedure_filter == \"All\"){\n if (prevrow !== undefined) {\n row.doc.procedure_name = prevrow.doc.procedure_name;\n row.doc.step_name = prevrow.doc.step_name;\n }\n }\n else if(frm.doc.step_filter == \"All\" && frm.doc.procedure_filter != \"All\"){\n row.doc.procedure_name = frm.doc.procedure_filter;\n // row.doc.step_name = prevrow.doc.step_name;\n }else{\n row.doc.procedure_name = frm.doc.procedure_filter;\n row.doc.step_name = frm.doc.step_filter;\n }\n\n frm.fields_dict.procedure_details.grid.grid_rows.forEach((row) => {\n if (row.doc.step_name && row.doc.procedure_name == frm.doc.procedure_filter){\n fn_addSteptolist(row.doc.step_name);\n }\n })\n\n refresh_field(\"procedure_filter\");\n refresh_field(\"step_filter\");\n },\n});\n\nfunction fn_addProceduretolist(value){\n if (value === \"\") {return;}\n if ($(\"select[data-fieldname='procedure_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='procedure_filter']\").append(new Option(value, value));\n }\n}\nfunction fn_addSteptolist(value){\n if (value === \"\") {return;}\n if ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n $(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n }\n}\n\nfunction fn_steplist(value){\n\tif (value === \"\") {return;}\n\t\tif ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n\t\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n\t\t}\n}\n\nfunction fn_stepfilter(value){\n\tif (value === \"\") {return;}\n\t \n\t\tif ($(\"select[data-fieldname='step_filter'] option[value='\" + value + \"']\").length === 0){\n\t\t\t$(\"select[data-fieldname='step_filter']\").append(new Option(value, value));\n\t\t}\n}\nfunction select_row(frm){\n if(frm.doc.procedure_filter != \"All\"){\n\t$('div[data-fieldname=procedure_details]').find('div[class=form-grid]').find('div[class=grid-heading-row]').find('div[class=\"row-index sortable-handle col col-xs-1\"]').find('input[class=\"grid-row-check pull-left\"]').css({'visibility': 'hidden'});\n\t}\n\telse{\n\t$('div[data-fieldname=procedure_details]').find('div[class=form-grid]').find('div[class=grid-heading-row]').find('div[class=\"row-index sortable-handle col col-xs-1\"]').find('input[class=\"grid-row-check pull-left\"]').css({'visibility': 'visible'});\n\n\t}\n\n}\ncur_frm.cscript.highlight_row = function(grid_row){\n\tvar idx = grid_row.doc.idx;\n\tcur_frm.fields_dict[\"procedure_details\"].$wrapper.find('.grid-body .rows').find(\".grid-row\").each(function(i, item) {\n\tlet d = locals[cur_frm.fields_dict[\"procedure_details\"].grid.doctype][$(item).attr('data-name')];\n\tif(d[\"idx\"] === idx){\n\t\tgrid_row.toggle_editable_row(true);\n\t}\n\t});\n}\n\n", "view": "Form" }, { @@ -121,12 +121,12 @@ "doctype": "Client Script", "dt": "Vehicle", "enabled": 1, - "modified": "2022-03-31 11:06:30.151988", + "modified": "2022-03-31 21:30:20.162466", "name": "Vehicle-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "cur_frm.fields_dict['vehicle_segment'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.masters.doctype.vehicle.vehicle.vehicle_segment\",\n };\n };\n\nvar original_display_order = 0;\nvar vehicle_count = 0;\nvar skm_array = [];\nvar dusted = false;\n\nfrappe.ui.form.on('Vehicle', {\n\tonload: function(frm) {\n if (!frm.is_new()) fnLoad_skm_initial_values(frm);\n\t},\n image: function (frm) {\n\t\tvar file = frm.doc.image;\n\t\tif (frm.doc.image) {\n\t\t\tfrappe.call({\n\t\t\t\tmethod: \"smart_service.masters.doctype.vehicle.vehicle.image_size\",\n\t\t\t\targs: {\n\t\t\t\t\t\"image\": frm.doc.image,\n\t\t\t\t\t\"doc\": frm.doc.name\n\t\t\t\t},\n\t\t\t\tcallback: function (r) {\n\t\t\t\tif(r.message){\n\t\t\t\t\tif(r.message == frm.doc.image){\n\t\t\t\t\t\tfrm.doc.image = '';\n\t\t\t\t\t\tcur_frm.refresh_field('image');\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __('Max Dimesions are 510*510.'),\n\t\t\t\t\t\t\tindicator: 'yellow'\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tfrm.doc.image = '';\n\t\t\t\t\t\tcur_frm.refresh_field('image');\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __('Max Image Size is 10MB.'),\n\t\t\t\t\t\t\tindicator: 'yellow'\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t},\n\trefresh: function(frm) {\n if (frm.is_new()){\n frm.set_df_property('display_order', 'read_only', 1);\n } else {\n frm.set_df_property('display_order', 'read_only', 0);\n }\n if (!frm.is_new()) {\n frm.disable_save(); //*** Check Refresh for Save Function\n \n frm.add_custom_button(__('Save'), function(){\n fnSave(frm);\n }).addClass(\"btn-warning\").css({'background-color':'#e31a37', 'color':'white'});\n }\n\n\t\tfrappe.db.count('Vehicle')\n .then(count => {\n vehicle_count = count + 1;\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n });\n\t},\n\t\n\tvalidate: function(frm) {\n\t if (frm.doc.vehicle.length>50){\n\t\t\tfrappe.msgprint(\"Vehicle not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.vehicle.length == 1){\n\t\t\tfrappe.msgprint(\"Vehicle not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.vehicle == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9&-()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.vehicle) === true){\n frappe.throw(__(\"Vehicle: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.vehicle) {\n if(frm.doc.vehicle.includes(\"'\")) {\n frappe.throw(__(\"Vehicle: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n \n if (frm.doc.display_order && frm.doc.vehicle && frm.doc.vehicle_segment){\n //*** check if there is same display_order\n frappe.db.get_list('Vehicle', {\n fields: ['display_order', 'name'],\n filters: {\n display_order: frm.doc.display_order,\n vehicle:[\"!=\",frm.doc.vehicle]\n }\n }).then(records => {\n if (records.length){\n frappe.db.set_value('Vehicle', records[0].name, {\n display_order: original_display_order\n }).then(r => {\n let doc = r.message;\n frappe.show_alert({\n message:__('Swapped display order with: ' + records[0].name),\n indicator:'green'\n }, 5);\n });\n } else {\n if (frm.doc.display_order > vehicle_count){\n let display_vehicle_count = vehicle_count - 1;\n msgprint('There are only ' + display_vehicle_count + ' vehicle(s)');\n frappe.validated = false;\n }\n }\n });\n }\n\t},\n\n\tservice_kilometers: function(frm) {\n //*** Check & add any KM got added in Service Kilometers\n\n dusted = true;\n frm.doc.service_kilometers.forEach(row => {\n let index = skm_array.findIndex(o => o.name === row.name);\n if (index < 0){\n let index1 = skm_array.findIndex(o => o.skm_initial === row.service_kilometers);\n if (index1 >= 0){\n skm_array[index1].type = \"Initial\";\n } else {\n var valueToPush = {};\n valueToPush.type = \"New\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n skm_array.push(valueToPush);\n }\n }\n });\n var current_skm_array = [];\n frm.doc.service_kilometers.forEach(row => {\n var valueToPush = {};\n valueToPush.type = \"Initial\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n current_skm_array.push(valueToPush);\n });\n\n //*** Check & remove any KM got Removed in Service Kilometers\n var idx=0;\n skm_array.forEach(row => {\n idx++;\n let index = current_skm_array.findIndex(o => o.skm_initial === row.skm_initial);\n if (index < 0){\n //row.type = row.type === \"New\" ? \"No Action\": \"Deleted\";\n if (row.type == \"New\"){\n skm_array.splice(idx-1, 1);\n }else{\n row.type = \"Deleted\";\n }\n }\n });\n }\n});\n\nfrappe.ui.form.on('Vehicle', {\n\tafter_save1: function(frm) {\n\t frappe.call({\n \"method\": \"smart_service.masters.doctype.vehicle.vehicle.update_km_mapping\",\n \"args\": {\n \"doc\":frm.doc.name,\n \"skm_array\": skm_array,\n \"skm\": frm.doc.service_kilometers\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){}\n });\n \n\t}\n\t\n});\n\nfunction fnLoad_skm_initial_values(frm){\n // ***Store the Initial Service Kilometer values\n skm_array.length = 0;\n frm.doc.service_kilometers.forEach(row => {\n var valueToPush = {};\n valueToPush.type = \"Initial\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n skm_array.push(valueToPush);\n });\n}\n\nfunction fnSave(frm){\n //console.log(\"Dusted\");\n if (dusted){\n frappe.confirm('Changes will impact KM Mapping associated with this vehicle: ' + frm.doc.vehicle + '',\n () => {\n //*** Change the State to Draft for KM\n frm.save();\n skm_array.forEach((array_row) => {\n \n //*** Add Edit Delete the respective Kiolmeter with Updated/Deleted SKM\n if (array_row.type !== \"Initial\"){\n frappe.call({\n \"method\": \"smart_service.masters.doctype.vehicle.vehicle.update_km_mapping\",\n \"args\": {\n \"doc\": frm.doc.name,\n \"vehicle\":frm.doc.vehicle,\n \"type\":array_row.type,\n \"skm_initial\":array_row.skm_initial\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){}\n });\n }\n });\n frappe.show_alert({\n message:__('Inserted Rows in Respective KM Doc & made as Draft Mode!'),\n indicator:'green'\n }, 5);\n fnLoad_skm_initial_values(frm);\n }, () => {\n // action to perform if No is selected\n });\n } else if(frm.is_dirty()){\n frm.save();\n fnLoad_skm_initial_values(frm);\n } else {\n frappe.show_alert({\n message:__('No updates for Kilometer Mapping... '),\n indicator:'green'\n }, 5);\n }\n}", + "script": "cur_frm.fields_dict['vehicle_segment'].get_query = function(doc, cdt, cdn) {\n return {query:\"smart_service.masters.doctype.vehicle.vehicle.vehicle_segment\",\n };\n };\n\nvar original_display_order = 0;\nvar vehicle_count = 0;\nvar skm_array = [];\nvar dusted = false;\n\nfrappe.ui.form.on('Vehicle', {\n\tonload: function(frm) {\n if (!frm.is_new()) fnLoad_skm_initial_values(frm);\n\t},\n image: function (frm) {\n\t\tvar file = frm.doc.image;\n\t\tif (frm.doc.image) {\n\t\t\tfrappe.call({\n\t\t\t\tmethod: \"smart_service.masters.doctype.vehicle.vehicle.image_size\",\n\t\t\t\targs: {\n\t\t\t\t\t\"image\": frm.doc.image,\n\t\t\t\t\t\"doc\": frm.doc.name\n\t\t\t\t},\n\t\t\t\tcallback: function (r) {\n\t\t\t\tif(r.message){\n\t\t\t\t\tif(r.message == frm.doc.image){\n\t\t\t\t\t\tfrm.doc.image = '';\n\t\t\t\t\t\tcur_frm.refresh_field('image');\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __('Max Dimesions are 510*510.'),\n\t\t\t\t\t\t\tindicator: 'yellow'\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tfrm.doc.image = '';\n\t\t\t\t\t\tcur_frm.refresh_field('image');\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __('Max Image Size is 10MB.'),\n\t\t\t\t\t\t\tindicator: 'yellow'\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t},\n\trefresh: function(frm) {\n if (frm.is_new()){\n frm.set_df_property('display_order', 'read_only', 1);\n } else {\n frm.set_df_property('display_order', 'read_only', 0);\n }\n if (!frm.is_new()) {\n frm.disable_save(); //*** Check Refresh for Save Function\n \n frm.add_custom_button(__('Save'), function(){\n fnSave(frm);\n }).addClass(\"btn-warning\").css({'background-color':'#e31a37', 'color':'white'});\n }\n\n\t\tfrappe.db.count('Vehicle')\n .then(count => {\n vehicle_count = count + 1;\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n });\n\t},\n\t\n\tvalidate: function(frm) {\n\t if (frm.doc.vehicle.length>50){\n\t\t\tfrappe.msgprint(\"Vehicle not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.vehicle.length == 1){\n\t\t\tfrappe.msgprint(\"Vehicle not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.vehicle == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9&-()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};'`~:\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.vehicle) === true){\n frappe.throw(__(\"Vehicle: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.vehicle) {\n if(frm.doc.vehicle.includes(\"'\")) {\n frappe.throw(__(\"Vehicle: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n \n if (frm.doc.display_order && frm.doc.vehicle && frm.doc.vehicle_segment){\n //*** check if there is same display_order\n frappe.db.get_list('Vehicle', {\n fields: ['display_order', 'name'],\n filters: {\n display_order: frm.doc.display_order,\n vehicle:[\"!=\",frm.doc.vehicle]\n }\n }).then(records => {\n if (records.length){\n frappe.db.set_value('Vehicle', records[0].name, {\n display_order: original_display_order\n }).then(r => {\n let doc = r.message;\n frappe.show_alert({\n message:__('Swapped display order with: ' + records[0].name),\n indicator:'green'\n }, 5);\n });\n } else {\n if (frm.doc.display_order > vehicle_count){\n let display_vehicle_count = vehicle_count - 1;\n msgprint('There are only ' + display_vehicle_count + ' vehicle(s)');\n frappe.validated = false;\n }\n }\n });\n }\n\t},\n\n\tservice_kilometers: function(frm) {\n //*** Check & add any KM got added in Service Kilometers\n\n dusted = true;\n frm.doc.service_kilometers.forEach(row => {\n let index = skm_array.findIndex(o => o.name === row.name);\n if (index < 0){\n let index1 = skm_array.findIndex(o => o.skm_initial === row.service_kilometers);\n if (index1 >= 0){\n skm_array[index1].type = \"Initial\";\n } else {\n var valueToPush = {};\n valueToPush.type = \"New\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n skm_array.push(valueToPush);\n }\n }\n });\n var current_skm_array = [];\n frm.doc.service_kilometers.forEach(row => {\n var valueToPush = {};\n valueToPush.type = \"Initial\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n current_skm_array.push(valueToPush);\n });\n\n //*** Check & remove any KM got Removed in Service Kilometers\n var idx=0;\n skm_array.forEach(row => {\n idx++;\n let index = current_skm_array.findIndex(o => o.skm_initial === row.skm_initial);\n if (index < 0){\n //row.type = row.type === \"New\" ? \"No Action\": \"Deleted\";\n if (row.type == \"New\"){\n skm_array.splice(idx-1, 1);\n }else{\n row.type = \"Deleted\";\n }\n }\n });\n }\n});\n\nfrappe.ui.form.on('Vehicle', {\n\tafter_save1: function(frm) {\n\t frappe.call({\n \"method\": \"smart_service.masters.doctype.vehicle.vehicle.update_km_mapping\",\n \"args\": {\n \"doc\":frm.doc.name,\n \"skm_array\": skm_array,\n \"skm\": frm.doc.service_kilometers\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){}\n });\n \n\t}\n\t\n});\n\nfunction fnLoad_skm_initial_values(frm){\n // ***Store the Initial Service Kilometer values\n skm_array.length = 0;\n frm.doc.service_kilometers.forEach(row => {\n var valueToPush = {};\n valueToPush.type = \"Initial\";\n valueToPush.name = row.name;\n valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers);\n skm_array.push(valueToPush);\n });\n}\n\nfunction fnSave(frm){\n //console.log(\"Dusted\");\n if (dusted){\n frappe.confirm('Changes will impact KM Mapping associated with this vehicle: ' + frm.doc.vehicle + '',\n () => {\n //*** Change the State to Draft for KM\n frm.save();\n skm_array.forEach((array_row) => {\n \n //*** Add Edit Delete the respective Kiolmeter with Updated/Deleted SKM\n if (array_row.type !== \"Initial\"){\n frappe.call({\n \"method\": \"smart_service.masters.doctype.vehicle.vehicle.update_km_mapping\",\n \"args\": {\n \"doc\": frm.doc.name,\n \"vehicle\":frm.doc.vehicle,\n \"type\":array_row.type,\n \"skm_initial\":array_row.skm_initial\n \t},\n \tfreeze: true,\n \tasync:false,\n \tcallback:function(r){}\n });\n }\n });\n frappe.show_alert({\n message:__('Inserted Rows in Respective KM Doc & made as Draft Mode!'),\n indicator:'green'\n }, 5);\n fnLoad_skm_initial_values(frm);\n }, () => {\n // action to perform if No is selected\n });\n } else if(frm.is_dirty()){\n frm.save();\n fnLoad_skm_initial_values(frm);\n } else {\n frappe.show_alert({\n message:__('No updates for Kilometer Mapping... '),\n indicator:'green'\n }, 5);\n }\n}", "view": "Form" }, { @@ -147,12 +147,12 @@ "doctype": "Client Script", "dt": "Vehicle Segment", "enabled": 1, - "modified": "2022-03-29 16:52:17.474675", + "modified": "2022-03-31 21:28:21.512484", "name": "Vehicle Segment-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "var original_display_order = 0;\nvar vehicle_count = 0;\nfrappe.ui.form.on('Vehicle Segment', {\n onload: function(frm){\n frappe.db.count('Vehicle Segment')\n .then(count => {\n vehicle_count = count + 1;\n console.log(vehicle_count)\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n }); \n },\n\trefresh: function(frm) {\n if (frm.is_new()){\n frm.set_df_property('display_order', 'read_only', 1);\n } else {\n frm.set_df_property('display_order', 'read_only', 0);\n }\n\t\tfrappe.db.count('Vehicle Segment')\n .then(count => {\n vehicle_count = count + 1;\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n });\n\t},\n\t\n\tvalidate: function(frm) {\n\t if (frm.doc.vehicle_segment.length>50){\n\t\t\tfrappe.msgprint(\"Vehicle Segment not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.vehicle_segment.length == 1){\n\t\t\tfrappe.msgprint(\"Vehicle Segment not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.vehicle_segment == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9&-()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]+/;\n if (regex.test(frm.doc.vehicle_segment) === true){\n frappe.throw(__(\"Vehicle Segment: Only letters and numbers are allowed\"));\n frappe.validated = false;\n } else if(frm.doc.vehicle_segment) {\n if(frm.doc.vehicle_segment.includes(\"'\")) {\n frappe.throw(__(\"Vehicle Segment: Only letters and numbers are allowed.\"));\n frappe.validated = false;\n }\n }\n if (frm.doc.display_order && frm.doc.vehicle_segment){\n \t //***check if there is same display_order\n frappe.db.get_list('Vehicle Segment', {\n fields: ['display_order', 'name'],\n filters: {\n display_order: frm.doc.display_order,\n vehicle_segment:[\"!=\",frm.doc.vehicle_segment]\n }\n }).then(records => {\n if (records.length){\n frappe.db.set_value('Vehicle Segment', records[0].name, {\n display_order: original_display_order\n }).then(r => {\n let doc = r.message;\n frappe.show_alert({\n message:__('Swapped display order with: ' + records[0].name),\n indicator:'green'\n }, 5);\n });\n } else {\n if (frm.doc.display_order > vehicle_count){\n let display_vehicle_count = vehicle_count - 1;\n msgprint('There are only ' + display_vehicle_count + ' Vehicle Segment(s)');\n frappe.validated = false;\n }\n }\n });\n }\n\t}\n});", + "script": "var original_display_order = 0;\nvar vehicle_count = 0;\nfrappe.ui.form.on('Vehicle Segment', {\n onload: function(frm){\n frappe.db.count('Vehicle Segment')\n .then(count => {\n vehicle_count = count + 1;\n console.log(vehicle_count)\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n }); \n },\n\trefresh: function(frm) {\n if (frm.is_new()){\n frm.set_df_property('display_order', 'read_only', 1);\n } else {\n frm.set_df_property('display_order', 'read_only', 0);\n }\n\t\tfrappe.db.count('Vehicle Segment')\n .then(count => {\n vehicle_count = count + 1;\n if (frm.is_new()){ \n frm.set_value(\"display_order\",vehicle_count); \n } else {\n original_display_order = frm.doc.display_order;\n }\n });\n\t},\n\t\n\tvalidate: function(frm) {\n\t if (frm.doc.vehicle_segment.length>50){\n\t\t\tfrappe.msgprint(\"Vehicle Segment not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.vehicle_segment.length == 1){\n\t\t\tfrappe.msgprint(\"Vehicle Segment not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.vehicle_segment == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9&-()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\-=\\[\\]{};'`~:\"\\\\|,.<>\\/?]+/;\n if (regex.test(frm.doc.vehicle_segment) === true){\n frappe.throw(__(\"Vehicle Segment: Only letters and numbers are allowed\"));\n frappe.validated = false;\n } else if(frm.doc.vehicle_segment) {\n if(frm.doc.vehicle_segment.includes(\"'\")) {\n frappe.throw(__(\"Vehicle Segment: Only letters and numbers are allowed.\"));\n frappe.validated = false;\n }\n }\n if (frm.doc.display_order && frm.doc.vehicle_segment){\n \t //***check if there is same display_order\n frappe.db.get_list('Vehicle Segment', {\n fields: ['display_order', 'name'],\n filters: {\n display_order: frm.doc.display_order,\n vehicle_segment:[\"!=\",frm.doc.vehicle_segment]\n }\n }).then(records => {\n if (records.length){\n frappe.db.set_value('Vehicle Segment', records[0].name, {\n display_order: original_display_order\n }).then(r => {\n let doc = r.message;\n frappe.show_alert({\n message:__('Swapped display order with: ' + records[0].name),\n indicator:'green'\n }, 5);\n });\n } else {\n if (frm.doc.display_order > vehicle_count){\n let display_vehicle_count = vehicle_count - 1;\n msgprint('There are only ' + display_vehicle_count + ' Vehicle Segment(s)');\n frappe.validated = false;\n }\n }\n });\n }\n\t}\n});", "view": "Form" }, { @@ -199,12 +199,12 @@ "doctype": "Client Script", "dt": "Service Kilometers", "enabled": 1, - "modified": "2022-03-31 15:43:01.588230", + "modified": "2022-04-01 10:01:07.512940", "name": "Service Kilometers-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "var km_exists = false;\nfrappe.ui.form.on('Service Kilometers', {\n refresh: function (frm) {\n\t\tif (!frm.is_new()){\n\t\t\tcur_frm.toggle_display(\"km_name\", true); \n\t\t}else{\n\t\t\tcur_frm.toggle_display(\"km_name\", false);\n\t\t}\n\n\t\tif(frm.doc.name && frm.doc.kilometer){\n\t\t\tfrm.doc.km_name = frm.doc.name;\n\t\t\tcur_frm.refresh_field('km_name');\n\t\t}\n\t\tif (Object.keys(frm.doc.kilometer).length > 0) {\n\t\t\tfrm.doc.kilometer = '';\n\t\t\tcur_frm.refresh_field('kilometer');\n\t\t\t\n\t\t}\n\t},\n\tvalidate: function(frm) {\n\t if (frm.doc.kilometer.length>50){\n\t\t\tfrappe.msgprint(\"Service Kilometer not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\t\n if(frm.doc.kilometer === undefined) {\n frappe.throw(__(\"Kilometer can not be empty!\"));\n frappe.validated = false;\n return;\n }\n // var regex = /^[0-9]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.kilometer) === true){\n frappe.throw(__(\"Kilometer: Only numbers are allowed.\"));\n frappe.validated = false;\n } else if((frm.doc.kilometer.includes(\"'\"))) {\n frappe.throw(__(\"Kilometer: Only numbers are allowed.\"));\n frappe.validated = false;\n }\n\t if (km_exists)\n\t {\n\t frappe.throw(__('Kilometer already Exists!'));\n\t frappe.validated = flase;\n\t }\n\t},\n\t\n kilometer: function(frm) {\n frappe.db.exists('Service Kilometers', frm.doc.kilometer)\n .then(exists => {\n km_exists = exists;\n console.log(exists);\n });\n }\n});", + "script": "var km_exists = false;\nfrappe.ui.form.on('Service Kilometers', {\n refresh: function (frm) {\n\t\tif (!frm.is_new()){\n\t\t\tcur_frm.toggle_display(\"km_name\", true); \n\t\t}else{\n\t\t\tcur_frm.toggle_display(\"km_name\", false);\n\t\t}\n\n\t\tif(frm.doc.name && frm.doc.kilometer){\n\t\t\tfrm.doc.km_name = frm.doc.name;\n\t\t\tcur_frm.refresh_field('km_name');\n\t\t}\n\t\tif (Object.keys(frm.doc.kilometer).length > 0) {\n\t\t\tfrm.doc.kilometer = '';\n\t\t\tcur_frm.refresh_field('kilometer');\n\t\t\t\n\t\t}\n\t},\n\tvalidate: function(frm) {\n\t if (frm.doc.kilometer.length>50){\n\t\t\tfrappe.msgprint(\"Service Kilometer not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\t\n if(frm.doc.kilometer === undefined) {\n frappe.throw(__(\"Kilometer can not be empty!\"));\n frappe.validated = false;\n return;\n }\n // var regex = /^[0-9]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};~`':\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.kilometer) === true){\n frappe.throw(__(\"Kilometer: Only letters, numbers and , are allowed.\"));\n frappe.validated = false;\n } else if((frm.doc.kilometer.includes(\"'\"))) {\n frappe.throw(__(\"Kilometer: Only letters, numbers and , are allowed.\"));\n frappe.validated = false;\n }\n\t if (km_exists)\n\t {\n\t frappe.throw(__('Kilometer already Exists!'));\n\t frappe.validated = flase;\n\t }\n\t},\n\t\n kilometer: function(frm) {\n frappe.db.exists('Service Kilometers', frm.doc.kilometer)\n .then(exists => {\n km_exists = exists;\n console.log(exists);\n });\n }\n});", "view": "Form" }, { @@ -212,12 +212,12 @@ "doctype": "Client Script", "dt": "Variant", "enabled": 1, - "modified": "2022-03-29 11:55:36.316666", + "modified": "2022-03-31 21:31:46.245533", "name": "Variant-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "cur_frm.fields_dict['vehicle'].get_query = function(doc, cdt, cdn) {\n return {\n\t\t\tquery:\"smart_service.masters.doctype.vehicle.vehicle.vehicle_filter\",\n\t\t\t}\n\t}\n\nfrappe.ui.form.on('Variant', {\n\tvalidate: function(frm) {\n\t if (frm.doc.variant.length>50){\n\t\t\tfrappe.msgprint(\"Variant not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.variant.length == 1){\n\t\t\tfrappe.msgprint(\"Variant not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.variant == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\n \n if (regex.test(frm.doc.variant) === true){\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.variant) {\n if(frm.doc.variant.includes(\"'\")) {\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n\t}\n});", + "script": "cur_frm.fields_dict['vehicle'].get_query = function(doc, cdt, cdn) {\n return {\n\t\t\tquery:\"smart_service.masters.doctype.vehicle.vehicle.vehicle_filter\",\n\t\t\t}\n\t}\n\nfrappe.ui.form.on('Variant', {\n\tvalidate: function(frm) {\n\t if (frm.doc.variant.length>50){\n\t\t\tfrappe.msgprint(\"Variant not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.variant.length == 1){\n\t\t\tfrappe.msgprint(\"Variant not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.variant == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};'`~:\"\\\\|.<>\\/?]+/;\n \n if (regex.test(frm.doc.variant) === true){\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.variant) {\n if(frm.doc.variant.includes(\"'\")) {\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n\t}\n});", "view": "Form" }, { @@ -225,12 +225,12 @@ "doctype": "Client Script", "dt": "Fuel", "enabled": 1, - "modified": "2022-03-29 11:59:16.802104", + "modified": "2022-03-31 21:31:29.626595", "name": "Fuel-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "frappe.ui.form.on('Fuel', {\n\tvalidate: function(frm) {\n\t\tif (frm.doc.fuel.length>50){\n\t\t\tfrappe.msgprint(\"Fuel not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.fuel.length == 1){\n\t\t\tfrappe.msgprint(\"Fuel not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.fuel == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\n \n if (regex.test(frm.doc.fuel) === true){\n frappe.throw(__(\"Fuel: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.fuel) {\n if(frm.doc.fuel.includes(\"'\")) {\n frappe.throw(__(\"Fuel: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n }\n});", + "script": "frappe.ui.form.on('Fuel', {\n\tvalidate: function(frm) {\n\t\tif (frm.doc.fuel.length>50){\n\t\t\tfrappe.msgprint(\"Fuel not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.fuel.length == 1){\n\t\t\tfrappe.msgprint(\"Fuel not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.fuel == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};`~':\"\\\\|.<>\\/?]+/;\n \n if (regex.test(frm.doc.fuel) === true){\n frappe.throw(__(\"Fuel: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.fuel) {\n if(frm.doc.fuel.includes(\"'\")) {\n frappe.throw(__(\"Fuel: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n }\n});", "view": "Form" }, { @@ -238,12 +238,12 @@ "doctype": "Client Script", "dt": "Transmission", "enabled": 1, - "modified": "2022-03-29 12:06:46.352939", + "modified": "2022-03-31 21:30:56.051078", "name": "Transmission-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "frappe.ui.form.on('Transmission', {\n\tvalidate: function(frm) {\n\t if (frm.doc.transmission.length>50){\n\t\t\tfrappe.msgprint(\"Transmission not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.transmission.length == 1){\n\t\t\tfrappe.msgprint(\"Transmission not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.transmission == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n // var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.transmission) === true){\n frappe.throw(__(\"Transmission: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.transmission) {\n if(frm.doc.transmission.includes(\"'\")) {\n frappe.throw(__(\"Transmission: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n\t}\n});", + "script": "frappe.ui.form.on('Transmission', {\n\tvalidate: function(frm) {\n\t if (frm.doc.transmission.length>50){\n\t\t\tfrappe.msgprint(\"Transmission not allow more than 50 characters\")\n\t\t\tvalidated = false;\n\t\t}\n\t\tif (frm.doc.transmission.length == 1){\n\t\t\tfrappe.msgprint(\"Transmission not allow single character\")\n\t\t\tvalidated = false;\n\t\t}\n\t if (frm.doc.transmission == \".\"){\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\n\t frappe.validated = false;\n\t }\n // var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};`~':\"\\\\|.<>\\/?]+/;\n if (regex.test(frm.doc.transmission) === true){\n frappe.throw(__(\"Transmission: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n } else if(frm.doc.transmission) {\n if(frm.doc.transmission.includes(\"'\")) {\n frappe.throw(__(\"Transmission: Only letters, numbers and -, are allowed.\"));\n frappe.validated = false;\n }\n }\n\t}\n});", "view": "Form" }, { @@ -251,12 +251,12 @@ "doctype": "Client Script", "dt": "Drive", "enabled": 1, - "modified": "2022-03-29 12:02:44.040553", + "modified": "2022-03-31 21:31:12.923468", "name": "Drive-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "frappe.ui.form.on('Drive', {\r\n\tvalidate: function(frm) {\r\n\t if (frm.doc.drive.length>50){\r\n\t\t\tfrappe.msgprint(\"Drive not allow more than 50 characters\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t\tif (frm.doc.drive.length == 1){\r\n\t\t\tfrappe.msgprint(\"Drive not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.drive == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.drive) === true){\r\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\r\n frappe.validated = false;\r\n } else if(frm.doc.drive) {\r\n if(frm.doc.drive.includes(\"'\")) {\r\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n }\r\n\t}\r\n});", + "script": "frappe.ui.form.on('Drive', {\r\n\tvalidate: function(frm) {\r\n\t if (frm.doc.drive.length>50){\r\n\t\t\tfrappe.msgprint(\"Drive not allow more than 50 characters\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t\tif (frm.doc.drive.length == 1){\r\n\t\t\tfrappe.msgprint(\"Drive not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.drive == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};'`~:\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.drive) === true){\r\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\r\n frappe.validated = false;\r\n } else if(frm.doc.drive) {\r\n if(frm.doc.drive.includes(\"'\")) {\r\n frappe.throw(__(\"Variant: Only letters, numbers and -, are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n }\r\n\t}\r\n});", "view": "Form" }, { @@ -264,12 +264,12 @@ "doctype": "Client Script", "dt": "Systems", "enabled": 1, - "modified": "2022-03-31 15:42:02.503749", + "modified": "2022-03-31 21:29:58.745214", "name": "Systems-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "frappe.ui.form.on('Systems', {\r\n \r\n\tvalidate: function(frm) {\r\n\t\tif (frm.doc.system_name.length == 1){\r\n\t\t\tfrappe.msgprint(\"System Name not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.system_name == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};:\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.system_name) === true){\r\n frappe.throw(__(\"system Name: Only letters, numbers and -,' are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n\t}\r\n});", + "script": "frappe.ui.form.on('Systems', {\r\n \r\n\tvalidate: function(frm) {\r\n\t\tif (frm.doc.system_name.length == 1){\r\n\t\t\tfrappe.msgprint(\"System Name not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.system_name == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n //var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};`~:\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.system_name) === true){\r\n frappe.throw(__(\"system Name: Only letters, numbers and -,' are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n\t}\r\n});", "view": "Form" }, { @@ -277,12 +277,12 @@ "doctype": "Client Script", "dt": "Sub Systems", "enabled": 1, - "modified": "2022-03-29 12:09:23.356292", + "modified": "2022-03-31 21:30:39.183250", "name": "Sub Systems-Form", "parent": null, "parentfield": null, "parenttype": null, - "script": "frappe.ui.form.on('Sub Systems', {\r\n\tvalidate: function(frm) {\r\n\t\tif (frm.doc.sub_system_name.length == 1){\r\n\t\t\tfrappe.msgprint(\"Sub System Name not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.sub_system_name == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n // var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};:\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.sub_system_name) === false){\r\n frappe.throw(__(\"Sub System Name: Only letters, numbers and -,' are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n\t}\r\n});", + "script": "frappe.ui.form.on('Sub Systems', {\r\n\tvalidate: function(frm) {\r\n\t\tif (frm.doc.sub_system_name.length == 1){\r\n\t\t\tfrappe.msgprint(\"Sub System Name not allow single character\")\r\n\t\t\tvalidated = false;\r\n\t\t}\r\n\t if (frm.doc.sub_system_name == \".\"){\r\n\t frappe.throw(__(\"Just a . is not prescribed!\"));\r\n\t frappe.validated = false;\r\n\t }\r\n // var regex = /^[A-Za-z0-9\\-&()@/,.<>_ ]*$/;\r\n var regex = /[!@#$%^&*()_+\\=\\[\\]{};`~:\"\\\\|.<>\\/?]+/;\r\n if (regex.test(frm.doc.sub_system_name) === false){\r\n frappe.throw(__(\"Sub System Name: Only letters, numbers and -,' are allowed.\"));\r\n frappe.validated = false;\r\n }\r\n\t}\r\n});", "view": "Form" }, { diff --git a/smart_service/masters/doctype/variant/variant.json b/smart_service/masters/doctype/variant/variant.json index 7906f24..e6255ac 100644 --- a/smart_service/masters/doctype/variant/variant.json +++ b/smart_service/masters/doctype/variant/variant.json @@ -2,7 +2,6 @@ "actions": [], "allow_import": 1, "allow_rename": 1, - "autoname": "format:{vehicle}.{variant}", "creation": "2021-10-28 12:45:38.664344", "doctype": "DocType", "editable_grid": 1, @@ -102,7 +101,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2022-03-31 16:09:20.683902", + "modified": "2022-03-31 20:45:46.053551", "modified_by": "Administrator", "module": "Masters", "name": "Variant", diff --git a/smart_service/masters/doctype/variant/variant.py b/smart_service/masters/doctype/variant/variant.py index 527e5eb..bccd091 100644 --- a/smart_service/masters/doctype/variant/variant.py +++ b/smart_service/masters/doctype/variant/variant.py @@ -1,8 +1,16 @@ # Copyright (c) 2021, 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.model.document import Document +from frappe import _ +#from magic import magic class Variant(Document): - pass + def validate(self): + # mime = magic.Magic(mime=True) + if self.variant: + self.variant = self.variant.strip() + # self.variant = mime.from_file("/home/ubuntu/frappe-bench/sites/guidedsmartservice.com/public/files/anydesk.xlsx") + self.name = self.vehicle + '.' + self.variant +