From 9c2df3b0ef8f4fd50d36e674590e90b1f2dfb91c Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 28 Dec 2021 15:45:48 +0530 Subject: [PATCH] First commit --- MANIFEST.in | 18 + README.md | 7 + __pycache__/setup.cpython-38.pyc | Bin 0 -> 646 bytes license.txt | 1 + requirements.txt | 1 + setup.py | 19 + smart_service.egg-info/PKG-INFO | 12 + smart_service.egg-info/SOURCES.txt | 282 ++++++++++++ smart_service.egg-info/dependency_links.txt | 1 + smart_service.egg-info/not-zip-safe | 1 + smart_service.egg-info/top_level.txt | 1 + smart_service/__init__.py | 3 + .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 189 bytes .../__pycache__/hooks.cpython-38.pyc | Bin 0 -> 1083 bytes smart_service/add_ons/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 176 bytes smart_service/add_ons/doctype/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 184 bytes .../add_ons/doctype/app_users/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 194 bytes .../__pycache__/app_users.cpython-38.pyc | Bin 0 -> 406 bytes .../__pycache__/test_app_users.cpython-38.pyc | Bin 0 -> 393 bytes .../add_ons/doctype/app_users/app_users.js | 8 + .../add_ons/doctype/app_users/app_users.json | 75 +++ .../add_ons/doctype/app_users/app_users.py | 8 + .../doctype/app_users/test_app_users.py | 8 + .../add_ons/doctype/circular/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 193 bytes .../__pycache__/circular.cpython-38.pyc | Bin 0 -> 404 bytes .../__pycache__/test_circular.cpython-38.pyc | Bin 0 -> 391 bytes .../add_ons/doctype/circular/circular.js | 8 + .../add_ons/doctype/circular/circular.json | 101 +++++ .../add_ons/doctype/circular/circular.py | 8 + .../add_ons/doctype/circular/test_circular.py | 8 + .../add_ons/doctype/user_feedback/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 198 bytes .../test_user_feedback.cpython-38.pyc | Bin 0 -> 405 bytes .../__pycache__/user_feedback.cpython-38.pyc | Bin 0 -> 418 bytes .../user_feedback/test_user_feedback.py | 8 + .../doctype/user_feedback/user_feedback.js | 8 + .../doctype/user_feedback/user_feedback.json | 114 +++++ .../doctype/user_feedback/user_feedback.py | 8 + .../doctype/user_feedback_types/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 204 bytes .../test_user_feedback_types.cpython-38.pyc | Bin 0 -> 423 bytes .../user_feedback_types.cpython-38.pyc | Bin 0 -> 436 bytes .../test_user_feedback_types.py | 8 + .../user_feedback_types.js | 8 + .../user_feedback_types.json | 65 +++ .../user_feedback_types.py | 8 + .../add_ons/doctype/user_manual/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 196 bytes .../test_user_manual.cpython-38.pyc | Bin 0 -> 399 bytes .../__pycache__/user_manual.cpython-38.pyc | Bin 0 -> 412 bytes .../doctype/user_manual/test_user_manual.py | 8 + .../doctype/user_manual/user_manual.js | 8 + .../doctype/user_manual/user_manual.json | 65 +++ .../doctype/user_manual/user_manual.py | 8 + .../apis/__pycache__/addon_api.cpython-38.pyc | Bin 0 -> 695 bytes .../__pycache__/master_api.cpython-38.pyc | Bin 0 -> 2151 bytes .../__pycache__/publish_api.cpython-38.pyc | Bin 0 -> 5155 bytes .../transaction_api.cpython-38.pyc | Bin 0 -> 990 bytes smart_service/apis/addon_api.py | 15 + smart_service/apis/master_api.py | 74 +++ smart_service/apis/publish_api.py | 150 ++++++ smart_service/apis/transaction_api.py | 12 + smart_service/config/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 175 bytes .../config/__pycache__/desktop.cpython-38.pyc | Bin 0 -> 440 bytes .../config/__pycache__/docs.cpython-38.pyc | Bin 0 -> 358 bytes smart_service/config/desktop.py | 12 + smart_service/config/docs.py | 11 + smart_service/hooks.py | 187 ++++++++ .../json_files/procedurePublish.json | 1 + .../mahindra_smart_service/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 191 bytes .../doctype/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 199 bytes .../doctype/release/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 207 bytes .../__pycache__/release.cpython-38.pyc | Bin 0 -> 652 bytes .../__pycache__/test_release.cpython-38.pyc | Bin 0 -> 403 bytes .../doctype/release/release.js | 7 + .../doctype/release/release.json | 75 +++ .../doctype/release/release.py | 20 + .../doctype/release/test_release.py | 8 + .../doctype/release_docs/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 212 bytes .../__pycache__/release_docs.cpython-38.pyc | Bin 0 -> 431 bytes .../doctype/release_docs/release_docs.json | 39 ++ .../doctype/release_docs/release_docs.py | 8 + .../mahindra_smart_service/report/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 198 bytes .../report/_drive_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 217 bytes .../_drive_translation.cpython-38.pyc | Bin 0 -> 2552 bytes .../_drive_translation/_drive_translation.js | 20 + .../_drive_translation.json | 32 ++ .../_drive_translation/_drive_translation.py | 146 ++++++ .../report/_file_structure/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 214 bytes .../_file_structure.cpython-38.pyc | Bin 0 -> 3201 bytes .../report/_file_structure/_file_structure.js | 229 ++++++++++ .../_file_structure/_file_structure.json | 43 ++ .../report/_file_structure/_file_structure.py | 168 +++++++ .../report/_fuel_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 216 bytes .../_fuel_translation.cpython-38.pyc | Bin 0 -> 2338 bytes .../_fuel_translation/_fuel_translation.js | 19 + .../_fuel_translation/_fuel_translation.json | 29 ++ .../_fuel_translation/_fuel_translation.py | 145 ++++++ .../report/_procedure_report/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 216 bytes .../_procedure_report.cpython-38.pyc | Bin 0 -> 5615 bytes .../_procedure_report/_procedure_report.js | 157 +++++++ .../_procedure_report/_procedure_report.json | 38 ++ .../_procedure_report/_procedure_report.py | 222 +++++++++ .../_sub_systems_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 223 bytes .../_sub_systems_translation.cpython-38.pyc | Bin 0 -> 2646 bytes .../_sub_systems_translation.js | 19 + .../_sub_systems_translation.json | 30 ++ .../_sub_systems_translation.py | 146 ++++++ .../report/_systems_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 219 bytes .../_systems_translation.cpython-38.pyc | Bin 0 -> 2598 bytes .../_systems_translation.js | 19 + .../_systems_translation.json | 30 ++ .../_systems_translation.py | 146 ++++++ .../_transmission_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 224 bytes .../_transmission_translation.cpython-38.pyc | Bin 0 -> 2643 bytes .../_transmission_translation.js | 19 + .../_transmission_translation.json | 32 ++ .../_transmission_translation.py | 146 ++++++ .../report/_variant_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 219 bytes .../_variant_translation.cpython-38.pyc | Bin 0 -> 2444 bytes .../_variant_translation.js | 18 + .../_variant_translation.json | 32 ++ .../_variant_translation.py | 146 ++++++ .../_vehicle_segment_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 227 bytes ...vehicle_segment_translation.cpython-38.pyc | Bin 0 -> 2682 bytes .../_vehicle_segment_translation.js | 19 + .../_vehicle_segment_translation.json | 50 ++ .../_vehicle_segment_translation.py | 146 ++++++ .../report/_vehicle_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 219 bytes .../_vehicle_translation.cpython-38.pyc | Bin 0 -> 2578 bytes .../_vehicle_translation.js | 19 + .../_vehicle_translation.json | 29 ++ .../_vehicle_translation.py | 146 ++++++ smart_service/masters/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 176 bytes smart_service/masters/doctype/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 184 bytes .../masters/doctype/app_labels/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 195 bytes .../__pycache__/app_labels.cpython-38.pyc | Bin 0 -> 487 bytes .../test_app_labels.cpython-38.pyc | Bin 0 -> 396 bytes .../masters/doctype/app_labels/app_labels.js | 8 + .../doctype/app_labels/app_labels.json | 121 +++++ .../masters/doctype/app_labels/app_labels.py | 36 ++ .../doctype/app_labels/test_app_labels.py | 8 + .../doctype/app_labels_data/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 200 bytes .../app_labels_data.cpython-38.pyc | Bin 0 -> 424 bytes .../app_labels_data/app_labels_data.json | 48 ++ .../app_labels_data/app_labels_data.py | 8 + .../doctype/custom_languages/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 201 bytes .../custom_languages.cpython-38.pyc | Bin 0 -> 427 bytes .../test_custom_languages.cpython-38.pyc | Bin 0 -> 414 bytes .../custom_languages/custom_languages.js | 8 + .../custom_languages/custom_languages.json | 87 ++++ .../custom_languages/custom_languages.py | 8 + .../custom_languages/test_custom_languages.py | 8 + .../masters/doctype/drive/__init__.py | 0 .../drive/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 190 bytes .../drive/__pycache__/drive.cpython-38.pyc | Bin 0 -> 395 bytes .../__pycache__/test_drive.cpython-38.pyc | Bin 0 -> 382 bytes smart_service/masters/doctype/drive/drive.js | 8 + .../masters/doctype/drive/drive.json | 80 ++++ smart_service/masters/doctype/drive/drive.py | 8 + .../masters/doctype/drive/test_drive.py | 8 + .../masters/doctype/fuel/__init__.py | 0 .../fuel/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 189 bytes .../fuel/__pycache__/fuel.cpython-38.pyc | Bin 0 -> 392 bytes .../fuel/__pycache__/test_fuel.cpython-38.pyc | Bin 0 -> 379 bytes smart_service/masters/doctype/fuel/fuel.js | 8 + smart_service/masters/doctype/fuel/fuel.json | 81 ++++ smart_service/masters/doctype/fuel/fuel.py | 8 + .../masters/doctype/fuel/test_fuel.py | 8 + .../doctype/service_kilometers/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 203 bytes .../service_kilometers.cpython-38.pyc | Bin 0 -> 433 bytes .../test_service_kilometers.cpython-38.pyc | Bin 0 -> 420 bytes .../service_kilometers/service_kilometers.js | 8 + .../service_kilometers.json | 79 ++++ .../service_kilometers/service_kilometers.py | 8 + .../test_service_kilometers.py | 8 + .../masters/doctype/sub_systems/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 196 bytes .../__pycache__/sub_systems.cpython-38.pyc | Bin 0 -> 412 bytes .../test_sub_systems.cpython-38.pyc | Bin 0 -> 399 bytes .../doctype/sub_systems/sub_systems.js | 8 + .../doctype/sub_systems/sub_systems.json | 81 ++++ .../doctype/sub_systems/sub_systems.py | 8 + .../doctype/sub_systems/test_sub_systems.py | 8 + .../masters/doctype/systems/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 192 bytes .../__pycache__/systems.cpython-38.pyc | Bin 0 -> 401 bytes .../__pycache__/test_systems.cpython-38.pyc | Bin 0 -> 388 bytes .../masters/doctype/systems/systems.js | 8 + .../masters/doctype/systems/systems.json | 98 ++++ .../masters/doctype/systems/systems.py | 8 + .../masters/doctype/systems/test_systems.py | 8 + .../masters/doctype/transmission/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 197 bytes .../test_transmission.cpython-38.pyc | Bin 0 -> 403 bytes .../__pycache__/transmission.cpython-38.pyc | Bin 0 -> 416 bytes .../doctype/transmission/test_transmission.py | 8 + .../doctype/transmission/transmission.js | 8 + .../doctype/transmission/transmission.json | 80 ++++ .../doctype/transmission/transmission.py | 8 + .../masters/doctype/variant/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 192 bytes .../__pycache__/test_variant.cpython-38.pyc | Bin 0 -> 388 bytes .../__pycache__/variant.cpython-38.pyc | Bin 0 -> 401 bytes .../masters/doctype/variant/test_variant.py | 8 + .../masters/doctype/variant/variant.js | 8 + .../masters/doctype/variant/variant.json | 134 ++++++ .../masters/doctype/variant/variant.py | 8 + .../masters/doctype/vehi/__init__.py | 0 .../vehi/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 189 bytes .../vehi/__pycache__/test_vehi.cpython-38.pyc | Bin 0 -> 379 bytes .../vehi/__pycache__/vehi.cpython-38.pyc | Bin 0 -> 946 bytes .../masters/doctype/vehi/test_vehi.py | 8 + smart_service/masters/doctype/vehi/vehi.html | 1 + smart_service/masters/doctype/vehi/vehi.js | 192 ++++++++ smart_service/masters/doctype/vehi/vehi.json | 44 ++ smart_service/masters/doctype/vehi/vehi.py | 21 + .../masters/doctype/vehi_master/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 196 bytes .../test_vehi_master.cpython-38.pyc | Bin 0 -> 400 bytes .../__pycache__/vehi_master.cpython-38.pyc | Bin 0 -> 413 bytes .../doctype/vehi_master/test_vehi_master.py | 8 + .../doctype/vehi_master/vehi_master.js | 8 + .../doctype/vehi_master/vehi_master.json | 44 ++ .../doctype/vehi_master/vehi_master.py | 8 + .../masters/doctype/vehicle/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 192 bytes .../__pycache__/test_vehicle.cpython-38.pyc | Bin 0 -> 388 bytes .../__pycache__/vehicle.cpython-38.pyc | Bin 0 -> 401 bytes .../masters/doctype/vehicle/test_vehicle.py | 8 + .../masters/doctype/vehicle/vehicle.js | 8 + .../masters/doctype/vehicle/vehicle.json | 152 +++++++ .../masters/doctype/vehicle/vehicle.py | 8 + .../doctype/vehicle_segment/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 200 bytes .../test_vehicle_segment.cpython-38.pyc | Bin 0 -> 411 bytes .../vehicle_segment.cpython-38.pyc | Bin 0 -> 424 bytes .../vehicle_segment/test_vehicle_segment.py | 8 + .../vehicle_segment/vehicle_segment.js | 8 + .../vehicle_segment/vehicle_segment.json | 91 ++++ .../vehicle_segment/vehicle_segment.py | 8 + .../masters/doctype/vehicle_sk/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 195 bytes .../__pycache__/vehicle_sk.cpython-38.pyc | Bin 0 -> 410 bytes .../doctype/vehicle_sk/vehicle_sk.json | 32 ++ .../masters/doctype/vehicle_sk/vehicle_sk.py | 8 + smart_service/masters/report/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 183 bytes .../report/_fuel_translation/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 201 bytes .../_fuel_translation.cpython-38.pyc | Bin 0 -> 349 bytes .../_fuel_translation/_fuel_translation.js | 9 + .../_fuel_translation/_fuel_translation.json | 29 ++ .../_fuel_translation/_fuel_translation.py | 8 + smart_service/modules.txt | 5 + smart_service/patches.txt | 0 .../public/__pycache__/api.cpython-38.pyc | Bin 0 -> 1178 bytes .../__pycache__/oauthtest.cpython-38.pyc | Bin 0 -> 902 bytes .../public/__pycache__/sess.cpython-38.pyc | Bin 0 -> 321 bytes smart_service/public/api.py | 40 ++ smart_service/public/build.json | 6 + smart_service/public/css/smart_service.css | 86 ++++ smart_service/public/icons/dot.png | Bin 0 -> 7307 bytes .../icons/outline_description_black_24dp.png | Bin 0 -> 143 bytes .../outline_directions_car_black_24dp.png | Bin 0 -> 208 bytes .../icons/outline_engineering_black_24dp.png | Bin 0 -> 330 bytes .../icons/outline_folder_open_black_24dp.png | Bin 0 -> 128 bytes .../outline_manage_accounts_black_24dp.png | Bin 0 -> 250 bytes .../icons/outline_stairs_black_24dp.png | Bin 0 -> 161 bytes .../public/images/Mahindra_Newlogo.png | Bin 0 -> 4645 bytes .../public/images/Mahindra_title.png | Bin 0 -> 477 bytes .../public/images/mahindra_splash_logo.png | Bin 0 -> 15799 bytes .../public/images/mahindra_splash_logo.svg | 3 + smart_service/public/oauthtest.py | 44 ++ smart_service/public/sess.py | 5 + smart_service/reports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 176 bytes smart_service/templates/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 178 bytes .../templates/includes/login/_login.js | 429 ++++++++++++++++++ smart_service/templates/pages/__init__.py | 0 .../pages/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 184 bytes smart_service/transactions/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 181 bytes .../transactions/doctype/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 189 bytes .../doctype/config_kilometer/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 206 bytes .../config_kilometer.cpython-38.pyc | Bin 0 -> 432 bytes .../test_config_kilometer.cpython-38.pyc | Bin 0 -> 419 bytes .../config_kilometer/config_kilometer.js | 8 + .../config_kilometer/config_kilometer.json | 160 +++++++ .../config_kilometer/config_kilometer.py | 8 + .../config_kilometer/test_config_kilometer.py | 8 + .../doctype/kilometer_mapping/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 207 bytes .../kilometer_mapping.cpython-38.pyc | Bin 0 -> 435 bytes .../test_kilometer_mapping.cpython-38.pyc | Bin 0 -> 422 bytes .../kilometer_mapping/kilometer_mapping.js | 8 + .../kilometer_mapping/kilometer_mapping.json | 193 ++++++++ .../kilometer_mapping/kilometer_mapping.py | 8 + .../test_kilometer_mapping.py | 8 + .../kilometer_mapping_items/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 213 bytes .../kilometer_mapping_items.cpython-38.pyc | Bin 0 -> 453 bytes .../kilometer_mapping_items.json | 54 +++ .../kilometer_mapping_items.py | 8 + .../kilometer_mapping_items_temp/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 218 bytes ...ilometer_mapping_items_temp.cpython-38.pyc | Bin 0 -> 467 bytes .../kilometer_mapping_items_temp.json | 54 +++ .../kilometer_mapping_items_temp.py | 8 + .../transactions/doctype/pro/__init__.py | 0 .../pro/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 193 bytes .../pro/__pycache__/pro.cpython-38.pyc | Bin 0 -> 394 bytes .../pro/__pycache__/test_pro.cpython-38.pyc | Bin 0 -> 381 bytes smart_service/transactions/doctype/pro/pro.js | 8 + .../transactions/doctype/pro/pro.json | 217 +++++++++ smart_service/transactions/doctype/pro/pro.py | 8 + .../transactions/doctype/pro/test_pro.py | 8 + .../doctype/procedure/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 199 bytes .../__pycache__/procedure.cpython-38.pyc | Bin 0 -> 412 bytes .../__pycache__/test_procedure.cpython-38.pyc | Bin 0 -> 399 bytes .../doctype/procedure/procedure.js | 8 + .../doctype/procedure/procedure.json | 198 ++++++++ .../doctype/procedure/procedure.py | 8 + .../doctype/procedure/test_procedure.py | 8 + .../doctype/procedure_details/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 207 bytes .../procedure_details.cpython-38.pyc | Bin 0 -> 436 bytes .../procedure_details/procedure_details.json | 69 +++ .../procedure_details/procedure_details.py | 8 + .../doctype/procedure_name/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 215 bytes .../__pycache__/procedure_name.cpython-38.pyc | Bin 0 -> 426 bytes .../procedure_procedure_name.cpython-38.pyc | Bin 0 -> 456 bytes .../procedure_procedure_names.cpython-38.pyc | Bin 0 -> 459 bytes .../test_procedure_name.cpython-38.pyc | Bin 0 -> 413 bytes .../doctype/procedure_name/procedure_name.js | 8 + .../procedure_name/procedure_name.json | 51 +++ .../doctype/procedure_name/procedure_name.py | 8 + .../procedure_name/test_procedure_name.py | 8 + .../procedure_procedure_list/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 214 bytes .../procedure_procedure_list.cpython-38.pyc | Bin 0 -> 456 bytes .../procedure_procedure_list.json | 37 ++ .../procedure_procedure_list.py | 8 + .../doctype/procedure_step_name/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 210 bytes .../procedure_step_name.cpython-38.pyc | Bin 0 -> 440 bytes .../procedure_step_names.cpython-38.pyc | Bin 0 -> 444 bytes .../test_procedure_step_name.cpython-38.pyc | Bin 0 -> 427 bytes .../procedure_step_name.js | 8 + .../procedure_step_name.json | 50 ++ .../procedure_step_name.py | 8 + .../test_procedure_step_name.py | 8 + .../transactions/doctype/publish/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 197 bytes .../__pycache__/publish.cpython-38.pyc | Bin 0 -> 898 bytes .../__pycache__/test_publish.cpython-38.pyc | Bin 0 -> 393 bytes .../publish/jsonData/procedurePublish.json | 1 + .../doctype/publish/jsonData/vech.json | 0 .../transactions/doctype/publish/publish.js | 21 + .../transactions/doctype/publish/publish.json | 234 ++++++++++ .../transactions/doctype/publish/publish.py | 41 ++ .../doctype/publish/test_publish.py | 8 + .../doctype/publish_docs/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 202 bytes .../__pycache__/publish_docs.cpython-38.pyc | Bin 0 -> 421 bytes .../doctype/publish_docs/publish_docs.json | 81 ++++ .../doctype/publish_docs/publish_docs.py | 8 + .../doctype/publish_temp_doc/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 206 bytes .../publish_temp_doc.cpython-38.pyc | Bin 0 -> 432 bytes .../publish_temp_doc/publish_temp_doc.json | 115 +++++ .../publish_temp_doc/publish_temp_doc.py | 8 + .../__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 220 bytes ...lish_variant_mapping_assets.cpython-38.pyc | Bin 0 -> 473 bytes ...lish_variant_mapping_assets.cpython-38.pyc | Bin 0 -> 460 bytes .../publish_variant_mapping_assets.js | 8 + .../publish_variant_mapping_assets.json | 51 +++ .../publish_variant_mapping_assets.py | 8 + .../test_publish_variant_mapping_assets.py | 8 + .../doctype/system_mapping/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 204 bytes .../__pycache__/system_mapping.cpython-38.pyc | Bin 0 -> 426 bytes .../test_system_mapping.cpython-38.pyc | Bin 0 -> 413 bytes .../doctype/system_mapping/system_mapping.js | 8 + .../system_mapping/system_mapping.json | 206 +++++++++ .../doctype/system_mapping/system_mapping.py | 8 + .../system_mapping/test_system_mapping.py | 8 + .../system_mapping_sub_system/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 215 bytes .../system_mapping_sub_system.cpython-38.pyc | Bin 0 -> 458 bytes .../system_mapping_sub_system.json | 138 ++++++ .../system_mapping_sub_system.py | 8 + .../system_mapping_system_assets/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 218 bytes ...ystem_mapping_system_assets.cpython-38.pyc | Bin 0 -> 467 bytes .../system_mapping_system_assets.json | 64 +++ .../system_mapping_system_assets.py | 8 + .../doctype/variant_mapping/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 205 bytes .../test_variant_mapping.cpython-38.pyc | Bin 0 -> 416 bytes .../variant_mapping.cpython-38.pyc | Bin 0 -> 429 bytes .../variant_mapping/test_variant_mapping.py | 8 + .../variant_mapping/variant_mapping.js | 8 + .../variant_mapping/variant_mapping.json | 196 ++++++++ .../variant_mapping/variant_mapping.py | 8 + .../variant_mapping_assets/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 203 bytes .../__pycache__/mapping_files.cpython-38.pyc | Bin 0 -> 424 bytes .../variant_mapping_assets.cpython-38.pyc | Bin 0 -> 450 bytes .../variant_mapping_assets.json | 54 +++ .../variant_mapping_assets.py | 8 + .../doctype/variant_mapping_sk/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 208 bytes .../variant_mapping_sk.cpython-38.pyc | Bin 0 -> 438 bytes .../variant_mapping_sk.json | 31 ++ .../variant_mapping_sk/variant_mapping_sk.py | 8 + .../www/__pycache__/login.cpython-38.pyc | Bin 0 -> 4147 bytes smart_service/www/demofile2.txt | 0 smart_service/www/login.html | 214 +++++++++ smart_service/www/login.py | 121 +++++ 452 files changed, 9370 insertions(+) create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 __pycache__/setup.cpython-38.pyc create mode 100644 license.txt create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 smart_service.egg-info/PKG-INFO create mode 100644 smart_service.egg-info/SOURCES.txt create mode 100644 smart_service.egg-info/dependency_links.txt create mode 100644 smart_service.egg-info/not-zip-safe create mode 100644 smart_service.egg-info/top_level.txt create mode 100644 smart_service/__init__.py create mode 100644 smart_service/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/__pycache__/hooks.cpython-38.pyc create mode 100644 smart_service/add_ons/__init__.py create mode 100644 smart_service/add_ons/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/__init__.py create mode 100644 smart_service/add_ons/doctype/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/app_users/__init__.py create mode 100644 smart_service/add_ons/doctype/app_users/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/app_users/__pycache__/app_users.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/app_users/__pycache__/test_app_users.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/app_users/app_users.js create mode 100644 smart_service/add_ons/doctype/app_users/app_users.json create mode 100644 smart_service/add_ons/doctype/app_users/app_users.py create mode 100644 smart_service/add_ons/doctype/app_users/test_app_users.py create mode 100644 smart_service/add_ons/doctype/circular/__init__.py create mode 100644 smart_service/add_ons/doctype/circular/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/circular/__pycache__/circular.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/circular/__pycache__/test_circular.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/circular/circular.js create mode 100644 smart_service/add_ons/doctype/circular/circular.json create mode 100644 smart_service/add_ons/doctype/circular/circular.py create mode 100644 smart_service/add_ons/doctype/circular/test_circular.py create mode 100644 smart_service/add_ons/doctype/user_feedback/__init__.py create mode 100644 smart_service/add_ons/doctype/user_feedback/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback/__pycache__/test_user_feedback.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback/__pycache__/user_feedback.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback/test_user_feedback.py create mode 100644 smart_service/add_ons/doctype/user_feedback/user_feedback.js create mode 100644 smart_service/add_ons/doctype/user_feedback/user_feedback.json create mode 100644 smart_service/add_ons/doctype/user_feedback/user_feedback.py create mode 100644 smart_service/add_ons/doctype/user_feedback_types/__init__.py create mode 100644 smart_service/add_ons/doctype/user_feedback_types/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback_types/__pycache__/test_user_feedback_types.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback_types/__pycache__/user_feedback_types.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_feedback_types/test_user_feedback_types.py create mode 100644 smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.js create mode 100644 smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.json create mode 100644 smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.py create mode 100644 smart_service/add_ons/doctype/user_manual/__init__.py create mode 100644 smart_service/add_ons/doctype/user_manual/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_manual/__pycache__/test_user_manual.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_manual/__pycache__/user_manual.cpython-38.pyc create mode 100644 smart_service/add_ons/doctype/user_manual/test_user_manual.py create mode 100644 smart_service/add_ons/doctype/user_manual/user_manual.js create mode 100644 smart_service/add_ons/doctype/user_manual/user_manual.json create mode 100644 smart_service/add_ons/doctype/user_manual/user_manual.py create mode 100644 smart_service/apis/__pycache__/addon_api.cpython-38.pyc create mode 100644 smart_service/apis/__pycache__/master_api.cpython-38.pyc create mode 100644 smart_service/apis/__pycache__/publish_api.cpython-38.pyc create mode 100644 smart_service/apis/__pycache__/transaction_api.cpython-38.pyc create mode 100644 smart_service/apis/addon_api.py create mode 100644 smart_service/apis/master_api.py create mode 100644 smart_service/apis/publish_api.py create mode 100644 smart_service/apis/transaction_api.py create mode 100644 smart_service/config/__init__.py create mode 100644 smart_service/config/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/config/__pycache__/desktop.cpython-38.pyc create mode 100644 smart_service/config/__pycache__/docs.cpython-38.pyc create mode 100644 smart_service/config/desktop.py create mode 100644 smart_service/config/docs.py create mode 100644 smart_service/hooks.py create mode 100644 smart_service/json_files/procedurePublish.json create mode 100644 smart_service/mahindra_smart_service/__init__.py create mode 100644 smart_service/mahindra_smart_service/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/__init__.py create mode 100644 smart_service/mahindra_smart_service/doctype/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release/__init__.py create mode 100644 smart_service/mahindra_smart_service/doctype/release/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release/__pycache__/release.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release/__pycache__/test_release.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release/release.js create mode 100644 smart_service/mahindra_smart_service/doctype/release/release.json create mode 100644 smart_service/mahindra_smart_service/doctype/release/release.py create mode 100644 smart_service/mahindra_smart_service/doctype/release/test_release.py create mode 100644 smart_service/mahindra_smart_service/doctype/release_docs/__init__.py create mode 100644 smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/release_docs.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/doctype/release_docs/release_docs.json create mode 100644 smart_service/mahindra_smart_service/doctype/release_docs/release_docs.py create mode 100644 smart_service/mahindra_smart_service/report/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/__pycache__/_drive_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/_drive_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/_drive_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_drive_translation/_drive_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/__pycache__/_file_structure.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/_file_structure.js create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/_file_structure.json create mode 100644 smart_service/mahindra_smart_service/report/_file_structure/_file_structure.py create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/__pycache__/_fuel_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/__pycache__/_procedure_report.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.js create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.json create mode 100644 smart_service/mahindra_smart_service/report/_procedure_report/_procedure_report.py create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/__pycache__/_sub_systems_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/_sub_systems_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/_sub_systems_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_sub_systems_translation/_sub_systems_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/__pycache__/_systems_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/_systems_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/_systems_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_systems_translation/_systems_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/__pycache__/_transmission_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_transmission_translation/_transmission_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/__pycache__/_variant_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_variant_translation/_variant_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/__pycache__/_vehicle_segment_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/_vehicle_segment_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/_vehicle_segment_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_segment_translation/_vehicle_segment_translation.py create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/__init__.py create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/__pycache__/_vehicle_translation.cpython-38.pyc create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.js create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.json create mode 100644 smart_service/mahindra_smart_service/report/_vehicle_translation/_vehicle_translation.py create mode 100644 smart_service/masters/__init__.py create mode 100644 smart_service/masters/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/__init__.py create mode 100644 smart_service/masters/doctype/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels/__init__.py create mode 100644 smart_service/masters/doctype/app_labels/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels/__pycache__/app_labels.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels/__pycache__/test_app_labels.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels/app_labels.js create mode 100644 smart_service/masters/doctype/app_labels/app_labels.json create mode 100644 smart_service/masters/doctype/app_labels/app_labels.py create mode 100644 smart_service/masters/doctype/app_labels/test_app_labels.py create mode 100644 smart_service/masters/doctype/app_labels_data/__init__.py create mode 100644 smart_service/masters/doctype/app_labels_data/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels_data/__pycache__/app_labels_data.cpython-38.pyc create mode 100644 smart_service/masters/doctype/app_labels_data/app_labels_data.json create mode 100644 smart_service/masters/doctype/app_labels_data/app_labels_data.py create mode 100644 smart_service/masters/doctype/custom_languages/__init__.py create mode 100644 smart_service/masters/doctype/custom_languages/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/custom_languages/__pycache__/custom_languages.cpython-38.pyc create mode 100644 smart_service/masters/doctype/custom_languages/__pycache__/test_custom_languages.cpython-38.pyc create mode 100644 smart_service/masters/doctype/custom_languages/custom_languages.js create mode 100644 smart_service/masters/doctype/custom_languages/custom_languages.json create mode 100644 smart_service/masters/doctype/custom_languages/custom_languages.py create mode 100644 smart_service/masters/doctype/custom_languages/test_custom_languages.py create mode 100644 smart_service/masters/doctype/drive/__init__.py create mode 100644 smart_service/masters/doctype/drive/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/drive/__pycache__/drive.cpython-38.pyc create mode 100644 smart_service/masters/doctype/drive/__pycache__/test_drive.cpython-38.pyc create mode 100644 smart_service/masters/doctype/drive/drive.js create mode 100644 smart_service/masters/doctype/drive/drive.json create mode 100644 smart_service/masters/doctype/drive/drive.py create mode 100644 smart_service/masters/doctype/drive/test_drive.py create mode 100644 smart_service/masters/doctype/fuel/__init__.py create mode 100644 smart_service/masters/doctype/fuel/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/fuel/__pycache__/fuel.cpython-38.pyc create mode 100644 smart_service/masters/doctype/fuel/__pycache__/test_fuel.cpython-38.pyc create mode 100644 smart_service/masters/doctype/fuel/fuel.js create mode 100644 smart_service/masters/doctype/fuel/fuel.json create mode 100644 smart_service/masters/doctype/fuel/fuel.py create mode 100644 smart_service/masters/doctype/fuel/test_fuel.py create mode 100644 smart_service/masters/doctype/service_kilometers/__init__.py create mode 100644 smart_service/masters/doctype/service_kilometers/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/service_kilometers/__pycache__/service_kilometers.cpython-38.pyc create mode 100644 smart_service/masters/doctype/service_kilometers/__pycache__/test_service_kilometers.cpython-38.pyc create mode 100644 smart_service/masters/doctype/service_kilometers/service_kilometers.js create mode 100644 smart_service/masters/doctype/service_kilometers/service_kilometers.json create mode 100644 smart_service/masters/doctype/service_kilometers/service_kilometers.py create mode 100644 smart_service/masters/doctype/service_kilometers/test_service_kilometers.py create mode 100644 smart_service/masters/doctype/sub_systems/__init__.py create mode 100644 smart_service/masters/doctype/sub_systems/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/sub_systems/__pycache__/sub_systems.cpython-38.pyc create mode 100644 smart_service/masters/doctype/sub_systems/__pycache__/test_sub_systems.cpython-38.pyc create mode 100644 smart_service/masters/doctype/sub_systems/sub_systems.js create mode 100644 smart_service/masters/doctype/sub_systems/sub_systems.json create mode 100644 smart_service/masters/doctype/sub_systems/sub_systems.py create mode 100644 smart_service/masters/doctype/sub_systems/test_sub_systems.py create mode 100644 smart_service/masters/doctype/systems/__init__.py create mode 100644 smart_service/masters/doctype/systems/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/systems/__pycache__/systems.cpython-38.pyc create mode 100644 smart_service/masters/doctype/systems/__pycache__/test_systems.cpython-38.pyc create mode 100644 smart_service/masters/doctype/systems/systems.js create mode 100644 smart_service/masters/doctype/systems/systems.json create mode 100644 smart_service/masters/doctype/systems/systems.py create mode 100644 smart_service/masters/doctype/systems/test_systems.py create mode 100644 smart_service/masters/doctype/transmission/__init__.py create mode 100644 smart_service/masters/doctype/transmission/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/transmission/__pycache__/test_transmission.cpython-38.pyc create mode 100644 smart_service/masters/doctype/transmission/__pycache__/transmission.cpython-38.pyc create mode 100644 smart_service/masters/doctype/transmission/test_transmission.py create mode 100644 smart_service/masters/doctype/transmission/transmission.js create mode 100644 smart_service/masters/doctype/transmission/transmission.json create mode 100644 smart_service/masters/doctype/transmission/transmission.py create mode 100644 smart_service/masters/doctype/variant/__init__.py create mode 100644 smart_service/masters/doctype/variant/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/variant/__pycache__/test_variant.cpython-38.pyc create mode 100644 smart_service/masters/doctype/variant/__pycache__/variant.cpython-38.pyc create mode 100644 smart_service/masters/doctype/variant/test_variant.py create mode 100644 smart_service/masters/doctype/variant/variant.js create mode 100644 smart_service/masters/doctype/variant/variant.json create mode 100644 smart_service/masters/doctype/variant/variant.py create mode 100644 smart_service/masters/doctype/vehi/__init__.py create mode 100644 smart_service/masters/doctype/vehi/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi/__pycache__/test_vehi.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi/__pycache__/vehi.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi/test_vehi.py create mode 100644 smart_service/masters/doctype/vehi/vehi.html create mode 100644 smart_service/masters/doctype/vehi/vehi.js create mode 100644 smart_service/masters/doctype/vehi/vehi.json create mode 100644 smart_service/masters/doctype/vehi/vehi.py create mode 100644 smart_service/masters/doctype/vehi_master/__init__.py create mode 100644 smart_service/masters/doctype/vehi_master/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi_master/__pycache__/test_vehi_master.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi_master/__pycache__/vehi_master.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehi_master/test_vehi_master.py create mode 100644 smart_service/masters/doctype/vehi_master/vehi_master.js create mode 100644 smart_service/masters/doctype/vehi_master/vehi_master.json create mode 100644 smart_service/masters/doctype/vehi_master/vehi_master.py create mode 100644 smart_service/masters/doctype/vehicle/__init__.py create mode 100644 smart_service/masters/doctype/vehicle/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle/__pycache__/test_vehicle.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle/__pycache__/vehicle.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle/test_vehicle.py create mode 100644 smart_service/masters/doctype/vehicle/vehicle.js create mode 100644 smart_service/masters/doctype/vehicle/vehicle.json create mode 100644 smart_service/masters/doctype/vehicle/vehicle.py create mode 100644 smart_service/masters/doctype/vehicle_segment/__init__.py create mode 100644 smart_service/masters/doctype/vehicle_segment/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle_segment/__pycache__/test_vehicle_segment.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle_segment/__pycache__/vehicle_segment.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle_segment/test_vehicle_segment.py create mode 100644 smart_service/masters/doctype/vehicle_segment/vehicle_segment.js create mode 100644 smart_service/masters/doctype/vehicle_segment/vehicle_segment.json create mode 100644 smart_service/masters/doctype/vehicle_segment/vehicle_segment.py create mode 100644 smart_service/masters/doctype/vehicle_sk/__init__.py create mode 100644 smart_service/masters/doctype/vehicle_sk/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle_sk/__pycache__/vehicle_sk.cpython-38.pyc create mode 100644 smart_service/masters/doctype/vehicle_sk/vehicle_sk.json create mode 100644 smart_service/masters/doctype/vehicle_sk/vehicle_sk.py create mode 100644 smart_service/masters/report/__init__.py create mode 100644 smart_service/masters/report/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/report/_fuel_translation/__init__.py create mode 100644 smart_service/masters/report/_fuel_translation/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/masters/report/_fuel_translation/__pycache__/_fuel_translation.cpython-38.pyc create mode 100644 smart_service/masters/report/_fuel_translation/_fuel_translation.js create mode 100644 smart_service/masters/report/_fuel_translation/_fuel_translation.json create mode 100644 smart_service/masters/report/_fuel_translation/_fuel_translation.py create mode 100644 smart_service/modules.txt create mode 100644 smart_service/patches.txt create mode 100644 smart_service/public/__pycache__/api.cpython-38.pyc create mode 100644 smart_service/public/__pycache__/oauthtest.cpython-38.pyc create mode 100644 smart_service/public/__pycache__/sess.cpython-38.pyc create mode 100644 smart_service/public/api.py create mode 100644 smart_service/public/build.json create mode 100644 smart_service/public/css/smart_service.css create mode 100644 smart_service/public/icons/dot.png create mode 100644 smart_service/public/icons/outline_description_black_24dp.png create mode 100644 smart_service/public/icons/outline_directions_car_black_24dp.png create mode 100644 smart_service/public/icons/outline_engineering_black_24dp.png create mode 100644 smart_service/public/icons/outline_folder_open_black_24dp.png create mode 100644 smart_service/public/icons/outline_manage_accounts_black_24dp.png create mode 100644 smart_service/public/icons/outline_stairs_black_24dp.png create mode 100644 smart_service/public/images/Mahindra_Newlogo.png create mode 100644 smart_service/public/images/Mahindra_title.png create mode 100644 smart_service/public/images/mahindra_splash_logo.png create mode 100644 smart_service/public/images/mahindra_splash_logo.svg create mode 100644 smart_service/public/oauthtest.py create mode 100644 smart_service/public/sess.py create mode 100644 smart_service/reports/__init__.py create mode 100644 smart_service/reports/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/templates/__init__.py create mode 100644 smart_service/templates/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/templates/includes/login/_login.js create mode 100644 smart_service/templates/pages/__init__.py create mode 100644 smart_service/templates/pages/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/__init__.py create mode 100644 smart_service/transactions/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/__init__.py create mode 100644 smart_service/transactions/doctype/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/config_kilometer/__init__.py create mode 100644 smart_service/transactions/doctype/config_kilometer/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/config_kilometer/__pycache__/config_kilometer.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/config_kilometer/__pycache__/test_config_kilometer.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/config_kilometer/config_kilometer.js create mode 100644 smart_service/transactions/doctype/config_kilometer/config_kilometer.json create mode 100644 smart_service/transactions/doctype/config_kilometer/config_kilometer.py create mode 100644 smart_service/transactions/doctype/config_kilometer/test_config_kilometer.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping/__init__.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping/__pycache__/kilometer_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping/__pycache__/test_kilometer_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.js create mode 100644 smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.json create mode 100644 smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping/test_kilometer_mapping.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items/__init__.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/kilometer_mapping_items.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items/kilometer_mapping_items.json create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items/kilometer_mapping_items.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items_temp/__init__.py create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items_temp/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items_temp/__pycache__/kilometer_mapping_items_temp.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items_temp/kilometer_mapping_items_temp.json create mode 100644 smart_service/transactions/doctype/kilometer_mapping_items_temp/kilometer_mapping_items_temp.py create mode 100644 smart_service/transactions/doctype/pro/__init__.py create mode 100644 smart_service/transactions/doctype/pro/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/pro/__pycache__/pro.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/pro/__pycache__/test_pro.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/pro/pro.js create mode 100644 smart_service/transactions/doctype/pro/pro.json create mode 100644 smart_service/transactions/doctype/pro/pro.py create mode 100644 smart_service/transactions/doctype/pro/test_pro.py create mode 100644 smart_service/transactions/doctype/procedure/__init__.py create mode 100644 smart_service/transactions/doctype/procedure/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure/__pycache__/procedure.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure/__pycache__/test_procedure.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure/procedure.js create mode 100644 smart_service/transactions/doctype/procedure/procedure.json create mode 100644 smart_service/transactions/doctype/procedure/procedure.py create mode 100644 smart_service/transactions/doctype/procedure/test_procedure.py create mode 100644 smart_service/transactions/doctype/procedure_details/__init__.py create mode 100644 smart_service/transactions/doctype/procedure_details/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_details/__pycache__/procedure_details.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_details/procedure_details.json create mode 100644 smart_service/transactions/doctype/procedure_details/procedure_details.py create mode 100644 smart_service/transactions/doctype/procedure_name/__init__.py create mode 100644 smart_service/transactions/doctype/procedure_name/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_name/__pycache__/procedure_name.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_name/__pycache__/procedure_procedure_name.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_name/__pycache__/procedure_procedure_names.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_name/__pycache__/test_procedure_name.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_name/procedure_name.js create mode 100644 smart_service/transactions/doctype/procedure_name/procedure_name.json create mode 100644 smart_service/transactions/doctype/procedure_name/procedure_name.py create mode 100644 smart_service/transactions/doctype/procedure_name/test_procedure_name.py create mode 100644 smart_service/transactions/doctype/procedure_procedure_list/__init__.py create mode 100644 smart_service/transactions/doctype/procedure_procedure_list/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_procedure_list/__pycache__/procedure_procedure_list.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.json create mode 100644 smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.py create mode 100644 smart_service/transactions/doctype/procedure_step_name/__init__.py create mode 100644 smart_service/transactions/doctype/procedure_step_name/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_name.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_names.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_step_name/__pycache__/test_procedure_step_name.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/procedure_step_name/procedure_step_name.js create mode 100644 smart_service/transactions/doctype/procedure_step_name/procedure_step_name.json create mode 100644 smart_service/transactions/doctype/procedure_step_name/procedure_step_name.py create mode 100644 smart_service/transactions/doctype/procedure_step_name/test_procedure_step_name.py create mode 100644 smart_service/transactions/doctype/publish/__init__.py create mode 100644 smart_service/transactions/doctype/publish/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish/__pycache__/publish.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish/__pycache__/test_publish.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish/jsonData/procedurePublish.json create mode 100644 smart_service/transactions/doctype/publish/jsonData/vech.json create mode 100644 smart_service/transactions/doctype/publish/publish.js create mode 100644 smart_service/transactions/doctype/publish/publish.json create mode 100644 smart_service/transactions/doctype/publish/publish.py create mode 100644 smart_service/transactions/doctype/publish/test_publish.py create mode 100644 smart_service/transactions/doctype/publish_docs/__init__.py create mode 100644 smart_service/transactions/doctype/publish_docs/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_docs/__pycache__/publish_docs.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_docs/publish_docs.json create mode 100644 smart_service/transactions/doctype/publish_docs/publish_docs.py create mode 100644 smart_service/transactions/doctype/publish_temp_doc/__init__.py create mode 100644 smart_service/transactions/doctype/publish_temp_doc/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_temp_doc/__pycache__/publish_temp_doc.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.json create mode 100644 smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.py create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/__init__.py create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/__pycache__/publish_variant_mapping_assets.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/__pycache__/test_publish_variant_mapping_assets.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.js create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.json create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.py create mode 100644 smart_service/transactions/doctype/publish_variant_mapping_assets/test_publish_variant_mapping_assets.py create mode 100644 smart_service/transactions/doctype/system_mapping/__init__.py create mode 100644 smart_service/transactions/doctype/system_mapping/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping/__pycache__/system_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping/__pycache__/test_system_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping/system_mapping.js create mode 100644 smart_service/transactions/doctype/system_mapping/system_mapping.json create mode 100644 smart_service/transactions/doctype/system_mapping/system_mapping.py create mode 100644 smart_service/transactions/doctype/system_mapping/test_system_mapping.py create mode 100644 smart_service/transactions/doctype/system_mapping_sub_system/__init__.py create mode 100644 smart_service/transactions/doctype/system_mapping_sub_system/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping_sub_system/__pycache__/system_mapping_sub_system.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping_sub_system/system_mapping_sub_system.json create mode 100644 smart_service/transactions/doctype/system_mapping_sub_system/system_mapping_sub_system.py create mode 100644 smart_service/transactions/doctype/system_mapping_system_assets/__init__.py create mode 100644 smart_service/transactions/doctype/system_mapping_system_assets/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping_system_assets/__pycache__/system_mapping_system_assets.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.json create mode 100644 smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.py create mode 100644 smart_service/transactions/doctype/variant_mapping/__init__.py create mode 100644 smart_service/transactions/doctype/variant_mapping/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping/__pycache__/test_variant_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping/__pycache__/variant_mapping.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping/test_variant_mapping.py create mode 100644 smart_service/transactions/doctype/variant_mapping/variant_mapping.js create mode 100644 smart_service/transactions/doctype/variant_mapping/variant_mapping.json create mode 100644 smart_service/transactions/doctype/variant_mapping/variant_mapping.py create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/__init__.py create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/__pycache__/mapping_files.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/__pycache__/variant_mapping_assets.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.json create mode 100644 smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.py create mode 100644 smart_service/transactions/doctype/variant_mapping_sk/__init__.py create mode 100644 smart_service/transactions/doctype/variant_mapping_sk/__pycache__/__init__.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping_sk/__pycache__/variant_mapping_sk.cpython-38.pyc create mode 100644 smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.json create mode 100644 smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.py create mode 100644 smart_service/www/__pycache__/login.cpython-38.pyc create mode 100755 smart_service/www/demofile2.txt create mode 100644 smart_service/www/login.html create mode 100644 smart_service/www/login.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..94f3f84 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,18 @@ +include MANIFEST.in +include requirements.txt +include *.json +include *.md +include *.py +include *.txt +recursive-include smart_service *.css +recursive-include smart_service *.csv +recursive-include smart_service *.html +recursive-include smart_service *.ico +recursive-include smart_service *.js +recursive-include smart_service *.json +recursive-include smart_service *.md +recursive-include smart_service *.png +recursive-include smart_service *.py +recursive-include smart_service *.svg +recursive-include smart_service *.txt +recursive-exclude smart_service *.pyc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7304fb5 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## Mahindra Smart Service + +Mahindra Smart Service (Formarly: Guided Repair Manual) + +#### License + +MIT \ No newline at end of file diff --git a/__pycache__/setup.cpython-38.pyc b/__pycache__/setup.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49175a1a6fd4b712c56d937488da5c4f66f9f395 GIT binary patch literal 646 zcmY*W&2AGh5Vkj)WV4%y2qDCw2cHmoAPWbCgeufi;Xn~IMW9?PcRlG^c`0Kq@4Dsdg3SEwZjQQXSuafuZ33`i;(T6@OmXkVNWg!FeA!K~S z$2@`P0`Un?A>rAV2}XRnMEUGzcn9T?A6js2<7aE3IBi(@k)46<<_12s!axnm*@gS; zJWg}$GfFpLtk8;5KeIJ6j#@AqQ9}3hh*hD6VPx6I$#NSf4-T~n0eSw6yl4dnPL82r z!jL1TS|;<3ykv$GMV5N)$O)8{(o&xZu;k6gkynm)x2@Q)gGyPgq)@OZb$xh}PkgLc z4Su|9$!8pFX++~fe}2STS83y?TTP*6Li*%pLZ5V^p_Z+|-w~>mEr*-wDQAxPxlqg`kg0pH>i4s8iF^Gc<7=auIATH(r5-AK(3@MDk44O<;tOj}pdWL?QjJLSs zwE51;V+ElvBJgY~DRz@d8i zxiX-E9%_;98M+3BXM*WjV0k4dd1WYjHrQSTDqa<;UJYtq9qJ?9YZSH#4X8mAF3e5u z0<@qFTd+McRK$yO3oa?F!R5ILJ8%WA&JDN*yHp=pUJI`Gwa$$%y4t>@%Q`|6!Z=N0 zguEt?FcXLqHlaSrc8+mCV_?|n=e*Nj^3GGtz=@rHG8E1!@q;)ClMyA{c{vfz3jx{w zzm?AIqlBqY;q-y?WK4m8^NOUHGUph_V;pv*mf5!+@AV$-?PuGZPViw6^CS*wOuBv& zN%Q#GY1VTw=R|P#uhY6T!Xv`n)z0XIoT*bK-83F$H&+s$Z^*h4jk}7?+|`o*M-^0r zq=>mlma|M&$CUOEtF$GtZ16P1JV3>XWCf=wig84;`ddhRF--~T%@i2YP!NU&(^*zk zfP|3qtLeR2$CCC^Agg~C%O)d$eSr!Emv*X3LvgqkT}e$=QT1ij+|-p>^X|=#I!57^ zWiA-?MFG}U+@GCv+RV(ghBC6A-(cA#%+8r=&J?MT&3u}U2O;GFVX~D&Alzp(6{@Qi z*DumihWWqNi4{@ zknORm2LdecGCv{|m1CnpHo7cGk~h4Y zPG#jFN?;t4hxw1h50z;cmcB8}vQf4SU5y{*cUn82m38C0WiL3ZtiC_3lA#&DjIX}| DkGx%R literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/__init__.py b/smart_service/add_ons/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/add_ons/__pycache__/__init__.cpython-38.pyc b/smart_service/add_ons/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33222d49fe75853261dae0e36e971b8dc6b8bd91 GIT binary patch literal 176 zcmWIL<>g`kf>Vs0i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10WKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVW<_QsVRTiuL2;GxIV_ Z;^XxSDsOSvg`kf+m*EL=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(Rhg|De?Jv#ri4v$t9Hq hsrvEpnR%Hd@$q^EmA5!-a`RJ4b5iX<)_w+J1_0xrFpmHL literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/app_users/__init__.py b/smart_service/add_ons/doctype/app_users/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/add_ons/doctype/app_users/__pycache__/__init__.cpython-38.pyc b/smart_service/add_ons/doctype/app_users/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27c333245252d46a6e6f49d64d89bb27c1900f95 GIT binary patch literal 194 zcmWIL<>g`kf;Xa_i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10fKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVW<_QsVRTiuF_SlS?WK oQb8KxOMyy@_2c6+^D;}~7$(4a*PMifH8E$B$cFQ8)*&v6my z**&E5Pp*Pg4DzNedqYiEhKpkpOxEl^VIU}k25uJI91Zf?+KngY@6vdXh>bFYI4lrN ztNS{{3F1?)>M8RE?u4g|@LlCqYbbwk%34D2c6fgA%g(mclvU0NpL?TRhrDF>SkgbH zw8pmaxo*pDZz(ijAM_le%m+egMvzWUl}K literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/app_users/__pycache__/test_app_users.cpython-38.pyc b/smart_service/add_ons/doctype/app_users/__pycache__/test_app_users.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30a1e2f8d4f319ea3f3eb4223a741030d8773049 GIT binary patch literal 393 zcmZ8cJx{|x4D}@iqADF(*)zbwj!+Q;TNmh(#X90cEy~AnmsIKu3qPfQDJv5azkmt5 zsY-<H)IR z7x%!d5Ii)+WXc{=1`D|&*eRkueYByyb#5N453?-p6U5q77O@{ARtPQqFWlNky!b?Zkt9)Dp2d06)yr18^F$uHGc1>mze9&iqg`kf+m*EL=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(Rhg|De?Jv#ri4v$t9Hq qsrt#8MaiW(iADPH@tJv-l7yFb8mr z?W-7P0FS+{rpz1jM>J)Gua#Oi4%N!*wnYej3uothcKU#|Su08e6`b}R1oYdD!GBC! z3r!uAZA`aoQJKA*-=JuBUeLz4H6#R*k38xOKifk*KgW&w#?NTW~A zftB`pXo6wM?h+OQnIM=dfIxqxh|irW#-Bad zW9~G_*OT1TrIBl^n#Q2BTRgv*==8xg`k0uHXuL=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(Rhg|De?Jv#ri4v$t9Hq usrscrW$|gLsVPZ`$=Ukx@tJvK>90`?4Wup?9n3AQfKC5v^9UA2%u?vhHKVc}62c%iIJyaE%x zCW3+`fA)9&xzF>-BnB}RznXW6AD-;nNXS&&od^(6kV6W$Kp{mhKoP@3@EoNf1$U5) zKBWg{na6z#giOWVSb!l72!@HUJHBVv%pKbsW?Go+ah61#LM%)*1g}h6taxG@ J>fmQl_zj%}WeflS literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/user_feedback/__pycache__/user_feedback.cpython-38.pyc b/smart_service/add_ons/doctype/user_feedback/__pycache__/user_feedback.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93732fa74cbfa385745018ecf3f44d371b2cafaa GIT binary patch literal 418 zcmZ8du};G<5Vez5SW!B%vu2=%9ia{gHWt(+%gOa!RYaTwJE_ze7Cwbv3L_K0z{DkK zMd747-}Ak@d-ifRO9Y!r-pmJ|pFKFX34;ZDIOBi>=eqB9|z*S#opKrOQD6mIznIKHX<=rvOUh2%t*< zT!n4X=PAH*Yl^Y*F8m2k8p3z2H2f6=_&`IvY2`$NP*$pQDuPe%=N7EQ&RhYi2sd)C1D6+LE( P3!Sg`kf;a4)i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j-KO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVW<_QsVRTiuF_SlS?WK yQuRxL%Hq>fQ&W->le6PNLdE*=@tJv0rbcD0~JA8Sd0m7zdyq7g7&Z}NZZbw}dWcy; zb?Wmz;zMoHw(<)0P*c}EqTmZWD{Y|w literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/user_feedback_types/__pycache__/user_feedback_types.cpython-38.pyc b/smart_service/add_ons/doctype/user_feedback_types/__pycache__/user_feedback_types.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7cd0f8ad8aa5026541324acef47fe2217c8f603 GIT binary patch literal 436 zcmZutJx{|h5Vez5jjD7(VrR`j3_C&{5Ns^aCCkb6T~$QBu#-xa*kIwO@Rzb7CM13V z6X%4A3USh%{qEkK-+3{cO$FQM8KjTp??-4O>AD05NBOiFPjFu?FxU`X;Q z%mN(Uh-Cc1ERo1Ax~NQBP}vxt*f+^w&hBCkBr=JDn(P zuF$ptesObW=nv9}P?b($Wg3>DTBgBjr_86^f4Q{Y+K_d4EiT{?$sYSH4hKCcFF<+9 bgZuxnp4D@H7Z`347rN+d*!O(An-~Y*@9J>4 literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/user_feedback_types/test_user_feedback_types.py b/smart_service/add_ons/doctype/user_feedback_types/test_user_feedback_types.py new file mode 100644 index 0000000..1c16aba --- /dev/null +++ b/smart_service/add_ons/doctype/user_feedback_types/test_user_feedback_types.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestUserFeedback_Types(unittest.TestCase): + pass diff --git a/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.js b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.js new file mode 100644 index 0000000..d1108d6 --- /dev/null +++ b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.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('User Feedback_Types', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.json b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.json new file mode 100644 index 0000000..bde8dad --- /dev/null +++ b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.json @@ -0,0 +1,65 @@ +{ + "actions": [], + "autoname": "format:{feedback_type}", + "creation": "2021-11-08 16:50:12.082948", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "feedback_type", + "status" + ], + "fields": [ + { + "fieldname": "feedback_type", + "fieldtype": "Data", + "label": "Feedback Type", + "reqd": 1 + }, + { + "fieldname": "status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Status", + "options": "Active\nInactive", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-11-08 17:10:06.584852", + "modified_by": "Administrator", + "module": "Add Ons", + "name": "User Feedback_Types", + "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": "_Author", + "share": 1, + "write": 1 + } + ], + "search_fields": "status", + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "feedback_type", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.py b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.py new file mode 100644 index 0000000..0d86e6f --- /dev/null +++ b/smart_service/add_ons/doctype/user_feedback_types/user_feedback_types.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 UserFeedback_Types(Document): + pass diff --git a/smart_service/add_ons/doctype/user_manual/__init__.py b/smart_service/add_ons/doctype/user_manual/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/add_ons/doctype/user_manual/__pycache__/__init__.cpython-38.pyc b/smart_service/add_ons/doctype/user_manual/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8429be0b459ad2ef5f5488112227f90809e421e8 GIT binary patch literal 196 zcmWIL<>g`kg45ici6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10VKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVW<_QsVRTiuF_SlS?WK sQuRxL%Hneq^GXwQ^yA|*^D;}~>0qYBUFiji7wD3%gN-7T9i1comA=!3y*?$6y6{!6R*&T zb5cRXN%#3a-*2wTipT}?dgWs<}hBjg{WA~>F1SE1u;T9;O_!THN@GM^9G$L^i z$>^IkFwX)GO)#0U`w4@AR1oYdqW0v$_XPY@er2+^mA zrqx3o;tcVT1ykk~>;d-~;j5P0){wlns_O`y-Qnrk4?DS|rrJtQIO&YCJ@Ta8Lq-3X z(i+>wN!?ccz9TuX49&RFJTAJujd^aE?IMOmj67_8G|ew~VX6ymH2#APs!{W|@DwGS P@X7h~zKi8=$1M5=dI@Ig literal 0 HcmV?d00001 diff --git a/smart_service/add_ons/doctype/user_manual/test_user_manual.py b/smart_service/add_ons/doctype/user_manual/test_user_manual.py new file mode 100644 index 0000000..5bd006a --- /dev/null +++ b/smart_service/add_ons/doctype/user_manual/test_user_manual.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestUserManual(unittest.TestCase): + pass diff --git a/smart_service/add_ons/doctype/user_manual/user_manual.js b/smart_service/add_ons/doctype/user_manual/user_manual.js new file mode 100644 index 0000000..6c4fb6f --- /dev/null +++ b/smart_service/add_ons/doctype/user_manual/user_manual.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('User Manual', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/add_ons/doctype/user_manual/user_manual.json b/smart_service/add_ons/doctype/user_manual/user_manual.json new file mode 100644 index 0000000..486668f --- /dev/null +++ b/smart_service/add_ons/doctype/user_manual/user_manual.json @@ -0,0 +1,65 @@ +{ + "actions": [], + "autoname": "format:{title}", + "creation": "2021-11-08 17:06:43.108947", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "title", + "description", + "manual" + ], + "fields": [ + { + "fieldname": "title", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Title", + "reqd": 1 + }, + { + "fieldname": "description", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "Description", + "reqd": 1 + }, + { + "fieldname": "manual", + "fieldtype": "Attach", + "label": "Manual" + } + ], + "index_web_pages_for_search": 1, + "issingle": 1, + "links": [], + "modified": "2021-11-08 17:09:22.249843", + "modified_by": "Administrator", + "module": "Add Ons", + "name": "User Manual", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "_Author", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/add_ons/doctype/user_manual/user_manual.py b/smart_service/add_ons/doctype/user_manual/user_manual.py new file mode 100644 index 0000000..661c664 --- /dev/null +++ b/smart_service/add_ons/doctype/user_manual/user_manual.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 UserManual(Document): + pass diff --git a/smart_service/apis/__pycache__/addon_api.cpython-38.pyc b/smart_service/apis/__pycache__/addon_api.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7887e4c6f18a64d706880a0619c4a87d5a55357f GIT binary patch literal 695 zcmZ8fy^a$x5VpO$xlMA*fe;eK6)7m#g6vTrLP&Q)(4;x8*=FVJIEi!KAKBiZi|#6D zc?T$Y1X>=$Efudo#W-2e!ALXS`R1D+@AxuFMg-;b`#1iU5%R-3cO^jQ6{%_ z4k7tlBZPam^u|wkG|S^Nsmo4r?ZTQ@!bMhECEUPRZad?~AWW%cYh_dCqYYOQ3M-Yu zOAQuMC@|ZHoe_Gn5CZ1ByqehSRv>uk!Ph-lyz^k5{2>*dv`zluxDdD%Zs@BOew6KS z*4W9S>1s#=?526!3ddmX;-#>KlE$XYgdsKd`(Go2`(C!nfLMycT zK(nf}Mh(1cl&ou=`V&Oa);c6LZVlXFz(U~?S(RTp-gVroxcRqG_K|T{kFN@ChwSK- zP+ew_u@Sf0L+r2gd*mSr`ylHeKg!9vA{!u^y~>z+7gP(B$f*{h$yigp@|d{<<`kH3 za^@6mgPHD?G9vs3`V90RbA5)+LO(s$e}_H?{kL47qw~G z;dM|~6!m3JU7^p>=jjXMIMX0HiuhWT?rZnRzMRLaYgTQO^*z^TX>Bhz+PPtK){`@9 z%^s_;J(^BAuJHDl&4nX|+?t{uk9=oj4`RyVWHuOi)O5JH$K1Z>Gk9RFRJT3mQ=Zl~ zo!E0ifs~nHHHr)#P1>7TJIwVgeRA$Fm}+U!E(En&8?h7ez~kH-glS7ml#+$QZ?aZ8 zRc^&-dRn3Kl}s0yDoVY4XUP1typ3nlE>u~9nAX-uT(E#!O|A?(bOL78J$De=+vsXC zQ+VV$y3|}BcFn@C&4*ok!Z(>8I~)pdnq6n{p64?2ea{~ROt6?+_1(fwE{?r2%pOY| z%}l0Ohg=K-^R5&2hE9*c*N2(6R+;XAvcvwVD)g_ZM$~tN98g2nO82zM2gBH9wqRd~ zw5>)I45O+dX}l9fNY!ON@02mmu@gls)oC|1dQ8~9$3@!om2U6wLD}sT5=-q z2Q6N}Iq~<#av%L%&YW!?@7XWCoR?ngve4}>BPw6!ffEa?0W~!$J)DlMCAmK3R+R5+ z$HfS9tJZ`hu-S*U7)9*bi6AWOVG{ecnnTGlpUJb~Bw4H&2}%3E2&|J#hH+AloEVWY ze^Hi>OE#-C?|l5>2c}I|URk;E`pxSrH(%X$UR!aOj&;jar;ynlsZPV)eIiE^M^Me- zHuYT5DaA9WiD&UhOZ+pxL##%=Kz%OMg3KO^5|cxJ12>nGp^@p+s^-Wi@5ofiutIx8 zguaiD=wl*3ub3#Zmgh~4fcK)mYHZ-j6h0#!KV0RtMomLe0p3E*ks~U+-JUfQ! zKsujom!$xk*^P;{{oYNU0whH literal 0 HcmV?d00001 diff --git a/smart_service/apis/__pycache__/publish_api.cpython-38.pyc b/smart_service/apis/__pycache__/publish_api.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99b614e74521ff1ea8ef53975d03fa581dcdf9ae GIT binary patch literal 5155 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 K+2qw}%lHqos;bxk literal 0 HcmV?d00001 diff --git a/smart_service/apis/__pycache__/transaction_api.cpython-38.pyc b/smart_service/apis/__pycache__/transaction_api.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbf73a6fca886dddf9bafc7e0a980233490f3009 GIT binary patch literal 990 zcma)5J#P~+7`E>tIZ8V)6p00Siz0=jp8-^gK&6O*7Ks)lZn?T=C+Fh33$~N00rp#&_zO(D_Yn~>;gkK|`<&l<{5-Z_t*k5|XrI4*r#%~?pGC6R07H+U z>oph{Vpt--h?c~${5g*0i;A3^q2Y4wwjy!eCau^jFg5*IMm}DsXv0Z-+>l z499c`YN;_ajDmrXr6Xnhe|f=Ut+~;2l@${#ZZ0yUh7VJ9vD-T4VU&oFN^m9_Q(2i% z6$}KIjO>yYE&tZqX*+pipuj<%TkJHq^*aebs$y!|p5LsuDsR?eeW$R_UtV-9cT1yu z4>q^*#{qx*rMP4d(y{r1)OCP<2>|GhF7g{gZUV(eRH&dLE{?h`@0WEOd+^+})CyqjhAKYgtJN~P zamu*tvigQ7tN7-e=`_i&okzlODYPjIOAQOdaxv3;0QF'Technical Manual' and parent='%s' and language='%s';''' %(d, lang['language']), as_dict=True) + vari = vari[0] + vari['Assets'] = var_asset + vari['Service Kilometres'] = sk + variant_out['Variant'] = vari + + system_out = [] + for i in system[d]: + + sys = frappe.db.sql('''SELECT min(`tabSystem Mapping_Sub System`.idx) as systemdisplayorder,tabSystems.system_name,tabSystems.active_status,tabSystems.icon_file,tabSystems.myid FROM _d6463952657fa86c.tabSystems + inner join _d6463952657fa86c.`tabSystem Mapping_Sub System` on tabSystems.system_name = `tabSystem Mapping_Sub System`.systems where system_name = '%s' group by system_name ;''' %i, as_dict=True) + sys = sys[0] + sysassets = frappe.db.sql('''SELECT idx as systemdisplayorder, system_asset FROM _d6463952657fa86c.`tabSystem Mapping_System Assets` where parent like '{0}%' and language='{1}' and systems='{2}';''' .format(d, lang['language'], i), as_dict=True) + # print(sysassets) + sys['Assets']=sysassets + + # print(sys) + subsystem_out=[] + for j in subsystem[d][i]: + # subsys = frappe.db.get_list('Sub Systems', filters={'name': j}, fields=[ + # 'name','active_status']) + subsys=frappe.db.sql('''select `tabSystem Mapping_Sub System`.idx as subSystemdisplayorder, systems,sub_systems, symptom, component, estimated_time, rts, mat, cover_image, `tabSystem Mapping_Sub System`.active_status + from _d6463952657fa86c.`tabSystem Mapping_Sub System` inner join _d6463952657fa86c.`tabSub Systems` on `tabSystem Mapping_Sub System`.sub_systems = `tabSub Systems`.name + where `tabSystem Mapping_Sub System`.parent like '{0}-{3}%' and systems='{1}' and sub_systems='{2}';'''.format(d, i, j,lang['language']), as_dict=True) + subsys=subsys[0] + kms=frappe.db.sql( + '''SELECT kilometer as kilometer_name, idx as kilometer_IDX, applicable as kilometers_applicable FROM _d6463952657fa86c.`tabKilometer Mapping_Items` where sub_systems='%s';''' %j, as_dict=True) + subsys['Config Kilometer']=kms + for k in docs_child: + if k['variant_mapping'] == d and k['system'] == i and k['sub_system'] == j: + proc_details=frappe.db.get_list('Procedure_Details', filters={'parent': k['procedure_link']}, fields=[ + 'procedure_name', 'step_name', 'content_type', 'content', 'file', 'idx as display_order'], order_by='idx') + temp_data=getParentMapData(proc_details, 'procedure_name') + k['ProcedureDetails']=temp_data + subsys['procedure_status']=k['procedure_status'] + subsys['procedure_link']=k['procedure_link'] + subsys['ProcedureDetails']=k['ProcedureDetails'] + stepcount=frappe.db.sql('''SELECT count(*) as Stepcount FROM _d6463952657fa86c.tabProcedure_Details where parent='{0}';'''.format(k['procedure_link']), as_dict=True) + stepcount=stepcount[0] + count=count+int(stepcount['Stepcount']) + + subsystem_out.append(subsys) + sys['Subsystems']=subsystem_out + system_out.append(sys) + + # print(subsys) + + variant_out['Variant']['Systems']=system_out + + + + final.append(variant_out) + final_count['StepCount'] = count + final.append(final_count) + + frappe.db.sql(""" UPDATE _d6463952657fa86c.tabPublish SET publish_status = '%s' where name = '%s' """%('Published',args)) + frappe.db.commit() + + return final diff --git a/smart_service/apis/transaction_api.py b/smart_service/apis/transaction_api.py new file mode 100644 index 0000000..291e934 --- /dev/null +++ b/smart_service/apis/transaction_api.py @@ -0,0 +1,12 @@ +import frappe +from frappe.model.document import Document +import json + +@frappe.whitelist() +def get_repair_manual(vehicle,variant,fuel,transmission,drive): + key_dict = frappe.db.sql('''SELECT name as variantkey, vehicle, variant, fuel, transmission, drive FROM _d6463952657fa86c.`tabVariant Mapping` where vehicle='{0}' and variant='{1}' and fuel='{2}' and transmission='{3}' and drive='{4}';'''.format(vehicle,variant,fuel,transmission,drive), as_dict=True) + key_dict=key_dict[0] + variantkey=key_dict['variantkey'] + manual_out=frappe.db.sql('''SELECT parent as variant, language, attach_file as file FROM _d6463952657fa86c.`tabVariant Mapping_Assets` where parent='{0}' and category='Technical Manual' and parentfield = 'assets';'''.format(variantkey), as_dict=True) + + return manual_out \ No newline at end of file diff --git a/smart_service/config/__init__.py b/smart_service/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/config/__pycache__/__init__.cpython-38.pyc b/smart_service/config/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02086aed200b6a9f667309c8bad8a5edaa974c8a GIT binary patch literal 175 zcmWIL<>g`kg0pH>i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10GKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVbaR^U^ZY_2c6+^D;}~ YZ8wfj$f`U`8fh z0R}iXNK~A4Ki~c6?vw9lvqJ>(dNzmq~xYx w#1P-nJ_dt)505YU3cl48GRwrb(YRN+zFqR~vN3XhV<%T5xoZqaI|@hM4@ePjCjbBd literal 0 HcmV?d00001 diff --git a/smart_service/config/__pycache__/docs.cpython-38.pyc b/smart_service/config/__pycache__/docs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d847be2de64e67af8d3b000ef43bb9e67a515869 GIT binary patch literal 358 zcmZ9H!Ait15QdX(Vcp7tC-K;m(1TX*BEp_sgzBZ2A)BPz!ZsT_TD0AK@HG3rZIjD*n!Zc*Ka7{rRJ)8>3L9MJv#!g~nYYb;iqN zg~BMPeY?r{FqPJL{pvp%2HMY4UfWjZ6^gFY;BW^ww|jN9(ni)fJ-FNjD7Zi9ks>0w z&x7Ub?rk_-YY+P^!KVv*7{{3EGK+>O0JQ>)7o&-TGNGp7 +# ------------------ + +# include js, css files in header of desk.html +# app_include_css = "/assets/smart_service/css/smart_service.css" +# app_include_js = "/assets/smart_service/js/smart_service.js" + +# include js, css files in header of web template +# web_include_css = "/assets/smart_service/css/smart_service.css" +# web_include_js = "/assets/smart_service/js/smart_service.js" + +# include custom scss in every website theme (without file extension ".scss") +# website_theme_scss = "smart_service/public/scss/website" + +# include js, css files in header of web form +# webform_include_js = {"doctype": "public/js/doctype.js"} +# webform_include_css = {"doctype": "public/css/doctype.css"} + +# include js in page +# page_js = {"page" : "public/js/file.js"} + +# include js in doctype views +# doctype_js = {"doctype" : "public/js/doctype.js"} +# doctype_list_js = {"doctype" : "public/js/doctype_list.js"} +# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} +# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} + +# Home Pages +# ---------- + +# application home page (will override Website Settings) +# home_page = "login" + +# website user home page (by Role) +# role_home_page = { +# "Role": "home_page" +# } + +# Generators +# ---------- + +# automatically create page for each record of this doctype +# website_generators = ["Web Page"] + +# Installation +# ------------ + +# before_install = "smart_service.install.before_install" +# after_install = "smart_service.install.after_install" + +# Desk Notifications +# ------------------ +# See frappe.core.notifications.get_notification_config + +# notification_config = "smart_service.notifications.get_notification_config" + +# Permissions +# ----------- +# Permissions evaluated in scripted ways + +# permission_query_conditions = { +# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# } +# +# has_permission = { +# "Event": "frappe.desk.doctype.event.event.has_permission", +# } + +# DocType Class +# --------------- +# Override standard doctype classes + +# override_doctype_class = { +# "ToDo": "custom_app.overrides.CustomToDo" +# } + +# Document Events +# --------------- +# Hook on document methods and events + +# doc_events = { +# "*": { +# "on_update": "method", +# "on_cancel": "method", +# "on_trash": "method" +# } +# } + +# Scheduled Tasks +# --------------- + +# scheduler_events = { +# "all": [ +# "smart_service.tasks.all" +# ], +# "daily": [ +# "smart_service.tasks.daily" +# ], +# "hourly": [ +# "smart_service.tasks.hourly" +# ], +# "weekly": [ +# "smart_service.tasks.weekly" +# ] +# "monthly": [ +# "smart_service.tasks.monthly" +# ] +# } + +# Testing +# ------- + +# before_tests = "smart_service.install.before_tests" + +# Overriding Methods +# ------------------------------ +# +# override_whitelisted_methods = { +# "frappe.desk.doctype.event.event.get_events": "smart_service.event.get_events" +# } +# +# each overriding function accepts a `data` argument; +# generated from the base implementation of the doctype dashboard, +# along with any modifications made in other Frappe apps +# override_doctype_dashboards = { +# "Task": "smart_service.task.get_dashboard_data" +# } + +# exempt linked doctypes from being automatically cancelled +# +# auto_cancel_exempted_doctypes = ["Auto Repeat"] + + +# User Data Protection +# -------------------- + +user_data_fields = [ + { + "doctype": "{doctype_1}", + "filter_by": "{filter_by}", + "redact_fields": ["{field_1}", "{field_2}"], + "partial": 1, + }, + { + "doctype": "{doctype_2}", + "filter_by": "{filter_by}", + "partial": 1, + }, + { + "doctype": "{doctype_3}", + "strict": False, + }, + { + "doctype": "{doctype_4}" + } +] + +# Authentication and authorization +# -------------------------------- + +# auth_hooks = [ +# "smart_service.auth.validate" +# ] + diff --git a/smart_service/json_files/procedurePublish.json b/smart_service/json_files/procedurePublish.json new file mode 100644 index 0000000..854cf67 --- /dev/null +++ b/smart_service/json_files/procedurePublish.json @@ -0,0 +1 @@ +[{"Variant": {"name": "Thar.AX-0311", "variant": "Thar.AX", "vehicle": "Thar", "family_code": "J08", "vehicle_segment": "Personal", "active_status": "Active", "fuel": "DSL", "transmission": "MT", "drive": "4WD", "Assets": [{"category": "TSB", "file": "/files/Mahindra.jpg", "active_status": "Active"}, {"category": "Tekalert", "file": "/files/Air-Filter-Element-Clean_ico.jpg", "active_status": "Active"}, {"category": "FSA", "file": "/files/Air-Filter-Element-Clean_ico.jpg", "active_status": "Active"}], "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": "Air Intake", "active_status": "Active", "icon_file": null, "myid": "1000", "Assets": [], "Subsystems": [{"subSystemdisplayorder": 2, "systems": "Air Intake", "sub_systems": "Air Filter Element Replace", "symptom": 0, "component": 0, "estimated_time": null, "rts": null, "mat": "Show", "cover_image": "", "active_status": "Active", "Config Kilometer": [{"kilometer_name": "90000", "kilometer_IDX": 29, "kilometers_applicable": 1}, {"kilometer_name": "30000", "kilometer_IDX": 11, "kilometers_applicable": 1}, {"kilometer_name": "20000", "kilometer_IDX": 8, "kilometers_applicable": 1}, {"kilometer_name": "80000", "kilometer_IDX": 26, "kilometers_applicable": 1}, {"kilometer_name": "50000", "kilometer_IDX": 17, "kilometers_applicable": 1}, {"kilometer_name": "100000", "kilometer_IDX": 32, "kilometers_applicable": 1}, {"kilometer_name": "10000", "kilometer_IDX": 5, "kilometers_applicable": 1}, {"kilometer_name": "40000", "kilometer_IDX": 14, "kilometers_applicable": 1}, {"kilometer_name": "1000", "kilometer_IDX": 2, "kilometers_applicable": 1}, {"kilometer_name": "60000", "kilometer_IDX": 20, "kilometers_applicable": 1}, {"kilometer_name": "70000", "kilometer_IDX": 23, "kilometers_applicable": 1}], "procedure_status": "Publish Ready", "procedure_link": "Thar.AX-0311-Air Filter Element Replace-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": "File", "content": "", "file": "", "display_order": 3}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Description", "content": "
  • The air cleaner element is Non woven +Pleated Media type (Dry Type). Filtration happens in two stages. Coarser particles are filtered in first stage by foam media and fine particles are filtered by Paper media in second stage. The dust and other fine particles which are sucked inside along with air gets trapped in the air cleaner while passing through the filter element.
