diff --git a/base_machine_repair_management/README.rst b/base_machine_repair_management/README.rst new file mode 100755 index 000000000..9947eb3ab --- /dev/null +++ b/base_machine_repair_management/README.rst @@ -0,0 +1,47 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Base Machine Repair Management +============================== +* Machine Repair Management system is an application which is used to maintain the repairs of machine. It is also allow users to take machine requests through website and these requests are created in the backend .Also we can manage the job order,machine diagnosis and maintained the team. + +Configuration +============= +* No additional configurations needed + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developers: (V17) Dhanya B ,(V18) Rosmy John, Afra MP ,Contacts: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if +your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/base_machine_repair_management/__init__.py b/base_machine_repair_management/__init__.py new file mode 100644 index 000000000..a0a4f82d4 --- /dev/null +++ b/base_machine_repair_management/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import controllers +from . import models +from . import report +from . import wizard diff --git a/base_machine_repair_management/__manifest__.py b/base_machine_repair_management/__manifest__.py new file mode 100644 index 000000000..9611d95b2 --- /dev/null +++ b/base_machine_repair_management/__manifest__.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Machine Repair Management', + 'version': '18.0.1.0.0', + 'category': 'Sales,Website ,Human Resources ,Project', + 'summary': """Machine Repair Management System Is An Application Which Is + Used To Maintain The Machine Repairs.""", + 'description': """Machine Repair Management system is an application which is + used to maintain the repairs of machine. It is also allow users to take + machine requests through website and these requests are created in the + backend .Also we can manage the job order,machine diagnosis and maintained + the team.""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['website', 'hr', 'project', 'sale', 'contacts'], + 'data': [ + 'security/base_machine_repair_management_groups.xml', + 'security/ir.model.access.csv', + 'data/ir_sequence_data.xml', + 'data/mail_data.xml', + 'report/repair_report_templates.xml', + 'report/machine_repair_report.xml', + 'views/customer_portal_templates.xml', + 'views/customer_review_templates.xml', + 'views/machine_diagnosis_views.xml', + 'views/machine_repair_views.xml', + 'views/machine_service_type_views.xml', + 'views/machine_service_views.xml', + 'views/machine_workorder_views.xml', + 'views/product_product_views.xml', + 'views/repair_team_views.xml', + 'views/res_partner_views.xml', + 'views/sale_order_views.xml', + 'views/website_repair_templates.xml', + 'wizard/repair_report_views.xml', + 'views/base_machine_repair_management_menus.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'LGPL-3', + 'installable': True, + 'auto_install': False, + 'application': True, +} diff --git a/base_machine_repair_management/controllers/__init__.py b/base_machine_repair_management/controllers/__init__.py new file mode 100644 index 000000000..2e2ad0c5a --- /dev/null +++ b/base_machine_repair_management/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import base_machine_repair_management +from . import portal diff --git a/base_machine_repair_management/controllers/base_machine_repair_management.py b/base_machine_repair_management/controllers/base_machine_repair_management.py new file mode 100644 index 000000000..b9fa94998 --- /dev/null +++ b/base_machine_repair_management/controllers/base_machine_repair_management.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import http +from odoo.http import request + + +class RepairRequest(http.Controller): + """This is used for manage the repair requests""" + + @http.route(['/repair'], type='http', auth="public", website=True) + def get_request(self): + """function to get the repair request form""" + vals = ({ + 'machine': request.env['product.product'].sudo().search( + [('is_machine', '=', True)]), + 'service_id': request.env['machine.service'].sudo().search([]), + 'customer_id': request.env['res.partner'].search([]),}) + return request.render( + "base_machine_repair_management.repair_request_form", vals) + + @http.route('/create/repair_request', type='http', methods=['POST'], + auth="public", website=True, csrf=False) + def submit_form_request(self, **POST): + """function to redirect the submitted response page""" + if POST.get('customer_id') not in request.env['res.partner'].sudo().search([]).ids: + customer = request.env['res.partner'].sudo().create({ + 'name': POST.get('customer_id'), + 'email': POST.get('email'), + 'phone': POST.get('phone') + }) + POST.update({'customer_id': customer.id, 'name': 'Repair from Website'}) + if POST: + request.env['machine.repair'].sudo().create(POST) + return request.redirect('/contactus-thank-you') + return None + + @http.route(['/review'], type='http', auth="public", website=True) + def get_customer_review(self): + """function to redirect the review form""" + comments = ({ + 'customer_rating': request.env['machine.repair'].sudo().search( + [('customer_id', '!=', False), ('customer_rating', '!=', False), + ('customer_comments', '!=', False)]) + }) + return request.render( + "base_machine_repair_management.repair_review_form", comments) + + @http.route('/create/repair_reviews', methods=['POST'], type='http', + auth="public", website=True, csrf=False) + def submit_form(self, **POST): + """This is used to submit the user reviews""" + if POST: + vals = request.env['machine.repair'].sudo().search( + [('customer_id.name', '=', request.env.user.name)], limit=1) + if POST.get('good') == 'on': + vals.write({ + 'customer_rating': 'Good', + 'customer_comments': POST['repair_review_comment'] + }) + elif POST.get('poor') == 'on': + vals.write({ + 'customer_rating': 'Poor', + 'customer_comments': POST['repair_review_comment'] + }) + elif POST.get('average') == 'on': + vals.write({ + 'customer_rating': 'Average', + 'customer_comments': POST['repair_review_comment'] + }) + elif POST.get('excellent') == 'on': + vals.sudo().write({ + 'customer_rating': 'Excellent', + 'customer_comments': POST['repair_review_comment'] + }) + return request.redirect('/contactus-thank-you') + return None diff --git a/base_machine_repair_management/controllers/portal.py b/base_machine_repair_management/controllers/portal.py new file mode 100644 index 000000000..638424c76 --- /dev/null +++ b/base_machine_repair_management/controllers/portal.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import _, http +from odoo.exceptions import AccessError, MissingError +from odoo.http import request +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.addons.portal.controllers.portal import pager as portal_pager + + +class PortalRepair(CustomerPortal): + """Portal for customers""" + + def _prepare_home_portal_values(self, counters): + """This is used to prepare the portal values""" + values = super()._prepare_home_portal_values(counters) + if 'repair_count' in counters: + repair_count = request.env['machine.repair'].search_count( + self._get_repair_domain()) + values['repair_count'] = repair_count + return values + + def _repair_get_page_view_values(self, repair, access_token, **kwargs): + """This is used to view the repair page""" + values = {'page_name': 'repair', 'repair': repair} + return self._get_page_view_values(repair, access_token, values, + 'my_repair_history', False, **kwargs) + + def _get_repair_domain(self): + """This used add the domain for the page view""" + return [('customer_id', '=', request.env.user.partner_id.id)] + + @http.route(['/my/repair', '/my/repair/page/'], type='http', + auth="user", website=True) + def portal_my_repair(self, page=1, date_begin=None, date_end=None, + sort=None): + """This is used to view the all repairs""" + values = self._prepare_portal_layout_values() + machine_repair = request.env['machine.repair'].search([]) + domain = self._get_repair_domain() + searchbar_sorting = { + 'state': {'label': _('Status'), 'repair': 'state'}, + } + if not sort: + sort = 'state' + repair_count = machine_repair.search_count(domain) + pager = portal_pager(url="/my/repair", + url_args={'date_begin': date_begin, 'date_end': date_end, 'sort': sort}, + total=repair_count, + page=page, + step=self._items_per_page) + repair = machine_repair.search(domain, + limit=self._items_per_page, + offset=pager['offset']) + request.session['my_repair_history'] = repair.ids[:100] + values.update({ + 'date': date_begin, + 'machine_repair': repair_count, + 'repair': repair, + 'page_name': 'repair', + 'pager': pager, + 'default_url': '/my/repair', + 'searchbar_sorting': searchbar_sorting, + 'sort': sort, + + }) + return request.render( + "base_machine_repair_management.portal_my_repair_request", values) + + @http.route(['/my/repair/'], type='http', auth="public", + website=True) + def portal_my_repair_detail(self, repair_id, access_token=None, **kw): + """This is used to view a specified view of a repair""" + try: + repair_sudo = self._document_check_access('machine.repair', repair_id, access_token) + except (AccessError, MissingError): + return request.redirect('/my') + values = self._repair_get_page_view_values(repair_sudo, access_token,**kw) + return request.render("base_machine_repair_management.portal_repair_page", values) diff --git a/base_machine_repair_management/data/ir_sequence_data.xml b/base_machine_repair_management/data/ir_sequence_data.xml new file mode 100644 index 000000000..b22619989 --- /dev/null +++ b/base_machine_repair_management/data/ir_sequence_data.xml @@ -0,0 +1,23 @@ + + + + + + Repair Sequence + machine.diagnosis + DGS/ + 3 + 1 + 1 + + + + Repair Sequence + machine.repair + MRP/ + 3 + 1 + 1 + + + diff --git a/base_machine_repair_management/data/mail_data.xml b/base_machine_repair_management/data/mail_data.xml new file mode 100644 index 000000000..d7dd29cde --- /dev/null +++ b/base_machine_repair_management/data/mail_data.xml @@ -0,0 +1,31 @@ + + + + + + Repair Request Closed: Send by email + + {{ (object.technician_id.work_email or object.company_id.email_formatted or user.email_formatted) }} + {{object.customer_id.email}} + Machine Repair Request Closing (Ref{{object.repair_seq}}) + + +
+

