From 7178234ff866bff5f94fa92f79651fd5239b1fd3 Mon Sep 17 00:00:00 2001 From: Duradundi Hadimani Date: Thu, 11 Dec 2025 13:37:26 +0530 Subject: [PATCH] Initial commit of Asset Lite app --- .gitignore | 7 + README.md | 7 + asset_lite/__init__.py | 1 + asset_lite/api/api.py | 30 + asset_lite/asset_lite/__init__.py | 0 .../active_map_widget/active_map_widget.js | 47 + .../active_map_widget/active_map_widget.json | 13 + asset_lite/asset_lite/doctype/__init__.py | 0 .../asset_lite/doctype/agent/__init__.py | 0 asset_lite/asset_lite/doctype/agent/agent.js | 8 + .../asset_lite/doctype/agent/agent.json | 45 + asset_lite/asset_lite/doctype/agent/agent.py | 9 + .../asset_lite/doctype/agent/test_agent.py | 9 + .../doctype/arabic_names/__init__.py | 0 .../doctype/arabic_names/arabic_names.js | 8 + .../doctype/arabic_names/arabic_names.json | 50 + .../doctype/arabic_names/arabic_names.py | 9 + .../doctype/arabic_names/test_arabic_names.py | 9 + .../doctype/asset_item_transfer/__init__.py | 0 .../asset_item_transfer.json | 59 + .../asset_item_transfer.py | 9 + .../asset_lite/doctype/asset_type/__init__.py | 0 .../doctype/asset_type/asset_type.js | 8 + .../doctype/asset_type/asset_type.json | 47 + .../doctype/asset_type/asset_type.py | 9 + .../doctype/asset_type/test_asset_type.py | 9 + .../asset_lite/doctype/city/__init__.py | 0 asset_lite/asset_lite/doctype/city/city.js | 8 + asset_lite/asset_lite/doctype/city/city.json | 44 + asset_lite/asset_lite/doctype/city/city.py | 9 + .../asset_lite/doctype/city/test_city.py | 9 + .../asset_lite/doctype/ecri_umdns/__init__.py | 0 .../doctype/ecri_umdns/ecri_umdns.js | 8 + .../doctype/ecri_umdns/ecri_umdns.json | 51 + .../doctype/ecri_umdns/ecri_umdns.py | 9 + .../doctype/ecri_umdns/test_ecri_umdns.py | 9 + .../asset_lite/doctype/feedback/__init__.py | 0 .../asset_lite/doctype/feedback/feedback.js | 8 + .../asset_lite/doctype/feedback/feedback.json | 77 + .../asset_lite/doctype/feedback/feedback.py | 9 + .../doctype/feedback/test_feedback.py | 9 + .../doctype/feedback_table/__init__.py | 0 .../feedback_table/feedback_table.json | 44 + .../doctype/feedback_table/feedback_table.py | 9 + .../doctype/item_transfer_table/__init__.py | 0 .../item_transfer_table.json | 64 + .../item_transfer_table.py | 9 + .../doctype/material_transfer/__init__.py | 0 .../material_transfer/material_transfer.js | 8 + .../material_transfer/material_transfer.json | 128 + .../material_transfer/material_transfer.py | 9 + .../test_material_transfer.py | 9 + .../doctype/mobile_team_site/__init__.py | 0 .../mobile_team_site/mobile_team_site.js | 8 + .../mobile_team_site/mobile_team_site.json | 58 + .../mobile_team_site/mobile_team_site.py | 9 + .../mobile_team_site/test_mobile_team_site.py | 9 + .../asset_lite/doctype/modality/__init__.py | 0 .../asset_lite/doctype/modality/modality.js | 8 + .../asset_lite/doctype/modality/modality.json | 44 + .../asset_lite/doctype/modality/modality.py | 9 + .../doctype/modality/test_modality.py | 9 + .../asset_lite/doctype/pi_table/__init__.py | 0 .../asset_lite/doctype/pi_table/pi_table.json | 38 + .../asset_lite/doctype/pi_table/pi_table.py | 9 + .../doctype/pm_entry_line/__init__.py | 0 .../doctype/pm_entry_line/pm_entry_line.json | 70 + .../doctype/pm_entry_line/pm_entry_line.py | 9 + .../doctype/pm_schedule_generator/__init__.py | 0 .../pm_schedule_generator.js | 8 + .../pm_schedule_generator.json | 207 + .../pm_schedule_generator.py | 9 + .../test_pm_schedule_generator.py | 9 + asset_lite/asset_lite/doctype/ppm/__init__.py | 0 asset_lite/asset_lite/doctype/ppm/ppm.js | 32 + asset_lite/asset_lite/doctype/ppm/ppm.json | 112 + asset_lite/asset_lite/doctype/ppm/ppm.py | 9 + asset_lite/asset_lite/doctype/ppm/test_ppm.py | 9 + .../ppm_ct_scan_machine_template/__init__.py | 0 .../ppm_ct_scan_machine_template.js | 8 + .../ppm_ct_scan_machine_template.json | 43 + .../ppm_ct_scan_machine_template.py | 9 + .../test_ppm_ct_scan_machine_template.py | 9 + .../__init__.py | 0 ...lectrical_fixtures_inside_rooms_table.json | 78 + ..._electrical_fixtures_inside_rooms_table.py | 9 + .../ppm_electricals_panels_table/__init__.py | 0 .../ppm_electricals_panels_table.json | 92 + .../ppm_electricals_panels_table.py | 9 + .../ppm_fire_alarm_device_table/__init__.py | 0 .../ppm_fire_alarm_device_table.json | 38 + .../ppm_fire_alarm_device_table.py | 9 + .../doctype/ppm_mri_template/__init__.py | 0 .../ppm_mri_template/ppm_mri_template.js | 8 + .../ppm_mri_template/ppm_mri_template.json | 43 + .../ppm_mri_template/ppm_mri_template.py | 9 + .../ppm_mri_template/test_ppm_mri_template.py | 9 + .../ppm_of_ct_scan_machine/__init__.py | 0 .../ppm_of_ct_scan_machine.js | 8 + .../ppm_of_ct_scan_machine.json | 96 + .../ppm_of_ct_scan_machine.py | 9 + .../test_ppm_of_ct_scan_machine.py | 9 + .../__init__.py | 0 ...ppm_of_electrical_fixtures_inside_rooms.js | 8 + ...m_of_electrical_fixtures_inside_rooms.json | 131 + ...ppm_of_electrical_fixtures_inside_rooms.py | 9 + ...ppm_of_electrical_fixtures_inside_rooms.py | 9 + .../ppm_of_electrical_panels/__init__.py | 0 .../ppm_of_electrical_panels.js | 8 + .../ppm_of_electrical_panels.json | 118 + .../ppm_of_electrical_panels.py | 9 + .../test_ppm_of_electrical_panels.py | 9 + .../ppm_of_fire_alarm_devices/__init__.py | 0 .../ppm_of_fire_alarm_devices.js | 8 + .../ppm_of_fire_alarm_devices.json | 118 + .../ppm_of_fire_alarm_devices.py | 9 + .../test_ppm_of_fire_alarm_devices.py | 9 + .../ppm_of_mri_scan_machine/__init__.py | 0 .../ppm_of_mri_scan_machine.js | 8 + .../ppm_of_mri_scan_machine.json | 96 + .../ppm_of_mri_scan_machine.py | 9 + .../test_ppm_of_mri_scan_machine.py | 9 + .../asset_lite/doctype/ppm_table/__init__.py | 0 .../doctype/ppm_table/ppm_table.json | 52 + .../asset_lite/doctype/ppm_table/ppm_table.py | 9 + .../ppm_table_for_ct_scan_machine/__init__.py | 0 .../ppm_table_for_ct_scan_machine.json | 52 + .../ppm_table_for_ct_scan_machine.py | 9 + .../doctype/ppm_table_for_mri/__init__.py | 0 .../ppm_table_for_mri/ppm_table_for_mri.json | 53 + .../ppm_table_for_mri/ppm_table_for_mri.py | 9 + .../doctype/ppm_templates/__init__.py | 0 .../doctype/ppm_templates/ppm_templates.js | 8 + .../doctype/ppm_templates/ppm_templates.json | 71 + .../doctype/ppm_templates/ppm_templates.py | 9 + .../ppm_templates/test_ppm_templates.py | 9 + .../asset_lite/doctype/pr_table/__init__.py | 0 .../asset_lite/doctype/pr_table/pr_table.json | 29 + .../asset_lite/doctype/pr_table/pr_table.py | 9 + .../doctype/purchase_request/__init__.py | 0 .../purchase_request/purchase_request.js | 8 + .../purchase_request/purchase_request.json | 154 + .../purchase_request/purchase_request.py | 9 + .../purchase_request/test_purchase_request.py | 9 + .../purchase_request_table/__init__.py | 0 .../purchase_request_table.json | 95 + .../purchase_request_table.py | 9 + .../doctype/service_coverage/__init__.py | 0 .../service_coverage/service_coverage.json | 57 + .../service_coverage/service_coverage.py | 9 + .../doctype/site_information/__init__.py | 0 .../site_information/site_information.js | 8 + .../site_information/site_information.json | 247 + .../site_information/site_information.py | 9 + .../site_information/test_site_information.py | 9 + .../doctype/spare_parts/__init__.py | 0 .../doctype/spare_parts/spare_parts.json | 887 ++ .../doctype/spare_parts/spare_parts.py | 9 + .../doctype/supplier_reason/__init__.py | 0 .../supplier_reason/supplier_reason.js | 8 + .../supplier_reason/supplier_reason.json | 44 + .../supplier_reason/supplier_reason.py | 9 + .../supplier_reason/test_supplier_reason.py | 9 + .../doctype/support_asset_list/__init__.py | 0 .../support_asset_list.json | 37 + .../support_asset_list/support_asset_list.py | 9 + .../doctype/support_plans/__init__.py | 0 .../doctype/support_plans/support_plans.js | 8 + .../doctype/support_plans/support_plans.json | 253 + .../doctype/support_plans/support_plans.py | 9 + .../support_plans/test_support_plans.py | 9 + .../asset_lite/doctype/warranty/__init__.py | 0 .../doctype/warranty/test_warranty.py | 9 + .../asset_lite/doctype/warranty/warranty.js | 8 + .../asset_lite/doctype/warranty/warranty.json | 110 + .../asset_lite/doctype/warranty/warranty.py | 9 + .../asset_lite/doctype/work_order/__init__.py | 0 .../doctype/work_order/test_work_order.py | 9 + .../doctype/work_order/work_order.js | 75 + .../doctype/work_order/work_order.json | 757 + .../doctype/work_order/work_order.py | 25 + .../doctype/work_order_requisitor/__init__.py | 0 .../test_work_order_requisitor.py | 9 + .../work_order_requisitor.js | 8 + .../work_order_requisitor.json | 50 + .../work_order_requisitor.py | 9 + .../doctype/work_order_table/__init__.py | 0 .../work_order_table/work_order_table.json | 69 + .../work_order_table/work_order_table.py | 9 + asset_lite/asset_lite/page/__init__.py | 0 .../asset_lite/page/active_map/__init__.py | 0 .../asset_lite/page/active_map/active_map.js | 749 + .../page/active_map/active_map.json | 19 + .../asset_lite/page/asset_history/__init__.py | 0 .../page/asset_history/asset_history.js | 536 + .../page/asset_history/asset_history.json | 18 + .../asset_lite/page/asset_map/__init__.py | 0 .../asset_lite/page/asset_map/asset_map.js | 103 + .../asset_lite/page/asset_map/asset_map.json | 19 + .../page/privacy_policy/__init__.py | 0 .../page/privacy_policy/privacy_policy.js | 164 + .../page/privacy_policy/privacy_policy.json | 19 + asset_lite/asset_lite/page/test/__init__.py | 0 asset_lite/asset_lite/page/test/test.js | 7 + asset_lite/asset_lite/page/test/test.json | 18 + asset_lite/asset_lite/report/__init__.py | 0 .../__init__.py | 0 ...tage_of_replacement_asset_value_(mprav).js | 38 + ...ge_of_replacement_asset_value_(mprav).json | 34 + ...tage_of_replacement_asset_value_(mprav).py | 130 + .../maintenance_response_time/__init__.py | 0 .../maintenance_response_time.js | 37 + .../maintenance_response_time.json | 52 + .../maintenance_response_time.py | 128 + asset_lite/asset_lite/report/mtbf/__init__.py | 0 asset_lite/asset_lite/report/mtbf/mtbf.js | 36 + asset_lite/asset_lite/report/mtbf/mtbf.json | 46 + asset_lite/asset_lite/report/mtbf/mtbf.py | 102 + .../__init__.py | 0 .../planned_maintenance_percentage_(pmp).js | 39 + .../planned_maintenance_percentage_(pmp).json | 34 + .../planned_maintenance_percentage_(pmp).py | 102 + .../__init__.py | 0 ...preventive_maintenance_compliance_(pmc).js | 37 + ...eventive_maintenance_compliance_(pmc).json | 35 + ...preventive_maintenance_compliance_(pmc).py | 105 + .../report/supplier_down_time/__init__.py | 0 .../supplier_down_time/supplier_down_time.js | 40 + .../supplier_down_time.json | 45 + .../supplier_down_time/supplier_down_time.py | 81 + .../report/supplier_score/__init__.py | 0 .../report/supplier_score/supplier_score.js | 41 + .../report/supplier_score/supplier_score.json | 37 + .../report/supplier_score/supplier_score.py | 103 + .../report/supplier_total_score/__init__.py | 0 .../supplier_total_score.js | 34 + .../supplier_total_score.json | 27 + .../supplier_total_score.py | 121 + .../test_sup_vs_score_report/__init__.py | 0 .../test_sup_vs_score_report.json | 29 + .../asset_management/asset_management.json | 114 + asset_lite/config/__init__.py | 0 asset_lite/fixtures/client_script.json | 629 + asset_lite/fixtures/custom_docperm.json | 12146 ++++++++++++++++ asset_lite/fixtures/custom_field.json | 11314 ++++++++++++++ asset_lite/fixtures/dashboard.json | 3138 ++++ asset_lite/fixtures/dashboard_chart.json | 11456 +++++++++++++++ asset_lite/fixtures/notification.json | 1580 ++ asset_lite/fixtures/number_card.json | 3227 ++++ asset_lite/fixtures/print_format.json | 777 + asset_lite/fixtures/property_setter.json | 5171 +++++++ asset_lite/fixtures/report.json | 4183 ++++++ asset_lite/fixtures/role.json | 743 + asset_lite/fixtures/server_script.json | 667 + asset_lite/fixtures/translation.json | 1263 ++ asset_lite/fixtures/workflow.json | 1828 +++ .../fixtures/workflow_action_master.json | 93 + asset_lite/fixtures/workflow_state.json | 155 + asset_lite/fixtures/workspace.json | 139 + asset_lite/hooks.py | 317 + asset_lite/map.py | 76 + asset_lite/modules.txt | 1 + asset_lite/patches.txt | 6 + asset_lite/public/.gitkeep | 0 asset_lite/public/css/custom.css | 9 + .../public/js/custom_asset_maintenance_log.js | 29 + asset_lite/public/js/dashboard_embed.js | 117 + asset_lite/public/py/asset.py | 237 + .../supplier_score_criteria_override.py | 33 + asset_lite/templates/__init__.py | 0 asset_lite/templates/pages/__init__.py | 0 asset_lite/www/standalone-active-map.html | 287 + license.txt | 21 + pyproject.toml | 20 + 274 files changed, 68990 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 asset_lite/__init__.py create mode 100644 asset_lite/api/api.py create mode 100644 asset_lite/asset_lite/__init__.py create mode 100644 asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.js create mode 100644 asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.json create mode 100644 asset_lite/asset_lite/doctype/__init__.py create mode 100644 asset_lite/asset_lite/doctype/agent/__init__.py create mode 100644 asset_lite/asset_lite/doctype/agent/agent.js create mode 100644 asset_lite/asset_lite/doctype/agent/agent.json create mode 100644 asset_lite/asset_lite/doctype/agent/agent.py create mode 100644 asset_lite/asset_lite/doctype/agent/test_agent.py create mode 100644 asset_lite/asset_lite/doctype/arabic_names/__init__.py create mode 100644 asset_lite/asset_lite/doctype/arabic_names/arabic_names.js create mode 100644 asset_lite/asset_lite/doctype/arabic_names/arabic_names.json create mode 100644 asset_lite/asset_lite/doctype/arabic_names/arabic_names.py create mode 100644 asset_lite/asset_lite/doctype/arabic_names/test_arabic_names.py create mode 100644 asset_lite/asset_lite/doctype/asset_item_transfer/__init__.py create mode 100644 asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.json create mode 100644 asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.py create mode 100644 asset_lite/asset_lite/doctype/asset_type/__init__.py create mode 100644 asset_lite/asset_lite/doctype/asset_type/asset_type.js create mode 100644 asset_lite/asset_lite/doctype/asset_type/asset_type.json create mode 100644 asset_lite/asset_lite/doctype/asset_type/asset_type.py create mode 100644 asset_lite/asset_lite/doctype/asset_type/test_asset_type.py create mode 100644 asset_lite/asset_lite/doctype/city/__init__.py create mode 100644 asset_lite/asset_lite/doctype/city/city.js create mode 100644 asset_lite/asset_lite/doctype/city/city.json create mode 100644 asset_lite/asset_lite/doctype/city/city.py create mode 100644 asset_lite/asset_lite/doctype/city/test_city.py create mode 100644 asset_lite/asset_lite/doctype/ecri_umdns/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.js create mode 100644 asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.json create mode 100644 asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.py create mode 100644 asset_lite/asset_lite/doctype/ecri_umdns/test_ecri_umdns.py create mode 100644 asset_lite/asset_lite/doctype/feedback/__init__.py create mode 100644 asset_lite/asset_lite/doctype/feedback/feedback.js create mode 100644 asset_lite/asset_lite/doctype/feedback/feedback.json create mode 100644 asset_lite/asset_lite/doctype/feedback/feedback.py create mode 100644 asset_lite/asset_lite/doctype/feedback/test_feedback.py create mode 100644 asset_lite/asset_lite/doctype/feedback_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/feedback_table/feedback_table.json create mode 100644 asset_lite/asset_lite/doctype/feedback_table/feedback_table.py create mode 100644 asset_lite/asset_lite/doctype/item_transfer_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.json create mode 100644 asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.py create mode 100644 asset_lite/asset_lite/doctype/material_transfer/__init__.py create mode 100644 asset_lite/asset_lite/doctype/material_transfer/material_transfer.js create mode 100644 asset_lite/asset_lite/doctype/material_transfer/material_transfer.json create mode 100644 asset_lite/asset_lite/doctype/material_transfer/material_transfer.py create mode 100644 asset_lite/asset_lite/doctype/material_transfer/test_material_transfer.py create mode 100644 asset_lite/asset_lite/doctype/mobile_team_site/__init__.py create mode 100644 asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.js create mode 100644 asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.json create mode 100644 asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.py create mode 100644 asset_lite/asset_lite/doctype/mobile_team_site/test_mobile_team_site.py create mode 100644 asset_lite/asset_lite/doctype/modality/__init__.py create mode 100644 asset_lite/asset_lite/doctype/modality/modality.js create mode 100644 asset_lite/asset_lite/doctype/modality/modality.json create mode 100644 asset_lite/asset_lite/doctype/modality/modality.py create mode 100644 asset_lite/asset_lite/doctype/modality/test_modality.py create mode 100644 asset_lite/asset_lite/doctype/pi_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/pi_table/pi_table.json create mode 100644 asset_lite/asset_lite/doctype/pi_table/pi_table.py create mode 100644 asset_lite/asset_lite/doctype/pm_entry_line/__init__.py create mode 100644 asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.json create mode 100644 asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.py create mode 100644 asset_lite/asset_lite/doctype/pm_schedule_generator/__init__.py create mode 100644 asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.js create mode 100644 asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.json create mode 100644 asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.py create mode 100644 asset_lite/asset_lite/doctype/pm_schedule_generator/test_pm_schedule_generator.py create mode 100644 asset_lite/asset_lite/doctype/ppm/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm/ppm.js create mode 100644 asset_lite/asset_lite/doctype/ppm/ppm.json create mode 100644 asset_lite/asset_lite/doctype/ppm/ppm.py create mode 100644 asset_lite/asset_lite/doctype/ppm/test_ppm.py create mode 100644 asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.js create mode 100644 asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.json create mode 100644 asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.py create mode 100644 asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/test_ppm_ct_scan_machine_template.py create mode 100644 asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.json create mode 100644 asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.py create mode 100644 asset_lite/asset_lite/doctype/ppm_electricals_panels_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.json create mode 100644 asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.py create mode 100644 asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.json create mode 100644 asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.py create mode 100644 asset_lite/asset_lite/doctype/ppm_mri_template/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.js create mode 100644 asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.json create mode 100644 asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.py create mode 100644 asset_lite/asset_lite/doctype/ppm_mri_template/test_ppm_mri_template.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.js create mode 100644 asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.json create mode 100644 asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/test_ppm_of_ct_scan_machine.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.js create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.json create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/test_ppm_of_electrical_fixtures_inside_rooms.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_panels/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.js create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.json create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_electrical_panels/test_ppm_of_electrical_panels.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.js create mode 100644 asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.json create mode 100644 asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/test_ppm_of_fire_alarm_devices.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.js create mode 100644 asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.json create mode 100644 asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.py create mode 100644 asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/test_ppm_of_mri_scan_machine.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table/ppm_table.json create mode 100644 asset_lite/asset_lite/doctype/ppm_table/ppm_table.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.json create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_mri/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.json create mode 100644 asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.py create mode 100644 asset_lite/asset_lite/doctype/ppm_templates/__init__.py create mode 100644 asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.js create mode 100644 asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.json create mode 100644 asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.py create mode 100644 asset_lite/asset_lite/doctype/ppm_templates/test_ppm_templates.py create mode 100644 asset_lite/asset_lite/doctype/pr_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/pr_table/pr_table.json create mode 100644 asset_lite/asset_lite/doctype/pr_table/pr_table.py create mode 100644 asset_lite/asset_lite/doctype/purchase_request/__init__.py create mode 100644 asset_lite/asset_lite/doctype/purchase_request/purchase_request.js create mode 100644 asset_lite/asset_lite/doctype/purchase_request/purchase_request.json create mode 100644 asset_lite/asset_lite/doctype/purchase_request/purchase_request.py create mode 100644 asset_lite/asset_lite/doctype/purchase_request/test_purchase_request.py create mode 100644 asset_lite/asset_lite/doctype/purchase_request_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.json create mode 100644 asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.py create mode 100644 asset_lite/asset_lite/doctype/service_coverage/__init__.py create mode 100644 asset_lite/asset_lite/doctype/service_coverage/service_coverage.json create mode 100644 asset_lite/asset_lite/doctype/service_coverage/service_coverage.py create mode 100644 asset_lite/asset_lite/doctype/site_information/__init__.py create mode 100644 asset_lite/asset_lite/doctype/site_information/site_information.js create mode 100644 asset_lite/asset_lite/doctype/site_information/site_information.json create mode 100644 asset_lite/asset_lite/doctype/site_information/site_information.py create mode 100644 asset_lite/asset_lite/doctype/site_information/test_site_information.py create mode 100644 asset_lite/asset_lite/doctype/spare_parts/__init__.py create mode 100644 asset_lite/asset_lite/doctype/spare_parts/spare_parts.json create mode 100644 asset_lite/asset_lite/doctype/spare_parts/spare_parts.py create mode 100644 asset_lite/asset_lite/doctype/supplier_reason/__init__.py create mode 100644 asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.js create mode 100644 asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.json create mode 100644 asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.py create mode 100644 asset_lite/asset_lite/doctype/supplier_reason/test_supplier_reason.py create mode 100644 asset_lite/asset_lite/doctype/support_asset_list/__init__.py create mode 100644 asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.json create mode 100644 asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.py create mode 100644 asset_lite/asset_lite/doctype/support_plans/__init__.py create mode 100644 asset_lite/asset_lite/doctype/support_plans/support_plans.js create mode 100644 asset_lite/asset_lite/doctype/support_plans/support_plans.json create mode 100644 asset_lite/asset_lite/doctype/support_plans/support_plans.py create mode 100644 asset_lite/asset_lite/doctype/support_plans/test_support_plans.py create mode 100644 asset_lite/asset_lite/doctype/warranty/__init__.py create mode 100644 asset_lite/asset_lite/doctype/warranty/test_warranty.py create mode 100644 asset_lite/asset_lite/doctype/warranty/warranty.js create mode 100644 asset_lite/asset_lite/doctype/warranty/warranty.json create mode 100644 asset_lite/asset_lite/doctype/warranty/warranty.py create mode 100644 asset_lite/asset_lite/doctype/work_order/__init__.py create mode 100644 asset_lite/asset_lite/doctype/work_order/test_work_order.py create mode 100644 asset_lite/asset_lite/doctype/work_order/work_order.js create mode 100644 asset_lite/asset_lite/doctype/work_order/work_order.json create mode 100644 asset_lite/asset_lite/doctype/work_order/work_order.py create mode 100644 asset_lite/asset_lite/doctype/work_order_requisitor/__init__.py create mode 100644 asset_lite/asset_lite/doctype/work_order_requisitor/test_work_order_requisitor.py create mode 100644 asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.js create mode 100644 asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.json create mode 100644 asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.py create mode 100644 asset_lite/asset_lite/doctype/work_order_table/__init__.py create mode 100644 asset_lite/asset_lite/doctype/work_order_table/work_order_table.json create mode 100644 asset_lite/asset_lite/doctype/work_order_table/work_order_table.py create mode 100644 asset_lite/asset_lite/page/__init__.py create mode 100644 asset_lite/asset_lite/page/active_map/__init__.py create mode 100644 asset_lite/asset_lite/page/active_map/active_map.js create mode 100644 asset_lite/asset_lite/page/active_map/active_map.json create mode 100644 asset_lite/asset_lite/page/asset_history/__init__.py create mode 100644 asset_lite/asset_lite/page/asset_history/asset_history.js create mode 100644 asset_lite/asset_lite/page/asset_history/asset_history.json create mode 100644 asset_lite/asset_lite/page/asset_map/__init__.py create mode 100644 asset_lite/asset_lite/page/asset_map/asset_map.js create mode 100644 asset_lite/asset_lite/page/asset_map/asset_map.json create mode 100644 asset_lite/asset_lite/page/privacy_policy/__init__.py create mode 100644 asset_lite/asset_lite/page/privacy_policy/privacy_policy.js create mode 100644 asset_lite/asset_lite/page/privacy_policy/privacy_policy.json create mode 100644 asset_lite/asset_lite/page/test/__init__.py create mode 100644 asset_lite/asset_lite/page/test/test.js create mode 100644 asset_lite/asset_lite/page/test/test.json create mode 100644 asset_lite/asset_lite/report/__init__.py create mode 100644 asset_lite/asset_lite/report/maintenance_percentage_of_replacement_asset_value_(mprav)/__init__.py create mode 100644 asset_lite/asset_lite/report/maintenance_percentage_of_replacement_asset_value_(mprav)/maintenance_percentage_of_replacement_asset_value_(mprav).js create mode 100644 asset_lite/asset_lite/report/maintenance_percentage_of_replacement_asset_value_(mprav)/maintenance_percentage_of_replacement_asset_value_(mprav).json create mode 100644 asset_lite/asset_lite/report/maintenance_percentage_of_replacement_asset_value_(mprav)/maintenance_percentage_of_replacement_asset_value_(mprav).py create mode 100644 asset_lite/asset_lite/report/maintenance_response_time/__init__.py create mode 100644 asset_lite/asset_lite/report/maintenance_response_time/maintenance_response_time.js create mode 100644 asset_lite/asset_lite/report/maintenance_response_time/maintenance_response_time.json create mode 100644 asset_lite/asset_lite/report/maintenance_response_time/maintenance_response_time.py create mode 100644 asset_lite/asset_lite/report/mtbf/__init__.py create mode 100644 asset_lite/asset_lite/report/mtbf/mtbf.js create mode 100644 asset_lite/asset_lite/report/mtbf/mtbf.json create mode 100644 asset_lite/asset_lite/report/mtbf/mtbf.py create mode 100644 asset_lite/asset_lite/report/planned_maintenance_percentage_(pmp)/__init__.py create mode 100644 asset_lite/asset_lite/report/planned_maintenance_percentage_(pmp)/planned_maintenance_percentage_(pmp).js create mode 100644 asset_lite/asset_lite/report/planned_maintenance_percentage_(pmp)/planned_maintenance_percentage_(pmp).json create mode 100644 asset_lite/asset_lite/report/planned_maintenance_percentage_(pmp)/planned_maintenance_percentage_(pmp).py create mode 100644 asset_lite/asset_lite/report/preventive_maintenance_compliance_(pmc)/__init__.py create mode 100644 asset_lite/asset_lite/report/preventive_maintenance_compliance_(pmc)/preventive_maintenance_compliance_(pmc).js create mode 100644 asset_lite/asset_lite/report/preventive_maintenance_compliance_(pmc)/preventive_maintenance_compliance_(pmc).json create mode 100644 asset_lite/asset_lite/report/preventive_maintenance_compliance_(pmc)/preventive_maintenance_compliance_(pmc).py create mode 100644 asset_lite/asset_lite/report/supplier_down_time/__init__.py create mode 100644 asset_lite/asset_lite/report/supplier_down_time/supplier_down_time.js create mode 100644 asset_lite/asset_lite/report/supplier_down_time/supplier_down_time.json create mode 100644 asset_lite/asset_lite/report/supplier_down_time/supplier_down_time.py create mode 100644 asset_lite/asset_lite/report/supplier_score/__init__.py create mode 100644 asset_lite/asset_lite/report/supplier_score/supplier_score.js create mode 100644 asset_lite/asset_lite/report/supplier_score/supplier_score.json create mode 100644 asset_lite/asset_lite/report/supplier_score/supplier_score.py create mode 100644 asset_lite/asset_lite/report/supplier_total_score/__init__.py create mode 100644 asset_lite/asset_lite/report/supplier_total_score/supplier_total_score.js create mode 100644 asset_lite/asset_lite/report/supplier_total_score/supplier_total_score.json create mode 100644 asset_lite/asset_lite/report/supplier_total_score/supplier_total_score.py create mode 100644 asset_lite/asset_lite/report/test_sup_vs_score_report/__init__.py create mode 100644 asset_lite/asset_lite/report/test_sup_vs_score_report/test_sup_vs_score_report.json create mode 100644 asset_lite/asset_lite/workspace/asset_management/asset_management.json create mode 100644 asset_lite/config/__init__.py create mode 100644 asset_lite/fixtures/client_script.json create mode 100644 asset_lite/fixtures/custom_docperm.json create mode 100644 asset_lite/fixtures/custom_field.json create mode 100644 asset_lite/fixtures/dashboard.json create mode 100644 asset_lite/fixtures/dashboard_chart.json create mode 100644 asset_lite/fixtures/notification.json create mode 100644 asset_lite/fixtures/number_card.json create mode 100644 asset_lite/fixtures/print_format.json create mode 100644 asset_lite/fixtures/property_setter.json create mode 100644 asset_lite/fixtures/report.json create mode 100644 asset_lite/fixtures/role.json create mode 100644 asset_lite/fixtures/server_script.json create mode 100644 asset_lite/fixtures/translation.json create mode 100644 asset_lite/fixtures/workflow.json create mode 100644 asset_lite/fixtures/workflow_action_master.json create mode 100644 asset_lite/fixtures/workflow_state.json create mode 100644 asset_lite/fixtures/workspace.json create mode 100644 asset_lite/hooks.py create mode 100644 asset_lite/map.py create mode 100644 asset_lite/modules.txt create mode 100644 asset_lite/patches.txt create mode 100644 asset_lite/public/.gitkeep create mode 100644 asset_lite/public/css/custom.css create mode 100644 asset_lite/public/js/custom_asset_maintenance_log.js create mode 100644 asset_lite/public/js/dashboard_embed.js create mode 100644 asset_lite/public/py/asset.py create mode 100644 asset_lite/supplier_score_criteria_override.py create mode 100644 asset_lite/templates/__init__.py create mode 100644 asset_lite/templates/pages/__init__.py create mode 100644 asset_lite/www/standalone-active-map.html create mode 100644 license.txt create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba04025 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +*.pyc +*.egg-info +*.swp +tags +node_modules +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..31831cf --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## Asset Lite + +Asset Management System + +#### License + +mit \ No newline at end of file diff --git a/asset_lite/__init__.py b/asset_lite/__init__.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/asset_lite/__init__.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/asset_lite/api/api.py b/asset_lite/api/api.py new file mode 100644 index 0000000..fa8e1e8 --- /dev/null +++ b/asset_lite/api/api.py @@ -0,0 +1,30 @@ +import frappe + +def set_default_homepage(): + + """ + Set the default workspace based on the user's role. + """ + # Get the current user + current_user = frappe.session.user + + # Skip for system users + if current_user in ("Administrator", "Guest"): + return + + # Define role-based workspaces + role_based_workspaces = { + "Maintenance Manager": "asset-management", + #"Maintenance User": "asset-management", + #"Technician": "asset-management" + } + + # Get the user's roles + user_roles = frappe.get_roles(current_user) + + # Determine the default workspace + for role, workspace in role_based_workspaces.items(): + if role in user_roles: + # Set the session home page + frappe.local.response["home_page"] = f"/app/{workspace}" + return \ No newline at end of file diff --git a/asset_lite/asset_lite/__init__.py b/asset_lite/asset_lite/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.js b/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.js new file mode 100644 index 0000000..de66774 --- /dev/null +++ b/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.js @@ -0,0 +1,47 @@ +frappe.dashboards.chart_sources["Active Map Widget"] = { + method: "asset_lite.map.get_custom_html_data", + filters: [] +}; + +// Override the chart rendering after data is loaded +frappe.provide('frappe.dashboards'); + +$(document).on('app_ready', function() { + // Override the render method for custom HTML charts + const original_render = frappe.ui.Dashboard.prototype.render_chart; + + frappe.ui.Dashboard.prototype.render_chart = function(chart_data, chart_container) { + if (chart_data.custom_html) { + // Clear the container and add custom HTML + chart_container.empty(); + const custom_html = ` +
+

