├── license.txt ├── requirements.txt ├── servicems ├── patches.txt ├── config │ ├── __init__.py │ ├── desktop.py │ └── docs.py ├── servicems │ └── __init__.py ├── templates │ ├── __init__.py │ └── pages │ │ ├── __init__.py │ │ └── __pycache__ │ │ └── __init__.py ├── service_management │ ├── __init__.py │ ├── doctype │ │ ├── __init__.py │ │ ├── complains │ │ │ ├── __init__.py │ │ │ ├── complains.py │ │ │ └── complains.json │ │ ├── faults │ │ │ ├── __init__.py │ │ │ ├── faults.py │ │ │ └── faults.json │ │ ├── sold_by │ │ │ ├── __init__.py │ │ │ ├── test_sold_by.py │ │ │ ├── sold_by.js │ │ │ ├── sold_by.py │ │ │ └── sold_by.json │ │ ├── spare │ │ │ ├── __init__.py │ │ │ ├── test_spare.py │ │ │ ├── spare.js │ │ │ ├── spare.py │ │ │ └── spare.json │ │ ├── job_card_tasks │ │ │ ├── __init__.py │ │ │ ├── job_card_tasks.py │ │ │ └── job_card_tasks.json │ │ ├── service_task │ │ │ ├── __init__.py │ │ │ ├── test_service_task.py │ │ │ ├── service_task.js │ │ │ ├── service_task.py │ │ │ └── service_task.json │ │ ├── supplied_parts │ │ │ ├── __init__.py │ │ │ ├── supplied_parts.py │ │ │ └── supplied_parts.json │ │ ├── template_task │ │ │ ├── __init__.py │ │ │ ├── template_task.py │ │ │ └── template_task.json │ │ ├── vehicle_make │ │ │ ├── __init__.py │ │ │ ├── test_vehicle_make.py │ │ │ ├── vehicle_make.js │ │ │ ├── vehicle_make.py │ │ │ └── vehicle_make.json │ │ ├── vehicle_model │ │ │ ├── __init__.py │ │ │ ├── templates │ │ │ │ ├── vehicle_model_row.html │ │ │ │ └── vehicle_model.html │ │ │ ├── test_vehicle_model.py │ │ │ ├── vehicle_model.js │ │ │ ├── vehicle_model.py │ │ │ └── vehicle_model.json │ │ ├── job_card_status │ │ │ ├── __init__.py │ │ │ ├── test_job_card_status.py │ │ │ ├── job_card_status.js │ │ │ ├── job_card_status.py │ │ │ └── job_card_status.json │ │ ├── job_card_template │ │ │ ├── __init__.py │ │ │ ├── job_card_template.py │ │ │ └── job_card_template.json │ │ ├── pre_inspection_item │ │ │ ├── __init__.py │ │ │ ├── pre_inspection_item.py │ │ │ └── pre_inspection_item.json │ │ ├── service_job_card │ │ │ ├── __init__.py │ │ │ ├── templates │ │ │ │ ├── service_job_card_row.html │ │ │ │ └── service_job_card.html │ │ │ ├── test_service_job_card.py │ │ │ ├── service_job_card_dashboard.py │ │ │ ├── service_job_card.js │ │ │ ├── service_job_card.py │ │ │ └── service_job_card.json │ │ ├── service_parts_entry │ │ │ ├── __init__.py │ │ │ ├── test_service_parts_entry.py │ │ │ ├── service_parts_entry.js │ │ │ ├── service_parts_entry.py │ │ │ └── service_parts_entry.json │ │ ├── service_settings │ │ │ ├── __init__.py │ │ │ ├── test_service_settings.py │ │ │ ├── service_settings.js │ │ │ ├── service_settings.py │ │ │ └── service_settings.json │ │ ├── service_template │ │ │ ├── __init__.py │ │ │ ├── test_service_template.py │ │ │ ├── service_template.py │ │ │ ├── service_template.js │ │ │ └── service_template.json │ │ ├── service_vehicle │ │ │ ├── __init__.py │ │ │ ├── test_service_vehicle.py │ │ │ ├── service_vehicle.js │ │ │ ├── service_vehicle.py │ │ │ └── service_vehicle.json │ │ ├── service_workshop │ │ │ ├── __init__.py │ │ │ ├── test_service_workshop.py │ │ │ ├── service_workshop.js │ │ │ ├── service_workshop.py │ │ │ └── service_workshop.json │ │ ├── job_card_items_supplied │ │ │ ├── __init__.py │ │ │ ├── job_card_items_supplied.py │ │ │ └── job_card_items_supplied.json │ │ ├── parts_and_consumable │ │ │ ├── __init__.py │ │ │ ├── test_parts_and_consumable.py │ │ │ ├── parts_and_consumable.js │ │ │ ├── parts_and_consumable.py │ │ │ └── parts_and_consumable.json │ │ ├── service_brake_checklist │ │ │ ├── __init__.py │ │ │ ├── service_brake_checklist.py │ │ │ └── service_brake_checklist.json │ │ ├── service_engine_checklist │ │ │ ├── __init__.py │ │ │ ├── service_engine_checklist.py │ │ │ └── service_engine_checklist.json │ │ ├── service_tyre_checklist │ │ │ ├── __init__.py │ │ │ ├── service_tyre_checklist.py │ │ │ └── service_tyre_checklist.json │ │ ├── service_vehicle_type │ │ │ ├── __init__.py │ │ │ ├── test_service_vehicle_type.py │ │ │ ├── service_vehicle_type.js │ │ │ ├── service_vehicle_type.py │ │ │ └── service_vehicle_type.json │ │ ├── service_air_system_checklist │ │ │ ├── __init__.py │ │ │ ├── service_air_system_checklist.py │ │ │ └── service_air_system_checklist.json │ │ ├── service_electrical_checklist │ │ │ ├── __init__.py │ │ │ ├── service_electrical_checklist.py │ │ │ └── service_electrical_checklist.json │ │ ├── service_electronics_checklist │ │ │ ├── __init__.py │ │ │ ├── service_electronics_checklist.py │ │ │ └── service_electronics_checklist.json │ │ ├── service_fuel_system_checklist │ │ │ ├── __init__.py │ │ │ ├── service_fuel_system_checklist.py │ │ │ └── service_fuel_system_checklist.json │ │ ├── service_lighting_checklist │ │ │ ├── __init__.py │ │ │ ├── service_lighting_checklist.py │ │ │ └── service_lighting_checklist.json │ │ ├── service_parts_entry_detail │ │ │ ├── __init__.py │ │ │ ├── service_parts_entry_detail.py │ │ │ └── service_parts_entry_detail.json │ │ ├── service_power_train_checklist │ │ │ ├── __init__.py │ │ │ ├── service_power_train_checklist.py │ │ │ └── service_power_train_checklist.json │ │ ├── service_steering_checklist │ │ │ ├── __init__.py │ │ │ ├── service_steering_checklist.py │ │ │ └── service_steering_checklist.json │ │ ├── service_suspension_checklist │ │ │ ├── __init__.py │ │ │ ├── service_suspension_checklist.py │ │ │ └── service_suspension_checklist.json │ │ ├── service_vehicle_inspection │ │ │ ├── __init__.py │ │ │ ├── test_service_vehicle_inspection.py │ │ │ ├── service_vehicle_inspection.js │ │ │ ├── service_vehicle_inspection.py │ │ │ └── service_vehicle_inspection.json │ │ ├── part_and_consumable_item_group │ │ │ ├── __init__.py │ │ │ ├── part_and_consumable_item_group.py │ │ │ └── part_and_consumable_item_group.json │ │ ├── service_pre_inspection_template │ │ │ ├── __init__.py │ │ │ ├── test_service_pre_inspection_template.py │ │ │ ├── service_pre_inspection_template.js │ │ │ ├── service_pre_inspection_template.py │ │ │ └── service_pre_inspection_template.json │ │ ├── template_parts_and_consumables │ │ │ ├── __init__.py │ │ │ ├── template_parts_and_consumables.py │ │ │ └── template_parts_and_consumables.json │ │ └── company_service_management_settings │ │ │ ├── __init__.py │ │ │ ├── test_company_service_management_settings.py │ │ │ ├── company_service_management_settings.js │ │ │ ├── company_service_management_settings.py │ │ │ └── company_service_management_settings.json │ ├── report │ │ ├── __init__.py │ │ └── service_job_card_detail │ │ │ ├── __init__.py │ │ │ ├── service_job_card_detail.js │ │ │ ├── service_job_card_detail.json │ │ │ └── service_job_card_detail.py │ └── workspace │ │ └── service │ │ └── service.json ├── modules.txt ├── __init__.py ├── fixtures │ ├── custom_field.json │ └── property_setter.json └── hooks.py ├── .gitignore ├── README.md ├── .mergify.yml ├── MANIFEST.in └── setup.py /license.txt: -------------------------------------------------------------------------------- 1 | License: MIT -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | frappe -------------------------------------------------------------------------------- /servicems/patches.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/config/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/servicems/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/templates/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/templates/pages/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/report/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/modules.txt: -------------------------------------------------------------------------------- 1 | servicems 2 | Service Management -------------------------------------------------------------------------------- /servicems/templates/pages/__pycache__/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/complains/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/faults/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/sold_by/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/spare/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_tasks/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_task/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/supplied_parts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_task/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_make/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_status/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_template/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/pre_inspection_item/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_template/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_workshop/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_items_supplied/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/parts_and_consumable/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_brake_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_engine_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_tyre_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_type/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/report/service_job_card_detail/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_air_system_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electrical_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electronics_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_fuel_system_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_lighting_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry_detail/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_power_train_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_steering_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_suspension_checklist/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_inspection/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/part_and_consumable_item_group/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_pre_inspection_template/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_parts_and_consumables/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/company_service_management_settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.egg-info 4 | *.swp 5 | tags 6 | servicems/docs/current -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## servicems 2 | 3 | Service Management System for ERPNext 4 | 5 | #### License 6 | 7 | MIT -------------------------------------------------------------------------------- /servicems/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | __version__ = '0.0.1' 5 | 6 | -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: Automatic merge on approval 3 | conditions: 4 | - "#approved-reviews-by>=1" 5 | actions: 6 | merge: 7 | method: merge 8 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/templates/vehicle_model_row.html: -------------------------------------------------------------------------------- 1 |
2 | {{ doc.title or doc.name }} 3 |
4 | 5 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/templates/service_job_card_row.html: -------------------------------------------------------------------------------- 1 |
2 | {{ doc.title or doc.name }} 3 |
4 | 5 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/spare/test_spare.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestSpare(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/sold_by/test_sold_by.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestSoldBy(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/templates/vehicle_model.html: -------------------------------------------------------------------------------- 1 | {% extends "templates/web.html" %} 2 | 3 | {% block page_content %} 4 |

{{ title }}

5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/templates/service_job_card.html: -------------------------------------------------------------------------------- 1 | {% extends "templates/web.html" %} 2 | 3 | {% block page_content %} 4 |

{{ title }}

5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_task/test_service_task.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceTask(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/spare/spare.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Spare', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_make/test_vehicle_make.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestVehicleMake(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/test_vehicle_model.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestVehicleModel(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_status/test_job_card_status.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestJobCardStatus(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle/test_service_vehicle.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceVehicle(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/sold_by/sold_by.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Sold By', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/test_service_job_card.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceJobCard(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_settings/test_service_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceSettings(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_template/test_service_template.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceTemplate(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_workshop/test_service_workshop.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceWorkshop(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/faults/faults.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class Faults(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/parts_and_consumable/test_parts_and_consumable.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestPartsandConsumable(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry/test_service_parts_entry.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServicePartsEntry(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_task/service_task.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Task', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_type/test_service_vehicle_type.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceVehicleType(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/spare/spare.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class Spare(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_make/vehicle_make.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Vehicle Make', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/sold_by/sold_by.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class SoldBy(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/vehicle_model.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Vehicle Model', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/complains/complains.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class Complains(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_status/job_card_status.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Job Card Status', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle/service_vehicle.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Vehicle', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_settings/service_settings.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Settings', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_workshop/service_workshop.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Workshop', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_task/service_task.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceTask(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_inspection/test_service_vehicle_inspection.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServiceVehicleInspection(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_task/template_task.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class TemplateTask(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_make/vehicle_make.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class VehicleMake(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_status/job_card_status.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class JobCardStatus(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_tasks/job_card_tasks.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class JobCardTasks(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/parts_and_consumable/parts_and_consumable.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Parts and Consumable', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry/service_parts_entry.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Parts Entry', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_type/service_vehicle_type.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Vehicle Type', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/supplied_parts/supplied_parts.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class SuppliedParts(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_template/service_template.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceTemplate(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle/service_vehicle.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceVehicle(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_workshop/service_workshop.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceWorkshop(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_template/job_card_template.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class JobCardTemplate(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_pre_inspection_template/test_service_pre_inspection_template.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestServicePreInspectionTemplate(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/parts_and_consumable/parts_and_consumable.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class PartsandConsumable(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/pre_inspection_item/pre_inspection_item.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class PreInspectionItem(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry/service_parts_entry.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServicePartsEntry(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_type/service_vehicle_type.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceVehicleType(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/company_service_management_settings/test_company_service_management_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and Contributors 2 | # See license.txt 3 | 4 | # import frappe 5 | import unittest 6 | 7 | class TestCompanyServiceManagementSettings(unittest.TestCase): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_inspection/service_vehicle_inspection.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Vehicle Inspection', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_items_supplied/job_card_items_supplied.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class JobCardItemsSupplied(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_brake_checklist/service_brake_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceBrakeChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_tyre_checklist/service_tyre_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceTyreChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/vehicle_model.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.website.website_generator import WebsiteGenerator 6 | 7 | class VehicleModel(WebsiteGenerator): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_engine_checklist/service_engine_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceEngineChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_lighting_checklist/service_lighting_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceLightingChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry_detail/service_parts_entry_detail.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServicePartsEntryDetail(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_pre_inspection_template/service_pre_inspection_template.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Pre Inspection Template', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_steering_checklist/service_steering_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceSteeringChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_inspection/service_vehicle_inspection.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceVehicleInspection(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_air_system_checklist/service_air_system_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceAirSystemChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electrical_checklist/service_electrical_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceElectricalChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_suspension_checklist/service_suspension_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceSuspensionChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/company_service_management_settings/company_service_management_settings.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Company Service Management Settings', { 5 | // refresh: function(frm) { 6 | 7 | // } 8 | }); 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/part_and_consumable_item_group/part_and_consumable_item_group.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class PartandConsumableItemGroup(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electronics_checklist/service_electronics_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceElectronicsChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_fuel_system_checklist/service_fuel_system_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServiceFuelSystemChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_power_train_checklist/service_power_train_checklist.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServicePowerTrainChecklist(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_parts_and_consumables/template_parts_and_consumables.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class TemplatePartsandConsumables(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_pre_inspection_template/service_pre_inspection_template.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class ServicePreInspectionTemplate(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/config/desktop.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from frappe import _ 4 | 5 | def get_data(): 6 | return [ 7 | { 8 | "module_name": "servicems", 9 | "color": "grey", 10 | "icon": "octicon octicon-file-directory", 11 | "type": "module", 12 | "label": _("servicems") 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/company_service_management_settings/company_service_management_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | # import frappe 5 | from frappe.model.document import Document 6 | 7 | class CompanyServiceManagementSettings(Document): 8 | pass 9 | -------------------------------------------------------------------------------- /servicems/config/docs.py: -------------------------------------------------------------------------------- 1 | """ 2 | Configuration for docs 3 | """ 4 | 5 | # source_link = "https://github.com/[org_name]/servicems" 6 | # docs_base_url = "https://[org_name].github.io/servicems" 7 | # headline = "App that does everything" 8 | # sub_heading = "Yes, you got that right the first time, everything" 9 | 10 | def get_context(context): 11 | context.brand_html = "servicems" 12 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/service_job_card_dashboard.py: -------------------------------------------------------------------------------- 1 | import frappe 2 | from frappe import _ 3 | 4 | def get_data(): 5 | return { 6 | "non_standard_fieldname": { 7 | "Stock Entry": "service_job_card" 8 | }, 9 | "transactions": [ 10 | { 11 | "items": ["Stock Entry"] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_template/service_template.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Template', { 5 | refresh: function (frm) { 6 | cur_frm.set_query("item", "parts", () => { 7 | return { 8 | query: "servicems.service_management.doctype.service_settings.service_settings.get_filtered_items", 9 | }; 10 | }); 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include MANIFEST.in 2 | include requirements.txt 3 | include *.json 4 | include *.md 5 | include *.py 6 | include *.txt 7 | recursive-include servicems *.css 8 | recursive-include servicems *.csv 9 | recursive-include servicems *.html 10 | recursive-include servicems *.ico 11 | recursive-include servicems *.js 12 | recursive-include servicems *.json 13 | recursive-include servicems *.md 14 | recursive-include servicems *.png 15 | recursive-include servicems *.py 16 | recursive-include servicems *.svg 17 | recursive-include servicems *.txt 18 | recursive-exclude servicems *.pyc -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from setuptools import setup, find_packages 3 | 4 | with open('requirements.txt') as f: 5 | install_requires = f.read().strip().split('\n') 6 | 7 | # get version from __version__ variable in servicems/__init__.py 8 | from servicems import __version__ as version 9 | 10 | setup( 11 | name='servicems', 12 | version=version, 13 | description='Service Management System for ERPNext', 14 | author='Aakvatech Limited', 15 | author_email='info@aakvatech.com', 16 | packages=find_packages(), 17 | zip_safe=False, 18 | include_package_data=True, 19 | install_requires=install_requires 20 | ) 21 | -------------------------------------------------------------------------------- /servicems/service_management/report/service_job_card_detail/service_job_card_detail.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | /* eslint-disable */ 4 | 5 | frappe.query_reports["Service Job Card Detail"] = { 6 | "filters": [ 7 | { 8 | "fieldname": "from_date", 9 | "fieldtype": "Date", 10 | "label": __("From Date"), 11 | "reqd": 1 12 | }, 13 | { 14 | "fieldname": "to_date", 15 | "fieldtype": "Date", 16 | "label": __("To Date"), 17 | "reqd": 1 18 | }, 19 | { 20 | "fieldname": "customer_view", 21 | "fieldtype": "Check", 22 | "label": __("Customer View") 23 | }, 24 | ] 25 | }; 26 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_settings/service_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | import frappe 5 | from frappe.model.document import Document 6 | from erpnext.controllers.queries import item_query 7 | 8 | 9 | class ServiceSettings(Document): 10 | pass 11 | 12 | 13 | @frappe.whitelist() 14 | def get_filtered_items(doctype, txt, searchfield, start, page_len, filters): 15 | doc = frappe.get_single("Service Settings") 16 | groups = [i.item_group for i in doc.item_groups] 17 | filters = {"item_group": ["in", groups]} 18 | items = item_query( 19 | doctype, txt, searchfield, start, page_len, filters, as_dict=False 20 | ) 21 | return items 22 | -------------------------------------------------------------------------------- /servicems/service_management/report/service_job_card_detail/service_job_card_detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "add_total_row": 1, 3 | "columns": [], 4 | "creation": "2022-02-11 09:38:35.158460", 5 | "disable_prepared_report": 0, 6 | "disabled": 0, 7 | "docstatus": 0, 8 | "doctype": "Report", 9 | "filters": [], 10 | "idx": 0, 11 | "is_standard": "Yes", 12 | "letter_head": "Letterhead Official", 13 | "modified": "2022-02-11 09:38:35.158460", 14 | "modified_by": "Administrator", 15 | "module": "Service Management", 16 | "name": "Service Job Card Detail", 17 | "owner": "Administrator", 18 | "prepared_report": 0, 19 | "ref_doctype": "Service Job Card", 20 | "report_name": "Service Job Card Detail", 21 | "report_type": "Script Report", 22 | "roles": [ 23 | { 24 | "role": "System Manager" 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_task/template_task.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-10 19:11:00.194653", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "task_name" 9 | ], 10 | "fields": [ 11 | { 12 | "fieldname": "task_name", 13 | "fieldtype": "Link", 14 | "in_list_view": 1, 15 | "label": "Task Name", 16 | "options": "Service Task" 17 | } 18 | ], 19 | "index_web_pages_for_search": 1, 20 | "istable": 1, 21 | "links": [], 22 | "modified": "2021-06-25 19:47:13.239103", 23 | "modified_by": "Administrator", 24 | "module": "Service Management", 25 | "name": "Template Task", 26 | "owner": "Administrator", 27 | "permissions": [], 28 | "sort_field": "modified", 29 | "sort_order": "DESC", 30 | "track_changes": 1 31 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/faults/faults.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[\"Administrator\"]", 4 | "actions": [], 5 | "creation": "2021-05-26 16:34:24.854864", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "description" 11 | ], 12 | "fields": [ 13 | { 14 | "fieldname": "description", 15 | "fieldtype": "Data", 16 | "in_list_view": 1, 17 | "label": "Description" 18 | } 19 | ], 20 | "index_web_pages_for_search": 1, 21 | "istable": 1, 22 | "links": [], 23 | "modified": "2021-06-24 13:57:52.855372", 24 | "modified_by": "Administrator", 25 | "module": "Service Management", 26 | "name": "Faults", 27 | "owner": "Administrator", 28 | "permissions": [], 29 | "sort_field": "modified", 30 | "sort_order": "DESC", 31 | "track_changes": 1 32 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/complains/complains.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[\"Administrator\"]", 4 | "actions": [], 5 | "creation": "2021-05-27 10:54:48.710017", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "description" 11 | ], 12 | "fields": [ 13 | { 14 | "fieldname": "description", 15 | "fieldtype": "Data", 16 | "in_list_view": 1, 17 | "label": "Description" 18 | } 19 | ], 20 | "index_web_pages_for_search": 1, 21 | "istable": 1, 22 | "links": [], 23 | "modified": "2021-06-24 13:57:53.077662", 24 | "modified_by": "Administrator", 25 | "module": "Service Management", 26 | "name": "Complains", 27 | "owner": "Administrator", 28 | "permissions": [], 29 | "sort_field": "modified", 30 | "sort_order": "DESC", 31 | "track_changes": 1 32 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/part_and_consumable_item_group/part_and_consumable_item_group.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-10-07 22:13:26.044399", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "item_group" 9 | ], 10 | "fields": [ 11 | { 12 | "fieldname": "item_group", 13 | "fieldtype": "Link", 14 | "in_list_view": 1, 15 | "label": "Item Group", 16 | "options": "Item Group" 17 | } 18 | ], 19 | "index_web_pages_for_search": 1, 20 | "istable": 1, 21 | "links": [], 22 | "modified": "2021-10-12 08:37:41.719642", 23 | "modified_by": "Administrator", 24 | "module": "Service Management", 25 | "name": "Part and Consumable Item Group", 26 | "owner": "Administrator", 27 | "permissions": [], 28 | "sort_field": "modified", 29 | "sort_order": "DESC", 30 | "track_changes": 1 31 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_tyre_checklist/service_tyre_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:23:43.869242", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "criteria", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "criteria", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Tyre" 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:23:43.869242", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Tyre Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_air_system_checklist/service_air_system_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:26:41.729613", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "part", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "part", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Part" 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:26:41.729613", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Air System Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_suspension_checklist/service_suspension_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:24:31.702848", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "part", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "part", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Suspension" 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:24:31.702848", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Suspension Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_steering_checklist/service_steering_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:22:50.896151", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "steering_part", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "steering_part", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Steering " 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:22:50.896151", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Steering Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_fuel_system_checklist/service_fuel_system_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:19:35.899495", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "fuel_system", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "fuel_system", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Fuel System " 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:19:35.899495", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Fuel System Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electrical_checklist/service_electrical_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:22:06.296442", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "electrical_part", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "electrical_part", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Electrical " 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:22:06.296442", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Electrical Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_electronics_checklist/service_electronics_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:20:44.290135", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "electronics_part", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "electronics_part", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Electronics" 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:20:44.290135", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Electronics Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/sold_by/sold_by.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:sold_by", 4 | "creation": "2021-09-24 14:46:40.145971", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "sold_by" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "sold_by", 14 | "fieldtype": "Data", 15 | "label": "Sold By", 16 | "unique": 1 17 | } 18 | ], 19 | "index_web_pages_for_search": 1, 20 | "links": [], 21 | "modified": "2021-09-24 14:46:49.567780", 22 | "modified_by": "Administrator", 23 | "module": "Service Management", 24 | "name": "Sold By", 25 | "owner": "Administrator", 26 | "permissions": [ 27 | { 28 | "create": 1, 29 | "delete": 1, 30 | "email": 1, 31 | "export": 1, 32 | "print": 1, 33 | "read": 1, 34 | "report": 1, 35 | "role": "System Manager", 36 | "share": 1, 37 | "write": 1 38 | } 39 | ], 40 | "sort_field": "modified", 41 | "sort_order": "DESC", 42 | "track_changes": 1 43 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_power_train_checklist/service_power_train_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:20:13.138259", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "power_train_checklist", 9 | "mark" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "power_train_checklist", 14 | "fieldtype": "Data", 15 | "in_list_view": 1, 16 | "label": "Power Train" 17 | }, 18 | { 19 | "default": "0", 20 | "fieldname": "mark", 21 | "fieldtype": "Check", 22 | "in_list_view": 1, 23 | "label": "Mark" 24 | } 25 | ], 26 | "istable": 1, 27 | "links": [], 28 | "modified": "2022-04-03 19:20:13.138259", 29 | "modified_by": "Administrator", 30 | "module": "Service Management", 31 | "name": "Service Power Train Checklist", 32 | "owner": "Administrator", 33 | "permissions": [], 34 | "quick_entry": 1, 35 | "sort_field": "modified", 36 | "sort_order": "DESC", 37 | "track_changes": 1 38 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_make/vehicle_make.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[]", 4 | "actions": [], 5 | "autoname": "field:make", 6 | "creation": "2021-05-25 14:49:25.196720", 7 | "doctype": "DocType", 8 | "editable_grid": 1, 9 | "engine": "InnoDB", 10 | "field_order": [ 11 | "make" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "make", 16 | "fieldtype": "Data", 17 | "label": "Name", 18 | "unique": 1 19 | } 20 | ], 21 | "index_web_pages_for_search": 1, 22 | "links": [], 23 | "modified": "2021-06-24 11:29:30.461977", 24 | "modified_by": "Administrator", 25 | "module": "Service Management", 26 | "name": "Vehicle Make", 27 | "owner": "Administrator", 28 | "permissions": [ 29 | { 30 | "create": 1, 31 | "delete": 1, 32 | "email": 1, 33 | "export": 1, 34 | "print": 1, 35 | "read": 1, 36 | "report": 1, 37 | "role": "System Manager", 38 | "share": 1, 39 | "write": 1 40 | } 41 | ], 42 | "sort_field": "modified", 43 | "sort_order": "DESC", 44 | "track_changes": 1 45 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_type/service_vehicle_type.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:vehicle_type", 4 | "creation": "2021-06-24 12:01:57.151468", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "vehicle_type" 10 | ], 11 | "fields": [ 12 | { 13 | "fieldname": "vehicle_type", 14 | "fieldtype": "Data", 15 | "label": "Vehicle Type", 16 | "unique": 1 17 | } 18 | ], 19 | "index_web_pages_for_search": 1, 20 | "links": [], 21 | "modified": "2021-06-24 12:02:17.189173", 22 | "modified_by": "Administrator", 23 | "module": "Service Management", 24 | "name": "Service Vehicle Type", 25 | "owner": "Administrator", 26 | "permissions": [ 27 | { 28 | "create": 1, 29 | "delete": 1, 30 | "email": 1, 31 | "export": 1, 32 | "print": 1, 33 | "read": 1, 34 | "report": 1, 35 | "role": "System Manager", 36 | "share": 1, 37 | "write": 1 38 | } 39 | ], 40 | "sort_field": "modified", 41 | "sort_order": "DESC", 42 | "track_changes": 1 43 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_task/service_task.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[]", 4 | "actions": [], 5 | "autoname": "field:task_name", 6 | "creation": "2021-06-10 17:58:38.079007", 7 | "doctype": "DocType", 8 | "editable_grid": 1, 9 | "engine": "InnoDB", 10 | "field_order": [ 11 | "task_name" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "task_name", 16 | "fieldtype": "Data", 17 | "label": "Task Name", 18 | "unique": 1 19 | } 20 | ], 21 | "index_web_pages_for_search": 1, 22 | "links": [], 23 | "modified": "2021-06-24 13:28:54.214808", 24 | "modified_by": "Administrator", 25 | "module": "Service Management", 26 | "name": "Service Task", 27 | "owner": "Administrator", 28 | "permissions": [ 29 | { 30 | "create": 1, 31 | "delete": 1, 32 | "email": 1, 33 | "export": 1, 34 | "print": 1, 35 | "read": 1, 36 | "report": 1, 37 | "role": "System Manager", 38 | "share": 1, 39 | "write": 1 40 | } 41 | ], 42 | "sort_field": "modified", 43 | "sort_order": "DESC", 44 | "track_changes": 1 45 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_brake_checklist/service_brake_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:18:24.081169", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "brake_system", 9 | "mark", 10 | "brake_remarks" 11 | ], 12 | "fields": [ 13 | { 14 | "fieldname": "brake_system", 15 | "fieldtype": "Data", 16 | "in_list_view": 1, 17 | "label": "Brake System" 18 | }, 19 | { 20 | "default": "0", 21 | "fieldname": "mark", 22 | "fieldtype": "Check", 23 | "in_list_view": 1, 24 | "label": "Mark" 25 | }, 26 | { 27 | "fieldname": "brake_remarks", 28 | "fieldtype": "Data", 29 | "label": "Remarks" 30 | } 31 | ], 32 | "istable": 1, 33 | "links": [], 34 | "modified": "2022-04-03 19:18:24.081169", 35 | "modified_by": "Administrator", 36 | "module": "Service Management", 37 | "name": "Service Brake Checklist", 38 | "owner": "Administrator", 39 | "permissions": [], 40 | "quick_entry": 1, 41 | "sort_field": "modified", 42 | "sort_order": "DESC", 43 | "track_changes": 1 44 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_engine_checklist/service_engine_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:18:57.074686", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "engine_system", 9 | "mark", 10 | "engine_remarks" 11 | ], 12 | "fields": [ 13 | { 14 | "fieldname": "engine_system", 15 | "fieldtype": "Data", 16 | "in_list_view": 1, 17 | "label": "Engine " 18 | }, 19 | { 20 | "default": "0", 21 | "fieldname": "mark", 22 | "fieldtype": "Check", 23 | "in_list_view": 1, 24 | "label": "Mark" 25 | }, 26 | { 27 | "fieldname": "engine_remarks", 28 | "fieldtype": "Data", 29 | "label": "Remarks" 30 | } 31 | ], 32 | "istable": 1, 33 | "links": [], 34 | "modified": "2022-04-03 19:18:57.074686", 35 | "modified_by": "Administrator", 36 | "module": "Service Management", 37 | "name": "Service Engine Checklist", 38 | "owner": "Administrator", 39 | "permissions": [], 40 | "quick_entry": 1, 41 | "sort_field": "modified", 42 | "sort_order": "DESC", 43 | "track_changes": 1 44 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_status/job_card_status.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[]", 4 | "actions": [], 5 | "autoname": "field:status_name", 6 | "creation": "2021-05-25 15:17:29.675701", 7 | "doctype": "DocType", 8 | "editable_grid": 1, 9 | "engine": "InnoDB", 10 | "field_order": [ 11 | "status_name" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "status_name", 16 | "fieldtype": "Data", 17 | "label": "Name", 18 | "unique": 1 19 | } 20 | ], 21 | "index_web_pages_for_search": 1, 22 | "links": [], 23 | "modified": "2021-06-24 11:41:42.955919", 24 | "modified_by": "Administrator", 25 | "module": "Service Management", 26 | "name": "Job Card Status", 27 | "owner": "Administrator", 28 | "permissions": [ 29 | { 30 | "create": 1, 31 | "delete": 1, 32 | "email": 1, 33 | "export": 1, 34 | "print": 1, 35 | "read": 1, 36 | "report": 1, 37 | "role": "System Manager", 38 | "share": 1, 39 | "write": 1 40 | } 41 | ], 42 | "quick_entry": 1, 43 | "sort_field": "modified", 44 | "sort_order": "DESC", 45 | "track_changes": 1 46 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/pre_inspection_item/pre_inspection_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_rename": 1, 4 | "creation": "2021-11-29 12:38:54.197931", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "inspection_item", 10 | "inspection_type", 11 | "option" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "inspection_item", 16 | "fieldtype": "Data", 17 | "label": "Inspection Item" 18 | }, 19 | { 20 | "fieldname": "inspection_type", 21 | "fieldtype": "Select", 22 | "label": "Inspection Type", 23 | "options": "Check\nData" 24 | }, 25 | { 26 | "fieldname": "option", 27 | "fieldtype": "Text", 28 | "label": "Option" 29 | } 30 | ], 31 | "index_web_pages_for_search": 1, 32 | "istable": 1, 33 | "links": [], 34 | "modified": "2021-11-29 12:41:49.734852", 35 | "modified_by": "Administrator", 36 | "module": "Service Management", 37 | "name": "Pre Inspection Item", 38 | "owner": "Administrator", 39 | "permissions": [], 40 | "sort_field": "modified", 41 | "sort_order": "DESC", 42 | "track_changes": 1 43 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_lighting_checklist/service_lighting_checklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2022-04-03 19:17:21.843336", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "lighting_check_item", 9 | "lighting_mark", 10 | "lighting_remarks" 11 | ], 12 | "fields": [ 13 | { 14 | "fieldname": "lighting_check_item", 15 | "fieldtype": "Data", 16 | "in_list_view": 1, 17 | "label": "Lighting" 18 | }, 19 | { 20 | "default": "0", 21 | "fieldname": "lighting_mark", 22 | "fieldtype": "Check", 23 | "in_list_view": 1, 24 | "label": "Mark" 25 | }, 26 | { 27 | "fieldname": "lighting_remarks", 28 | "fieldtype": "Data", 29 | "label": "Remarks" 30 | } 31 | ], 32 | "istable": 1, 33 | "links": [], 34 | "modified": "2022-04-03 19:17:21.843336", 35 | "modified_by": "Administrator", 36 | "module": "Service Management", 37 | "name": "Service Lighting Checklist", 38 | "owner": "Administrator", 39 | "permissions": [], 40 | "quick_entry": 1, 41 | "sort_field": "modified", 42 | "sort_order": "DESC", 43 | "track_changes": 1 44 | } -------------------------------------------------------------------------------- /servicems/fixtures/custom_field.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Sales Invoice-service_job_card", 4 | "owner": "Administrator", 5 | "creation": "2021-11-09 10:06:46.774505", 6 | "modified": "2021-11-09 10:06:46.774505", 7 | "modified_by": "Administrator", 8 | "idx": 193, 9 | "dt": "Sales Invoice", 10 | "label": "Service Job Card", 11 | "fieldname": "service_job_card", 12 | "insert_after": "campaign", 13 | "fieldtype": "Link", 14 | "precision": "", 15 | "options": "Service Job Card", 16 | "doctype": "Custom Field" 17 | }, 18 | { 19 | "name": "Stock Entry-service_job_card", 20 | "owner": "Administrator", 21 | "creation": "2021-11-10 12:53:59.700377", 22 | "modified": "2021-11-10 12:53:59.700377", 23 | "modified_by": "Administrator", 24 | "idx": 81, 25 | "dt": "Stock Entry", 26 | "label": "Service Job Card", 27 | "fieldname": "service_job_card", 28 | "insert_after": "remarks", 29 | "fieldtype": "Link", 30 | "options": "Service Job Card", 31 | "read_only": 1, 32 | "doctype": "Custom Field" 33 | } 34 | ] -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_tasks/job_card_tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[\"Administrator\"]", 4 | "actions": [], 5 | "creation": "2021-05-25 16:24:54.769607", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "task_name", 11 | "completed", 12 | "template" 13 | ], 14 | "fields": [ 15 | { 16 | "fieldname": "task_name", 17 | "fieldtype": "Link", 18 | "in_list_view": 1, 19 | "label": "Task Name", 20 | "options": "Service Task" 21 | }, 22 | { 23 | "fieldname": "template", 24 | "fieldtype": "Link", 25 | "in_list_view": 1, 26 | "label": "Template", 27 | "options": "Service Template" 28 | }, 29 | { 30 | "default": "0", 31 | "fieldname": "completed", 32 | "fieldtype": "Check", 33 | "in_list_view": 1, 34 | "label": "Completed" 35 | } 36 | ], 37 | "index_web_pages_for_search": 1, 38 | "istable": 1, 39 | "links": [], 40 | "modified": "2021-06-24 13:49:26.419054", 41 | "modified_by": "Administrator", 42 | "module": "Service Management", 43 | "name": "Job Card Tasks", 44 | "owner": "Administrator", 45 | "permissions": [], 46 | "sort_field": "modified", 47 | "sort_order": "DESC", 48 | "track_changes": 1 49 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_pre_inspection_template/service_pre_inspection_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_rename": 1, 4 | "autoname": "field:template_name", 5 | "creation": "2021-11-29 12:42:02.665555", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "template_name", 11 | "pre_inspection_items" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "template_name", 16 | "fieldtype": "Data", 17 | "label": "Template Name", 18 | "unique": 1 19 | }, 20 | { 21 | "fieldname": "pre_inspection_items", 22 | "fieldtype": "Table", 23 | "label": "Pre Inspection Items", 24 | "options": "Pre Inspection Item" 25 | } 26 | ], 27 | "index_web_pages_for_search": 1, 28 | "links": [], 29 | "modified": "2021-11-29 12:42:19.700748", 30 | "modified_by": "Administrator", 31 | "module": "Service Management", 32 | "name": "Service Pre Inspection Template", 33 | "owner": "Administrator", 34 | "permissions": [ 35 | { 36 | "create": 1, 37 | "delete": 1, 38 | "email": 1, 39 | "export": 1, 40 | "print": 1, 41 | "read": 1, 42 | "report": 1, 43 | "role": "System Manager", 44 | "share": 1, 45 | "write": 1 46 | } 47 | ], 48 | "sort_field": "modified", 49 | "sort_order": "DESC", 50 | "track_changes": 1 51 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/company_service_management_settings/company_service_management_settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_rename": 1, 4 | "autoname": "field:company", 5 | "creation": "2022-04-03 18:40:14.664161", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "company", 11 | "use_parts_entry" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "company", 16 | "fieldtype": "Link", 17 | "in_list_view": 1, 18 | "label": "Company", 19 | "options": "Company", 20 | "reqd": 1, 21 | "unique": 1 22 | }, 23 | { 24 | "default": "0", 25 | "fieldname": "use_parts_entry", 26 | "fieldtype": "Check", 27 | "label": "Use Service Parts Entry instead of Stock Entry" 28 | } 29 | ], 30 | "index_web_pages_for_search": 1, 31 | "links": [], 32 | "modified": "2022-04-03 18:40:42.637573", 33 | "modified_by": "Administrator", 34 | "module": "Service Management", 35 | "name": "Company Service Management Settings", 36 | "owner": "Administrator", 37 | "permissions": [ 38 | { 39 | "create": 1, 40 | "delete": 1, 41 | "email": 1, 42 | "export": 1, 43 | "print": 1, 44 | "read": 1, 45 | "report": 1, 46 | "role": "System Manager", 47 | "share": 1, 48 | "write": 1 49 | } 50 | ], 51 | "sort_field": "modified", 52 | "sort_order": "DESC" 53 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/template_parts_and_consumables/template_parts_and_consumables.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-10 19:23:24.247467", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "item", 9 | "type", 10 | "qty", 11 | "is_billable" 12 | ], 13 | "fields": [ 14 | { 15 | "fetch_from": "part_name.type", 16 | "fieldname": "type", 17 | "fieldtype": "Data", 18 | "in_list_view": 1, 19 | "label": "Type", 20 | "read_only": 1 21 | }, 22 | { 23 | "default": "0", 24 | "fieldname": "is_billable", 25 | "fieldtype": "Check", 26 | "in_list_view": 1, 27 | "label": "Is billable" 28 | }, 29 | { 30 | "fieldname": "qty", 31 | "fieldtype": "Int", 32 | "in_list_view": 1, 33 | "label": "Qty", 34 | "reqd": 1 35 | }, 36 | { 37 | "fieldname": "item", 38 | "fieldtype": "Link", 39 | "in_list_view": 1, 40 | "label": "Item", 41 | "options": "Item", 42 | "reqd": 1 43 | } 44 | ], 45 | "index_web_pages_for_search": 1, 46 | "istable": 1, 47 | "links": [], 48 | "modified": "2021-10-11 17:04:15.749435", 49 | "modified_by": "Administrator", 50 | "module": "Service Management", 51 | "name": "Template Parts and Consumables", 52 | "owner": "Administrator", 53 | "permissions": [], 54 | "sort_field": "modified", 55 | "sort_order": "DESC", 56 | "track_changes": 1 57 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/parts_and_consumable/parts_and_consumable.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:part_name", 4 | "creation": "2021-06-24 12:40:02.467429", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "part_name", 10 | "type", 11 | "item" 12 | ], 13 | "fields": [ 14 | { 15 | "fieldname": "type", 16 | "fieldtype": "Select", 17 | "label": "Type", 18 | "options": "\nPart\nConsumable" 19 | }, 20 | { 21 | "fieldname": "item", 22 | "fieldtype": "Link", 23 | "in_list_view": 1, 24 | "label": "Item", 25 | "options": "Item", 26 | "reqd": 1 27 | }, 28 | { 29 | "fieldname": "part_name", 30 | "fieldtype": "Data", 31 | "in_list_view": 1, 32 | "label": "Part Name", 33 | "reqd": 1, 34 | "unique": 1 35 | } 36 | ], 37 | "index_web_pages_for_search": 1, 38 | "links": [], 39 | "modified": "2021-06-25 16:58:49.154409", 40 | "modified_by": "Administrator", 41 | "module": "Service Management", 42 | "name": "Parts and Consumable", 43 | "owner": "Administrator", 44 | "permissions": [ 45 | { 46 | "create": 1, 47 | "delete": 1, 48 | "email": 1, 49 | "export": 1, 50 | "print": 1, 51 | "read": 1, 52 | "report": 1, 53 | "role": "System Manager", 54 | "share": 1, 55 | "write": 1 56 | } 57 | ], 58 | "sort_field": "modified", 59 | "sort_order": "DESC", 60 | "track_changes": 1 61 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/vehicle_model/vehicle_model.json: -------------------------------------------------------------------------------- 1 | { 2 | "_comments": "[]", 3 | "_liked_by": "[\"av-dev1@aakvatech.com\"]", 4 | "actions": [], 5 | "autoname": "field:model_name", 6 | "creation": "2021-05-26 18:07:34.615683", 7 | "doctype": "DocType", 8 | "editable_grid": 1, 9 | "engine": "InnoDB", 10 | "field_order": [ 11 | "model_name", 12 | "make", 13 | "type", 14 | "route" 15 | ], 16 | "fields": [ 17 | { 18 | "fieldname": "model_name", 19 | "fieldtype": "Data", 20 | "label": "Model", 21 | "unique": 1 22 | }, 23 | { 24 | "fieldname": "make", 25 | "fieldtype": "Link", 26 | "label": "Make", 27 | "options": "Vehicle Make" 28 | }, 29 | { 30 | "fieldname": "type", 31 | "fieldtype": "Link", 32 | "label": "Type", 33 | "options": "Service Vehicle Type" 34 | }, 35 | { 36 | "fieldname": "route", 37 | "fieldtype": "Data", 38 | "label": "Route" 39 | } 40 | ], 41 | "has_web_view": 1, 42 | "index_web_pages_for_search": 1, 43 | "links": [], 44 | "modified": "2021-07-20 17:46:01.582500", 45 | "modified_by": "Administrator", 46 | "module": "Service Management", 47 | "name": "Vehicle Model", 48 | "owner": "Administrator", 49 | "permissions": [ 50 | { 51 | "create": 1, 52 | "delete": 1, 53 | "email": 1, 54 | "export": 1, 55 | "print": 1, 56 | "read": 1, 57 | "report": 1, 58 | "role": "System Manager", 59 | "share": 1, 60 | "write": 1 61 | } 62 | ], 63 | "route": "vehicle_model", 64 | "sort_field": "modified", 65 | "sort_order": "DESC", 66 | "track_changes": 1 67 | } -------------------------------------------------------------------------------- /servicems/fixtures/property_setter.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Sales Invoice-main-links_order", 4 | "creation": "2021-11-10 09:29:39.655396", 5 | "modified": "2021-11-10 09:29:39.655396", 6 | "idx": 0, 7 | "docstatus": 0, 8 | "doctype_or_field": "DocType", 9 | "doc_type": "Sales Invoice", 10 | "property": "links_order", 11 | "property_type": "Small Text", 12 | "value": "[\"15939ada81\", \"e866221bd8\"]", 13 | "doctype": "Property Setter" 14 | }, 15 | { 16 | "name": "Sales Invoice-update_stock-read_only", 17 | "creation": "2021-11-10 09:05:47.845372", 18 | "modified": "2021-11-10 09:05:47.845372", 19 | "idx": 0, 20 | "docstatus": 0, 21 | "doctype_or_field": "DocField", 22 | "doc_type": "Sales Invoice", 23 | "field_name": "update_stock", 24 | "property": "read_only", 25 | "property_type": "Check", 26 | "value": "1", 27 | "doctype": "Property Setter" 28 | }, 29 | { 30 | "name": "Sales Invoice-update_stock-read_only_depends_on", 31 | "creation": "2021-11-10 11:47:18.192475", 32 | "modified": "2021-11-10 11:47:18.192475", 33 | "idx": 0, 34 | "docstatus": 0, 35 | "doctype_or_field": "DocField", 36 | "doc_type": "Sales Invoice", 37 | "field_name": "update_stock", 38 | "property": "read_only_depends_on", 39 | "property_type": "Data", 40 | "value": "eval:doc.service_job_card", 41 | "doctype": "Property Setter" 42 | } 43 | ] -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_settings/service_settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-24 10:04:05.742941", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "default_is_billable", 9 | "price_list", 10 | "item_groups", 11 | "use_spares_instead_of_item" 12 | ], 13 | "fields": [ 14 | { 15 | "default": "0", 16 | "fieldname": "default_is_billable", 17 | "fieldtype": "Check", 18 | "label": "Default is Billable" 19 | }, 20 | { 21 | "fieldname": "price_list", 22 | "fieldtype": "Link", 23 | "in_list_view": 1, 24 | "label": "Default Price List", 25 | "options": "Price List", 26 | "reqd": 1 27 | }, 28 | { 29 | "fieldname": "item_groups", 30 | "fieldtype": "Table MultiSelect", 31 | "label": "Item Group for Parts and Consumable", 32 | "options": "Part and Consumable Item Group" 33 | }, 34 | { 35 | "default": "0", 36 | "fieldname": "use_spares_instead_of_item", 37 | "fieldtype": "Check", 38 | "label": "Use Spares instead of Item" 39 | } 40 | ], 41 | "index_web_pages_for_search": 1, 42 | "issingle": 1, 43 | "links": [], 44 | "modified": "2022-11-17 21:30:13.119537", 45 | "modified_by": "Administrator", 46 | "module": "Service Management", 47 | "name": "Service Settings", 48 | "owner": "Administrator", 49 | "permissions": [ 50 | { 51 | "create": 1, 52 | "delete": 1, 53 | "email": 1, 54 | "print": 1, 55 | "read": 1, 56 | "role": "System Manager", 57 | "share": 1, 58 | "write": 1 59 | } 60 | ], 61 | "sort_field": "modified", 62 | "sort_order": "DESC", 63 | "track_changes": 1 64 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_items_supplied/job_card_items_supplied.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-10 18:32:44.004555", 4 | "doctype": "DocType", 5 | "engine": "InnoDB", 6 | "field_order": [ 7 | "item", 8 | "spare", 9 | "qty", 10 | "rate", 11 | "is_billable" 12 | ], 13 | "fields": [ 14 | { 15 | "depends_on": "eval: !parent.use_spare_not_item;", 16 | "fieldname": "item", 17 | "fieldtype": "Link", 18 | "in_list_view": 1, 19 | "label": "Item", 20 | "mandatory_depends_on": "eval: !parent.use_spare_not_item;", 21 | "options": "Item" 22 | }, 23 | { 24 | "default": "0", 25 | "fieldname": "is_billable", 26 | "fieldtype": "Check", 27 | "in_list_view": 1, 28 | "label": "Is billable" 29 | }, 30 | { 31 | "fieldname": "qty", 32 | "fieldtype": "Int", 33 | "in_list_view": 1, 34 | "label": "Qty", 35 | "reqd": 1 36 | }, 37 | { 38 | "fieldname": "rate", 39 | "fieldtype": "Currency", 40 | "in_list_view": 1, 41 | "label": "Rate" 42 | }, 43 | { 44 | "depends_on": "eval: parent.use_spare_not_item", 45 | "fieldname": "spare", 46 | "fieldtype": "Link", 47 | "in_list_view": 1, 48 | "label": "Spare", 49 | "mandatory_depends_on": "eval: parent.use_spare_not_item", 50 | "options": "Spare" 51 | } 52 | ], 53 | "index_web_pages_for_search": 1, 54 | "istable": 1, 55 | "links": [], 56 | "modified": "2022-11-17 22:28:54.620290", 57 | "modified_by": "Administrator", 58 | "module": "Service Management", 59 | "name": "Job Card Items Supplied", 60 | "owner": "Administrator", 61 | "permissions": [], 62 | "sort_field": "modified", 63 | "sort_order": "DESC", 64 | "track_changes": 1 65 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/job_card_template/job_card_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-10 18:13:46.385234", 4 | "doctype": "DocType", 5 | "editable_grid": 1, 6 | "engine": "InnoDB", 7 | "field_order": [ 8 | "service", 9 | "item", 10 | "rate", 11 | "is_billable", 12 | "bypass_billable", 13 | "applied", 14 | "price_list" 15 | ], 16 | "fields": [ 17 | { 18 | "fetch_from": "service.item", 19 | "fieldname": "item", 20 | "fieldtype": "Link", 21 | "in_list_view": 1, 22 | "label": "Item", 23 | "options": "Item", 24 | "read_only": 1 25 | }, 26 | { 27 | "fieldname": "rate", 28 | "fieldtype": "Float", 29 | "in_list_view": 1, 30 | "label": "Rate" 31 | }, 32 | { 33 | "fieldname": "service", 34 | "fieldtype": "Link", 35 | "in_list_view": 1, 36 | "label": "Service Template", 37 | "options": "Service Template" 38 | }, 39 | { 40 | "default": "0", 41 | "fieldname": "is_billable", 42 | "fieldtype": "Check", 43 | "in_list_view": 1, 44 | "label": " Is billable " 45 | }, 46 | { 47 | "default": "0", 48 | "fieldname": "applied", 49 | "fieldtype": "Check", 50 | "hidden": 1, 51 | "label": "Applied", 52 | "read_only": 1 53 | }, 54 | { 55 | "fetch_from": "service.price_list", 56 | "fieldname": "price_list", 57 | "fieldtype": "Data", 58 | "label": "Price List", 59 | "read_only": 1 60 | }, 61 | { 62 | "default": "0", 63 | "fieldname": "bypass_billable", 64 | "fieldtype": "Check", 65 | "label": "Bypass Billable" 66 | } 67 | ], 68 | "index_web_pages_for_search": 1, 69 | "istable": 1, 70 | "links": [], 71 | "modified": "2021-10-13 12:22:27.542891", 72 | "modified_by": "Administrator", 73 | "module": "Service Management", 74 | "name": "Job Card Template", 75 | "owner": "Administrator", 76 | "permissions": [], 77 | "sort_field": "modified", 78 | "sort_order": "DESC", 79 | "track_changes": 1 80 | } -------------------------------------------------------------------------------- /servicems/service_management/report/service_job_card_detail/service_job_card_detail.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2022, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | import frappe 5 | from frappe import _ 6 | 7 | 8 | def execute(filters=None): 9 | if not filters: 10 | return 11 | 12 | columns = [ 13 | {"fieldname": "customer", "fieldtype": "Data", "label": _("Customer")}, 14 | ] 15 | 16 | if not filters.customer_view: 17 | columns.append( 18 | { 19 | "fieldname": "service_item_name", 20 | "fieldtype": "Data", 21 | "label": _("Service Item"), 22 | } 23 | ) 24 | 25 | columns.append( 26 | {"fieldname": "count", "fieldtype": "Int", "label": _("No. of Bills")} 27 | ) 28 | 29 | columns.append( 30 | { 31 | "fieldname": "total_amount", 32 | "fieldtype": "Currency", 33 | "label": _("Total Amount"), 34 | } 35 | ) 36 | 37 | if not filters.customer_view: 38 | data = frappe.get_list( 39 | "Service Job Card", 40 | filters=[ 41 | ["receiving_datetime", "between", [filters.from_date, filters.to_date]], 42 | ["docstatus", "=", 1], 43 | ], 44 | fields=[ 45 | "customer", 46 | "service_item_name", 47 | "count(service_item_name) as count", 48 | "sum(total) as total_amount", 49 | ], 50 | group_by="service_item_name", 51 | ) 52 | else: 53 | data = frappe.get_list( 54 | "Service Job Card", 55 | filters=[ 56 | ["receiving_datetime", "between", [filters.from_date, filters.to_date]], 57 | ["docstatus", "=", 1], 58 | ], 59 | fields=[ 60 | "customer", 61 | "count(service_item_name) as count", 62 | "sum(total) as total_amount", 63 | ], 64 | group_by="customer", 65 | ) 66 | 67 | return columns, data 68 | -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_workshop/service_workshop.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:workshop_name", 4 | "creation": "2021-05-25 15:56:33.525728", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "workshop_name", 10 | "company", 11 | "location", 12 | "column_break_4", 13 | "parts_warehouse", 14 | "workshop_warehouse", 15 | "section_break_7", 16 | "use_spare_not_item" 17 | ], 18 | "fields": [ 19 | { 20 | "fieldname": "workshop_name", 21 | "fieldtype": "Data", 22 | "in_list_view": 1, 23 | "label": "Workshop Name", 24 | "reqd": 1, 25 | "unique": 1 26 | }, 27 | { 28 | "fieldname": "company", 29 | "fieldtype": "Link", 30 | "in_list_view": 1, 31 | "label": "Company", 32 | "options": "Company", 33 | "reqd": 1 34 | }, 35 | { 36 | "fieldname": "location", 37 | "fieldtype": "Data", 38 | "label": "Location" 39 | }, 40 | { 41 | "fieldname": "column_break_4", 42 | "fieldtype": "Column Break" 43 | }, 44 | { 45 | "fieldname": "parts_warehouse", 46 | "fieldtype": "Link", 47 | "in_list_view": 1, 48 | "label": "Parts Warehouse", 49 | "options": "Warehouse", 50 | "reqd": 1 51 | }, 52 | { 53 | "fieldname": "workshop_warehouse", 54 | "fieldtype": "Link", 55 | "in_list_view": 1, 56 | "label": "Workshop Warehouse", 57 | "options": "Warehouse", 58 | "reqd": 1 59 | }, 60 | { 61 | "fieldname": "section_break_7", 62 | "fieldtype": "Section Break" 63 | }, 64 | { 65 | "default": "0", 66 | "fieldname": "use_spare_not_item", 67 | "fieldtype": "Check", 68 | "label": "Use Spare not Item" 69 | } 70 | ], 71 | "index_web_pages_for_search": 1, 72 | "links": [], 73 | "modified": "2022-11-17 21:54:21.743098", 74 | "modified_by": "Administrator", 75 | "module": "Service Management", 76 | "name": "Service Workshop", 77 | "owner": "Administrator", 78 | "permissions": [ 79 | { 80 | "create": 1, 81 | "delete": 1, 82 | "email": 1, 83 | "export": 1, 84 | "print": 1, 85 | "read": 1, 86 | "report": 1, 87 | "role": "System Manager", 88 | "share": 1, 89 | "write": 1 90 | } 91 | ], 92 | "sort_field": "modified", 93 | "sort_order": "DESC", 94 | "track_changes": 1, 95 | "track_seen": 1 96 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_template/service_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:template_name", 4 | "creation": "2021-06-10 19:01:23.359448", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "template_name", 10 | "item", 11 | "is_billable", 12 | "disabled", 13 | "column_break_5", 14 | "price_list", 15 | "section_break_6", 16 | "tasks", 17 | "section_break_8", 18 | "parts", 19 | "section_break_10" 20 | ], 21 | "fields": [ 22 | { 23 | "fieldname": "item", 24 | "fieldtype": "Link", 25 | "in_list_view": 1, 26 | "label": "Item", 27 | "options": "Item", 28 | "reqd": 1 29 | }, 30 | { 31 | "default": "0", 32 | "fieldname": "is_billable", 33 | "fieldtype": "Check", 34 | "label": "Is billable" 35 | }, 36 | { 37 | "default": "0", 38 | "fieldname": "disabled", 39 | "fieldtype": "Check", 40 | "label": "Disabled" 41 | }, 42 | { 43 | "fieldname": "section_break_6", 44 | "fieldtype": "Section Break" 45 | }, 46 | { 47 | "fieldname": "section_break_8", 48 | "fieldtype": "Section Break" 49 | }, 50 | { 51 | "fieldname": "section_break_10", 52 | "fieldtype": "Section Break" 53 | }, 54 | { 55 | "fieldname": "template_name", 56 | "fieldtype": "Data", 57 | "in_list_view": 1, 58 | "label": "Template Name", 59 | "reqd": 1, 60 | "unique": 1 61 | }, 62 | { 63 | "fieldname": "column_break_5", 64 | "fieldtype": "Column Break" 65 | }, 66 | { 67 | "fieldname": "parts", 68 | "fieldtype": "Table", 69 | "label": "Service Template Parts and Consumable", 70 | "options": "Template Parts and Consumables" 71 | }, 72 | { 73 | "fieldname": "tasks", 74 | "fieldtype": "Table", 75 | "label": "Service Template Task", 76 | "options": "Template Task", 77 | "reqd": 1 78 | }, 79 | { 80 | "fieldname": "price_list", 81 | "fieldtype": "Link", 82 | "label": "Price List", 83 | "options": "Price List" 84 | } 85 | ], 86 | "index_web_pages_for_search": 1, 87 | "links": [], 88 | "modified": "2021-06-30 13:51:16.187645", 89 | "modified_by": "Administrator", 90 | "module": "Service Management", 91 | "name": "Service Template", 92 | "owner": "Administrator", 93 | "permissions": [ 94 | { 95 | "create": 1, 96 | "delete": 1, 97 | "email": 1, 98 | "export": 1, 99 | "print": 1, 100 | "read": 1, 101 | "report": 1, 102 | "role": "System Manager", 103 | "share": 1, 104 | "write": 1 105 | } 106 | ], 107 | "sort_field": "modified", 108 | "sort_order": "DESC", 109 | "track_changes": 1 110 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/supplied_parts/supplied_parts.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "creation": "2021-06-25 19:29:58.986551", 4 | "doctype": "DocType", 5 | "engine": "InnoDB", 6 | "field_order": [ 7 | "item", 8 | "item_name", 9 | "spare", 10 | "qty", 11 | "rate", 12 | "is_billable", 13 | "stock_entry", 14 | "column_break_1", 15 | "is_return", 16 | "qty_returned", 17 | "return_stock_enty" 18 | ], 19 | "fields": [ 20 | { 21 | "depends_on": "eval: !parent.use_spare_not_item;", 22 | "fieldname": "item", 23 | "fieldtype": "Link", 24 | "in_list_view": 1, 25 | "label": "Item", 26 | "mandatory_depends_on": "eval: !parent.use_spare_not_item;", 27 | "options": "Item" 28 | }, 29 | { 30 | "fieldname": "qty", 31 | "fieldtype": "Int", 32 | "in_list_view": 1, 33 | "label": "Qty", 34 | "reqd": 1 35 | }, 36 | { 37 | "fieldname": "rate", 38 | "fieldtype": "Currency", 39 | "in_list_view": 1, 40 | "label": "Rate" 41 | }, 42 | { 43 | "allow_on_submit": 1, 44 | "default": "0", 45 | "fieldname": "is_billable", 46 | "fieldtype": "Check", 47 | "in_list_view": 1, 48 | "label": "Is billable" 49 | }, 50 | { 51 | "allow_on_submit": 1, 52 | "fieldname": "stock_entry", 53 | "fieldtype": "Link", 54 | "in_list_view": 1, 55 | "label": "Stock Entry", 56 | "options": "Stock Entry" 57 | }, 58 | { 59 | "fieldname": "column_break_1", 60 | "fieldtype": "Column Break" 61 | }, 62 | { 63 | "allow_on_submit": 1, 64 | "default": "0", 65 | "fieldname": "is_return", 66 | "fieldtype": "Check", 67 | "in_list_view": 1, 68 | "label": "Is Return", 69 | "read_only": 1 70 | }, 71 | { 72 | "fieldname": "return_stock_enty", 73 | "fieldtype": "Link", 74 | "in_list_view": 1, 75 | "label": "Return Stock Entry", 76 | "options": "Stock Entry", 77 | "read_only": 1, 78 | "report_hide": 1 79 | }, 80 | { 81 | "fieldname": "qty_returned", 82 | "fieldtype": "Int", 83 | "label": "Qty Returned", 84 | "read_only": 1 85 | }, 86 | { 87 | "depends_on": "eval: parent.use_spare_not_item", 88 | "fieldname": "spare", 89 | "fieldtype": "Link", 90 | "in_list_view": 1, 91 | "label": "Spare", 92 | "mandatory_depends_on": "eval: parent.use_spare_not_item", 93 | "options": "Spare" 94 | }, 95 | { 96 | "fetch_from": "item.item_name", 97 | "fieldname": "item_name", 98 | "fieldtype": "Data", 99 | "label": "Item Name", 100 | "read_only": 1 101 | } 102 | ], 103 | "index_web_pages_for_search": 1, 104 | "istable": 1, 105 | "links": [], 106 | "modified": "2022-11-28 16:38:39.212740", 107 | "modified_by": "Administrator", 108 | "module": "Service Management", 109 | "name": "Supplied Parts", 110 | "owner": "Administrator", 111 | "permissions": [], 112 | "sort_field": "modified", 113 | "sort_order": "DESC", 114 | "track_changes": 1 115 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle/service_vehicle.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "field:registration_number", 4 | "creation": "2021-05-26 18:56:54.116049", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "registration_number", 10 | "customer", 11 | "column_break_3", 12 | "mobile_no", 13 | "section_break_3", 14 | "vehicle_model", 15 | "column_break_5", 16 | "make", 17 | "type", 18 | "sold_by", 19 | "section_break_8", 20 | "vin", 21 | "engine_number", 22 | "column_break_10", 23 | "chassis_number" 24 | ], 25 | "fields": [ 26 | { 27 | "fieldname": "registration_number", 28 | "fieldtype": "Data", 29 | "in_list_view": 1, 30 | "label": "Registration Number", 31 | "reqd": 1, 32 | "unique": 1 33 | }, 34 | { 35 | "fieldname": "customer", 36 | "fieldtype": "Link", 37 | "in_list_view": 1, 38 | "label": "Customer", 39 | "options": "Customer", 40 | "reqd": 1 41 | }, 42 | { 43 | "fieldname": "vehicle_model", 44 | "fieldtype": "Link", 45 | "in_list_view": 1, 46 | "label": "Vehicle Model", 47 | "options": "Vehicle Model", 48 | "reqd": 1 49 | }, 50 | { 51 | "fieldname": "engine_number", 52 | "fieldtype": "Data", 53 | "label": "Engine Number" 54 | }, 55 | { 56 | "fieldname": "chassis_number", 57 | "fieldtype": "Data", 58 | "label": "Chassis Number" 59 | }, 60 | { 61 | "fetch_from": "vehicle_model.make", 62 | "fieldname": "make", 63 | "fieldtype": "Data", 64 | "label": "Make", 65 | "read_only": 1 66 | }, 67 | { 68 | "fetch_from": "vehicle_model.type", 69 | "fieldname": "type", 70 | "fieldtype": "Data", 71 | "label": "Type", 72 | "read_only": 1 73 | }, 74 | { 75 | "fieldname": "section_break_3", 76 | "fieldtype": "Section Break" 77 | }, 78 | { 79 | "fieldname": "column_break_5", 80 | "fieldtype": "Column Break" 81 | }, 82 | { 83 | "fieldname": "section_break_8", 84 | "fieldtype": "Section Break" 85 | }, 86 | { 87 | "fieldname": "column_break_10", 88 | "fieldtype": "Column Break" 89 | }, 90 | { 91 | "fieldname": "sold_by", 92 | "fieldtype": "Link", 93 | "label": "Sold by", 94 | "options": "Sold By" 95 | }, 96 | { 97 | "fieldname": "column_break_3", 98 | "fieldtype": "Column Break" 99 | }, 100 | { 101 | "fetch_from": "customer.mobile_no", 102 | "fieldname": "mobile_no", 103 | "fieldtype": "Data", 104 | "label": "Mobile No", 105 | "read_only": 1 106 | }, 107 | { 108 | "fieldname": "vin", 109 | "fieldtype": "Data", 110 | "label": "VIN" 111 | } 112 | ], 113 | "index_web_pages_for_search": 1, 114 | "links": [], 115 | "modified": "2022-10-20 12:29:44.525540", 116 | "modified_by": "Administrator", 117 | "module": "Service Management", 118 | "name": "Service Vehicle", 119 | "owner": "Administrator", 120 | "permissions": [ 121 | { 122 | "create": 1, 123 | "delete": 1, 124 | "email": 1, 125 | "export": 1, 126 | "print": 1, 127 | "read": 1, 128 | "report": 1, 129 | "role": "System Manager", 130 | "share": 1, 131 | "write": 1 132 | } 133 | ], 134 | "sort_field": "modified", 135 | "sort_order": "DESC", 136 | "track_changes": 1 137 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/spare/spare.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_guest_to_view": 1, 4 | "allow_import": 1, 5 | "allow_rename": 1, 6 | "autoname": "field:item_code", 7 | "creation": "2022-11-17 22:04:50.933251", 8 | "description": "A Product or a Service that is bought, sold or kept in stock.", 9 | "doctype": "DocType", 10 | "document_type": "Setup", 11 | "editable_grid": 1, 12 | "engine": "InnoDB", 13 | "field_order": [ 14 | "name_and_description_section", 15 | "item_code", 16 | "item_name", 17 | "item_group", 18 | "stock_uom", 19 | "column_break0", 20 | "disabled", 21 | "image", 22 | "section_break_11", 23 | "brand", 24 | "description" 25 | ], 26 | "fields": [ 27 | { 28 | "fieldname": "name_and_description_section", 29 | "fieldtype": "Section Break", 30 | "oldfieldtype": "Section Break", 31 | "options": "fa fa-flag" 32 | }, 33 | { 34 | "bold": 1, 35 | "fieldname": "item_code", 36 | "fieldtype": "Data", 37 | "in_global_search": 1, 38 | "label": "Item Code", 39 | "oldfieldname": "item_code", 40 | "oldfieldtype": "Data", 41 | "reqd": 1, 42 | "unique": 1 43 | }, 44 | { 45 | "bold": 1, 46 | "fieldname": "item_name", 47 | "fieldtype": "Data", 48 | "in_global_search": 1, 49 | "label": "Item Name", 50 | "oldfieldname": "item_name", 51 | "oldfieldtype": "Data", 52 | "search_index": 1 53 | }, 54 | { 55 | "fieldname": "item_group", 56 | "fieldtype": "Link", 57 | "in_list_view": 1, 58 | "in_preview": 1, 59 | "in_standard_filter": 1, 60 | "label": "Item Group", 61 | "oldfieldname": "item_group", 62 | "oldfieldtype": "Link", 63 | "options": "Item Group", 64 | "reqd": 1, 65 | "search_index": 1 66 | }, 67 | { 68 | "fieldname": "stock_uom", 69 | "fieldtype": "Link", 70 | "ignore_user_permissions": 1, 71 | "label": "Default Unit of Measure", 72 | "oldfieldname": "stock_uom", 73 | "oldfieldtype": "Link", 74 | "options": "UOM", 75 | "reqd": 1 76 | }, 77 | { 78 | "fieldname": "column_break0", 79 | "fieldtype": "Column Break" 80 | }, 81 | { 82 | "default": "0", 83 | "fieldname": "disabled", 84 | "fieldtype": "Check", 85 | "label": "Disabled" 86 | }, 87 | { 88 | "fieldname": "image", 89 | "fieldtype": "Attach Image", 90 | "hidden": 1, 91 | "in_preview": 1, 92 | "label": "Image", 93 | "options": "image", 94 | "print_hide": 1 95 | }, 96 | { 97 | "collapsible": 1, 98 | "fieldname": "section_break_11", 99 | "fieldtype": "Section Break", 100 | "label": "Description" 101 | }, 102 | { 103 | "fieldname": "brand", 104 | "fieldtype": "Link", 105 | "label": "Brand", 106 | "oldfieldname": "brand", 107 | "oldfieldtype": "Link", 108 | "options": "Brand", 109 | "print_hide": 1 110 | }, 111 | { 112 | "fieldname": "description", 113 | "fieldtype": "Text Editor", 114 | "in_preview": 1, 115 | "label": "Description", 116 | "oldfieldname": "description", 117 | "oldfieldtype": "Text" 118 | } 119 | ], 120 | "icon": "fa fa-tag", 121 | "image_field": "image", 122 | "index_web_pages_for_search": 1, 123 | "links": [], 124 | "modified": "2022-11-28 09:30:13.695541", 125 | "modified_by": "Administrator", 126 | "module": "Service Management", 127 | "name": "Spare", 128 | "owner": "Administrator", 129 | "permissions": [ 130 | { 131 | "create": 1, 132 | "delete": 1, 133 | "email": 1, 134 | "export": 1, 135 | "import": 1, 136 | "print": 1, 137 | "read": 1, 138 | "report": 1, 139 | "role": "Item Manager", 140 | "share": 1, 141 | "write": 1 142 | } 143 | ], 144 | "quick_entry": 1, 145 | "search_fields": "item_name,description,item_group", 146 | "show_name_in_global_search": 1, 147 | "show_preview_popup": 1, 148 | "sort_field": "modified", 149 | "sort_order": "DESC", 150 | "title_field": "item_name", 151 | "track_changes": 1 152 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry_detail/service_parts_entry_detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "hash", 4 | "creation": "2022-04-03 18:59:11.725882", 5 | "doctype": "DocType", 6 | "document_type": "Other", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "barcode", 11 | "sec_break1", 12 | "item_code", 13 | "col_break2", 14 | "quantity_section", 15 | "qty", 16 | "rates_section", 17 | "basic_rate", 18 | "col_break3", 19 | "amount", 20 | "more_info", 21 | "actual_qty", 22 | "transferred_qty", 23 | "main_service_parts_entry", 24 | "column_break_51", 25 | "service_job_card_item" 26 | ], 27 | "fields": [ 28 | { 29 | "fieldname": "barcode", 30 | "fieldtype": "Data", 31 | "label": "Barcode" 32 | }, 33 | { 34 | "fieldname": "sec_break1", 35 | "fieldtype": "Section Break" 36 | }, 37 | { 38 | "bold": 1, 39 | "fieldname": "item_code", 40 | "fieldtype": "Link", 41 | "in_global_search": 1, 42 | "in_list_view": 1, 43 | "label": "Item Code", 44 | "oldfieldname": "item_code", 45 | "oldfieldtype": "Link", 46 | "options": "Item", 47 | "reqd": 1, 48 | "search_index": 1 49 | }, 50 | { 51 | "fieldname": "col_break2", 52 | "fieldtype": "Column Break" 53 | }, 54 | { 55 | "fieldname": "quantity_section", 56 | "fieldtype": "Section Break", 57 | "label": "Quantity" 58 | }, 59 | { 60 | "bold": 1, 61 | "fieldname": "qty", 62 | "fieldtype": "Float", 63 | "in_list_view": 1, 64 | "label": "Qty", 65 | "oldfieldname": "qty", 66 | "oldfieldtype": "Currency", 67 | "reqd": 1 68 | }, 69 | { 70 | "fieldname": "rates_section", 71 | "fieldtype": "Section Break", 72 | "label": "Rates" 73 | }, 74 | { 75 | "bold": 1, 76 | "fieldname": "basic_rate", 77 | "fieldtype": "Currency", 78 | "in_list_view": 1, 79 | "label": "Basic Rate (as per Stock UOM)", 80 | "oldfieldname": "incoming_rate", 81 | "oldfieldtype": "Currency", 82 | "options": "Company:company:default_currency", 83 | "print_hide": 1 84 | }, 85 | { 86 | "fieldname": "col_break3", 87 | "fieldtype": "Column Break" 88 | }, 89 | { 90 | "fieldname": "amount", 91 | "fieldtype": "Currency", 92 | "label": "Amount", 93 | "oldfieldname": "amount", 94 | "oldfieldtype": "Currency", 95 | "options": "Company:company:default_currency", 96 | "read_only": 1 97 | }, 98 | { 99 | "collapsible": 1, 100 | "fieldname": "more_info", 101 | "fieldtype": "Section Break", 102 | "label": "More Information" 103 | }, 104 | { 105 | "allow_on_submit": 1, 106 | "fieldname": "actual_qty", 107 | "fieldtype": "Float", 108 | "label": "Actual Qty (at source/target)", 109 | "no_copy": 1, 110 | "oldfieldname": "actual_qty", 111 | "oldfieldtype": "Read Only", 112 | "print_hide": 1, 113 | "read_only": 1, 114 | "search_index": 1 115 | }, 116 | { 117 | "allow_on_submit": 1, 118 | "fieldname": "transferred_qty", 119 | "fieldtype": "Float", 120 | "label": "Transferred Qty", 121 | "no_copy": 1, 122 | "print_hide": 1, 123 | "read_only": 1 124 | }, 125 | { 126 | "fieldname": "main_service_parts_entry", 127 | "fieldtype": "Data", 128 | "label": "Main Service Parts Entry", 129 | "no_copy": 1, 130 | "print_hide": 1, 131 | "read_only": 1 132 | }, 133 | { 134 | "fieldname": "column_break_51", 135 | "fieldtype": "Column Break" 136 | }, 137 | { 138 | "fieldname": "service_job_card_item", 139 | "fieldtype": "Data", 140 | "hidden": 1, 141 | "label": "Service Job Card Item", 142 | "no_copy": 1, 143 | "print_hide": 1, 144 | "read_only": 1 145 | } 146 | ], 147 | "index_web_pages_for_search": 1, 148 | "istable": 1, 149 | "links": [], 150 | "modified": "2022-04-03 18:59:11.725882", 151 | "modified_by": "Administrator", 152 | "module": "Service Management", 153 | "name": "Service Parts Entry Detail", 154 | "owner": "Administrator", 155 | "permissions": [], 156 | "sort_field": "modified", 157 | "sort_order": "ASC" 158 | } -------------------------------------------------------------------------------- /servicems/hooks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from . import __version__ as app_version 4 | 5 | app_name = "servicems" 6 | app_title = "servicems" 7 | app_publisher = "Aakvatech Limited" 8 | app_description = "Service Management System for ERPNext" 9 | app_icon = "octicon octicon-file-directory" 10 | app_color = "grey" 11 | app_email = "info@aakvatech.com" 12 | app_license = "MIT" 13 | 14 | # Includes in 15 | # ------------------ 16 | 17 | # include js, css files in header of desk.html 18 | # app_include_css = "/assets/servicems/css/servicems.css" 19 | # app_include_js = "/assets/servicems/js/servicems.js" 20 | 21 | # include js, css files in header of web template 22 | # web_include_css = "/assets/servicems/css/servicems.css" 23 | # web_include_js = "/assets/servicems/js/servicems.js" 24 | 25 | # include custom scss in every website theme (without file extension ".scss") 26 | # website_theme_scss = "servicems/public/scss/website" 27 | 28 | # include js, css files in header of web form 29 | # webform_include_js = {"doctype": "public/js/doctype.js"} 30 | # webform_include_css = {"doctype": "public/css/doctype.css"} 31 | 32 | # include js in page 33 | # page_js = {"page" : "public/js/file.js"} 34 | 35 | # include js in doctype views 36 | # doctype_js = {"doctype" : "public/js/doctype.js"} 37 | # doctype_list_js = {"doctype" : "public/js/doctype_list.js"} 38 | # doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} 39 | # doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} 40 | 41 | # Home Pages 42 | # ---------- 43 | 44 | # application home page (will override Website Settings) 45 | # home_page = "login" 46 | 47 | # website user home page (by Role) 48 | # role_home_page = { 49 | # "Role": "home_page" 50 | # } 51 | 52 | # Generators 53 | # ---------- 54 | 55 | # automatically create page for each record of this doctype 56 | # website_generators = ["Web Page"] 57 | 58 | # Installation 59 | # ------------ 60 | 61 | # before_install = "servicems.install.before_install" 62 | # after_install = "servicems.install.after_install" 63 | 64 | # Desk Notifications 65 | # ------------------ 66 | # See frappe.core.notifications.get_notification_config 67 | 68 | # notification_config = "servicems.notifications.get_notification_config" 69 | 70 | # Permissions 71 | # ----------- 72 | # Permissions evaluated in scripted ways 73 | 74 | # permission_query_conditions = { 75 | # "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", 76 | # } 77 | # 78 | # has_permission = { 79 | # "Event": "frappe.desk.doctype.event.event.has_permission", 80 | # } 81 | 82 | # DocType Class 83 | # --------------- 84 | # Override standard doctype classes 85 | 86 | # override_doctype_class = { 87 | # "ToDo": "custom_app.overrides.CustomToDo" 88 | # } 89 | 90 | # Document Events 91 | # --------------- 92 | # Hook on document methods and events 93 | 94 | # doc_events = { 95 | # "*": { 96 | # "on_update": "method", 97 | # "on_cancel": "method", 98 | # "on_trash": "method" 99 | # } 100 | # } 101 | 102 | # Scheduled Tasks 103 | # --------------- 104 | 105 | # scheduler_events = { 106 | # "all": [ 107 | # "servicems.tasks.all" 108 | # ], 109 | # "daily": [ 110 | # "servicems.tasks.daily" 111 | # ], 112 | # "hourly": [ 113 | # "servicems.tasks.hourly" 114 | # ], 115 | # "weekly": [ 116 | # "servicems.tasks.weekly" 117 | # ] 118 | # "monthly": [ 119 | # "servicems.tasks.monthly" 120 | # ] 121 | # } 122 | 123 | # Testing 124 | # ------- 125 | 126 | # before_tests = "servicems.install.before_tests" 127 | 128 | # Overriding Methods 129 | # ------------------------------ 130 | # 131 | # override_whitelisted_methods = { 132 | # "frappe.desk.doctype.event.event.get_events": "servicems.event.get_events" 133 | # } 134 | # 135 | # each overriding function accepts a `data` argument; 136 | # generated from the base implementation of the doctype dashboard, 137 | # along with any modifications made in other Frappe apps 138 | # override_doctype_dashboards = { 139 | # "Task": "servicems.task.get_dashboard_data" 140 | # } 141 | 142 | # exempt linked doctypes from being automatically cancelled 143 | # 144 | # auto_cancel_exempted_doctypes = ["Auto Repeat"] 145 | 146 | 147 | # User Data Protection 148 | # -------------------- 149 | 150 | user_data_fields = [ 151 | { 152 | "doctype": "{doctype_1}", 153 | "filter_by": "{filter_by}", 154 | "redact_fields": ["{field_1}", "{field_2}"], 155 | "partial": 1, 156 | }, 157 | { 158 | "doctype": "{doctype_2}", 159 | "filter_by": "{filter_by}", 160 | "partial": 1, 161 | }, 162 | { 163 | "doctype": "{doctype_3}", 164 | "strict": False, 165 | }, 166 | { 167 | "doctype": "{doctype_4}" 168 | } 169 | ] 170 | 171 | # Authentication and authorization 172 | # -------------------------------- 173 | 174 | # auth_hooks = [ 175 | # "servicems.auth.validate" 176 | # ] 177 | 178 | -------------------------------------------------------------------------------- /servicems/service_management/workspace/service/service.json: -------------------------------------------------------------------------------- 1 | { 2 | "category": "Domains", 3 | "charts": [], 4 | "creation": "2021-05-17 09:00:54.955339", 5 | "developer_mode_only": 0, 6 | "disable_user_customization": 0, 7 | "docstatus": 0, 8 | "doctype": "Workspace", 9 | "extends_another_page": 0, 10 | "hide_custom": 1, 11 | "icon": "tool", 12 | "idx": 0, 13 | "is_default": 0, 14 | "is_standard": 1, 15 | "label": "Service", 16 | "links": [ 17 | { 18 | "hidden": 0, 19 | "is_query_report": 0, 20 | "label": "Job Cards", 21 | "link_type": "DocType", 22 | "onboard": 0, 23 | "type": "Card Break" 24 | }, 25 | { 26 | "hidden": 0, 27 | "is_query_report": 0, 28 | "label": "Service Job card", 29 | "link_to": "Service Job Card", 30 | "link_type": "DocType", 31 | "onboard": 0, 32 | "type": "Link" 33 | }, 34 | { 35 | "hidden": 0, 36 | "is_query_report": 0, 37 | "label": "Job Card Status", 38 | "link_to": "Job Card Status", 39 | "link_type": "DocType", 40 | "onboard": 0, 41 | "type": "Link" 42 | }, 43 | { 44 | "hidden": 0, 45 | "is_query_report": 0, 46 | "label": "Service Task Templates", 47 | "link_to": "Service Template", 48 | "link_type": "DocType", 49 | "onboard": 0, 50 | "type": "Link" 51 | }, 52 | { 53 | "hidden": 0, 54 | "is_query_report": 0, 55 | "label": "Vehicle", 56 | "link_type": "DocType", 57 | "onboard": 0, 58 | "type": "Card Break" 59 | }, 60 | { 61 | "hidden": 0, 62 | "is_query_report": 0, 63 | "label": "Service Vehicle", 64 | "link_to": "Service Vehicle", 65 | "link_type": "DocType", 66 | "onboard": 0, 67 | "type": "Link" 68 | }, 69 | { 70 | "hidden": 0, 71 | "is_query_report": 0, 72 | "label": "Vehicle Model", 73 | "link_to": "Vehicle Model", 74 | "link_type": "DocType", 75 | "onboard": 0, 76 | "type": "Link" 77 | }, 78 | { 79 | "hidden": 0, 80 | "is_query_report": 0, 81 | "label": "Vehicle Make", 82 | "link_to": "Vehicle Make", 83 | "link_type": "DocType", 84 | "onboard": 0, 85 | "type": "Link" 86 | }, 87 | { 88 | "hidden": 0, 89 | "is_query_report": 0, 90 | "label": "Vehicle Type", 91 | "link_to": "Service Vehicle Type", 92 | "link_type": "DocType", 93 | "onboard": 0, 94 | "type": "Link" 95 | }, 96 | { 97 | "hidden": 0, 98 | "is_query_report": 0, 99 | "label": "Sold by", 100 | "link_to": "Sold By", 101 | "link_type": "DocType", 102 | "onboard": 0, 103 | "type": "Link" 104 | }, 105 | { 106 | "hidden": 0, 107 | "is_query_report": 0, 108 | "label": "Services", 109 | "link_type": "DocType", 110 | "onboard": 0, 111 | "type": "Card Break" 112 | }, 113 | { 114 | "hidden": 0, 115 | "is_query_report": 0, 116 | "label": "Task", 117 | "link_to": "Service Task", 118 | "link_type": "DocType", 119 | "onboard": 0, 120 | "type": "Link" 121 | }, 122 | { 123 | "hidden": 0, 124 | "is_query_report": 0, 125 | "label": "Workshop", 126 | "link_to": "Service Workshop", 127 | "link_type": "DocType", 128 | "onboard": 0, 129 | "type": "Link" 130 | }, 131 | { 132 | "hidden": 0, 133 | "is_query_report": 0, 134 | "label": "Parts and Cosumables", 135 | "link_to": "Parts and Consumable", 136 | "link_type": "DocType", 137 | "onboard": 0, 138 | "type": "Link" 139 | }, 140 | { 141 | "hidden": 0, 142 | "is_query_report": 0, 143 | "label": "Inspection", 144 | "link_type": "DocType", 145 | "onboard": 0, 146 | "type": "Card Break" 147 | }, 148 | { 149 | "hidden": 0, 150 | "is_query_report": 0, 151 | "label": "Pre Inspection Template", 152 | "link_to": "Service Pre Inspection Template", 153 | "link_type": "DocType", 154 | "onboard": 0, 155 | "type": "Link" 156 | }, 157 | { 158 | "hidden": 0, 159 | "is_query_report": 0, 160 | "label": "Reports", 161 | "link_type": "DocType", 162 | "onboard": 0, 163 | "type": "Card Break" 164 | }, 165 | { 166 | "hidden": 0, 167 | "is_query_report": 1, 168 | "label": "Service Job Card Detail", 169 | "link_to": "Service Job Card Detail", 170 | "link_type": "Report", 171 | "onboard": 0, 172 | "only_for": "", 173 | "type": "Link" 174 | }, 175 | { 176 | "hidden": 0, 177 | "is_query_report": 0, 178 | "label": "Settings", 179 | "link_type": "DocType", 180 | "onboard": 0, 181 | "type": "Card Break" 182 | }, 183 | { 184 | "hidden": 0, 185 | "is_query_report": 0, 186 | "label": "Service Settings", 187 | "link_to": "Service Settings", 188 | "link_type": "DocType", 189 | "onboard": 0, 190 | "type": "Link" 191 | } 192 | ], 193 | "modified": "2022-03-24 12:36:40.817494", 194 | "modified_by": "Administrator", 195 | "module": "Service Management", 196 | "name": "Service", 197 | "owner": "Administrator", 198 | "pin_to_bottom": 0, 199 | "pin_to_top": 0, 200 | "shortcuts": [ 201 | { 202 | "doc_view": "List", 203 | "label": "Service Vehicle", 204 | "link_to": "Service Vehicle", 205 | "type": "DocType" 206 | }, 207 | { 208 | "doc_view": "List", 209 | "label": "Service Job Card", 210 | "link_to": "Service Job Card", 211 | "type": "DocType" 212 | } 213 | ] 214 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_vehicle_inspection/service_vehicle_inspection.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "autoname": "SVI.######", 4 | "creation": "2022-04-03 19:27:27.531081", 5 | "doctype": "DocType", 6 | "editable_grid": 1, 7 | "engine": "InnoDB", 8 | "field_order": [ 9 | "driver_name", 10 | "vehicle_plate_number", 11 | "trailer_no", 12 | "column_break_5", 13 | "date", 14 | "mileage", 15 | "checklist_section_break", 16 | "service_vehicle_type", 17 | "service_lighting_checklist_section", 18 | "service_lighting_checklist", 19 | "service_brake_system_checklist_section", 20 | "service_brake_checklist", 21 | "service_engine_checklist_section", 22 | "service_engine_checklist", 23 | "srevice_fuel_system_checklist_section", 24 | "service_fuel_system_checklist", 25 | "service_power_train_checklist_section", 26 | "service_power_train_checklist", 27 | "service_electronics_checklist_section", 28 | "service_electronics_checklist", 29 | "service_electrical_checklist_section", 30 | "service_electrical_checklist", 31 | "service_steering_checklist_section", 32 | "service_steering_checklist", 33 | "service_tyre_checklist_section", 34 | "service_tyre_checklist", 35 | "service_suspension_checklist_section", 36 | "service_suspension_checklist", 37 | "service_air_systemothers_checklist_section", 38 | "service_air_system_checklist", 39 | "image_upload" 40 | ], 41 | "fields": [ 42 | { 43 | "fetch_from": "trip_reference.driver", 44 | "fieldname": "driver_name", 45 | "fieldtype": "Data", 46 | "label": "Driver" 47 | }, 48 | { 49 | "fetch_from": "trip_reference.vehicle", 50 | "fieldname": "vehicle_plate_number", 51 | "fieldtype": "Data", 52 | "label": "Vehicle Plate No" 53 | }, 54 | { 55 | "fetch_from": "trip_reference.trailer", 56 | "fieldname": "trailer_no", 57 | "fieldtype": "Data", 58 | "label": "Trailer No", 59 | "read_only": 1 60 | }, 61 | { 62 | "fieldname": "column_break_5", 63 | "fieldtype": "Column Break" 64 | }, 65 | { 66 | "fieldname": "date", 67 | "fieldtype": "Date", 68 | "label": "Date" 69 | }, 70 | { 71 | "fieldname": "mileage", 72 | "fieldtype": "Data", 73 | "label": "Mileage" 74 | }, 75 | { 76 | "fieldname": "checklist_section_break", 77 | "fieldtype": "Section Break", 78 | "label": "Routine Checklist" 79 | }, 80 | { 81 | "fieldname": "service_vehicle_type", 82 | "fieldtype": "Link", 83 | "label": "Service Vehicle Type", 84 | "options": "Service Vehicle Type" 85 | }, 86 | { 87 | "fieldname": "service_lighting_checklist_section", 88 | "fieldtype": "Section Break", 89 | "label": "Lighting Checklist" 90 | }, 91 | { 92 | "fieldname": "service_lighting_checklist", 93 | "fieldtype": "Table", 94 | "options": "Service Lighting Checklist" 95 | }, 96 | { 97 | "fieldname": "service_brake_system_checklist_section", 98 | "fieldtype": "Section Break", 99 | "label": "Brake System Checklist" 100 | }, 101 | { 102 | "fieldname": "service_brake_checklist", 103 | "fieldtype": "Table", 104 | "options": "Service Brake Checklist" 105 | }, 106 | { 107 | "fieldname": "service_engine_checklist_section", 108 | "fieldtype": "Section Break", 109 | "label": "Engine Checklist" 110 | }, 111 | { 112 | "fieldname": "service_engine_checklist", 113 | "fieldtype": "Table", 114 | "options": "Service Engine Checklist" 115 | }, 116 | { 117 | "fieldname": "srevice_fuel_system_checklist_section", 118 | "fieldtype": "Section Break", 119 | "label": "Fuel System Checklist" 120 | }, 121 | { 122 | "fieldname": "service_fuel_system_checklist", 123 | "fieldtype": "Table", 124 | "options": "Service Fuel System Checklist" 125 | }, 126 | { 127 | "fieldname": "service_power_train_checklist_section", 128 | "fieldtype": "Section Break", 129 | "label": "Power Train Checklist" 130 | }, 131 | { 132 | "fieldname": "service_power_train_checklist", 133 | "fieldtype": "Table", 134 | "options": "Service Power Train Checklist" 135 | }, 136 | { 137 | "fieldname": "service_electronics_checklist_section", 138 | "fieldtype": "Section Break", 139 | "label": "Electronics Checklist" 140 | }, 141 | { 142 | "fieldname": "service_electronics_checklist", 143 | "fieldtype": "Table", 144 | "options": "Service Electronics Checklist" 145 | }, 146 | { 147 | "fieldname": "service_electrical_checklist_section", 148 | "fieldtype": "Section Break", 149 | "label": "Electrical Checklist" 150 | }, 151 | { 152 | "fieldname": "service_electrical_checklist", 153 | "fieldtype": "Table", 154 | "options": "Service Electrical Checklist" 155 | }, 156 | { 157 | "fieldname": "service_steering_checklist_section", 158 | "fieldtype": "Section Break", 159 | "label": "Steering Checklist" 160 | }, 161 | { 162 | "fieldname": "service_steering_checklist", 163 | "fieldtype": "Table", 164 | "options": "Service Steering Checklist" 165 | }, 166 | { 167 | "fieldname": "service_tyre_checklist_section", 168 | "fieldtype": "Section Break", 169 | "label": "Tyre Checklist" 170 | }, 171 | { 172 | "fieldname": "service_tyre_checklist", 173 | "fieldtype": "Table", 174 | "options": "Service Tyre Checklist" 175 | }, 176 | { 177 | "fieldname": "service_suspension_checklist_section", 178 | "fieldtype": "Section Break", 179 | "label": "Suspension Checklist" 180 | }, 181 | { 182 | "fieldname": "service_suspension_checklist", 183 | "fieldtype": "Table", 184 | "options": "Service Suspension Checklist" 185 | }, 186 | { 187 | "fieldname": "service_air_systemothers_checklist_section", 188 | "fieldtype": "Section Break", 189 | "label": "Air System/Others Checklist" 190 | }, 191 | { 192 | "fieldname": "service_air_system_checklist", 193 | "fieldtype": "Table", 194 | "options": "Service Air System Checklist" 195 | }, 196 | { 197 | "fieldname": "image_upload", 198 | "fieldtype": "Attach Image", 199 | "label": "Upload Respective Vehicle Image" 200 | } 201 | ], 202 | "links": [], 203 | "modified": "2022-04-03 19:27:27.531081", 204 | "modified_by": "Administrator", 205 | "module": "Service Management", 206 | "name": "Service Vehicle Inspection", 207 | "owner": "Administrator", 208 | "permissions": [ 209 | { 210 | "create": 1, 211 | "delete": 1, 212 | "email": 1, 213 | "export": 1, 214 | "print": 1, 215 | "read": 1, 216 | "report": 1, 217 | "role": "System Manager", 218 | "share": 1, 219 | "write": 1 220 | } 221 | ], 222 | "search_fields": "service_vehicle_type,driver_name,vehicle_plate_number", 223 | "sort_field": "modified", 224 | "sort_order": "DESC", 225 | "title_field": "vehicle_plate_number", 226 | "track_changes": 1 227 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_parts_entry/service_parts_entry.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_import": 1, 4 | "autoname": "naming_series:", 5 | "creation": "2022-04-03 16:23:15.579598", 6 | "doctype": "DocType", 7 | "document_type": "Document", 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "items_section", 11 | "naming_series", 12 | "company", 13 | "col2", 14 | "posting_date", 15 | "posting_time", 16 | "set_posting_time", 17 | "sb0", 18 | "scan_barcode", 19 | "items", 20 | "accounting_dimensions_section", 21 | "department", 22 | "dimension_col_break", 23 | "printing_settings", 24 | "select_print_heading", 25 | "print_settings_col_break", 26 | "letter_head", 27 | "more_info", 28 | "remarks", 29 | "col5", 30 | "per_transferred", 31 | "service_job_card", 32 | "is_return", 33 | "amended_from" 34 | ], 35 | "fields": [ 36 | { 37 | "fieldname": "items_section", 38 | "fieldtype": "Section Break", 39 | "oldfieldtype": "Section Break" 40 | }, 41 | { 42 | "fieldname": "naming_series", 43 | "fieldtype": "Select", 44 | "label": "Series", 45 | "no_copy": 1, 46 | "oldfieldname": "naming_series", 47 | "oldfieldtype": "Select", 48 | "options": "ServMS-PTE-.YYYY.-", 49 | "print_hide": 1, 50 | "reqd": 1, 51 | "set_only_once": 1 52 | }, 53 | { 54 | "fieldname": "company", 55 | "fieldtype": "Link", 56 | "label": "Company", 57 | "oldfieldname": "company", 58 | "oldfieldtype": "Link", 59 | "options": "Company", 60 | "print_hide": 1, 61 | "remember_last_selected_value": 1, 62 | "reqd": 1 63 | }, 64 | { 65 | "fieldname": "col2", 66 | "fieldtype": "Column Break", 67 | "oldfieldtype": "Column Break", 68 | "print_width": "50%", 69 | "width": "50%" 70 | }, 71 | { 72 | "default": "Today", 73 | "fieldname": "posting_date", 74 | "fieldtype": "Date", 75 | "label": "Posting Date", 76 | "no_copy": 1, 77 | "oldfieldname": "posting_date", 78 | "oldfieldtype": "Date", 79 | "search_index": 1 80 | }, 81 | { 82 | "fieldname": "posting_time", 83 | "fieldtype": "Time", 84 | "label": "Posting Time", 85 | "no_copy": 1, 86 | "oldfieldname": "posting_time", 87 | "oldfieldtype": "Time", 88 | "print_hide": 1 89 | }, 90 | { 91 | "default": "0", 92 | "depends_on": "eval:doc.docstatus==0", 93 | "fieldname": "set_posting_time", 94 | "fieldtype": "Check", 95 | "label": "Edit Posting Date and Time", 96 | "print_hide": 1 97 | }, 98 | { 99 | "fieldname": "sb0", 100 | "fieldtype": "Section Break", 101 | "options": "Simple" 102 | }, 103 | { 104 | "fieldname": "scan_barcode", 105 | "fieldtype": "Data", 106 | "hidden": 1, 107 | "label": "Scan Barcode", 108 | "options": "Barcode" 109 | }, 110 | { 111 | "allow_bulk_edit": 1, 112 | "fieldname": "items", 113 | "fieldtype": "Table", 114 | "label": "Items", 115 | "oldfieldname": "mtn_details", 116 | "oldfieldtype": "Table", 117 | "options": "Service Parts Entry Detail", 118 | "reqd": 1 119 | }, 120 | { 121 | "collapsible": 1, 122 | "fieldname": "accounting_dimensions_section", 123 | "fieldtype": "Section Break", 124 | "label": "Accounting Dimensions" 125 | }, 126 | { 127 | "fieldname": "department", 128 | "fieldtype": "Link", 129 | "label": "Department", 130 | "oldfieldtype": "Link", 131 | "options": "Department" 132 | }, 133 | { 134 | "fieldname": "dimension_col_break", 135 | "fieldtype": "Column Break" 136 | }, 137 | { 138 | "collapsible": 1, 139 | "fieldname": "printing_settings", 140 | "fieldtype": "Section Break", 141 | "label": "Printing Settings" 142 | }, 143 | { 144 | "allow_on_submit": 1, 145 | "fieldname": "select_print_heading", 146 | "fieldtype": "Link", 147 | "label": "Print Heading", 148 | "oldfieldname": "select_print_heading", 149 | "oldfieldtype": "Link", 150 | "options": "Print Heading" 151 | }, 152 | { 153 | "fieldname": "print_settings_col_break", 154 | "fieldtype": "Column Break" 155 | }, 156 | { 157 | "fieldname": "letter_head", 158 | "fieldtype": "Link", 159 | "label": "Letter Head", 160 | "options": "Letter Head" 161 | }, 162 | { 163 | "collapsible": 1, 164 | "fieldname": "more_info", 165 | "fieldtype": "Section Break", 166 | "label": "More Information", 167 | "oldfieldtype": "Section Break" 168 | }, 169 | { 170 | "fieldname": "remarks", 171 | "fieldtype": "Text", 172 | "label": "Remarks", 173 | "no_copy": 1, 174 | "oldfieldname": "remarks", 175 | "oldfieldtype": "Text", 176 | "print_hide": 1 177 | }, 178 | { 179 | "fieldname": "col5", 180 | "fieldtype": "Column Break", 181 | "print_width": "50%", 182 | "width": "50%" 183 | }, 184 | { 185 | "fieldname": "per_transferred", 186 | "fieldtype": "Percent", 187 | "in_list_view": 1, 188 | "label": "Per Transferred", 189 | "no_copy": 1, 190 | "print_hide": 1, 191 | "read_only": 1 192 | }, 193 | { 194 | "fieldname": "service_job_card", 195 | "fieldtype": "Link", 196 | "label": "Service Job Card", 197 | "options": "Service Job Card", 198 | "print_hide": 1, 199 | "read_only": 1 200 | }, 201 | { 202 | "default": "0", 203 | "fieldname": "is_return", 204 | "fieldtype": "Check", 205 | "hidden": 1, 206 | "label": "Is Return", 207 | "no_copy": 1, 208 | "print_hide": 1, 209 | "read_only": 1 210 | }, 211 | { 212 | "fieldname": "amended_from", 213 | "fieldtype": "Link", 214 | "label": "Amended From", 215 | "no_copy": 1, 216 | "options": "Service Parts Entry", 217 | "print_hide": 1, 218 | "read_only": 1 219 | } 220 | ], 221 | "icon": "fa fa-file-text", 222 | "index_web_pages_for_search": 1, 223 | "is_submittable": 1, 224 | "links": [], 225 | "modified": "2022-04-03 22:43:14.600285", 226 | "modified_by": "Administrator", 227 | "module": "Service Management", 228 | "name": "Service Parts Entry", 229 | "owner": "Administrator", 230 | "permissions": [ 231 | { 232 | "amend": 1, 233 | "cancel": 1, 234 | "create": 1, 235 | "delete": 1, 236 | "email": 1, 237 | "print": 1, 238 | "read": 1, 239 | "report": 1, 240 | "role": "Stock User", 241 | "share": 1, 242 | "submit": 1, 243 | "write": 1 244 | }, 245 | { 246 | "amend": 1, 247 | "cancel": 1, 248 | "create": 1, 249 | "delete": 1, 250 | "email": 1, 251 | "export": 1, 252 | "import": 1, 253 | "print": 1, 254 | "read": 1, 255 | "report": 1, 256 | "role": "Stock Manager", 257 | "set_user_permissions": 1, 258 | "share": 1, 259 | "submit": 1, 260 | "write": 1 261 | } 262 | ], 263 | "search_fields": "posting_date, remarks", 264 | "show_name_in_global_search": 1, 265 | "sort_field": "modified", 266 | "sort_order": "DESC", 267 | "title_field": "service_job_card", 268 | "track_changes": 1 269 | } -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/service_job_card.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Aakvatech Limited and contributors 2 | // For license information, please see license.txt 3 | 4 | frappe.ui.form.on('Service Job Card', { 5 | onload: function (frm) { 6 | setMatrialBtn(frm); 7 | 8 | }, 9 | refresh: function (frm) { 10 | setMatrialBtn(frm); 11 | cur_frm.set_query("item", "parts", () => { 12 | return { 13 | query: "servicems.service_management.doctype.service_settings.service_settings.get_filtered_items", 14 | }; 15 | }); 16 | }, 17 | 18 | unbill_item: function (frm) { 19 | if (frm.doc.docstatus == 0) { 20 | frappe.call("servicems.service_management.doctype.service_job_card.service_job_card.get_all_supplied_parts", { 21 | job_card: frm.doc.name 22 | }).then(records => { 23 | var data = records.message; 24 | if (data.length > 0){ 25 | let d = new frappe.ui.Dialog({ 26 | title: "Select Item to Unbill", 27 | fields: [ 28 | { 29 | fieldname: "open_space", 30 | fieldtype: "HTML", 31 | } 32 | ], 33 | 34 | }); 35 | 36 | let html = ` 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | ` 61 | 62 | data.forEach(row => { 63 | html += ` 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | ` 75 | }); 76 | html += `
S/NItemItem NameRateQtyQty to Return
${row.idx}${row.item}${row.item_name}${row.rate}${row.qty}
` 77 | 78 | let wrapper = d.fields_dict.open_space.$wrapper 79 | 80 | wrapper.html(html); 81 | 82 | wrapper.find("table").hover(function() { 83 | get_qty_to_return(wrapper); 84 | }); 85 | 86 | d.set_primary_action(__("Select Item"), function() { 87 | let items = []; 88 | 89 | wrapper.find('tr:has(input:checkbox:checked)').each(function() { 90 | items.push({ 91 | "item": $(this).find("#item").attr("data-item"), 92 | "item_name": $(this).find("#item_name").attr("data-item_name"), 93 | "stock_entry": $(this).find("#stock_entry").attr("data-stock_entry"), 94 | "rate": $(this).find("#rate").attr("data-rate"), 95 | "parent": $(this).find("#parent").attr("data-parent"), 96 | "qty": $(this).find("#qty").attr("data-qty"), 97 | "parenttype": $(this).find("#parenttype").attr("data-parenttype"), 98 | "qty_to_return": $(this).find("#parenttype").attr("data-qty_to_return") 99 | }); 100 | }); 101 | 102 | if (items.length > 0) { 103 | frappe.call("servicems.service_management.doctype.service_job_card.service_job_card.get_selected_items", { 104 | items: items 105 | }).then(r => { 106 | frm.reload_doc() 107 | }); 108 | d.hide(); 109 | 110 | } else { 111 | frappe.msgprint({ 112 | title: __('Message'), 113 | indicator: 'red', 114 | message: __( 115 | '

\ 116 | No any Item selected

' 117 | ) 118 | }); 119 | } 120 | }); 121 | d.$wrapper.find('.modal-content').css({ 122 | "width": "900px", 123 | "max-height": "1500px", 124 | "overflow-y": "auto", 125 | "display": "table-cell", 126 | "text-align": "left" 127 | }); 128 | 129 | d.show(); 130 | 131 | } else { 132 | let d = new frappe.ui.Dialog({ 133 | title: "Select Items Unbill", 134 | fields: [{fieldname: "html",fieldtype: "HTML"}] 135 | }); 136 | d.fields_dict.html.$wrapper.append(`
138 | 139 | 140 |

141 | No Item(s) to unbill

142 |
143 |
`); 144 | d.show() 145 | }; 146 | }); 147 | } 148 | } 149 | }); 150 | 151 | 152 | const setMatrialBtn = frm => { 153 | if (!frm.is_dirty() && frm.doc.docstatus == 0) { 154 | frm.add_custom_button('Create Stock Entry', () => { 155 | createStockEntry(frm); 156 | }); 157 | } 158 | else { 159 | frm.remove_custom_button('Create Stock Entry'); 160 | } 161 | }; 162 | 163 | const createStockEntry = async function (frm) { 164 | if (frm.is_dirty()) { 165 | await frm.save(); 166 | } 167 | frm.call('create_stock_entry', { type: "call" }) 168 | .then(r => { 169 | frm.reload_doc(); 170 | }); 171 | }; 172 | 173 | var get_qty_to_return = function(wrapper) { 174 | $.each(wrapper.find("tr:has(input:checkbox)"), function(index, row) { 175 | $(this).on("click", "input:checkbox", function() { 176 | if ($("input:checkbox").is(":checked") == true) { 177 | if ($(this).parent().siblings().last().html() == "") { 178 | $("") 179 | .appendTo($(this).parent().siblings().last()); 180 | 181 | $("#return").focusout("input", function() { 182 | let row_qty = $(this).parent().siblings().eq(-2).text(); 183 | 184 | if (parseInt($("#return").val()) <= parseInt(row_qty) && parseInt($("#return").val()) > 0) { 185 | // store data to qty_to_return 186 | $(this).parent().siblings().last().attr("data-qty_to_return", $("#return").val()) 187 | $("#return").css("border", "1px solid blue"); 188 | 189 | } else { 190 | $("#return").css({ "border": "4px solid red", "font-weight": "bold" }).val(""); 191 | frappe.msgprint({ 192 | title: __('Message'), 193 | indicator: 'red', 194 | message: __( 195 | '

\ 196 | Qty to return cannot be Negative, cannot be Zero(0) or Empty
\ 197 | and cannot be greater than Qty

' 198 | ) 199 | }); 200 | }; 201 | }); 202 | } 203 | } else { 204 | $(this).parent().siblings().last().html(""); 205 | } 206 | }); 207 | }); 208 | }; -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/service_job_card.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Aakvatech Limited and contributors 2 | # For license information, please see license.txt 3 | 4 | import frappe 5 | from frappe.website.website_generator import WebsiteGenerator 6 | from frappe import _ 7 | from frappe.utils import nowdate, nowtime, cint 8 | import json 9 | 10 | 11 | class ServiceJobCard(WebsiteGenerator): 12 | def validate(self): 13 | self.update_tables() 14 | self.set_parts_rate() 15 | self.set_totals() 16 | self.vaildate_complete() 17 | 18 | def before_submit(self): 19 | use_parts_entry = ( 20 | frappe.get_value("Company Service Management Settings", "use_parts_entry") 21 | or 0 22 | ) 23 | if use_parts_entry: 24 | self.create_parts_entry("before_submit") 25 | else: 26 | self.create_stock_entry("before_submit") 27 | self.create_invoice() 28 | 29 | def on_submit(self): 30 | if self.status != "Completed": 31 | frappe.throw(_("It is not allowed to submit if it is not completed")) 32 | 33 | def update_tables(self): 34 | for template in self.services: 35 | if not template.bypass_billable: 36 | template.is_billable = frappe.get_value( 37 | "Service Template", template.service, "is_billable" 38 | ) 39 | if not template.applied: 40 | template_doc = frappe.get_doc("Service Template", template.service) 41 | if template_doc.tasks: 42 | for task in template_doc.tasks: 43 | row = self.append("tasks", {}) 44 | row.task_name = task.task_name 45 | row.template = template_doc.name 46 | 47 | if template_doc.parts: 48 | for part in template_doc.parts: 49 | row = self.append("parts", {}) 50 | row.item = part.item 51 | row.qty = part.qty 52 | row.rate = get_item_price( 53 | part.item, 54 | self.get_price_list(template_doc.price_list), 55 | self.company, 56 | ) 57 | row.is_billable = part.is_billable 58 | template.applied = 1 59 | 60 | def set_totals(self): 61 | self.service_charges = 0 62 | self.spares_cost = 0 63 | self.total = 0 64 | 65 | if self.services: 66 | for service in self.services: 67 | service.rate = get_item_price( 68 | service.item, self.get_price_list(service.price_list), self.company 69 | ) 70 | if service.is_billable: 71 | self.service_charges += service.rate 72 | if self.parts: 73 | for part in self.parts: 74 | if part.is_billable: 75 | self.spares_cost += part.rate * part.qty 76 | if self.supplied_parts: 77 | for supplied_part in self.supplied_parts: 78 | if supplied_part.is_billable: 79 | self.spares_cost += supplied_part.rate * supplied_part.qty 80 | 81 | self.total = self.service_charges + self.spares_cost 82 | 83 | def set_parts_rate(self): 84 | price_list = self.get_price_list() 85 | for item in self.parts: 86 | if not item.rate: 87 | item.rate = get_item_price(item.item, price_list, self.company) 88 | 89 | # @frappe.whitelist() 90 | def create_parts_entry(self, type): 91 | if self.parts and len(self.parts) > 0: 92 | items = [] 93 | for item in self.parts: 94 | if item.qty > 0: 95 | items.append( 96 | { 97 | "item_code": item.item, 98 | "qty": item.qty, 99 | } 100 | ) 101 | 102 | if len(items) == 0: 103 | return 104 | 105 | doc = frappe.get_doc( 106 | dict( 107 | doctype="Service Parts Entry", 108 | posting_date=nowdate(), 109 | posting_time=nowtime(), 110 | company=self.company, 111 | service_job_card=self.name, 112 | items=items, 113 | ), 114 | ) 115 | frappe.flags.ignore_account_permission = True 116 | doc.insert(ignore_permissions=True) 117 | doc.submit() 118 | frappe.msgprint( 119 | _("Service Parts Entry Created {0}").format(doc.name), alert=True 120 | ) 121 | 122 | if doc.get("name"): 123 | left_parts = [] 124 | for row in self.parts: 125 | if row.qty > 0: 126 | new_row = self.append("supplied_parts", {}) 127 | new_row.item = row.item 128 | new_row.qty = row.qty 129 | new_row.rate = row.rate 130 | new_row.is_billable = row.is_billable 131 | new_row.stock_entry = doc.name 132 | else: 133 | left_parts.append(row) 134 | self.parts = left_parts 135 | if type == "call": 136 | self.save() 137 | 138 | @frappe.whitelist() 139 | def create_stock_entry(self, type): 140 | if self.parts and len(self.parts) > 0: 141 | workshop = frappe.get_doc("Service Workshop", self.workshop) 142 | items = [] 143 | for item in self.parts: 144 | if item.qty > 0: 145 | items.append( 146 | { 147 | "s_warehouse": workshop.parts_warehouse, 148 | "t_warehouse": workshop.workshop_warehouse, 149 | "item_code": item.item, 150 | "qty": item.qty, 151 | "uom": frappe.get_value("Item", item.item, "stock_uom"), 152 | } 153 | ) 154 | 155 | if len(items) == 0: 156 | return 157 | 158 | doc = frappe.get_doc( 159 | dict( 160 | doctype="Stock Entry", 161 | posting_date=nowdate(), 162 | posting_time=nowtime(), 163 | stock_entry_type="Material Transfer", 164 | purpose="Material Transfer", 165 | company=self.company, 166 | service_job_card=self.name, 167 | from_warehouse=workshop.parts_warehouse, 168 | to_warehouse=workshop.workshop_warehouse, 169 | items=items, 170 | ), 171 | ) 172 | frappe.flags.ignore_account_permission = True 173 | doc.insert(ignore_permissions=True) 174 | doc.submit() 175 | frappe.msgprint(_("Stock Entry Created {0}").format(doc.name), alert=True) 176 | 177 | if doc.get("name"): 178 | left_parts = [] 179 | for row in self.parts: 180 | if row.qty > 0: 181 | new_row = self.append("supplied_parts", {}) 182 | new_row.item = row.item 183 | new_row.qty = row.qty 184 | new_row.rate = row.rate 185 | new_row.is_billable = row.is_billable 186 | new_row.stock_entry = doc.name 187 | else: 188 | left_parts.append(row) 189 | self.parts = left_parts 190 | if type == "call": 191 | self.save() 192 | 193 | def create_invoice(self): 194 | if self.status != "Completed": 195 | return 196 | items = [] 197 | workshop = frappe.get_doc("Service Workshop", self.workshop) 198 | if self.services and len(self.services) > 0: 199 | for item in self.services: 200 | if not item.is_billable: 201 | continue 202 | 203 | items.append( 204 | { 205 | "item_code": item.item, 206 | "qty": 1, 207 | "uom": frappe.get_value("Item", item.item, "stock_uom"), 208 | "warehouse": workshop.workshop_warehouse, 209 | "rate": item.rate if item.is_billable else 0, 210 | } 211 | ) 212 | if self.supplied_parts and len(self.supplied_parts) > 0: 213 | for item in self.supplied_parts: 214 | if not item.is_billable or item.is_return or item.qty == 0: 215 | continue 216 | 217 | items.append( 218 | { 219 | "item_code": item.item, 220 | "qty": item.qty, 221 | "uom": frappe.get_value("Item", item.item, "stock_uom"), 222 | "warehouse": workshop.workshop_warehouse, 223 | "rate": item.rate if item.is_billable else 0, 224 | } 225 | ) 226 | taxes = frappe.get_value( 227 | "Sales Taxes and Charges Template", 228 | {"company": self.company, "is_default": 1}, 229 | ["name", "tax_category"], 230 | as_dict=1, 231 | ) 232 | 233 | if len(items) == 0: 234 | return 235 | date = nowdate() 236 | doc = frappe.get_doc( 237 | dict( 238 | doctype="Sales Invoice", 239 | customer=self.customer, 240 | posting_date=date, 241 | due_date=date, 242 | update_stock=1, 243 | service_job_card=self.name, 244 | company=self.company, 245 | ignore_pricing_rule=1, 246 | set_warehouse=workshop.workshop_warehouse, 247 | items=items, 248 | taxes_and_charges=taxes.name, 249 | tax_category=taxes.tax_category, 250 | ), 251 | ) 252 | frappe.flags.ignore_account_permission = True 253 | doc.set_taxes() 254 | doc.set_missing_values(for_validate=True) 255 | doc.flags.ignore_mandatory = True 256 | doc.calculate_taxes_and_totals() 257 | doc.insert(ignore_permissions=True) 258 | self.invoice = doc.name 259 | frappe.msgprint(_("Sales Invoice Created {0}").format(doc.name), alert=True) 260 | 261 | def vaildate_complete(self): 262 | if self.status != "Completed": 263 | return 264 | completed = True 265 | for task in self.tasks: 266 | if not task.completed: 267 | completed = False 268 | if not completed: 269 | frappe.throw(_("The Tasks is not Completed")) 270 | 271 | def get_price_list(self, template_price_list=None): 272 | price_list = frappe.get_value("Customer", self.customer, "default_price_list") 273 | if not price_list and template_price_list: 274 | price_list = template_price_list 275 | if not price_list: 276 | price_list = frappe.get_value( 277 | "Service Settings", "Service Settings", "price_list" 278 | ) 279 | return price_list or "" 280 | 281 | 282 | def get_item_price(item_code, price_list, company): 283 | price = 0 284 | company_currency = frappe.get_value("Company", company, "default_currency") 285 | item_prices_data = frappe.get_all( 286 | "Item Price", 287 | fields=["item_code", "price_list_rate", "currency"], 288 | filters={ 289 | "price_list": price_list, 290 | "item_code": item_code, 291 | "currency": company_currency, 292 | }, 293 | order_by="valid_from desc", 294 | ) 295 | if len(item_prices_data): 296 | price = item_prices_data[0].price_list_rate or 0 297 | return price 298 | 299 | 300 | @frappe.whitelist() 301 | def get_selected_items(items): 302 | selected_items = json.loads(items) 303 | 304 | if selected_items: 305 | doc = frappe.get_doc( 306 | selected_items[0]["parenttype"], selected_items[0]["parent"] 307 | ) 308 | source_doc = frappe.get_doc("Stock Entry", selected_items[0]["stock_entry"]) 309 | 310 | new_doc = frappe.new_doc("Stock Entry") 311 | new_doc.company = source_doc.company 312 | new_doc.stock_entry_type = source_doc.stock_entry_type 313 | new_doc.purpose = source_doc.purpose 314 | new_doc.posting_date = nowdate() 315 | new_doc.posting_time = nowtime() 316 | new_doc.from_warehouse = source_doc.to_warehouse 317 | new_doc.to_warehouse = source_doc.from_warehouse 318 | new_doc.is_return = 1 319 | new_doc.service_job_card = doc.name 320 | 321 | for item in selected_items: 322 | if not item.get("qty_to_return"): 323 | frappe.throw( 324 | _( 325 | '

\ 326 | Can not process stock entry for empty quantity to return

' 327 | ) 328 | ) 329 | 330 | for entry in source_doc.items: 331 | if item.get("item") == entry.item_code: 332 | new_doc.append( 333 | "items", 334 | { 335 | "s_warehouse": entry.t_warehouse, 336 | "t_warehouse": entry.s_warehouse, 337 | "item_code": item.get("item"), 338 | "item_name": entry.item_name, 339 | "description": entry.description, 340 | "item_group": entry.item_group, 341 | "qty": item.get("qty_to_return"), 342 | "transfer_qty": item.get("qty_to_return"), 343 | "uom": entry.uom, 344 | "stock_uom": entry.stock_uom, 345 | "conversion_factor": entry.conversion_factor, 346 | "expense_account": entry.expense_account, 347 | "basic_rate": item.get("rate"), 348 | "basic_amount": item.get("rate"), 349 | "amount": item.get("rate"), 350 | "cost_center": entry.cost_center, 351 | }, 352 | ) 353 | 354 | new_doc.save(ignore_permissions=True) 355 | new_doc.submit() 356 | if new_doc.get("name"): 357 | updated_supplied_parts(doc, selected_items, new_doc.get("name")) 358 | frappe.msgprint( 359 | "Stock Entry: {0} Created Successfully".format( 360 | frappe.bold(new_doc.name) 361 | ) 362 | ) 363 | else: 364 | frappe.throw("Stock Entry was not created, try again") 365 | 366 | 367 | def updated_supplied_parts(doc, selected_items, name): 368 | for row in doc.supplied_parts: 369 | if not row.is_billable: 370 | continue 371 | for d in selected_items: 372 | if row.item == d["item"]: 373 | row.qty_returned = d.get("qty_to_return") 374 | row.qty = cint(d.get("qty")) - cint(d.get("qty_to_return")) 375 | row.return_stock_enty = name 376 | if (cint(d.get("qty")) - cint(d.get("qty_to_return"))) == 0: 377 | row.is_billable = 0 378 | row.is_return = 1 379 | doc.save() 380 | doc.reload() 381 | 382 | 383 | @frappe.whitelist() 384 | def get_all_supplied_parts(job_card): 385 | return frappe.get_all("Supplied Parts", 386 | filters={"parent": job_card, "is_billable": 1, "is_return": 0}, 387 | fields=["idx", "item", "item_name", "qty", "rate", "stock_entry", "parent", "parenttype"], 388 | order_by = 'idx ASC', 389 | page_length=100 390 | ) -------------------------------------------------------------------------------- /servicems/service_management/doctype/service_job_card/service_job_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "actions": [], 3 | "allow_guest_to_view": 1, 4 | "autoname": "naming_series:", 5 | "creation": "2021-06-24 12:11:22.557561", 6 | "doctype": "DocType", 7 | "editable_grid": 1, 8 | "engine": "InnoDB", 9 | "field_order": [ 10 | "status", 11 | "workshop", 12 | "use_spare_not_item", 13 | "column_break_6", 14 | "receiving_datetime", 15 | "naming_series", 16 | "company", 17 | "section_break_7", 18 | "service_item_doctype", 19 | "service_item_name", 20 | "customer", 21 | "mobile_no", 22 | "vehicle_model", 23 | "driver_name", 24 | "driver_mobile_number", 25 | "column_break_11", 26 | "make", 27 | "type", 28 | "engine_number", 29 | "chassis_number", 30 | "odometer_reading", 31 | "vin", 32 | "section_break_11", 33 | "complains", 34 | "section_break_13", 35 | "faults", 36 | "section_break_15", 37 | "services", 38 | "section_break_17", 39 | "tasks", 40 | "section_break_26", 41 | "parts", 42 | "supplied_parts", 43 | "unbill_item", 44 | "section_break_31", 45 | "invoice", 46 | "column_break_38", 47 | "service_charges", 48 | "spares_cost", 49 | "total", 50 | "amended_from", 51 | "route", 52 | "section_break_41", 53 | "service_book", 54 | "cigar_lighter", 55 | "first_aid", 56 | "clock", 57 | "gear_lock", 58 | "tyre_stopper", 59 | "tarpaulin", 60 | "fog_lamps", 61 | "column_break_44", 62 | "fire_extinguisher", 63 | "mobile_charger", 64 | "cargo_belt", 65 | "tool_kit", 66 | "jock", 67 | "pressure_pipe", 68 | "helmet", 69 | "section_break_43", 70 | "battery_make", 71 | "battery_no", 72 | "battery_condition_column", 73 | "excellent", 74 | "good", 75 | "poor", 76 | "tyre_details_section", 77 | "front_left", 78 | "axle_1_rear_left", 79 | "axle_2_rear_left", 80 | "trailer_axle_left_1and2", 81 | "trailer_axle_2_left_1and2", 82 | "trailer_axle_3_left_1and2", 83 | "spare_wheel_1", 84 | "note_section", 85 | "section_break_82", 86 | "data_83", 87 | "column_break_71", 88 | "front_right", 89 | "axle_1_rear_right", 90 | "axle2_rear_right_t_1_and_2", 91 | "trailer_axle_right_1_and_2", 92 | "trailer_axle_2_right_1_and_2", 93 | "trailer_axle_3_right_1_and_2", 94 | "spare_wheel_2", 95 | "section_break_83", 96 | "driver_verbatin_column", 97 | "text_83", 98 | "service_advisor_instructor_column", 99 | "section_break_89", 100 | "parts_description", 101 | "column_break_91", 102 | "parts_no", 103 | "column_break_93", 104 | "total_estimated" 105 | ], 106 | "fields": [ 107 | { 108 | "fieldname": "naming_series", 109 | "fieldtype": "Select", 110 | "label": "Naming Series", 111 | "options": "SJC-.YY.-.######" 112 | }, 113 | { 114 | "default": "Initiated", 115 | "fieldname": "status", 116 | "fieldtype": "Select", 117 | "in_list_view": 1, 118 | "label": "Status", 119 | "options": "Initiated\nActive\nInspection\nRepairing\nAwaiting Parts\nCompleted\nClosed", 120 | "reqd": 1 121 | }, 122 | { 123 | "fetch_from": "workshop.company", 124 | "fieldname": "company", 125 | "fieldtype": "Link", 126 | "in_list_view": 1, 127 | "label": "Company", 128 | "options": "Company", 129 | "read_only": 1, 130 | "reqd": 1 131 | }, 132 | { 133 | "fieldname": "workshop", 134 | "fieldtype": "Link", 135 | "in_list_view": 1, 136 | "label": "Workshop", 137 | "options": "Service Workshop", 138 | "reqd": 1 139 | }, 140 | { 141 | "fieldname": "column_break_6", 142 | "fieldtype": "Column Break" 143 | }, 144 | { 145 | "fieldname": "service_item_doctype", 146 | "fieldtype": "Data", 147 | "hidden": 1, 148 | "label": "Service Item Doctype" 149 | }, 150 | { 151 | "fieldname": "service_item_name", 152 | "fieldtype": "Link", 153 | "label": "Service Item Name", 154 | "options": "Service Vehicle", 155 | "reqd": 1 156 | }, 157 | { 158 | "fetch_from": "service_item_name.customer", 159 | "fieldname": "customer", 160 | "fieldtype": "Link", 161 | "label": "Customer", 162 | "options": "Customer", 163 | "read_only": 1, 164 | "reqd": 1 165 | }, 166 | { 167 | "default": "Now", 168 | "fieldname": "receiving_datetime", 169 | "fieldtype": "Datetime", 170 | "in_list_view": 1, 171 | "label": "Receiving DateTime", 172 | "reqd": 1 173 | }, 174 | { 175 | "fieldname": "section_break_11", 176 | "fieldtype": "Section Break" 177 | }, 178 | { 179 | "fieldname": "complains", 180 | "fieldtype": "Table", 181 | "label": "Complains", 182 | "options": "Complains", 183 | "reqd": 1 184 | }, 185 | { 186 | "fieldname": "section_break_13", 187 | "fieldtype": "Section Break" 188 | }, 189 | { 190 | "fieldname": "faults", 191 | "fieldtype": "Table", 192 | "label": "Faults", 193 | "options": "Faults" 194 | }, 195 | { 196 | "fieldname": "section_break_15", 197 | "fieldtype": "Section Break" 198 | }, 199 | { 200 | "fieldname": "section_break_17", 201 | "fieldtype": "Section Break" 202 | }, 203 | { 204 | "fieldname": "section_break_7", 205 | "fieldtype": "Section Break" 206 | }, 207 | { 208 | "fieldname": "column_break_11", 209 | "fieldtype": "Column Break" 210 | }, 211 | { 212 | "fetch_from": "service_item_name.vehicle_model", 213 | "fieldname": "vehicle_model", 214 | "fieldtype": "Data", 215 | "label": "Vehicle Model", 216 | "read_only": 1 217 | }, 218 | { 219 | "fetch_from": "service_item_name.make", 220 | "fieldname": "make", 221 | "fieldtype": "Data", 222 | "label": "Make", 223 | "read_only": 1 224 | }, 225 | { 226 | "fetch_from": "service_item_name.type", 227 | "fieldname": "type", 228 | "fieldtype": "Data", 229 | "label": "Type", 230 | "read_only": 1 231 | }, 232 | { 233 | "fetch_from": "service_item_name.engine_number", 234 | "fieldname": "engine_number", 235 | "fieldtype": "Data", 236 | "label": "Engine Number", 237 | "read_only": 1 238 | }, 239 | { 240 | "fetch_from": "service_item_name.chassis_number", 241 | "fieldname": "chassis_number", 242 | "fieldtype": "Data", 243 | "label": "Chassis Number", 244 | "read_only": 1 245 | }, 246 | { 247 | "fieldname": "section_break_26", 248 | "fieldtype": "Section Break" 249 | }, 250 | { 251 | "fieldname": "service_charges", 252 | "fieldtype": "Currency", 253 | "label": "Service Charges", 254 | "read_only": 1 255 | }, 256 | { 257 | "fieldname": "spares_cost", 258 | "fieldtype": "Currency", 259 | "label": "Spares Cost", 260 | "read_only": 1 261 | }, 262 | { 263 | "fieldname": "total", 264 | "fieldtype": "Currency", 265 | "label": "Total Excl. Vat", 266 | "read_only": 1 267 | }, 268 | { 269 | "fieldname": "column_break_38", 270 | "fieldtype": "Column Break" 271 | }, 272 | { 273 | "fieldname": "section_break_31", 274 | "fieldtype": "Section Break" 275 | }, 276 | { 277 | "fieldname": "invoice", 278 | "fieldtype": "Link", 279 | "label": "Invoice Number", 280 | "options": "Sales Invoice" 281 | }, 282 | { 283 | "fieldname": "services", 284 | "fieldtype": "Table", 285 | "label": "Service Task Templates", 286 | "options": "Job Card Template", 287 | "reqd": 1 288 | }, 289 | { 290 | "allow_bulk_edit": 1, 291 | "fieldname": "parts", 292 | "fieldtype": "Table", 293 | "label": "Parts and Consumable Supplied", 294 | "options": "Job Card Items Supplied" 295 | }, 296 | { 297 | "fieldname": "tasks", 298 | "fieldtype": "Table", 299 | "label": "Task", 300 | "options": "Job Card Tasks" 301 | }, 302 | { 303 | "fieldname": "amended_from", 304 | "fieldtype": "Link", 305 | "label": "Amended From", 306 | "no_copy": 1, 307 | "options": "Service Job Card", 308 | "print_hide": 1, 309 | "read_only": 1 310 | }, 311 | { 312 | "fieldname": "route", 313 | "fieldtype": "Data", 314 | "label": "Route" 315 | }, 316 | { 317 | "fetch_from": "customer.mobile_no", 318 | "fieldname": "mobile_no", 319 | "fieldtype": "Data", 320 | "label": "Mobile No", 321 | "read_only": 1 322 | }, 323 | { 324 | "fieldname": "supplied_parts", 325 | "fieldtype": "Table", 326 | "label": "Supplied Parts", 327 | "options": "Supplied Parts", 328 | "read_only": 1 329 | }, 330 | { 331 | "fieldname": "unbill_item", 332 | "fieldtype": "Button", 333 | "label": "Unbill Item", 334 | "permlevel": 1 335 | }, 336 | { 337 | "fieldname": "driver_name", 338 | "fieldtype": "Data", 339 | "label": "Driver Name" 340 | }, 341 | { 342 | "fieldname": "driver_mobile_number", 343 | "fieldtype": "Data", 344 | "label": "Driver Mobile Number", 345 | "options": "Phone" 346 | }, 347 | { 348 | "fieldname": "odometer_reading", 349 | "fieldtype": "Data", 350 | "label": "Odometer Reading" 351 | }, 352 | { 353 | "fieldname": "section_break_41", 354 | "fieldtype": "Section Break", 355 | "label": "Pre Acceptance Inspection" 356 | }, 357 | { 358 | "fieldname": "section_break_43", 359 | "fieldtype": "Section Break", 360 | "label": "Battery Details" 361 | }, 362 | { 363 | "fetch_from": "service_item_name.vin", 364 | "fieldname": "vin", 365 | "fieldtype": "Data", 366 | "label": "VIN", 367 | "read_only": 1 368 | }, 369 | { 370 | "default": "0", 371 | "fieldname": "service_book", 372 | "fieldtype": "Check", 373 | "label": "Service Book" 374 | }, 375 | { 376 | "fieldname": "column_break_44", 377 | "fieldtype": "Column Break" 378 | }, 379 | { 380 | "default": "0", 381 | "fieldname": "fire_extinguisher", 382 | "fieldtype": "Check", 383 | "label": "Fire Extinguisher" 384 | }, 385 | { 386 | "fieldname": "battery_make", 387 | "fieldtype": "Data", 388 | "label": "Battery Make" 389 | }, 390 | { 391 | "fieldname": "battery_no", 392 | "fieldtype": "Data", 393 | "label": "Battery No" 394 | }, 395 | { 396 | "fieldname": "tyre_details_section", 397 | "fieldtype": "Section Break", 398 | "label": "Tyre Details" 399 | }, 400 | { 401 | "fieldname": "front_right", 402 | "fieldtype": "Select", 403 | "label": "Front Right", 404 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 405 | }, 406 | { 407 | "fieldname": "front_left", 408 | "fieldtype": "Select", 409 | "label": "Front Left", 410 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 411 | }, 412 | { 413 | "fieldname": "axle_1_rear_right", 414 | "fieldtype": "Select", 415 | "label": "AXLE 1 REAR RIGHT T 1 AND 2", 416 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 417 | }, 418 | { 419 | "fieldname": "axle_1_rear_left", 420 | "fieldtype": "Select", 421 | "label": "AXLE 1 REAR LEFT T 1 AND 2", 422 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 423 | }, 424 | { 425 | "fieldname": "axle_2_rear_left", 426 | "fieldtype": "Select", 427 | "label": "AXLE 2 REAR LEFT T 1 AND 2", 428 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 429 | }, 430 | { 431 | "fieldname": "spare_wheel_1", 432 | "fieldtype": "Select", 433 | "label": "Spare Wheel 1", 434 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 435 | }, 436 | { 437 | "fieldname": "spare_wheel_2", 438 | "fieldtype": "Select", 439 | "label": "Spare Wheel 2", 440 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 441 | }, 442 | { 443 | "default": "0", 444 | "fieldname": "cigar_lighter", 445 | "fieldtype": "Check", 446 | "label": "Cigar Lighter" 447 | }, 448 | { 449 | "default": "0", 450 | "fieldname": "first_aid", 451 | "fieldtype": "Check", 452 | "label": "First aid" 453 | }, 454 | { 455 | "default": "0", 456 | "fieldname": "clock", 457 | "fieldtype": "Check", 458 | "label": "Clock" 459 | }, 460 | { 461 | "default": "0", 462 | "fieldname": "gear_lock", 463 | "fieldtype": "Check", 464 | "label": "Gear Lock" 465 | }, 466 | { 467 | "default": "0", 468 | "fieldname": "tyre_stopper", 469 | "fieldtype": "Check", 470 | "label": "Tyre stopper" 471 | }, 472 | { 473 | "default": "0", 474 | "fieldname": "tarpaulin", 475 | "fieldtype": "Check", 476 | "label": "Tarpaulin" 477 | }, 478 | { 479 | "default": "0", 480 | "fieldname": "fog_lamps", 481 | "fieldtype": "Check", 482 | "label": "Fog Lamp" 483 | }, 484 | { 485 | "default": "0", 486 | "fieldname": "mobile_charger", 487 | "fieldtype": "Check", 488 | "label": "Mobile Charger" 489 | }, 490 | { 491 | "default": "0", 492 | "fieldname": "cargo_belt", 493 | "fieldtype": "Check", 494 | "label": "Cargo belt" 495 | }, 496 | { 497 | "default": "0", 498 | "fieldname": "tool_kit", 499 | "fieldtype": "Check", 500 | "label": "Tool Kit" 501 | }, 502 | { 503 | "default": "0", 504 | "fieldname": "jock", 505 | "fieldtype": "Check", 506 | "label": "Jock" 507 | }, 508 | { 509 | "default": "0", 510 | "fieldname": "pressure_pipe", 511 | "fieldtype": "Check", 512 | "label": "Pressure pipe" 513 | }, 514 | { 515 | "default": "0", 516 | "fieldname": "helmet", 517 | "fieldtype": "Check", 518 | "label": "Helmet" 519 | }, 520 | { 521 | "bold": 1, 522 | "fieldname": "battery_condition_column", 523 | "fieldtype": "Column Break", 524 | "label": "Battery Condition" 525 | }, 526 | { 527 | "default": "0", 528 | "fieldname": "excellent", 529 | "fieldtype": "Check", 530 | "label": "Excellent" 531 | }, 532 | { 533 | "default": "0", 534 | "fieldname": "good", 535 | "fieldtype": "Check", 536 | "label": "Good" 537 | }, 538 | { 539 | "default": "0", 540 | "fieldname": "poor", 541 | "fieldtype": "Check", 542 | "label": "Poor" 543 | }, 544 | { 545 | "fieldname": "note_section", 546 | "fieldtype": "Read Only", 547 | "label": "Note To Measure Tyre tread use Tread DepthGuage" 548 | }, 549 | { 550 | "bold": 1, 551 | "fieldname": "driver_verbatin_column", 552 | "fieldtype": "Small Text", 553 | "label": "Driver Verbatin" 554 | }, 555 | { 556 | "fieldname": "service_advisor_instructor_column", 557 | "fieldtype": "Small Text", 558 | "label": "Service Advisor Instructor" 559 | }, 560 | { 561 | "fieldname": "text_83", 562 | "fieldtype": "Column Break" 563 | }, 564 | { 565 | "bold": 1, 566 | "fieldname": "section_break_82", 567 | "fieldtype": "Heading", 568 | "label": "Remark/Vehicles diagnosis report" 569 | }, 570 | { 571 | "fieldname": "section_break_83", 572 | "fieldtype": "Section Break" 573 | }, 574 | { 575 | "fieldname": "data_83", 576 | "fieldtype": "Data" 577 | }, 578 | { 579 | "fieldname": "column_break_71", 580 | "fieldtype": "Column Break" 581 | }, 582 | { 583 | "fieldname": "trailer_axle_left_1and2", 584 | "fieldtype": "Select", 585 | "label": "TRAILER AXLE LEFT 1 AND 2", 586 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 587 | }, 588 | { 589 | "fieldname": "trailer_axle_2_left_1and2", 590 | "fieldtype": "Select", 591 | "label": "TRAILER AXLE 2 LEFT 1 AND 2", 592 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 593 | }, 594 | { 595 | "fieldname": "trailer_axle_3_left_1and2", 596 | "fieldtype": "Select", 597 | "label": "TRAILER AXLE 3 LEFT 1 AND 2", 598 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 599 | }, 600 | { 601 | "fieldname": "axle2_rear_right_t_1_and_2", 602 | "fieldtype": "Select", 603 | "label": "AXLE2 REAR RIGHT T 1 AND 2", 604 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 605 | }, 606 | { 607 | "fieldname": "trailer_axle_right_1_and_2", 608 | "fieldtype": "Select", 609 | "label": "TRAILER AXLE RIGHT 1 AND 2", 610 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 611 | }, 612 | { 613 | "fieldname": "trailer_axle_2_right_1_and_2", 614 | "fieldtype": "Select", 615 | "label": "TRAILER AXLE 2 RIGHT 1 AND 2", 616 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 617 | }, 618 | { 619 | "fieldname": "trailer_axle_3_right_1_and_2", 620 | "fieldtype": "Select", 621 | "label": "TRAILER AXLE 3 RIGHT 1 AND 2", 622 | "options": "\nAbove 10 mm\nAround 7 mm\nLess than 2.6 mm" 623 | }, 624 | { 625 | "fieldname": "section_break_89", 626 | "fieldtype": "Section Break", 627 | "label": "Estimated Repair" 628 | }, 629 | { 630 | "bold": 1, 631 | "fieldname": "parts_description", 632 | "fieldtype": "Small Text", 633 | "label": "Part Description" 634 | }, 635 | { 636 | "fieldname": "column_break_91", 637 | "fieldtype": "Column Break" 638 | }, 639 | { 640 | "fieldname": "parts_no", 641 | "fieldtype": "Small Text", 642 | "label": "Part No" 643 | }, 644 | { 645 | "fieldname": "column_break_93", 646 | "fieldtype": "Column Break" 647 | }, 648 | { 649 | "default": "0", 650 | "fetch_from": "workshop.use_spare_not_item", 651 | "fieldname": "use_spare_not_item", 652 | "fieldtype": "Check", 653 | "label": "Use Spare Not Item", 654 | "read_only": 1 655 | }, 656 | { 657 | "fieldname": "total_estimated", 658 | "fieldtype": "Currency", 659 | "label": "Total" 660 | } 661 | ], 662 | "has_web_view": 1, 663 | "index_web_pages_for_search": 1, 664 | "is_submittable": 1, 665 | "links": [ 666 | { 667 | "link_doctype": "Sales Invoice", 668 | "link_fieldname": "service_job_card" 669 | } 670 | ], 671 | "modified": "2022-11-29 12:50:03.913615", 672 | "modified_by": "Administrator", 673 | "module": "Service Management", 674 | "name": "Service Job Card", 675 | "owner": "Administrator", 676 | "permissions": [ 677 | { 678 | "amend": 1, 679 | "cancel": 1, 680 | "create": 1, 681 | "delete": 1, 682 | "email": 1, 683 | "export": 1, 684 | "print": 1, 685 | "read": 1, 686 | "report": 1, 687 | "role": "System Manager", 688 | "share": 1, 689 | "submit": 1, 690 | "write": 1 691 | } 692 | ], 693 | "route": "job-card", 694 | "sort_field": "modified", 695 | "sort_order": "DESC", 696 | "track_changes": 1 697 | } --------------------------------------------------------------------------------