+ Hi , +
+
+ Here is your repair request with reference + + is closed on + +
+
+ Do not hesitate to contact us if you have any questions. +

+
+
+
+
+
diff --git a/base_machine_repair_management/doc/RELEASE_NOTES.md b/base_machine_repair_management/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..fbba9f2b9 --- /dev/null +++ b/base_machine_repair_management/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 16.12.2025 +#### Version 18.0.1.0.0 +#### ADD +- Initial commit for Base Machine Repair Management diff --git a/base_machine_repair_management/models/__init__.py b/base_machine_repair_management/models/__init__.py new file mode 100644 index 000000000..4af23f33c --- /dev/null +++ b/base_machine_repair_management/models/__init__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import machine_consume +from . import machine_diagnosis +from . import machine_repair +from . import machine_service +from . import machine_service_type +from . import machine_workorder +from . import product_product +from . import repair_team +from . import repair_timesheet +from . import res_partner +from . import sale_order +from . import team_member diff --git a/base_machine_repair_management/models/machine_consume.py b/base_machine_repair_management/models/machine_consume.py new file mode 100644 index 000000000..6378563e2 --- /dev/null +++ b/base_machine_repair_management/models/machine_consume.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class MachineConsume(models.Model): + """This is the class for machine consume""" + _name = 'machine.consume' + _description = "Machine Consume" + _rec_name = "consume_id" + + consume_id = fields.Many2one('machine.repair', string="Consumer", + help="Reference to the machine repair record associated with this consumption.") + machine_id = fields.Many2one('product.product', string='Machine', + domain=[('is_machine', '=', True)], + help="Select the machine being consumed. Only products marked as machines are available.") + qty = fields.Float(string='Quantity', + help="The amount of the selected machine consumed in the repair or diagnosis process.") + uom = fields.Many2one('uom.uom', string="UoM", + help="Unit of Measure for the quantity consumed.") + dia_estimate_id = fields.Many2one('machine.diagnosis', + string="Machine Diagnosis", + help="Reference to the machine diagnosis record related to this consumption.") + hour = fields.Float(string='Duration', + help="The number of hours the machine was used during the repair or diagnosis.") diff --git a/base_machine_repair_management/models/machine_diagnosis.py b/base_machine_repair_management/models/machine_diagnosis.py new file mode 100644 index 000000000..18d29cf5e --- /dev/null +++ b/base_machine_repair_management/models/machine_diagnosis.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class MachineDiagnosis(models.Model): + """The class is used for the machine diagnosis""" + _name = 'machine.diagnosis' + _description = "Machine Diagnosis" + _rec_name = 'diagnosis_seq' + + project_id = fields.Many2one('project.project', string='Project', + help="The project associated with this machine diagnosis or repair.") + customer_id = fields.Many2one('res.partner', string="Customer", + help="The customer for whom this project is being carried out.", + required=True) + deadline = fields.Date(string='Deadline', + help="The final due date for completing the project.", + required=True) + diagnosis_seq = fields.Char(string='Diagnosis Sequence', copy=False, + help="Unique sequence number assigned to each diagnosis record.", + readonly=True, index=True, + default=lambda self: 'New') + note = fields.Html(string="Note", + help="Additional details or comments regarding the project.") + notes = fields.Html(string="Notes", + help="General notes related to the project.") + part_ids = fields.One2many('machine.consume', 'dia_estimate_id', + string="Parts", + help="List of machine parts consumed during the repair or diagnosis process.") + timesheet_ids = fields.One2many('repair.timesheet', 'diagnosis_id', + string="Timesheet", + help="Timesheet entries that log the time spent on machine repairs.") + seq = fields.Char(string='Sequence', + help="Unique identifier for this record.") + assigning_date = fields.Date(string="Assigning Date", + help="The date on which the project or diagnosis was assigned.") + machine_repair_ref_id = fields.Many2one('machine.repair', + string="Reference", + help="Reference to the related machine repair record.") + + @api.model_create_multi + def create(self, vals_list): + """Sequence generator""" + for vals in vals_list: + if vals.get('diagnosis_seq', 'New') == 'New': + vals['diagnosis_seq'] = self.env['ir.sequence'].next_by_code( + 'machine.diagnosis') or 'New' + result = super().create(vals_list) + return result + + def action_create_quotation(self): + """Function to create quotation from machine diagnosis""" + quotation = self.env['sale.order'].create({ + 'partner_id': self.customer_id.id, + 'date_order': self.deadline, + 'machine_diagnosis_ref': self.diagnosis_seq, + }) + quotation.order_line = [(5, 0, 0)] + for rec in self.part_ids: + vals = { + 'product_id': rec.machine_id.id, + 'name': rec.machine_id.default_code if rec.machine_id.default_code else '', + 'product_uom_qty': rec.qty, + 'price_unit': rec.machine_id.list_price, + } + quotation.order_line = [(0, 0, vals)] + return { + 'res_model': 'sale.order', + 'type': 'ir.actions.act_window', + 'res_id': quotation.id, + 'view_mode': 'form', + 'target': 'current', + 'context': "{'create': False ,}" + } diff --git a/base_machine_repair_management/models/machine_repair.py b/base_machine_repair_management/models/machine_repair.py new file mode 100644 index 000000000..06527172c --- /dev/null +++ b/base_machine_repair_management/models/machine_repair.py @@ -0,0 +1,251 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class MachineRepair(models.Model): + """This is used for the machine repair management""" + _name = 'machine.repair' + _description = "Machine Repair" + _rec_name = "repair_seq" + + name = fields.Char(string='Name', help="Name of the repair request.", + required=True) + repair_seq = fields.Char(string='Repair Sequence', copy=False, + help="Unique sequence number assigned to each repair request.", + readonly=True, index=True, + default=lambda self: 'New') + customer_id = fields.Many2one('res.partner', string="Customer", + help="The customer who requested the repair.", + required=True) + customer_email = fields.Char(string='Customer E-mail', + related="customer_id.email", + help="Email address of the customer.") + phone = fields.Char(string='Phone', related="customer_id.phone", + help="Phone number of the customer.") + repairing_reason = fields.Char(string='Repairing Reason', + help="The reason why the repair is needed.") + machine_brand = fields.Char(string='Machine Brand', + help="The brand of the machine being repaired.") + machine_model = fields.Char(string="Model", + help="The specific model of the machine.") + manufacturing_year = fields.Date(string='Manufacturing Year', + help="The year in which the machine was manufactured.") + priority = fields.Selection( + [('high', 'High'), ('normal', 'Normal'),('low', 'Low')], + string="Priority", help="Priority level of the repair request.", + required=True) + repair_detail = fields.Text(string='Repair Reason In Detail', + help="Detailed description of the repair issue.", + required=True) + technician_id = fields.Many2one('hr.employee', string="Technician", + help="The technician assigned to perform the repair.") + technician_member_ids = fields.Many2many('hr.employee', + string="Technical Members", + help="Additional technical members assisting in the repair.") + email = fields.Char('Email', related='technician_id.work_email', + help="Email address of the assigned technician.") + company_id = fields.Many2one('res.company', string="Company", + help="The company responsible for the repair.", + default=lambda self: self.env.company) + project_id = fields.Many2one('project.project', string="Project", + help="Project associated with this repair request.") + department_id = fields.Many2one('hr.department', string="Department", + help="The department responsible for handling the repair.") + repair_req_date = fields.Date(string='Repair Date', + help="The date on which the repair was requested.") + closing_date = fields.Date(string='Closing Date', required=True, + help="The date when the repair was completed and closed.") + repairing_duration = fields.Float(string="Repairing Duration", + help="Total time taken for the repair process (in hours).") + is_repaired = fields.Boolean(string='Is Repaired', + help="Indicates whether the repair request has been successfully completed.") + machine_id = fields.Many2one('product.product', string="Machine", + help="The machine that needs to be repaired.", + domain=[('is_machine', '=', True)]) + machine_categ_id = fields.Many2one('product.category', + string='Machine Category', + help="The category to which the machine belongs.") + color = fields.Char(string='Color', help="The color of the machine.") + damage = fields.Char(string='Damage', + help="Description of the damage on the machine.") + warranty = fields.Boolean(string='Warranty', + help="Indicates whether the machine is under warranty.") + Warranty_exp_date = fields.Date(string="Warranty Expiration Date", + help="The date when the machine's warranty expires.") + authority_name = fields.Char(string='Authority Name', + help="Name of the authority responsible for approving the repair.") + service_id = fields.Many2one('machine.service', string="Service", + help="The type of service required for the machine.") + customer_rating = fields.Char(string='Customer Rating', + help="Customer's rating for the repair service.") + customer_comments = fields.Char(string='Customer Comments', + help="Additional feedback or comments provided by the customer.") + extra_info = fields.Html(string="Information", + help="Additional details or documentation related to the repair.") + repair_team_id = fields.Many2one('repair.team', string="Repair Team", + help="The team assigned to carry out the repair.") + nature_of_service_id = fields.Many2one('machine.service', + string="Nature of Service", + help="Defines the type of service the machine requires.") + repair_type_id = fields.Many2many('machine.service.type', + string="Repair Types", + help="Different types of repairs applicable to this machine.") + problem = fields.Char(string='Problem', + help="A brief description of the issue faced by the machine.") + note = fields.Html(string='Note', + help="Additional notes regarding the repair process.") + state = fields.Selection(string='Status', required=True, readonly=True, + copy=False, selection=[('new', 'New'), + ('assigned', 'Assigned'), + ('closed', 'Closed'), + ('send', 'Mail Sent'), + ('reopen', 'Reopened'), ], + default='new', + help="Current status of the repair request.") + image1 = fields.Binary(string='Image 1', + help="First image of the machine before or after repair.") + image2 = fields.Binary(string='Image 2', + help="Second image of the machine before or after repair.") + image3 = fields.Binary(string='Image 3', + help="Third image of the machine before or after repair.") + image4 = fields.Binary(string='Image 4', + help="Fourth image of the machine before or after repair.") + image5 = fields.Binary(string='Image 5', + help="Fifth image of the machine before or after repair.") + timesheet_ids = fields.One2many('repair.timesheet', 'inverse_id', + string="Timesheet", + help="Records the working hours spent on this repair.") + consume_part_ids = fields.One2many('machine.consume', 'consume_id', + string="Consumer Parts", + help="List of machine parts consumed during the repair.") + is_team_assigned = fields.Boolean(string='Is Team Assigned', + help="Indicates whether a repair team has been assigned to this repair request.") + diagnosis_ids = fields.One2many('machine.diagnosis','machine_repair_ref_id', + help="List of diagnosis records related to this machine repair.") + workorder_ids = fields.One2many('machine.workorder','repair_id', + help="List of workorder records related to this machine repair.") + + @api.constrains('repair_req_date', 'closing_date') + def _check_date_order(self): + """Ensures that 'closing_date' is later than 'repair_req_date'. + Raises:ValidationError: If 'closing_date' is less than to 'repair_req_date'.""" + for record in self: + if record.repair_req_date and record.closing_date and record.closing_date < record.repair_req_date: + raise ValidationError( _("Close Date must be greater than Repair Date.")) + + @api.model_create_multi + def create(self, vals_list): + """Sequence generator""" + for vals in vals_list: + if vals.get('repair_seq', 'New') == 'New' or vals.get('repair_seq','') == '': + vals['repair_seq'] = self.env['ir.sequence'].next_by_code('machine.repair') or 'New' + result = super().create(vals_list) + return result + + @api.onchange('repair_team_id') + def onchange_repair_team(self): + val = self.env['repair.team'].search( + [('id', '=', self.repair_team_id.id)]).mapped('member_ids').mapped('member_id').ids + self.technician_member_ids = val + + def action_create_diagnosis(self): + """This is used to create the diagnosis""" + diagnosis = self.env['machine.diagnosis'].create({ + 'machine_repair_ref_id': self.id, + 'project_id': self.project_id.id, + 'customer_id': self.customer_id.id, + 'deadline': self.closing_date, + }) + return {'res_model': 'machine.diagnosis', + 'type': 'ir.actions.act_window', + 'res_id': diagnosis.id, + 'view_mode': 'form', + 'target': 'current', + 'context': "{'create': False ,}"} + + def action_create_work_order(self): + """Creating job order from repair request""" + self.env['machine.workorder'].create({ + 'repair_id': self.id, + 'customer_id': self.customer_id.id, + 'date': self.repair_req_date, + 'priority': self.priority, + }) + return {'res_model': 'machine.workorder', + 'type': 'ir.actions.act_window', + 'res_id': self.id, + 'view_mode': 'form', + 'target': 'current', + 'context': "{'create': False ,}"} + + def action_reopen(self): + """Reopen the repair""" + self.state = 'reopen' + + def action_close_repairing(self): + """Repair closed""" + self.state = 'closed' + + def action_assign_teams(self): + """Assigning repair to teams""" + if self.repair_team_id: + val = self.env['repair.team'].browse(self.repair_team_id.id) + val.write({'repair_work_ids': [(4, self.id)],}) + self.is_team_assigned = True + self.state = 'assigned' + else: + self.state = 'new' + raise ValidationError("There Is No Repair Team Is Specified") + + def action_send_email(self): + """Sending mails to customers by informing closing the repair request""" + template_id = self.env.ref('base_machine_repair_management.repair_request_close_email_template').id + self.env['mail.template'].browse(template_id).send_mail(self.id, force_send=True) + self.state = "send" + + def get_machine_diagnosis(self): + """Opens a window action displaying all diagnosis records related to + the current machine repair.""" + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Machine Diagnosis', + 'view_mode': 'list,form', + 'res_model': 'machine.diagnosis', + 'domain': [('machine_repair_ref_id', '=', self.id)], + 'context': "{'create': False}" + } + + def get_machine_workorder(self): + """Opens a window action displaying all work order records related to + the current machine repair.""" + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Machine workorder', + 'view_mode': 'list,form', + 'res_model': 'machine.workorder', + 'domain': [('repair_id', '=', self.id)], + 'context': "{'create': False}" + } diff --git a/base_machine_repair_management/models/machine_service.py b/base_machine_repair_management/models/machine_service.py new file mode 100644 index 000000000..1c627c96a --- /dev/null +++ b/base_machine_repair_management/models/machine_service.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class MachineService(models.Model): + """This model stores information about machine services.""" + _name = 'machine.service' + _description = 'Machine Service' + + name = fields.Char(string='Name', help="The name of the machine service.", + required=True) + service_type = fields.Many2one('machine.service.type', + string="Machine Service Type", + help="The type of machine service associated with this service.") diff --git a/base_machine_repair_management/models/machine_service_type.py b/base_machine_repair_management/models/machine_service_type.py new file mode 100644 index 000000000..e98639889 --- /dev/null +++ b/base_machine_repair_management/models/machine_service_type.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class MachineServiceType(models.Model): + """This class is used for the service type for the machine""" + _name = 'machine.service.type' + _description = "Machine Service Type" + _rec_name = "service_type_name" + + service_type_name = fields.Char(string='Name', + help="Name of the service type", + required=True) + code = fields.Char(string='Code', help="Code for the service type") diff --git a/base_machine_repair_management/models/machine_workorder.py b/base_machine_repair_management/models/machine_workorder.py new file mode 100644 index 000000000..214be3bb2 --- /dev/null +++ b/base_machine_repair_management/models/machine_workorder.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +################################################################################ +from odoo import fields, models + + +class MachineWorkOrder(models.Model): + """This model is used to manage machine work orders.""" + _name = 'machine.workorder' + _description = "Machine Work Order" + _rec_name = "work_order_id" + + work_order_id = fields.Many2one('machine.service', string="Work Order", + help="The service associated with this work order.") + customer_id = fields.Many2one('res.partner', string="Customer", + help="The customer requesting the work order.") + date = fields.Date(string="Date", help="The date when the work order is created.") + priority = fields.Selection([('high', 'High'), ('normal', 'Normal'),('low', 'Low')], + string="Priority", + help="The priority level of the work order.") + scheduled_date = fields.Date(string='Scheduled Date', + help="The scheduled start date for the work order.") + planned_end_date = fields.Date(string='Planned End Date', + help="The planned completion date of the work order.") + duration = fields.Float(string='Duration', + help="The estimated duration of the work order in hours.") + start_date = fields.Date(string='Start Date', + help="The actual start date of the work order.") + end_date = fields.Date(string='End Date', + help="The actual end date of the work order.") + hours_worked = fields.Float(string="Hours Spent", + help="The total number of hours worked on this order.") + repair_id = fields.Many2one('machine.repair', string="Repair", + help="Reference to the related machine repair record.") diff --git a/base_machine_repair_management/models/product_product.py b/base_machine_repair_management/models/product_product.py new file mode 100644 index 000000000..016b53ccb --- /dev/null +++ b/base_machine_repair_management/models/product_product.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class Product(models.Model): + _inherit = 'product.product' + + is_machine = fields.Boolean(string="Is Machine", default=False, + help="which is used to identify the machines.") + is_machine_parts = fields.Boolean(string="Is Machine Part", default=False, + help="which is used to identify the machine parts.") diff --git a/base_machine_repair_management/models/repair_team.py b/base_machine_repair_management/models/repair_team.py new file mode 100644 index 000000000..64eb16309 --- /dev/null +++ b/base_machine_repair_management/models/repair_team.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class RepairTeam(models.Model): + """This model is used to define repair teams responsible for handling machine repairs.""" + _name = 'repair.team' + _description = 'Repair Team' + _rec_name = "team_name" + + team_name = fields.Char(string='Name', + help="The name of the repair team.", required=True) + team_lead_id = fields.Many2one('hr.employee', string="Team Lead", + help="The leader of the repair team.", + required=True) + repair_work_ids = fields.Many2many('machine.repair', string='Repair Reference', + readonly=True, + help="References to machine repairs assigned to the team.") + member_ids = fields.One2many('team.member', 'inverse_id', + string="Members", copy=False, + help="Members assigned to the repair team.") diff --git a/base_machine_repair_management/models/repair_timesheet.py b/base_machine_repair_management/models/repair_timesheet.py new file mode 100644 index 000000000..ef1042819 --- /dev/null +++ b/base_machine_repair_management/models/repair_timesheet.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class RepairTimesheet(models.Model): + """This model is used to track timesheets for repair management.""" + _name = 'repair.timesheet' + _description = "Repair Timesheet" + _rec_name = 'user_id' + + inverse_id = fields.Many2one('machine.repair', string="Machine Repair", + help="Reference to the related machine repair.") + date = fields.Date(string='Date', help="Date of timesheet entry.") + user_id = fields.Many2one('res.users', string="User", + help="User associated with this timesheet.") + project_id = fields.Many2one('project.project', string="Project", + help="Project linked to this timesheet.") + description = fields.Char(string='Description', + help="Details of the work done.") + hours = fields.Float(string='Duration', help="Total hours worked.") + diagnosis_id = fields.Many2one('machine.diagnosis', string="Diagnosis", + help="Related machine diagnosis.") diff --git a/base_machine_repair_management/models/res_partner.py b/base_machine_repair_management/models/res_partner.py new file mode 100644 index 000000000..2d6056d1c --- /dev/null +++ b/base_machine_repair_management/models/res_partner.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models + + +class ResPartner(models.Model): + """This is used to return the partner's repair requests""" + _inherit = 'res.partner' + + def action_repair_requests(self): + """It returns the repair requests for the customers""" + return { + 'type': 'ir.actions.act_window', + 'name': 'Machine Repair Requests', + 'view_mode': 'tree', + 'res_model': 'machine.repair', + 'domain': [('customer_id', '=', self.id)], + 'context': "{'create': False}" + } diff --git a/base_machine_repair_management/models/sale_order.py b/base_machine_repair_management/models/sale_order.py new file mode 100644 index 000000000..9184f19a0 --- /dev/null +++ b/base_machine_repair_management/models/sale_order.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class SaleOrder(models.Model): + """Inheriting Sale order to add a new field""" + _inherit = 'sale.order' + + machine_diagnosis_ref = fields.Char( + string='Diagnosis Reference', + help="Unique reference identifier for the machine diagnosis." + ) diff --git a/base_machine_repair_management/models/team_member.py b/base_machine_repair_management/models/team_member.py new file mode 100644 index 000000000..95a0b4f9b --- /dev/null +++ b/base_machine_repair_management/models/team_member.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class TeamMember(models.Model): + """This is used for the team members of repair team""" + _name = 'team.member' + _description = 'Team Member' + _rec_name = 'member_id' + + @api.onchange('member_id','inverse_id') + def _onchange_member_id(self): + """ On change of 'member_id' or 'inverse_id', links all member_ids from records + with the same inverse_id to the current record.""" + for rec in self: + if rec.inverse_id.ids: + member_ids = self.search([('inverse_id','=',rec.inverse_id.ids[0])]).member_id + else: + member_ids = [] + for member_id in member_ids: + rec.member_ids = [fields.Command.link(member_id.id)] + + inverse_id = fields.Many2one('repair.team', string="Repair Team", + help="The repair team associated with this member.") + member_id = fields.Many2one('hr.employee', string="Member", + help="The employee who is a member of the repair team.", + domain="[('id', 'not in', member_ids)]", + required=True) + member_ids = fields.Many2many('hr.employee',help="To store values for member_id") + login = fields.Char(related='member_id.work_email', string="Login", + help="The work email used as the login credential for the repair team member.") diff --git a/base_machine_repair_management/report/__init__.py b/base_machine_repair_management/report/__init__.py new file mode 100644 index 000000000..b1d39434e --- /dev/null +++ b/base_machine_repair_management/report/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import machine_repair_report diff --git a/base_machine_repair_management/report/machine_repair_report.py b/base_machine_repair_management/report/machine_repair_report.py new file mode 100644 index 000000000..28ebd0331 --- /dev/null +++ b/base_machine_repair_management/report/machine_repair_report.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Afra MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class MachineRepairReport(models.AbstractModel): + """This is used to return the report data""" + _name = 'report.base_machine_repair_management.machine_repair_report' + _description = 'Report for machine repair management' + + def _get_report_values(self, docids, data=None): + """This function is used to get the report data""" + data = data or {} + domain = [] + + if data.get('from_date') and data.get('to_date'): + domain.append(('repair_req_date', '>=', data['from_date'])) + domain.append(('repair_req_date', '<=', data['to_date'])) + elif data.get('from_date') and not data.get('to_date'): + domain.append(('repair_req_date', '>=', data['from_date'])) + elif data.get('to_date') and not data.get('from_date'): + domain.append(('repair_req_date', '<=', data['to_date'])) + + if data.get('company_id'): + domain.append(('company_id', '=', data['company_id'])) + if docids: + repairs = self.env['machine.repair'].browse(docids) + else: + repairs = self.env['machine.repair'].search(domain) + + return { + 'date': fields.Date.today(), + 'doc_ids': repairs.ids, + 'doc_model': 'machine.repair', + 'repair_requests': repairs, + 'company': self.env.company, + 'data': data, + } \ No newline at end of file diff --git a/base_machine_repair_management/report/machine_repair_report.xml b/base_machine_repair_management/report/machine_repair_report.xml new file mode 100644 index 000000000..0ed3e71a3 --- /dev/null +++ b/base_machine_repair_management/report/machine_repair_report.xml @@ -0,0 +1,16 @@ + + + + + Machine Repair Report + machine.repair + qweb-pdf + base_machine_repair_management.machine_repair_report + base_machine_repair_management.machine_repair_report + 'Machine Repair Report - %s' % (object.name) + + + report + True + + diff --git a/base_machine_repair_management/report/repair_report_templates.xml b/base_machine_repair_management/report/repair_report_templates.xml new file mode 100644 index 000000000..22f464455 --- /dev/null +++ b/base_machine_repair_management/report/repair_report_templates.xml @@ -0,0 +1,173 @@ + + + + + diff --git a/base_machine_repair_management/security/base_machine_repair_management_groups.xml b/base_machine_repair_management/security/base_machine_repair_management_groups.xml new file mode 100644 index 000000000..204925adb --- /dev/null +++ b/base_machine_repair_management/security/base_machine_repair_management_groups.xml @@ -0,0 +1,23 @@ + + + + + Machine Repair + Access to Machine Repair Features + 10 + + + + + Sales Persons + + + + + + Repair Manager + + + + + diff --git a/base_machine_repair_management/security/ir.model.access.csv b/base_machine_repair_management/security/ir.model.access.csv new file mode 100644 index 000000000..916366538 --- /dev/null +++ b/base_machine_repair_management/security/ir.model.access.csv @@ -0,0 +1,21 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access.access_machine_repair_manager,access.machine.repair.manager,model_machine_repair,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_repair_team_manager,access.repair.team.manager,model_repair_team,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_team_member_manager,access.team.member,model_team_member,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_service_manager,access.machine.service.manager,model_machine_service,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_service_type_manager,access.machine.service.type.manager,model_machine_service_type,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_repair_timesheet_manager,access.repair.timesheet.manager,model_repair_timesheet,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_consume_manager,access.machine.consume.manager,model_machine_consume,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_diagnosis_manager,access.machine.diagnosis.manager,model_machine_diagnosis,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_workorder_manager,access.machine.workorder.manager,model_machine_workorder,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_repair_report_wizard_manager,access.repair.report.wizards.manager,model_repair_report,base_machine_repair_management.repair_manager_access,1,1,1,1 +access.access_machine_repair_user,access.machine.repair.user,model_machine_repair,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_repair_team_user,access.repair.team.user,model_repair_team,base_machine_repair_management.repair_user_access,1,0,0,0 +access.access_team_member_user,access.team.member,model_team_member,base_machine_repair_management.repair_user_access,1,0,0,0 +access.access_machine_service_user,access.machine.service.user,model_machine_service,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_machine_service_type_user,access.machine.service.type.user,model_machine_service_type,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_repair_timesheet_user,access.repair.timesheet.user,model_repair_timesheet,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_machine_consume_user,access.machine.consume.user,model_machine_consume,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_machine_diagnosis_user,access.machine.diagnosis.user,model_machine_diagnosis,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_machine_workorder_user,access.machine.workorder.user,model_machine_workorder,base_machine_repair_management.repair_user_access,1,1,1,1 +access.access_repair_report_wizard_user,access.repair.report.wizards.user,model_repair_report,base_machine_repair_management.repair_user_access,1,1,1,1 \ No newline at end of file diff --git a/base_machine_repair_management/static/description/assets/icons/arrows-repeat.svg b/base_machine_repair_management/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-1.png b/base_machine_repair_management/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/banner-1.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/banner-2.svg b/base_machine_repair_management/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-bg.png b/base_machine_repair_management/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/banner-bg.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/banner-bg.svg b/base_machine_repair_management/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-call.svg b/base_machine_repair_management/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-mail.svg b/base_machine_repair_management/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-pattern.svg b/base_machine_repair_management/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/banner-promo.svg b/base_machine_repair_management/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/brand-pair.svg b/base_machine_repair_management/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/check.png b/base_machine_repair_management/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/check.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/chevron.png b/base_machine_repair_management/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/chevron.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/close-icon.svg b/base_machine_repair_management/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/cogs.png b/base_machine_repair_management/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/cogs.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/collabarate-icon.svg b/base_machine_repair_management/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/base_machine_repair_management/static/description/assets/icons/consultation.png b/base_machine_repair_management/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/consultation.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/cybro-logo.png b/base_machine_repair_management/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/cybro-logo.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/down.svg b/base_machine_repair_management/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/base_machine_repair_management/static/description/assets/icons/ecom-black.png b/base_machine_repair_management/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/ecom-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/education-black.png b/base_machine_repair_management/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/education-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/faq.png b/base_machine_repair_management/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/faq.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/feature-icon.svg b/base_machine_repair_management/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/feature.png b/base_machine_repair_management/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/feature.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/gear.svg b/base_machine_repair_management/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/hire-odoo.svg b/base_machine_repair_management/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/hotel-black.png b/base_machine_repair_management/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/hotel-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/license.png b/base_machine_repair_management/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/license.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/life-ring-icon.svg b/base_machine_repair_management/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/lifebuoy.png b/base_machine_repair_management/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/lifebuoy.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/mail.svg b/base_machine_repair_management/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/base_machine_repair_management/static/description/assets/icons/manufacturing-black.png b/base_machine_repair_management/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/manufacturing-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/notes.png b/base_machine_repair_management/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/notes.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/notification icon.svg b/base_machine_repair_management/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/odoo-consultancy.svg b/base_machine_repair_management/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/odoo-licencing.svg b/base_machine_repair_management/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/base_machine_repair_management/static/description/assets/icons/odoo-logo.png b/base_machine_repair_management/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/odoo-logo.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/patter.svg b/base_machine_repair_management/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/pattern1.png b/base_machine_repair_management/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/pattern1.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/pos-black.png b/base_machine_repair_management/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/pos-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/puzzle-piece-icon.svg b/base_machine_repair_management/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/puzzle.png b/base_machine_repair_management/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/puzzle.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/replace-icon.svg b/base_machine_repair_management/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/restaurant-black.png b/base_machine_repair_management/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/restaurant-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/screenshot-main.png b/base_machine_repair_management/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/screenshot-main.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/screenshot.png b/base_machine_repair_management/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/screenshot.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/service-black.png b/base_machine_repair_management/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/service-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/skype-fill.svg b/base_machine_repair_management/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/skype.png b/base_machine_repair_management/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/skype.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/skype.svg b/base_machine_repair_management/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/base_machine_repair_management/static/description/assets/icons/star-1.svg b/base_machine_repair_management/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/star-2.svg b/base_machine_repair_management/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/support.png b/base_machine_repair_management/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/support.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/test-1 - Copy.png b/base_machine_repair_management/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/test-1 - Copy.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/test-1.png b/base_machine_repair_management/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/test-1.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/test-2.png b/base_machine_repair_management/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/test-2.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/trading-black.png b/base_machine_repair_management/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/trading-black.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/training.png b/base_machine_repair_management/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/training.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/translate.svg b/base_machine_repair_management/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/update.png b/base_machine_repair_management/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/update.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/user.png b/base_machine_repair_management/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/user.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/video.png b/base_machine_repair_management/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/video.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/whatsapp.png b/base_machine_repair_management/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/whatsapp.png differ diff --git a/base_machine_repair_management/static/description/assets/icons/wrench-icon.svg b/base_machine_repair_management/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/base_machine_repair_management/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/static/description/assets/icons/wrench.png b/base_machine_repair_management/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/base_machine_repair_management/static/description/assets/icons/wrench.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m1.png b/base_machine_repair_management/static/description/assets/modules/m1.png new file mode 100644 index 000000000..19319906e Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m1.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m2.png b/base_machine_repair_management/static/description/assets/modules/m2.png new file mode 100644 index 000000000..580ea075d Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m2.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m3.png b/base_machine_repair_management/static/description/assets/modules/m3.png new file mode 100644 index 000000000..a68ae5a1b Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m3.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m4.png b/base_machine_repair_management/static/description/assets/modules/m4.png new file mode 100644 index 000000000..696582fa8 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m4.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m5.png b/base_machine_repair_management/static/description/assets/modules/m5.png new file mode 100644 index 000000000..c07364a58 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m5.png differ diff --git a/base_machine_repair_management/static/description/assets/modules/m6.png b/base_machine_repair_management/static/description/assets/modules/m6.png new file mode 100644 index 000000000..cf3ef442f Binary files /dev/null and b/base_machine_repair_management/static/description/assets/modules/m6.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/1.png b/base_machine_repair_management/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..8ad97e6ad Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/1.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/10.png b/base_machine_repair_management/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..1ae4d8b09 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/10.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/11.png b/base_machine_repair_management/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..219a28999 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/11.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/12.png b/base_machine_repair_management/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..9d3c01b53 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/12.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/13.png b/base_machine_repair_management/static/description/assets/screenshots/13.png new file mode 100644 index 000000000..34fb2063a Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/13.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/14.png b/base_machine_repair_management/static/description/assets/screenshots/14.png new file mode 100644 index 000000000..612b33eda Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/14.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/15.png b/base_machine_repair_management/static/description/assets/screenshots/15.png new file mode 100644 index 000000000..febb9339b Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/15.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/16.png b/base_machine_repair_management/static/description/assets/screenshots/16.png new file mode 100644 index 000000000..8dc91b9db Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/16.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/17.png b/base_machine_repair_management/static/description/assets/screenshots/17.png new file mode 100644 index 000000000..f9f85a5b5 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/17.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/18.png b/base_machine_repair_management/static/description/assets/screenshots/18.png new file mode 100644 index 000000000..f3962ca16 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/18.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/19.png b/base_machine_repair_management/static/description/assets/screenshots/19.png new file mode 100644 index 000000000..7311475ea Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/19.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/2.png b/base_machine_repair_management/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..1124c672d Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/2.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/20.png b/base_machine_repair_management/static/description/assets/screenshots/20.png new file mode 100644 index 000000000..8e48b72b6 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/20.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/21.png b/base_machine_repair_management/static/description/assets/screenshots/21.png new file mode 100644 index 000000000..2a61f8944 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/21.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/3.png b/base_machine_repair_management/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..42d42a927 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/3.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/4.png b/base_machine_repair_management/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..006320980 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/4.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/5.png b/base_machine_repair_management/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..b252cf08e Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/5.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/6.png b/base_machine_repair_management/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..28a4de568 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/6.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/7.png b/base_machine_repair_management/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..ebe3fd879 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/7.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/8.png b/base_machine_repair_management/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..fc6aa5eb0 Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/8.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/9.png b/base_machine_repair_management/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..863c1c80b Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/9.png differ diff --git a/base_machine_repair_management/static/description/assets/screenshots/gif.gif b/base_machine_repair_management/static/description/assets/screenshots/gif.gif new file mode 100644 index 000000000..559f180bb Binary files /dev/null and b/base_machine_repair_management/static/description/assets/screenshots/gif.gif differ diff --git a/base_machine_repair_management/static/description/banner.jpg b/base_machine_repair_management/static/description/banner.jpg new file mode 100644 index 000000000..399f7e3a8 Binary files /dev/null and b/base_machine_repair_management/static/description/banner.jpg differ diff --git a/base_machine_repair_management/static/description/icon.png b/base_machine_repair_management/static/description/icon.png new file mode 100644 index 000000000..017560797 Binary files /dev/null and b/base_machine_repair_management/static/description/icon.png differ diff --git a/base_machine_repair_management/static/description/index.html b/base_machine_repair_management/static/description/index.html new file mode 100644 index 000000000..db4a78af2 --- /dev/null +++ b/base_machine_repair_management/static/description/index.html @@ -0,0 +1,1648 @@ + + + + + + Sale Approval Connector + + + + + + + + + + +
+
+ + + +
+
+
+ Community +
+
+
+
+ +
+
+
+
+