", "file": "", "display_order": 4}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Notice", "content": "
  • Don\u2019t tap or hit the filter element.
", "file": "", "display_order": 5}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
  1. Park the vehicle on flat work bay.
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "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": "
  • The air filter element should be inspected and replaced from time to time, when driving under the following conditions:
    • Unpaved road.
    • Dusty air-polluted road.
    • Long-term driving in rainy weather.
", "file": "", "display_order": 10}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Description", "content": "
  • Using 5 mm allen key, Unscrew air cleaner dirty duct mounting screws and lift the top housing.
", "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": "
  • Gently take out the air cleaner element from the housing.
", "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": "
  • Clean the inner side of the air cleaner housing using a lint free cloth.
", "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": "
  • Refit the New air filter element gently inside the air cleaner housing.
", "file": "", "display_order": 18}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
  • During Installation ensure to keep foam side of the filter element in the bottom side.
  • Ensure dust should not fall inside the clean hose area while fitting.
", "file": "", "display_order": 19}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Always use recommended genuine air filter element.
  • Do not tap or hit the filter element.
", "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": "
  • Position the air cleaner assembly top cover and refit the mounting screws.
", "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": "
  1. Park the vehicle on level work bay.
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "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": "
Connect the transparent pipe to the drain \u00a0plug outlet of the fuel filter assembly
", "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": "
  • Using a Nose plier, rotate drain plug anticlockwise till the water starts flowing from the tube.