Custom Dashboard Content

+
+
+
+
Card Title 1
+

Your custom content here

+ +
+
+
+
+
Card Title 2
+

More custom content

+
+
75%
+
+
+
+
+
+ `; + chart_container.html(custom_html); + return; + } + // Call original render method for other charts + return original_render.call(this, chart_data, chart_container); + }; +}); + diff --git a/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.json b/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.json new file mode 100644 index 0000000..3ac228f --- /dev/null +++ b/asset_lite/asset_lite/dashboard_chart_source/active_map_widget/active_map_widget.json @@ -0,0 +1,13 @@ +{ + "creation": "2025-06-25 18:03:16.704998", + "docstatus": 0, + "doctype": "Dashboard Chart Source", + "idx": 0, + "modified": "2025-06-25 18:03:16.704998", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Active Map Widget", + "owner": "Administrator", + "source_name": "Active Map Widget", + "timeseries": 0 +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/__init__.py b/asset_lite/asset_lite/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/agent/__init__.py b/asset_lite/asset_lite/doctype/agent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/agent/agent.js b/asset_lite/asset_lite/doctype/agent/agent.js new file mode 100644 index 0000000..60d397e --- /dev/null +++ b/asset_lite/asset_lite/doctype/agent/agent.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Agent", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/agent/agent.json b/asset_lite/asset_lite/doctype/agent/agent.json new file mode 100644 index 0000000..b71b9f3 --- /dev/null +++ b/asset_lite/asset_lite/doctype/agent/agent.json @@ -0,0 +1,45 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:agent_name", + "creation": "2024-12-13 14:37:38.780730", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "agent_name" + ], + "fields": [ + { + "fieldname": "agent_name", + "fieldtype": "Data", + "label": "Agent Name", + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-12-13 15:15:47.447599", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Agent", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/agent/agent.py b/asset_lite/asset_lite/doctype/agent/agent.py new file mode 100644 index 0000000..c8ff934 --- /dev/null +++ b/asset_lite/asset_lite/doctype/agent/agent.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Agent(Document): + pass diff --git a/asset_lite/asset_lite/doctype/agent/test_agent.py b/asset_lite/asset_lite/doctype/agent/test_agent.py new file mode 100644 index 0000000..ec44bae --- /dev/null +++ b/asset_lite/asset_lite/doctype/agent/test_agent.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestAgent(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/arabic_names/__init__.py b/asset_lite/asset_lite/doctype/arabic_names/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/arabic_names/arabic_names.js b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.js new file mode 100644 index 0000000..51ffe24 --- /dev/null +++ b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Arabic Names", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/arabic_names/arabic_names.json b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.json new file mode 100644 index 0000000..cb19433 --- /dev/null +++ b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.json @@ -0,0 +1,50 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:name1", + "creation": "2025-02-07 16:56:53.486694", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "name1", + "arabic_name" + ], + "fields": [ + { + "fieldname": "name1", + "fieldtype": "Data", + "label": "Name", + "unique": 1 + }, + { + "fieldname": "arabic_name", + "fieldtype": "Data", + "label": "Arabic Name" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-02-07 16:57:50.823039", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Arabic Names", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/arabic_names/arabic_names.py b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.py new file mode 100644 index 0000000..a812f42 --- /dev/null +++ b/asset_lite/asset_lite/doctype/arabic_names/arabic_names.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class ArabicNames(Document): + pass diff --git a/asset_lite/asset_lite/doctype/arabic_names/test_arabic_names.py b/asset_lite/asset_lite/doctype/arabic_names/test_arabic_names.py new file mode 100644 index 0000000..66eeb6d --- /dev/null +++ b/asset_lite/asset_lite/doctype/arabic_names/test_arabic_names.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestArabicNames(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/asset_item_transfer/__init__.py b/asset_lite/asset_lite/doctype/asset_item_transfer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.json b/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.json new file mode 100644 index 0000000..3dfde9a --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.json @@ -0,0 +1,59 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-08-26 21:00:34.676325", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "asset", + "asset_name", + "qty", + "column_break_kbew", + "return_inspection_committee" + ], + "fields": [ + { + "fieldname": "asset", + "fieldtype": "Link", + "label": "Asset", + "options": "Asset" + }, + { + "fetch_from": "asset.asset_name", + "fetch_if_empty": 1, + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name" + }, + { + "default": "1", + "fieldname": "qty", + "fieldtype": "Float", + "label": "Qty" + }, + { + "fieldname": "column_break_kbew", + "fieldtype": "Column Break" + }, + { + "fieldname": "return_inspection_committee", + "fieldtype": "Select", + "label": "Return Inspection Committee", + "options": "\nFor Repair\nFor Sale\nFor Disposal" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-08-26 21:00:34.676325", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Asset Item Transfer", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.py b/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.py new file mode 100644 index 0000000..cc08c50 --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_item_transfer/asset_item_transfer.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class AssetItemTransfer(Document): + pass diff --git a/asset_lite/asset_lite/doctype/asset_type/__init__.py b/asset_lite/asset_lite/doctype/asset_type/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/asset_type/asset_type.js b/asset_lite/asset_lite/doctype/asset_type/asset_type.js new file mode 100644 index 0000000..bf166ba --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_type/asset_type.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Asset Type", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/asset_type/asset_type.json b/asset_lite/asset_lite/doctype/asset_type/asset_type.json new file mode 100644 index 0000000..5c0b22e --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_type/asset_type.json @@ -0,0 +1,47 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:asset_type", + "creation": "2024-09-23 14:16:49.149093", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "asset_type" + ], + "fields": [ + { + "fieldname": "asset_type", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Asset Type", + "reqd": 1, + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-09-23 14:17:58.073254", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Asset Type", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/asset_type/asset_type.py b/asset_lite/asset_lite/doctype/asset_type/asset_type.py new file mode 100644 index 0000000..40625d4 --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_type/asset_type.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class AssetType(Document): + pass diff --git a/asset_lite/asset_lite/doctype/asset_type/test_asset_type.py b/asset_lite/asset_lite/doctype/asset_type/test_asset_type.py new file mode 100644 index 0000000..ab898f7 --- /dev/null +++ b/asset_lite/asset_lite/doctype/asset_type/test_asset_type.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestAssetType(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/city/__init__.py b/asset_lite/asset_lite/doctype/city/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/city/city.js b/asset_lite/asset_lite/doctype/city/city.js new file mode 100644 index 0000000..fd9a4ed --- /dev/null +++ b/asset_lite/asset_lite/doctype/city/city.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("City", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/city/city.json b/asset_lite/asset_lite/doctype/city/city.json new file mode 100644 index 0000000..63055c8 --- /dev/null +++ b/asset_lite/asset_lite/doctype/city/city.json @@ -0,0 +1,44 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:city", + "creation": "2025-08-26 15:20:17.013649", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "city" + ], + "fields": [ + { + "fieldname": "city", + "fieldtype": "Data", + "label": "City", + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-08-26 20:43:50.686274", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "City", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/city/city.py b/asset_lite/asset_lite/doctype/city/city.py new file mode 100644 index 0000000..a480771 --- /dev/null +++ b/asset_lite/asset_lite/doctype/city/city.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class City(Document): + pass diff --git a/asset_lite/asset_lite/doctype/city/test_city.py b/asset_lite/asset_lite/doctype/city/test_city.py new file mode 100644 index 0000000..95d3486 --- /dev/null +++ b/asset_lite/asset_lite/doctype/city/test_city.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestCity(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ecri_umdns/__init__.py b/asset_lite/asset_lite/doctype/ecri_umdns/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.js b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.js new file mode 100644 index 0000000..c779c86 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("ECRI UMDNS", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.json b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.json new file mode 100644 index 0000000..323b38a --- /dev/null +++ b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.json @@ -0,0 +1,51 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:ecri", + "creation": "2024-12-03 14:43:40.910282", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "ecri", + "device_name" + ], + "fields": [ + { + "fieldname": "ecri", + "fieldtype": "Data", + "label": "ECRI", + "unique": 1 + }, + { + "fieldname": "device_name", + "fieldtype": "Data", + "label": "Device Name" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-12-03 18:43:19.609779", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "ECRI UMDNS", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.py b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.py new file mode 100644 index 0000000..a7d1fd4 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ecri_umdns/ecri_umdns.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class ECRIUMDNS(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ecri_umdns/test_ecri_umdns.py b/asset_lite/asset_lite/doctype/ecri_umdns/test_ecri_umdns.py new file mode 100644 index 0000000..57b3a75 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ecri_umdns/test_ecri_umdns.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestECRIUMDNS(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/feedback/__init__.py b/asset_lite/asset_lite/doctype/feedback/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/feedback/feedback.js b/asset_lite/asset_lite/doctype/feedback/feedback.js new file mode 100644 index 0000000..e344db7 --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback/feedback.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Feedback", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/feedback/feedback.json b/asset_lite/asset_lite/doctype/feedback/feedback.json new file mode 100644 index 0000000..a58142b --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback/feedback.json @@ -0,0 +1,77 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-03-05 19:53:51.796362", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "work_order", + "column_break_eytf", + "feedback_by", + "section_break_rvtb", + "parameters", + "section_break_zmrx", + "overall" + ], + "fields": [ + { + "fieldname": "work_order", + "fieldtype": "Link", + "label": "Work Order", + "options": "Work_Order" + }, + { + "fieldname": "column_break_eytf", + "fieldtype": "Column Break" + }, + { + "fieldname": "feedback_by", + "fieldtype": "Link", + "label": "Feedback by", + "options": "User" + }, + { + "fieldname": "section_break_rvtb", + "fieldtype": "Section Break" + }, + { + "fieldname": "parameters", + "fieldtype": "Table", + "label": "Parameters", + "options": "Feedback Table" + }, + { + "fieldname": "section_break_zmrx", + "fieldtype": "Section Break" + }, + { + "fieldname": "overall", + "fieldtype": "Rating", + "label": "Overall" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-03-05 19:56:58.056262", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Feedback", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/feedback/feedback.py b/asset_lite/asset_lite/doctype/feedback/feedback.py new file mode 100644 index 0000000..7858254 --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback/feedback.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Feedback(Document): + pass diff --git a/asset_lite/asset_lite/doctype/feedback/test_feedback.py b/asset_lite/asset_lite/doctype/feedback/test_feedback.py new file mode 100644 index 0000000..cc66323 --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback/test_feedback.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestFeedback(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/feedback_table/__init__.py b/asset_lite/asset_lite/doctype/feedback_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/feedback_table/feedback_table.json b/asset_lite/asset_lite/doctype/feedback_table/feedback_table.json new file mode 100644 index 0000000..897e1e5 --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback_table/feedback_table.json @@ -0,0 +1,44 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-03-05 20:36:14.651301", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "parameter", + "rating", + "feedback" + ], + "fields": [ + { + "fieldname": "parameter", + "fieldtype": "Data", + "label": "Parameter" + }, + { + "fieldname": "rating", + "fieldtype": "Rating", + "in_list_view": 1, + "label": "Rating", + "reqd": 1 + }, + { + "fieldname": "feedback", + "fieldtype": "Text", + "label": "Feedback" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-03-05 20:49:43.458939", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Feedback Table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/feedback_table/feedback_table.py b/asset_lite/asset_lite/doctype/feedback_table/feedback_table.py new file mode 100644 index 0000000..0a7e6ec --- /dev/null +++ b/asset_lite/asset_lite/doctype/feedback_table/feedback_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class FeedbackTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/item_transfer_table/__init__.py b/asset_lite/asset_lite/doctype/item_transfer_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.json b/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.json new file mode 100644 index 0000000..3a92f47 --- /dev/null +++ b/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.json @@ -0,0 +1,64 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-08-26 21:01:28.397119", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item", + "qty", + "uom", + "column_break_gcjw", + "item_name", + "return_inspection_committee" + ], + "fields": [ + { + "fieldname": "item", + "fieldtype": "Link", + "label": "Item", + "options": "Item" + }, + { + "fieldname": "qty", + "fieldtype": "Float", + "label": "Qty" + }, + { + "fetch_from": "item.stock_uom", + "fetch_if_empty": 1, + "fieldname": "uom", + "fieldtype": "Link", + "label": "UOM", + "options": "UOM" + }, + { + "fieldname": "column_break_gcjw", + "fieldtype": "Column Break" + }, + { + "fieldname": "item_name", + "fieldtype": "Data", + "label": "Item Name" + }, + { + "fieldname": "return_inspection_committee", + "fieldtype": "Select", + "label": "Return Inspection Committee", + "options": "\nFor Repair\nFor Sale\nFor Disposal" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-08-26 21:01:28.397119", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Item Transfer Table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.py b/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.py new file mode 100644 index 0000000..bd90683 --- /dev/null +++ b/asset_lite/asset_lite/doctype/item_transfer_table/item_transfer_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class ItemTransferTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/material_transfer/__init__.py b/asset_lite/asset_lite/doctype/material_transfer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/material_transfer/material_transfer.js b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.js new file mode 100644 index 0000000..d7c7c5e --- /dev/null +++ b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Material Transfer", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/material_transfer/material_transfer.json b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.json new file mode 100644 index 0000000..4dc61d5 --- /dev/null +++ b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.json @@ -0,0 +1,128 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:Material-Transfer-{####}", + "creation": "2025-08-26 21:02:44.817236", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "hospital", + "purpose", + "source_warehouse", + "asset", + "column_break_irlz", + "date", + "reason_for_return", + "transfer_type", + "target_warehouse", + "item", + "section_break_bunw", + "item_table", + "asset_transfer" + ], + "fields": [ + { + "fieldname": "hospital", + "fieldtype": "Link", + "label": "Hospital", + "options": "Company" + }, + { + "fieldname": "purpose", + "fieldtype": "Select", + "label": "Purpose", + "options": "Transfer" + }, + { + "fieldname": "source_warehouse", + "fieldtype": "Link", + "label": "Source Warehouse", + "options": "Warehouse" + }, + { + "depends_on": "eval:doc.transfer_type=='Asset'", + "fieldname": "asset", + "fieldtype": "Link", + "label": "Asset", + "options": "Asset" + }, + { + "fieldname": "column_break_irlz", + "fieldtype": "Column Break" + }, + { + "default": "Today", + "fieldname": "date", + "fieldtype": "Date", + "label": "Date" + }, + { + "fieldname": "reason_for_return", + "fieldtype": "Select", + "label": "Reason for Return", + "options": "\nPurpose Completed\nSurplus\nUnusable\nDamaged" + }, + { + "fieldname": "transfer_type", + "fieldtype": "Select", + "label": "Transfer Type", + "options": "\nAsset\nItem" + }, + { + "fieldname": "target_warehouse", + "fieldtype": "Link", + "label": "Target Warehouse", + "options": "Warehouse" + }, + { + "depends_on": "eval:doc.transfer_type=='Item'", + "fieldname": "item", + "fieldtype": "Link", + "label": "Item", + "options": "Item" + }, + { + "fieldname": "section_break_bunw", + "fieldtype": "Section Break" + }, + { + "depends_on": "eval:doc.transfer_type=='Item'", + "fieldname": "item_table", + "fieldtype": "Table", + "label": "Item Table", + "options": "Item Transfer Table" + }, + { + "depends_on": "eval:doc.transfer_type=='Asset'", + "fieldname": "asset_transfer", + "fieldtype": "Table", + "label": "Asset Transfer", + "options": "Asset Item Transfer" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-08-26 21:02:44.817236", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Material Transfer", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/material_transfer/material_transfer.py b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.py new file mode 100644 index 0000000..c3f7642 --- /dev/null +++ b/asset_lite/asset_lite/doctype/material_transfer/material_transfer.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class MaterialTransfer(Document): + pass diff --git a/asset_lite/asset_lite/doctype/material_transfer/test_material_transfer.py b/asset_lite/asset_lite/doctype/material_transfer/test_material_transfer.py new file mode 100644 index 0000000..f29131b --- /dev/null +++ b/asset_lite/asset_lite/doctype/material_transfer/test_material_transfer.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestMaterialTransfer(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/mobile_team_site/__init__.py b/asset_lite/asset_lite/doctype/mobile_team_site/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.js b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.js new file mode 100644 index 0000000..83d40e1 --- /dev/null +++ b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Mobile Team Site", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.json b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.json new file mode 100644 index 0000000..d26a3bc --- /dev/null +++ b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.json @@ -0,0 +1,58 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:site_name", + "creation": "2025-08-08 15:36:41.575671", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "site_name", + "mobile_team", + "city" + ], + "fields": [ + { + "fieldname": "site_name", + "fieldtype": "Data", + "label": "Site Name", + "unique": 1 + }, + { + "fieldname": "mobile_team", + "fieldtype": "Link", + "label": "Mobile Team", + "options": "Company" + }, + { + "fieldname": "city", + "fieldtype": "Link", + "label": "City", + "options": "City" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-08-26 15:26:09.017274", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Mobile Team Site", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.py b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.py new file mode 100644 index 0000000..3486d9b --- /dev/null +++ b/asset_lite/asset_lite/doctype/mobile_team_site/mobile_team_site.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class MobileTeamSite(Document): + pass diff --git a/asset_lite/asset_lite/doctype/mobile_team_site/test_mobile_team_site.py b/asset_lite/asset_lite/doctype/mobile_team_site/test_mobile_team_site.py new file mode 100644 index 0000000..ce0a149 --- /dev/null +++ b/asset_lite/asset_lite/doctype/mobile_team_site/test_mobile_team_site.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestMobileTeamSite(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/modality/__init__.py b/asset_lite/asset_lite/doctype/modality/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/modality/modality.js b/asset_lite/asset_lite/doctype/modality/modality.js new file mode 100644 index 0000000..348c437 --- /dev/null +++ b/asset_lite/asset_lite/doctype/modality/modality.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Modality", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/modality/modality.json b/asset_lite/asset_lite/doctype/modality/modality.json new file mode 100644 index 0000000..b6c5ab2 --- /dev/null +++ b/asset_lite/asset_lite/doctype/modality/modality.json @@ -0,0 +1,44 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:modality", + "creation": "2025-09-08 12:40:28.438645", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "modality" + ], + "fields": [ + { + "fieldname": "modality", + "fieldtype": "Data", + "label": "Modality", + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-09-08 12:41:21.725442", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Modality", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/modality/modality.py b/asset_lite/asset_lite/doctype/modality/modality.py new file mode 100644 index 0000000..293bc1f --- /dev/null +++ b/asset_lite/asset_lite/doctype/modality/modality.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Modality(Document): + pass diff --git a/asset_lite/asset_lite/doctype/modality/test_modality.py b/asset_lite/asset_lite/doctype/modality/test_modality.py new file mode 100644 index 0000000..f3af0e5 --- /dev/null +++ b/asset_lite/asset_lite/doctype/modality/test_modality.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestModality(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/pi_table/__init__.py b/asset_lite/asset_lite/doctype/pi_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/pi_table/pi_table.json b/asset_lite/asset_lite/doctype/pi_table/pi_table.json new file mode 100644 index 0000000..029dc0d --- /dev/null +++ b/asset_lite/asset_lite/doctype/pi_table/pi_table.json @@ -0,0 +1,38 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-09-20 13:15:43.666184", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "purchase_invoice", + "cost" + ], + "fields": [ + { + "fieldname": "purchase_invoice", + "fieldtype": "Link", + "label": "Purchase Invoice", + "options": "Purchase Invoice" + }, + { + "fetch_from": "purchase_invoice.grand_total", + "fieldname": "cost", + "fieldtype": "Currency", + "label": "Cost" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-20 13:19:33.308381", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PI Table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/pi_table/pi_table.py b/asset_lite/asset_lite/doctype/pi_table/pi_table.py new file mode 100644 index 0000000..4ef5c2d --- /dev/null +++ b/asset_lite/asset_lite/doctype/pi_table/pi_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PITable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/pm_entry_line/__init__.py b/asset_lite/asset_lite/doctype/pm_entry_line/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.json b/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.json new file mode 100644 index 0000000..78fdb8e --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.json @@ -0,0 +1,70 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-09-18 13:07:33.907967", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "asset", + "asset_name", + "start_date", + "end_date", + "manufacturer", + "model" + ], + "fields": [ + { + "fieldname": "asset", + "fieldtype": "Link", + "in_global_search": 1, + "in_list_view": 1, + "label": "Asset", + "options": "Asset" + }, + { + "fieldname": "asset_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Asset Name", + "read_only": 1 + }, + { + "fieldname": "start_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Start Date" + }, + { + "fieldname": "end_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "End Date" + }, + { + "fieldname": "manufacturer", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Manufacturer", + "options": "Manufacturer" + }, + { + "fieldname": "model", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Model" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-09-18 13:08:35.075783", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PM Entry Line", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.py b/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.py new file mode 100644 index 0000000..5babec9 --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_entry_line/pm_entry_line.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PMEntryLine(Document): + pass diff --git a/asset_lite/asset_lite/doctype/pm_schedule_generator/__init__.py b/asset_lite/asset_lite/doctype/pm_schedule_generator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.js b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.js new file mode 100644 index 0000000..2424038 --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PM Schedule Generator", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.json b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.json new file mode 100644 index 0000000..24419c2 --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.json @@ -0,0 +1,207 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:PMSG-{DD}-{MM}-{YY}-{####}", + "creation": "2025-09-08 13:29:07.175342", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "asset_details_section", + "hospital", + "manufacturer", + "model", + "column_break_qtoh", + "asset_name", + "modality", + "device_status", + "maintenance_details_section", + "start_date", + "maintenance_team", + "maintenance_manager", + "column_break_kapm", + "end_date", + "periodicity", + "assign_to", + "due_date", + "section_break_hkrb", + "maintenance_entries", + "amended_from" + ], + "fields": [ + { + "fieldname": "asset_details_section", + "fieldtype": "Section Break", + "label": "Asset Details" + }, + { + "fieldname": "hospital", + "fieldtype": "Link", + "in_filter": 1, + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Hospital", + "options": "Company", + "reqd": 1 + }, + { + "fieldname": "manufacturer", + "fieldtype": "Link", + "in_filter": 1, + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Manufacturer", + "options": "Manufacturer" + }, + { + "fieldname": "model", + "fieldtype": "Data", + "in_global_search": 1, + "in_list_view": 1, + "label": "Model" + }, + { + "fieldname": "column_break_qtoh", + "fieldtype": "Column Break" + }, + { + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name", + "read_only": 1 + }, + { + "fieldname": "device_status", + "fieldtype": "Select", + "label": "Device Status", + "options": "\nUp\nDown" + }, + { + "fieldname": "maintenance_details_section", + "fieldtype": "Section Break", + "label": "Maintenance Details" + }, + { + "fieldname": "start_date", + "fieldtype": "Date", + "label": "Start Date", + "reqd": 1 + }, + { + "fieldname": "maintenance_team", + "fieldtype": "Link", + "label": "Maintenance Team", + "mandatory_depends_on": "eval:doc.maintenance_entries && doc.maintenance_entries.length > 0", + "options": "Asset Maintenance Team" + }, + { + "fetch_from": "maintenance_team.maintenance_manager", + "fetch_if_empty": 1, + "fieldname": "maintenance_manager", + "fieldtype": "Data", + "label": "Maintenance Manager" + }, + { + "fieldname": "column_break_kapm", + "fieldtype": "Column Break" + }, + { + "fieldname": "end_date", + "fieldtype": "Date", + "label": "End Date", + "reqd": 1 + }, + { + "fieldname": "periodicity", + "fieldtype": "Select", + "label": "Periodicity", + "mandatory_depends_on": "eval:doc.maintenance_entries && doc.maintenance_entries.length > 0", + "options": "\nDaily\nWeekly\nMonthly\nQuarterly\nHalf-yearly\nYearly\n2 Yearly\n3 Yearly", + "reqd": 1 + }, + { + "fieldname": "assign_to", + "fieldtype": "Link", + "label": "Assign To", + "mandatory_depends_on": "eval:doc.maintenance_entries && doc.maintenance_entries.length > 0", + "options": "User" + }, + { + "fieldname": "due_date", + "fieldtype": "Date", + "label": "Due Date", + "read_only": 1 + }, + { + "fieldname": "section_break_hkrb", + "fieldtype": "Section Break" + }, + { + "fieldname": "maintenance_entries", + "fieldtype": "Table", + "label": "Maintenance Entries", + "options": "PM Entry Line" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PM Schedule Generator", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PM Schedule Generator", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "modality", + "fieldtype": "Link", + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Modality", + "options": "Modality" + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [ + { + "link_doctype": "Asset Maintenance", + "link_fieldname": "custom_pm_schedule" + } + ], + "modified": "2025-09-08 13:30:20.878126", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PM Schedule Generator", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.py b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.py new file mode 100644 index 0000000..bf229ec --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_schedule_generator/pm_schedule_generator.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PMScheduleGenerator(Document): + pass diff --git a/asset_lite/asset_lite/doctype/pm_schedule_generator/test_pm_schedule_generator.py b/asset_lite/asset_lite/doctype/pm_schedule_generator/test_pm_schedule_generator.py new file mode 100644 index 0000000..50eb703 --- /dev/null +++ b/asset_lite/asset_lite/doctype/pm_schedule_generator/test_pm_schedule_generator.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPMScheduleGenerator(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm/__init__.py b/asset_lite/asset_lite/doctype/ppm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm/ppm.js b/asset_lite/asset_lite/doctype/ppm/ppm.js new file mode 100644 index 0000000..ad4b070 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm/ppm.js @@ -0,0 +1,32 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +frappe.ui.form.on('PPM', { + refresh: function(frm) { + // Hide the default print icon + frm.page.hide_icon_group('print'); + + // Add custom button for PPM Sticker with a print icon + frm.add_custom_button( + ` ${__('PPM Sticker')}`, + function() { + // Set PPM Sticker as the default print format and open print preview + const customLink = `/printview?doctype=PPM&name=${frm.doc.name}&trigger_print=1&format=PPM%20Sticker&no_letterhead=0`; + window.open(customLink); + } + ); + + // Add custom button for PPM Service Report with a print icon + frm.add_custom_button( + ` ${__('Service Report')}`, + function() { + // Set Service Report as the default print format and open print preview + const customLink = `/printview?doctype=PPM&name=${frm.doc.name}&trigger_print=1&format=PPM%20Service%20Report&no_letterhead=0`; + window.open(customLink); + } + ); + } +}); + + + diff --git a/asset_lite/asset_lite/doctype/ppm/ppm.json b/asset_lite/asset_lite/doctype/ppm/ppm.json new file mode 100644 index 0000000..380cb82 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm/ppm.json @@ -0,0 +1,112 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:PPM-{data}-{####}", + "creation": "2024-09-23 17:32:15.127002", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "month", + "year", + "column_break_phdw", + "asset", + "asset_name", + "asset_maintenance_log", + "section_break_3", + "data", + "table", + "amended_from" + ], + "fields": [ + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "column_break_phdw", + "fieldtype": "Column Break" + }, + { + "fieldname": "asset_maintenance_log", + "fieldtype": "Link", + "label": "Asset Maintenance Log", + "options": "Asset Maintenance Log", + "read_only": 1 + }, + { + "fieldname": "section_break_3", + "fieldtype": "Section Break" + }, + { + "default": "CT Scan", + "fieldname": "data", + "fieldtype": "Link", + "label": "Template", + "options": "PPM Templates" + }, + { + "fieldname": "table", + "fieldtype": "Table", + "options": "PPM Table" + }, + { + "fetch_from": "asset_maintenance_log.asset_name", + "fieldname": "asset", + "fieldtype": "Link", + "label": "Asset", + "options": "Asset" + }, + { + "fetch_from": "asset.asset_name", + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name", + "read_only": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-23 18:16:03.998515", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm/ppm.py b/asset_lite/asset_lite/doctype/ppm/ppm.py new file mode 100644 index 0000000..558fceb --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm/ppm.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPM(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm/test_ppm.py b/asset_lite/asset_lite/doctype/ppm/test_ppm.py new file mode 100644 index 0000000..ae51c1a --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm/test_ppm.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPM(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/__init__.py b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.js b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.js new file mode 100644 index 0000000..c371ba8 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM CT SCAN MACHINE TEMPLATE", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.json b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.json new file mode 100644 index 0000000..8253cea --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.json @@ -0,0 +1,43 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-09-13 15:46:54.680689", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "table_1" + ], + "fields": [ + { + "fieldname": "table_1", + "fieldtype": "Table", + "options": "PPM Table For CT Scan Machine" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-09-13 17:45:05.011562", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM CT SCAN MACHINE TEMPLATE", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.py b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.py new file mode 100644 index 0000000..513b7e4 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/ppm_ct_scan_machine_template.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMCTSCANMACHINETEMPLATE(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/test_ppm_ct_scan_machine_template.py b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/test_ppm_ct_scan_machine_template.py new file mode 100644 index 0000000..bde1c7a --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_ct_scan_machine_template/test_ppm_ct_scan_machine_template.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMCTSCANMACHINETEMPLATE(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/__init__.py b/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.json b/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.json new file mode 100644 index 0000000..9fe410e --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.json @@ -0,0 +1,78 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-13 09:25:03.360604", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "room_numbers", + "electrical_switches", + "electrical_sockets_outlets", + "fluorescent_tubes", + "column_break_5", + "ballasts", + "starters", + "glass_cover_of_tube_lights" + ], + "fields": [ + { + "fieldname": "room_numbers", + "fieldtype": "Data", + "label": "Room Numbers" + }, + { + "default": "0", + "fieldname": "electrical_switches", + "fieldtype": "Check", + "label": "Electrical switches" + }, + { + "default": "0", + "fieldname": "electrical_sockets_outlets", + "fieldtype": "Check", + "label": "Electrical sockets/outlets" + }, + { + "default": "0", + "fieldname": "fluorescent_tubes", + "fieldtype": "Check", + "label": "Fluorescent tubes" + }, + { + "fieldname": "column_break_5", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "ballasts", + "fieldtype": "Check", + "label": "Ballasts" + }, + { + "default": "0", + "fieldname": "starters", + "fieldtype": "Check", + "label": "Starters" + }, + { + "default": "0", + "fieldname": "glass_cover_of_tube_lights", + "fieldtype": "Check", + "label": "Glass cover of tube lights" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-13 17:45:12.282804", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM Electrical Fixtures Inside Rooms Table", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.py b/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.py new file mode 100644 index 0000000..5e5890b --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_electrical_fixtures_inside_rooms_table/ppm_electrical_fixtures_inside_rooms_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMElectricalFixturesInsideRoomsTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/__init__.py b/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.json b/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.json new file mode 100644 index 0000000..7c8656a --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.json @@ -0,0 +1,92 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-13 09:12:39.494608", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "location", + "wires", + "grounding", + "mcbs", + "connections", + "column_break_6", + "panel_door", + "panel_hinges_lock", + "schedule_of_panel", + "cleaning_of_panel" + ], + "fields": [ + { + "fieldname": "location", + "fieldtype": "Data", + "label": "Location" + }, + { + "default": "0", + "fieldname": "wires", + "fieldtype": "Check", + "label": "Wires" + }, + { + "default": "0", + "fieldname": "grounding", + "fieldtype": "Check", + "label": "Grounding" + }, + { + "default": "0", + "fieldname": "mcbs", + "fieldtype": "Check", + "label": "MCB's" + }, + { + "default": "0", + "fieldname": "connections", + "fieldtype": "Check", + "label": "Connections" + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "panel_door", + "fieldtype": "Check", + "label": "Panel door" + }, + { + "default": "0", + "fieldname": "panel_hinges_lock", + "fieldtype": "Check", + "label": "Panel hinges & lock" + }, + { + "default": "0", + "fieldname": "schedule_of_panel", + "fieldtype": "Check", + "label": "Schedule of panel" + }, + { + "default": "0", + "fieldname": "cleaning_of_panel", + "fieldtype": "Check", + "label": "Cleaning of panel" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-13 17:45:14.076447", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM electricals Panels table", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.py b/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.py new file mode 100644 index 0000000..41ac0e0 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_electricals_panels_table/ppm_electricals_panels_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMelectricalsPanelstable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/__init__.py b/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.json b/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.json new file mode 100644 index 0000000..7072d77 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.json @@ -0,0 +1,38 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-11 17:03:33.429492", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "room_no", + "check_2" + ], + "fields": [ + { + "fieldname": "room_no", + "fieldtype": "Data", + "label": "Room No" + }, + { + "default": "0", + "fieldname": "check_2", + "fieldtype": "Check", + "label": "Value" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-13 17:45:14.941826", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM Fire Alarm Device Table", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.py b/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.py new file mode 100644 index 0000000..4eff966 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_fire_alarm_device_table/ppm_fire_alarm_device_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMFireAlarmDeviceTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_mri_template/__init__.py b/asset_lite/asset_lite/doctype/ppm_mri_template/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.js b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.js new file mode 100644 index 0000000..ea96071 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM MRI Template", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.json b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.json new file mode 100644 index 0000000..fdbef23 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.json @@ -0,0 +1,43 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-09-13 15:44:37.160329", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "table_1" + ], + "fields": [ + { + "fieldname": "table_1", + "fieldtype": "Table", + "options": "PPM table for MRI" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-09-13 17:45:06.173357", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM MRI Template", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.py b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.py new file mode 100644 index 0000000..1a453e5 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_mri_template/ppm_mri_template.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMMRITemplate(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_mri_template/test_ppm_mri_template.py b/asset_lite/asset_lite/doctype/ppm_mri_template/test_ppm_mri_template.py new file mode 100644 index 0000000..c7e8c42 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_mri_template/test_ppm_mri_template.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMMRITemplate(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/__init__.py b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.js b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.js new file mode 100644 index 0000000..b6208a6 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM OF CT SCAN MACHINE", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.json b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.json new file mode 100644 index 0000000..c23bba1 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.json @@ -0,0 +1,96 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:CT Scan - {####}", + "creation": "2024-09-13 15:47:34.231656", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "month", + "year", + "column_break_phdw", + "asset_maintenance_log", + "section_break_3", + "data", + "table", + "amended_from" + ], + "fields": [ + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "section_break_3", + "fieldtype": "Section Break" + }, + { + "default": "CT Scan", + "fieldname": "data", + "fieldtype": "Link", + "label": "Template", + "options": "PPM Templates" + }, + { + "fieldname": "table", + "fieldtype": "Table", + "options": "PPM Table For CT Scan Machine" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM OF CT SCAN MACHINE", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "column_break_phdw", + "fieldtype": "Column Break" + }, + { + "fieldname": "asset_maintenance_log", + "fieldtype": "Link", + "label": "Asset Maintenance Log", + "options": "Asset Maintenance Log", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-23 16:47:36.569116", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM OF CT SCAN MACHINE", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.py b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.py new file mode 100644 index 0000000..ae76db0 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/ppm_of_ct_scan_machine.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMOFCTSCANMACHINE(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/test_ppm_of_ct_scan_machine.py b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/test_ppm_of_ct_scan_machine.py new file mode 100644 index 0000000..59ce7cc --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_ct_scan_machine/test_ppm_of_ct_scan_machine.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMOFCTSCANMACHINE(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/__init__.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.js b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.js new file mode 100644 index 0000000..0ffccd2 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.json b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.json new file mode 100644 index 0000000..f9c2a36 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.json @@ -0,0 +1,131 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "PPM-EF-.####", + "creation": "2024-09-13 09:33:19.484317", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "building", + "month", + "column_break_2", + "floor", + "year", + "section_break_4", + "electrical_fixtures_table", + "notes_if_any", + "section_break_7", + "checked_by", + "electrician", + "column_break_10", + "maintenance_manager", + "amended_from" + ], + "fields": [ + { + "fieldname": "building", + "fieldtype": "Data", + "label": "Building" + }, + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "floor", + "fieldtype": "Select", + "label": "Floor", + "options": "\nGF\nFF\nSF\nTF" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "fieldname": "electrical_fixtures_table", + "fieldtype": "Table", + "label": "Electrical Fixtures table", + "options": "PPM Electrical Fixtures Inside Rooms Table" + }, + { + "fieldname": "notes_if_any", + "fieldtype": "Small Text", + "label": "Notes if Any" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break" + }, + { + "fieldname": "checked_by", + "fieldtype": "Data", + "label": "Checked By" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Electrician\" || doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "electrician", + "fieldtype": "Data", + "hidden": 1, + "label": "Electrician" + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "maintenance_manager", + "fieldtype": "Data", + "label": "Maintenance Manager" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM OF ELECTRICAL PANELS", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-13 17:45:10.601474", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.py new file mode 100644 index 0000000..110e017 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/ppm_of_electrical_fixtures_inside_rooms.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMOFELECTRICALFIXTURESINSIDEROOMS(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/test_ppm_of_electrical_fixtures_inside_rooms.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/test_ppm_of_electrical_fixtures_inside_rooms.py new file mode 100644 index 0000000..db46677 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_fixtures_inside_rooms/test_ppm_of_electrical_fixtures_inside_rooms.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMOFELECTRICALFIXTURESINSIDEROOMS(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/__init__.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.js b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.js new file mode 100644 index 0000000..1ac7e95 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM OF ELECTRICAL PANELS", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.json b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.json new file mode 100644 index 0000000..4300277 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.json @@ -0,0 +1,118 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "PPM-EP-.####", + "creation": "2024-09-13 09:19:00.454586", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "month", + "column_break_2", + "year", + "section_break_4", + "electrical_panels_table", + "notes_if_any", + "section_break_7", + "checked_by", + "electrician", + "column_break_10", + "maintenance_manager", + "amended_from" + ], + "fields": [ + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "fieldname": "electrical_panels_table", + "fieldtype": "Table", + "label": "Electrical Panels Table", + "options": "PPM electricals Panels table" + }, + { + "fieldname": "notes_if_any", + "fieldtype": "Small Text", + "label": "Notes if Any" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break" + }, + { + "fieldname": "checked_by", + "fieldtype": "Data", + "label": "Checked By" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Electrician\" || doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "electrician", + "fieldtype": "Data", + "hidden": 1, + "label": "Electrician" + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "maintenance_manager", + "fieldtype": "Data", + "label": "Maintenance Manager" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM OF ELECTRICAL PANELS", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-13 17:45:13.038073", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM OF ELECTRICAL PANELS", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.py new file mode 100644 index 0000000..ef8ecdb --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/ppm_of_electrical_panels.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMOFELECTRICALPANELS(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/test_ppm_of_electrical_panels.py b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/test_ppm_of_electrical_panels.py new file mode 100644 index 0000000..89ac3d7 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_electrical_panels/test_ppm_of_electrical_panels.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMOFELECTRICALPANELS(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/__init__.py b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.js b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.js new file mode 100644 index 0000000..9b89192 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM OF FIRE ALARM DEVICES", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.json b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.json new file mode 100644 index 0000000..b2cd9cf --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.json @@ -0,0 +1,118 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "PPM-FAD-.####", + "creation": "2024-09-13 09:23:17.327840", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "month", + "column_break_2", + "year", + "section_break_4", + "fire_alaram_table", + "notes_if_any", + "section_break_7", + "checked_by", + "electrician", + "column_break_10", + "maintenance_manager", + "amended_from" + ], + "fields": [ + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "fieldname": "fire_alaram_table", + "fieldtype": "Table", + "label": "Fire Alaram Table", + "options": "PPM Fire Alarm Device Table" + }, + { + "fieldname": "notes_if_any", + "fieldtype": "Small Text", + "label": "Notes if Any" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break" + }, + { + "fieldname": "checked_by", + "fieldtype": "Data", + "label": "Checked By" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Electrician\" || doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "electrician", + "fieldtype": "Data", + "hidden": 1, + "label": "Electrician" + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:doc.workflow_state == \"Sent to Maintenance Manager\" || doc.workflow_state == \"Approved\"", + "fieldname": "maintenance_manager", + "fieldtype": "Data", + "label": "Maintenance Manager" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM OF ELECTRICAL PANELS", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-13 17:45:11.276292", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM OF FIRE ALARM DEVICES", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.py b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.py new file mode 100644 index 0000000..b0c02ec --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/ppm_of_fire_alarm_devices.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMOFFIREALARMDEVICES(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/test_ppm_of_fire_alarm_devices.py b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/test_ppm_of_fire_alarm_devices.py new file mode 100644 index 0000000..b88680f --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_fire_alarm_devices/test_ppm_of_fire_alarm_devices.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMOFFIREALARMDEVICES(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/__init__.py b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.js b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.js new file mode 100644 index 0000000..a40b12d --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM OF MRI SCAN MACHINE", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.json b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.json new file mode 100644 index 0000000..9eee2ee --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.json @@ -0,0 +1,96 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "PPM-MRI-.####", + "creation": "2024-09-13 15:45:26.474798", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "month", + "year", + "column_break_kezq", + "asset_maintenance_log", + "section_break_3", + "date", + "table_5", + "amended_from" + ], + "fields": [ + { + "fieldname": "month", + "fieldtype": "Select", + "label": "Month", + "options": "\nJanuary\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" + }, + { + "fieldname": "year", + "fieldtype": "Data", + "label": "Year" + }, + { + "fieldname": "section_break_3", + "fieldtype": "Section Break" + }, + { + "default": "MRI Scan", + "fieldname": "date", + "fieldtype": "Link", + "label": "Template", + "options": "PPM Templates" + }, + { + "fieldname": "table_5", + "fieldtype": "Table", + "options": "PPM table for MRI" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "PPM OF MRI SCAN MACHINE", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "column_break_kezq", + "fieldtype": "Column Break" + }, + { + "fieldname": "asset_maintenance_log", + "fieldtype": "Link", + "label": "Asset Maintenance Log", + "options": "Asset Maintenance Log", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2024-09-23 16:46:57.854116", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM OF MRI SCAN MACHINE", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.py b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.py new file mode 100644 index 0000000..d8bdb59 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/ppm_of_mri_scan_machine.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMOFMRISCANMACHINE(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/test_ppm_of_mri_scan_machine.py b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/test_ppm_of_mri_scan_machine.py new file mode 100644 index 0000000..6b9cd96 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_of_mri_scan_machine/test_ppm_of_mri_scan_machine.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMOFMRISCANMACHINE(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_table/__init__.py b/asset_lite/asset_lite/doctype/ppm_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_table/ppm_table.json b/asset_lite/asset_lite/doctype/ppm_table/ppm_table.json new file mode 100644 index 0000000..54c2512 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table/ppm_table.json @@ -0,0 +1,52 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-23 14:44:23.314567", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "maintenance_name", + "working", + "defect_found", + "not_working" + ], + "fields": [ + { + "fieldname": "maintenance_name", + "fieldtype": "Data", + "label": "Maintenance Name" + }, + { + "default": "0", + "fieldname": "working", + "fieldtype": "Check", + "label": "Working" + }, + { + "default": "0", + "fieldname": "defect_found", + "fieldtype": "Check", + "label": "Defect Found" + }, + { + "default": "0", + "fieldname": "not_working", + "fieldtype": "Check", + "label": "Not Working" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-23 14:44:23.314567", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM Table", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_table/ppm_table.py b/asset_lite/asset_lite/doctype/ppm_table/ppm_table.py new file mode 100644 index 0000000..3149e88 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table/ppm_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/__init__.py b/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.json b/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.json new file mode 100644 index 0000000..1f7a512 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.json @@ -0,0 +1,52 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-13 15:46:14.365890", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "maintenance_name", + "working", + "defect_found", + "not_working" + ], + "fields": [ + { + "fieldname": "maintenance_name", + "fieldtype": "Data", + "label": "Maintenance Name" + }, + { + "default": "0", + "fieldname": "working", + "fieldtype": "Check", + "label": "Working" + }, + { + "default": "0", + "fieldname": "defect_found", + "fieldtype": "Check", + "label": "Defect Found" + }, + { + "default": "0", + "fieldname": "not_working", + "fieldtype": "Check", + "label": "Not Working" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-13 17:45:05.578499", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM Table For CT Scan Machine", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.py b/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.py new file mode 100644 index 0000000..a25eb40 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table_for_ct_scan_machine/ppm_table_for_ct_scan_machine.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMTableForCTScanMachine(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_mri/__init__.py b/asset_lite/asset_lite/doctype/ppm_table_for_mri/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.json b/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.json new file mode 100644 index 0000000..ed917aa --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.json @@ -0,0 +1,53 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2024-09-13 15:43:50.713290", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "maintenance_name", + "working", + "defect_found", + "not_working" + ], + "fields": [ + { + "fieldname": "maintenance_name", + "fieldtype": "Data", + "label": "Maintenance Name" + }, + { + "default": "0", + "fieldname": "working", + "fieldtype": "Check", + "label": "Working" + }, + { + "default": "0", + "fieldname": "defect_found", + "fieldtype": "Check", + "label": "Defect Found" + }, + { + "default": "0", + "fieldname": "not_working", + "fieldtype": "Check", + "label": "Not Working" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-13 17:45:06.985231", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM table for MRI", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.py b/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.py new file mode 100644 index 0000000..aab9c2f --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_table_for_mri/ppm_table_for_mri.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMtableforMRI(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_templates/__init__.py b/asset_lite/asset_lite/doctype/ppm_templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.js b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.js new file mode 100644 index 0000000..1f2b34c --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("PPM Templates", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.json b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.json new file mode 100644 index 0000000..e6f3ec0 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.json @@ -0,0 +1,71 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:name1", + "creation": "2024-09-23 14:42:22.511123", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "name1", + "column_break_wpmh", + "asset_type", + "section_break_dznh", + "ppm_template_table" + ], + "fields": [ + { + "fieldname": "name1", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Name", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "ppm_template_table", + "fieldtype": "Table", + "label": "PPM template Table", + "options": "PPM Table" + }, + { + "fieldname": "column_break_wpmh", + "fieldtype": "Column Break" + }, + { + "fieldname": "asset_type", + "fieldtype": "Link", + "label": "Asset Type", + "options": "Asset Type", + "reqd": 1 + }, + { + "fieldname": "section_break_dznh", + "fieldtype": "Section Break" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-09-23 17:59:05.455192", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PPM Templates", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.py b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.py new file mode 100644 index 0000000..a753495 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_templates/ppm_templates.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PPMTemplates(Document): + pass diff --git a/asset_lite/asset_lite/doctype/ppm_templates/test_ppm_templates.py b/asset_lite/asset_lite/doctype/ppm_templates/test_ppm_templates.py new file mode 100644 index 0000000..e3a53a5 --- /dev/null +++ b/asset_lite/asset_lite/doctype/ppm_templates/test_ppm_templates.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPPMTemplates(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/pr_table/__init__.py b/asset_lite/asset_lite/doctype/pr_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/pr_table/pr_table.json b/asset_lite/asset_lite/doctype/pr_table/pr_table.json new file mode 100644 index 0000000..7a6b6fa --- /dev/null +++ b/asset_lite/asset_lite/doctype/pr_table/pr_table.json @@ -0,0 +1,29 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-09-17 17:06:51.473708", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "section_break_kinu" + ], + "fields": [ + { + "fieldname": "section_break_kinu", + "fieldtype": "Section Break" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-17 17:06:51.473708", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "PR table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/pr_table/pr_table.py b/asset_lite/asset_lite/doctype/pr_table/pr_table.py new file mode 100644 index 0000000..5359f2e --- /dev/null +++ b/asset_lite/asset_lite/doctype/pr_table/pr_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PRtable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/purchase_request/__init__.py b/asset_lite/asset_lite/doctype/purchase_request/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/purchase_request/purchase_request.js b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.js new file mode 100644 index 0000000..b639025 --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Purchase Request", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/purchase_request/purchase_request.json b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.json new file mode 100644 index 0000000..012a9a0 --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.json @@ -0,0 +1,154 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "format:{pr_no}", + "creation": "2024-09-17 17:13:10.035475", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "pr_no", + "date", + "column_break_4", + "issue", + "asset", + "asset_name", + "data_8", + "pr_table", + "section_break_10", + "priority", + "normal", + "urgent", + "required_date", + "column_break_14", + "intended_use_of_material", + "amended_from" + ], + "fields": [ + { + "fieldname": "pr_no", + "fieldtype": "Data", + "label": "PR NO", + "unique": 1 + }, + { + "default": "Today", + "fieldname": "date", + "fieldtype": "Date", + "label": "Date" + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "fetch_from": "asset_repair.issue", + "fetch_if_empty": 1, + "fieldname": "issue", + "fieldtype": "Link", + "label": "Work Order", + "options": "Work_Order" + }, + { + "fetch_from": "asset_repair.asset", + "fieldname": "asset", + "fieldtype": "Link", + "label": "Asset", + "options": "Asset" + }, + { + "fieldname": "data_8", + "fieldtype": "Section Break" + }, + { + "fieldname": "pr_table", + "fieldtype": "Table", + "label": "PR Table", + "options": "Purchase Request Table" + }, + { + "fieldname": "section_break_10", + "fieldtype": "Section Break" + }, + { + "fieldname": "priority", + "fieldtype": "Heading", + "label": "Priority" + }, + { + "default": "0", + "fieldname": "normal", + "fieldtype": "Check", + "label": "Normal" + }, + { + "default": "0", + "fieldname": "urgent", + "fieldtype": "Check", + "label": "Urgent" + }, + { + "fieldname": "required_date", + "fieldtype": "Date", + "label": "Required Date" + }, + { + "fieldname": "column_break_14", + "fieldtype": "Column Break" + }, + { + "fieldname": "intended_use_of_material", + "fieldtype": "Text", + "label": "Intended Use of Material" + }, + { + "fetch_from": "asset.asset_name", + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Purchase Request", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [ + { + "group": "Purchase Order", + "link_doctype": "Purchase Order", + "link_fieldname": "custom_purchase_request" + } + ], + "modified": "2024-09-20 16:11:28.459741", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Purchase Request", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/purchase_request/purchase_request.py b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.py new file mode 100644 index 0000000..141fa9a --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request/purchase_request.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PurchaseRequest(Document): + pass diff --git a/asset_lite/asset_lite/doctype/purchase_request/test_purchase_request.py b/asset_lite/asset_lite/doctype/purchase_request/test_purchase_request.py new file mode 100644 index 0000000..926c8c2 --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request/test_purchase_request.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestPurchaseRequest(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/purchase_request_table/__init__.py b/asset_lite/asset_lite/doctype/purchase_request_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.json b/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.json new file mode 100644 index 0000000..7bec699 --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.json @@ -0,0 +1,95 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-09-17 17:12:10.133001", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_code", + "item_name", + "quantity", + "uom", + "uom_conversion_factor", + "description", + "required_by", + "unit_price", + "amount", + "warehouse" + ], + "fields": [ + { + "fieldname": "item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "reqd": 1 + }, + { + "fetch_from": "item_code.item_name", + "fieldname": "item_name", + "fieldtype": "Data", + "label": "Item Name" + }, + { + "fieldname": "quantity", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Quantity" + }, + { + "fetch_from": "item_code.stock_uom", + "fieldname": "uom", + "fieldtype": "Data", + "label": "UOM" + }, + { + "fieldname": "uom_conversion_factor", + "fieldtype": "Data", + "label": "UOM Conversion Factor" + }, + { + "fieldname": "description", + "fieldtype": "Text", + "in_list_view": 1, + "label": "Description", + "reqd": 1 + }, + { + "fieldname": "required_by", + "fieldtype": "Date", + "label": "Required By", + "reqd": 1 + }, + { + "fieldname": "unit_price", + "fieldtype": "Data", + "label": "Unit Price" + }, + { + "fieldname": "amount", + "fieldtype": "Data", + "label": "Amount" + }, + { + "fieldname": "warehouse", + "fieldtype": "Link", + "label": "Warehouse", + "options": "Warehouse" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-09-18 18:58:55.153194", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Purchase Request Table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.py b/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.py new file mode 100644 index 0000000..1a521e7 --- /dev/null +++ b/asset_lite/asset_lite/doctype/purchase_request_table/purchase_request_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class PurchaseRequestTable(Document): + pass diff --git a/asset_lite/asset_lite/doctype/service_coverage/__init__.py b/asset_lite/asset_lite/doctype/service_coverage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/service_coverage/service_coverage.json b/asset_lite/asset_lite/doctype/service_coverage/service_coverage.json new file mode 100644 index 0000000..5f6a869 --- /dev/null +++ b/asset_lite/asset_lite/doctype/service_coverage/service_coverage.json @@ -0,0 +1,57 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-04-03 18:34:27.947154", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "service_agreement", + "start_date", + "end_date", + "active", + "no_of_pms" + ], + "fields": [ + { + "fieldname": "service_agreement", + "fieldtype": "Select", + "label": "Service Agreement", + "options": "\nWarranty\nContract\nFrame Work" + }, + { + "fieldname": "start_date", + "fieldtype": "Date", + "label": "Start Date" + }, + { + "fieldname": "end_date", + "fieldtype": "Date", + "label": "End date" + }, + { + "fieldname": "active", + "fieldtype": "Select", + "label": "Active", + "options": "\nYes\nNo" + }, + { + "fieldname": "no_of_pms", + "fieldtype": "Data", + "label": "No Of PMs", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-04-03 20:05:09.090315", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Service Coverage", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/service_coverage/service_coverage.py b/asset_lite/asset_lite/doctype/service_coverage/service_coverage.py new file mode 100644 index 0000000..c486d0e --- /dev/null +++ b/asset_lite/asset_lite/doctype/service_coverage/service_coverage.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class ServiceCoverage(Document): + pass diff --git a/asset_lite/asset_lite/doctype/site_information/__init__.py b/asset_lite/asset_lite/doctype/site_information/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/site_information/site_information.js b/asset_lite/asset_lite/doctype/site_information/site_information.js new file mode 100644 index 0000000..e39d6a7 --- /dev/null +++ b/asset_lite/asset_lite/doctype/site_information/site_information.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Site Information", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/site_information/site_information.json b/asset_lite/asset_lite/doctype/site_information/site_information.json new file mode 100644 index 0000000..fa4e682 --- /dev/null +++ b/asset_lite/asset_lite/doctype/site_information/site_information.json @@ -0,0 +1,247 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:site_name_en", + "creation": "2024-09-24 18:24:05.831422", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "site_name", + "region", + "address_2", + "currency", + "column_break_nmbz", + "site_name_en", + "address1", + "logo", + "contact_information_tab", + "contact_name", + "section_break_xnmk", + "fax_1", + "email_1", + "phone_1", + "phone_3", + "column_break_udpz", + "fax_2", + "email_2", + "phone_2", + "contract_information_tab", + "contract_number", + "contractor_supervisor", + "project_start_date", + "column_break_euyw", + "contract_name", + "site_maintenance_manager", + "project_end_date", + "cut_value__class_tab", + "cut_value_for_class_a_devices", + "cut_value_for_class_b_devices", + "cut_value_for_class_c_devices", + "column_break_ybpx", + "cut_factor_for_class_a_devices", + "cut_factor_for_class_b_devices", + "cut_factor_for_class_c_devices" + ], + "fields": [ + { + "fieldname": "site_name", + "fieldtype": "Data", + "label": "Site Name" + }, + { + "fieldname": "region", + "fieldtype": "Data", + "label": "Region" + }, + { + "fieldname": "address_2", + "fieldtype": "Small Text", + "label": "Address 2" + }, + { + "fieldname": "currency", + "fieldtype": "Link", + "label": "Currency", + "options": "Currency" + }, + { + "fieldname": "column_break_nmbz", + "fieldtype": "Column Break" + }, + { + "fieldname": "site_name_en", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Site Name EN", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "address1", + "fieldtype": "Small Text", + "label": "Address1" + }, + { + "fieldname": "logo", + "fieldtype": "Attach Image", + "label": "Logo" + }, + { + "fieldname": "contact_information_tab", + "fieldtype": "Tab Break", + "label": "Contact Information" + }, + { + "fieldname": "contact_name", + "fieldtype": "Data", + "label": "Contact Name" + }, + { + "fieldname": "section_break_xnmk", + "fieldtype": "Section Break" + }, + { + "fieldname": "fax_1", + "fieldtype": "Data", + "label": "Fax 1" + }, + { + "fieldname": "email_1", + "fieldtype": "Data", + "label": "Email 1" + }, + { + "fieldname": "phone_1", + "fieldtype": "Data", + "label": "Phone 1" + }, + { + "fieldname": "phone_3", + "fieldtype": "Data", + "label": "Phone 3" + }, + { + "fieldname": "column_break_udpz", + "fieldtype": "Column Break" + }, + { + "fieldname": "fax_2", + "fieldtype": "Data", + "label": "Fax 2" + }, + { + "fieldname": "email_2", + "fieldtype": "Data", + "label": "Email 2" + }, + { + "fieldname": "phone_2", + "fieldtype": "Data", + "label": "Phone 2" + }, + { + "fieldname": "contract_information_tab", + "fieldtype": "Tab Break", + "label": "Contract Information" + }, + { + "fieldname": "contract_number", + "fieldtype": "Data", + "label": "Contract Number" + }, + { + "fieldname": "contractor_supervisor", + "fieldtype": "Data", + "label": "Contractor Supervisor" + }, + { + "fieldname": "project_start_date", + "fieldtype": "Date", + "label": "Project Start Date" + }, + { + "fieldname": "column_break_euyw", + "fieldtype": "Column Break" + }, + { + "fieldname": "contract_name", + "fieldtype": "Data", + "label": "Contract Name" + }, + { + "fieldname": "site_maintenance_manager", + "fieldtype": "Data", + "label": "Site Maintenance Manager" + }, + { + "fieldname": "project_end_date", + "fieldtype": "Date", + "label": "Project End Date" + }, + { + "fieldname": "cut_value__class_tab", + "fieldtype": "Tab Break", + "label": "Cut Value / Class" + }, + { + "fieldname": "cut_value_for_class_a_devices", + "fieldtype": "Data", + "label": "Cut Value for Class A devices" + }, + { + "fieldname": "cut_value_for_class_b_devices", + "fieldtype": "Data", + "label": "Cut Value for Class B devices" + }, + { + "fieldname": "cut_value_for_class_c_devices", + "fieldtype": "Data", + "label": "Cut Value for Class C devices" + }, + { + "fieldname": "column_break_ybpx", + "fieldtype": "Column Break" + }, + { + "fieldname": "cut_factor_for_class_a_devices", + "fieldtype": "Data", + "label": "Cut factor for Class A devices" + }, + { + "fieldname": "cut_factor_for_class_b_devices", + "fieldtype": "Data", + "label": "Cut factor for Class B devices" + }, + { + "fieldname": "cut_factor_for_class_c_devices", + "fieldtype": "Data", + "label": "Cut factor for Class C devices" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-03-04 16:02:46.101873", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Site Information", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/site_information/site_information.py b/asset_lite/asset_lite/doctype/site_information/site_information.py new file mode 100644 index 0000000..33ba676 --- /dev/null +++ b/asset_lite/asset_lite/doctype/site_information/site_information.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SiteInformation(Document): + pass diff --git a/asset_lite/asset_lite/doctype/site_information/test_site_information.py b/asset_lite/asset_lite/doctype/site_information/test_site_information.py new file mode 100644 index 0000000..a8cca04 --- /dev/null +++ b/asset_lite/asset_lite/doctype/site_information/test_site_information.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestSiteInformation(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/spare_parts/__init__.py b/asset_lite/asset_lite/doctype/spare_parts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/spare_parts/spare_parts.json b/asset_lite/asset_lite/doctype/spare_parts/spare_parts.json new file mode 100644 index 0000000..78b0ee2 --- /dev/null +++ b/asset_lite/asset_lite/doctype/spare_parts/spare_parts.json @@ -0,0 +1,887 @@ +{ + "actions": [], + "autoname": "hash", + "creation": "2024-09-11 13:39:19.751600", + "default_view": "List", + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_code", + "product_bundle", + "col_break1", + "item_name", + "work_order", + "description_section", + "description", + "brand", + "col_break7", + "item_group", + "image", + "image_view", + "quantity_and_rate", + "received_qty", + "qty", + "rejected_qty", + "col_break2", + "uom", + "conversion_factor", + "stock_uom", + "stock_qty", + "sec_break1", + "price_list_rate", + "col_break3", + "base_price_list_rate", + "section_break_26", + "margin_type", + "margin_rate_or_amount", + "rate_with_margin", + "column_break_30", + "discount_percentage", + "discount_amount", + "base_rate_with_margin", + "sec_break2", + "rate", + "amount", + "item_tax_template", + "col_break4", + "base_rate", + "base_amount", + "pricing_rules", + "stock_uom_rate", + "is_free_item", + "section_break_22", + "net_rate", + "net_amount", + "column_break_25", + "base_net_rate", + "base_net_amount", + "valuation_rate", + "item_tax_amount", + "landed_cost_voucher_amount", + "rm_supp_cost", + "warehouse_section", + "warehouse", + "from_warehouse", + "quality_inspection", + "serial_no", + "col_br_wh", + "rejected_warehouse", + "batch_no", + "rejected_serial_no", + "manufacture_details", + "manufacturer", + "column_break_13", + "manufacturer_part_no", + "accounting", + "expense_account", + "col_break5", + "is_fixed_asset", + "asset_location", + "asset_category", + "deferred_expense_section", + "deferred_expense_account", + "service_stop_date", + "enable_deferred_expense", + "column_break_58", + "service_start_date", + "service_end_date", + "reference", + "allow_zero_valuation_rate", + "item_tax_rate", + "bom", + "include_exploded_items", + "purchase_invoice_item", + "col_break6", + "purchase_order", + "po_detail", + "purchase_receipt", + "pr_detail", + "sales_invoice_item", + "item_weight_details", + "weight_per_unit", + "total_weight", + "column_break_38", + "weight_uom", + "accounting_dimensions_section", + "project", + "dimension_col_break", + "cost_center", + "section_break_82", + "page_break" + ], + "fields": [ + { + "bold": 1, + "columns": 3, + "fieldname": "item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item", + "oldfieldname": "item_code", + "oldfieldtype": "Link", + "options": "Item", + "print_hide": 1, + "search_index": 1 + }, + { + "fieldname": "product_bundle", + "fieldtype": "Link", + "label": "Product Bundle", + "options": "Product Bundle", + "read_only": 1 + }, + { + "fieldname": "col_break1", + "fieldtype": "Column Break" + }, + { + "fetch_from": "item_code.item_name", + "fetch_if_empty": 1, + "fieldname": "item_name", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Item Name", + "oldfieldname": "item_name", + "oldfieldtype": "Data", + "reqd": 1 + }, + { + "collapsible": 1, + "fieldname": "description_section", + "fieldtype": "Section Break", + "label": "Description" + }, + { + "fieldname": "description", + "fieldtype": "Text Editor", + "label": "Description", + "oldfieldname": "description", + "oldfieldtype": "Text", + "print_width": "300px", + "width": "300px" + }, + { + "fieldname": "brand", + "fieldtype": "Link", + "hidden": 1, + "label": "Brand", + "options": "Brand", + "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "col_break7", + "fieldtype": "Column Break" + }, + { + "fetch_from": "item_code.item_group", + "fetch_if_empty": 1, + "fieldname": "item_group", + "fieldtype": "Link", + "label": "Item Group", + "options": "Item Group", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "image", + "fieldtype": "Attach", + "hidden": 1, + "label": "Image" + }, + { + "fieldname": "image_view", + "fieldtype": "Image", + "label": "Image View", + "options": "image", + "print_hide": 1 + }, + { + "fieldname": "quantity_and_rate", + "fieldtype": "Section Break", + "label": "Quantity and Rate" + }, + { + "fieldname": "received_qty", + "fieldtype": "Float", + "label": "Received Qty", + "read_only": 1 + }, + { + "bold": 1, + "columns": 2, + "fieldname": "qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Quantity", + "oldfieldname": "qty", + "oldfieldtype": "Currency" + }, + { + "fieldname": "rejected_qty", + "fieldtype": "Float", + "label": "Rejected Qty" + }, + { + "fieldname": "col_break2", + "fieldtype": "Column Break" + }, + { + "default": "Nos", + "fieldname": "uom", + "fieldtype": "Link", + "label": "UOM", + "options": "UOM" + }, + { + "depends_on": "eval:doc.uom != doc.stock_uom", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "label": "UOM Conversion Factor", + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "eval:doc.uom != doc.stock_uom", + "fieldname": "stock_uom", + "fieldtype": "Link", + "label": "Stock UOM", + "options": "UOM", + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "eval:doc.uom != doc.stock_uom", + "fieldname": "stock_qty", + "fieldtype": "Float", + "label": "Accepted Qty in Stock UOM", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "sec_break1", + "fieldtype": "Section Break" + }, + { + "fieldname": "price_list_rate", + "fieldtype": "Currency", + "label": "Price List Rate", + "options": "currency", + "print_hide": 1 + }, + { + "fieldname": "col_break3", + "fieldtype": "Column Break" + }, + { + "fieldname": "base_price_list_rate", + "fieldtype": "Currency", + "label": "Price List Rate (Company Currency)", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "section_break_26", + "fieldtype": "Section Break", + "label": "Discount and Margin" + }, + { + "depends_on": "price_list_rate", + "fieldname": "margin_type", + "fieldtype": "Select", + "label": "Margin Type", + "options": "\nPercentage\nAmount", + "print_hide": 1 + }, + { + "depends_on": "eval:doc.margin_type && doc.price_list_rate", + "fieldname": "margin_rate_or_amount", + "fieldtype": "Float", + "label": "Margin Rate or Amount", + "print_hide": 1 + }, + { + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "rate_with_margin", + "fieldtype": "Currency", + "label": "Rate With Margin", + "options": "currency", + "read_only": 1 + }, + { + "fieldname": "column_break_30", + "fieldtype": "Column Break" + }, + { + "depends_on": "price_list_rate", + "fieldname": "discount_percentage", + "fieldtype": "Percent", + "label": "Discount on Price List Rate (%)" + }, + { + "depends_on": "price_list_rate", + "fieldname": "discount_amount", + "fieldtype": "Currency", + "label": "Discount Amount", + "options": "currency" + }, + { + "depends_on": "eval:doc.margin_type && doc.price_list_rate && doc.margin_rate_or_amount", + "fieldname": "base_rate_with_margin", + "fieldtype": "Currency", + "label": "Rate With Margin (Company Currency)", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "sec_break2", + "fieldtype": "Section Break" + }, + { + "bold": 1, + "columns": 3, + "fetch_from": "item_code.valuation_rate", + "fetch_if_empty": 1, + "fieldname": "rate", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Rate", + "oldfieldname": "import_rate", + "oldfieldtype": "Currency", + "options": "currency", + "reqd": 1 + }, + { + "columns": 2, + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "oldfieldname": "import_amount", + "oldfieldtype": "Currency", + "options": "currency", + "reqd": 1 + }, + { + "fieldname": "item_tax_template", + "fieldtype": "Link", + "label": "Item Tax Template", + "options": "Item Tax Template", + "print_hide": 1 + }, + { + "fieldname": "col_break4", + "fieldtype": "Column Break" + }, + { + "fieldname": "base_rate", + "fieldtype": "Currency", + "label": "Rate (Company Currency)", + "oldfieldname": "rate", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "base_amount", + "fieldtype": "Currency", + "label": "Amount (Company Currency)", + "oldfieldname": "amount", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "pricing_rules", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Pricing Rules", + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "eval: doc.uom != doc.stock_uom", + "fieldname": "stock_uom_rate", + "fieldtype": "Currency", + "label": "Rate of Stock UOM", + "no_copy": 1, + "options": "currency", + "read_only": 1 + }, + { + "default": "0", + "fieldname": "is_free_item", + "fieldtype": "Check", + "label": "Is Free Item", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "section_break_22", + "fieldtype": "Section Break" + }, + { + "fieldname": "net_rate", + "fieldtype": "Currency", + "label": "Net Rate", + "options": "currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "net_amount", + "fieldtype": "Currency", + "label": "Net Amount", + "options": "currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "column_break_25", + "fieldtype": "Column Break" + }, + { + "fieldname": "base_net_rate", + "fieldtype": "Currency", + "label": "Net Rate (Company Currency)", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "base_net_amount", + "fieldtype": "Currency", + "label": "Net Amount (Company Currency)", + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "allow_on_submit": 1, + "fieldname": "valuation_rate", + "fieldtype": "Currency", + "hidden": 1, + "label": "Valuation Rate", + "no_copy": 1, + "options": "Company:company:default_currency", + "precision": "6", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "item_tax_amount", + "fieldtype": "Currency", + "hidden": 1, + "label": "Item Tax Amount Included in Value", + "no_copy": 1, + "options": "Company:company:default_currency", + "print_hide": 1, + "print_width": "150px", + "read_only": 1, + "width": "150px" + }, + { + "allow_on_submit": 1, + "fieldname": "landed_cost_voucher_amount", + "fieldtype": "Currency", + "label": "Landed Cost Voucher Amount", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "rm_supp_cost", + "fieldtype": "Currency", + "hidden": 1, + "label": "Raw Materials Supplied Cost", + "no_copy": 1, + "options": "Company:company:default_currency", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "warehouse_section", + "fieldtype": "Section Break", + "label": "Warehouse" + }, + { + "fieldname": "warehouse", + "fieldtype": "Link", + "label": "Accepted Warehouse", + "options": "Warehouse" + }, + { + "depends_on": "eval:parent.is_internal_supplier && parent.update_stock", + "fieldname": "from_warehouse", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "From Warehouse", + "options": "Warehouse" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "quality_inspection", + "fieldtype": "Link", + "label": "Quality Inspection", + "no_copy": 1, + "options": "Quality Inspection", + "print_hide": 1 + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "serial_no", + "fieldtype": "Text", + "label": "Serial No", + "no_copy": 1 + }, + { + "fieldname": "col_br_wh", + "fieldtype": "Column Break" + }, + { + "fieldname": "rejected_warehouse", + "fieldtype": "Link", + "label": "Rejected Warehouse", + "options": "Warehouse" + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "batch_no", + "fieldtype": "Link", + "label": "Batch No", + "no_copy": 1, + "options": "Batch" + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "rejected_serial_no", + "fieldtype": "Text", + "label": "Rejected Serial No", + "no_copy": 1, + "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "manufacture_details", + "fieldtype": "Section Break", + "label": "Manufacture" + }, + { + "fieldname": "manufacturer", + "fieldtype": "Link", + "label": "Manufacturer", + "options": "Manufacturer" + }, + { + "fieldname": "column_break_13", + "fieldtype": "Column Break" + }, + { + "fieldname": "manufacturer_part_no", + "fieldtype": "Data", + "label": "Manufacturer Part Number" + }, + { + "fieldname": "accounting", + "fieldtype": "Section Break", + "label": "Accounting" + }, + { + "fieldname": "expense_account", + "fieldtype": "Link", + "label": "Expense Head", + "oldfieldname": "expense_head", + "oldfieldtype": "Link", + "options": "Account", + "print_hide": 1, + "print_width": "120px", + "width": "120px" + }, + { + "fieldname": "col_break5", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fetch_from": "item_code.is_fixed_asset", + "fieldname": "is_fixed_asset", + "fieldtype": "Check", + "hidden": 1, + "label": "Is Fixed Asset", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "is_fixed_asset", + "fieldname": "asset_location", + "fieldtype": "Link", + "label": "Asset Location", + "options": "Location" + }, + { + "depends_on": "is_fixed_asset", + "fetch_from": "item_code.asset_category", + "fieldname": "asset_category", + "fieldtype": "Link", + "label": "Asset Category", + "options": "Asset Category", + "read_only": 1 + }, + { + "collapsible": 1, + "collapsible_depends_on": "enable_deferred_expense", + "fieldname": "deferred_expense_section", + "fieldtype": "Section Break", + "label": "Deferred Expense" + }, + { + "depends_on": "enable_deferred_expense", + "fieldname": "deferred_expense_account", + "fieldtype": "Link", + "label": "Deferred Expense Account", + "options": "Account" + }, + { + "allow_on_submit": 1, + "depends_on": "enable_deferred_expense", + "fieldname": "service_stop_date", + "fieldtype": "Date", + "label": "Service Stop Date", + "no_copy": 1 + }, + { + "default": "0", + "fieldname": "enable_deferred_expense", + "fieldtype": "Check", + "label": "Enable Deferred Expense" + }, + { + "fieldname": "column_break_58", + "fieldtype": "Column Break" + }, + { + "depends_on": "enable_deferred_expense", + "fieldname": "service_start_date", + "fieldtype": "Date", + "label": "Service Start Date", + "no_copy": 1 + }, + { + "depends_on": "enable_deferred_expense", + "fieldname": "service_end_date", + "fieldtype": "Date", + "label": "Service End Date", + "no_copy": 1 + }, + { + "fieldname": "reference", + "fieldtype": "Section Break", + "label": "Reference" + }, + { + "default": "0", + "fieldname": "allow_zero_valuation_rate", + "fieldtype": "Check", + "label": "Allow Zero Valuation Rate", + "no_copy": 1, + "print_hide": 1 + }, + { + "description": "Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges", + "fieldname": "item_tax_rate", + "fieldtype": "Code", + "hidden": 1, + "label": "Item Tax Rate", + "oldfieldname": "item_tax_rate", + "oldfieldtype": "Small Text", + "print_hide": 1, + "read_only": 1, + "report_hide": 1 + }, + { + "depends_on": "eval:parent.is_old_subcontracting_flow", + "fieldname": "bom", + "fieldtype": "Link", + "label": "BOM", + "options": "BOM", + "read_only": 1, + "read_only_depends_on": "eval:!parent.is_old_subcontracting_flow" + }, + { + "default": "0", + "depends_on": "eval:parent.is_subcontracted", + "fieldname": "include_exploded_items", + "fieldtype": "Check", + "label": "Include Exploded Items", + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "eval:parent.update_stock == 1", + "fieldname": "purchase_invoice_item", + "fieldtype": "Data", + "ignore_user_permissions": 1, + "label": "Purchase Invoice Item", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "col_break6", + "fieldtype": "Column Break" + }, + { + "fieldname": "purchase_order", + "fieldtype": "Link", + "label": "Purchase Order", + "no_copy": 1, + "oldfieldname": "purchase_order", + "oldfieldtype": "Link", + "options": "Purchase Order", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "po_detail", + "fieldtype": "Data", + "hidden": 1, + "label": "Purchase Order Item", + "no_copy": 1, + "oldfieldname": "po_detail", + "oldfieldtype": "Data", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "purchase_receipt", + "fieldtype": "Link", + "label": "Purchase Receipt", + "no_copy": 1, + "oldfieldname": "purchase_receipt", + "oldfieldtype": "Link", + "options": "Purchase Receipt", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "pr_detail", + "fieldtype": "Data", + "hidden": 1, + "label": "Purchase Receipt Detail", + "no_copy": 1, + "oldfieldname": "pr_detail", + "oldfieldtype": "Data", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "sales_invoice_item", + "fieldtype": "Data", + "label": "Sales Invoice Item", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "item_weight_details", + "fieldtype": "Section Break", + "label": "Item Weight Details" + }, + { + "fieldname": "weight_per_unit", + "fieldtype": "Float", + "label": "Weight Per Unit" + }, + { + "fieldname": "total_weight", + "fieldtype": "Float", + "label": "Total Weight", + "read_only": 1 + }, + { + "fieldname": "column_break_38", + "fieldtype": "Column Break" + }, + { + "fieldname": "weight_uom", + "fieldtype": "Link", + "label": "Weight UOM", + "options": "UOM" + }, + { + "collapsible": 1, + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "fieldname": "project", + "fieldtype": "Link", + "label": "Project", + "options": "Project", + "print_hide": 1 + }, + { + "fieldname": "dimension_col_break", + "fieldtype": "Column Break" + }, + { + "default": ":Company", + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "oldfieldname": "cost_center", + "oldfieldtype": "Link", + "options": "Cost Center", + "print_hide": 1, + "print_width": "120px", + "width": "120px" + }, + { + "fieldname": "section_break_82", + "fieldtype": "Section Break" + }, + { + "allow_on_submit": 1, + "default": "0", + "fieldname": "page_break", + "fieldtype": "Check", + "label": "Page Break", + "no_copy": 1, + "print_hide": 1, + "report_hide": 1 + }, + { + "fieldname": "work_order", + "fieldtype": "Link", + "label": "Work Order", + "options": "Work_Order" + } + ], + "istable": 1, + "links": [], + "modified": "2025-03-09 11:05:37.287039", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Spare Parts", + "naming_rule": "Random", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/spare_parts/spare_parts.py b/asset_lite/asset_lite/doctype/spare_parts/spare_parts.py new file mode 100644 index 0000000..040be3e --- /dev/null +++ b/asset_lite/asset_lite/doctype/spare_parts/spare_parts.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SpareParts(Document): + pass diff --git a/asset_lite/asset_lite/doctype/supplier_reason/__init__.py b/asset_lite/asset_lite/doctype/supplier_reason/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.js b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.js new file mode 100644 index 0000000..d14f0a6 --- /dev/null +++ b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Supplier Reason", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.json b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.json new file mode 100644 index 0000000..1eb3c91 --- /dev/null +++ b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.json @@ -0,0 +1,44 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:reason", + "creation": "2025-03-27 11:32:46.883033", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "reason" + ], + "fields": [ + { + "fieldname": "reason", + "fieldtype": "Data", + "label": "Reason", + "unique": 1 + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-03-27 11:35:40.654313", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Supplier Reason", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.py b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.py new file mode 100644 index 0000000..416c85c --- /dev/null +++ b/asset_lite/asset_lite/doctype/supplier_reason/supplier_reason.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SupplierReason(Document): + pass diff --git a/asset_lite/asset_lite/doctype/supplier_reason/test_supplier_reason.py b/asset_lite/asset_lite/doctype/supplier_reason/test_supplier_reason.py new file mode 100644 index 0000000..3d0fa52 --- /dev/null +++ b/asset_lite/asset_lite/doctype/supplier_reason/test_supplier_reason.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestSupplierReason(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/support_asset_list/__init__.py b/asset_lite/asset_lite/doctype/support_asset_list/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.json b/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.json new file mode 100644 index 0000000..ebe0342 --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.json @@ -0,0 +1,37 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-10-17 13:44:10.569824", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "asset_id", + "asset_name" + ], + "fields": [ + { + "fieldname": "asset_id", + "fieldtype": "Link", + "label": "Asset ID", + "options": "Asset" + }, + { + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-10-17 13:49:53.892284", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Support Asset List", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.py b/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.py new file mode 100644 index 0000000..8d442a3 --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_asset_list/support_asset_list.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SupportAssetList(Document): + pass diff --git a/asset_lite/asset_lite/doctype/support_plans/__init__.py b/asset_lite/asset_lite/doctype/support_plans/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/support_plans/support_plans.js b/asset_lite/asset_lite/doctype/support_plans/support_plans.js new file mode 100644 index 0000000..5309bf9 --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_plans/support_plans.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Support Plans", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/support_plans/support_plans.json b/asset_lite/asset_lite/doctype/support_plans/support_plans.json new file mode 100644 index 0000000..f87d75f --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_plans/support_plans.json @@ -0,0 +1,253 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:support_plan", + "creation": "2024-09-13 14:42:48.041382", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "support_plan", + "frequency", + "max_downtime_hrs", + "column_break_ayau", + "asset", + "starting_date", + "penalty_factor", + "section_break_zyxt", + "warranty", + "warranty_start_date", + "warranty_end_date", + "war_status", + "column_break_agzy", + "extended_warranty", + "start", + "end", + "service_contract_section", + "service_contract", + "spare_parts", + "spare_parts_labour", + "labour", + "ppm_only", + "column_break_celd", + "no", + "start_date", + "end_date", + "service_contract_status", + "vendor_details_section", + "vendor", + "section_break_pyrk", + "asset_list" + ], + "fields": [ + { + "fieldname": "support_plan", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Name", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "frequency", + "fieldtype": "Select", + "label": "Frequency", + "options": "\nDaily\nWeekly\nMonthly\nQuarterly\nYearly\n2 Yearly" + }, + { + "fieldname": "asset", + "fieldtype": "Link", + "hidden": 1, + "label": "Asset", + "options": "Asset" + }, + { + "fieldname": "column_break_ayau", + "fieldtype": "Column Break" + }, + { + "fieldname": "starting_date", + "fieldtype": "Date", + "hidden": 1, + "label": "Starting Date" + }, + { + "fieldname": "service_contract_section", + "fieldtype": "Section Break", + "label": "Service Contract" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "spare_parts", + "fieldtype": "Check", + "label": "Comprehensive" + }, + { + "fieldname": "column_break_celd", + "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "labour", + "fieldtype": "Check", + "label": "Labour Only" + }, + { + "fieldname": "start_date", + "fieldtype": "Date", + "hidden": 1, + "label": "Start Date", + "mandatory_depends_on": "service_contract" + }, + { + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "service_contract_status", + "fieldtype": "Select", + "label": "Service Contract Status", + "options": "\nActive\nExpired\nNot Applicable" + }, + { + "fieldname": "end_date", + "fieldtype": "Date", + "hidden": 1, + "label": "End Date" + }, + { + "default": "0", + "fieldname": "service_contract", + "fieldtype": "Check", + "label": "Yes" + }, + { + "fieldname": "vendor_details_section", + "fieldtype": "Section Break", + "label": "Vendor Details" + }, + { + "fieldname": "vendor", + "fieldtype": "Link", + "label": "Vendor Name", + "options": "Supplier" + }, + { + "fieldname": "section_break_zyxt", + "fieldtype": "Section Break", + "label": "Warranty Details" + }, + { + "fieldname": "warranty_start_date", + "fieldtype": "Date", + "hidden": 1, + "label": "Warranty Start Date" + }, + { + "fieldname": "warranty_end_date", + "fieldtype": "Date", + "hidden": 1, + "label": "Warranty End Date" + }, + { + "default": "0", + "fieldname": "warranty", + "fieldtype": "Check", + "label": "Warranty" + }, + { + "default": "0", + "depends_on": "eval:doc.warranty == 1", + "fieldname": "extended_warranty", + "fieldtype": "Check", + "label": "Extended Warranty" + }, + { + "fieldname": "column_break_agzy", + "fieldtype": "Column Break" + }, + { + "fieldname": "start", + "fieldtype": "Date", + "hidden": 1, + "label": "Start Date" + }, + { + "fieldname": "end", + "fieldtype": "Date", + "hidden": 1, + "label": "End Date" + }, + { + "depends_on": "eval:doc.warranty == 1", + "fieldname": "war_status", + "fieldtype": "Select", + "label": "Warranty Status", + "options": "\nActive\nExpired\nNA" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "ppm_only", + "fieldtype": "Check", + "label": "PPM Only" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "spare_parts_labour", + "fieldtype": "Check", + "label": "Spare Parts & Labour" + }, + { + "default": "0", + "fieldname": "no", + "fieldtype": "Check", + "label": "No" + }, + { + "fieldname": "section_break_pyrk", + "fieldtype": "Section Break" + }, + { + "fieldname": "asset_list", + "fieldtype": "Table", + "label": "Asset List", + "options": "Support Asset List" + }, + { + "fieldname": "max_downtime_hrs", + "fieldtype": "Float", + "label": "Max Downtime Hrs" + }, + { + "fieldname": "penalty_factor", + "fieldtype": "Float", + "label": "Penalty Factor" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-03-04 15:35:02.126640", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Support Plans", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/support_plans/support_plans.py b/asset_lite/asset_lite/doctype/support_plans/support_plans.py new file mode 100644 index 0000000..eab7ddf --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_plans/support_plans.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SupportPlans(Document): + pass diff --git a/asset_lite/asset_lite/doctype/support_plans/test_support_plans.py b/asset_lite/asset_lite/doctype/support_plans/test_support_plans.py new file mode 100644 index 0000000..ab26525 --- /dev/null +++ b/asset_lite/asset_lite/doctype/support_plans/test_support_plans.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestSupportPlans(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/warranty/__init__.py b/asset_lite/asset_lite/doctype/warranty/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/warranty/test_warranty.py b/asset_lite/asset_lite/doctype/warranty/test_warranty.py new file mode 100644 index 0000000..7b6886c --- /dev/null +++ b/asset_lite/asset_lite/doctype/warranty/test_warranty.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestWarranty(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/warranty/warranty.js b/asset_lite/asset_lite/doctype/warranty/warranty.js new file mode 100644 index 0000000..7b232e8 --- /dev/null +++ b/asset_lite/asset_lite/doctype/warranty/warranty.js @@ -0,0 +1,8 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Warranty", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/warranty/warranty.json b/asset_lite/asset_lite/doctype/warranty/warranty.json new file mode 100644 index 0000000..167cf2e --- /dev/null +++ b/asset_lite/asset_lite/doctype/warranty/warranty.json @@ -0,0 +1,110 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "naming_series:", + "creation": "2024-09-17 13:07:02.620103", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "naming_series", + "asset", + "asset_name", + "extended_warranty", + "start_date", + "end_date", + "column_break_dxer", + "warranty_start_date", + "warranty_end_date", + "warranty_status" + ], + "fields": [ + { + "fieldname": "asset", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Asset", + "options": "Asset", + "reqd": 1 + }, + { + "fieldname": "warranty_start_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Warranty Start Date", + "reqd": 1 + }, + { + "fieldname": "column_break_dxer", + "fieldtype": "Column Break" + }, + { + "fetch_from": "asset.asset_name", + "fieldname": "asset_name", + "fieldtype": "Data", + "label": "Asset Name", + "read_only": 1 + }, + { + "fieldname": "warranty_end_date", + "fieldtype": "Date", + "label": "Warranty End Date" + }, + { + "fieldname": "warranty_status", + "fieldtype": "Select", + "label": "Warranty Status", + "options": "\nActive\nExpired\nNot Applicable", + "read_only": 1 + }, + { + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Naming Series", + "options": "WN-.####", + "reqd": 1 + }, + { + "default": "0", + "fieldname": "extended_warranty", + "fieldtype": "Check", + "label": "Extended Warranty" + }, + { + "depends_on": "eval:doc.extended_warranty == 1", + "fieldname": "start_date", + "fieldtype": "Date", + "label": "Start Date" + }, + { + "depends_on": "eval:doc.extended_warranty == 1", + "fieldname": "end_date", + "fieldtype": "Date", + "label": "End Date" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2024-09-23 15:36:40.924090", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Warranty", + "naming_rule": "By \"Naming Series\" field", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/warranty/warranty.py b/asset_lite/asset_lite/doctype/warranty/warranty.py new file mode 100644 index 0000000..b760e44 --- /dev/null +++ b/asset_lite/asset_lite/doctype/warranty/warranty.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Warranty(Document): + pass diff --git a/asset_lite/asset_lite/doctype/work_order/__init__.py b/asset_lite/asset_lite/doctype/work_order/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/work_order/test_work_order.py b/asset_lite/asset_lite/doctype/work_order/test_work_order.py new file mode 100644 index 0000000..08b553b --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order/test_work_order.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestWork_Order(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/work_order/work_order.js b/asset_lite/asset_lite/doctype/work_order/work_order.js new file mode 100644 index 0000000..eac4fa0 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order/work_order.js @@ -0,0 +1,75 @@ +// Copyright (c) 2024, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Work_Order", { +// refresh(frm) { + +// }, +// }); + +frappe.ui.form.on("Work_Order", { + refresh(frm) { + // Call the server-side method to get the site version type + frm.call({ + method: "check_site_version", + doc: frm.doc, + callback: function(response) { + // The returned site version type + var site_version = response.message; + + if (site_version === "lite") { + frm.set_df_property("need_spare_parts_purchase", "hidden", 1); + // frappe.msgprint("The Need Procurement checkbox is hided as the site version is 'lite'."); + } else { + frm.set_df_property("need_spare_parts_purchase", "hidden", 0); + } + } + }); + + // Hide the default print icon + frm.page.hide_icon_group('print'); + + + // Add custom button for PPM Service Report with a print icon + /*frm.add_custom_button( + ` ${__('Service Report')}`, + function() { + // Set Service Report as the default print format and open print preview + const customLink = `/printview?doctype=Work_Order&name=${frm.doc.name}&trigger_print=0&format=Service%20Report&no_letterhead=0`; + window.open(customLink); + } + );*/ + if(frm.doc.company=='King Fahad Hospital'){ + frm.add_custom_button( + ` ${__('SR-King Fahad Hospital')}`, + function() { + // Set Service Report as the default print format and open print preview + const customLink = `/printview?doctype=Work_Order&name=${frm.doc.name}&trigger_print=0&format=Service%20Report&no_letterhead=0`; + window.open(customLink); + } + ); + } + if(frm.doc.company=='King Khalid Hospital'){ + frm.add_custom_button( + ` ${__('SR-King Khalid Hospital')}`, + function() { + // Set Service Report as the default print format and open print preview + const customLink = `/printview?doctype=Work_Order&name=${frm.doc.name}&trigger_print=0&format=Service%20Report(KK)&no_letterhead=0`; + window.open(customLink); + } + ); + } + + }, + /*setup: (frm) => { + frm.set_query("assign_to", "asset_maintenance_tasks", function (doc) { + return { + query: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_team_members", + filters: { + maintenance_team: doc.maintenance_team, + }, + }; + }); + + }*/ +}); diff --git a/asset_lite/asset_lite/doctype/work_order/work_order.json b/asset_lite/asset_lite/doctype/work_order/work_order.json new file mode 100644 index 0000000..4eae984 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order/work_order.json @@ -0,0 +1,757 @@ +{ + "actions": [], + "allow_import": 1, + "autoname": "naming_series:", + "creation": "2024-09-11 13:13:50.398974", + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "naming_series", + "work_order_type", + "asset_type", + "company", + "site_name", + "manufacturer", + "need_procurement", + "column_break_2", + "priority", + "asset", + "department", + "aseet_id", + "recall_reference_number", + "vendor", + "column_break_kmog", + "repair_status", + "asset_name", + "supplier", + "section_break_okba", + "workflow_state", + "warranty_and_service_details_section", + "war", + "warranty", + "service_contract", + "column_break_sdfm", + "service_contract_details", + "covering_spare_parts", + "spare_parts_labour", + "covering_labour", + "ppm_only", + "section_break_5", + "failure_date", + "first_responded_on", + "total_hours_spent", + "penalty", + "feedback", + "feedback_rating", + "column_break_6", + "completion_date", + "job_completed", + "assigned_manager", + "assigned_technician", + "custom_difference", + "accounting_dimensions_section", + "cost_center", + "column_break_14", + "project", + "defective_spare_parts_section", + "spare_parts", + "table_cmqp", + "make_details_section", + "make", + "model", + "column_break_ixht", + "serial_number", + "purchase_details_section", + "invoice_table", + "accounting_details", + "purchase_invoice", + "capitalize_repair_cost", + "stock_consumption", + "column_break_8", + "repair_cost", + "stock_consumption_details_section", + "stock_items", + "total_repair_cost", + "asset_depreciation_details_section", + "increase_in_asset_life", + "section_break_9", + "description", + "column_break_9", + "actions_performed", + "section_break_23", + "downtime", + "column_break_19", + "amended_from", + "section_break_azqe", + "total_main_hour_at_site", + "serviced_by", + "sign1", + "date1", + "column_break_wnzz", + "total_travel_hour", + "end_user", + "sign2", + "date2", + "column_break_pwkx", + "total_hours", + "bio_med_dept", + "sign3", + "date3", + "comments_section", + "customer_comments" + ], + "fields": [ + { + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Work Order Number", + "options": "WO-.YYYY.-", + "reqd": 1 + }, + { + "fetch_from": "asset.company", + "fieldname": "company", + "fieldtype": "Link", + "label": "Hospital Name", + "options": "Company" + }, + { + "default": "Repair (CM)", + "fieldname": "work_order_type", + "fieldtype": "Link", + "in_filter": 1, + "in_global_search": 1, + "in_standard_filter": 1, + "label": "Work Order Type", + "options": "Issue Type" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "columns": 1, + "fieldname": "asset", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Asset ID", + "options": "Asset" + }, + { + "fetch_from": "asset.asset_name", + "fieldname": "asset_name", + "fieldtype": "Read Only", + "label": "Asset Name" + }, + { + "fieldname": "priority", + "fieldtype": "Link", + "label": "Priority", + "options": "Issue Priority" + }, + { + "fieldname": "section_break_5", + "fieldtype": "Section Break", + "label": "Response Details" + }, + { + "columns": 1, + "fieldname": "failure_date", + "fieldtype": "Datetime", + "label": "Failure Date", + "reqd": 1 + }, + { + "default": "Open", + "fieldname": "repair_status", + "fieldtype": "Select", + "in_filter": 1, + "in_global_search": 1, + "in_standard_filter": 1, + "label": "Work Order Status", + "no_copy": 1, + "options": "Open\nWork In Progress\nPending Review\nCompleted\nCancelled\nClosed", + "print_hide": 1 + }, + { + "fieldname": "first_responded_on", + "fieldtype": "Datetime", + "label": "First Responded On", + "permlevel": 2 + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "allow_on_submit": 1, + "depends_on": "eval:!doc.__islocal", + "fieldname": "completion_date", + "fieldtype": "Datetime", + "label": "Completion Date", + "mandatory_depends_on": "eval:doc.repair_status == \"Completed\" || doc.repair_status == \"Closed\"", + "no_copy": 1 + }, + { + "allow_on_submit": 1, + "default": "No", + "fieldname": "job_completed", + "fieldtype": "Select", + "label": "Job Completed", + "options": "\nNo\nYes", + "permlevel": 2, + "read_only": 1 + }, + { + "fieldname": "assigned_manager", + "fieldtype": "Link", + "label": "Assigned Manager", + "options": "User", + "read_only": 1 + }, + { + "depends_on": "eval:doc.assigned_manager", + "fieldname": "assigned_technician", + "fieldtype": "Link", + "label": "Assigned Technician", + "options": "User" + }, + { + "collapsible": 1, + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "hidden": 1, + "label": "Accounting Dimensions" + }, + { + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center" + }, + { + "fieldname": "column_break_14", + "fieldtype": "Column Break" + }, + { + "fieldname": "project", + "fieldtype": "Link", + "label": "Project", + "options": "Project" + }, + { + "collapsible": 1, + "fieldname": "defective_spare_parts_section", + "fieldtype": "Section Break", + "label": "Defective Spare Parts " + }, + { + "fieldname": "spare_parts", + "fieldtype": "Button", + "label": "Spare Parts" + }, + { + "fieldname": "table_cmqp", + "fieldtype": "Table", + "options": "Spare Parts" + }, + { + "collapsible": 1, + "fieldname": "make_details_section", + "fieldtype": "Section Break", + "label": "Make details" + }, + { + "fetch_from": "asset.custom_make", + "fetch_if_empty": 1, + "fieldname": "make", + "fieldtype": "Data", + "label": "Make" + }, + { + "fetch_from": "asset.custom_model", + "fetch_if_empty": 1, + "fieldname": "model", + "fieldtype": "Data", + "label": "Model" + }, + { + "fieldname": "column_break_ixht", + "fieldtype": "Column Break" + }, + { + "fetch_from": "asset.custom_serial_number", + "fetch_if_empty": 1, + "fieldname": "serial_number", + "fieldtype": "Data", + "label": "Serial Number" + }, + { + "fieldname": "accounting_details", + "fieldtype": "Section Break", + "label": "Accounting Details" + }, + { + "fieldname": "purchase_invoice", + "fieldtype": "Link", + "hidden": 1, + "label": "Purchase Invoice", + "mandatory_depends_on": "eval: doc.repair_status == 'Completed' && doc.repair_cost > 0", + "no_copy": 1, + "options": "Purchase Invoice" + }, + { + "default": "0", + "depends_on": "eval:!doc.__islocal", + "fieldname": "capitalize_repair_cost", + "fieldtype": "Check", + "hidden": 1, + "label": "Capitalize Repair Cost" + }, + { + "default": "0", + "fieldname": "stock_consumption", + "fieldtype": "Check", + "label": "Stock Consumed During Repair" + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "repair_cost", + "fieldtype": "Currency", + "label": "Repair Cost", + "read_only": 1 + }, + { + "depends_on": "stock_consumption", + "fieldname": "stock_consumption_details_section", + "fieldtype": "Section Break", + "label": "Stock Consumption Details" + }, + { + "fieldname": "stock_items", + "fieldtype": "Table", + "label": "Stock Items", + "mandatory_depends_on": "stock_consumption", + "options": "Asset Repair Consumed Item" + }, + { + "depends_on": "eval: doc.stock_consumption && doc.total_repair_cost > 0", + "description": "Sum of Repair Cost and Value of Consumed Stock Items.", + "fieldname": "total_repair_cost", + "fieldtype": "Currency", + "label": "Total Repair Cost", + "read_only": 1 + }, + { + "depends_on": "capitalize_repair_cost", + "fieldname": "asset_depreciation_details_section", + "fieldtype": "Section Break", + "hidden": 1, + "label": "Asset Depreciation Details" + }, + { + "fieldname": "increase_in_asset_life", + "fieldtype": "Int", + "label": "Increase In Asset Life(Months)", + "no_copy": 1 + }, + { + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "label": "Description" + }, + { + "fieldname": "description", + "fieldtype": "Long Text", + "label": "Nature of Complaint" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "fieldname": "actions_performed", + "fieldtype": "Long Text", + "label": "Work Performed", + "permlevel": 2 + }, + { + "fieldname": "section_break_23", + "fieldtype": "Section Break" + }, + { + "fieldname": "downtime", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Downtime", + "read_only": 1 + }, + { + "fieldname": "column_break_19", + "fieldtype": "Column Break" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Asset Repair", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "section_break_azqe", + "fieldtype": "Section Break" + }, + { + "fieldname": "total_main_hour_at_site", + "fieldtype": "Data", + "label": "Total Main Hour At Site", + "read_only_depends_on": "eval:!frappe.user.has_role(\"Technician\")" + }, + { + "fieldname": "serviced_by", + "fieldtype": "Data", + "label": "Serviced By" + }, + { + "depends_on": "eval:doc.serviced_by", + "fieldname": "sign1", + "fieldtype": "Data", + "label": "Signature" + }, + { + "depends_on": "eval:doc.serviced_by", + "fieldname": "date1", + "fieldtype": "Date", + "label": "Date" + }, + { + "fieldname": "column_break_wnzz", + "fieldtype": "Column Break" + }, + { + "fieldname": "total_travel_hour", + "fieldtype": "Data", + "label": "Total Travel Hour", + "read_only_depends_on": "eval:!frappe.user.has_role(\"End user\")" + }, + { + "fieldname": "end_user", + "fieldtype": "Data", + "label": "End user" + }, + { + "depends_on": "eval:doc.end_user", + "fieldname": "sign2", + "fieldtype": "Data", + "label": "Signature" + }, + { + "depends_on": "eval:doc.end_user", + "fieldname": "date2", + "fieldtype": "Date", + "label": "Date" + }, + { + "fieldname": "column_break_pwkx", + "fieldtype": "Column Break" + }, + { + "fieldname": "total_hours", + "fieldtype": "Data", + "label": "Total Hours", + "read_only_depends_on": "eval:!frappe.user.has_role(\"Maintenance Manager\")" + }, + { + "fieldname": "bio_med_dept", + "fieldtype": "Data", + "label": "Bio-Med Dept" + }, + { + "depends_on": "eval:doc.bio_med_dept", + "fieldname": "sign3", + "fieldtype": "Data", + "label": "Signature" + }, + { + "depends_on": "eval:doc.bio_med_dept", + "fieldname": "date3", + "fieldtype": "Date", + "label": "Date" + }, + { + "fieldname": "comments_section", + "fieldtype": "Section Break", + "label": "Comments" + }, + { + "fieldname": "customer_comments", + "fieldtype": "Small Text", + "label": "Customer Comments" + }, + { + "fieldname": "warranty_and_service_details_section", + "fieldtype": "Section Break", + "label": "Warranty And Service Contract Details" + }, + { + "default": "0", + "fetch_from": "asset.custom_warranty", + "fieldname": "warranty", + "fieldtype": "Check", + "label": "Warranty", + "read_only": 1 + }, + { + "default": "0", + "fetch_from": "asset.custom__service_contract", + "fieldname": "service_contract", + "fieldtype": "Check", + "hidden": 1, + "label": "Service Contract", + "read_only": 1 + }, + { + "fieldname": "column_break_sdfm", + "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fetch_from": "asset.custom_covering_labour", + "fieldname": "covering_labour", + "fieldtype": "Check", + "label": "Labour", + "read_only": 1 + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fetch_from": "asset.custom_covering_spare_parts", + "fieldname": "covering_spare_parts", + "fieldtype": "Check", + "label": "Comprehensive", + "read_only": 1 + }, + { + "fieldname": "war", + "fieldtype": "HTML", + "label": "Warranty", + "options": "Warranty Details
" + }, + { + "fieldname": "service_contract_details", + "fieldtype": "HTML", + "label": "Service Contract details", + "options": "Service Contract Details
" + }, + { + "fieldname": "purchase_details_section", + "fieldtype": "Section Break", + "label": "Invoice Details" + }, + { + "depends_on": "eval:doc.workflow_state != \"Sent to maintenance Manager\"", + "fieldname": "invoice_table", + "fieldtype": "Table", + "label": "Invoice Table", + "options": "PI Table", + "read_only_depends_on": "eval:doc.workflow_state != \"Pending Purchase\"" + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fieldname": "ppm_only", + "fieldtype": "Check", + "label": " PPM Only", + "read_only": 1 + }, + { + "default": "0", + "depends_on": "eval:doc.service_contract == 1", + "fetch_from": "asset.custom_spare_parts_labour", + "fieldname": "spare_parts_labour", + "fieldtype": "Check", + "label": "Spare Parts & Labour", + "read_only": 1 + }, + { + "fieldname": "vendor", + "fieldtype": "Data", + "label": "Vendor" + }, + { + "allow_on_submit": 1, + "fetch_from": "asset.department", + "fetch_if_empty": 1, + "fieldname": "department", + "fieldtype": "Link", + "in_filter": 1, + "label": "Department", + "options": "Department" + }, + { + "fetch_from": "asset.custom_manufacturer", + "fetch_if_empty": 1, + "fieldname": "manufacturer", + "fieldtype": "Data", + "label": "Manufacturer" + }, + { + "allow_on_submit": 1, + "fieldname": "supplier", + "fieldtype": "Link", + "in_filter": 1, + "in_global_search": 1, + "in_standard_filter": 1, + "label": "Supplier", + "options": "Supplier" + }, + { + "depends_on": "eval:doc.work_order_type == \"Recall\"", + "fieldname": "recall_reference_number", + "fieldtype": "Data", + "label": "Recall Reference Number" + }, + { + "fieldname": "aseet_id", + "fieldtype": "Link", + "hidden": 1, + "label": "Aseet ID", + "options": "Asset" + }, + { + "allow_on_submit": 1, + "fieldname": "total_hours_spent", + "fieldtype": "Float", + "label": "Total Hours Spent", + "permlevel": 2 + }, + { + "allow_on_submit": 1, + "fieldname": "penalty", + "fieldtype": "Float", + "label": "Penalty" + }, + { + "fieldname": "section_break_okba", + "fieldtype": "Section Break" + }, + { + "fieldname": "workflow_state", + "fieldtype": "Link", + "hidden": 1, + "label": "Workflow State", + "options": "Workflow" + }, + { + "allow_on_submit": 1, + "fieldname": "feedback", + "fieldtype": "Link", + "hidden": 1, + "label": "Feedback", + "options": "Feedback" + }, + { + "fieldname": "custom_difference", + "fieldtype": "Float", + "label": "Difference" + }, + { + "default": "0", + "fieldname": "need_procurement", + "fieldtype": "Check", + "label": "Need Procurement" + }, + { + "fieldname": "column_break_kmog", + "fieldtype": "Column Break" + }, + { + "allow_on_submit": 1, + "fieldname": "feedback_rating", + "fieldtype": "Rating", + "label": "Feedback Rating" + }, + { + "fieldname": "asset_type", + "fieldtype": "Link", + "label": "Asset Type", + "options": "Asset Type", + "reqd": 1 + }, + { + "depends_on": "eval:doc.asset_type == \"Non Biomedical\" || (doc.company && doc.asset_type == \"Biomedical\" && doc.company.startsWith(\"Mobile\"))", + "fetch_from": "asset.custom_site", + "fetch_if_empty": 1, + "fieldname": "site_name", + "fieldtype": "Link", + "label": "Site Name", + "options": "Mobile Team Site" + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [ + { + "hidden": 1, + "link_doctype": "Purchase Request", + "link_fieldname": "issue" + }, + { + "link_doctype": "Feedback", + "link_fieldname": "work_order" + } + ], + "modified": "2025-08-12 13:34:54.808183", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Work_Order", + "naming_rule": "By \"Naming Series\" field", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "share": 1, + "submit": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "asset_name", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/work_order/work_order.py b/asset_lite/asset_lite/doctype/work_order/work_order.py new file mode 100644 index 0000000..16b4b86 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order/work_order.py @@ -0,0 +1,25 @@ +# Copyright (c) 2024, seyfert and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document + +class Work_Order(Document): + @frappe.whitelist() + def check_site_version(self): + # Fetch the site version type from the site configuration + site_version_type = frappe.local.conf.get("site_version_type", "") + return site_version_type + + ''' + @frappe.whitelist() + @frappe.validate_and_sanitize_search_inputs + def get_team_members(doctype, txt, searchfield, start, page_len, filters): + return frappe.db.get_values( + "Maintenance Team Member", {"parent": filters.get("maintenance_team")}, "team_member" + ) + + ''' + + + diff --git a/asset_lite/asset_lite/doctype/work_order_requisitor/__init__.py b/asset_lite/asset_lite/doctype/work_order_requisitor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/work_order_requisitor/test_work_order_requisitor.py b/asset_lite/asset_lite/doctype/work_order_requisitor/test_work_order_requisitor.py new file mode 100644 index 0000000..9755eeb --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_requisitor/test_work_order_requisitor.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestWork_OrderRequisitor(FrappeTestCase): + pass diff --git a/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.js b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.js new file mode 100644 index 0000000..67a1c6e --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, seyfert and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Work_Order Requisitor", { +// refresh(frm) { + +// }, +// }); diff --git a/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.json b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.json new file mode 100644 index 0000000..3c6b465 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.json @@ -0,0 +1,50 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:requisitor_name", + "creation": "2025-02-07 13:14:17.271763", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "requisitor_name", + "arabic_name" + ], + "fields": [ + { + "fieldname": "requisitor_name", + "fieldtype": "Data", + "label": "Requisitor Name", + "unique": 1 + }, + { + "fieldname": "arabic_name", + "fieldtype": "Data", + "label": "Arabic Name" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2025-02-07 13:19:48.723260", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Work_Order Requisitor", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.py b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.py new file mode 100644 index 0000000..cdab879 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_requisitor/work_order_requisitor.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Work_OrderRequisitor(Document): + pass diff --git a/asset_lite/asset_lite/doctype/work_order_table/__init__.py b/asset_lite/asset_lite/doctype/work_order_table/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/doctype/work_order_table/work_order_table.json b/asset_lite/asset_lite/doctype/work_order_table/work_order_table.json new file mode 100644 index 0000000..e546d57 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_table/work_order_table.json @@ -0,0 +1,69 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-02-08 00:26:13.321930", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_name", + "part_no", + "description", + "column_break_zklj", + "quantity", + "status" + ], + "fields": [ + { + "columns": 2, + "fieldname": "item_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Item Name" + }, + { + "columns": 2, + "fieldname": "part_no", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Part No" + }, + { + "columns": 2, + "fieldname": "description", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "Description" + }, + { + "fieldname": "column_break_zklj", + "fieldtype": "Column Break" + }, + { + "columns": 2, + "fieldname": "quantity", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Quantity" + }, + { + "columns": 2, + "fieldname": "status", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Status" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-02-10 20:38:06.108151", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "Work_order Table", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/asset_lite/asset_lite/doctype/work_order_table/work_order_table.py b/asset_lite/asset_lite/doctype/work_order_table/work_order_table.py new file mode 100644 index 0000000..dddb4e4 --- /dev/null +++ b/asset_lite/asset_lite/doctype/work_order_table/work_order_table.py @@ -0,0 +1,9 @@ +# Copyright (c) 2025, seyfert and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class Work_orderTable(Document): + pass diff --git a/asset_lite/asset_lite/page/__init__.py b/asset_lite/asset_lite/page/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/page/active_map/__init__.py b/asset_lite/asset_lite/page/active_map/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/page/active_map/active_map.js b/asset_lite/asset_lite/page/active_map/active_map.js new file mode 100644 index 0000000..febafd3 --- /dev/null +++ b/asset_lite/asset_lite/page/active_map/active_map.js @@ -0,0 +1,749 @@ +frappe.pages['active-map'].on_page_load = function(wrapper) { + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'Active Map', + single_column: true + }); + + // Load Leaflet CSS + $('').appendTo('head'); + + // Load Leaflet JS + $.getScript('https://unpkg.com/leaflet@1.7.1/dist/leaflet.js', function() { + // Initialize the map after Leaflet is loaded + new AssetMap(page, wrapper); + }); +}; + +class AssetMap { + constructor(page, wrapper) { + this.page = page; + this.wrapper = wrapper; + this.setup_page(); + } + + setup_page() { + // Add filters + this.setup_filters(); + + // Create map container + this.make_map_container(); + + // Add custom styles + this.add_custom_styles(); + + // Initialize map + this.initialize_map(); + } + + setup_filters() { + let filter_container = $('
').prependTo(this.page.main); + + // Add a filter for hospital/company + this.page.add_field({ + parent: filter_container, + fieldname: 'company', + label: __('Hospital'), + fieldtype: 'Link', + options: 'Location', // Using Location DocType for hospitals + get_query: () => { + return { + filters: { + custom_is_hospital: 1 + } + }; + }, + onchange: () => this.fetch_and_render_data() + }); + } + + make_map_container() { + this.$map_container = $('
') + .appendTo(this.page.main); + } + + add_custom_styles() { + // Add custom CSS for tooltips and popups + if (!$('#asset-map-styles').length) { + $(' + `); + + // Create a container for layout + $(wrapper).append(` +
+
+
+
+
+
+
+
+
+ `); + + // Create Asset Filter + let asset_filter = new frappe.ui.form.ControlLink({ + parent: $("#filter_section"), + df: { + label: "Select Asset", + fieldname: "asset", + options: "Asset", + change: function() { + let asset_id = asset_filter.get_value(); + if (asset_id) { + fetch_asset_details(asset_id); + } + } + } + }); + + asset_filter.make_input(); // Render the filter field + + // **Fix: Wait until the input is ready before setting the value** + let params = new URLSearchParams(window.location.search); + let asset_id = params.get("asset"); // Get asset from URL + + if (asset_id) { + setTimeout(() => { + asset_filter.set_value(asset_id); // Apply the value after render + fetch_asset_details(asset_id); // Fetch data immediately + }, 500); // Delay to ensure input is initialized + } + + // Function to Fetch Asset Details + function fetch_asset_details(asset_id) { + frappe.call({ + method: "frappe.client.get", + args: { + doctype: "Asset", + name: asset_id + }, + callback: function(response) { + if (response.message) { + let asset = response.message; + + $("#content_section").html(` +