+ Machine Repair Management System Is An + Application Which Is Used To Maintain The + Machine Repairs. +

+

+ Machine Repair Management +

+
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+

Key + Highlights

+
+
+
+
+ +
+
+ Create Request from website +
+

+ Your customer can send machine repair + requests from your website. +

+
+
+
+
+
+ +
+
+ Check request status from portal. +
+

+ Customers can view and check the status of + all machine request from their portal. +

+
+
+
+
+
+ +
+
+ Management of diagnosis and create sale + quotation. +
+

+ The system allows your user to do management + of + diagnosis of machine repair requests and + allows you to create sales quotations and + send them to your customer. +

+
+
+
+
+
+ +
+
+ Machine repair team to create a job + order/work order from the Machine. +
+

+ Machine repair team to create a job + order/work order from the Machine Repair + Management system is an application which is + used to maintain the repairs of machine. It + is also allow users to take machine requests + through website and these requests are + created in the backend ,Also we can manage + the job order,machine diagnosis and + maintained the team, repair requests. +

+
+
+
+
+
+ +
+
+ Can add machine repair-related images. +
+

+ Allow you to set the machine repair-related + images on the machine repair form. +

+
+
+
+
+
+ +
+
+ PDF of machine repair request report +
+

+ User to print a PDF of machine repair + request report. +

