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.
132 lines
5.8 KiB
132 lines
5.8 KiB
# -*- coding: utf-8 -*-
|
|
################################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
|
|
# Author: Unnimaya C O (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 CleaningRequest(models.Model):
|
|
"""Class for creating and assigning Cleaning Request"""
|
|
_name = "cleaning.request"
|
|
_inherit = ["mail.thread", "mail.activity.mixin"]
|
|
_rec_name = "sequence"
|
|
_description = "Cleaning Request"
|
|
|
|
sequence = fields.Char(string="Sequence", readonly=True, default='New',
|
|
copy=False, tracking=True,
|
|
help="Sequence for identifying the request")
|
|
state = fields.Selection([('draft', 'Draft'),
|
|
('assign', 'Assigned'),
|
|
('ongoing', 'Cleaning'),
|
|
('support', 'Waiting For Support'),
|
|
('done', 'Completed')],
|
|
string="State",
|
|
default='draft', help="State of cleaning request")
|
|
cleaning_type = fields.Selection(selection=[('room', 'Room'),
|
|
('hotel', 'Hotel'),
|
|
('vehicle', 'Vehicle')],
|
|
required=True, tracking=True,
|
|
string="Cleaning Type",
|
|
help="Choose what is to be cleaned")
|
|
room_id = fields.Many2one('hotel.room', string="Room",
|
|
help="Choose the room", required=True)
|
|
hotel = fields.Char(string="Hotel", help="Cleaning request space in hotel")
|
|
vehicle_id = fields.Many2one('fleet.vehicle.model',
|
|
string="Vehicle",
|
|
help="Cleaning request from vehicle")
|
|
support_team_ids = fields.Many2many('res.users',
|
|
string="Support Team",
|
|
help="Support team members")
|
|
support_reason = fields.Char(string='Support', help="Support Reason")
|
|
description = fields.Char(string="Description",
|
|
help="Description about the cleaning")
|
|
team_id = fields.Many2one('cleaning.team', string="Team",
|
|
required=True,
|
|
tracking=True,
|
|
help="Choose the team")
|
|
head_id = fields.Many2one('res.users', string="Head",
|
|
related='team_id.team_head_id',
|
|
help="Head of cleaning team")
|
|
assigned_id = fields.Many2one('res.users', string="Assigned To",
|
|
help="The team member to whom the request is "
|
|
"Assigned To")
|
|
team_member_ids = fields.Many2many('res.users', compute='_compute_team_member_ids', store=False,
|
|
help='For filtering Users')
|
|
|
|
@api.depends('team_id')
|
|
def _compute_team_member_ids(self):
|
|
for record in self:
|
|
if record.team_id:
|
|
record.team_member_ids = record.team_id.member_ids.ids
|
|
else:
|
|
record.team_member_ids = []
|
|
|
|
@api.model
|
|
def create(self, vals_list):
|
|
"""Sequence Generation"""
|
|
if vals_list.get('sequence', 'New') == 'New':
|
|
vals_list['sequence'] = self.env['ir.sequence'].next_by_code(
|
|
'cleaning.request')
|
|
return super().create(vals_list)
|
|
|
|
def action_assign_cleaning(self):
|
|
"""Button action for updating the state to assign"""
|
|
self.update({'state': 'assign'})
|
|
|
|
def action_start_cleaning(self):
|
|
"""Button action for updating the state to ongoing"""
|
|
self.write({'state': 'ongoing'})
|
|
|
|
def action_done_cleaning(self):
|
|
"""Button action for updating the state to done"""
|
|
self.write({'state': 'done'})
|
|
|
|
def action_assign_support(self):
|
|
"""Button action for updating the state to support"""
|
|
if self.support_reason:
|
|
self.write({'state': 'support'})
|
|
else:
|
|
raise ValidationError(_('Please enter the reason'))
|
|
|
|
def action_assign_assign_support(self):
|
|
"""Button action for updating the state to ongoing"""
|
|
if self.support_team_ids:
|
|
self.write({'state': 'ongoing'})
|
|
else:
|
|
raise ValidationError(_('Please choose a support'))
|
|
|
|
def action_maintain_request(self):
|
|
"""Button action for creating the maintenance request"""
|
|
self.env['maintenance.request'].sudo().create({
|
|
'date': fields.Date.today(),
|
|
'state': 'draft',
|
|
'type': self.cleaning_type,
|
|
'vehicle_maintenance_id': self.vehicle_id.id
|
|
})
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'type': 'success',
|
|
'message': "Maintenance Request Sent Successfully",
|
|
'next': {'type': 'ir.actions.act_window_close'},
|
|
}
|
|
}
|
|
|