", "file": "", "display_order": 8}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Drain plug requires hand tight only; do not use any tool and avoid over tightening.
  • Do not over tight the drain plug
", "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": "
  • Rotate drain plug in clockwise directio \u00a0to stop the flow as soon as water gets over and fuel flow starts. Tighten the drain plug.
", "file": "", "display_order": 11}, {"procedure_name": "Sediment Draining", "step_name": "Step-4", "content_type": "Description", "content": "
  • Start the engine and check for any leaks.
", "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": "
  1. Park the vehicle on level work bay.
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "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": "
Connect the transparent pipe to the drain \u00a0plug outlet of the fuel filter assembly
", "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": "
  • Using a Nose plier, rotate drain plug anticlockwise till the water starts flowing from the tube.
", "file": null, "display_order": 8}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Drain plug requires hand tight only; do not use any tool and avoid over tightening.
  • Do not over tight the drain plug
", "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": "
  • Rotate drain plug in clockwise directio \u00a0to stop the flow as soon as water gets over and fuel flow starts. Tighten the drain plug.
", "file": null, "display_order": 11}, {"procedure_name": "Sediment Draining", "step_name": "Step-4", "content_type": "Description", "content": "
  • Start the engine and check for any leaks.
", "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-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6{X}S lmsA#{>c_`t=4F<|$LkeT-r}&y%}*)KNwovH;xiC4003n>Hz)uA literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release/__init__.py b/smart_service/mahindra_smart_service/doctype/release/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/doctype/release/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/release/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f43e9515b69a36986a369ddfb1430684790a7a4c GIT binary patch literal 207 zcmWIL<>g`k0@Vrii6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5jxKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6{X}S tmsA#{>KCQvq$U=p>c_`t=4F<|$LkeT-r}&y%}*)KNwovH<}(m8001c7IvoH2 literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release/__pycache__/release.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/release/__pycache__/release.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b73891e97fa086f483aaf6ce5dec794db30b6246 GIT binary patch literal 652 zcmZ8f%}(4f5FR_pCZJuF3-{%?2R7wiAy6yzwyHo}ayeO+D_IvPKOvGX*7)J;tT8qVI#T&+Fq$J9+CSX+fuBsD03oC%XZ=scqqWfk@4iu zVz)cgniIcR&8bTNXvR-twn(|~hi&S9EVuQuC_AhOPoKTfuYZKTY4T}!sl$kpt^f7L KETL~F8nM4KXQ2=P literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release/__pycache__/test_release.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/release/__pycache__/test_release.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f16380913b4ec3500227543e677728f88566f67c GIT binary patch literal 403 zcmZ8cJ5Iwu5S?8IutIVLItmxC&?6Lyf-VK0#?5H)4ziJd?Aj5jDBu7b1FqzjiYugI z*0vxp(!80c`RKjd`Fsi-hi}jNo$IG3+c9CX;B*HJ28_rdhD$Kg1g~HMf(P*u#L|ds zh$dgW1IxtYb_ga5PB&v9h=qaiLU#K%$R1vVb8nrO(=RE1##GxS>t!(&|AA;U;XG;^U(RzE<777p6~oT FlHa>ZWjO!< literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release/release.js b/smart_service/mahindra_smart_service/doctype/release/release.js new file mode 100644 index 0000000..3e6b89c --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release/release.js @@ -0,0 +1,7 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Release', { + // refresh: function(frm) { + // } +}); diff --git a/smart_service/mahindra_smart_service/doctype/release/release.json b/smart_service/mahindra_smart_service/doctype/release/release.json new file mode 100644 index 0000000..64517f5 --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release/release.json @@ -0,0 +1,75 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "Ver.####", + "creation": "2021-11-01 12:28:45.623316", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "planned_release_date", + "actual_release_date", + "column_break_3", + "release_description", + "section_break_5", + "docs" + ], + "fields": [ + { + "fieldname": "planned_release_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Planned Release Date", + "reqd": 1 + }, + { + "fieldname": "actual_release_date", + "fieldtype": "Date", + "label": "Actual Release Date", + "read_only": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "release_description", + "fieldtype": "Small Text", + "label": "Release Description" + }, + { + "fieldname": "section_break_5", + "fieldtype": "Section Break" + }, + { + "fieldname": "docs", + "fieldtype": "Table", + "label": "Docs", + "options": "Release_Docs" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-11-01 12:53:41.695352", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "Release", + "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/mahindra_smart_service/doctype/release/release.py b/smart_service/mahindra_smart_service/doctype/release/release.py new file mode 100644 index 0000000..677a61b --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release/release.py @@ -0,0 +1,20 @@ +# 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 +import json +class Release(Document): + pass + + + +@frappe.whitelist() +def api_vehicle_map(): + doc = frappe.get_doc('Systems','Reverse Parking Assistance System') +# doc = frappe.get_doc({ +# 'doctype': 'Procedure', +# 'name': 'Thar-AX-0001-Air Filter Element Clean-en' +# }) + return doc \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/doctype/release/test_release.py b/smart_service/mahindra_smart_service/doctype/release/test_release.py new file mode 100644 index 0000000..7ea7557 --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release/test_release.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestRelease(unittest.TestCase): + pass diff --git a/smart_service/mahindra_smart_service/doctype/release_docs/__init__.py b/smart_service/mahindra_smart_service/doctype/release_docs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..482e9c84bd0d7ab6ff1837673f9282874cf7b8a4 GIT binary patch literal 212 zcmWIL<>g`kg3JB&i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6{X}S wmsA#{>KCQvq$U=p#sm4q`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd!a`V7Pj0PcxA*8l(j literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/release_docs.cpython-38.pyc b/smart_service/mahindra_smart_service/doctype/release_docs/__pycache__/release_docs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c45082ea3c46bfa0bfd727ba790a8a404849a576 GIT binary patch literal 431 zcmZ8du};G<5Ix7Oh^lmCXU#xTc7!@0u`z&HvYbqORVu|vu#-w15CiOd2j9aMMkaoN ziE~m!%Sm_k^SyU^=ezlQ1|09NPwIouPY?EE!eGhiPPk~$q68x{A>ayhpydl_N#a>% zfu7t#JpE!8#G(%`>%22mwYh)T55Zu`=^`!!nb5#u!Q!BgZm1;X2wCl}W7&s@l`@3b z&k#+myVBny#D`9mW9JR*5l!#_?z<;SH!vSUP--^{j#O Ux50P|xzUH`<{9 literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.json b/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.json new file mode 100644 index 0000000..f99feac --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.json @@ -0,0 +1,39 @@ +{ + "actions": [], + "creation": "2021-11-01 12:27:23.263495", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "doc_type", + "doc_id" + ], + "fields": [ + { + "fieldname": "doc_type", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Doc Type", + "options": "DocType" + }, + { + "fieldname": "doc_id", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "label": "Doc ID", + "options": "doc_type" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-11-01 12:29:04.655386", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "name": "Release_Docs", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.py b/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.py new file mode 100644 index 0000000..3855f59 --- /dev/null +++ b/smart_service/mahindra_smart_service/doctype/release_docs/release_docs.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 Release_Docs(Document): + pass diff --git a/smart_service/mahindra_smart_service/report/__init__.py b/smart_service/mahindra_smart_service/report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76f80b3fdef6c434c14fe2511ca481f4d7ea3c23 GIT binary patch literal 198 zcmWIL<>g`kf{2W!L=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(RjIu8JT%0MTzmKii%PT j@{3CJg`kg0E#u5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_renx(7s(xBg zVnIP_d~s1(yn!KY}TbY^zF{z}`RmLx?SR+ggFl5x^NQwVKEo4BGVb<`$+WPvuDow2jg?mC&7 z4Xw47klF(m{sTx{_)B}`)B}Hj3%s{$r?!)vSbN^i$NQT1x!+#9Rw3|olRw;7ON9J| zi^<1;#aA%YcK|ryG$0}EP>ORFunvQ_5g4J_F~dTq5Lz88J2L|o7CXhT)G5Kb$_w0j zOFLy=yG#=ZMp_wx;}d7$0Htyt-P zXzu`S?Dm8@uzxxdQcMs(cx2Z^RI~e%3uzy|&W|ED6#Ec%MOQ(@DV>smYS?$S9`Cj6 z@4s%fZQzYeo2UhH-akE!}wddo-Zd7Ybr)jEwEImjGucivr~w`ac!im#IRf6ZcDwa5H}#!SwrDq+x~_u}j{1)8 zn{D8Q!7?+bS&~hlX0eXyT%LC$%VJjKZp_$a5j{Er+DjceeUbCrg1j0Lo^PQFV~!JX za~0zQpuZwgro4!5`w|+9mDlQ&@x#r`M;y(XQl8RN zKovnsWv2>h6}!O;M3Qrm!dV~4!3|uN0ek>MeGGuGdBdb7dW%-r=xwl@*5BsBJj*br z>N55)3r1F#BbfBakR(u@Iei1Qc@bv@%*zmuqb+r!-ZgYKYEw%Cj zGN|CbySjN7_6nKp&$rgs*9Je&R`CWJHVeYWbWyq@%Fw0%r@Ftx(mJZ}-1l^+e6GNt zu(=63)-72C9C;JLEd(C|NG "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 + `tabDrive`.modified as "Modified On", + `tabDrive`.active_status as "Status", + `tabDrive`.drive as 'Drive' + + + %s + From _d6463952657fa86c.`tabDrive` + LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + ON _d6463952657fa86c.`tabDrive`.drive = 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.`tabDrive`.drive = tabTranslation.sourceText;""" % (sel ,queryAppendLang) + + + data = frappe.db.sql(actualQuery,as_list=True) + + return data + + # data = frappe.db.sql( + # """Select + # `tabDrive Segment`.modified as "Modified On", + # `tabDrive Segment`.active_status as "Status", + # `tabDrive Segment`.drive_segment as 'drive Segment' , + # `tabDrive Segment`.drive_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.`tabDrive Segment` + # LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans + # ON _d6463952657fa86c.`tabDrive Segment`.drive_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.`tabDrive Segment`.drive_segment = tabTranslation.sourceText;""",as_list=True) + # return data + + +def get_columns(): + + columns = [] + columns += [ + _("Modified On") + ":Datetime/:200", _("Status") + ":Data/:100",_("Drive") + ":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 +# `tabDrive Segment`.modified as "Modified On", +# `tabDrive Segment`.active_status as "Status", +# `tabDrive Segment`.drive_segment as 'drive Segment' , +# `tabDrive Segment`.drive_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.`tabDrive Segment` +# LEFT JOIN _d6463952657fa86c.`tabTranslation` as tabTrans +# ON _d6463952657fa86c.`tabDrive Segment`.drive_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.`tabDrive Segment`.drive_segment = tabTranslation.sourceText;""" % (queryAppendLang[0]) + +# print(actualQuery) diff --git a/smart_service/mahindra_smart_service/report/_file_structure/__init__.py b/smart_service/mahindra_smart_service/report/_file_structure/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_file_structure/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_file_structure/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4771ef9a31bcce808276dd1dcc7dab365c09be8f GIT binary patch literal 214 zcmWIL<>g`kf{2W!L=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(RjIu8JT%0MTzmKii%PT z@{3CJ13Bt55HkP(`H?+D literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_file_structure/__pycache__/_file_structure.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_file_structure/__pycache__/_file_structure.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30147808acbe44567fe9aedab3194614cc4dbd69 GIT binary patch literal 3201 zcmb7G&u<*J6(;BR?n-OfaceD#q6?%+x`iXfO>+qrLJKQG4~Y^aZ4oSxOh?0!H1_Pw znxtG?n9U(J5a&?9ha7W|fgb8pbI7^>K=T(6IRwZ_*Py5LkbaM|EA1-2lmn8F@9~ju z_&z?qKdr8|8Opzp{*mmy!q~SoSS&6Eze82;q7h8+f{mzm3O42=&KsUHa>OO!3hyBw zxxyF0LpJh6C?fQ}Xo)uZKy<_k`cSNjF8WCD_t;?V6zj6xr`+&3r7Nm-n(VJ=}yqZK`o1b*wUZH&3$*qj7SWmqI4- z@+6r}DycVPGA&kG9;Nz7W*5gBllvyj?q%tb&d4AYpkX|~Cp(~08qSLcf~q}{>mW3{ z#cw%+3rDzrbEZtYHG9BuMqbU)JKC=u^lt6qq`ck4!}-4V#+z^4{9|7ydpodf!kJ`ISzekLAQBHzz5LDD&WF3nXuk@?+3TkRQnF5a&Skx5dWB>M2254CeqLoEr( zB?~iXc)j0l%}q|UPSV3n#JY;-mM`%7JMX^z*8B(hl_V4P?w|b|%t=oPX9I4+M8zUc z^&l`o0|DcRJ>#l7h3Te6q7;5UO>|zBrUNHurJfBEDU4XqXdm=Z63-eO9(~8weL?zIR~%0q#Q0w%G^&q1zyM z4_ETGBTLZk0`2wK2^0PkLV+U!I|?!KYWIXcVN<^bMnp7ZqJ_RaWHrs}p!dW|kAYqt zvhpE%+M$ab{snrz1JR2+TwIewzObgCF|GGo^z-$;15NAE+TRIh!JK_YBYF&!H%P zLD~T(ALzr2ZYP)j3{@f8;;MUa_qyBVUF&#qe%GUM1B8gTF`_y6oE0ufdkGj6C45vH z6u!hc~l2oEEFNH9WpIDw<-VBvf&f*~F7Ii!dt2YJwoXg;ck z>Rb4|KMh1U4eRiPiwMAq>aY$(tH&_AtRvxEV;Ey6v~!StQG3`iu&yj;d|JJ%{RO@U zaCfIIYhBCE{i^mYuWfm4%ln3GuEXX}mMoi016U4AL@r2dmnS08CkrxXfe1SS)13U3pRuM+1%&|B%ulN$grbi8C5?D0U!dMaL^3`AKDp6!zcKvQD549JmjL=p zcJgh*i;Ez=0?9V2`ZF2=X`8PDg4DO2b@cQ#;}w4XMWCBHpK%o$U2vO9ux@IbOWI=z z$}Sibz3-)_(&}zKoIlH5$Y3jjYdJed-vuI?`qhxkQGCr#y(q znLez%U5r zeW~m*(I)n#vYzjv?FR57$x_s%LRvRb)rV*V*La&Aa7qs;HT>KcAvh5@EpXbF(*b8? z##yzTE;yHFS`B9noXfL0S7^?Gk8^%**WQHV_2J&u4!y(uq!j%f`!1;A=HAxv%JzNa z33=LoGcRu&mcIxn419xEJ1Ycb5XLW(y{wpV?Bftt6MFWQ@&B3&JRIRHyE(p$ZQjY` zI7f0&m9)O`wvk$%{sq5ky?flDDY#=KJpCuwqs~Hpa(o5i-_LTGzOL*N(LA}b(zoVW z*V}f3)30f1!tcU0rEIbB4n_Y5sA>xha~ + + + + + + +       ${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.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 z>AG<|Zg$jY^bnu)1 z#}Xlb;$Zf%VDLFK^%MjroQ5Q#ZA!7vLe^&Rwn8hi+jdlF7b2(am^C|OQL$Z&O6?Mi ztGvLS*R);cMP7PM+7({r6?j)UJ0SIiH=vu;X}Xxiy`ay97xuJ}eyCb?E42fqCCFZ^ z(_&X>?rTwJX(>|OQ;Cz*3n(hc9~<5b+72{T1JQ*aBV#&dn!F<4Fz8vDz9M5bq9fKp z3up^8RzbNJ^ur{IRa(LU9Oc*TwAkr|V2?_RlT{m6QakkH?(alighT%Ras8wpiS>^3 zPfvxX;Qk?dsUiUhQ2t6(R zScSgs_2ct1jnkKDQM?dAqD2+2UjjjB1%3{di_i~nV)Ec>0h;mDYv^e5j6P$Wa>lKn z*qCs8Oh@Da`PLmXUKla%TqBw6u&ZQjf&Z*q;Mu`4Anhr#cn(<@*`op=?ZJIsf<86- zo$S1klb=@{6(JVo*6`^;bFaB`=%RliB3!t;Pxc?VN7_H$NtEtK?jEcpepjd?_xlqe z#SHZJUAHFUn%kFLNcZ?+M2}j~Y>*_c}en5mtLN8SKZkwKKRMrkmx3)H~ z4vB-RR#E#ZsDQr}1!7l%E2qceroHCwq5I|j!wVaH)^js@(VlF02<}Jh^!V)aI2R$jKpwzJ&|n(`1Elf9 zy&?J6)e@x#Xmk_+%nn3S1`OE@fpcn6yL00d!+ zmQ73aGOe)uZLxQqzw9fE%pm8I7^Zs%nn_|Ybh>0rMv%%leFceZ340dwY||@1&sic} zOk0Sg8WP?!3(FEOL&{?#2I=m7Ol?2gx-hbMSi zWbydc$6FtLdUJE@=BbT<_y$u|o*#KH(CzZnfMH>K8*HpQvIrRY9*WB- zu7F4#tanhgEEv>niDgG#KyeiX{7Z2z*jRSHgQk{25C}1&6#~D190>a&E74_W5>Z%} z7t)FcrB5ePc%H<3$gIVpXGmid&hQS4wnXx!rQ48i UlTh5nT?*;BVA!|FDo*Lqzf!V<>i_@% literal 0 HcmV?d00001 diff --git a/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.js b/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.js new file mode 100644 index 0000000..59cb1c4 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_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["_Fuel 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/_fuel_translation/_fuel_translation.json b/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.json new file mode 100644 index 0000000..22a589c --- /dev/null +++ b/smart_service/mahindra_smart_service/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-26 17:08:23.995237", + "modified_by": "Administrator", + "module": "Mahindra Smart Service", + "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/mahindra_smart_service/report/_fuel_translation/_fuel_translation.py b/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.py new file mode 100644 index 0000000..f4f1184 --- /dev/null +++ b/smart_service/mahindra_smart_service/report/_fuel_translation/_fuel_translation.py @@ -0,0 +1,145 @@ +# 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 + `tabFuel`.modified as "Modified On", + `tabFuel`.active_status as "Status", + `tabFuel`.fuel as 'Fuel' + + %s + From `tabFuel` + LEFT JOIN `tabTranslation` as tabTrans + ON `tabFuel`.fuel = 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 `tabFuel`.fuel = 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",_("Fuel") + ":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/_procedure_report/__init__.py b/smart_service/mahindra_smart_service/report/_procedure_report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/mahindra_smart_service/report/_procedure_report/__pycache__/__init__.cpython-38.pyc b/smart_service/mahindra_smart_service/report/_procedure_report/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52137047fa29e9377c7688a19b37bacb4677abb3 GIT binary patch literal 216 zcmWIL<>g`k0^NoAi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j@KO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVaMQGcxm1iW1{d6&0lx vZpeQDCC~7LO8f}lHvG%2& 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 nEQ5CV3at}gLPiWiYps&&S>B`GQ(n!R@n${OD| + + + + + + + + + + +    ${value}