+
+
+
+
+
+ +
+
+ Close machine repair tickets and send bills + to customers. +
+

+ The machine request manager can close + machine repair tickets and send bills to + customers (Billing from Quotation created + from Diagnosis). +

+
+
+
+
+
+ +
+
+ Customer feedback +
+

+ Customers can give feedback and rating of + machine repair request jobs done. +

+
+
+
+
+ +
+
+
+ Machine Repair Management +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Manage Access Rights By + + Specifying The User Groups. +

+
+
+

+ Different users has different + access, It can manage through + the access rights. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Create Machine + + Repair. +

+
+
+

+ User can create Machine repair + request from website by + providing the essential details. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Machine Repair + + requests. +

+
+
+

+ Corresponding Machine repair + request will create in backend + when we create request from + website. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Machine Repair + + Teams Form View. +

+
+
+

+ Creating Repairing Teams And the + Team Members. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Machine Service + Type Configuration. +

+
+
+

+ Configure service type that are + available for a machine. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Nature of Service + Configuration. +

+
+
+

+ We can create nature of service + from the form view. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Create Machine and + Machine parts products. +

+
+
+

+ We can create Machine and + Machine parts by choosing + correspond checkboxes. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Assign to + Teams. +

+
+
+

+ We can assign the Repair request + to repair team by clicking the + 'Assign to Team' button, by + selecting the corresponding + repair team.