🔍 Asset Details

+

ID: ${asset.name}

+

Name: ${asset.asset_name}

+

🏥 Hospital: ${asset.company}

+

📍 Location: ${asset.location}

+

🚛 Supplier: ${asset.supplier}

+

💰 Total Repair Cost: ${asset.custom_total_spare_parts_amount}

+ `); + + $("#work_orders_section").html(`

🔗 Linked Work Orders

`); + $("#spare_parts_section").html(`

🛠️ Items Used for Repair

`); + + // Fetch Work Orders After Asset Details Are Shown + fetch_work_orders(asset_id); + fetch_spare_parts(asset_id); + fetch_maintenance_details(asset_id); + } + } + }); + } + + // Function to Fetch and Display Linked Work Orders + function fetch_work_orders(asset_id) { + frappe.call({ + method: "frappe.client.get_list", + args: { + doctype: "Work_Order", + filters: { asset: asset_id }, + fields: ["name", "work_order_type","repair_status","creation","total_repair_cost"] + }, + callback: function(response) { + if (response.message) { + let work_orders = response.message; + + // If no work orders found + if (work_orders.length === 0) { + $("#work_orders_table").html("

No Work Orders Found for this Asset.

"); + return; + } + + // Create a formatted table for Work Orders + let html = ` +
+ + + + + + + + + + + + `; + + // Append Work Order details in table rows + work_orders.forEach(wo => { + // Determine status badge color + let status_class = ""; + if (wo.repair_status === "Completed") { + status_class = "badge-success"; // Green + } else if (wo.repair_status === "Work In Progress") { + status_class = "badge-warning"; // Yellow + } else { + status_class = "badge-secondary"; // Gray (default) + } + + + html += ` + + + + + + + + `; + }); + + html += ` + +
Work Order NoWork Order TypeRepair StatusRepair CostCreated On
${wo.name}${wo.work_order_type}${wo.repair_status}${parseFloat(wo.total_repair_cost).toFixed(2)}ر.س${wo.creation}
+
+ `; + + // Insert into the work_orders_section + $("#work_orders_table").html(html); + } + } + }); + } + + // Function to Fetch and Display Spare Parts + function fetch_spare_parts(asset_id) { + frappe.call({ + method: "frappe.client.get", + args: { + doctype: "Asset", + name: asset_id + }, + callback: function(response) { + if (response.message && response.message.custom_spare_parts) { + let spare_parts = response.message.custom_spare_parts; + + if (spare_parts.length === 0) { + $("#spare_parts_table").html("

No Spare Parts Used for this Asset.

"); + return; + } + + // Group spare parts by work_order + let grouped_parts = {}; + spare_parts.forEach(sp => { + if (!grouped_parts[sp.work_order]) { + grouped_parts[sp.work_order] = []; + } + grouped_parts[sp.work_order].push(sp); + }); + + // Create HTML for Spare Parts Table + let html = `
`; + + Object.keys(grouped_parts).forEach(work_order => { + html += ` +