` + break; + case 2: + value = `

+ + + + + + + +   ${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^uYxNbY^zF{tA!^NZYGhkt{Qw&R;63nZ- zz^ym5Q|3ipdP6!DUgj0(tDLn-ZQ(8OCN-Ka#*y#!xo`qs3+V=`RWnl4Q(6M_Bb^p| zLUUJ(8cR!|>K#d3q>e|C!RRxgXVA8xsTBY{_%Sl1L#D}V@;!r*q3LTfWC=}J7d42cVBii{o7rcTzKOqu!rHUIZcUepx^4hhn`e-J>Jn zDEZRaxG|c2av&n_a2+<(x(Z#X9VO&T-xG7Q&^`1cE?s99Ns6Ps)a#Cl4;*!(v zr5mZh)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=$GZzf8{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&14vTETgW1CEi~kgv$8B#oINBsZ4a>QVbrofwR8jl=gd|7rE=Qa zAUjUN&}nxbG#pPl%Ti!250{!JSeIqC?EMHQa+inPS5Bo|#tmx?d0y|D&#P#NxZndA9i3Bt#V}v)WfcMfP8o@O~&D4yT=R%4XEG z-F~>|e6jQBEH6$OGB@s{-pRg^cjsT3rkq&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?yP`#>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?ulsP@)~AlcY_f8NiuspYvN31hF;wJg~%&lU z=}Pb9M7W7Ob64*az4s4A>>sVbM6!}Zo>Xoko4Cw-|_+%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(zpLU3Pbt%8NjUxTyl*2MeB~Trb@h0>2F#5FJZavR~a=QSu^5S!jy9i74W$d{gDBQUq zs?Wics0Jt+$D>h11c93eTrbuzET%vbLVw=L3D^PXh1g^W)sNRtmb1N^98RLhUk(`E&a#r*8X?Ahnvt^}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 z4HmemD~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!K2KczG$ 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#Fr0juebmo1Tz0Z}#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@FgZlrC-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 zBq-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$Hjo>&-#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);8BT{xwXXCBLcV$c zX+GlU+L-c~_JLIdF_o<{T(f~2e2q+U39fZgA5wA!heaUoK~oJn 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~3PUi1CZpdaZC5rWna}$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~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(RjIu#U-gl#ri4v$t9Hq hsrvEpnR%Hd@$q^EmA5!-a`RJ4b5iX<)_w+J1_1Y=Fvg`kf{)p=6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_Uenx(7s(xBg zVnIP_d~s1(yn!K1G(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<&;-;LCJkSjoKOkwO0Ny0<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!KlIYq;;_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`SSkDnU7LAfTvFCvGUH`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~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(RjIu#U-gl#ri4v$t9Hq ysrt#K#U=T<@i~ck>7|M3sm1#7@tJv^SgjD567aT0tvayCzvI*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`2FmwtLyTA{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*!(@!6RD@@$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;6tJU;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!KRKS^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(0R{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~EDHkvg`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@cQIlg`kf}d>@5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_kenx(7s(xBg zVnIP_d~s1(yn!KG`=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>*Zv|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?+mCPwiPuOlY6nqSFdlyIU? 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_;^XxSDsOSvJM+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~g9L_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%{Yh!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!K zshEu;VlmRZowxJm_b{JNf$j9`U48QV?aA0COcw0+gh7KA1tf3_I?&-8=#bz=yoO1j z#T~?xAJ)J!^*A=cWWjD{3xN{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*`(tW5@|&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_;^XxSDsOSvfjN2=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*YwYg`kf@$p&5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_+enx(7s(xBg zVnIP_d~s1(yn!KTiNr?Rvv8?sF z@c9h!X|0N}@&RU__YLsV$*e9(-W%04gx0ipdbVN5cT}aBP4*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=mg`kf=7QQB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY2KczG$)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_@$z4JLSt^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(ieX0xiMhcH=wP`5+drd;%L2 zX9}W%XT9fpcW3*2J)KS%;qd5LztaAe%{B@$7ew4AF@@nqJnOx=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 zGjAupbH!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~6RKr0dvD@-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 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 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%aH07nd4Zh}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 zcmV3ddiGfl? 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 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 oJ0^AH^Yc9I>#J! + + diff --git a/smart_service/public/oauthtest.py b/smart_service/public/oauthtest.py new file mode 100644 index 0000000..7e6f3ae --- /dev/null +++ b/smart_service/public/oauthtest.py @@ -0,0 +1,44 @@ +import frappe +from frappe import auth + + +@frappe.whitelist(allow_guest=True) +def login(device_id): + # 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) + + api_secret = frappe.generate_hash(length=15) + api_key = frappe.generate_hash(length=15) + user_details = frappe.get_doc('User', 'Guest') + + frappe.response["message"] = { + "success_key": 1, + "message": "Authentication success", + "api_key": api_key, + "api_secret": api_secret, + 'device_id': device_id, + 'user_details': user_details, + 'sid': frappe.session.sid, + } + + +def generate_keys(user): + user_details = frappe.get_doc('User', 'Guest') + 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/sess.py b/smart_service/public/sess.py new file mode 100644 index 0000000..777cbf0 --- /dev/null +++ b/smart_service/public/sess.py @@ -0,0 +1,5 @@ +import frappe + + +def clearsess(): + frappe.session.clear() diff --git a/smart_service/reports/__init__.py b/smart_service/reports/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/reports/__pycache__/__init__.cpython-38.pyc b/smart_service/reports/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dc44fedd98835faeef32026e0f1a5f91132ff4f GIT binary patch literal 176 zcmWIL<>g`k0-vJ(L=gQLL?8o3AjbiSi&=m~3PUi1CZpdaZC5rWna}$e7;)_#@$}*Ev(Rf9v1^GoK#rpB_nR%Hd Z@$q^EmA5!-a`RJ4b5iX<)_n$I1^|FyE!6-3 literal 0 HcmV?d00001 diff --git a/smart_service/templates/__init__.py b/smart_service/templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/templates/__pycache__/__init__.cpython-38.pyc b/smart_service/templates/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..659b6e21f849cc4ff9433866ca6e5e5b451121cb GIT binary patch literal 178 zcmWIL<>g`kg0pH>i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10eKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVY;na|?13OHzyV literal 0 HcmV?d00001 diff --git a/smart_service/templates/includes/login/_login.js b/smart_service/templates/includes/login/_login.js new file mode 100644 index 0000000..a33e482 --- /dev/null +++ b/smart_service/templates/includes/login/_login.js @@ -0,0 +1,429 @@ +// login.js +// don't remove this line (used in test) +var http = new XMLHttpRequest(); +window.disable_signup = {{disable_signup and "true" or "false" }}; + +window.login = {}; + +window.verify = {}; +args = {},capTotal=0,capRandomNum1=0,capRandomNum2=0; +(!$('.loadingBlock').length)?$('body').append(''):''; +const rangeOfNumber =()=> { + let capRandomNum = Math.ceil(Math.random()*10); + if (capRandomNum.toString().length != 1) { + capRandomNum = rangeOfNumber(); + } + return capRandomNum; +} +const captchaNumGen = ()=>{ + capRandomNum1 = rangeOfNumber(); + capRandomNum2 = rangeOfNumber(); + $("#capRandomNum1").text(capRandomNum1); + $("#capRandomNum2").text(capRandomNum2); + capTotal = Number(capRandomNum1) + Number(capRandomNum2); +} +captchaNumGen(); +login.bind_events = function () { + $(window).on("hashchange", function () { + login.route(); + }); + args.txtCaptcha=0; + let isSubmit=0; + + $(".form-login").on("submit", function (event) { + event.preventDefault(); + if(isSubmit===1){ return false;} + $("button").css("cursor", "not-allowed"); + $("body").css("cursor", "not-allowed"); + login.set_status('{{ _("Connecting to Mahindra DMS...") }}', 'blue'); + + // $('.loadingBlock').show(); + $('.login-captcha-refresh').css('z-index', '-1'); + $('.toggle-password').css('z-index', '-1'); + args.cmd = "login"; + args.usr = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); + + let getPass = $("#login_password").val(); + let getCaptcha = Number($("#login_captcha").val()); + if(capTotal!==getCaptcha){ + frappe.msgprint('{{ _("Please enter valid Captcha") }}'); + $("button").css("cursor", "pointer"); + $("body").css("cursor", "default"); + $('.login-captcha-refresh').css('z-index', '2'); + $('.toggle-password').css('z-index', '2'); + login.set_status('{{ _("Invalid Captcha. Try Again.") }}', 'red'); + captchaNumGen(); + return false; + } + + +const parseXmlToJson = (xml)=>{ + const json = {}; + for (const res of xml.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) { + const key = res[1] || res[3]; + const value = res[2] && parseXmlToJson(res[2]); + json[key] = ((value && Object.keys(value).length) ? value : res[2]) || null; + } + return json; +} +isSubmit=1; +(async () => { //alert(JSON.stringify(args)); debugger; + const rawResponse = await fetch("http://www.mahindramile.com/WindowAuth/Service.asmx/ValidateCredential?LoginID="+args.usr+"&Password="+btoa(getPass)); + const resStr = await rawResponse.text(); + login.set_status('{{ _("Verifying...") }}', 'blue'); + if(resStr){ + const parseJson = parseXmlToJson(resStr); + if(parseJson){ + //alert(JSON.stringify(parseJson)); + if(parseJson.IsSuccessfull=='1'){ + base_pwd = "TGluY3lAMjAyMQ==" + args.pwd = atob(base_pwd); + + }else{ + args.pwd=getPass; + // if(args.pwd!=getPass){ + // frappe.msgprint('{{ _("Both login and password required") }}'); + // } + } + } + } + args.device = "desktop"; + $('.loadingBlock').hide(); + login.call(args); + isSubmit=0; + $("button").css("cursor", "pointer"); + $("body").css("cursor", "default"); + $('.login-captcha-refresh').css('z-index', '2'); + $('.toggle-password').css('z-index', '2'); + + return false; + + + })(); + + + + }); + + $(".form-signup").on("submit", function (event) { + event.preventDefault(); + var args = {}; + args.cmd = "frappe.core.doctype.user.user.sign_up"; + args.email = ($("#signup_email").val() || "").trim(); + args.redirect_to = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")); + args.full_name = frappe.utils.xss_sanitise(($("#signup_fullname").val() || "").trim()); + if (!args.email || !validate_email(args.email) || !args.full_name) { + login.set_status('{{ _("Valid email and name required") }}', 'red'); + return false; + } + login.call(args); + return false; + }); + + $(".form-forgot").on("submit", function (event) { + event.preventDefault(); + var args = {}; + args.cmd = "frappe.core.doctype.user.user.reset_password"; + args.user = ($("#forgot_email").val() || "").trim(); + if (!args.user) { + login.set_status('{{ _("Valid Login id required.") }}', 'red'); + return false; + } + login.call(args); + return false; + }); + + $(".toggle-password").click(function () { + var input = $($(this).attr("toggle")); + if (input.attr("type") == "password") { + input.attr("type", "text"); + $(this).text('{{ _("Hide") }}') + } else { + input.attr("type", "password"); + $(this).text('{{ _("Show") }}') + } + }); + + {% if ldap_settings and ldap_settings.enabled %} + $(".btn-ldap-login").on("click", function () { + var args = {}; + args.cmd = "{{ ldap_settings.method }}"; + args.usr = ($("#login_email").val() || "").trim(); + args.pwd = $("#login_password").val(); + args.device = "desktop"; + if (!args.usr || !args.pwd) { + login.set_status('{{ _("Both login and password required") }}', 'red'); + return false; + } + login.call(args); + return false; + }); + {% endif %} +} + + +login.route = function () { + var route = window.location.hash.slice(1); + if (!route) route = "login"; + login[route](); +} + +login.reset_sections = function (hide) { + if (hide || hide === undefined) { + $("section.for-login").toggle(false); + $("section.for-email-login").toggle(false); + $("section.for-forgot").toggle(false); + $("section.for-signup").toggle(false); + } + $('section:not(.signup-disabled) .indicator').each(function () { + $(this).removeClass().addClass('indicator').addClass('blue') + .text($(this).attr('data-text')); + }); +} + +login.login = function () { + login.reset_sections(); + $(".for-login").toggle(true); +} + +login.email = function () { + login.reset_sections(); + $(".for-email-login").toggle(true); + $("#login_email").focus(); +} + +login.steptwo = function () { + login.reset_sections(); + $(".for-login").toggle(true); + $("#login_email").focus(); +} + +login.forgot = function () { + login.reset_sections(); + $(".for-forgot").toggle(true); + $("#forgot_email").focus(); +} + +login.signup = function () { + login.reset_sections(); + $(".for-signup").toggle(true); + $("#signup_fullname").focus(); +} + + +// Login +login.call = function (args, callback) { + login.set_status('{{ _("Verifying...") }}', 'blue'); + + return frappe.call({ + type: "POST", + args: args, + callback: callback, + freeze: true, + statusCode: login.login_handlers + }); +} + +login.set_status = function (message, color) { + $('section:visible .btn-primary').text(message) + if (color == "red") { + $('section:visible .page-card-body').addClass("invalid"); + } +} + +login.set_invalid = function (message) { + $(".login-content.page-card").addClass('invalid-login'); + setTimeout(() => { + $(".login-content.page-card").removeClass('invalid-login'); + }, 500) + login.set_status(message, 'red'); + $("#login_password").focus(); +} + +login.login_handlers = (function () { + var get_error_handler = function (default_message) { + return function (xhr, data) { + if (xhr.responseJSON) { + data = xhr.responseJSON; + } + + var message = default_message; + if (data._server_messages) { + message = ($.map(JSON.parse(data._server_messages || '[]'), function (v) { + // temp fix for messages sent as dict + try { + return JSON.parse(v).message; + } catch (e) { + return v; + } + }) || []).join('
') || default_message; + } + + if (message === default_message) { + login.set_invalid(message); + } else { + login.reset_sections(false); + } + + }; + } + + var login_handlers = { + 200: function (data) { + if (data.message == 'Logged In') { + login.set_status('{{ _("Success") }}', 'green'); + window.location.href = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")) || data.home_page; + } else if (data.message == 'Password Reset') { + window.location.href = frappe.utils.sanitise_redirect(data.redirect_to); + } else if (data.message == "No App") { + login.set_status("{{ _('Success') }}", 'green'); + if (localStorage) { + var last_visited = + localStorage.getItem("last_visited") + || frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")); + localStorage.removeItem("last_visited"); + } + + if (data.redirect_to) { + window.location.href = frappe.utils.sanitise_redirect(data.redirect_to); + } + + if (last_visited && last_visited != "/login") { + window.location.href = last_visited; + } else { + window.location.href = data.home_page; + } + } else if (window.location.hash === '#forgot') { + if (data.message === 'not found') { + login.set_status('{{ _("Not a valid user") }}', 'red'); + } else if (data.message == 'not allowed') { + login.set_status('{{ _("Not Allowed") }}', 'red'); + } else if (data.message == 'disabled') { + login.set_status('{{ _("Not Allowed: Disabled User") }}', 'red'); + } else { + login.set_status('{{ _("Instructions Emailed") }}', 'green'); + } + + + } else if (window.location.hash === '#signup') { + if (cint(data.message[0]) == 0) { + login.set_status(data.message[1], 'red'); + } else { + login.set_status('{{ _("Success") }}', 'green'); + frappe.msgprint(data.message[1]) + } + //login.set_status(__(data.message), 'green'); + } + + //OTP verification + if (data.verification && data.message != 'Logged In') { + login.set_status('{{ _("Success") }}', 'green'); + + document.cookie = "tmp_id=" + data.tmp_id; + + if (data.verification.method == 'OTP App') { + continue_otp_app(data.verification.setup, data.verification.qrcode); + } else if (data.verification.method == 'SMS') { + continue_sms(data.verification.setup, data.verification.prompt); + } else if (data.verification.method == 'Email') { + continue_email(data.verification.setup, data.verification.prompt); + } + } + }, + 401: get_error_handler('{{ _("Invalid Login. Try again.") }}'), + 417: get_error_handler('{{ _("Oops! Something went wrong") }}') + }; + + return login_handlers; +})(); + +frappe.ready(function () { + + login.bind_events(); + + if (!window.location.hash) { + window.location.hash = "#login"; + } else { + $(window).trigger("hashchange"); + } + + $(".form-signup, .form-forgot").removeClass("hide"); + $(document).trigger('login_rendered'); +}); + +var verify_token = function (event) { + $(".form-verify").on("submit", function (eventx) { + eventx.preventDefault(); + var args = {}; + args.cmd = "login"; + args.otp = $("#login_token").val(); + args.tmp_id = frappe.get_cookie('tmp_id'); + if (!args.otp) { + frappe.msgprint('{{ _("Login token required") }}'); + return false; + } + login.call(args); + return false; + }); +} + +var request_otp = function (r) { + $('.login-content').empty(); + $('.login-content:visible').append( + `
+
+
+ {{ _("Verification") }} +
+
+ + +
+
` + ); + // add event handler for submit button + verify_token(); +} + +var continue_otp_app = function (setup, qrcode) { + request_otp(); + var qrcode_div = $('
'); + + if (setup) { + direction = $('
').attr('id', 'qr_info').text('{{ _("Enter Code displayed in OTP App.") }}'); + qrcode_div.append(direction); + $('#otp_div').prepend(qrcode_div); + } else { + direction = $('
').attr('id', 'qr_info').html('{{ _("OTP setup using OTP App was not completed. Please contact Administrator.") }}'); + qrcode_div.append(direction); + $('#otp_div').prepend(qrcode_div); + } +} + +var continue_sms = function (setup, prompt) { + request_otp(); + var sms_div = $('
'); + + if (setup) { + sms_div.append(prompt) + $('#otp_div').prepend(sms_div); + } else { + direction = $('
').attr('id', 'qr_info').html(prompt || '{{ _("SMS was not sent. Please contact Administrator.") }}'); + sms_div.append(direction); + $('#otp_div').prepend(sms_div) + } +} + +var continue_email = function (setup, prompt) { + request_otp(); + var email_div = $('
'); + + if (setup) { + email_div.append(prompt) + $('#otp_div').prepend(email_div); + } else { + var direction = $('
').attr('id', 'qr_info').html(prompt || '{{ _("Verification code email not sent. Please contact Administrator.") }}'); + email_div.append(direction); + $('#otp_div').prepend(email_div); + } +} diff --git a/smart_service/templates/pages/__init__.py b/smart_service/templates/pages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/templates/pages/__pycache__/__init__.cpython-38.pyc b/smart_service/templates/pages/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3c45f73f5e1d5535d943c31b10ebae9ad7eed2f GIT binary patch literal 184 zcmWIL<>g`kg0pH>i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10YKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVY;na|?13OHzyV3lh_T gWPE&PUS>&ryk0@&Ee@O9{FKt1R6CHhpMjVG04P2%`~Uy| literal 0 HcmV?d00001 diff --git a/smart_service/transactions/__init__.py b/smart_service/transactions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3ee8fde5062180587458c2fc52d82dcb4892a2b GIT binary patch literal 181 zcmWIL<>g`k0?|Jc5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_ienx(7s(xBg zVnIP_d~s1(yn!K1KIf*h#3I3UobcT literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/__init__.py b/smart_service/transactions/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7c3f2b09ee3ae2f7997fad0b53a42c7e30264df GIT binary patch literal 189 zcmWIL<>g`kg8hFcB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY<~{fzwFRQg`k0-otp5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_lo(%k1el<$~$p;xU7fG6IH6h85TVA zn!5mAxm6|99~K-po{Laf9e^Q(V|GAwl2>2U7Zc)KxAz5$kzZz})* literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/config_kilometer/__pycache__/test_config_kilometer.cpython-38.pyc b/smart_service/transactions/doctype/config_kilometer/__pycache__/test_config_kilometer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cd7c5684eb2eea322058f6ffa13774db3c96a8f GIT binary patch literal 419 zcmZ8cu};G<5IrXaqAH!(*)xD)N2n4515y`Y$#OEbO9P1$Y^PE;B=`g*zJZPJ$;!kp zFmX-_R6XgQ@A>Z8?`|fOF;Jv$ui}Hw&pt}Qmw0@#W{0=h$OWf{g`kf*Qs}i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5jxKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVYy{3sUv7Gjo9EmZTQN=K>AL%uCmgkI&4@EQycTE2zB1VUwGmQks)$2Xf74AZ7pn DAhS9> literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/kilometer_mapping/__pycache__/kilometer_mapping.cpython-38.pyc b/smart_service/transactions/doctype/kilometer_mapping/__pycache__/kilometer_mapping.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0de80e04e02157697e40f6cc661f79c70cc2ae7e GIT binary patch literal 435 zcmZWlJx{|h5Vez5L{%!Wu(M_$h8>{}NDK%T#FFJ??1M(cPOy_om0*Hj!p2|9!ob8| zVB(xmQNc-fzIPu_?|eO<&luSwf0gg_egv>>69NlzzfVCk%`0Yj!8to)I@0kA(=qbr zxQO)Rie=MJnqnF6lhayt25qZCVcR%?1-VZtAS<|Lw9IKa>UYn}sy5i7yO2#&+Pljv z?h^nj4FdEt08{I(3V90f(8+4-yfL>!Y(w~Z5=-I`w~in+a literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/kilometer_mapping/__pycache__/test_kilometer_mapping.cpython-38.pyc b/smart_service/transactions/doctype/kilometer_mapping/__pycache__/test_kilometer_mapping.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c219b1445e41cdbe2bbef08cd67197d30cd99ffd GIT binary patch literal 422 zcmZWku};G<5IrXaqN?4P*)xD)N2n451ELGCWI37mpn=2*wo|DR6YwQ$jQmbkCVqj5 zb5o##ll*+oclZ46ay%Xa$AfrLZ+yQ8vK|8_6FzQ-L4y`0WN-pH((yCsnBZ1C#aX1q zIi!OR?ty6@a6JT*2_H9NAjpJ<)kM^7Uy$>sMOjzm$)2gEDa_3@jk^TVsEQD~A!1eQ zwhZ|Q@xE1MUwH+)$%;$(e3UcRkk^(a2%Vkd{=tgvUXjUXk_%3{N?DJN?7Yb75A#+T zr*dD^#z|f0e$kM;`}T%aZ%%r4jQ^hZnuU$n%~n`6B#Bt^G|rON6h2I4N!a#S@%N$Q T*L|Ob(Jndcmp$6}5sJP5dWUUd literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.js b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.js new file mode 100644 index 0000000..5b464ef --- /dev/null +++ b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.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('Kilometer Mapping', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.json b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.json new file mode 100644 index 0000000..bdfc8d9 --- /dev/null +++ b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.json @@ -0,0 +1,193 @@ +{ + "actions": [], + "autoname": "format:{variant_mapping}-KM", + "creation": "2021-11-27 15:29:24.379607", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "variant_mapping", + "active_status", + "column_break_3", + "fuel", + "workflow_state", + "column_break_6", + "transmission", + "column_break_8", + "drive", + "column_break_10", + "family_code", + "vehicle", + "section_break_12", + "kilometer_filter", + "column_break_14", + "sub_system_filter", + "section_break_16", + "config_kilometer" + ], + "fields": [ + { + "fieldname": "variant_mapping", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Variant Mapping", + "options": "Variant Mapping", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Active Status", + "options": "Active\nInactive" + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.fuel", + "fieldname": "fuel", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Fuel", + "options": "Fuel", + "read_only": 1 + }, + { + "default": "Draft", + "fieldname": "workflow_state", + "fieldtype": "Select", + "hidden": 1, + "in_list_view": 1, + "label": "Workflow State", + "options": "Draft\nReview Pending\nApproval Pending\nPublish Approval Pending\nPublish Ready\nPublished\nRevoked", + "read_only": 1 + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.transmission", + "fieldname": "transmission", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Transmission", + "options": "Transmission", + "read_only": 1 + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.drive", + "fieldname": "drive", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Drive", + "options": "Drive", + "read_only": 1 + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.family_code", + "fieldname": "family_code", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Family Code", + "read_only": 1 + }, + { + "fieldname": "section_break_12", + "fieldtype": "Section Break", + "label": "Filter By" + }, + { + "fieldname": "config_kilometer", + "fieldtype": "Table", + "label": "Config Kilometer", + "options": "Kilometer Mapping_Items" + }, + { + "default": "All", + "fieldname": "sub_system_filter", + "fieldtype": "Select", + "label": "Sub System", + "options": "All" + }, + { + "fieldname": "column_break_14", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_16", + "fieldtype": "Section Break" + }, + { + "fieldname": "kilometer_filter", + "fieldtype": "Select", + "label": "Kilometer", + "options": "All" + }, + { + "fetch_from": "variant_mapping.vehicle", + "fieldname": "vehicle", + "fieldtype": "Data", + "label": "Vehicle", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-26 08:41:27.769730", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Kilometer Mapping", + "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": "_Author", + "share": 1, + "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "_Admin", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.py b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.py new file mode 100644 index 0000000..cb10f3b --- /dev/null +++ b/smart_service/transactions/doctype/kilometer_mapping/kilometer_mapping.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 KilometerMapping(Document): + pass diff --git a/smart_service/transactions/doctype/kilometer_mapping/test_kilometer_mapping.py b/smart_service/transactions/doctype/kilometer_mapping/test_kilometer_mapping.py new file mode 100644 index 0000000..5b513dd --- /dev/null +++ b/smart_service/transactions/doctype/kilometer_mapping/test_kilometer_mapping.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestKilometerMapping(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/kilometer_mapping_items/__init__.py b/smart_service/transactions/doctype/kilometer_mapping_items/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d5e95fafc3ab82c55ce9e1f6ced534efe8f9f2c GIT binary patch literal 213 zcmZ9GJqiLr425UGLWDhtg^uCsUwSjl#}snY^LB@H^JsUqCV0|dNU?)Qb7Iyl+m#UAWs=!8vFZj;X-ph;j;Yn G6stFow>+@` literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/kilometer_mapping_items.cpython-38.pyc b/smart_service/transactions/doctype/kilometer_mapping_items/__pycache__/kilometer_mapping_items.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86947e607cb553f0e96ff21a92a89134b17a607f GIT binary patch literal 453 zcmZ`#u};G<5Vez5L{&P%%-Vq%c7!@0A%tK-ELl#*K4?Uo1ly_985VwnjbF-&82E)w zoRd~mNSt)%d%nBpcfOlWCycD%@A8Yz&j5C9L|{(t4k>7+dC3gVIcFD4M>>9GI!68y z=aC-Wvf22Xy4Z|&$$70>gOyj|V%IoJF}ovNq_^UdyH_szg`k0_pF|5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x`0enx(7s(xBg zVnIP_d~s1(yn!K;&7X)EWMOe?a1wvNG`n zNKBlQR#Xg}W& zg+pcMsG92}>>>ay6asV;09DJj@_7vK)QW1Tyfd>yx;=cqW(!iw?hT0{ShIwq<25_H zLtQK~D%i{_VH{XA%d)^f%o(ArC|p@g`k0;?%26G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_oenx(7s(xBg zVnIP_d~s1(yn!K1KIx>h#3GLp)|n& literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/pro/__pycache__/pro.cpython-38.pyc b/smart_service/transactions/doctype/pro/__pycache__/pro.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22ef8163afa931917f47d37f06117305cb1b625c GIT binary patch literal 394 zcmZ8cy-ve05Vqr1SXDZ*vt}TM6(Q6Ci47qkmMkY@A8MsI4t7$hGduz>(br+j%ET)$ zaZW%~oOGY>^LM`w%jJTRUA*n}JG~!?9NLV?iaeeWSY~<69IrTMH_T>MyfQ10zlbWc zvwK#|KPih9e2~}P^bVWOq>n@6L{{W6CqPzl%cz)BaW;s%;BN~tNPtE=1Q-?o&fC6D zaSrg@>v~f5EF4jT5x%rqdxz>N=(a_OVGC#HKkW1o8?#m?(o_z!QxL?Qs literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/pro/__pycache__/test_pro.cpython-38.pyc b/smart_service/transactions/doctype/pro/__pycache__/test_pro.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76ff997221df9c865c689f6f5d84d4a00b70b97e GIT binary patch literal 381 zcmZ8cy-ve05I)C+T2=cB>>0qYB7`b2uvJLFlI3J#R}D(+U^|sM!z1trEPbV{OuPaU z=ca;+lkU6k)BQirW)mR0eBY`Mil0dw+K9xQJe&|{(5!|6Zb4_7zk%ikp4lreGR^KG zAAL~`EXst3#z@S`!<4{4!8GhUvVQzvLcH^Ck@H?4TGbfDeuCII-PMUt5nno051B3a zV;Zu9@1k~tZEG<2HJ)GW)#;P5 CtX#1G literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/pro/pro.js b/smart_service/transactions/doctype/pro/pro.js new file mode 100644 index 0000000..c802177 --- /dev/null +++ b/smart_service/transactions/doctype/pro/pro.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('Pro', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/pro/pro.json b/smart_service/transactions/doctype/pro/pro.json new file mode 100644 index 0000000..48ee3b3 --- /dev/null +++ b/smart_service/transactions/doctype/pro/pro.json @@ -0,0 +1,217 @@ +{ + "actions": [], + "allow_import": 1, + "autoname": "format:{variant_mapping}-{sub_systems}-{language}", + "creation": "2021-12-03 09:21:21.977317", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "variant_mapping", + "column_break_3", + "sub_systems", + "fuel", + "column_break_6", + "language", + "transmission", + "column_break_8", + "active_status", + "workflow_state", + "drive", + "column_break_10", + "vehicle", + "family_code", + "section_break_12", + "procedure", + "column_break_17", + "step", + "section_break_19", + "procedure_details", + "procedure_list_section", + "procedure_list" + ], + "fields": [ + { + "allow_in_quick_entry": 1, + "fieldname": "variant_mapping", + "fieldtype": "Link", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Variant Mapping", + "options": "Variant Mapping", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "sub_systems", + "fieldtype": "Link", + "label": "Sub Systems", + "options": "Sub Systems", + "reqd": 1, + "set_only_once": 1 + }, + { + "fetch_from": "variant_mapping.fuel", + "fieldname": "fuel", + "fieldtype": "Link", + "label": "Fuel", + "options": "Fuel", + "read_only": 1 + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1, + "set_only_once": 1 + }, + { + "fetch_from": "variant_mapping.transmission", + "fieldname": "transmission", + "fieldtype": "Link", + "label": "Transmission", + "options": "Transmission", + "read_only": 1 + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "allow_in_quick_entry": 1, + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Active Status", + "options": "Active\nInactive", + "reqd": 1 + }, + { + "default": "Draft", + "fieldname": "workflow_state", + "fieldtype": "Select", + "hidden": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Workflow State", + "options": "Draft\nReview Pending\nApproval Pending\nPublish Approval Pending\nPublish Ready\nPublished\nRevoked" + }, + { + "fetch_from": "variant_mapping.drive", + "fieldname": "drive", + "fieldtype": "Link", + "label": "Drive", + "options": "Drive", + "read_only": 1 + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.vehicle", + "fieldname": "vehicle", + "fieldtype": "Link", + "label": "Vehicle", + "options": "Vehicle", + "read_only": 1 + }, + { + "fetch_from": "variant_mapping.family_code", + "fieldname": "family_code", + "fieldtype": "Data", + "label": "Family Code", + "read_only": 1 + }, + { + "fieldname": "section_break_12", + "fieldtype": "Section Break" + }, + { + "allow_bulk_edit": 1, + "fieldname": "procedure_details", + "fieldtype": "Table", + "label": "Procedure_Details", + "options": "Procedure_Details" + }, + { + "fieldname": "procedure", + "fieldtype": "Select", + "label": "Procedure", + "options": "Overview\nInstall" + }, + { + "fieldname": "column_break_17", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_19", + "fieldtype": "Section Break" + }, + { + "fieldname": "step", + "fieldtype": "Select", + "label": "Step" + }, + { + "fieldname": "procedure_list_section", + "fieldtype": "Section Break", + "label": "Procedure List" + }, + { + "fieldname": "procedure_list", + "fieldtype": "Table", + "label": "Procedure List", + "options": "Procedure_Procedure List" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-03 12:34:46.398047", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Pro", + "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": "_Author", + "share": 1, + "write": 1 + } + ], + "search_fields": "active_status,workflow_state,fuel,transmission,drive,family_code,language", + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/pro/pro.py b/smart_service/transactions/doctype/pro/pro.py new file mode 100644 index 0000000..0e25923 --- /dev/null +++ b/smart_service/transactions/doctype/pro/pro.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 Pro(Document): + pass diff --git a/smart_service/transactions/doctype/pro/test_pro.py b/smart_service/transactions/doctype/pro/test_pro.py new file mode 100644 index 0000000..d0d4f02 --- /dev/null +++ b/smart_service/transactions/doctype/pro/test_pro.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestPro(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/procedure/__init__.py b/smart_service/transactions/doctype/procedure/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/procedure/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/procedure/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f54427b9b185b43efbe150504c8be3030adbec71 GIT binary patch literal 199 zcmWIL<>g`kg8hFcB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yYN> literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure/__pycache__/procedure.cpython-38.pyc b/smart_service/transactions/doctype/procedure/__pycache__/procedure.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8ae902e7f5e22ce4f39da964e0bf4d55e2691bf GIT binary patch literal 412 zcmZ8dy-ve05Vn(6geo1`Su+sBj!*|AHiU#&vYcG|P%Fi8u#-xi;Q@FJo`TmvUYU3W z#K1YBYQ;(S`99y@XFts6Ge-9Q^C~~+{EXz#CPWtG{**v7&1+_O#W}lSI??G1(<$=j zv`X~ko)yzCs$vBX*|k-@!KPF3;?Ove1-Z`&kX2kWYUb3OgyTDB73$vMZIOlyppgav z!VJJz-PbYB0iJqUkC`{-j%dsP-$tygLGkEh+ah?kf%A($cDBSutpp{!@J6~0Ji5(V z;Xl?n*?6hCwQao6R(0DJMY|KVkIHuIQd%6B`-C9l1CO##Mgb)$#=4{-!#}uKHPq}C Sk5NX6kX?=syqfMN=E*M@251}r literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure/__pycache__/test_procedure.cpython-38.pyc b/smart_service/transactions/doctype/procedure/__pycache__/test_procedure.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57c1f338a5b692f0a74b5d1a3ae33106d61ab110 GIT binary patch literal 399 zcmZ9Hy-ve05Xa9+fv9R;fjt8lc7!T1uvJLFlI3LVs~VIqY^PFZcmQ4lUV`_?%ET)m z2F^_>RZqIV?(*(IKxZ|LNKYQ2#B;iRjS_2|eh3r&0Et*V{UzG!ME zO{4v)CE5NhB|Wc*TRd%7Hsa|=;i3>EV$E5cCtY3mkew&ttSiOiLdO5LLljE;Wd#5L literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure/procedure.js b/smart_service/transactions/doctype/procedure/procedure.js new file mode 100644 index 0000000..9d47480 --- /dev/null +++ b/smart_service/transactions/doctype/procedure/procedure.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('Procedure', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/procedure/procedure.json b/smart_service/transactions/doctype/procedure/procedure.json new file mode 100644 index 0000000..535a053 --- /dev/null +++ b/smart_service/transactions/doctype/procedure/procedure.json @@ -0,0 +1,198 @@ +{ + "actions": [], + "allow_import": 1, + "autoname": "format:{variant_mapping}-{sub_systems}-{language}", + "creation": "2021-10-29 12:03:34.388506", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "variant_mapping", + "fuel", + "column_break_3", + "sub_systems", + "sub_systems_id", + "transmission", + "column_break_6", + "language", + "workflow_state", + "vehicle", + "drive", + "column_break_8", + "active_status", + "family_code", + "section_break_12", + "procedure_filter", + "section_break_18", + "procedure_details" + ], + "fields": [ + { + "allow_in_quick_entry": 1, + "fieldname": "variant_mapping", + "fieldtype": "Link", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Variant Mapping", + "options": "Variant Mapping", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.fuel", + "fieldname": "fuel", + "fieldtype": "Link", + "label": "Fuel", + "options": "Fuel", + "read_only": 1 + }, + { + "allow_in_quick_entry": 1, + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "in_preview": 1, + "in_standard_filter": 1, + "label": "Active Status", + "options": "Active\nInactive", + "reqd": 1 + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.transmission", + "fieldname": "transmission", + "fieldtype": "Link", + "label": "Transmission", + "options": "Transmission", + "read_only": 1 + }, + { + "default": "Draft", + "fieldname": "workflow_state", + "fieldtype": "Select", + "hidden": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Workflow State", + "options": "Draft\nReview Pending\nApproval Pending\nPublish Approval Pending\nPublish Ready\nPublished\nRevoked" + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.drive", + "fieldname": "drive", + "fieldtype": "Link", + "label": "Drive", + "options": "Drive", + "read_only": 1 + }, + { + "fetch_from": "variant_mapping.family_code", + "fieldname": "family_code", + "fieldtype": "Data", + "label": "Family Code", + "read_only": 1 + }, + { + "fieldname": "section_break_12", + "fieldtype": "Section Break" + }, + { + "fieldname": "sub_systems", + "fieldtype": "Link", + "label": "Sub Systems", + "options": "Sub Systems", + "reqd": 1, + "set_only_once": 1 + }, + { + "allow_bulk_edit": 1, + "fieldname": "procedure_details", + "fieldtype": "Table", + "label": "Procedure_Details", + "options": "Procedure_Details" + }, + { + "fetch_from": "variant_mapping.vehicle", + "fieldname": "vehicle", + "fieldtype": "Link", + "hidden": 1, + "label": "Vehicle", + "options": "Vehicle", + "read_only": 1 + }, + { + "fieldname": "section_break_18", + "fieldtype": "Section Break" + }, + { + "fieldname": "procedure_filter", + "fieldtype": "Select", + "label": "Procedure Name", + "options": "All" + }, + { + "fetch_from": "sub_systems.myid", + "fieldname": "sub_systems_id", + "fieldtype": "Data", + "hidden": 1, + "label": "Sub Systems ID", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-22 10:08:42.753823", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Procedure", + "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": "_Author", + "share": 1, + "write": 1 + } + ], + "search_fields": "active_status,workflow_state,fuel,transmission,drive,family_code,language", + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/procedure/procedure.py b/smart_service/transactions/doctype/procedure/procedure.py new file mode 100644 index 0000000..aadfa69 --- /dev/null +++ b/smart_service/transactions/doctype/procedure/procedure.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 Procedure(Document): + pass diff --git a/smart_service/transactions/doctype/procedure/test_procedure.py b/smart_service/transactions/doctype/procedure/test_procedure.py new file mode 100644 index 0000000..4beff7a --- /dev/null +++ b/smart_service/transactions/doctype/procedure/test_procedure.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestProcedure(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/procedure_details/__init__.py b/smart_service/transactions/doctype/procedure_details/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/procedure_details/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/procedure_details/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12f83c4d5ef123dd3a6a1638fa1c01db183d6e6a GIT binary patch literal 207 zcmWIL<>g`kf|GwHB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY<&{fzwFRQ{}mDmsxV##tc_Mt{f;$S1+r@sA`5bNNT8YK6{~r{IXh=M((xnH zG4hAFi1g%&Wz%=+Vj1s~rBPjtjaMPDYn;e}+@%D_3a%Lqa~h8N{Yz^U>dqo8(aW-O z7g^jV0FA5>pq~NMMt4<+Q-HfpR%7Lv**#h}z{kB>7?wzSz+XHfklP z;DoEC_2AI1OND=!x3Y0k`O-8_Xruh5MbZ9<)1$cmnY`WDn1lo|E+Rg`k0_N!}6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_benx(7s(xBg zVnIP_d~s1(yn!KWHa^HWN5Qtd#l`V7Pj E06w)nwg3PC literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_name/__pycache__/procedure_name.cpython-38.pyc b/smart_service/transactions/doctype/procedure_name/__pycache__/procedure_name.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa7283f15b287347d783b54646c9e8b20d1d5066 GIT binary patch literal 426 zcmZ8dy-ve05Vn(6L{&1fvt}S}cZ511u~kTjCCka!hgvC)gPjz0hL`CRAYLV6W8xK< zI44w8J?Xx?&-bJ6{E%fcM)v-(m!A~B0y(w`ktMmmAka+niWy#V&Tg5Gbo|D2jQlk& zBR#oi`ShE*SkC+8#;VR>-Ky|#Y@EoF+@}P{O0F3Va~h8N?9N$*x^uXa23L99Cjd32 z0R0TWSlv}2PXV4gS&fxFb7!<_fS(t!wg$zMlTCx*-4^DHKX& zjlvVwI$3+E+KsKf&{nm(21RoaHpn@lMYD4;NeD80M3C@-hXc+>DFtcAs-Shluei`P V^!#fdvxEwLay6cMJw0qpqhHZgZG8X$ literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_name/__pycache__/procedure_procedure_name.cpython-38.pyc b/smart_service/transactions/doctype/procedure_name/__pycache__/procedure_procedure_name.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d802d54bdb0f529ddd3e10c72c5d00b496e30074 GIT binary patch literal 456 zcmZ`#u};G<5Vez5L{&N>R@Mx}up`s~iLF9HELl#jeW;brb?XpzXf6%T zv$#tDDuMvr1i)C`mI0>#kF6{RWy{F|u|bh8>{}NNg1nV##tc_Muja<6tM1I>XA$GxU|RG9X@o ziE{#Ng~UmB{yyLT-A|_zMk3y}>Vw|*NDgI0WKJ4R$rxsM$t*88XE)3wM!Ya1kUxte zF{3*+8-G$1oAEBacDl7#H9CGA3MVor4H+3^1viY6IVC6E$*p%9P3sYMXrU~I#Y}W5 zKt&j!n*dm6+A`t{;Hg#R;Mp>NL{)q9^(vRnqI~qKt`UM?!}-MzJA1%NFC{sG3|9FD z0{Znz;~&;|RRyJ+m8*g@PB)txWxbnmk7E1qzbCIZUeI81xR8)ZdC%io$HRa*ZG>e` bP5QI>7}dw@HyTh%jxN0%4sbR8t(Ya>x5;{h literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_name/__pycache__/test_procedure_name.cpython-38.pyc b/smart_service/transactions/doctype/procedure_name/__pycache__/test_procedure_name.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e01cc55ff4d34a22aeb413f81a247e9fff19595f GIT binary patch literal 413 zcmZ8cJx{|h5IrXaqN*ME1MD5Zup?B7fh|G;mMkY@A8Js(u$@Yk*x=7}VMY9vtW5j` zCeBHL!b$i1p6||ncQc)if#daUtzP(i4`Mq;Easf5iUN@sDGAXZEfyD?%}o3;pi zg80y?VyLXa?(%azd_KxWU6Q=Bs%Z$FUE=Y{MjhT#r5BP5PP$TAkB;mz*Yr<$t173o z&+E!bQ)|C!NH*WbdOOmySNwZ-)U0g8KK8=b`8eK5%Mg literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_name/procedure_name.js b/smart_service/transactions/doctype/procedure_name/procedure_name.js new file mode 100644 index 0000000..3c8209e --- /dev/null +++ b/smart_service/transactions/doctype/procedure_name/procedure_name.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('Procedure Name', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/procedure_name/procedure_name.json b/smart_service/transactions/doctype/procedure_name/procedure_name.json new file mode 100644 index 0000000..08ca278 --- /dev/null +++ b/smart_service/transactions/doctype/procedure_name/procedure_name.json @@ -0,0 +1,51 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "format:{procedure_name}", + "creation": "2021-12-03 09:33:15.477982", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "procedure_name" + ], + "fields": [ + { + "allow_in_quick_entry": 1, + "fieldname": "procedure_name", + "fieldtype": "Data", + "in_list_view": 1, + "in_preview": 1, + "label": "Procedure Name", + "reqd": 1, + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-03 12:23:39.999238", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Procedure Name", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "search_fields": "procedure_name", + "sort_field": "procedure_name", + "sort_order": "ASC", + "title_field": "procedure_name" +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/procedure_name/procedure_name.py b/smart_service/transactions/doctype/procedure_name/procedure_name.py new file mode 100644 index 0000000..d69a7c5 --- /dev/null +++ b/smart_service/transactions/doctype/procedure_name/procedure_name.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 ProcedureName(Document): + pass diff --git a/smart_service/transactions/doctype/procedure_name/test_procedure_name.py b/smart_service/transactions/doctype/procedure_name/test_procedure_name.py new file mode 100644 index 0000000..3372115 --- /dev/null +++ b/smart_service/transactions/doctype/procedure_name/test_procedure_name.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestProcedureName(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/procedure_procedure_list/__init__.py b/smart_service/transactions/doctype/procedure_procedure_list/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/procedure_procedure_list/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/procedure_procedure_list/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6e701921471ed09c40bb8d9aa17cef63b447037 GIT binary patch literal 214 zcmWIL<>g`kf`|hv6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_@enx(7s(xBg zVnIP_d~s1(yn!K z1y4I|b$1aQn901nnaP{nPp1<`_VB)zpLBk7VBbar=H&jEf@YeR%CqjVjlZah&3Kz!TGbe=g6b~zjT4xY`;-E*oNGqSoSLKd=+;?;>a$wfX9njD|e7}i>H7K5(tZM}CmT-FZgH9f?QVT(Z z7v4x0z@u9h3jd(sWaXs_g{{2MR)tlKqTWi}WhH6+m&odsi%C`|%|{dx-s5hm!$Dp~ f`(T;T6aAmLuBxxu?K5Nv5p8lltbZ~7otQ=&{5E;^ literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.json b/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.json new file mode 100644 index 0000000..01a00e0 --- /dev/null +++ b/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.json @@ -0,0 +1,37 @@ +{ + "actions": [], + "creation": "2021-12-03 12:29:36.315973", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "procedure_name", + "active_status" + ], + "fields": [ + { + "fieldname": "procedure_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Procedure Name" + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Active Status", + "options": "Active\nInactive" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-12-03 12:29:36.315973", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Procedure_Procedure List", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.py b/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.py new file mode 100644 index 0000000..b92cbaf --- /dev/null +++ b/smart_service/transactions/doctype/procedure_procedure_list/procedure_procedure_list.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 Procedure_ProcedureList(Document): + pass diff --git a/smart_service/transactions/doctype/procedure_step_name/__init__.py b/smart_service/transactions/doctype/procedure_step_name/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/procedure_step_name/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/procedure_step_name/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7da2b85479dc1b69a8255da32311e821352db656 GIT binary patch literal 210 zcmZ9GJqiLb5QVc~A;KQSLZiKi{eq2H4>1|pfcar2yRt{|2zw=4k6>qI0)pa$_l9o< z9&@bgnaFBxqbl=J;#XCMT{cg07;zBuYCj4p>usICi zOLmG9Fj8+d{!t?3S?OehXK8{?Lqr)VXfz$=&V&)Xa>x?EdYb^2akx)6E|~6u+w#ye GTf6}@;5+UB literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_name.cpython-38.pyc b/smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_name.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ebe064e910eefc070d8a6b04649b346f41ec432 GIT binary patch literal 440 zcmZuty-ve05Vn(6L{&O4u(Ng`fgPa^NNg2S#ggUZ+J{;xj*ab9>WJWF`U*TsCL|_a zfr)cMMTI!&KHqnL`pys2>4cFLZ+r1h??)uZHX<@7_vZwPDPA+pE6&*+Q;AAnnM#qr zq*bCuOEw#SQWu-?F1t0d)z}0X6UWAh%*lODfUM$*(J-gsq&vNLMxtsRE(6+y(72eT zT?Wul2+&Ocv{7vx;~e0r74=ZrGj~GkdiZ)S*G6Oc=!CTh-fiLX>W5vdu#xMM3cmDO zxBwpAb|di*3r;j%$gnYuFO`vDXR)*gao|Z^uj#*BVRtSiF;S3D2r}ODc*@xzs-P>d dE@*N8M=o~tJ-=5BQAUL>yB?0d86P(0$v1foa@ha? literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_names.cpython-38.pyc b/smart_service/transactions/doctype/procedure_step_name/__pycache__/procedure_step_names.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdf61fa75eca9f4f5310f88f9fe5a71435aa799e GIT binary patch literal 444 zcmZuty-ve05Vn(6L{&N=cGeEWup`s~i24(eBb@)JKs;I6GnFXvRAM4zD06qBO-HhJS8y9@QPVpa?Wm;Nlg08ObUFL zmWdfH*=+nyU2Mj??7Gpdg*xb%I5bXVPL4SNu#y`_!<>eb?)c6(8cgd!E(5rQvVe=~$GN2n45TZB|tvYd>4s6qKKwo|Dyi2u@+k)M*4iNCF%ue?xxc*qnf>MB<9p^LVzsin(Z#4?)Vm+zp;%%-CA6DG?}b0OXDs9sEGn}V}PpB zZ5j9k;Hj16FxfDBNMH8w^(vN4h2p_VV-TEO!P)svo!(=umVyROxJp_N4(+N?_(ypw zYbTX2n%W87D8Du+%(ppkvX#+`kuhTeB+Pd)JE>A+_D@hi@ U#&3dwh0`v%7y@4&{CpH`0kMT|!Tg`k0-Nmli6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10NKO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVYy{3sUt9N|SOji!=1&<1_OzOXB183My}L*yQG?l;)(`f!y#Jh#3Ikp*A`I literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/publish/__pycache__/publish.cpython-38.pyc b/smart_service/transactions/doctype/publish/__pycache__/publish.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..897c2bb2a4c87e14bc3309973b0c1760462a14d0 GIT binary patch literal 898 zcmZ8fOK;RL5VjpB@orl{2rh6%f*k0=9id88;sRAA9tTUvN@KH|DzDn!LaW_V`$Kk* zT=_Y^A`VFW0#3{%tyt=4CjLBr%=gWF*x4Bq7>|E`&ws~+{6MfdIDkDc_XeCMnpQ;O zpH;MGlF?x;lF@6TBh4>~=7wEFl23_@4Ot~?qGO$0k_#$RooaDOq|o#o$wt56MskqR zAokm0UYo`jxUxAYfITp`4bBirHIb}8%|d!OKdMSMJIJCSlxp(YC>6#^)vcaaINw(4 zWS&<;4uc9|GV9pjo?vy*fDT|_V_=ZpgKW&g_}_2DOsXXPgYb@&DLzm zJUM2oNYgc4vIW~GpB^lujW}P>6<_c*rR3z1j~DC$W(x)?M+Y+fXl7+m8JWJ#ZGL{< zW=Ti}>LHyPuOR!t^idE9KvEwP)TPlO?rhokES3V74=rqrarRt};gD0stgLjPI&g&l z1hxWrgsr?Q)s-YzKz9!uVSJ0zZTJLwCMZwrU05%$*w+K+*m}Jv7)7$4Euf8%q$WU( zLgnoUVnNhy+GiRf=WRyisBF5qe{a6}8#&oqu>T2IUk*ZhoQ;NS?hm5uLIas<7Z~+T zX|ZsDAG@~ci)U{m9(|dW-k=tJ^8Gyi0Jsjbr-MEA%AH-W?z}c3wRPxT2A?8XR54uz|DrWp`Iz+Lw=jX#=7kj^r Fk{@JuVUqv= literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/publish/jsonData/procedurePublish.json b/smart_service/transactions/doctype/publish/jsonData/procedurePublish.json new file mode 100644 index 0000000..f79061b --- /dev/null +++ b/smart_service/transactions/doctype/publish/jsonData/procedurePublish.json @@ -0,0 +1 @@ +[{"Thar.AX-0311-Fuel Filter Element - Replace-en": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 2}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 3}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Description", "content": "
  • The fuel filter filters impurities that may be present in the fuel. The fuel system operates under high pressure which makes it absolutely essential for the fuel to be dust free and moisture free. The fuel filter also has the water separator which filters the moisture that may have crept into the fuel. The high pressure pump in the fuel system operates at high speeds and fine clearance which needs the diesel to be dust free and also be free of moisture at the same time. Since the diesel itself lubricates the PF Pump, If water content is present in fuel, the fuel looses its lubrication property and thus PF Pump and injectors will get damaged. Also the moisture content may lead to formation of rust on the pump elements. This makes it advisable not to use diesel with additives which may cause damage to the PF Pump.
", "file": "", "idx": 4}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
  1. Park the vehicle on level work bay
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "file": "", "idx": 5}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "idx": 6}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 7}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Warning", "content": "
  • Ensure that the fuel is drained from filter assembly before the fuel filter element is removed.
  • Do not hold fuel filter body part and avoid damage to the fuel filter body.
", "file": "", "idx": 8}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Description", "content": "
  • Press the lock and disconnect the electrical connector from the fuel filter.
", "file": "", "idx": 9}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 10}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "Description", "content": "
  • Disconnect the fuel supply pipe by disconnecting the quick coupler.
", "file": "", "idx": 11}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "Notice", "content": "
  • All are quick fix connectors, press gently and remove it carefully; avoid seal damages.
", "file": "", "idx": 12}, {"procedure_name": "Removal", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "idx": 13}, {"procedure_name": "Removal", "step_name": "Step-3", "content_type": "Description", "content": "
  • Disconnect the fuel return pipe by disconnecting the quick coupler.
", "file": "", "idx": 14}, {"procedure_name": "Removal", "step_name": "Step-3", "content_type": "Notice", "content": "
  • All are quick fix connectors, press gently and remove it carefully; avoid seal damages.
", "file": "", "idx": 15}, {"procedure_name": "Removal", "step_name": "Step-4", "content_type": "File", "content": "", "file": "", "idx": 16}, {"procedure_name": "Removal", "step_name": "Step-4", "content_type": "Description", "content": "
  • Using a 12 mm socket spanner, loosen and remove the fuel filter assembly mounting bolts.
", "file": "", "idx": 17}, {"procedure_name": "Removal", "step_name": "Step-5", "content_type": "File", "content": "", "file": "", "idx": 18}, {"procedure_name": "Removal", "step_name": "Step-5", "content_type": "File", "content": "", "file": "", "idx": 19}, {"procedure_name": "Removal", "step_name": "Step-5", "content_type": "Description", "content": "
  • Remove the filter from the vehicle.
", "file": "", "idx": 20}, {"procedure_name": "Removal", "step_name": "Step-6", "content_type": "File", "content": "", "file": "", "idx": 21}, {"procedure_name": "Removal", "step_name": "Step-6", "content_type": "Description", "content": "
  • Use two approx. 2\u0096 3 inches long size \u00a0M12 bolts and nuts to hold fuel filter \u00a0assembly in a bench vice as shown in illustration.
", "file": "", "idx": 22}, {"procedure_name": "Removal", "step_name": "Step-7", "content_type": "File", "content": "", "file": "", "idx": 23}, {"procedure_name": "Removal", "step_name": "Step-7", "content_type": "Description", "content": "
  • Using a 36 mm ring/socket spanner, rotate the fuel filter bottom cover in anticlockwise direction and loosen.
", "file": "", "idx": 24}, {"procedure_name": "Removal", "step_name": "Step-8", "content_type": "File", "content": "", "file": "", "idx": 25}, {"procedure_name": "Removal", "step_name": "Step-8", "content_type": "Description", "content": "
  • Remove the fuel filter body.
", "file": "", "idx": 26}, {"procedure_name": "Removal", "step_name": "Step-9", "content_type": "File", "content": "", "file": "", "idx": 27}, {"procedure_name": "Removal", "step_name": "Step-9", "content_type": "Description", "content": "
  • Take out the filter element from the fuel filter housing.
", "file": "", "idx": 28}, {"procedure_name": "Removal", "step_name": "Step-10", "content_type": "File", "content": "", "file": "", "idx": 29}, {"procedure_name": "Removal", "step_name": "Step-10", "content_type": "Description", "content": "
  • Remove the O-ring from the fuel filter housing.
", "file": "", "idx": 30}, {"procedure_name": "Installation", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 31}, {"procedure_name": "Installation", "step_name": "Step-1", "content_type": "Description", "content": "
  • Assemble the new O-ring back on to filter housing, which is supplied along with new filter element. Ensure little oil is smeared on to the surface of O-ring before assembly on to head.
", "file": "", "idx": 32}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 33}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Description", "content": "
  • Insert the filter element correctly into housing as shown in illustration.
", "file": "", "idx": 34}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Press the filter element by gentle push into the head.
", "file": "", "idx": 35}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "idx": 36}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "Description", "content": "
  • Refit the fuel filter element into the fuel filter housing.
", "file": "", "idx": 37}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "Caution", "content": "
  • Assemble filter element on to head in the direction shown. Ensure open end of filter element goes inside first.
", "file": "", "idx": 38}, {"procedure_name": "Installation", "step_name": "Step-4", "content_type": "File", "content": "", "file": "", "idx": 39}, {"procedure_name": "Installation", "step_name": "Step-4", "content_type": "Description", "content": "
  • Tighten the filter body using 36 mm size \u00a0socket spanner to specified torque value.
", "file": "", "idx": 40}, {"procedure_name": "Installation", "step_name": "Step-4", "content_type": "Caution", "content": "
  • Do not over tighten beyond 25\u00b15 Nm. This may cause damage to the bowl and Head.
  • Is it recommended to tight the fuel filter using torque wrench.
", "file": "", "idx": 41}, {"procedure_name": "Installation", "step_name": "Step-5", "content_type": "File", "content": "", "file": "", "idx": 42}, {"procedure_name": "Installation", "step_name": "Step-5", "content_type": "Description", "content": "
  • Remove the filter assembly from the wise.
", "file": "", "idx": 43}, {"procedure_name": "Installation", "step_name": "Step-6", "content_type": "File", "content": "", "file": "", "idx": 44}, {"procedure_name": "Installation", "step_name": "Step-6", "content_type": "Description", "content": "
  • Refit the fuel filter assembly and install the mounting bolts.
", "file": "", "idx": 45}, {"procedure_name": "Installation", "step_name": "Step-6", "content_type": "Torque Value", "content": "Torque : 25 \u00b1 5 Nm", "file": "", "idx": 46}, {"procedure_name": "Installation", "step_name": "Step-7", "content_type": "File", "content": "", "file": "", "idx": 47}, {"procedure_name": "Installation", "step_name": "Step-7", "content_type": "Description", "content": "
  • Reconnect the fuel filter fuel return line quick coupler.
", "file": "", "idx": 48}, {"procedure_name": "Installation", "step_name": "Step-7", "content_type": "Notice", "content": "
  • All are quick fix connectors, press gently and refit it carefully; avoid seal damages.
  • Check and ensure proper fitment of \u00a0fuel lines, any leakage can lead to fire.
", "file": "", "idx": 49}, {"procedure_name": "Installation", "step_name": "Step-8", "content_type": "File", "content": "", "file": "", "idx": 50}, {"procedure_name": "Installation", "step_name": "Step-8", "content_type": "Description", "content": "
  • Reconnect the fuel filter fuel supply pipe quick coupler.
", "file": "", "idx": 51}, {"procedure_name": "Installation", "step_name": "Step-8", "content_type": "Notice", "content": "
  • All are quick fix connectors, press gently and refit it carefully; avoid seal damages.
  • Check and ensure proper fitment of fuel lines, any leakage can lead to fire.
", "file": "", "idx": 52}, {"procedure_name": "Installation", "step_name": "Step-9", "content_type": "File", "content": "", "file": "", "idx": 53}, {"procedure_name": "Installation", "step_name": "Step-9", "content_type": "Description", "content": "
  • Reconnect the fuel filter electrical connector.
", "file": "", "idx": 54}, {"procedure_name": "Installation", "step_name": "Step-9", "content_type": "Caution", "content": "
  • Always use recommended filter element only.
  • Before removing the fuel filter, open the fuel tank cap to release the pressure from the tank and fuel lines.
  • Fuel filter cartridge needs to be replaced earlier in case of repeat water in fuel warning in cluster even after the water is drained from the system.
", "file": "", "idx": 55}]}, {"Thar.AX-0311-Water In Fuel Filter - Clean-en": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 2}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
  1. Park the vehicle on level work bay.
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "file": "", "idx": 3}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "idx": 4}, {"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 5}, {"procedure_name": "Sediment Draining", "step_name": "Step-1", "content_type": "Description", "content": "
Connect the transparent pipe to the drain \u00a0plug outlet of the fuel filter assembly
", "file": "", "idx": 6}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 7}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Description", "content": "
  • Using a Nose plier, rotate drain plug anticlockwise till the water starts flowing from the tube.
", "file": "", "idx": 8}, {"procedure_name": "Sediment Draining", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Drain plug requires hand tight only; do not use any tool and avoid over tightening.
  • Do not over tight the drain plug
", "file": "", "idx": 9}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "idx": 10}, {"procedure_name": "Sediment Draining", "step_name": "Step-3", "content_type": "Description", "content": "
  • Rotate drain plug in clockwise directio \u00a0to stop the flow as soon as water gets over and fuel flow starts. Tighten the drain plug.
", "file": "", "idx": 11}, {"procedure_name": "Sediment Draining", "step_name": "Step-4", "content_type": "Description", "content": "
  • Start the engine and check for any leaks.
", "file": "", "idx": 12}]}, {"Thar.AX-0311-Air Filter Element Replace-en": [{"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 1}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 2}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "File", "content": "", "file": "", "idx": 3}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Description", "content": "
  • The air cleaner element is Non woven +Pleated Media type (Dry Type). Filtration happens in two stages. Coarser particles are filtered in first stage by foam media and fine particles are filtered by Paper media in second stage. The dust and other fine particles which are sucked inside along with air gets trapped in the air cleaner while passing through the filter element.
", "file": "", "idx": 4}, {"procedure_name": "Overview", "step_name": "Overview", "content_type": "Notice", "content": "
  • Don\u2019t tap or hit the filter element.
", "file": "", "idx": 5}, {"procedure_name": "Overview", "step_name": "Preliminary Activities", "content_type": "Description", "content": "
  1. Park the vehicle on flat work bay.
  2. Open the bonnet and lock it in open position using bonnet stay rod.
", "file": "", "idx": 6}, {"procedure_name": "Overview", "step_name": "Tools Required", "content_type": "File", "content": "", "file": "", "idx": 7}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 8}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 9}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Caution", "content": "
  • The air filter element should be inspected and replaced from time to time, when driving under the following conditions:
    • Unpaved road.
    • Dusty air-polluted road.
    • Long-term driving in rainy weather.
", "file": "", "idx": 10}, {"procedure_name": "Removal", "step_name": "Step-1", "content_type": "Description", "content": "
  • Using 5 mm allen key, Unscrew air cleaner dirty duct mounting screws and lift the top housing.
", "file": "", "idx": 11}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 12}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 13}, {"procedure_name": "Removal", "step_name": "Step-2", "content_type": "Description", "content": "
  • Gently take out the air cleaner element from the housing.
", "file": "", "idx": 14}, {"procedure_name": "Installation", "step_name": "Step-1", "content_type": "File", "content": "", "file": "", "idx": 15}, {"procedure_name": "Installation", "step_name": "Step-1", "content_type": "Description", "content": "
  • Clean the inner side of the air cleaner housing using a lint free cloth.
", "file": "", "idx": 16}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "File", "content": "", "file": "", "idx": 17}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Description", "content": "
  • Refit the New air filter element gently inside the air cleaner housing.
", "file": "", "idx": 18}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
  • During Installation ensure to keep foam side of the filter element in the bottom side.
  • Ensure dust should not fall inside the clean hose area while fitting.
", "file": "", "idx": 19}, {"procedure_name": "Installation", "step_name": "Step-2", "content_type": "Caution", "content": "
  • Always use recommended genuine air filter element.
  • Do not tap or hit the filter element.
", "file": "", "idx": 20}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "File", "content": "", "file": "", "idx": 21}, {"procedure_name": "Installation", "step_name": "Step-3", "content_type": "Description", "content": "
  • Position the air cleaner assembly top cover and refit the mounting screws.
", "file": "", "idx": 22}]}] \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish/jsonData/vech.json b/smart_service/transactions/doctype/publish/jsonData/vech.json new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/publish/publish.js b/smart_service/transactions/doctype/publish/publish.js new file mode 100644 index 0000000..b1264b5 --- /dev/null +++ b/smart_service/transactions/doctype/publish/publish.js @@ -0,0 +1,21 @@ +// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Publish', { + refresh: function(frm) { + frm.set_indicator_formatter("publish_status", (doc) => { + return "green" + + }) + + } + + // function(frm) { + + // frm.set_indicator_formatter('publish_status', + // function(doc) { + // return (doc.publish_status=="To Publish" || doc.publish_status=="Published") ? "green" : "orange" + // }) + // } + +}); \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish/publish.json b/smart_service/transactions/doctype/publish/publish.json new file mode 100644 index 0000000..24ef43a --- /dev/null +++ b/smart_service/transactions/doctype/publish/publish.json @@ -0,0 +1,234 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format: {vehicle}-{language} planned on {creation}", + "creation": "2021-11-01 12:28:45.623316", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "language", + "planned_publish_date", + "actual_published_date", + "publish_type", + "publish_status", + "column_break_3", + "release_description", + "section_break_7", + "vehicle", + "vehicle_status", + "column_break_9", + "variant_mapping", + "variant_mapping_status", + "add_variant_mapping_to_publish", + "kilometer_mapping_section", + "kilometer_mapping", + "column_break_17", + "km_active_status", + "system_n_sub_systems", + "system_mapping", + "variant_mapping_assets", + "section_break_5", + "publish_documents", + "amended_from" + ], + "fields": [ + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "release_description", + "fieldtype": "Small Text", + "label": "Publish Description" + }, + { + "fieldname": "section_break_5", + "fieldtype": "Section Break" + }, + { + "fieldname": "planned_publish_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Planned Publish Date", + "reqd": 1 + }, + { + "fieldname": "actual_published_date", + "fieldtype": "Date", + "label": "Actual Published Date", + "read_only": 1 + }, + { + "fieldname": "publish_type", + "fieldtype": "Select", + "label": "Publish Type", + "options": "Internal\nGlobal", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "vehicle", + "fieldtype": "Link", + "label": "Vehicle", + "options": "Vehicle", + "set_only_once": 1 + }, + { + "depends_on": "eval:doc.vehicle", + "fieldname": "variant_mapping", + "fieldtype": "Link", + "label": "Variant Mapping", + "options": "Variant Mapping" + }, + { + "fieldname": "system_n_sub_systems", + "fieldtype": "Section Break", + "label": "System & Sub Systems" + }, + { + "fieldname": "system_mapping", + "fieldtype": "Table", + "label": "System Mapping", + "options": "Publish_Temp Doc", + "read_only": 1 + }, + { + "fieldname": "publish_documents", + "fieldtype": "Table", + "label": "Publish Documents", + "options": "Publish_Docs" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "label": "Language", + "options": "Custom Languages", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break", + "label": "Variant Mapping" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Publish", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "variant_mapping_assets", + "fieldtype": "Table", + "label": "Variant Mapping Assets", + "options": "Publish_Variant Mapping Assets", + "read_only": 1 + }, + { + "fieldname": "publish_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Publish Status", + "options": "To Publish\nPublished", + "read_only": 1 + }, + { + "fetch_from": "vehicle.active_status", + "fieldname": "vehicle_status", + "fieldtype": "Data", + "label": "Vehicle Status", + "read_only": 1 + }, + { + "fetch_from": "variant_mapping.active_status", + "fieldname": "variant_mapping_status", + "fieldtype": "Data", + "label": "Variant Mapping Status", + "read_only": 1 + }, + { + "depends_on": "eval:doc.variant_mapping !== undefined", + "fieldname": "add_variant_mapping_to_publish", + "fieldtype": "Button", + "label": "Add Variant Mapping to Publish" + }, + { + "fieldname": "kilometer_mapping_section", + "fieldtype": "Section Break", + "label": "Kilometer Mapping" + }, + { + "fieldname": "kilometer_mapping", + "fieldtype": "Link", + "label": "Kilometer Mapping", + "options": "Kilometer Mapping", + "read_only": 1 + }, + { + "fieldname": "column_break_17", + "fieldtype": "Column Break" + }, + { + "fetch_from": "kilometer_mapping.active_status", + "fieldname": "km_active_status", + "fieldtype": "Data", + "label": "Kilometer Mapping Status", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2021-12-26 10:33:26.673121", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Publish", + "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 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "_Publisher", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish/publish.py b/smart_service/transactions/doctype/publish/publish.py new file mode 100644 index 0000000..1334a3e --- /dev/null +++ b/smart_service/transactions/doctype/publish/publish.py @@ -0,0 +1,41 @@ +# 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 json +class Publish(Document): + pass + +list1= [] + +@frappe.whitelist() +def api_publish(): + listProc =[] + # docs_child = frappe.db.get_list('Publish_Docs', filters={'parent':args}, fields=['variant_mapping', 'system','sub_system','procedure_link','procedure_status']) + # for d in docs_child: + # if d['procedure_link']!= None: + # docs_children = frappe.db.get_list('Procedure_Details', filters = {'parent':d['procedure_link']}, fields=['procedure_name','step_name','content_type','content','file'], order_by='idx') + # dictProcedure = {d['procedure_link']:docs_children} + # listProc.append(dictProcedure) + # print(json.dumps(listProc)) + # with open("/home/frappe_srv_01/frappe-bench/apps/smart_service/smart_service/transactions/doctype/publish/jsonData/procedurePublish.json",'w') as f: + # json.dump(listProc,f) + + list1 = [] + docs_child = frappe.get_doc('Vehicle', 'Marazzo') + docs_child = frappe.db.get_list('Vehicle') + for d in docs_child: + docs = frappe.get_doc('Vehicle', 'Marazzo') + list1.append(docs) + + print(docs_child) + return docs_child + + # with open("/home/frappe_srv_01/frappe-bench/apps/smart_service/smart_service/transactions/doctype/publish/jsonData/vech.json",'w') as f: + # json.dump(docs_child,f) + # return json.dump(listProc) + + return docs_child +def print(inputText): + frappe.msgprint(str(inputText)) \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish/test_publish.py b/smart_service/transactions/doctype/publish/test_publish.py new file mode 100644 index 0000000..e671847 --- /dev/null +++ b/smart_service/transactions/doctype/publish/test_publish.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestPublish(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/publish_docs/__init__.py b/smart_service/transactions/doctype/publish_docs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/publish_docs/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/publish_docs/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7802bfbfe22b8a97c4280bd3b4329d5eeba865c1 GIT binary patch literal 202 zcmWIL<>g`kg1y=E6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x`1enx(7s(xBg zVnIP_d~s1(yn!K literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/publish_docs/__pycache__/publish_docs.cpython-38.pyc b/smart_service/transactions/doctype/publish_docs/__pycache__/publish_docs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c3947ca4d38902a60897dbe63bc9adae715dce7 GIT binary patch literal 421 zcmZ8du};G<5Vez5SXDZ*vt}TM9ia|LYzPUlWI4IEQ6l0b_>xMU;Xj!9B*MtVFEDXV zT2VOZp8b6H&dDt!1kW@g4PWcYd`c0|r zKh}9wqtad3)F@4(yKQS_yYodH|B$TR`k1Z{7BC_ZeB{CW@nj<--?qv~I(~=`U1QI$ T?`bEfFo=uknV0kZ#3cFwg`kg6#77i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j_KO;XkRX?pL zv7jI|zPP9?-oOyb(@jdvOU}>-N)+oC=Oz}F#22R)m1QQUqVYy{3sUt9N|SOji!go`u01ut0$I2VCd$eqTucxAHH5PYP7=z&K8jer4>}Z9JEDI{Q!f9bW zIJE0Z;veR%Xq=F~Y8zLmR{D*>!fd5^k_MFgm&nb=#v~(1aS=hn2Of?%80F-oAM2c^ bhrh9*Yv}paKSl`^`s8#x_iXyJF^#?f@#=3? literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.json b/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.json new file mode 100644 index 0000000..ae70746 --- /dev/null +++ b/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.json @@ -0,0 +1,115 @@ +{ + "actions": [], + "creation": "2021-11-25 17:15:47.559805", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "systems", + "sub_systems", + "active_status", + "column_break_4", + "symptom", + "component", + "estimated_time", + "rts", + "mat", + "cover_image", + "procedure_section", + "procedure", + "procedure_status" + ], + "fields": [ + { + "fieldname": "systems", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Systems", + "options": "Systems", + "reqd": 1 + }, + { + "fieldname": "sub_systems", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Sub Systems", + "options": "Sub Systems", + "reqd": 1 + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Active Status", + "options": "Active\nInactive", + "reqd": 1 + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "symptom", + "fieldtype": "Check", + "label": "Symptom" + }, + { + "default": "0", + "fieldname": "component", + "fieldtype": "Check", + "label": "Component" + }, + { + "fieldname": "estimated_time", + "fieldtype": "Duration", + "label": "Estimated Time" + }, + { + "fieldname": "rts", + "fieldtype": "Data", + "label": "RTS" + }, + { + "fieldname": "mat", + "fieldtype": "Data", + "label": "MAT" + }, + { + "fieldname": "cover_image", + "fieldtype": "Attach", + "label": "Cover Image" + }, + { + "fieldname": "procedure_section", + "fieldtype": "Section Break", + "label": "Procedure" + }, + { + "fieldname": "procedure", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Procedure", + "options": "Procedure" + }, + { + "fieldname": "procedure_status", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Procedure Status", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-11-25 17:15:47.559805", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Publish_Temp Doc", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.py b/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.py new file mode 100644 index 0000000..53a4c90 --- /dev/null +++ b/smart_service/transactions/doctype/publish_temp_doc/publish_temp_doc.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 Publish_TempDoc(Document): + pass diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/__init__.py b/smart_service/transactions/doctype/publish_variant_mapping_assets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/publish_variant_mapping_assets/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a05cfb2e702e0d52e60f8a21d3c70e68c46c2725 GIT binary patch literal 220 zcmZ9GO$x#=5QS54Awm!0LZf>TPauf69;WGN1I-Vaw9uue5m(;Ftw(U@$^-<(2k#Bv z3_RvgmJ^Y5+g&ivM~+_=2{y?*N>Piwm=@cs2zmXD*I72skUR$To`6FSi{*!A6$iawud;eV9AbOp6xtmIiJrM+1vGt_@wi_2irCwupq~M3X(})GR;%Y**TM*^q-jY z6@Tp!6R)uGiKl uiM>qpCo=(S%;_c!^ywm&P$$E^4%qel3Kr$KREMccihBA6$GE(e5 zc#M)z2A6C$`lKGVNIkAcKx9sd69UDOK(b*XY9{v<>VZ3~YC)Oqy}} zK#qm54p7-fr|J)LRu~ki)1^T!%hatZ#jC+*)BA*?HwvP2${no&|M%=wD;tu}Eq@MQ m#6ibrQ4-fiJ1>#M{w61ajQNh=z52?Jw(((qhNF!iq3|1RIDOCn literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.js b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.js new file mode 100644 index 0000000..5e07120 --- /dev/null +++ b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.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('Publish_Variant Mapping Assets', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.json b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.json new file mode 100644 index 0000000..616935c --- /dev/null +++ b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.json @@ -0,0 +1,51 @@ +{ + "actions": [], + "creation": "2021-12-01 16:12:55.467822", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "category", + "language", + "attach_file", + "active_status" + ], + "fields": [ + { + "fieldname": "category", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Category" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages" + }, + { + "fieldname": "attach_file", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "Attach File" + }, + { + "fieldname": "active_status", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Active Status" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-12-01 16:13:18.626735", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Publish_Variant Mapping Assets", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.py b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.py new file mode 100644 index 0000000..17e4ec8 --- /dev/null +++ b/smart_service/transactions/doctype/publish_variant_mapping_assets/publish_variant_mapping_assets.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 Publish_VariantMappingAssets(Document): + pass diff --git a/smart_service/transactions/doctype/publish_variant_mapping_assets/test_publish_variant_mapping_assets.py b/smart_service/transactions/doctype/publish_variant_mapping_assets/test_publish_variant_mapping_assets.py new file mode 100644 index 0000000..3dc505c --- /dev/null +++ b/smart_service/transactions/doctype/publish_variant_mapping_assets/test_publish_variant_mapping_assets.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestPublish_VariantMappingAssets(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/system_mapping/__init__.py b/smart_service/transactions/doctype/system_mapping/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/system_mapping/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/system_mapping/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9972af4dac622513a9c3058c6b010334941cc17 GIT binary patch literal 204 zcmWIL<>g`k0lIYq;;_lhPbtkwwF5cjGY~TX0MAxA AmjD0& literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/system_mapping/__pycache__/system_mapping.cpython-38.pyc b/smart_service/transactions/doctype/system_mapping/__pycache__/system_mapping.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0d0f5fc4de626c623f9cd70e7838b97b4367099 GIT binary patch literal 426 zcmZ8du};G<5Vez5L{&1v%-Vqjc7!@0F~L%?WH}l8ppjxH*iKPq_yB%`Uy9h6_yr^+ z&IyRBC*Ap;@7>e0Z?kN{D2~2g#XFrJ0qn+%z>3lxQ&CLunrU8g&aRk>RQ$qJjQlw+ zBQ;yI<@}RaY{`e@vXPxe<7K$m4NhQ1=~61lO0F0!b6SpuY~4GL`dYMYWgc#p@sI!* zp%GwM0O&?_b?8%o$4=DKDezjxkDp21r1!`w6Go= z+HECq4|yw$6Vg|WafNE6?^~jb#z0Tb_F&%jHYN+fhKr~qe8k}ahm)0@yknh{-1sXt Xutv_m_o+*0FeK;GQ!nO!ifQx%UR-T_ literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/system_mapping/__pycache__/test_system_mapping.cpython-38.pyc b/smart_service/transactions/doctype/system_mapping/__pycache__/test_system_mapping.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cccfb4c14e51a5632260d886ef8f97cfc0a25ce8 GIT binary patch literal 413 zcmZ8cy-ve05I!dbqN*KO7}+y`VMnME0~1{eOO}&~4GoH&U^|r}vB3lI8Z10eRwiDd z5)$X6g2GAn-F?0ve|IyTj)Cmp>s7o{{0L;*Mnq=h?vOx&WF=&92{MxL3&>c(1AC6M zNU{Z_qfhFAc^+`v7?Bydn-D0-n1szl)a_p@=NGN>N?(b(F3kNrjk^TV2(1viF`}+y zQ-*wk_}GYYsJwyQrFA{5pZK!Uir-mUq0reCo}6yj(XBH1l2gHPr-k+ClwB3M`p3K# z#);e)m2q5Fxo>M~>4l*llyOg5@$cJl-P(wB?1lS6lCYkqah5cu@L?oN!jTt(J`Nqf Sx`!-`cFEar=K0RgqUamW&uV1= literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/system_mapping/system_mapping.js b/smart_service/transactions/doctype/system_mapping/system_mapping.js new file mode 100644 index 0000000..6450b6f --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping/system_mapping.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('System Mapping', { + // refresh: function(frm) { + + // } +}); diff --git a/smart_service/transactions/doctype/system_mapping/system_mapping.json b/smart_service/transactions/doctype/system_mapping/system_mapping.json new file mode 100644 index 0000000..d7f531a --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping/system_mapping.json @@ -0,0 +1,206 @@ +{ + "actions": [], + "allow_import": 1, + "autoname": "format:{variant_mapping}-{language}-SM", + "creation": "2021-10-29 11:19:55.357816", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "variant_mapping", + "language", + "column_break_3", + "fuel", + "workflow_state", + "active_status", + "column_break_6", + "transmission", + "column_break_8", + "drive", + "column_break_10", + "family_code", + "kilometer_mapping_section", + "kilometer_mapping", + "column_break_15", + "km_active_status", + "config_system_level_section", + "system_filter", + "system_sub_systems", + "systems_assets" + ], + "fields": [ + { + "fieldname": "variant_mapping", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Variant Mapping", + "options": "Variant Mapping", + "reqd": 1 + }, + { + "default": "Active", + "fieldname": "active_status", + "fieldtype": "Select", + "hidden": 1, + "label": "Active Status", + "options": "Active\nInactive" + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.fuel", + "fieldname": "fuel", + "fieldtype": "Link", + "label": "Fuel", + "options": "Fuel", + "read_only": 1 + }, + { + "default": "Draft", + "fieldname": "workflow_state", + "fieldtype": "Select", + "hidden": 1, + "label": "Workflow State", + "options": "Draft\nReview Pending\nApproval Pending\nPublish Approval Pending\nPublish Ready\nPublished\nRevoked", + "read_only": 1 + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.transmission", + "fieldname": "transmission", + "fieldtype": "Link", + "label": "Transmission", + "options": "Transmission", + "read_only": 1 + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.drive", + "fieldname": "drive", + "fieldtype": "Link", + "label": "Drive", + "options": "Drive", + "read_only": 1 + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "fetch_from": "variant_mapping.family_code", + "fieldname": "family_code", + "fieldtype": "Data", + "label": "Family Code", + "read_only": 1 + }, + { + "fieldname": "config_system_level_section", + "fieldtype": "Section Break", + "label": "Config. System Level" + }, + { + "fieldname": "system_sub_systems", + "fieldtype": "Table", + "label": "System & Sub Systems", + "options": "System Mapping_Sub System" + }, + { + "fieldname": "systems_assets", + "fieldtype": "Table", + "label": "Systems Assets", + "options": "System Mapping_System Assets" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "system_filter", + "fieldtype": "Select", + "label": "System Filter", + "options": "All" + }, + { + "fieldname": "kilometer_mapping_section", + "fieldtype": "Section Break", + "label": "Kilometer Mapping" + }, + { + "fieldname": "kilometer_mapping", + "fieldtype": "Link", + "label": "Kilometer Mapping", + "options": "Kilometer Mapping", + "read_only": 1 + }, + { + "fieldname": "column_break_15", + "fieldtype": "Column Break" + }, + { + "fetch_from": "kilometer_mapping.active_status", + "fieldname": "km_active_status", + "fieldtype": "Data", + "label": "Status", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-12-26 09:13:19.795532", + "modified_by": "Administrator", + "module": "Transactions", + "name": "System Mapping", + "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": "_Author", + "share": 1, + "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "_Admin", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/system_mapping/system_mapping.py b/smart_service/transactions/doctype/system_mapping/system_mapping.py new file mode 100644 index 0000000..72200c5 --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping/system_mapping.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 SystemMapping(Document): + pass diff --git a/smart_service/transactions/doctype/system_mapping/test_system_mapping.py b/smart_service/transactions/doctype/system_mapping/test_system_mapping.py new file mode 100644 index 0000000..97be309 --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping/test_system_mapping.py @@ -0,0 +1,8 @@ +# Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and Contributors +# See license.txt + +# import frappe +import unittest + +class TestSystemMapping(unittest.TestCase): + pass diff --git a/smart_service/transactions/doctype/system_mapping_sub_system/__init__.py b/smart_service/transactions/doctype/system_mapping_sub_system/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/system_mapping_sub_system/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/system_mapping_sub_system/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd939929b4ac9182f77ea1f7c104d1fd25422ad2 GIT binary patch literal 215 zcmWIL<>g`k0-e7T5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_benx(7s(xBg zVnIP_d~s1(yn!K<1_OzOXB183My}L*yQG?l;)(`fn4<& Gh#3HuU7?d0+a# zZ4!g`k0_DFG5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x`0enx(7s(xBg zVnIP_d~s1(yn!KWHa^HWN5Qtdzv I`wYYk0BgZNr~m)} literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/system_mapping_system_assets/__pycache__/system_mapping_system_assets.cpython-38.pyc b/smart_service/transactions/doctype/system_mapping_system_assets/__pycache__/system_mapping_system_assets.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f93bff4f27b444da78c8156686de3cb3283ff3b GIT binary patch literal 467 zcmaJ-u}Z{15Zz7gFdVtk#!9eCVWPdr34)b2hfSJc-CeyvHilp*^cTCv39QI5rl48Q6{BWO%|U;#?$Bv-Et;mN9$-Wl zh}z*z67~^5C5#5>7XYSKZRztE;IS3u$hENqqBQU^E9B{!pZ4`j_-6O zHyII_p%K;rYP&6@{)3zq6$j0 la{Hsql=jkPN>2^nXMNRB^SjrWMMU(`+4v3T^Ph=v@C~Qqe*ypi literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.json b/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.json new file mode 100644 index 0000000..671951a --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.json @@ -0,0 +1,64 @@ +{ + "actions": [], + "creation": "2021-10-29 11:23:46.200189", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "systems", + "language", + "system_asset", + "active_status", + "remarks" + ], + "fields": [ + { + "fieldname": "systems", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Systems", + "options": "Systems" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages", + "reqd": 1 + }, + { + "fieldname": "system_asset", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "System Asset" + }, + { + "fieldname": "remarks", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Remarks" + }, + { + "default": "Active", + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Active Status", + "options": "Active\nIn Active", + "reqd": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-12-22 10:02:37.139444", + "modified_by": "Administrator", + "module": "Transactions", + "name": "System Mapping_System Assets", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.py b/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.py new file mode 100644 index 0000000..cb409af --- /dev/null +++ b/smart_service/transactions/doctype/system_mapping_system_assets/system_mapping_system_assets.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 SystemMapping_SystemAssets(Document): + pass diff --git a/smart_service/transactions/doctype/variant_mapping/__init__.py b/smart_service/transactions/doctype/variant_mapping/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/variant_mapping/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/variant_mapping/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..807cc41ee2547eab3eb141421ff11559ba62255a GIT binary patch literal 205 zcmWIL<>g`kg0R065<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_fenx(7s(xBg zVnIP_d~s1(yn!KW;20zpTvn=4QF(OlPHzv@KG6kE7s5`pT&d;UIrSUhiu5UDz$jDv_hk^EuNik*vW%7*+Njk30F$%(P`V}ncidG zO536{cG-wdE8|7D*bRzgh3RqxMK)9tT&B33jE8G(D{lNXZ`;Z|-W2JW z0T`|oz_;A>#pMl1GUQ9^;UJ)EBXvXgsd#Fk;hF{iop z;FRqvq4t=!+&C_L)fmTQBmB@R)<g`kg1P@EB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY>%t zSZNTTp8=R!cU7oUfX7Z&W9N;z1Ckoxs}rl*pjbK*Lhx=4C#O4he2-SG1U0fT`$T?O8i4A|^ Y!qhPH>wK&dYV^t3_|Ws|k762a0oQVDtN;K2 literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/variant_mapping_assets/__pycache__/variant_mapping_assets.cpython-38.pyc b/smart_service/transactions/doctype/variant_mapping_assets/__pycache__/variant_mapping_assets.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f000383ca4d3f33b9f284513e4dbf59848b6037 GIT binary patch literal 450 zcmZ`#O-sZu5KY=$EKB#ecdtFz=v`z5!IL709(oyK5^bSLYmyfBtl&=(|5C4d@h^CC z(yq7&4$NfUd_3OdX1QDtwDRhef8hHbz^=^@tkK;*21z8XiKYdm@-rHKNnXco7P_MiH#hU5Y`Gf=YtR6qlo6b<1tVjlbY+TbTzqbxwJA znZ-i_V7OKQ!va7zva3U$0z7uSo;q*D?jhwEzFt__XvOX=GAVGjhr^>SI=E9tlnfh= zInAvHr)*yd^#^&&jpM>sjd4si!f#r|`bi+@twKI3{HL6^8ylmfAj?G<5<22=&}x#F g<1MPrk$(Iw8>YsY-&>|E!N!mrPp6;Ee;Cu~8`G(F{r~^~ literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.json b/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.json new file mode 100644 index 0000000..840bcc4 --- /dev/null +++ b/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.json @@ -0,0 +1,54 @@ +{ + "actions": [], + "creation": "2021-11-14 17:52:52.885219", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "category", + "language", + "attach_file", + "active_status" + ], + "fields": [ + { + "fieldname": "category", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Category", + "options": "Tekalert\nTSB\nFSA\nTechnical Manual" + }, + { + "fieldname": "language", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Language", + "options": "Custom Languages" + }, + { + "fieldname": "attach_file", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "Attach File" + }, + { + "fieldname": "active_status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Active Status", + "options": "Active\nInactive" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2021-12-01 16:04:47.259693", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Variant Mapping_Assets", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.py b/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.py new file mode 100644 index 0000000..bfb4e21 --- /dev/null +++ b/smart_service/transactions/doctype/variant_mapping_assets/variant_mapping_assets.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 VariantMapping_Assets(Document): + pass diff --git a/smart_service/transactions/doctype/variant_mapping_sk/__init__.py b/smart_service/transactions/doctype/variant_mapping_sk/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_service/transactions/doctype/variant_mapping_sk/__pycache__/__init__.cpython-38.pyc b/smart_service/transactions/doctype/variant_mapping_sk/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cc058cb43899e8d1acdc76bdef7313f45ef970f GIT binary patch literal 208 zcmWIL<>g`kg4n+k5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_%enx(7s(xBg zVnIP_d~s1(yn!K&M4u=4F<|$LkeT-r}&y%}*)KNwotx=Q9v9 F008`vJ8u90 literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/variant_mapping_sk/__pycache__/variant_mapping_sk.cpython-38.pyc b/smart_service/transactions/doctype/variant_mapping_sk/__pycache__/variant_mapping_sk.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1fca81ae224f4a89dc6d9d5a38b83ab71997532 GIT binary patch literal 438 zcmZut%}T^D5Kh`%EKB#`!MoQUZ1gU&2f>5rWzj=HhL}XR*rYYd7WU*pAHdh}m3k69 z?JEd^lXk^L9GJ;`^YigduBOuoLA&{S%I)&8-KgY+DNT2YJhlSum$7_tN#U2;5}d@}xFOrvkm8FD%R literal 0 HcmV?d00001 diff --git a/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.json b/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.json new file mode 100644 index 0000000..1d4cdfb --- /dev/null +++ b/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.json @@ -0,0 +1,31 @@ +{ + "actions": [], + "creation": "2021-10-29 10:28:24.562054", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "service_kilometers" + ], + "fields": [ + { + "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:43:17.807902", + "modified_by": "Administrator", + "module": "Transactions", + "name": "Variant Mapping_SK", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.py b/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_sk.py new file mode 100644 index 0000000..09304d5 --- /dev/null +++ b/smart_service/transactions/doctype/variant_mapping_sk/variant_mapping_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 VariantMapping_SK(Document): + pass diff --git a/smart_service/www/__pycache__/login.cpython-38.pyc b/smart_service/www/__pycache__/login.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b59d8e7024a16dfb9d7a1a05d503014ef08c46a0 GIT binary patch literal 4147 zcmbVPNpl;=6`t-H3)wE31-IE;#@>MSmo}Ag8|Oq>GQKN-9;#dp!dRlvJ*if$GNV*RQwtzPI2>rBXED z^Y4Q{`=8Ak#y@c|{jp&16KKgVh+!~;kj7n}PlP|kvkhek_Rosf^<-%$-4r|e@JFDq@I2X;k^O|HNG}l9~UuGp%Jtb_0)xI`Ph+CiH z&9XVoyE4U_XA7Elb&9vhmNf6$6mOZWXx{ZH-YQ$uyc_(&=q6hq6ZaOUqjz|N-#Q^< z)EnI~8W&!mjvGYPdYzydGwy|f**z&sfr^3Ft9Z|wCFF4Vl>ED*dYy>6UHPcMZ_5f8fZL)`k2 z-|<^q=<$P}ezL=*3_7g@#!Gk=#+%}}D>?JJev%x;g27A$XW&&G??6T&FsdL1ZxmiL zj=H{_h#bTbhjlH!+XQT#eab*N&_05e%u&OTMw_&0+ZB_NCt%EQYpPh(JR4k`45EI1H-GZJoHuO3=CG-GFk@w7Ps)U znNbb;+0h)}raY!&0yAYjlkzHK+Wo6EM)RyX22`!$%G%WYEX@BM<`>xPm;klN=1y>r z*)4-Z$nva5(+26=Y*&;;r+tB+O(g+YEyhfb#~*9HYcWL_{O@lGc3uS}wm`N_MZRgnK4jz(7o zC2fW8Z-K7Ce{OI0OB3wgma)qHyvGySFMrDS5^$vY6F_(0+Vs0!mD8x+?HBd$20~Kh zG`3Yv1~TMorYquS0pe4OB>mcCn+etgV|=i1hXz%2h~~XpU)>qrs{5h5_tksD`=G=eXdw(6mOftGggdwn##J<# zxP`-VGIdo|37OvorKPb><$f0VL8van9`RB78VH{d2E8cW3jh?IUbM%BYd_LMwf?3c zMq5vV!9i#u)z8)8o^?fIp-S2eUg+=fuyIw{sZ|lWply{G{3*g)S-xl`$^?U`e8Q6? zh&#&Cf!t!g^i@G0BagdW%)qNuZa?&4!R*9S;O@P2fk~-Ex)uW%)O+<2I>-Umq?jZDXy?Vx=PD*0VoPzhtU5zb`jUoB5SB9Bs4L6Og>24&~&~;HA<+`2F8F$!sw}m)e%HYb6eT1I0gegCn}#M z0KDQ69{L;X-gf+4>X%qv zO;-GF>H<%`>jlInp7`x&PboYL@>3`O_Pd_!7UTVWNCn;xKX_kXpg{$yOhe$UI+%Z@ zgLEmZY))MTE%HWcJF`LuW}z}6W1~$O8JPnEDkjQIs5~ImB|nBbz>+y;oe=1ACs3KO z{Aq>}K(Nua+j-Bynht5ND0Kxlq73StcBNfqg|W$shm@60^?wpTdU?A)lipdEy>}tX z?t=g1`IlX&b(8+gFFO#40#<*VhSmQ3gz->kuw5*cgE8bQSXDca5>f$pL@xpN2lucr zfQt{|UH#II4tl!UXb`u+cyg!<>&A?>u*x<4<^dPz1>ym8Sa2uZxWha@@s9YOu6}i> z6nAjCfML;NK~pL-37EjYW{{0^jUT0zxWLj_+{f-m*u4*3gSuG;(JvNX;KXbGo2dk$ ztc6-2lc3)lbOj<9G+HD@Dt-?f2$_>={#{k{y#1c+3GR6U9WQ-ZImP6LP89Ck^k_r> z!AN5`#(>njHOTTXbZ4^^`s#m(ev`7=N!&^EMk(75leAWX`(eg`gv47yC$VIM#Z63h z8|TvX`H{{dYVq9tCXY)~(ek-DEDt^XD4m +
+ + +
+ +
+ +
+ + + + + + {{ _('Show') }} +
+
+
+ +
+
+
+ + +
+
+ + +
+ +
+ + + {% if ldap_settings and ldap_settings.enabled %} + + {% endif %} +
+{% endmacro %} + +{% block head_include %} + +{% endblock %} + +{% macro logo_section() %} +
+ +

{{ _('Login to Smart Service CMS ') }}

+
+{% endmacro %} + +{% block page_content %} + +
+ + + + {%- if social_login -%} + + {%- endif -%} + + +
+ +
+
+{% endblock %} + +{% block script %} + +{% endblock %} + +{% block sidebar %}{% endblock %} diff --git a/smart_service/www/login.py b/smart_service/www/login.py new file mode 100644 index 0000000..1652cae --- /dev/null +++ b/smart_service/www/login.py @@ -0,0 +1,121 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt + +from __future__ import unicode_literals +import frappe +import frappe.utils +from frappe.utils.oauth import get_oauth2_authorize_url, get_oauth_keys, login_via_oauth2, login_via_oauth2_id_token, login_oauth_user as _login_oauth_user, redirect_post_login +import json +from frappe import _ +from frappe.auth import LoginManager +from frappe.integrations.doctype.ldap_settings.ldap_settings import LDAPSettings +from frappe.utils.password import get_decrypted_password +from frappe.utils.html_utils import get_icon_html +from frappe.integrations.oauth2_logins import decoder_compat +from frappe.website.utils import get_home_page +import cgi +form = cgi.FieldStorage() + + +no_cache = True + +def get_context(context): + redirect_to = frappe.local.request.args.get("redirect-to") + + if frappe.session.user != "Guest": + if not redirect_to: + if frappe.session.data.user_type=="Website User": + redirect_to = get_home_page() + else: + redirect_to = "/app" + + if redirect_to != 'login': + frappe.local.flags.redirect_location = redirect_to + raise frappe.Redirect + + # get settings from site config + context.no_header = True + context.for_test = 'login.html' + context["title"] = "Login" + context["provider_logins"] = [] + context["disable_signup"] = frappe.utils.cint(frappe.db.get_single_value("Website Settings", "disable_signup")) + context["logo"] = (frappe.db.get_single_value('Website Settings', 'app_logo') or + frappe.get_hooks("app_logo_url")[-1]) + context["app_name"] = (frappe.db.get_single_value('Website Settings', 'app_name') or + frappe.get_system_settings("app_name") or _("Frappe")) + providers = [i.name for i in frappe.get_all("Social Login Key", filters={"enable_social_login":1}, order_by="name")] + for provider in providers: + client_id, base_url = frappe.get_value("Social Login Key", provider, ["client_id", "base_url"]) + client_secret = get_decrypted_password("Social Login Key", provider, "client_secret") + provider_name = frappe.get_value("Social Login Key", provider, "provider_name") + + icon = None + icon_url = frappe.get_value("Social Login Key", provider, "icon") + if icon_url: + if provider_name != "Custom": + icon = "{1}".format(icon_url, provider_name) + else: + icon = get_icon_html(icon_url, small=True) + + if (get_oauth_keys(provider) and client_secret and client_id and base_url): + context.provider_logins.append({ + "name": provider, + "provider_name": provider_name, + "auth_url": get_oauth2_authorize_url(provider, redirect_to), + "icon": icon + }) + context["social_login"] = True + ldap_settings = LDAPSettings.get_ldap_client_settings() + context["ldap_settings"] = ldap_settings + + login_label = [_("Email")] + + if frappe.utils.cint(frappe.get_system_settings("allow_login_using_mobile_number")): + login_label.append(_("Mobile")) + + if frappe.utils.cint(frappe.get_system_settings("allow_login_using_user_name")): + login_label.append(_("Username")) + + context['login_label'] = ' {0} '.format(_('or')).join(login_label) + + return context + +@frappe.whitelist(allow_guest=True) +def login_via_google(code, state): + login_via_oauth2("google", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_github(code, state): + login_via_oauth2("github", code, state) + +@frappe.whitelist(allow_guest=True) +def login_via_facebook(code, state): + login_via_oauth2("facebook", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_frappe(code, state): + login_via_oauth2("frappe", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_office365(code, state): + login_via_oauth2_id_token("office_365", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_token(login_token): + sid = frappe.cache().get_value("login_token:{0}".format(login_token), expires=True) + if not sid: + frappe.respond_as_web_page(_("Invalid Request"), _("Invalid Login Token"), http_status_code=417) + return + + frappe.local.form_dict.sid = sid + frappe.local.login_manager = LoginManager() + + redirect_post_login(desk_user = frappe.db.get_value("User", frappe.session.user, "user_type")=="System User") + + +Temp = form.getvalue('password') +frappe.msgprint(str(Temp)) + +# f = open("/home/frappe_srv_01/frappe-bench/apps/smart_service/smart_service/www/demofile2.txt", "w") +# f.write(Temp) +# f.close()