diff --git a/addons/fleet/models/fleet_vehicle_assignation_log.py b/addons/fleet/models/fleet_vehicle_assignation_log.py index 1d4c5e62460..defcd1fd39e 100644 --- a/addons/fleet/models/fleet_vehicle_assignation_log.py +++ b/addons/fleet/models/fleet_vehicle_assignation_log.py @@ -13,3 +13,13 @@ class FleetVehicleAssignationLog(models.Model): driver_id = fields.Many2one('res.partner', string="Driver", required=True) date_start = fields.Date(string="Start Date") date_end = fields.Date(string="End Date") + + def action_open_vehicle(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'res_model': 'fleet.vehicle', + 'res_id': self.vehicle_id.id, + 'view_mode': 'form', + 'context': dict(self.env.context, create=False), + } diff --git a/addons/fleet/views/fleet_vehicle_views.xml b/addons/fleet/views/fleet_vehicle_views.xml index c6508dd81be..bd61172fa3e 100644 --- a/addons/fleet/views/fleet_vehicle_views.xml +++ b/addons/fleet/views/fleet_vehicle_views.xml @@ -532,10 +532,11 @@ fleet.vehicle.assignation.log - - + + + diff --git a/addons/hr_fleet/__init__.py b/addons/hr_fleet/__init__.py index c158f87e14f..52497701d2b 100644 --- a/addons/hr_fleet/__init__.py +++ b/addons/hr_fleet/__init__.py @@ -1,6 +1,5 @@ # -*- encoding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import controllers from . import models from . import wizard diff --git a/addons/hr_fleet/controllers/__init__.py b/addons/hr_fleet/controllers/__init__.py deleted file mode 100644 index 5d4b25db9c0..00000000000 --- a/addons/hr_fleet/controllers/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from . import main diff --git a/addons/hr_fleet/controllers/main.py b/addons/hr_fleet/controllers/main.py deleted file mode 100644 index 80748991fda..00000000000 --- a/addons/hr_fleet/controllers/main.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -import base64 -import io - -from PyPDF2 import PdfFileReader, PdfFileWriter -from reportlab.pdfgen import canvas - -from odoo import _ -from odoo.http import request, route, Controller - - - -class HrFleet(Controller): - @route(["/fleet/print_claim_report/"], type='http', auth='user') - def get_claim_report_user(self, employee_id, **post): - if not request.env.user.has_group('fleet.fleet_group_manager'): - return request.not_found() - - employee = request.env['hr.employee'].search([('id', '=', employee_id)], limit=1) - partner_ids = (employee.user_id.partner_id | employee.sudo().address_home_id).ids - if not employee or not partner_ids: - return request.not_found() - - car_assignation_logs = request.env['fleet.vehicle.assignation.log'].search([('driver_id', 'in', partner_ids)]) - doc_list = request.env['ir.attachment'].search([ - ('res_model', '=', 'fleet.vehicle.assignation.log'), - ('res_id', 'in', car_assignation_logs.ids)], order='create_date') - - writer = PdfFileWriter() - - font = "Helvetica" - normal_font_size = 14 - - for document in doc_list: - car_line_doc = request.env['fleet.vehicle.assignation.log'].browse(document.res_id) - try: - reader = PdfFileReader(io.BytesIO(base64.b64decode(document.datas)), strict=False, overwriteWarnings=False) - except Exception: - continue - - width = float(reader.getPage(0).mediaBox.getUpperRight_x()) - height = float(reader.getPage(0).mediaBox.getUpperRight_y()) - - header = io.BytesIO() - can = canvas.Canvas(header) - can.setFont(font, normal_font_size) - can.setFillColorRGB(1, 0, 0) - - car_name = car_line_doc.vehicle_id.display_name - date_start = car_line_doc.date_start - date_end = car_line_doc.date_end or '...' - - text_to_print = _( - "%(car_name)s (driven from: %(date_start)s to %(date_end)s)", - car_name=car_name, - date_start=date_start, - date_end=date_end - ) - can.drawCentredString(width / 2, height - normal_font_size, text_to_print) - can.save() - header_pdf = PdfFileReader(header, overwriteWarnings=False) - - for page_number in range(0, reader.getNumPages()): - page = reader.getPage(page_number) - page.mergePage(header_pdf.getPage(0)) - writer.addPage(page) - - _buffer = io.BytesIO() - writer.write(_buffer) - merged_pdf = _buffer.getvalue() - _buffer.close() - - pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(merged_pdf))] - - return request.make_response(merged_pdf, headers=pdfhttpheaders) diff --git a/addons/hr_fleet/models/employee.py b/addons/hr_fleet/models/employee.py index c72d97eea06..907a28e1d80 100644 --- a/addons/hr_fleet/models/employee.py +++ b/addons/hr_fleet/models/employee.py @@ -17,29 +17,23 @@ class Employee(models.Model): def action_open_employee_cars(self): self.ensure_one() - cars = self.env['fleet.vehicle.assignation.log'].search([ - ('driver_id', 'in', (self.user_id.partner_id | self.sudo().address_home_id).ids)]).mapped('vehicle_id') return { "type": "ir.actions.act_window", - "res_model": "fleet.vehicle", - "views": [[False, "kanban"], [False, "form"], [False, "tree"]], - "domain": [("id", "in", cars.ids)], + "res_model": "fleet.vehicle.assignation.log", + "views": [[False, "tree"], [False, "form"]], + "domain": [("driver_employee_id", "in", self.ids)], "context": dict(self._context, create=False), "name": "History Employee Cars", } def _compute_employee_cars_count(self): + rg = self.env['fleet.vehicle.assignation.log'].read_group([ + ('driver_employee_id', 'in', self.ids), + ], ['driver_employee_id'], ['driver_employee_id']) + cars_count = {r['driver_employee_id'][0]: r['driver_employee_id_count'] for r in rg} for employee in self: - employee.employee_cars_count = len(employee.car_ids) - - def action_get_claim_report(self): - self.ensure_one() - return { - 'name': 'Claim Report', - 'type': 'ir.actions.act_url', - 'url': '/fleet/print_claim_report/%(employee_id)s' % {'employee_id': self.id}, - } + employee.employee_cars_count = cars_count.get(employee.id, 0) @api.constrains('address_home_id') def _check_address_home_id(self): diff --git a/addons/hr_fleet/models/fleet_vehicle_assignation_log.py b/addons/hr_fleet/models/fleet_vehicle_assignation_log.py index 343d24dcccf..b67866980ab 100644 --- a/addons/hr_fleet/models/fleet_vehicle_assignation_log.py +++ b/addons/hr_fleet/models/fleet_vehicle_assignation_log.py @@ -1,15 +1,23 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models class FleetVehicleAssignationLog(models.Model): _inherit = 'fleet.vehicle.assignation.log' - driver_employee_id = fields.Many2one(related="vehicle_id.driver_employee_id", string='Driver (Employee)') + driver_employee_id = fields.Many2one('hr.employee', string='Driver (Employee)', compute='_compute_driver_employee_id', store=True, readonly=False) attachment_number = fields.Integer('Number of Attachments', compute='_compute_attachment_number') + @api.depends('driver_id') + def _compute_driver_employee_id(self): + employees = self.env['hr.employee'].search([('address_home_id', 'in', self.driver_id.ids)]) + + for log in self: + employee = employees.filtered(lambda e: e.address_home_id.id == log.driver_id.id) + log.driver_employee_id = employee and employee[0] or False + def _compute_attachment_number(self): attachment_data = self.env['ir.attachment'].read_group([ ('res_model', '=', 'fleet.vehicle.assignation.log'), diff --git a/addons/hr_fleet/models/res_users.py b/addons/hr_fleet/models/res_users.py index 1084d89bc94..ff4682a7303 100644 --- a/addons/hr_fleet/models/res_users.py +++ b/addons/hr_fleet/models/res_users.py @@ -13,8 +13,5 @@ class User(models.Model): def SELF_READABLE_FIELDS(self): return super().SELF_READABLE_FIELDS + ['employee_cars_count'] - def action_get_claim_report(self): - return self.employee_id.action_get_claim_report() - def action_open_employee_cars(self): return self.employee_id.action_open_employee_cars() diff --git a/addons/hr_fleet/views/employee_views.xml b/addons/hr_fleet/views/employee_views.xml index 29f38118168..ee388afa7bb 100644 --- a/addons/hr_fleet/views/employee_views.xml +++ b/addons/hr_fleet/views/employee_views.xml @@ -6,17 +6,10 @@ hr.employee - - - + attrs="{'invisible': [('employee_cars_count', '=', 0)]}"> @@ -46,14 +39,6 @@ res.users - - - fleet.vehicle.assignation.log - - - -