diff --git a/odex25_fleet/odex_fleet/__manifest__.py b/odex25_fleet/odex_fleet/__manifest__.py index c9256dc6b..9907127ef 100644 --- a/odex25_fleet/odex_fleet/__manifest__.py +++ b/odex25_fleet/odex_fleet/__manifest__.py @@ -42,6 +42,7 @@ Manage Fleet and Reports 'views/infractions.xml', 'wizards/reject_reason_infraction.xml', 'views/driver_departments.xml', + 'views/request_vehicle_authorization.xml', ] } \ No newline at end of file diff --git a/odex25_fleet/odex_fleet/models/__init__.py b/odex25_fleet/odex_fleet/models/__init__.py index f6402966b..5df1c2ccd 100644 --- a/odex25_fleet/odex_fleet/models/__init__.py +++ b/odex25_fleet/odex_fleet/models/__init__.py @@ -8,4 +8,5 @@ from . import account_config from . import insurance_companies from . import infractions from . import driver_departments -from . import fleet_service_type \ No newline at end of file +from . import fleet_service_type +from . import request_vehicle_authorization \ No newline at end of file diff --git a/odex25_fleet/odex_fleet/models/__pycache__/__init__.cpython-38.pyc b/odex25_fleet/odex_fleet/models/__pycache__/__init__.cpython-38.pyc index 92ec69151..cdde84544 100644 Binary files a/odex25_fleet/odex_fleet/models/__pycache__/__init__.cpython-38.pyc and b/odex25_fleet/odex_fleet/models/__pycache__/__init__.cpython-38.pyc differ diff --git a/odex25_fleet/odex_fleet/models/__pycache__/maintenance_request.cpython-38.pyc b/odex25_fleet/odex_fleet/models/__pycache__/maintenance_request.cpython-38.pyc index 201d6547b..043773ce0 100644 Binary files a/odex25_fleet/odex_fleet/models/__pycache__/maintenance_request.cpython-38.pyc and b/odex25_fleet/odex_fleet/models/__pycache__/maintenance_request.cpython-38.pyc differ diff --git a/odex25_fleet/odex_fleet/models/__pycache__/request_vehicle_authorization.cpython-38.pyc b/odex25_fleet/odex_fleet/models/__pycache__/request_vehicle_authorization.cpython-38.pyc new file mode 100644 index 000000000..c12572788 Binary files /dev/null and b/odex25_fleet/odex_fleet/models/__pycache__/request_vehicle_authorization.cpython-38.pyc differ diff --git a/odex25_fleet/odex_fleet/models/__pycache__/vehicle_deleation.cpython-38.pyc b/odex25_fleet/odex_fleet/models/__pycache__/vehicle_deleation.cpython-38.pyc index e0bcec3e9..e6f993170 100644 Binary files a/odex25_fleet/odex_fleet/models/__pycache__/vehicle_deleation.cpython-38.pyc and b/odex25_fleet/odex_fleet/models/__pycache__/vehicle_deleation.cpython-38.pyc differ diff --git a/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py b/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py new file mode 100644 index 000000000..eef505f0b --- /dev/null +++ b/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py @@ -0,0 +1,126 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError, ValidationError +from datetime import datetime +from dateutil.relativedelta import relativedelta + + +class VehicleDelegation(models.Model): + _name = 'request.vehicle.authorization' + _inherit = ['mail.thread', 'mail.activity.mixin'] + + + employee_id = fields.Many2one('hr.employee', string="Driver", + domain="[('driver', '=', True),('vehicle_id', '=', False)]") + state = fields.Selection(selection=[('draft', 'Draft'), + ('confirm', 'Confirm'), + ('Direct_manager', 'Direct manager'), + ('refused', 'Refused'), + ('fleet_tool', 'Fleet tool'), + ], default='draft') + company_id = fields.Many2one('res.company', string='Company') + project_id = fields.Many2one('project.project', string='Project') + delegation_type = fields.Selection(selection=[('branch', 'Branch'), ('driver', 'driver')], + string="Delegation Type") + license_number = fields.Char(string="License Number", related='employee_id.license_number', store=True) + license_end = fields.Date(string="License End") + vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", ) + + license_plate = fields.Char(required=True, related='vehicle_id.license_plate', store=True, + ) + vin_sn = fields.Char('Chassis Number', related='vehicle_id.vin_sn', store=True, + copy=False) + model_id = fields.Many2one('fleet.vehicle.model', 'Model', related='vehicle_id.model_id', store=True, ) + fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type", related='vehicle_id.fleet_type_id', store=True, ) + serial_number = fields.Char(related='vehicle_id.serial_number', string="Serial Number") + state_id = fields.Many2one('res.country.state', string="State", ) + start_date = fields.Date(string="Start Date") + end_date = fields.Date(string="End Date") + reason = fields.Text(string="Reject Reason", tracking=True,) + custody_id = fields.Many2one('custom.employee.custody') + entity_type = fields.Selection(selection=[('department', 'Department'), ('project', 'Project')], + string="Entity Type") + driver_department = fields.Many2one('driver.department') + first_odometer = fields.Float(string='First Odometer',compute="get_first_odometer", store=True,help='The odometer value at the moment the car is authorized') + odometer = fields.Float(string='Last Odometer',compute="get_odometer", store=True, + help='Odometer measure of the vehicle at the moment of this log') + km_number = fields.Integer(string='KM Number', compute='get_km', store=True,help='The value of the difference between the odometer at the moment of delivery and receipt') + last_department_id = fields.Many2one(related='vehicle_id.department_id', string="Last Department",help='The last Department the vehicle was authorized for') + last_project_id = fields.Many2one('project.project', string='Last Project', compute="get_last_project", store=True) + last_branch_id = fields.Many2one('hr.department', string="Last Branch", compute="get_last_branch", store=True,help='The last Branch the vehicle was authorized for') + from_hr_depart = fields.Boolean() + + @api.depends("vehicle_id") + def get_first_odometer(self): + for rec in self: + if rec.vehicle_id: + odometer_id = self.env['fleet.vehicle.odometer'].search([('vehicle_id', '=', rec.vehicle_id.id)], + order="date desc", limit=1) + rec.first_odometer = odometer_id.value + + @api.depends("vehicle_id") + def get_odometer(self): + for rec in self: + if rec.vehicle_id: + odometer_id = self.env['fleet.vehicle.odometer'].search([('vehicle_id', '=', rec.vehicle_id.id)], + order="date asc", limit=1) + rec.odometer = odometer_id.value + + @api.depends("vehicle_id") + def get_last_project(self): + for rec in self: + obj = self.search([('vehicle_id', '=', rec.vehicle_id.name)], limit=1) + rec.last_project_id = obj.project_id + + @api.depends("vehicle_id") + def get_last_branch(self): + for rec in self: + rec.last_branch_id = rec.vehicle_id.branch_id + + @api.depends('odometer', 'first_odometer') + def get_km(self): + for rec in self: + rec.km_number = rec.odometer - rec.first_odometer + + def action_confirm(self): + for rec in self: + rec.state = 'confirm' + + # def action_approve(self): + # for rec in self: + # rec.state = 'approve' + # + # def action_inprogress(self): + # for rec in self: + # # if rec.start_date > str(datetime.now().date()): + # # raise ValidationError(_("You Can Start Request Early than Plan")) + # rec.state = 'in_progress' + + + def action_refuse(self): + form_view_id = self.env.ref("odex_fleet.wizard_reject_reason_fleet_wiz_form").id + return { + 'name': _("Reject Reason"), + + 'view_mode': 'form', + 'res_model': 'reject.reason.fleet.wiz', + 'views': [(form_view_id, 'form')], + 'type': 'ir.actions.act_window', + 'target': 'new', + 'context': {'default_delegation_id': self.id}, + } + + # def action_close(self): + # for rec in self: + # rec.state = 'close' + + def fleet_tool(self): + for rec in self: + rec.state = 'fleet_tool' + + def Direct_manager(self): + for rec in self: + rec.state = 'Direct_manager' + + # def action_cancel(self): + # for rec in self: + # rec.sudo().state = 'cancel' \ No newline at end of file diff --git a/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml b/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml new file mode 100644 index 000000000..81f0013df --- /dev/null +++ b/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml @@ -0,0 +1,80 @@ + + + + + fleet.request.vehicle.authorization.form + request.vehicle.authorization + +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+
+
+ + + + Request vehicle authorization + request.vehicle.authorization + + tree,form + +

+ Click to create a new Driver Delegation. +

+ +
+
+ + + +
diff --git a/odex25_fleet/odex_fleet/wizards/__pycache__/fleet_wiz.cpython-38.pyc b/odex25_fleet/odex_fleet/wizards/__pycache__/fleet_wiz.cpython-38.pyc index 2a43b4d6d..8b4ab8d03 100644 Binary files a/odex25_fleet/odex_fleet/wizards/__pycache__/fleet_wiz.cpython-38.pyc and b/odex25_fleet/odex_fleet/wizards/__pycache__/fleet_wiz.cpython-38.pyc differ