Work Order: ${work_order ? work_order : ""}

+ + + + + + + + + + + `; + + grouped_parts[work_order].forEach(sp => { + html += ` + + + + + + + `; + }); + + html += ` + +
Item NameQuantityCostAmount
${sp.item_code}${sp.qty}${sp.rate}ر.س${sp.amount}ر.س
+ `; + }); + + html += `
`; + + // Insert into the spare_parts_section + $("#spare_parts_table").html(html); + } + } + }); + } + + // Fetch Asset Maintenance Details (Including Tasks) +function fetch_maintenance_details(asset_id) { + frappe.call({ + method: "frappe.client.get_list", + args: { + doctype: "Asset Maintenance", + filters: { asset_name: asset_id }, + fields: ["name", "maintenance_team", "custom_type_of_maintenance"], + limit_page_length: 10 + }, + callback: function(response) { + if (response.message) { + let maintenance_records = response.message; + if (maintenance_records.length === 0) { + $("#maintenance_section").html("

No Maintenance Records Found.

"); + return; + } + + let html = `

🛠️ Asset Maintenance Details

`; + + maintenance_records.forEach(m => { + html += ` +
+

Maintenance ID: ${m.name}

+

Maintenance Team: ${m.maintenance_team}

+

Type of Maintenance: ${m.custom_type_of_maintenance}

