diff --git a/odex25_fleet/odex_fleet/i18n/ar_001.po b/odex25_fleet/odex_fleet/i18n/ar_001.po index 50953503a..efebe873f 100644 --- a/odex25_fleet/odex_fleet/i18n/ar_001.po +++ b/odex25_fleet/odex_fleet/i18n/ar_001.po @@ -940,12 +940,10 @@ msgstr "الادارة / القسم" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_fleet_wiz__department_ids - msgid "Departments" msgstr "الأقسام" #. module: odex_fleet - #: model:ir.model.fields,field_description:odex_fleet.field_request_vehicle_authorization__departments_id #: model:ir.model.fields,field_description:odex_fleet.field_vehicle_delegation__departments_id msgid "Departments" @@ -1912,7 +1910,7 @@ msgstr "الرخصة" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_hr_employee__license_attache msgid "License Attachment" -msgstr "" +msgstr "مرفق صوره الرخصة" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_fleet_vehicle__license_end @@ -1927,7 +1925,7 @@ msgstr "تاريخ انتهاء الرخصة" #. module: odex_fleet #: model_terms:ir.ui.view,arch_db:odex_fleet.hr_driver_form_view msgid "License Information" -msgstr "" +msgstr "معلومات رخصة السياقة" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_hr_employee__license_number @@ -1938,6 +1936,13 @@ msgstr "" msgid "License Number" msgstr "رقم رخصة السياقة" + +#. module: odex_fleet +#: model:ir.model.fields,field_description:odex_fleet.field_request_vehicle_authorization__depart_id +#: model:ir.model.fields,field_description:odex_fleet.field_vehicle_delegation__depart_id +msgid "Depart" +msgstr "الفرع" + #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_fleet_maintenance__license_plate #: model:ir.model.fields,field_description:odex_fleet.field_request_vehicle_authorization__license_plate @@ -1948,15 +1953,17 @@ msgstr "رقم اللوحة" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_hr_employee__license_start +#: model:ir.model.fields,field_description:odex_fleet.field_request_vehicle_authorization__license_start #: model_terms:ir.ui.view,arch_db:odex_fleet.hr_kanban_view msgid "License Start" -msgstr "" +msgstr "تاريخ الاصدار" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_hr_employee__license_type +#: model:ir.model.fields,field_description:odex_fleet.field_request_vehicle_authorization__license_type #: model_terms:ir.ui.view,arch_db:odex_fleet.hr_kanban_view msgid "License Type" -msgstr "" +msgstr "نوع الرخصة" #. module: odex_fleet #: model:ir.model.fields,help:odex_fleet.field_fleet_maintenance__license_plate @@ -2469,8 +2476,8 @@ msgstr "السببظ المبرر" #. module: odex_fleet #: model:ir.model.fields,field_description:odex_fleet.field_hr_employee__receive_date -msgid "Receive Date" -msgstr "" +msgid "Receive Date" +msgstr "تاريخ الاستلام" #. module: odex_fleet #: model:ir.actions.report,name:odex_fleet.delegation_receive_report_pdf_act diff --git a/odex25_fleet/odex_fleet/models/__pycache__/driver.cpython-38.pyc b/odex25_fleet/odex_fleet/models/__pycache__/driver.cpython-38.pyc index 83ca0b475..cbeb3a777 100644 Binary files a/odex25_fleet/odex_fleet/models/__pycache__/driver.cpython-38.pyc and b/odex25_fleet/odex_fleet/models/__pycache__/driver.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 index c1f8e234a..4e560e75f 100644 Binary files a/odex25_fleet/odex_fleet/models/__pycache__/request_vehicle_authorization.cpython-38.pyc and b/odex25_fleet/odex_fleet/models/__pycache__/request_vehicle_authorization.cpython-38.pyc differ diff --git a/odex25_fleet/odex_fleet/models/driver.py b/odex25_fleet/odex_fleet/models/driver.py index 203e42be4..0c06812d1 100644 --- a/odex25_fleet/odex_fleet/models/driver.py +++ b/odex25_fleet/odex_fleet/models/driver.py @@ -17,7 +17,7 @@ class HRCustom(models.Model): old_vehicle_id = fields.Many2one('fleet.vehicle', string="Old Vehicle") delegation_start = fields.Date(string="Delegation Start Date") delegation_end = fields.Date(string="Delegation End Date") - receive_date = fields.Date(string="Receive Date",readonly=True) + receive_date = fields.Date(string="Receive Date",readonly=True) license_attache = fields.Binary(string="License Attachment") employee_cars_count = fields.Integer(compute="_compute_employee_cars_count", string="Cars",groups="base.group_user") diff --git a/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py b/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py index 7d78ed73c..668d72f78 100644 --- a/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py +++ b/odex25_fleet/odex_fleet/models/request_vehicle_authorization.py @@ -9,49 +9,79 @@ class RequestVehicleDelegation(models.Model): _name = 'request.vehicle.authorization' _inherit = ['mail.thread', 'mail.activity.mixin'] - - employee_id = fields.Many2one('hr.employee', string="Driver",default=lambda item: item.get_user_id(), - tracking=True) + employee_id = fields.Many2one('hr.employee', string="Driver", default=lambda item: item.get_user_id(), + tracking=True, required=True) state = fields.Selection(selection=[('draft', 'Draft'), ('confirm', 'Confirm'), ('direct_manager', 'Direct manager'), ('refused', 'Refused'), ('fleet_tool', 'Fleet tool'), - ], default='draft',tracking=True) + ], default='draft', tracking=True) 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,tracking=True) - license_end = fields.Date(string="License End",tracking=True) - vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle",tracking=True ,domain=lambda self: [('id', 'not in', self._get_delegated_vehicle_ids())] ) + license_number = fields.Char(string="License Number", related='employee_id.license_number', tracking=True, + readonly=False, required=True) + license_end = fields.Date(string="License End", tracking=True, related='employee_id.license_end', readonly=False, + required=True) + license_type = fields.Selection(selection=[('private', 'Private'), ('general', 'General'), ('public', 'Public')], + string="License Type", related='employee_id.license_type', readonly=False, + required=True) + license_start = fields.Date(string="License Start", related='employee_id.license_start', readonly=False, + required=True) + vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", tracking=True, + domain=lambda self: [('id', 'not in', self._get_delegated_vehicle_ids())]) - license_plate = fields.Char(required=True, related='vehicle_id.license_plate', store=True,tracking=True) + license_plate = fields.Char(required=True, related='vehicle_id.license_plate', store=True, tracking=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,tracking=True) - fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type", related='vehicle_id.fleet_type_id', store=True,tracking=True) + model_id = fields.Many2one('fleet.vehicle.model', 'Model', related='vehicle_id.model_id', store=True, tracking=True) + fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type", related='vehicle_id.fleet_type_id', store=True, + tracking=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",tracking=True) - end_date = fields.Date(string="End Date",tracking=True) - reason = fields.Text(string="Reject Reason", tracking=True,) + start_date = fields.Date(string="Start Date", tracking=True) + end_date = fields.Date(string="End Date", tracking=True) + 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',tracking=True) - 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',tracking=True) - 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,tracking=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',tracking=True) + string="Entity Type") + driver_department = fields.Many2one('driver.department', tracking=True) + 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', tracking=True) + 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, + tracking=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', tracking=True) from_hr_depart = fields.Boolean() name = fields.Char(string="Name") - depart_id= fields.Many2one('hr.department') + depart_id = fields.Many2one('hr.department', related='employee_id.department_id') + driver = fields.Boolean(string="Is Driver", related='employee_id.driver') + @api.onchange('license_number', 'license_end', 'license_type', 'license_start') + def _onchange_license_fields(self): + if self.employee_id: + if self.license_number: + self.employee_id.license_number = self.license_number + if self.license_end: + self.employee_id.license_end = self.license_end + if self.license_type: + self.employee_id.license_type = self.license_type + if self.license_start: + self.employee_id.license_start = self.license_start + @api.onchange('driver') + def _onchange_driver(self): + if self.employee_id and not self.driver: + self.driver = True + self.employee_id.driver = True @api.model def _get_delegated_vehicle_ids(self): @@ -60,7 +90,6 @@ class RequestVehicleDelegation(models.Model): ]) return delegated_vehicles.mapped('vehicle_id.id') - def get_user_id(self): employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1) if employee_id: @@ -120,8 +149,7 @@ class RequestVehicleDelegation(models.Model): def direct_manager(self): for rec in self: rec.state = 'direct_manager' - - + rec.send_notification_to_direct_manager_groups() def send_notification_to_fleet_tool_group(self): message_template = 'Dear {user_name}, you have an authorization request awaiting approval' @@ -147,6 +175,34 @@ class RequestVehicleDelegation(models.Model): 'notification_type': 'inbox' })] }) + + def send_notification_to_direct_manager_groups(self): + message_template = 'Dear {user_name}, you have an authorization request awaiting approval' + groups = [ + self.env.ref('odex_fleet.group_direct_manager') + ] + for group in groups: + users = group.users + for user in users: + if user.partner_id: + message_body = message_template.format(user_name=user.name) + + # Send the notification to appear as a real notification in Odoo + self.env['mail.message'].create({ + 'message_type': 'notification', + 'subtype_id': self.env.ref('mail.mt_comment').id, + 'body': message_body, + 'subject': 'New authorization request', + 'partner_ids': [(4, user.partner_id.id)], + 'model': 'request.vehicle.authorization', + 'res_id': self.id, + 'author_id': self.env.user.partner_id.id, + 'notification_ids': [(0, 0, { + 'res_partner_id': user.partner_id.id, + 'notification_type': 'inbox' + })] + }) + def fleet_tool(self): vehicle_vals = { @@ -179,7 +235,6 @@ class RequestVehicleDelegation(models.Model): return vehicle - class InheritVehicleDelegation(models.Model): _inherit = "vehicle.delegation" diff --git a/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml b/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml index d3cbd81f7..70562bede 100644 --- a/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml +++ b/odex25_fleet/odex_fleet/views/request_vehicle_authorization.xml @@ -35,11 +35,19 @@ - - + attrs="{'readonly': [('from_hr_depart', '=', False), ('state', '!=', 'draft')]}"/> + + + + + +