+
+
+
+ +
+
+
+
+
+ + +
+
+
+
+

+ Close + Repair orders. +

+
+
+

+ We can close the repairing + orders by clicking the 'Close' + button. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Create + Diagnosis. +

+
+
+

+ We can create machine diagnosis + by clicking the 'Create + Diagnosis' button. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Create Quotation + for Machine Diagnosis. +

+
+
+

+ We can create sale quotation for + the customer and send by + clicking on 'Create Quotation' + button, for that we need to + select the consumed machine + parts under the 'Estimated + Repair Time'. +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Create WorkOrder for + Machine Repair. +

+
+
+

+ Can create the workOrder for + Machine repair by clicking on + 'Create Workorder' button. +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Send closed + repair mail. +

+
+
+

+ We can send closed repair mail + to the customer by clicking the + send mail button. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Generate Repair + summary report. +

+
+
+

+ We can generate Repair summary + report by clicking the Print + Report button after providing + start and end date. +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Customer + Feedback. +

+
+
+

+ Customer can send the feedback + through the website. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Portal access of + Repair orders. +

+
+
+

+ Customer can access the Machine + repair orders from the customer + portal. +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+

+ Create Request from website.

+
+ +
+
+
+
+
+
+ +
+

+ Portal Return Order View. +

+
+
+
+
+
+
+
+ +
+