+
+ `; + + // Fetch Maintenance Tasks (Child Table) for Each Record + fetch_maintenance_tasks(m.name); + }); + + $("#maintenance_section").html(html); + } + } + }); +} + +function fetch_maintenance_tasks(maintenance_id) { + frappe.call({ + method: "frappe.client.get", + args: { + doctype: "Asset Maintenance", + name: maintenance_id + }, + callback: function(response) { + if (response.message && response.message.asset_maintenance_tasks) { + let tasks = response.message.asset_maintenance_tasks; + if (tasks.length === 0) { + $("#maintenance_section").append("

No Maintenance Tasks Found.

"); + return; + } + + // Clear the section to avoid duplicate entries + $("#maintenance_section").find(".maintenance-tasks").remove(); + + let html = ` +
+


Maintenance Tasks for ${maintenance_id}

+
+ + + + + + + + + + `; + + tasks.forEach(task => { + html += ` + + + + + + `; + }); + + html += `
Assigned ToPeriodicityNext Due Date
${task.assign_to_name}${task.periodicity}${task.next_due_date}
`; + + $("#maintenance_section").append(html); + fetch_maintenance_logs(maintenance_id); + } + } + }); +} + +function fetch_maintenance_logs(maintenance_id) { + frappe.call({ + method: "frappe.client.get_list", + args: { + doctype: "Asset Maintenance Log", + filters: { asset_maintenance: maintenance_id }, + fields: ["maintenance_status"] + }, + callback: function(response) { + if (response.message) { + let logs = response.message; + if (logs.length === 0) { + $("#maintenance_section").append("

No Maintenance Logs Found.

"); + return; + } + + // Remove previous log summary + $("#maintenance_section").find(".maintenance-log-summary").remove(); + + let status_counts = {}; + logs.forEach(log => { + if (!status_counts[log.maintenance_status]) { + status_counts[log.maintenance_status] = 0; + } + status_counts[log.maintenance_status]++; + }); + + let html = ` +
+

