You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

264 lines
13 KiB

"""Machine Repair"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri v (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 <http://www.gnu.org/licenses/>.
#
#############################################################################
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")
repair_seq = fields.Char(string='Repair Sequence', required=True,
copy=False, help="Repair sequence",
readonly=True, index=True,
default=lambda self: 'New')
customer_id = fields.Many2one('res.partner', string="Customer",
help="Name of the customer")
customer_email = fields.Char(string='Customer E-mail',
related="customer_id.email",
help="Email of the customer")
phone = fields.Char(string='Phone', help="Customer phone number",
related="customer_id.phone")
repairing_reason = fields.Char(string='Repairing Reason',
help="Reason for the repairing")
machine_brand = fields.Char(string='Machine brand',
help="Brand of the machine")
machine_model = fields.Char(string="Model", help="Model of the Machine")
manufacturing_year = fields.Date(string='Manufacturing Year',
help="Manufacturing date of the machine")
priority = fields.Selection(
[('low', 'Low'), ('high', 'High'), ('middle', 'Middle')],
string="Priority", help="Priority for repairing", required=True)
repair_detail = fields.Text(string='Repair Reason In Detail',
help="Repairing Details", required=True)
technician_id = fields.Many2one('hr.employee', string="Technician",
help="The technician for the repair")
technician_member_ids = fields.Many2many('hr.employee',
string="Technical member")
email = fields.Char('Email', related='technician_id.work_email',
help="Technician Email")
company_id = fields.Many2one('res.company', string="Company",
help="Company Of technician")
project = fields.Many2one('project.project', string="Project",
help="Project of that repairing")
department = fields.Many2one('hr.department', string="Department",
help="Department of the technician")
repir_req_date = fields.Date(string='Repair Date',
help="Repair requesting date")
closing_date = fields.Date(string='Closing Date',
help="The repair closing date")
repairing_duration = fields.Float(string="Repairing Duration",
help="The duration of the repairing")
is_repaired = fields.Boolean(string='Is Repaired',
help="Which is used to identify the order is "
"repaired or not")
machine_id = fields.Many2one('product.product', string="Machine",
help="Machine name",
domain=[('is_machine', '=', True)])
machine_cate = fields.Many2one('product.category',
string='Machine Category',
help="the category of the machine")
color = fields.Char(string='Color', help="Color of the machine")
damage = fields.Char(string='Damage', help="Damage of machine")
warrenty = fields.Boolean(string='Warranty', help="Warranty of the machine")
Warrenty_exp_date = fields.Date(string="Warranty Expiration Date",
help="The Machine Warranty Expiration date")
authority_name = fields.Char(string='Authority Name',
help="The Authority of the technician")
service = fields.Many2one('machine.service', string="Service",
help="The service for the machine")
customer_rating = fields.Char(string='Customer Rating',
help="Customer Review")
customer_comments = fields.Char(string='Customer Comments',
help="Comments of the customer")
extra_info = fields.Html(string="Information", help="Extra Information")
repair_team_id = fields.Many2one('repair.teams', string="Repair team",
help="The team of repairing")
nature_of_service = fields.Many2one('machine.service',
string="Nature of Service",
help="The nature of the machine service")
repair_type = fields.Many2many('machine.service.type',
string="Repair Types",
help="The type of the repairs")
problem = fields.Char(string='Problem', help="Problem of the machine")
note = fields.Html(string='Note', help="Note for the repairing")
state = fields.Selection(string='Status', required=True, readonly=True,
copy=False, selection=[('new', 'New'),
('assigned', 'Assigned'),
('closed', 'Closed'),
('send', 'Mail Send'),
('reopen', 'Re Opened'),
], default='new',
help="stages of machine repair request")
image1 = fields.Binary(string='Image 1', help="Machine images")
image2 = fields.Binary(string='Image 2', help="Machine images")
image3 = fields.Binary(string='Image 3', help="Machine images")
image4 = fields.Binary(string='Image 4', help="Machine images")
image5 = fields.Binary(string='Image 5', help="Machine images")
timesheet_id = fields.One2many('repair.timesheet', 'inverse_id',
string="Timesheet",
help="Timesheet for the machine repairing")
consume_part_id = fields.One2many('machine.consume', 'consume_id',
string="Consumer Parts",
help="Machine consumption")
is_visible_diagnosis = fields.Boolean(string="Diagnosis Visibility",
help="When the button want to "
"display")
is_visible_workorder = fields.Boolean(string="WorkOrder Visibility",
help="When the button want to "
"display")
@api.model
def create(self, vals):
"""Sequence generator"""
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)
return result
@api.onchange('repair_team_id')
def onchange_repair_team(self):
val = self.env['repair.teams'].search(
[('id', '=', self.repair_team_id.id)]).mapped('member_ids').mapped(
'member_id').ids
self.technician_member_ids = val
def create_diagnosis(self):
"""This is used to create the diagnosis"""
group = self.env.ref(
'base_machine_repair_management.repair_sales_users_access').name
if group in self.env.user.groups_id.mapped('name'):
self.is_visible_diagnosis = True
self.env['machine.diagnosis'].create({
'project_id': self.project.id,
'customer_id': self.customer_id.id,
'deadline': self.closing_date,
})
return {
'res_model': 'machine.diagnosis',
'type': 'ir.actions.act_window',
'res_id': self.id,
'view_mode': 'form',
'target': 'current',
'context': "{'create': False ,}"
}
def action_create_work_order(self):
"""Creating job order from repair request"""
group = self.env.ref('base_machine_repair_management.repair_sales_users_access').name
if group in self.env.user.groups_id.mapped('name'):
self.is_visible_workorder = True
self.env['machine.workorder'].create({
'customer_id': self.customer_id.id,
'date': self.repir_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 reopen(self):
"""Reopen the repair"""
self.state = 'reopen'
def close_repairing(self):
"""Repair closed"""
self.state = 'closed'
def assign_teams(self):
"""Assigning repair to teams"""
if self.repair_team_id:
val = self.env['repair.teams'].search(
[('id', '=', self.repair_team_id.id)])
val.write({
'repair_work_id': self.id,
})
self.state = 'assigned'
else:
self.state = 'new'
raise ValidationError("There Is No Repair Team Is Specified")
def 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 action_print_repair_request_report(self):
"""Which returns the report action"""
return self.env.ref(
"base_machine_repair_management.action_repair_report").report_action(
self)
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="Consumer of the repair")
machine_id = fields.Many2one('product.product', string='Machine',
help="Machine for consume",
domain=[('is_machine', '=', True)])
qty = fields.Float(string='Quantity', help="Quantity of the machine")
uom = fields.Many2one('uom.uom', string="Uom", help="Machine uom")
dia_estimate_id = fields.Many2one('machine.diagnosis',
string="Machine Diagnosis",
help="Diagnosis of machine")
hour = fields.Float(string='Duration', help="Duration for the machine")
class RepairTimesheet(models.Model):
"""This is used for thr timesheet of repair management"""
_name = 'repair.timesheet'
_description = "Timesheet Of The Repair"
_rec_name = 'user_id'
inverse_id = fields.Many2one('machine.repair', string="Machine Repair",
help="Inverse field of the models "
"'machine.repair'")
date = fields.Date(string='Date', help="Time sheet creation date")
user_id = fields.Many2one('res.users', string="User",
help="Time sheet for the user")
project_id = fields.Many2one('project.project', string="Project",
help="Project for the user")
description = fields.Char(string='Description',
help="Description for the user's timesheet")
hours = fields.Float(string='Duration', help="Duration of the Work")
diagnosis_id = fields.Many2one('machine.diagnosis',
string="Diagnosis",
help="Machine diagnosis")