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.
178 lines
8.3 KiB
178 lines
8.3 KiB
# -*- coding: utf-8 -*-
|
|
#############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
|
|
# Author: Nilmar Shereef @ Cybrosys, (odoo@cybrosys.com)
|
|
# Niyas Raphy @ Cybrosys, (odoo@cybrosys.com)
|
|
# Yadhukrishna @ Cybrosys, (odoo@cybrosys.com)
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#############################################################################
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from datetime import datetime
|
|
from odoo import models, fields, api, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class FleetReservedTime(models.Model):
|
|
_name = "fleet.reserved"
|
|
_description = "Reserved Time"
|
|
|
|
employee = fields.Many2one('hr.employee', string='Employee')
|
|
date_from = fields.Datetime(string='Reserved Date From')
|
|
date_to = fields.Datetime(string='Reserved Date To')
|
|
reserved_obj = fields.Many2one('fleet.vehicle')
|
|
|
|
|
|
class FleetVehicleInherit(models.Model):
|
|
_inherit = 'fleet.vehicle'
|
|
|
|
check_availability = fields.Boolean(default=True, copy=False)
|
|
reserved_time = fields.One2many('fleet.reserved', 'reserved_obj', string='Reserved Time', readonly=1,
|
|
ondelete='cascade')
|
|
|
|
|
|
class EmployeeFleet(models.Model):
|
|
_name = 'employee.fleet'
|
|
_description = 'Employee Vehicle Request'
|
|
_inherit = 'mail.thread'
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
vals['name'] = self.env['ir.sequence'].next_by_code('employee.fleet')
|
|
return super(EmployeeFleet, self).create(vals)
|
|
|
|
def send(self):
|
|
if self.date_from and self.date_to:
|
|
fleet_obj = self.env['fleet.vehicle'].search([])
|
|
check_availability = 0
|
|
for i in fleet_obj:
|
|
for each in i.reserved_time:
|
|
if each.date_from and each.date_to:
|
|
if each.date_from <= self.date_from <= each.date_to:
|
|
check_availability = 1
|
|
elif self.date_from < each.date_from:
|
|
if each.date_from <= self.date_to <= each.date_to:
|
|
check_availability = 1
|
|
elif self.date_to > each.date_to:
|
|
check_availability = 1
|
|
else:
|
|
check_availability = 0
|
|
else:
|
|
check_availability = 0
|
|
if check_availability == 0:
|
|
reserved_id = self.fleet.reserved_time.create({'employee': self.employee.id,
|
|
'date_from': self.date_from,
|
|
'date_to': self.date_to,
|
|
'reserved_obj': self.fleet.id,
|
|
})
|
|
self.write({'reserved_fleet_id': reserved_id.id})
|
|
self.state = 'waiting'
|
|
else:
|
|
raise UserError(_('Sorry This vehicle is already requested by another employee'))
|
|
|
|
def approve(self):
|
|
# self.fleet.fleet_status = True
|
|
self.state = 'confirm'
|
|
mail_content = _('Hi %s,<br>Your vehicle request for the reference %s is approved.') % \
|
|
(self.employee.name, self.name)
|
|
main_content = {
|
|
'subject': _('%s: Approved') % self.name,
|
|
'author_id': self.env.user.partner_id.id,
|
|
'body_html': mail_content,
|
|
'email_to': self.employee.work_email,
|
|
}
|
|
mail_id = self.env['mail.mail'].create(main_content)
|
|
mail_id.mail_message_id.body = mail_content
|
|
mail_id.send()
|
|
if self.employee.user_id:
|
|
# mail_id.mail_message_id.write({'notified_partner_ids': [(4, self.employee.user_id.partner_id.id)]})
|
|
mail_id.mail_message_id.write({'partner_ids': [(4, self.employee.user_id.partner_id.id)]})
|
|
|
|
def reject(self):
|
|
self.reserved_fleet_id.unlink()
|
|
self.state = 'reject'
|
|
mail_content = _('Hi %s,<br>Sorry, Your vehicle request for the reference %s is Rejected.') % \
|
|
(self.employee.name, self.name)
|
|
|
|
main_content = {
|
|
'subject': _('%s: Approved') % self.name,
|
|
'author_id': self.env.user.partner_id.id,
|
|
'body_html': mail_content,
|
|
'email_to': self.employee.work_email,
|
|
}
|
|
mail_id = self.env['mail.mail'].create(main_content)
|
|
mail_id.mail_message_id.body = mail_content
|
|
mail_id.send()
|
|
if self.employee.user_id:
|
|
# mail_id.mail_message_id.write({'notified_partner_ids': [(4, self.employee.user_id.partner_id.id)]})
|
|
mail_id.mail_message_id.write({'partner_ids': [(4, self.employee.user_id.partner_id.id)]})
|
|
|
|
def cancel(self):
|
|
if self.reserved_fleet_id:
|
|
self.reserved_fleet_id.unlink()
|
|
self.state = 'cancel'
|
|
|
|
def returned(self):
|
|
self.reserved_fleet_id.unlink()
|
|
self.returned_date = fields.datetime.now()
|
|
self.state = 'return'
|
|
|
|
@api.constrains('date_from', 'date_to')
|
|
def onchange_date_to(self):
|
|
for each in self:
|
|
if each.date_from > each.date_to:
|
|
raise UserError(_('Date To must be greater than Date From'))
|
|
|
|
@api.onchange('date_from', 'date_to')
|
|
def check_availability(self):
|
|
if self.date_from and self.date_to:
|
|
self.fleet = ''
|
|
fleet_obj = self.env['fleet.vehicle'].search([])
|
|
for i in fleet_obj:
|
|
for each in i.reserved_time:
|
|
if each.date_from and each.date_to:
|
|
if each.date_from <= self.date_from <= each.date_to:
|
|
i.write({'check_availability': False})
|
|
elif self.date_from < each.date_from:
|
|
if each.date_from <= self.date_to <= each.date_to:
|
|
i.write({'check_availability': False})
|
|
elif self.date_to > each.date_to:
|
|
i.write({'check_availability': False})
|
|
else:
|
|
i.write({'check_availability': True})
|
|
else:
|
|
i.write({'check_availability': True})
|
|
|
|
reserved_fleet_id = fields.Many2one('fleet.reserved', invisible=1, copy=False)
|
|
name = fields.Char(string='Request Number', copy=False)
|
|
employee = fields.Many2one('hr.employee', string='Employee', required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]})
|
|
req_date = fields.Date(string='Requested Date', default=fields.Date.context_today, required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]}, help="Requested Date")
|
|
fleet = fields.Many2one('fleet.vehicle', string='Vehicle', required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]})
|
|
date_from = fields.Datetime(string='From', required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]})
|
|
date_to = fields.Datetime(string='To', required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]})
|
|
returned_date = fields.Datetime(string='Returned Date', readonly=1)
|
|
purpose = fields.Text(string='Purpose', required=1, readonly=True,
|
|
states={'draft': [('readonly', False)]}, help="Purpose")
|
|
state = fields.Selection([('draft', 'Draft'), ('waiting', 'Waiting for Approval'), ('cancel', 'Cancel'),
|
|
('confirm', 'Approved'), ('reject', 'Rejected'), ('return', 'Returned')],
|
|
string="State", default="draft")
|
|
|
|
|