📜Periodic Maintenance

+
+ + + + + + + + + `; + + for (let status in status_counts) { + html += ` + + + + + `; + } + + html += `
Maintenance StatusCount
${status}${status_counts[status]}
`; + + $("#maintenance_section").append(html); + fetch_detailed_maintenance_logs(maintenance_id); + } + } + }); +} + +function fetch_detailed_maintenance_logs(maintenance_id) { + frappe.call({ + method: "frappe.client.get_list", + args: { + doctype: "Asset Maintenance Log", + filters: { asset_maintenance: maintenance_id }, + fields: [ + "name", + "maintenance_status", + "assign_to_name", + "maintenance_type", + "due_date", + "completion_date", + "periodicity", + "actions_performed" + ], + order_by: "completion_date desc" + }, + callback: function(response) { + if (response.message) { + let logs = response.message; + if (logs.length === 0) { + $("#maintenance_section").append("

No Maintenance Logs Found.

"); + return; + } + + // Remove previous detailed logs + $("#maintenance_section").find(".maintenance-logs").remove(); + + let completed_logs = logs.filter(log => log.maintenance_status === "Completed"); + let remaining_logs = logs.filter(log => log.maintenance_status !== "Completed"); + + let html = `
`; + + // ✅ Display Completed Logs First + if (completed_logs.length > 0) { + html += ` +