+ Check request status from + portal. +

+
+
+
+
+
+
+
+ +
+

+ Management of diagnosis and + create sale quotation. +

+
+
+
+
+
+
+
+ +
+

+ Machine repair team to create a + job order/work order from the + Machine +

+
+
+
+
+
+
+
+ +
+

+ Can add machine repair-related + images +

+
+
+
+
+
+
+
+ +
+

+ PDF of machine repair request + report +

+
+
+
+
+
+
+
+ +
+

+ Close machine repair tickets and + send bills to customers +

+
+
+
+
+
+
+
+ +
+

+ Customer feedback +

+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+

+ The module helps + businesses manage + machine repairs by + tracking requests, + assigning + technicians, + monitoring repair + progress, and + maintaining repair + history. +

+
+
+ +
+ +
+

+ It is useful for + manufacturing, + automotive, + industrial + maintenance, and + service-based + businesses handling + machine repairs. +

+
+
+ +
+ +
+

+ Yes, the module + allows users to log + repair requests, + assign them to + technicians, and + monitor their + status. +

+
+
+
+ +
+
+
+
+
+
+ +
+
+

+ Latest Release 18.0.1.0.0 +

+ + 02th September, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ +
+

+ Related Products +

+ +
+ + +
+

+ Our Services

+ +
+
+ +
+
+ .... +
+
+
+
+
+ + + + + + diff --git a/base_machine_repair_management/views/base_machine_repair_management_menus.xml b/base_machine_repair_management/views/base_machine_repair_management_menus.xml new file mode 100644 index 000000000..1f8a3b0af --- /dev/null +++ b/base_machine_repair_management/views/base_machine_repair_management_menus.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + diff --git a/base_machine_repair_management/views/customer_portal_templates.xml b/base_machine_repair_management/views/customer_portal_templates.xml new file mode 100644 index 000000000..69fc6afdc --- /dev/null +++ b/base_machine_repair_management/views/customer_portal_templates.xml @@ -0,0 +1,223 @@ + + + + + + + + + + diff --git a/base_machine_repair_management/views/customer_review_templates.xml b/base_machine_repair_management/views/customer_review_templates.xml new file mode 100644 index 000000000..8ade24ad7 --- /dev/null +++ b/base_machine_repair_management/views/customer_review_templates.xml @@ -0,0 +1,109 @@ + + + + + Repair Review + /review + + 40 + + +