Merge pull request #1684 from expsa/zen_request_vehicle

add menuitem Request vehicle authorization
This commit is contained in:
mazenmuhamad 2024-11-04 12:45:53 +02:00 committed by GitHub
commit b385fd9fe2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 509 additions and 277 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,54 +1,72 @@
from odoo import models, fields, api, _
import logging
from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
class VehicleDelegation(models.Model):
class RequestVehicleDelegation(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)]")
employee_id = fields.Many2one('hr.employee', string="Driver",default=lambda item: item.get_user_id(),
tracking=True)
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('Direct_manager', 'Direct manager'),
('direct_manager', 'Direct manager'),
('refused', 'Refused'),
('fleet_tool', 'Fleet tool'),
], default='draft')
], 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)
license_end = fields.Date(string="License End")
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", )
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_plate = fields.Char(required=True, related='vehicle_id.license_plate', store=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, )
fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type", related='vehicle_id.fleet_type_id', store=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")
end_date = fields.Date(string="End Date")
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')
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')
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)
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')
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")
departments_id= fields.Many2one('hr.department')
@api.model
def _get_delegated_vehicle_ids(self):
delegated_vehicles = self.env['vehicle.delegation'].search([
('state', 'in', ['draft', 'confirm', 'approve', 'in_progress'])
])
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:
return employee_id.id
else:
return False
@api.depends("vehicle_id")
def get_first_odometer(self):
@ -86,18 +104,6 @@ class VehicleDelegation(models.Model):
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 {
@ -111,20 +117,18 @@ class VehicleDelegation(models.Model):
'context': {'default_delegation_id': self.id},
}
# def action_close(self):
# for rec in self:
# rec.state = 'close'
def Direct_manager(self):
def direct_manager(self):
for rec in self:
rec.state = 'Direct_manager'
rec.state = 'direct_manager'
def fleet_tool(self):
payment_vals = {
vehicle_vals = {
'employee_id': self.employee_id.id,
'name': self.name,
'delegation_type': self.delegation_type,
'delegation_type': 'driver',
'license_number': self.license_number,
'license_end': self.license_end,
'vehicle_id': self.vehicle_id.id,
@ -138,17 +142,17 @@ class VehicleDelegation(models.Model):
'last_project_id': self.last_project_id.id if self.last_project_id else False,
'last_branch_id': self.last_branch_id.id,
'custody_id': self.custody_id.id if self.custody_id else False,
'departments_id': self.departments_id.id if self.departments_id else False,
'request_vehicle_authorization': self.id
}
print("qqqqqqqqqqqqqqq",payment_vals)
_logger.info("Attempting to create vehicle delegation with values: %s", payment_vals)
_logger.info("Attempting to create vehicle delegation with values: %s", vehicle_vals)
payment = self.env['vehicle.delegation'].create(payment_vals)
print("aaaaaaaaaaaaaaaaaaaaaaaaaaa",payment)
_logger.info("Created vehicle delegation: %s", payment)
vehicle = self.env['vehicle.delegation'].create(vehicle_vals)
_logger.info("Created vehicle delegation: %s", vehicle)
self.state = "fleet_tool"
return payment
return vehicle
class InheritVehicleDelegation(models.Model):

View File

@ -11,6 +11,7 @@ class VehicleDelegation(models.Model):
name = fields.Char(string="Name")
branch_id = fields.Many2one('res.branch', string="Branch",related="driver_department.branch_id")
departments_id = fields.Many2one('hr.department')
old_branch_id = fields.Many2one('res.branch', string="Old Branch")
employee_id = fields.Many2one('hr.employee', string="Driver",
domain="[('driver', '=', True),('vehicle_id', '=', False)]")

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<delete model="ir.rule" id="fleet.fleet_rule_contract_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_service_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_odometer_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_vehicle_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_contract_visibility_manager"/>
<delete model="ir.rule" id="fleet.fleet_rule_service_visibility_manager"/>
<delete model="ir.rule" id="fleet.fleet_rule_odometer_visibility_manager"/>
<delete model="ir.rule" id="fleet.fleet_rule_contract_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_service_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_odometer_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_vehicle_visibility_user"/>
<delete model="ir.rule" id="fleet.fleet_rule_contract_visibility_manager"/>
<delete model="ir.rule" id="fleet.fleet_rule_service_visibility_manager"/>
<delete model="ir.rule" id="fleet.fleet_rule_odometer_visibility_manager"/>
<record id="fleet_group_supervisor" model="res.groups">
<field name="name">Fleet Supervisor</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
@ -52,11 +52,77 @@
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="hr_employee_fleet" model="ir.rule">
<field name="name">Fleet Hr</field>
<field ref="hr.model_hr_employee" name="model_id"/>
<field name="domain_force">[('driver','=',True)]</field>
<field name="groups" eval="[(4, ref('fleet.fleet_group_user')),(4, ref('fleet_group_hr_officer'))]"/>
</record>
<record id="hr_employee_fleet" model="ir.rule">
<field name="name">Fleet Hr</field>
<field ref="hr.model_hr_employee" name="model_id"/>
<field name="domain_force">[('driver','=',True)]</field>
<field name="groups" eval="[(4, ref('fleet.fleet_group_user')),(4, ref('fleet_group_hr_officer'))]"/>
</record>
<record id="rule_security_groups_rule_by_user" model="ir.rule">
<field name="name">request.vehicle.authorization.by.user</field>
<field name="model_id" ref="model_request_vehicle_authorization"/>
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_unlink" eval="1"/>
<field name="domain_force">[('create_uid', '=', user.id)]</field>
</record>
<!-- <record id="model_request_vehicle_authorization" model="ir.model">-->
<!-- <field name="name">request.vehicle.authorization</field>-->
<!-- <field name="info">Vehicle Authorization Request</field>-->
<!-- <field name="model">request.vehicle.authorization</field>-->
<!-- <field name="state">manual</field>-->
<!-- </record>-->
<!-- &lt;!&ndash; إضافة صلاحية جديدة &ndash;&gt;-->
<!-- <record id="access_request_vehicle_authorization" model="ir.model.access">-->
<!-- <field name="name">access_request_vehicle_authorization</field>-->
<!-- <field name="model_id" ref="model_request_vehicle_authorization"/>-->
<!-- <field name="group_id" ref="base.group_user"/>-->
<!-- <field name="perm_read" eval="1"/>-->
<!-- <field name="perm_write" eval="1"/>-->
<!-- <field name="perm_create" eval="1"/>-->
<!-- <field name="perm_unlink" eval="0"/>-->
<!-- </record>-->
<record id="group_hr_user" model="res.groups">
<field name="name">user</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="group_direct_manager" model="res.groups">
<field name="name">direct manager</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="group_fleet_tool" model="res.groups">
<field name="name">fleet tool</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="fleet_tool_access_rule" model="ir.rule">
<field name="name">Fleet Tool Full Access</field>
<field name="model_id" ref="model_request_vehicle_authorization"/>
<field name="groups" eval="[(4, ref('odex_fleet.group_fleet_tool'))]"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
<!-- <record id="access_direct_manager" model="ir.rule">-->
<!-- <field name="name">Direct Manager Access</field>-->
<!-- <field name="model_id" ref="model_request_vehicle_authorization"/>-->
<!-- <field name="domain_force">[('employee_id.parent_id.user_id', '=', user.id)]</field>-->
<!-- <field name="groups_id" eval="[(4, ref('odex25_fleet.group_direct_manager'))]"/>-->
<!-- </record>-->
<record id="request_rule_direct_manager" model="ir.rule">
<field name="name">Department Manager</field>
<field name="model_id" ref="odex_fleet.model_request_vehicle_authorization"/>
<field name="domain_force">[('department_id.manager_id.user_id','in', [user.id])]</field>
<field name="groups"
eval="[ (4, ref('odex_fleet.group_direct_manager'))]"/>
</record>
</data>
</odoo>

View File

@ -7,13 +7,25 @@
<field name="arch" type="xml">
<form string="Vehicle">
<header>
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight" states="draft"/>
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight"
states="draft" attrs="{'invisible': [('state', '!=', 'draft')]}"
groups="odex_fleet.group_hr_user,odex_fleet.group_fleet_tool,odex_fleet.group_direct_manager"/>
<button name="direct_manager" string="Direct manager" type="object" class="oe_highlight"
states="confirm" groups="odex_fleet.group_direct_manager,odex_fleet.group_fleet_tool"/>
<button name="action_refuse" type="object" states="confirm"
class="oe_highlight" string="Refuse"/>
<button name="Direct_manager" string="Direct manager" type="object" class="oe_highlight"
states="confirm"/>
class="oe_highlight" string="Refuse"
groups="odex_fleet.group_direct_manager,odex_fleet.group_fleet_tool"/>
<button name="fleet_tool" string="Fleet tool" type="object" class="oe_highlight"
states="Direct_manager"/>
states="direct_manager" groups="odex_fleet.group_fleet_tool"/>
<button name="action_refuse" type="object" states="direct_manager"
class="oe_highlight" string="Refuse" ttrs="{'invisible': [('state', '=', 'fleet_tool')]}"
groups="odex_fleet.group_fleet_tool"/>
<field name="state" widget="statusbar"/>
</header>
<sheet>
@ -22,38 +34,39 @@
<field name="from_hr_depart" string="Another Employee"/>
</group>
<group col="4" colspan="2" string="Employee Information">
<field name="employee_id" string="Employee Name"
attrs="{'readonly': [('from_hr_depart', '=', False)]}"/>
attrs="{'readonly': [('from_hr_depart', '=', False), ('state', '!=', 'confirm')]}"/>
<field name="license_number" readonly="1" force_save="1"/>
<field name="license_end" readonly="1" force_save="1"/>
<field name="custody_id" invisible="1"/>
<field name="name"/>
<!-- <field name="custody_id" invisible="1"/>-->
<field name="departments_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
</group>
<div class="oe_title">
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id"/>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="name" invisible="1"/>
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
<field name="start_date"/>
<field name="end_date"/>
<field name="last_department_id"/>
<field name="start_date"
attrs="{'readonly': [('state', '!=', 'draft')], 'required': [('state', '=', 'draft')]}"/>
<field name="end_date"
attrs="{'readonly': [('state', '!=', 'draft')], 'required': [('state', '=', 'draft')]}"/>
<field name="last_department_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="last_project_id" invisible="1"/>
<field name="last_branch_id"/>
<field name="vin_sn"/>
<field name="last_branch_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="vin_sn" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="model_id" readonly="1" force_save="1"/>
<field name="license_plate" readonly="1" force_save="1"/>
<field name="serial_number" readonly="1" force_save="1"/>
<field name="fleet_type_id" readonly="1" force_save="1"/>
<field name="first_odometer"/>
<field name="first_odometer" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="odometer" readonly="1" force_save="1"/>
<field name="km_number" readonly="1" force_save="1"/>
<field name="delegation_type" invisible="1"/>
</group>
</group>
</sheet>
<div class="oe_chatter">
@ -69,7 +82,10 @@
<field name="model">request.vehicle.authorization</field>
<field name="arch" type="xml">
<tree>
<field name="start_date"/>
<field name="employee_id"/>
<field name="vehicle_id"/>
<field name="departments_id"/>
</tree>
</field>
</record>

View File

@ -24,7 +24,7 @@
</h1>
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
@ -48,6 +48,7 @@
<field name="license_number" readonly="1" force_save="1"/>
<field name="license_end" readonly="1" force_save="1"/>
<field name="custody_id" invisible="1"/>
<field name="departments_id" attrs="{'invisible': [('departments_id', '=', False)]}"/>
</group>
<group col="4" colspan="2" string="delegated entity" attrs="{'invisible': [('delegation_type', '!=', 'branch')]}">
<!-- <field name="state_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':[('delegation_type', '=', 'branch')]}" />-->

View File

@ -12,8 +12,9 @@ class RejectReasonFleet(models.TransientModel):
request_id = fields.Many2one('fleet.quotation')
def action_reject(self):
if self.delegation_id:
self.delegation_id.sudo().write({
if self._context.get('active_model')=='request.vehicle.authorization':
delegation_id = self.env[self._context.get('active_model')].browse(self._context.get('active_id'))
delegation_id.sudo().write({
'state': 'refused',
'reason': self.reason
})