✅ Completed Maintenance Logs

+
+ + + + + + + + + + + + + + `; + + completed_logs.forEach(log => { + html += ` + + + + + + + + + + `; + }); + + html += `
Log IDAssigned ToMaintenance TypeDue DateCompletion DatePeriodicityActions Performed
${log.name}${log.assign_to_name}${log.maintenance_type}${log.due_date}${log.completion_date}${log.periodicity}${log.actions_performed ? log.actions_performed : ""}
`; + } + + // ✅ Display Remaining Logs + if (remaining_logs.length > 0) { + html += ` +

⏳ Pending/Planned Maintenance Logs

+
+ + + + + + + + + + + + + + `; + + remaining_logs.forEach(log => { + html += ` + + + + + + + + + + `; + }); + + html += `
Log IDAssigned ToMaintenance TypeDue DatePeriodicityMaintenance StatusActions Performed
${log.name}${log.assign_to_name}${log.maintenance_type}${log.due_date}${log.periodicity}${log.maintenance_status}${log.actions_performed ? log.actions_performed : ""}
`; + } + + html += `
`; // Close maintenance logs section + + $("#maintenance_section").append(html); + } + } + }); +} + + + +}; diff --git a/asset_lite/asset_lite/page/asset_history/asset_history.json b/asset_lite/asset_lite/page/asset_history/asset_history.json new file mode 100644 index 0000000..4f5c82e --- /dev/null +++ b/asset_lite/asset_lite/page/asset_history/asset_history.json @@ -0,0 +1,18 @@ +{ + "content": null, + "creation": "2025-03-09 15:13:49.273077", + "docstatus": 0, + "doctype": "Page", + "idx": 0, + "modified": "2025-03-09 15:13:49.273077", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "asset-history", + "owner": "Administrator", + "page_name": "asset-history", + "roles": [], + "script": null, + "standard": "Yes", + "style": null, + "system_page": 0 +} \ No newline at end of file diff --git a/asset_lite/asset_lite/page/asset_map/__init__.py b/asset_lite/asset_lite/page/asset_map/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/page/asset_map/asset_map.js b/asset_lite/asset_lite/page/asset_map/asset_map.js new file mode 100644 index 0000000..b42bdb5 --- /dev/null +++ b/asset_lite/asset_lite/page/asset_map/asset_map.js @@ -0,0 +1,103 @@ +frappe.pages['asset-map'].on_page_load = function(wrapper) { + + let page = frappe.ui.make_app_page({ + + parent: wrapper, + + title: 'Asset Map', + + single_column: true + + }); + + // Create map container + + let $mapContainer = $('
').css({ + + height: '500px', + + width: '100%' + + }).appendTo(page.main); + + // Initialize map + + let map = L.map('asset-map-container').setView([20.5937, 78.9629], 5); // Default to India + + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + + maxZoom: 19 + + }).addTo(map); + + // Fetch assets with linked locations + + frappe.call({ + + method: 'frappe.client.get_list', + + args: { + + doctype: 'Asset', + + fields: ['name', 'asset_name', 'location'], + filters: { + location: ['=', 'Domat Aljandal'] // Ensures location is not empty + } + + }, + + callback: function(res) { + + console.log('Assets:', res.message); // Log all fetched assets + + if (res.message) { + + res.message.forEach(asset => { + + if (asset.location == "Domat Aljandal") { + + frappe.call({ + + method: 'frappe.client.get', + + args: { + + doctype: 'Location', + + name: asset.location + + }, + + callback: function(r) { + + console.log(`Location for asset ${asset.asset_name}:`, r.message); // Log location details + + if (r.message && r.message.latitude && r.message.longitude && r.message.name === 'Domat Aljandal') { + console.log("Test") + + L.marker([r.message.latitude, r.message.longitude]) + + .addTo(map) + + .bindPopup(`${asset.asset_name}`); + + } + + } + + }); + + } + + }); + + } + + } + + }); + +}; + + \ No newline at end of file diff --git a/asset_lite/asset_lite/page/asset_map/asset_map.json b/asset_lite/asset_lite/page/asset_map/asset_map.json new file mode 100644 index 0000000..f854208 --- /dev/null +++ b/asset_lite/asset_lite/page/asset_map/asset_map.json @@ -0,0 +1,19 @@ +{ + "content": null, + "creation": "2025-03-12 17:08:05.267445", + "docstatus": 0, + "doctype": "Page", + "idx": 0, + "modified": "2025-03-12 17:08:05.267445", + "modified_by": "Administrator", + "module": "Asset Lite", + "name": "asset-map", + "owner": "Administrator", + "page_name": "asset-map", + "roles": [], + "script": null, + "standard": "Yes", + "style": null, + "system_page": 0, + "title": "Asset map" +} \ No newline at end of file diff --git a/asset_lite/asset_lite/page/privacy_policy/__init__.py b/asset_lite/asset_lite/page/privacy_policy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset_lite/asset_lite/page/privacy_policy/privacy_policy.js b/asset_lite/asset_lite/page/privacy_policy/privacy_policy.js new file mode 100644 index 0000000..2a522e6 --- /dev/null +++ b/asset_lite/asset_lite/page/privacy_policy/privacy_policy.js @@ -0,0 +1,164 @@ +frappe.pages['privacy-policy'].on_page_load = function(wrapper) { + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'Privacy Policy', + single_column: true + }); + + // Insert your full HTML here + $(page.main).html(` +

Privacy Policy

+

Last updated: August 28, 2025

+

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

+

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the Privacy Policy Generator.

+

Interpretation and Definitions

+

Interpretation

+

The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

+

Definitions

+

For the purposes of this Privacy Policy:

+ +

Collecting and Using Your Personal Data

+

Types of Data Collected

+

Personal Data

+

While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:

+ +

Usage Data

+

Usage Data is collected automatically when using the Service.

+

Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

+

When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.

+

We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.

+

Information Collected while Using the Application

+

While using Our Application, in order to provide features of Our Application, We may collect, with Your prior permission:

+ +

We use this information to provide features of Our Service, to improve and customize Our Service. The information may be uploaded to the Company's servers and/or a Service Provider's server or it may be simply stored on Your device.

+

You can enable or disable access to this information at any time, through Your Device settings.

+

Use of Your Personal Data

+

The Company may use Personal Data for the following purposes:

+ +

We may share Your personal information in the following situations:

+ +

Retention of Your Personal Data

+

The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

+

The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.

+

Transfer of Your Personal Data

+

Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.

+

Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.

+

The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.

+

Delete Your Personal Data

+

You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.

+

Our Service may give You the ability to delete certain information about You from within the Service.

+

You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.

+

Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.

+

Disclosure of Your Personal Data

+

Business Transactions

+

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.

+

Law enforcement

+

Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).

+

Other legal requirements

+

The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

+ +

Security of Your Personal Data

+

The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.

+

Children's Privacy

+

Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.

+

If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.

+

Links to Other Websites

+

Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.

+

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

+

Changes to this Privacy Policy

+

We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.

+

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.

+

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

+

Contact Us

+

If you have any questions about this Privacy Policy, You can contact us:

+