Delete odex25_fleet directory

This commit is contained in:
شركة خبير المحدودة 2024-10-15 15:25:21 +03:00 committed by GitHub
parent 9523e1a5bf
commit 22cad40ada
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
66 changed files with 0 additions and 11314 deletions

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
{
'name': "odex25_fleet_account_custom",
'summary': """ Customize Integration between fleet and account""",
'description': """
Customize Integration between fleet and account by separate them with boolean field in setting
""",
'author': "My Company",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/11.0/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['fleet','odex_fleet'],
# always loaded
'data': [
'security/security_view.xml',
'views/fleet_views.xml'
],
# only loaded in demonstration mode
# 'demo': [
# # 'demo/demo.xml',
# ],
}

View File

@ -1,112 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * odex25_fleet_account_custom
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-13 11:47+0000\n"
"PO-Revision-Date: 2024-05-13 11:47+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: odex25_fleet_account_custom
#: model:ir.model,name:odex25_fleet_account_custom.model_res_config_settings
msgid "Config Settings"
msgstr "ضبط الاعدادات"
#. module: odex25_fleet_account_custom
#: model:res.groups,name:odex25_fleet_account_custom.disable_integration_with_account
msgid "Disable Integration With Account"
msgstr ""
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance__display_name
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel__display_name
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services__display_name
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_form_renew__display_name
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_res_config_settings__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: odex25_fleet_account_custom
#: model:ir.model,name:odex25_fleet_account_custom.model_fleet_maintenance
msgid "Fleet Maintenance"
msgstr "صيانة المركبات"
#. module: odex25_fleet_account_custom
#: model:ir.model,name:odex25_fleet_account_custom.model_form_renew
msgid "Forn Renew"
msgstr ""
#. module: odex25_fleet_account_custom
#: model:ir.model,name:odex25_fleet_account_custom.model_fleet_vehicle_log_fuel
msgid "Fuel log for vehicles"
msgstr "سجل الوقود للمركبات"
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance__id
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel__id
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services__id
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_form_renew__id
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_res_config_settings__id
msgid "ID"
msgstr "المُعرف"
#. module: odex25_fleet_account_custom
#: model:res.groups,name:odex25_fleet_account_custom.integration_with_account
msgid "Integration With Account"
msgstr ""
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance__integration_with_accounting
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel__integration_with_accounting
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services__integration_with_accounting
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_form_renew__integration_with_accounting
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_res_config_settings__integration_with_accounting_configuration
#: model_terms:ir.ui.view,arch_db:odex25_fleet_account_custom.res_config_settings_inherit
msgid "Integration With Accounting"
msgstr "تكامل مع المالية"
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance____last_update
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel____last_update
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services____last_update
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_form_renew____last_update
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_res_config_settings____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: odex25_fleet_account_custom
#: model:ir.model,name:odex25_fleet_account_custom.model_fleet_vehicle_log_services
msgid "Services for vehicles"
msgstr "الخدمات للمركبات"
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel__state_a
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_fuel__state_b
msgid "State"
msgstr ""
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services__status_a
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_vehicle_log_services__status_b
msgid "Status"
msgstr ""
#. module: odex25_fleet_account_custom
#: code:addons/odex25_fleet_account_custom/models/models.py:0
#, python-format
msgid "You Need Approve Quotation First"
msgstr ""
#. module: odex25_fleet_account_custom
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance__state_a
#: model:ir.model.fields,field_description:odex25_fleet_account_custom.field_fleet_maintenance__state_b
msgid "state"
msgstr ""

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -1,95 +0,0 @@
from odoo import api,fields, models ,_
from odoo.exceptions import UserError, ValidationError
class FleetFuel(models.Model):
_inherit = 'fleet.vehicle.log.fuel'
integration_with_accounting = fields.Boolean(string='Integration With Accounting',compute="get_integ")
state_a = fields.Selection(related='state')
state_b = fields.Selection(related='state')
@api.depends("vehicle_id")
def get_integ(self):
config = self.env["res.config.settings"].sudo().search([], limit=1, order="id desc")
self.integration_with_accounting = config.integration_with_accounting_configuration
class FleetMaintenance(models.Model):
_inherit = 'fleet.maintenance'
integration_with_accounting = fields.Boolean(string='Integration With Accounting',compute="get_integ")
state_a = fields.Selection(related='state')
state_b = fields.Selection(related='state')
@api.depends("vehicle_id")
def get_integ(self):
config = self.env["res.config.settings"].sudo().search([],limit=1 ,order ="id desc")
self.integration_with_accounting = config.integration_with_accounting_configuration
def action_approve(self):
for rec in self:
record = rec.quotation_ids.sudo().filtered(lambda r: r.approve == True)
if not record and rec.integration_with_accounting == True:
raise ValidationError(_("You Need Approve Quotation First"))
else:
print("no Validation")
rec.state = 'approve'
rec.vehicle_id.next_request_date = rec.next_request_date
class FormRenew(models.Model):
_inherit = 'form.renew'
integration_with_accounting = fields.Boolean(string='Integration With Accounting',compute="get_integ")
@api.depends("vehicle_id")
def get_integ(self):
config = self.env["res.config.settings"].sudo().search([],limit=1 ,order ="id desc")
self.integration_with_accounting = config.integration_with_accounting_configuration
class FleetServices(models.Model):
_inherit = 'fleet.vehicle.log.services'
integration_with_accounting = fields.Boolean(string='Integration With Accounting',compute="get_integ")
status_a = fields.Selection(related='status')
status_b = fields.Selection(related='status')
@api.depends("vehicle_id")
def get_integ(self):
config = self.env["res.config.settings"].sudo().search([],limit=1 ,order ="id desc")
self.integration_with_accounting = config.integration_with_accounting_configuration
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
integration_with_accounting_configuration = fields.Boolean(string='Integration With Accounting',config_parameter='odex25_fleet_account_custom.integration_with_accounting_configuration')
@api.depends('integration_with_accounting_configuration')
def _compute_integration_with_accounting(self):
group1 = self.env.ref('odex25_fleet_account_custom.integration_with_account')
group2 = self.env.ref('odex25_fleet_account_custom.disable_integration_with_account')
for record in self:
if record.integration_with_accounting_configuration == True:
group1.write({'users': [(4, self.env.user.id)]})
group2.write({'users': [(3, self.env.user.id)]})
else:
group1.write({'users': [(3, self.env.user.id)]})
group2.write({'users': [(4, self.env.user.id)]})
@api.model
def create(self, values):
# Call the create method of the superclass
record = super(ResConfigSettings, self).create(values)
# Call the dependency computation method to perform the desired actions
record._compute_integration_with_accounting()
return record
def write(self, values):
# Call the write method of the superclass
result = super(ResConfigSettings, self).write(values)
# Call the dependency computation method to perform the desired actions
self._compute_integration_with_accounting()
return result

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="integration_with_account" model="res.groups">
<field name="name">Integration With Account</field>
</record>
<record id="disable_integration_with_account" model="res.groups">
<field name="name">Disable Integration With Account</field>
</record>
</data>
</odoo>

View File

@ -1,159 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- inherit fleet vehicle fuel case disable integration_with_account -->
<record id="fleet_vehicle_fuel_inherit" model="ir.ui.view">
<field name="name">fleet.vehicle.log.fuel.inherit</field>
<field name="model">fleet.vehicle.log.fuel</field>
<field name="inherit_id" ref="odex_fleet.odex_fleet_vehicle_log_fuel_view_form"/>
<field name="groups_id" eval="[(6, 0, [ref('odex25_fleet_account_custom.disable_integration_with_account')])]" />
<field name="arch" type="xml">
<xpath expr="//field[@name='vehicle_id']" position="before">
<field name="integration_with_accounting" invisible="1"></field>
</xpath>
<xpath expr="//field[@name='account_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='tax_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='invoice_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='inv_ref']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='create_invoice']" position="attributes">
<attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="after">
<field name="state_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>
<field name="state_b" widget="statusbar" statusbar_visible="draft,confirm,approve,invoiced,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>
</xpath>
</field>
</record>
<record id="fleet_maintenance_inherit" model="ir.ui.view">
<field name="name">fleet.maintenance.inherit</field>
<field name="model">fleet.maintenance</field>
<field name="inherit_id" ref="odex_fleet.fleet_request_maintenance_view_form"/>
<field name="groups_id" eval="[(6, 0, [ref('odex25_fleet_account_custom.disable_integration_with_account')])]" />
<field name="arch" type="xml">
<xpath expr="//field[@name='vehicle_id']" position="before">
<field name="integration_with_accounting" invisible="1"></field>
</xpath>
<xpath expr="//field[@name='account_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='tax_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='invoice_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='action_paid']" position="attributes">
<attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="after">
<field name="state_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>
<field name="state_b" widget="statusbar" statusbar_visible="draft,confirm,approve,paid,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>
</xpath>
</field>
</record>
<record id="fleet_vehicle_services_inherit" model="ir.ui.view">
<field name="name">fleet.vehicle.log.services.inherit</field>
<field name="model">fleet.vehicle.log.services</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_form"/>
<field name="groups_id" eval="[(6, 0, [ref('odex25_fleet_account_custom.disable_integration_with_account')])]" />
<field name="arch" type="xml">
<xpath expr="//field[@name='vehicle_id']" position="before">
<field name="integration_with_accounting" invisible="1"></field>
</xpath>
<xpath expr="//button[@name='create_invoice']" position="attributes">
<attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>
</xpath>
<xpath expr="//field[@name='account_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='invoice_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='status']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='status']" position="after">
<field name="status_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>
<field name="status_b" widget="statusbar" statusbar_visible="draft,confirm,approve,invoiced,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>
</xpath>
</field>
</record>
<record id="fleet_form_renew_inherit" model="ir.ui.view">
<field name="name">form.renew.inherit</field>
<field name="model">form.renew</field>
<field name="inherit_id" ref="odex_fleet.fleet_form_renew_view_form"/>
<field name="groups_id" eval="[(6, 0, [ref('odex25_fleet_account_custom.disable_integration_with_account')])]" />
<field name="arch" type="xml">
<xpath expr="//field[@name='vehicle_id']" position="before">
<field name="integration_with_accounting" invisible="1"></field>
</xpath>
<xpath expr="//field[@name='account_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='tax_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='invoice_id']" position="attributes">
<attribute name="required">0</attribute>
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>
<record id="res_config_settings_inherit" model="ir.ui.view">
<field name="name">res.config.settings.inherit</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="fleet.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='end_contract_setting']" position="after">
<h2>Integration With Accounting</h2>
<div class="row mt16 o_settings_container" name="integration_configuration">
<div id="integration_configuration"
class="col-12 col-lg-6 o_setting_box"
title="Integration With Accounting">
<div class="o_setting_right_pane">
<label for="integration_with_accounting_configuration"/>
<div class="content-group">
<div class="mt16">
<field name="integration_with_accounting_configuration"
class="o_light_label" />
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record model="ir.ui.menu" id="odex_fleet.fleet_account_config">
<field name="groups_id" eval="[(6,0,[ref('odex25_fleet_account_custom.integration_with_account')])]" />
</record>
</odoo>

View File

@ -1,143 +0,0 @@
<!--<?xml version="1.0" encoding="utf-8" ?>-->
<!--<odoo>-->
<!-- &lt;!&ndash; inherit fleet vehicle fuel &ndash;&gt;-->
<!-- <record id="fleet_vehicle_fuel_inherit" model="ir.ui.view">-->
<!-- <field name="name">fleet.vehicle.log.fuel.inherit</field>-->
<!-- <field name="model">fleet.vehicle.log.fuel</field>-->
<!-- <field name="inherit_id" ref="odex_fleet.odex_fleet_vehicle_log_fuel_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='vehicle_id']" position="before">-->
<!-- <field name="integration_with_accounting" invisible="1"></field>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='account_id']" position="attributes">-->
<!-- <attribute name="attrs">{'required': [('integration_with_accounting', '!=', False)]}</attribute>-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='tax_id']" position="attributes">-->
<!-- <attribute name="required">0</attribute>-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='invoice_id']" position="attributes">-->
<!-- <attribute name="attrs">{'required': [('integration_with_accounting', '!=', False)]}</attribute>-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='inv_ref']" position="attributes">-->
<!-- <attribute name="attrs">{'required': [('integration_with_accounting', '=', True)]}</attribute>-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//button[@name='create_invoice']" position="attributes">-->
<!-- <attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='state']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='state']" position="after">-->
<!-- <field name="state_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>-->
<!-- <field name="state_b" widget="statusbar" statusbar_visible="draft,confirm,approve,invoiced,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="fleet_maintenance_inherit" model="ir.ui.view">-->
<!-- <field name="name">fleet.maintenance.inherit</field>-->
<!-- <field name="model">fleet.maintenance</field>-->
<!-- <field name="inherit_id" ref="odex_fleet.fleet_request_maintenance_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='vehicle_id']" position="before">-->
<!-- <field name="integration_with_accounting" invisible="1"></field>-->
<!-- </xpath>-->
<!-- <xpath expr="//button[@name='action_paid']" position="attributes">-->
<!-- <attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='state']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='state']" position="after">-->
<!-- <field name="state_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>-->
<!-- <field name="state_b" widget="statusbar" statusbar_visible="draft,confirm,approve,paid,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="fleet_vehicle_services_inherit" model="ir.ui.view">-->
<!-- <field name="name">fleet.vehicle.log.services.inherit</field>-->
<!-- <field name="model">fleet.vehicle.log.services</field>-->
<!-- <field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='vehicle_id']" position="before">-->
<!-- <field name="integration_with_accounting" invisible="1"></field>-->
<!-- </xpath>-->
<!-- <xpath expr="//button[@name='create_invoice']" position="attributes">-->
<!-- <attribute name="groups">odex25_fleet_account_custom.integration_with_account</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='account_id']" position="attributes">-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}-->
<!-- </attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='invoice_id']" position="attributes">-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}-->
<!-- </attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='status']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='status']" position="after">-->
<!-- <field name="status_a" widget="statusbar" statusbar_visible="draft,confirm,approve,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', False)]}"/>-->
<!-- <field name="status_b" widget="statusbar" statusbar_visible="draft,confirm,approve,invoiced,refused,cancel" attrs="{'invisible': [('integration_with_accounting','!=', True)]}"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="fleet_form_renew_inherit" model="ir.ui.view">-->
<!-- <field name="name">form.renew.inherit</field>-->
<!-- <field name="model">form.renew</field>-->
<!-- <field name="inherit_id" ref="odex_fleet.fleet_form_renew_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='vehicle_id']" position="before">-->
<!-- <field name="integration_with_accounting" invisible="1"></field>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='account_id']" position="attributes">-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}-->
<!-- </attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='tax_id']" position="attributes">-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}-->
<!-- </attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='invoice_id']" position="attributes">-->
<!-- <attribute name="attrs">{'invisible': [('integration_with_accounting', '=', False)]}-->
<!-- </attribute>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="res_config_settings_inherit" model="ir.ui.view">-->
<!-- <field name="name">res.config.settings.inherit</field>-->
<!-- <field name="model">res.config.settings</field>-->
<!-- <field name="inherit_id" ref="fleet.res_config_settings_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//div[@id='end_contract_setting']" position="after">-->
<!-- <h2>Integration With Accounting</h2>-->
<!-- <div class="row mt16 o_settings_container" name="integration_configuration">-->
<!-- <div id="integration_configuration"-->
<!-- class="col-12 col-lg-6 o_setting_box"-->
<!-- title="Integration With Accounting">-->
<!-- <div class="o_setting_right_pane">-->
<!-- <label for="integration_with_accounting_configuration"/>-->
<!-- <div class="content-group">-->
<!-- <div class="mt16">-->
<!-- <field name="integration_with_accounting_configuration"-->
<!-- class="o_light_label" />-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record model="ir.ui.menu" id="odex_fleet.fleet_account_config">-->
<!-- <field name="groups_id" eval="[(6,0,[ref('odex25_fleet_account_custom.integration_with_account')])]" />-->
<!-- </record>-->
<!--</odoo>-->

View File

@ -1,2 +0,0 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
{
'name': "Odex25 Nnadi Fleet Custom",
'summary': """
add new field relational employee in fleet vehicle model""",
'description': """
add new field relational employee in fleet vehicle model """,
'author': "My Company",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/15.0/odoo/addons/base/data/ir_module_category_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base','fleet'],
# always loaded.....
'data': [
'views/views.xml',
],
}

View File

@ -1,43 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * odex25_nadi_custom
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-12 09:18+0000\n"
"PO-Revision-Date: 2023-12-12 09:18+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: odex25_nadi_custom
#: model:ir.model.fields,field_description:odex25_nadi_custom.field_fleet_vehicle__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: odex25_nadi_custom
#: code:addons/odex25_nadi_custom/models/models.py:0
#: model:ir.model.fields,field_description:odex25_nadi_custom.field_fleet_vehicle__employee_id
#, python-format
msgid "Employee"
msgstr "الفني المكلف بالصيانة"
#. module: odex25_nadi_custom
#: model:ir.model.fields,field_description:odex25_nadi_custom.field_fleet_vehicle__id
msgid "ID"
msgstr "المُعرف"
#. module: odex25_nadi_custom
#: model:ir.model.fields,field_description:odex25_nadi_custom.field_fleet_vehicle____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: odex25_nadi_custom
#: model:ir.model,name:odex25_nadi_custom.model_fleet_vehicle
msgid "Vehicle"
msgstr "المركبة"

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -1,6 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api,_
class Fleet(models.Model):
_inherit = 'fleet.vehicle'
employee_maintenance_id = fields.Many2one(comodel_name='hr.employee',string=_('Employee'))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,13 +0,0 @@
<odoo>
<!-- Inherit Form View to fleet Modify it -->
<record id="fleet_form_extend" model="ir.ui.view">
<field name="name">fleet.form.inherit0</field>
<field name="model">fleet.vehicle</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='vin_sn']" position="after">
<field name="employee_maintenance_id"/>
</xpath>
</field>
</record>
</odoo>

View File

@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
from .import models
from .import wizards
from .import reports

View File

@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
{
'name': "Odex Fleet",
'summary': """
Manage Fleet and Reports""",
'description': """
Manage Fleet and Reports
""",
'author': "Expert Co Ltd",
'website': "http://www.ex.com",
'category': 'fleet',
'version': '0.1',
'depends': ['fleet','branch','hr_base'],
# 'exp_custody_petty_cash',
# 'bi_odoo_multi_branch_hr'
# 'hr_base'
'data': [
'security/security_view.xml',
'security/ir.model.access.csv',
'views/vehicle_view.xml',
'views/vehicle_deleation_view.xml',
'views/driver_view.xml',
'views/maintenance_request_view.xml',
'views/renew_view.xml',
'views/config_view.xml',
'views/account_config_view.xml',
'data/cron_data.xml',
'views/mail_template.xml',
'wizards/fleet_view.xml',
'reports/fleet_template.xml',
'reports/maintains_template.xml',
'reports/driver_template.xml',
'reports/renew_template.xml',
'reports/service_template.xml',
'reports/maintains_purchase_request.xml',
'reports/service_purchase_request.xml',
'wizards/reject_reason.xml',
'views/insurance_companies.xml',
'views/infractions.xml',
'wizards/reject_reason_infraction.xml',
'views/driver_departments.xml',
]
}

View File

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record id="ir_cron_data_check_driver_expiry" model="ir.cron">
<field name="name">Check Driver Expiry</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">model.driver_expired_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_data_check_fleet_expiry" model="ir.cron">
<field name="name">Check Fleet Expiry</field>
<field name="model_id" ref="fleet.model_fleet_vehicle"/>
<field name="state">code</field>
<field name="code">model.fleet_expired_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_data_check_fleet_maintenance" model="ir.cron">
<field name="name">Check Fleet Maintenance</field>
<field name="model_id" ref="model_fleet_service_line_config"/>
<field name="state">code</field>
<field name="code">model.fleet_maintenance_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_data_check_delegation_expiry" model="ir.cron">
<field name="name">Check Delegation Expiry</field>
<field name="model_id" ref="odex_fleet.model_vehicle_delegation"/>
<field name="state">code</field>
<field name="code">model.delegation_expired_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_data_check_delegation_start" model="ir.cron">
<field name="name">Check Delegation Start</field>
<field name="model_id" ref="odex_fleet.model_vehicle_delegation"/>
<field name="state">code</field>
<field name="code">model.delegation_start_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_data_check_delegation_close" model="ir.cron">
<field name="name">Check Delegation Close</field>
<field name="model_id" ref="odex_fleet.model_vehicle_delegation"/>
<field name="state">code</field>
<field name="code">model.delegation_close_cron()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
</data>
</odoo>

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +0,0 @@
from . import driver
from . import vehicle
from . import vehicle_deleation
from . import maintenance_request
from . import res_config
from . import form_renew
from . import account_config
from . import insurance_companies
from . import infractions
from . import driver_departments
from . import fleet_service_type

View File

@ -1,32 +0,0 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
from dateutil.relativedelta import relativedelta
class AccountConfigFleet(models.Model):
_name = 'fleet.account.config'
_description = 'Fleet Cost'
name = fields.Char(string="Name")
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('close', 'Close')
],default='draft')
type = fields.Selection(selection=[('fuel', 'Fuel'),
('service', 'Service'),
('form', 'Form'),
('maintenance', 'Maintenance'),
],)
account_id = fields.Many2one('account.account', string="Account")
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
def action_confirm(self):
rec = self.env['fleet.account.config'].sudo().search([('id','!=',self.id),('type','=',self.type),('state','=','confirm')])
if rec:
raise ValidationError(_("You can not Have More than one Confirm record "))
self.state = 'confirm'
def action_close(self):
self.state = 'close'

View File

@ -1,52 +0,0 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
from dateutil.relativedelta import relativedelta
class HRCustom(models.Model):
_inherit = 'hr.employee'
driver = fields.Boolean(string="Is Driver")
license_type = fields.Selection(selection=[('private', 'Private'), ('general', 'General'), ('public', 'Public')],
string="License Type")
license_number = fields.Char(string="License Number")
license_start = fields.Date(string="License Start")
license_end = fields.Date(string="License End")
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle")
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)
license_attache = fields.Binary(string="License Attachment")
employee_cars_count = fields.Integer(compute="_compute_employee_cars_count", string="Cars",groups="base.group_user")
def _compute_employee_cars_count(self):
driver_ids = (self.mapped('user_id.partner_id') | self.sudo().mapped('address_home_id')).ids
fleet_data = self.env['fleet.vehicle.assignation.log'].read_group(
domain=[('driver_id', 'in', driver_ids)], fields=['vehicle_id:array_agg'], groupby=['driver_id'])
mapped_data = {
group['driver_id'][0]: len(set(group['vehicle_id']))
for group in fleet_data
}
for employee in self:
drivers = employee.user_id.partner_id | employee.sudo().address_home_id
employee.employee_cars_count = sum(mapped_data.get(pid, 0) for pid in drivers.ids)
@api.onchange('delegation_start', 'receive_date')
def _onchange_delegation_start(self):
for r in self:
r.receive_date = r.delegation_start
@api.model
def driver_expired_cron(self):
date = datetime.now().date()
license = self.company_id.license
if license > 0:
date = date + relativedelta(days=license)
fleet = self.env['hr.employee'].sudo().search([('driver','=',True),('license_end', '<=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.driver_expiration_email_template', False)
template.send_mail(f.id)

View File

@ -1,10 +0,0 @@
from odoo import models, fields, api, _
class DriverDepartment(models.Model):
_name = 'driver.department'
# _rec_name = 'driver_department_id'
name = fields.Char('Name' , related = "department_id.name")
department_id = fields.Many2one('hr.department', string='Department')
branch_id = fields.Many2one('res.branch', string='Branch')

View File

@ -1,14 +0,0 @@
from odoo import models, fields, api, _
from odoo.api import returns
class FleetServiceType(models.Model):
_inherit = 'fleet.service.type'
_description = 'Fleet Service Type'
category = fields.Selection(selection='get_new_category_selection', string='Category', required=True,
help='Choose whether the service refer to contracts, vehicle services or both')
def get_new_category_selection(self):
selection = [(_('service'), _('Service'))]
return selection

View File

@ -1,115 +0,0 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
from dateutil.relativedelta import relativedelta
class FormRenew(models.Model):
_name = 'form.renew'
_description = 'Forn Renew'
_inherit = ['mail.thread', 'mail.activity.mixin']
@api.model
def default_get(self, default_fields):
res = super(FormRenew, self).default_get(default_fields)
rec = self.env['fleet.account.config'].sudo().search([('type', '=', 'form'), ('state', '=', 'confirm')],
limit=1)
if rec and self.env.user.has_group("odex25_fleet_account_custom.integration_with_account"):
res['account_id'] = rec.account_id.id
res['tax_id'] = rec.tax_id.id
elif self.env.user.has_group("odex25_fleet_account_custom.disable_integration_with_account"):
pass
else:
raise ValidationError(_("You Need To Configurate Account Details"))
return res
name = fields.Char(string="Name")
branch_id = fields.Many2one('res.branch', string="Branch")
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('refused', 'Refused'),
('cancel', 'Cancel'),
], default='draft')
company_id = fields.Many2one('res.company', string='Company', readonly=True,
default=lambda self: self.env.user.company_id)
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", )
cost = fields.Float(string="Renew Cost", )
date = fields.Date(string="Request Date", default=fields.Date.context_today,
help="date of current maintenance request")
user_id = fields.Many2one('res.users', string='Responsible', required=False, default=lambda self: self.env.user)
end_date = fields.Date(string="End Date")
new_date = fields.Date(string="New End Date")
branch_id = fields.Many2one('hr.department', string="Branch")
account_id = fields.Many2one('account.account', string="Account")
invoice_id = fields.Many2one('account.move', string="Invoice", copy=False)
partner_id = fields.Many2one('res.partner', string="Service Provider")
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
penalty_cost = fields.Float()
edit_access = fields.Boolean(compute="get_access", )
def get_access(self):
for rec in self:
rec.edit_access = False
if rec.state == 'confirm' and self.env.user.has_group('odex_fleet.fleet_group_account'):
rec.edit_access = True
@api.onchange('vehicle_id')
def get_fleet_data(self):
if self.vehicle_id:
self.branch_id = self.vehicle_id.branch_id.id
self.cost = self.vehicle_id.fleet_type_id.amount
self.end_date = self.vehicle_id.form_end
def create_invoice(self):
invoice = self.env['account.move'].sudo().create({
'partner_id': self.partner_id.id,
'currency_id': self.env.user.company_id.currency_id.id,
# 'account_id': self.partner_id.property_account_payable_id.id,
'branch_id': self.vehicle_id.branch_id.id,
'move_type': 'in_invoice',
'invoice_date': datetime.now().today(),
'invoice_line_ids': [(0, 0, {
'quantity': 1,
'price_unit': self.cost + self.penalty_cost,
# 'move_id': invoice.id,
'name': 'Fleet Form Renew Cost',
'account_id': self.account_id.id,
'tax_ids': [(6, 0, [self.tax_id.id])],
})]
})
# self.env['account.move.line'].with_context(check_move_validity=False).sudo().create({
# 'quantity': 1,
# 'price_unit': self.cost+self.penalty_cost,
# 'move_id': invoice.id,
# 'name': 'Fleet Form Renew Cost',
# 'account_id': self.account_id.id,
# 'tax_ids': [(6, 0, [self.tax_id.id])],
#
# })
self.invoice_id = invoice.id
# invoice.sudo().action_invoice_open()
def set_to_draft(self):
for rec in self:
rec.state = 'draft'
def action_confirm(self):
for rec in self:
rec.state = 'confirm'
def action_approve(self):
for rec in self:
rec.vehicle_id.form_end = self.new_date
rec.state = 'approve'
rec.create_invoice()
def action_refuse(self):
for rec in self:
rec.state = 'refused'
def action_cancel(self):
for rec in self:
rec.state = 'cancel'

View File

@ -1,109 +0,0 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
class Infractions(models.Model):
_name = 'vehicle.infraction'
_description = 'Vehicle Infraction'
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", )
branch_id = fields.Many2one('res.branch', string="Branch")
old_branch_id = fields.Many2one('res.branch', string="Old Branch")
start_date = fields.Date(string="Start Date")
end_date = fields.Date(string="End Date")
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, )
license_plate = fields.Char(required=True, related='vehicle_id.license_plate', store=True)
serial_number = fields.Char(related='vehicle_id.serial_number', string="Serial Number")
fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type", related='vehicle_id.fleet_type_id', store=True, )
employee_id = fields.Many2one('hr.employee', string="Driver",
domain="[('driver', '=', True),('vehicle_id', '=', False)]")
license_number = fields.Char(string="License Number", related='employee_id.license_number', store=True)
license_end = fields.Date(string="License End")
reason = fields.Text()
infraction_type = fields.Selection(selection=[('accident', 'Accident'),
('infraction', 'Infraction'),],string="Infraction Type")
infraction_number = fields.Char(string="Infraction Number")
infraction_date = fields.Date(string="Infraction Date")
infraction_cost = fields.Integer(string="Infraction Cost")
cost_percentage = fields.Integer(string="Cost Percentage%")
discount_amount = fields.Integer(string="Discount Amount", compute = "get_discount_amount", store = True)
benefits_discounts = fields.Many2one(comodel_name='hr.salary.rule', string='Benefits/Discounts')
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('in_progress', 'In Progress'),
('refused', 'Refused'),
('cancel', 'Cancel')], default='draft')
advantage_id = fields.Many2one(comodel_name='contract.advantage', string='Deduction Employee')
@api.depends('infraction_cost', 'cost_percentage')
def get_discount_amount(self):
for rec in self:
if rec.cost_percentage > 0 :
rec.discount_amount = rec.infraction_cost * rec.cost_percentage
else :
rec.discount_amount = rec.infraction_cost
# print(rec.discount_amount)
@api.onchange('start_date', 'end_date')
@api.constrains('start_date', 'end_date')
def check_data(self):
if self.start_date and self.end_date and self.start_date > self.end_date:
raise UserError(_('Start Date must be less than or equal End Date '))
@api.onchange('vehicle_id')
def get_fleet_data(self):
if self.vehicle_id:
self.old_branch_id = self.vehicle_id.branch_id.id
self.employee_id = self.vehicle_id.employee_id
self.license_number = self.vehicle_id.employee_id.license_number
self.license_end = self.vehicle_id.employee_id.license_end
@api.onchange('employee_id')
def get_emp_data(self):
self.license_end = self.employee_id.license_end
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:
rec.state = 'in_progress'
contract_move_id = rec.env['contract.advantage'].create({
'benefits_discounts': rec.benefits_discounts.id,
'date_from': rec.start_date,
'date_to': rec.end_date,
'type': 'customize',
'amount' : rec.discount_amount,
'employee_id': rec.employee_id.id,
'contract_advantage_id': rec.employee_id.contract_id.id,
'penalty_id': True,
'out_rule': True,
'state': 'draft',
})
rec.advantage_id = contract_move_id.id
def action_refuse(self):
form_view_id = self.env.ref("odex_fleet.wizard_reject_reason_infraction_form").id
return {
'name': _("Reject Reason"),
'view_mode': 'form',
'res_model': 'reject.reason.infraction.wiz',
'views': [(form_view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
'context': {'default_infraction_id': self.id},
}
def action_cancel(self):
for rec in self:
rec.sudo().state = 'cancel'

View File

@ -1,7 +0,0 @@
from odoo import models, fields, api, _
class InsuranceCompanies(models.Model):
_name = 'insurance.companies'
name = fields.Char(string='Company Name', required=True)

View File

@ -1,205 +0,0 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
class FleetMaintenance(models.Model):
_name = 'fleet.maintenance'
_description = 'Fleet Maintenance'
_inherit = ['mail.thread', 'mail.activity.mixin']
@api.model
def default_get(self, default_fields):
res = super(FleetMaintenance, self).default_get(default_fields)
rec = self.env['fleet.account.config'].sudo().search([('type', '=', 'maintenance'), ('state', '=', 'confirm')],
limit=1)
if rec and self.env.user.has_group("odex25_fleet_account_custom.integration_with_account"):
res['account_id'] = rec.account_id.id
res['tax_id'] = rec.tax_id.id
elif self.env.user.has_group("odex25_fleet_account_custom.disable_integration_with_account"):
pass
else:
raise ValidationError(_("You Need To Configurate Account Details"))
return res
name = fields.Char(string="Name")
next_request_date = fields.Date(string="Next Request Date")
date = fields.Date(string=" Request Date", default=fields.Date.context_today)
next_odometer = fields.Float(string="Next Odometer", compute='get_old_odometer', store=True)
odometer = fields.Float(string="Odometer")
type = fields.Selection([('corrective', 'Corrective'), ('preventive', 'Preventive')], string='Maintenance Type',
default="corrective")
state = fields.Selection([('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approve'),
('paid', 'Paid'),
('refused', 'Refuse'),
('cancel', 'Cancel'),
], string='state', default="draft")
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle")
license_plate = fields.Char(required=True, related='vehicle_id.license_plate')
employee_id = fields.Many2one('hr.employee', string="Driver")
quotation_ids = fields.One2many('fleet.quotation', 'request_id', string="Quotations")
service_ids = fields.One2many('fleet.quotation.service', 'request_id', string="Quotations")
branch_id = fields.Many2one('hr.department', string="Branch")
# log_id = fields.Many2one('fleet.vehicle.log.services', string="Service Log")
total_cost = fields.Float(string="Total Cost", compute="get_cost", store=True)
total1 = fields.Float(string="Total", compute="get_total", store=True)
account_id = fields.Many2one('account.account', string="Account")
invoice_id = fields.Many2one('account.move', string="Invoice", copy=False)
line_id = fields.Many2one('fleet.service.line.config', string="Line", copy=False)
reason = fields.Text(string="Reject Reason", tracking=True, )
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
user_id = fields.Many2one('res.users', string='Responsible', required=False, default=lambda self: self.env.user)
edit_access = fields.Boolean(compute="get_access", )
@api.onchange('vehicle_id')
def get_old_odometer(self):
for rec in self:
rec.next_odometer = rec.vehicle_id.odometer
def get_access(self):
for rec in self:
rec.edit_access = False
if rec.state == 'approve' and self.env.user.has_group('odex_fleet.fleet_group_account'):
rec.edit_access = True
@api.depends('service_ids')
def get_total(self):
for rec in self:
if rec.service_ids:
rec.total1 = sum(rec.service_ids.mapped('qty'))
def create_invoice(self):
partner = self.quotation_ids.filtered(lambda r: r.approve == True).mapped('partner_id')
if not partner:
raise ValidationError(_("You NEED To ADD And Approve Quotation Lines"))
amount = sum(self.quotation_ids.filtered(lambda r: r.approve == True).mapped('cost'))
invoice = self.env['account.move'].sudo().create({
'partner_id': partner[0].id,
'currency_id': self.env.user.company_id.currency_id.id,
# 'name': 'Fleet Service Cost Invoice ',
# 'account_id': partner[0].property_account_payable_id.id,
'branch_id': self.vehicle_id.branch_id.id,
'move_type': 'in_invoice',
'invoice_date': datetime.now().today(),
'invoice_line_ids': [(0, 0, {
'quantity': 1,
'price_unit': amount,
# 'move_id': invoice.id,
'name': 'Maintenance Service Cost',
'account_id': self.account_id.id,
'tax_ids': [(6, 0, [self.tax_id.id])],
})]
})
# self.env['account.move.line'].with_context(check_move_validity=False).sudo().create({
# 'quantity': 1,
# 'price_unit': amount,
# 'move_id': invoice.id,
# 'name': 'Maintenance Service Cost',
# 'account_id': self.account_id.id,
# 'tax_ids': [(6, 0, [self.tax_id.id])],
#
# })
self.invoice_id = invoice.id
# invoice.sudo().action_invoice_open()
@api.depends('quotation_ids', 'quotation_ids.approve')
def get_cost(self):
for rec in self:
if rec.quotation_ids.filtered(lambda r: r.approve == True):
rec.total_cost = sum(rec.quotation_ids.filtered(lambda r: r.approve == True).mapped('cost'))
@api.onchange('vehicle_id')
def get_vehcile_date(self):
if self.vehicle_id:
self.odometer = self.vehicle_id.odometer
self.employee_id = self.vehicle_id.employee_id.id
self.branch_id = self.vehicle_id.branch_id.id
def action_confirm(self):
for rec in self:
record = rec.quotation_ids.sudo().filtered(lambda r: r.approve == True)
if not record:
raise ValidationError(_("You Need Approve Quotation First"))
rec.sudo().state = 'confirm'
def action_approve(self):
for rec in self:
rec.state = 'approve'
rec.vehicle_id.next_request_date = rec.next_request_date
def action_refuse(self):
for rec in self:
rec.state = 'refused'
def set_to_draft(self):
for rec in self:
rec.state = 'draft'
def action_paid(self):
for rec in self:
rec.create_invoice()
rec.state = 'paid'
def action_cancel(self):
for rec in self:
rec.state = 'cancel'
class FleetQuotation(models.Model):
_name = 'fleet.quotation'
_description = 'Fleet Quotation'
cost = fields.Float(string="Cost")
offer = fields.Binary(string="Offer Attachment")
partner_id = fields.Many2one('res.partner', string="Partner")
approve = fields.Boolean()
request_id = fields.Many2one('fleet.maintenance')
reason = fields.Text(string="Reject Reason")
state = fields.Selection(related='request_id.state', store=True)
edit_access = fields.Boolean(compute="get_access", )
def get_access(self):
for rec in self:
rec.edit_access = False
if rec.state == 'approve' and self.env.user.has_group('odex_fleet.fleet_group_account'):
rec.edit_access = True
def action_approve(self):
rec = self.request_id.quotation_ids.filtered(lambda r: r.approve)
print("YYYYYYYYYYYY", rec)
if rec:
raise ValidationError(_("You Can Not Approve More Than One Quotation"))
self.approve = True
self.reason = False
def action_reject(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_request_id': self.id},
}
class FleetQuotationService(models.Model):
_name = 'fleet.quotation.service'
_description = 'Fleet Service'
qty = fields.Float(string="Cost")
cost = fields.Float(string="Cost")
number = fields.Float(string="Number")
total = fields.Float(string="Total", compute='_compute_total', readonly=True)
service_id = fields.Many2one('fleet.service.type', string="Service")
request_id = fields.Many2one('fleet.maintenance')
@api.onchange('number', 'qty')
def _compute_total(self):
for r in self:
r.total = r.number * r.qty

View File

@ -1,31 +0,0 @@
from odoo import fields, models
class ResCompany(models.Model):
_inherit = 'res.company'
license = fields.Float(string="License")
car_license = fields.Float( string="Notify Before Car Licence")
delegation = fields.Float(string="Delegation")
form = fields.Float(string="Notify Before Form")
check = fields.Float(string="Notify Before Check")
insurance = fields.Float(string="Insurance Notify Before")
operation = fields.Float(string="Operation Notify Before")
installment = fields.Float(string="Installment Notify Before")
service = fields.Float( string="Service Notify Before")
class ResConfig(models.TransientModel):
_inherit = 'res.config.settings'
license = fields.Float(related="company_id.license", string="License")
car_license = fields.Float(related="company_id.car_license", string="Car Licence")
delegation = fields.Float(related="company_id.delegation", string="Delegation")
form = fields.Float(related="company_id.form", string=" Form")
check = fields.Float(related="company_id.check", string="Check")
insurance = fields.Float(related="company_id.insurance", string="Insurance")
operation = fields.Float(related="company_id.operation", string="Operation Card")
installment = fields.Float(related="company_id.installment", string="Installment ")
service = fields.Float(related="company_id.service", string="Service")

View File

@ -1,682 +0,0 @@
from odoo import models, fields, api, _
from datetime import datetime
from odoo.exceptions import UserError, ValidationError
from datetime import timedelta
from dateutil.relativedelta import relativedelta
import math
class FleetBranch(models.Model):
_inherit = 'res.branch'
state_id = fields.Many2one('res.country.state', string="State", )
class Partner(models.Model):
_inherit = 'res.partner'
car_owner = fields.Boolean(string="Car Owner", )
class FleetVehicle(models.Model):
_inherit = 'fleet.vehicle'
owner_id = fields.Many2one('res.partner', string="Owner")
insurance_companies_id = fields.Many2one('insurance.companies', string="Insurance Companies")
employee_id = fields.Many2one('hr.employee', string="Driver")
driver_id = fields.Many2one(related='employee_id.user_id.partner_id', store=True, string="Driver")
branch_id = fields.Many2one('hr.department', string="Branch", )
states = fields.Many2one('res.country.state', string="State", )
old_branch_id = fields.Many2one('res.branch', string="Old Branch", )
license_end = fields.Date(string="License End")
check_end = fields.Date(string="Check End Date")
form_end = fields.Date(string="Form End Date")
serial_number = fields.Char(string="Serial Number")
computer_number = fields.Char(string="Computer Number")
operation_card_number = fields.Char(string="Operation Card Number")
operation_card_end = fields.Date(string="Operation Card End")
car_weight = fields.Float(string="Car Weight")
insurance_number = fields.Char(string="Insurance Number")
insurance_start_date = fields.Date(string="Insurance Start Date")
insurance_end_date = fields.Date(string="Insurance End Date")
insurance_attachment = fields.Binary(string="Insurance Docs")
installment_number = fields.Char(string="Installment Number")
fuel_consumption = fields.Float(string="Fuel consumption")
installment_ids = fields.One2many('insurance.installment', 'fleet_id', string="Installment")
service_ids = fields.One2many('fleet.service.line.config', 'fleet_id', string="Services")
next_request_date = fields.Date(string="Next Maintenance Date")
fuel_type = fields.Many2one('fuel.price', 'Fuel Type', help='Fuel Used by the vehicle')
model_id = fields.Many2one('fleet.vehicle.model', string="Model Type", required=True, help='Model of the vehicle')
location = fields.Char(string="Work Location", help='Location of the vehicle (garage, ...)')
car_category = fields.Many2one('car.category', 'Car Category')
# man_company = fields.Many2one('manufacture.company', 'Manufacture Company')
man_company = fields.Many2one(related='model_id.man_company_id')
fleet_type_id = fields.Many2one(related='model_id.fleet_type_id', string="Fleet Type", )
form_renew_cost = fields.Float(related='model_id.fleet_type_id.amount', string="Form Renew Cost")
transmission_id = fields.Many2one('transmission.setting', string="Transmission")
insurance_cost = fields.Float(string="Insurance Cost", compute="get_insurance_cost", store=True, readonly=False)
department_id = fields.Many2one('hr.department', string="Department", compute="get_department_id", store=True)
project_id = fields.Many2one('project.project', string='Project')
@api.depends('employee_id')
def get_department_id(self):
for rec in self:
if rec.employee_id:
rec.department_id = rec.employee_id.department_id
@api.depends('installment_ids')
def get_insurance_cost(self):
total = 0
for rec in self.installment_ids:
total += rec.amount
self.insurance_cost = total
@api.model
def fleet_expired_cron(self):
date = datetime.now().date()
operation = self.company_id.operation
insurance = self.company_id.insurance
car_license = self.env.user.company_id.car_license
# delegation = self.company_id.delegation
form = self.company_id.form
check = self.company_id.check
installment = self.company_id.installment
if car_license > 0:
date = date + relativedelta(days=car_license)
fleet = self.env['fleet.vehicle'].sudo().search([('license_end', '<=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.car_expiration_email_template', False)
template.send_mail(f.id)
if insurance > 0:
date = date + relativedelta(days=+int(insurance))
fleet = self.env['fleet.vehicle'].sudo().search([('insurance_end_date', '>=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.insurance_expiration_email_template', False)
template.send_mail(f.id)
if form > 0:
date = date + relativedelta(days=+int(form))
fleet = self.env['fleet.vehicle'].sudo().search([('form_end', '>=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.form_expiration_email_template', False)
template.send_mail(f.id)
if check > 0:
date = date + relativedelta(days=+int(check))
fleet = self.env['fleet.vehicle'].sudo().search([('check_end', '>=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.check_expiration_email_template', False)
template.send_mail(f.id)
if operation > 0:
date = date + relativedelta(days=+int(operation))
fleet = self.env['fleet.vehicle'].sudo().search([('operation_card_end', '>=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.operation_expiration_email_template', False)
template.send_mail(f.id)
if installment > 0:
date = date + relativedelta(days=car_license)
fleet = self.env['insurance.installment'].sudo().search([('date', '<=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.installment_expiration_email_template', False)
template.send_mail(f.id)
@api.onchange('insurance_start_date', 'insurance_end_date')
@api.constrains('insurance_start_date', 'insurance_end_date')
def check_data(self):
if self.insurance_start_date and self.insurance_end_date and self.insurance_start_date > self.insurance_end_date:
raise UserError(_('Insurance Start Date must be less than or equal Insurance End Date '))
class FleetType(models.Model):
_name = 'fleet.type'
_description = 'Fleet Type'
name = fields.Char(string="Name")
amount = fields.Float(string="Renew Amount")
class FuelPrice(models.Model):
_name = 'fuel.price'
_description = 'Fuel Price'
_rec_name = 'fuel_type'
fuel_type = fields.Many2one('product.product', string='Fuel Type', help='Fuel Used by the vehicle')
price = fields.Float(string="Price")
uom_id = fields.Many2one(related='fuel_type.uom_id', string='Unit of Measure', readonly=True)
class CarCtegory(models.Model):
_name = 'car.category'
_description = 'Car Category'
_rec_name = 'car_category'
car_category = fields.Char('Car Category')
class FleetVehicleModelBrand(models.Model):
_inherit = 'fleet.vehicle.model.brand'
man_company_id = fields.Many2one('manufacture.company')
class FleetVehicleModel(models.Model):
_inherit = 'fleet.vehicle.model'
man_company_id = fields.Many2one(related='brand_id.man_company_id')
fleet_type_id = fields.Many2one('fleet.type', string="Fleet Type")
class ManufactureCompany(models.Model):
_name = 'manufacture.company'
_description = 'Manufacture Company'
_rec_name = 'man_company'
man_company = fields.Char('Manufacture Company')
brand_ids = fields.Many2many('fleet.vehicle.model.brand')
class TransmissionType(models.Model):
_name = 'transmission.setting'
_description = 'Trnsmission Setting'
_rec_name = 'transmission'
transmission = fields.Char('Transmission')
class InsuranceInstallment(models.Model):
_name = 'insurance.installment'
_description = 'Insurance Installment'
name = fields.Char(string="Name")
date = fields.Date(string="Date")
amount = fields.Float(string="Amount")
paid = fields.Date(string="Paid")
fleet_id = fields.Many2one('fleet.vehicle', string="Fleet")
# class FleetVehicleCost(models.Model):
# _inherit = 'fleet.vehicle.cost'
# branch_id = fields.Many2one('res.branch', string="Branch", default=lambda self: self.env.user.branch_id)
# number = fields.Float(string="Number")
# total = fields.Float(string="Total", compute='_compute_total',readonly=True)
# @api.onchange('number','amount')
# def _compute_total(self):
# for r in self:
# r.total = r.number * r.amount
# @api.onchange('vehicle_id')
# def get_branch(self):
# if self.vehicle_id:
# self.branch_id = self.vehicle_id.branch_id.id if self.vehicle_id.branch_id else False
class FleetVehicleCost(models.Model):
_name = 'fleet.vehicle.cost'
_description = 'Cost related to a vehicle'
_order = 'date desc, vehicle_id asc'
name = fields.Char(related='vehicle_id.name', string='Name', store=True)
vehicle_id = fields.Many2one('fleet.vehicle', 'Vehicle', help='Vehicle concerned by this log')
cost_subtype_id = fields.Many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost')
amount = fields.Float('Total Price')
cost_type = fields.Selection([
('contract', 'Contract'),
('services', 'Services'),
('fuel', 'Fuel'),
('other', 'Other')
], 'Category of the cost', default="other", help='For internal purpose only', required=True)
parent_id = fields.Many2one('fleet.vehicle.cost', 'Parent', help='Parent cost to this current cost')
service_id = fields.Many2one('fleet.vehicle.log.services', 'Service', help='Service cost to this current cost')
cost_ids = fields.One2many('fleet.vehicle.cost', 'parent_id', 'Included Services', copy=True)
odometer_id = fields.Many2one('fleet.vehicle.odometer', 'Odometer',
help='Odometer measure of the vehicle at the moment of this log')
odometer = fields.Float(compute="_get_odometer", inverse='_set_odometer', string='Odometer Value',
help='Odometer measure of the vehicle at the moment of this log')
odometer_unit = fields.Selection(related='vehicle_id.odometer_unit', string="Unit", readonly=True)
date = fields.Date(help='Date when the cost has been executed')
contract_id = fields.Many2one('fleet.vehicle.log.contract', 'Contract', help='Contract attached to this cost')
auto_generated = fields.Boolean('Automatically Generated', readonly=True)
description = fields.Char("Cost Description")
branch_id = fields.Many2one('hr.department', string="Branch", default=lambda self: self.env.user.branch_id)
number = fields.Float(string="Number")
total = fields.Float(string="Total", compute='_compute_total', readonly=True)
@api.onchange('number', 'amount')
def _compute_total(self):
for r in self:
r.total = r.number * r.amount
@api.onchange('vehicle_id')
def get_branch(self):
if self.vehicle_id:
self.branch_id = self.vehicle_id.branch_id.id if self.vehicle_id.branch_id else False
def _get_odometer(self):
for record in self:
if record.odometer_id:
record.odometer = record.odometer_id.value
def _set_odometer(self):
for record in self:
if not record.odometer:
raise UserError(_('Emptying the odometer value of a vehicle is not allowed.'))
odometer = self.env['fleet.vehicle.odometer'].create({
'value': record.odometer,
'date': record.date or fields.Date.context_today(record),
'vehicle_id': record.vehicle_id.id
})
self.odometer_id = odometer
@api.model
def create(self, data):
# make sure that the data are consistent with values of parent and contract records given
if 'parent_id' in data and data['parent_id']:
parent = self.browse(data['parent_id'])
data['vehicle_id'] = parent.vehicle_id.id
data['date'] = parent.date
data['cost_type'] = parent.cost_type
if 'contract_id' in data and data['contract_id']:
contract = self.env['fleet.vehicle.log.contract'].browse(data['contract_id'])
data['vehicle_id'] = contract.vehicle_id.id
data['cost_subtype_id'] = contract.cost_subtype_id.id
data['cost_type'] = contract.cost_type
if 'odometer' in data and not data['odometer']:
# if received value for odometer is 0, then remove it from the
# data as it would result to the creation of a
# odometer log with 0, which is to be avoided
del data['odometer']
return super(FleetVehicleCost, self).create(data)
class FleetVehicleLogServices(models.Model):
_inherit = 'fleet.vehicle.log.services'
@api.model
def default_get(self, default_fields):
res = super(FleetVehicleLogServices, self).default_get(default_fields)
rec = self.env['fleet.account.config'].sudo().search([('type', '=', 'service'), ('state', '=', 'confirm')],
limit=1)
if rec and self.env.user.has_group("odex25_fleet_account_custom.integration_with_account"):
res['account_id'] = rec.account_id.id
res['tax_id'] = rec.tax_id.id
elif self.env.user.has_group("odex25_fleet_account_custom.disable_integration_with_account"):
pass
else:
raise ValidationError(_("You Need To Configurate Account Details"))
return res
branch_id = fields.Many2one('hr.department', string="Branch")
account_id = fields.Many2one('account.account', string="Account")
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
invoice_id = fields.Many2one('account.move', string="Invoice", copy=False)
partner_id = fields.Many2one('res.partner', string="Service Provider", required=1)
request_id = fields.Many2one('fleet.maintenance', string="Maintenance Request")
state = fields.Selection([
('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('invoiced', 'Invoiced'),
('refused', 'Refused'),
('cancel', 'Cancel'),
], default='draft', related="status")
status = fields.Selection([('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('invoiced', 'Invoiced'),
('refused', 'Refused'),
('cancel', 'Cancel'),
], default='draft')
edit_access = fields.Boolean(compute="get_access", )
user_id = fields.Many2one('res.users', string='Responsible', required=False, default=lambda self: self.env.user)
cost_subtype_id = fields.Many2one('fleet.service.type', 'Type', help='Cost type purchased with this cost')
cost_ids = fields.One2many('fleet.vehicle.cost', 'service_id', 'Included Services', copy=True)
employee_id = fields.Many2one('hr.employee', string="Driver")
service_type_id = fields.Many2one(
'fleet.service.type', 'Service Type', required=False,
default=lambda self: self.env.ref('fleet.type_service_service_8', raise_if_not_found=False),
)
def copy(self, default=None):
default = dict(default or {})
default.update({
'status': 'draft',
})
return super(FleetVehicleLogServices, self).copy(default)
@api.onchange('odometer')
def onchange_odometer(self):
for rec in self:
if rec.odometer < rec.vehicle_id.odometer:
raise ValidationError(_("odometer should be more than current odometer"))
def get_access(self):
for rec in self:
rec.edit_access = False
if rec.status == 'approve' and self.env.user.has_group('odex_fleet.fleet_group_account'):
rec.edit_access = True
def set_to_draft(self):
for rec in self:
rec.status = 'draft'
def action_confirm(self):
self.sudo().status = 'confirm'
def action_approve(self):
self.status = 'approve'
self.vehicle_id.odometer = self.odometer
def action_cancel(self):
self.status = 'cancel'
def action_refuse(self):
self.status = 'refused'
@api.onchange('vehicle_id')
def get_branch(self):
if self.vehicle_id:
self.branch_id = self.vehicle_id.branch_id.id if self.vehicle_id.branch_id else False
self.odometer = self.vehicle_id.odometer
self.employee_id = self.vehicle_id.employee_id
def create_invoice(self):
invoice = self.env['account.move'].sudo().create({
'partner_id': self.partner_id.id,
'currency_id': self.env.user.company_id.currency_id.id,
# 'name': 'Fleet Service Cost Invoice ',
# 'account_id': self.partner_id.property_account_payable_id.id,
'branch_id': self.vehicle_id.branch_id.id,
'move_type': 'in_invoice',
'invoice_date': datetime.now().today(),
'invoice_line_ids': [(0, 0, {
'quantity': 1,
'price_unit': self.amount,
# 'move_id': invoice.id,
'name': 'Fleet Service Cost',
'account_id': self.account_id.id,
'tax_ids': [(6, 0, [self.tax_id.id])],
})]
})
# self.env['account.move.line'].with_context(check_move_validity=False).sudo().create({
# 'quantity': 1,
# 'price_unit': self.amount,
# 'move_id': invoice.id,
# 'name': 'Fleet Service Cost',
# 'account_id': self.account_id.id,
# 'tax_ids': [(6, 0, [self.tax_id.id])],
#
# })
self.sudo().invoice_id = invoice.id
# invoice.sudo().action_invoice_open()
self.sudo().status = 'invoiced'
@api.onchange('cost_ids')
def get_amount_total(self):
for rec in self:
rec.amount = sum(rec.cost_ids.mapped('total'))
class FleetVehicleLogContract(models.Model):
_inherit = 'fleet.vehicle.log.contract'
branch_id = fields.Many2one('hr.department', string="Branch")
@api.onchange('vehicle_id')
def get_branch(self):
if self.vehicle_id:
self.branch_id = self.vehicle_id.branch_id.id if self.vehicle_id.branch_id else False
class FleetVehicleLogFuel(models.Model):
_name = 'fleet.vehicle.log.fuel'
_description = 'Fuel log for vehicles'
_inherits = {'fleet.vehicle.cost': 'cost_id'}
@api.model
def default_get(self, default_fields):
res = super(FleetVehicleLogFuel, self).default_get(default_fields)
service = self.env.ref('fleet.type_service_refueling', raise_if_not_found=False)
res.update({
'date': fields.Date.context_today(self),
'cost_subtype_id': service and service.id or False,
'cost_type': 'fuel'
})
rec = self.env['fleet.account.config'].sudo().search([('type', '=', 'fuel'), ('state', '=', 'confirm')],
limit=1)
if rec and self.env.user.has_group("odex25_fleet_account_custom.integration_with_account"):
res['account_id'] = rec.account_id.id
res['tax_id'] = rec.tax_id.id
elif self.env.user.has_group("odex25_fleet_account_custom.disable_integration_with_account"):
print("pass")
# pass
else:
pass
# raise ValidationError(_("You Need To Configurate Account Details"))
return res
liter = fields.Float()
price_per_liter = fields.Float()
purchaser_id = fields.Many2one('res.partner', 'Purchaser',
domain="['|',('customer_rank','>',0),('employee','=',True)]")
inv_ref = fields.Char('Invoice Reference', size=64)
vendor_id = fields.Many2one('res.partner', 'Vendor', domain="[('supplier_rank','=',True)]")
notes = fields.Text()
cost_id = fields.Many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade')
branch_id = fields.Many2one('hr.department', string="Branch")
account_id = fields.Many2one('account.account', string="Account")
tax_id = fields.Many2one('account.tax', string='Tax', ondelete='restrict')
invoice_id = fields.Many2one('account.move', string="Invoice", copy=False)
partner_id = fields.Many2one('res.partner', string="Service Provider")
fuel_type = fields.Many2one(related='vehicle_id.fuel_type')
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('invoiced', 'Invoiced'),
('refused', 'Refused'),
('cancel', 'Cancel'),
], default='draft')
amount = fields.Float('Total Untax')
liter = fields.Float()
price_tax = fields.Float(string='Tax')
total_price_tax = fields.Float(string='Total', )
price_per_liter = fields.Float()
cal_type = fields.Selection(selection=[('total', 'Total'), ('liter', 'Liter')], string="Calculation Type",
default='liter')
edit_access = fields.Boolean(compute="get_access", )
user_id = fields.Many2one('res.users', string='Responsible', required=False, default=lambda self: self.env.user)
employee_id = fields.Many2one('hr.employee', string="Driver")
# we need to keep this field as a related with store=True because the graph view doesn't support
# (1) to address fields from inherited table
# (2) fields that aren't stored in database
cost_amount = fields.Float(related='cost_id.amount', string='Amount', store=True)
@api.onchange('liter', 'price_per_liter', 'amount')
def _onchange_liter_price_amount(self):
# need to cast in float because the value receveid from web client maybe an integer (Javascript and JSON do not
# make any difference between 3.0 and 3). This cause a problem if you encode, for example, 2 liters at 1.5 per
# liter => total is computed as 3.0, then trigger an onchange that recomputes price_per_liter as 3/2=1 (instead
# of 3.0/2=1.5)
# If there is no change in the result, we return an empty dict to prevent an infinite loop due to the 3 intertwine
# onchange. And in order to verify that there is no change in the result, we have to limit the precision of the
# computation to 2 decimal
liter = float(self.liter)
price_per_liter = float(self.price_per_liter)
amount = float(self.amount)
if liter > 0 and price_per_liter > 0 and round(liter * price_per_liter, 2) != amount:
self.amount = round(liter * price_per_liter, 2)
elif amount > 0 and liter > 0 and round(amount / liter, 2) != price_per_liter:
self.price_per_liter = round(amount / liter, 2)
elif amount > 0 and price_per_liter > 0 and round(amount / price_per_liter, 2) != liter:
self.liter = round(amount / price_per_liter, 2)
def get_access(self):
for rec in self:
rec.edit_access = False
if rec.state == 'approve' and self.env.user.has_group('odex_fleet.fleet_group_account'):
rec.edit_access = True
def set_to_draft(self):
for rec in self:
rec.state = 'draft'
@api.onchange('cal_type', 'price_per_liter', 'liter', 'total_price_tax')
def _get_total(self):
for rec in self:
if rec.cal_type == 'total':
taxes = rec.tax_id.compute_all(rec.price_per_liter, None, 1, product=None,
partner=None)
val = round(sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])), 2)
pice_tax = rec.price_per_liter + val
liter = rec.total_price_tax / pice_tax if val and rec.price_per_liter > 0 else 0
new_taxes = rec.tax_id.compute_all(rec.price_per_liter, None, liter, product=None,
partner=None)
tax = sum(t.get('amount', 0.0) for t in new_taxes.get('taxes', []))
rec.price_tax = tax
amount = rec.total_price_tax - rec.price_tax
rec.liter = liter if liter > 0 else 0
rec.amount = amount if amount > 0 else 0
else:
taxes = rec.tax_id.compute_all(rec.price_per_liter, None, rec.liter, product=None,
partner=None)
tax = round(sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])), 2)
rec.price_tax = tax if tax > 0 else 0
rec.amount = rec.liter * rec.price_per_liter
rec.total_price_tax = round(rec.amount + rec.price_tax, 2)
# def get_account_data(self):
# print("in herere============")
# rec = self.env['fleet.account.config'].sudo().search([('type','=','fuel'),('state','=','confirm')],limit=1)
# if rec:
# self.account_id = rec.account_id.id
# self.tax_id = rec.tax_id.id
# else:
# raise ValidationError(_("You Need To Configurate Account Details"))
@api.constrains('odometer', 'price_per_liter')
def odometer_check(self):
for rec in self:
if rec.odometer <= 0:
raise ValidationError(_("Odometer Should Be Greater Than 0"))
@api.constrains('liter')
def liter_check(self):
for rec in self:
if rec.liter <= 0:
raise ValidationError(_("liter Should Be Greater Than 0"))
def action_confirm(self):
self.odometer_check()
self.sudo().state = 'confirm'
def action_approve(self):
self.state = 'approve'
def action_cancel(self):
self.state = 'cancel'
def action_refuse(self):
self.state = 'refused'
@api.onchange('vehicle_id')
def _onchange_vehicle(self):
if self.vehicle_id:
self.purchaser_id = self.vehicle_id.driver_id.id
self.price_per_liter = self.vehicle_id.fuel_type.price or 0
self.branch_id = self.vehicle_id.branch_id.id if self.vehicle_id.branch_id else False
self.odometer_unit = self.vehicle_id.odometer_unit
self.employee_id = self.vehicle_id.employee_id
def create_invoice(self):
invoice = self.env['account.move'].sudo().create({
'partner_id': self.partner_id.id,
'currency_id': self.env.user.company_id.currency_id.id,
'name': 'Fuel Cost Invoice ',
'journal_id': 2,
# 'account_id': self.partner_id.property_account_payable_id.id,
'branch_id': self.vehicle_id.branch_id.id,
'move_type': 'in_invoice',
'invoice_date': datetime.now().today(),
'invoice_line_ids': [(0, 0, {
'quantity': self.liter if self.cal_type == 'liter' else 1,
'price_unit': self.price_per_liter if self.cal_type == 'liter' else self.amount,
# 'move_id': invoice.id,
'name': 'Fuel Cost',
'account_id': self.account_id.id,
'tax_ids': [(6, 0, [self.tax_id.id])],
'product_id': self.fuel_type.fuel_type.id,
})]
})
# self.env['account.move.line'].with_context(check_move_validity=False).sudo().create({
# 'quantity': self.liter if self.cal_type== 'liter' else 1,
# 'price_unit': self.price_per_liter if self.cal_type== 'liter' else self.amount,
# 'move_id': invoice.id,
# 'name': 'Fuel Cost',
# 'account_id': self.account_id.id,
# 'tax_ids': [(6, 0, [self.tax_id.id])],
# 'product_id': self.fuel_type.fuel_type.id,
# # 'uom_id': self.fuel_type.uom_id.id,
# })
self.sudo().invoice_id = invoice.id
invoice.sudo()._compute_amount()
# invoice.sudo().action_invoice_open()
self.sudo().state = 'invoiced'
date = fields.Date.context_today(self)
data = {'value': self.odometer, 'date': date, 'vehicle_id': self.vehicle_id.id}
self.env['fleet.vehicle.odometer'].sudo().create(data)
class FleetServiceConfig(models.Model):
_name = 'fleet.service.line.config'
_description = 'Fleet Serive Line'
fleet_id = fields.Many2one('fleet.vehicle')
service_ids = fields.Many2many('fleet.service.type', string="Service")
date = fields.Date(string="Next Request Date", help="Next Request Date Of Maintenance Request")
next_odometer = fields.Float(string="Next Odometer")
odometer = fields.Float(string="Next Odometer",
help="Determine the current mileage value to submit a maintenance request")
type = fields.Selection(selection=[('date', 'Date'), ('odometer', 'Odometer')],
string="Type")
@api.onchange('type', 'odometer')
def get_vals(self):
for rec in self:
if rec.type == 'odometer':
rec.get_next_odometer()
def get_next_odometer(self):
for rec in self:
rec.next_odometer = rec.fleet_id.odometer + rec.odometer
@api.model
def fleet_maintenance_cron(self):
date = self.env['fleet.service.line.config'].sudo().search(
[('type', '=', 'date'), ('date', '=', str(datetime.now().date()))])
odo = self.env['fleet.service.line.config'].sudo().search([('type', '=', 'odometer'),
])
odo = odo.filtered(lambda r: r.fleet_id.odometer >= r.next_odometer)
print("FDDDDDDDDDDDDDDDDDDDDd", str(datetime.now().date()), date, odo.mapped('fleet_id.odometer'))
self.create_request(date)
self.create_request(odo)
def create_request(self, data):
for d in data:
self.env['fleet.maintenance'].sudo().create({
'name': "Preventive Maintenance",
'type': 'preventive',
'vehicle_id': d.fleet_id.id,
'branch_id': d.fleet_id.branch_id.id,
'odometer': d.fleet_id.odometer,
'license_plate': d.fleet_id.license_plate,
'line_id': d.id,
'employee_id': d.fleet_id.employee_id.id if d.fleet_id.employee_id else False,
'service_ids': [(0, 0, {'service_id': l.id}) for l in d.service_ids]
})
if d.type == 'odometer':
d.get_next_odometer()

View File

@ -1,227 +0,0 @@
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 = 'vehicle.delegation'
_description = 'Vehicle Deleagation'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string="Name")
branch_id = fields.Many2one('res.branch', string="Branch",related="driver_department.branch_id")
old_branch_id = fields.Many2one('res.branch', string="Old Branch")
employee_id = fields.Many2one('hr.employee', string="Driver",
domain="[('driver', '=', True),('vehicle_id', '=', False)]")
state = fields.Selection(selection=[('draft', 'Draft'),
('confirm', 'Confirm'),
('approve', 'Approved'),
('in_progress', 'In Progress'),
('refused', 'Refused'),
('cancel', 'Cancel'),
('close', 'Close'), ], 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('res.branch', string="Last Branch", compute="get_last_branch", store=True,help='The last Branch the vehicle was authorized for')
@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.onchange('branch_id')
# def onchange_branch(self):
# for rec in self:
# rec.vehicle_id.branch_id = rec.branch_id
@api.depends('odometer', 'first_odometer')
def get_km(self):
for rec in self :
rec.km_number = rec.odometer - rec.first_odometer
def create_custody(self):
print("ok")
# for rec in self:
# custody = rec.env['custom.employee.custody'].sudo().create({
# 'from_hr_department': True,
# 'employee_id': rec.employee_id.id,
# })
# line = rec.env['employee.custody.line'].sudo().create({
# 'name': (_("Car Delegation %s")) % rec.vehicle_id.name,
# 'quantity': 1.0,
# 'employee_custody_line': custody.id,
# })
# custody.sudo().submit()
# rec.custody_id = custody.id
@api.constrains('vehicle_id', 'delegation_type', 'employee_id', 'start_date', 'end_date')
def car_constrain(self):
for rec in self:
if self.start_date and self.end_date:
clause_1 = ['&', ('end_date', '<=', rec.end_date), ('end_date', '>=', rec.start_date)]
clause_2 = ['&', ('start_date', '<=', rec.end_date), ('start_date', '>=', rec.start_date)]
clause_3 = ['&', ('start_date', '<=', rec.start_date), ('end_date', '>=', rec.end_date)]
value = [('id', '!=', self.id), ('state', 'not in', ['close', 'cancel']), '|',
'|'] + clause_1 + clause_2 + clause_3
record = self.env['vehicle.delegation'].sudo().search(value)
v = record.filtered(lambda r: r.id != self.id and r.vehicle_id == self.vehicle_id)
# e = record.filtered(
# lambda r: r.id != self.id and r.employee_id == self.employee_id and self.employee_id)
if v:
raise ValidationError(_("You Need To Close Other Delegation Request for this Vehicle"))
# if e:
# raise ValidationError(_("You Need To Close Other Delegation Request for this Driver"))
@api.onchange('start_date', 'end_date')
@api.constrains('start_date', 'end_date')
def check_data(self):
if self.start_date and self.end_date and self.start_date > self.end_date:
raise UserError(_('Start Date must be less than or equal End Date '))
@api.onchange('vehicle_id')
def get_fleet_data(self):
if self.vehicle_id:
self.old_branch_id = self.vehicle_id.branch_id.id
@api.onchange('employee_id')
def get_emp_data(self):
self.license_end = self.employee_id.license_end
# self.vehicle_id.department_id = self.employee_id.department_id
def action_confirm(self):
for rec in self:
rec.state = 'confirm'
if rec.driver_department:
rec.vehicle_id.branch_id = rec.branch_id
rec.vehicle_id.department_id = rec.driver_department.department_id
elif rec.project_id:
rec.vehicle_id.project_id = rec.project_id
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'
if rec.delegation_type == 'branch':
rec.vehicle_id.old_branch_id = rec.vehicle_id.branch_id.id
rec.vehicle_id.branch_id = rec.branch_id.id
else:
# rec.vehicle_id.partner_id = rec.employee_id.user_id.partner_id.id
rec.vehicle_id.employee_id = rec.employee_id.id
rec.employee_id.old_vehicle_id = rec.employee_id.vehicle_id.id
rec.employee_id.vehicle_id = rec.vehicle_id.id
rec.employee_id.delegation_start = rec.start_date
rec.employee_id.delegation_end = rec.end_date
# rec.create_custody()
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'
if rec.delegation_type == 'branch':
rec.vehicle_id.branch_id = rec.vehicle_id.old_branch_id.id
else:
rec.vehicle_id.owner_id = False
rec.vehicle_id.employee_id = False
rec.employee_id.vehicle_id = False
rec.employee_id.delegation_start = False
rec.employee_id.delegation_end = False
# if rec.custody_id:
# rec.custody_id.sudo().done()
def action_cancel(self):
for rec in self:
rec.sudo().state = 'cancel'
@api.model
def delegation_expired_cron(self):
date = datetime.now().date()
delegation = self.company_id.delegation
if delegation > 0:
date = date + relativedelta(days=delegation)
fleet = self.env['vehicle.delegation'].sudo().search(
[('state', 'in', ['approve', 'in_progress']), ('end_date', '<=', str(date))])
for f in fleet:
template = self.env.ref('odex_fleet.delegation_expiration_email_template', False)
template.send_mail(f.id)
@api.model
def delegation_start_cron(self):
date = datetime.now().date()
fleet = self.env['vehicle.delegation'].sudo().search(
[('state', '=', 'approve'), ('start_date', '<=', str(date))])
for f in fleet:
f.action_inprogress()
@api.model
def delegation_close_cron(self):
date = datetime.now().date()
fleet = self.env['vehicle.delegation'].sudo().search(
[('state', '=', 'in_progress'), ('end_date', '<=', str(date))])
for f in fleet:
f.action_close()

View File

@ -1,5 +0,0 @@
from . import fleet_report
from . import maintains_report
from . import renew_report
from . import service_report
from . import driver

View File

@ -1,73 +0,0 @@
# -*- coding: utf-8 -*-
import io
import base64
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from datetime import datetime,timedelta,date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
import arabic_reshaper
from bidi.algorithm import get_display
import io
import base64
# driver
class Driver(models.AbstractModel):
_name = 'report.odex_fleet.driver_report_pdf'
_description = 'Report Driver'
def get_result(self, data=None):
form = data
domain = [('driver','=',True),('vehicle_id','!=',False)]
if form['state_ids']:
domain += [('branch_id.state_id','in',form['state_ids'])]
if form['date_from'] and form['date_to']:
domain = [('delegation_start', '>=', form['date_from']), ('delegation_end', '<=', form['date_to'])]
if form['department_ids']:
domain += [('department_id.name','in',form['department_ids'])]
emp = self.env['hr.employee'].sudo().search(domain)
return emp
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# driver Delegation
class DriverDelegation(models.AbstractModel):
_name = 'report.odex_fleet.driver_delegation_report_pdf'
_description = 'Report Delegation'
def get_result(self, data=None):
form = data
domain = [('delegation_type','=','driver'),('state','=','in_progress')]
if form['state_ids']:
domain += [('vehicle_id.branch_id.state_id','in',form['state_ids'])]
# if form['date_from'] and form['date_to']:
# domain += [('start_date', '>=', form['date_from']), ('end_date', '<=', form['date_to'])]
emp = self.env['vehicle.delegation'].sudo().search(domain)
return emp
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}

View File

@ -1,241 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- recive-->
<template id="delegation_receive_report_pdf">
<t t-call="web.html_container" t-translation="off">
<t t-call="web.external_layout">
<div class="page" style="font-size:16pt;font-family:Arial;direction:rtl">
<t t-foreach="docs" t-as="o">
<br/>
<h2 colspan="10" class="text-center" style="font-size:20px;font-weight: bold">إقرار استلام سيارة</h2>
<br/>
<p style="text-align:justify;margin-right:10%;margin-left:10%;color:black; line-height: 1.8;">
أقر أنا /
<span t-esc="o.employee_id.name"/>
الجنسية
<span t-esc="o.employee_id.country_id.name"/>
رقم الهوية / الإقامة /
<span t-esc="o.employee_id.iqama_number.iqama_id"/>
صادرة من<span t-esc="o.employee_id.iqama_creat_date"/>وتنتهي في:
<span t-esc="o.employee_id.iqama_expiy_date"/>
بأنني استلمت سيارة نوعها
<span t-esc="o.vehicle_id.fleet_type_id.name"/>
موديل /
<span t-esc="o.model_id.name"/>
رقم اللوحة /
<span t-esc="o.license_plate"/>
اللون /
<span t-esc="o.vehicle_id.color"/>
من الشركة لاستخدامها في أغراض العمل وأتعهد
بالمحافظة عليها وعلى ملحقاتها بحالة جيدة واستخدامها أثناء الدوام اليومي ولأغراض العمل.
</p>
<p style="text-align:justify;margin-right:10%;margin-left:10%;color:black; line-height: 1.8;">
وفي حالة حدوث أي مشكلات أن أبلغ الإدارة فوراً كما أقر بمسئوليتي عن أي تلفيات تحدث للسيارة نتيجة سوء الاستخدام أو
عدم العناية. وبعدم تسليم السيارة لأي شخص آخر أو السماح له باستخدام السيارة وأن أسلم السيارة على حالة التي استلمتها
عليها فور طلب الإدارة ذلك وأن أراعي في استخدامها القوانين وأنظمة العمل المعمول بها في المملكة العربية السعودية.
</p>
<p style="text-align:justify;margin-right:10%;margin-left:10%;color:black; line-height: 1.8;">
وأقر بأنني اطلعت على جميع ما ورد بسياسة استخدام السيارات بالشركة ............................................... وأقر بالتزامي
الكامل بها وبما ورد فيها.
</p>
<br/>
<p style="text-align:right;margin-right:10%;margin-left:10%;color:black;font-weight:bold; line-height: 1.8;">
<span>الإسم :
<span t-esc="o.employee_id.name"/>
</span>
<br/>
<span>التوقيع :
<span t-esc="o.employee_id.name"/>
</span>
<br/>
<span>تاريخ إستلام السيارة :
<span t-esc="o.start_date"/>
</span>
</p>
<!-- <p>I <span t-esc="o.employee_id.name"/> Nationality <span t-esc="o.employee_id.country_id.name"/> Id Number/Iqama <span t-esc="o.employee_id.iqama_number.iqama_id"/><br></br>-->
<!-- From <span t-esc="o.employee_id.iqama_creat_date"/> End <span t-esc="o.employee_id.iqama_expiy_date"/> Have Receive Vehicle Type <span t-esc="o.vehicle_id.fleet_type_id.name"/><br></br>-->
<!-- Model <span t-esc="o.model_id.name"/> Plate <span t-esc="o.license_plate"/> Color <span t-esc="o.vehicle_id.color"/> from company <br></br> and i will use it for company work purpose only<br></br>-->
<!-- I Declare All above <br></br>-->
<!-- Name: <span t-esc="o.employee_id.name"/> <br></br>-->
<!-- Signature: <span t-esc="o.employee_id.name"/> <br></br>-->
<!-- Date: <br></br>-->
<!-- </p>-->
</t>
</div>
</t>
</t>
</template>
<report
id="delegation_receive_report_pdf_act"
model="vehicle.delegation"
string="Receive Report"
report_type="qweb-pdf"
name="odex_fleet.delegation_receive_report_pdf"
file="odex_fleet.delegation_receive_report_pdf"
menu="True"/>
<!-- Driver -->
<template id="driver_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<h2 colspan="10" class="text-center" style="font-size:20px">Driver Report
<span t-esc="date_from"/>
-
<span t-esc="date_to"/>
<br></br>
<br></br>
</h2>
<h2 colspan="10" class="text-center" style="font-size:20px" >
<t t-esc="', '.join(department for department in department_ids)"/>
</h2>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style="width:100%;">
<th style="text-align:center;">#</th>
<th style="text-align:center;">Driver</th>
<th style="text-align:center;">Id Number</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Model</th>
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">State</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="docs" t-as="o">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td class="text-center">
<span t-esc="o.name"/>
</td>
<td class="text-center">
<span t-esc="o.license_number"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.fleet_type_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.model_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.license_plate"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.states.name"/>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</t>
</t>
</template>
<report
id="driver_report_pdf_act"
model="hr.employee"
string="Driver Report"
report_type="qweb-pdf"
name="odex_fleet.driver_report_pdf"
file="odex_fleet.driver_report_pdf"
menu="False"/>
<!-- Driver Delegation -->
<template id="driver_delegation_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<h2 colspan="10" class="text-center" style="font-size:20px">Driver Delegation Report
<!-- <span t-esc="date_from"/>-->
<!-- - -->
<!-- <span t-esc="date_to"/>-->
</h2>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">#</th>
<th style="text-align:center;">Driver</th>
<th style="text-align:center;">Id Number</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Model</th>
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">State</th>
<th style="text-align:center;">Branch</th>
<th style="text-align:center;">Start</th>
<th style="text-align:center;">End</th>
<th style="text-align:center;">KM Number</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="docs" t-as="o">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td class="text-center">
<span t-esc="o.employee_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.license_number"/>
</td>
<td class="text-center">
<span t-esc="o.fleet_type_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.model_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.license_plate"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.branch_id.state_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.branch_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.start_date"/>
</td>
<td class="text-center">
<span t-esc="o.end_date"/>
</td>
<td class="text-center">
<span t-esc="o.km_number"/>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</t>
</t>
</template>
<report
id="driver_delegation_report_pdf_act"
model="vehicle.delegation"
string="Driver Delegation Report"
report_type="qweb-pdf"
name="odex_fleet.driver_delegation_report_pdf"
file="odex_fleet.driver_delegation_report_pdf"
menu="False"/>
</data>
</odoo>

View File

@ -1,571 +0,0 @@
# -*- coding: utf-8 -*-
import io
import base64
import matplotlib.pyplot as plt
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from datetime import datetime,timedelta,date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
import arabic_reshaper
from bidi.algorithm import get_display
import io
import base64
class FleetBranchReport(models.AbstractModel):
_name = 'report.odex_fleet.fleet_branch_report_pdf'
_description = 'Report Branch'
def get_result(self, data=None):
form = data
domain = [('invoice_id','!=', False)]
if form['branch_ids']:
domain += [('branch_id','in',form['branch_ids'])]
if form['type_ids']:
domain += [('vehicle_id.fleet_type_id','in',form['type_ids'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
if form['vehicle_del_type'] == 'department':
domain += [('vehicle_id.department_id.name', 'in', form['department_ids'])]
if form['vehicle_del_type'] == 'project' :
domain += [('vehicle_id.project_id.name', 'in', form['project_ids'])]
service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
fuel = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
branch = self.env['res.branch'].browse(form['branch_ids']) if form['branch_ids'] else set(service.mapped('branch_id') + fuel.mapped('branch_id'))
types = self.env['fleet.type'].browse(form['type_ids']) if form['type_ids'] else set(service.mapped('vehicle_id.fleet_type_id') + fuel.mapped('vehicle_id.fleet_type_id'))
data = {}
li = []
for b in branch:
b_service = service.filtered(lambda r:r.branch_id == b)
b_fuel = fuel.filtered(lambda r:r.branch_id == b)
rec = []
for t in types:
value = {}
value['type'] = t.name
value['total'] = sum(b_service.filtered(lambda r:r.vehicle_id.fleet_type_id == t).mapped('amount')) +\
sum(b_fuel.filtered(lambda r:r.vehicle_id.fleet_type_id == t).mapped('amount')) or 0
rec.append(value)
li.append({'branch':b.name,'data':rec,'total':sum(b_service.mapped('amount'))+sum(b_fuel.mapped('amount')) or 0})
tot = []
for t in types:
amount = sum(service.filtered(lambda r:r.vehicle_id.fleet_type_id == t and r.branch_id in branch).mapped('amount')) +\
sum(fuel.filtered(lambda r:r.vehicle_id.fleet_type_id == t and r.branch_id in branch).mapped('amount')) or 0
tot.append([t.name,amount])
data['total'] = tot
data['branch'] = sorted(li, key=lambda d: d['total'], reverse=False)
return data
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# cost chart
class FleetChartReport(models.AbstractModel):
_name = 'report.odex_fleet.all_branch_cost_report_pdf'
_description = 'Report Branch Cost'
def get_chart(self, cdata,type=False):
print("ffffffffffffffff",cdata)
li = []
labels, slices = [], []
for dic in cdata:
if type:
labels.append(get_display(arabic_reshaper.reshape(dic['type'])))
else:
labels.append(get_display(arabic_reshaper.reshape(dic['branch'])))
slices.append(round(dic['total_per'],2))
textprops = {"fontsize": 9}
plt.pie(slices, labels=labels, autopct='%1.1f%%', shadow=True, startangle=15, textprops=textprops, )
plt.axis('equal')
buffered = io.BytesIO()
plt.savefig(buffered, format='png')
plt.close()
return base64.b64encode(buffered.getvalue())
def bar_get_chart(self, datas,type=False):
li = []
for cdata in datas:
labels, slices = [], []
for dic in cdata['data']:
labels.append(get_display(arabic_reshaper.reshape(dic['branch'])))
slices.append(round(dic['total_per'],2))
line = plt.bar(labels, slices)
plt.xlabel('Percentage')
plt.ylabel("Branch")
for i in range(len(slices)):
plt.annotate(str(slices[i]), xy=(labels[i], slices[i]), ha='center', va='bottom')
# plt.show()
buffered = io.BytesIO()
plt.savefig(buffered, format='png')
plt.close()
li.append(base64.b64encode(buffered.getvalue()))
return li
def get_result(self, data=None):
form = data
domain = []
if form['branch_ids']:
domain += [('branch_id','in',form['branch_ids'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
if form['type_ids']:
domain += [('vehicle_id.fleet_type_id','in',form['type_ids'])]
if form ['vehicle_del_type'] == 'department':
domain += [('vehicle_id.department_id.name','in',form['department_ids'])]
if form ['vehicle_del_type'] == 'project':
domain += [('vehicle_id.project_id.name','in',form['project_ids'])]
man = self.env['fleet.maintenance'].sudo().search(domain)
domain += [('invoice_id','!=', False)]
service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
fuel = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
branch = self.env['res.branch'].browse(form['branch_ids']) if form['branch_ids'] else set(service.mapped('branch_id') + fuel.mapped('branch_id')+man.mapped('branch_id')+ man.mapped('branch_id')+man.mapped('branch_id'))
types = self.env['fleet.type'].browse(form['type_ids']) if form['type_ids'] else set(service.mapped('vehicle_id.fleet_type_id') + fuel.mapped('vehicle_id.fleet_type_id')+man.mapped('vehicle_id.fleet_type_id'))
totals_alls = sum(service.mapped('amount')) + sum(fuel.mapped('amount')) + sum(man.mapped('total_cost'))
data = {}
li = []
tot = []
l = []
for t in types:
value = {}
value['type'] = t.name
total = sum(service.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount')) + \
sum(fuel.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount')) + \
sum(man.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('total_cost'))
total_per = total / totals_alls * 100 if totals_alls > 0 else 0
value['total'] = total
value['total_per'] = total_per
l.append(value)
rec = []
for b in branch:
datas = {}
branch_total = sum(
service.filtered(lambda r: r.vehicle_id.fleet_type_id == t and r.branch_id == b).mapped('amount')) + \
sum(fuel.filtered(lambda r: r.vehicle_id.fleet_type_id == t and r.branch_id == b).mapped(
'amount')) +sum(man.filtered(lambda r: r.vehicle_id.fleet_type_id == t and r.branch_id == b).mapped(
'total_cost'))
branch_total_per = branch_total / totals_alls * 100 if totals_alls > 0 else 0
datas['branch'] = b.name
datas['total'] = branch_total
datas['total_per'] = branch_total_per
rec.append(datas)
branch_branch = sum(
service.filtered(lambda r:r.branch_id == b).mapped('amount')) + \
sum(fuel.filtered(lambda r:r.branch_id == b).mapped('amount')) + sum(
man.filtered(lambda r:r.branch_id == b).mapped( 'total_cost'))
branch_per = branch_branch / totals_alls * 100 if totals_alls > 0 else 0
tot.append({'branch': b.name, 'total': branch_branch, 'total_per': branch_per})
li.append({'type': t.name, 'data': sorted(rec, key=lambda d: d['total'], reverse=True)})
tot = [dict(t) for t in {tuple(d.items()) for d in tot}]
data['branch'] = sorted(tot, key=lambda d: d['total'], reverse=True)
data['types'] = sorted(l, key=lambda d: d['total'], reverse=True)
data['branch_types'] = li
data['chart'] = self.get_chart(tot)
data['chart_main'] = self.get_chart(l,type=True)
data['bar_chart'] = self.bar_get_chart(li,type=True)
return data
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# state
class AllStateReport(models.AbstractModel):
_name = 'report.odex_fleet.state_cost_report_pdf'
_description = 'Report State Cotst'
def get_result(self, data=None):
form = data
domain = [('invoice_id','!=', False)]
if form['state_ids']:
domain += [('branch_id.state_id','in',form['state_ids'])]
if form['type_ids']:
domain += [('vehicle_id.fleet_type_id','in',form['type_ids'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
fuel = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
branch = list(set(service.mapped('branch_id') + fuel.mapped('branch_id')))
state = self.env['res.country.state'].browse(form['state_ids']) if form['state_ids'] else list(set(service.mapped('branch_id.state_id') + fuel.mapped('branch_id.state_id')))
types = self.env['fleet.type'].browse(form['type_ids']) if form['type_ids'] else set(service.mapped('vehicle_id.fleet_type_id') + fuel.mapped('vehicle_id.fleet_type_id'))
last = []
for s in state:
data = {}
li = []
for b in branch:
if b.state_id == s:
b_service = service.filtered(lambda r:r.branch_id == b)
b_fuel = fuel.filtered(lambda r:r.branch_id == b)
rec = []
for t in types:
value = {}
value['type'] = t.name
value['total'] = sum(b_service.filtered(lambda r:r.vehicle_id.fleet_type_id == t).mapped('amount')) +\
sum(b_fuel.filtered(lambda r:r.vehicle_id.fleet_type_id == t).mapped('amount')) or 0
rec.append(value)
li.append({'branch':b.name,'data':sorted(rec, key=lambda d: d['total'], reverse=False),'total':sum(b_service.mapped('amount'))+sum(b_fuel.mapped('amount')) or 0})
tot = []
total_state = 0
for t in types:
amount = sum(service.filtered(lambda r:r.vehicle_id.fleet_type_id == t and r.branch_id.state_id == s).mapped('amount')) +\
sum(fuel.filtered(lambda r:r.vehicle_id.fleet_type_id == t and r.branch_id.state_id == s).mapped('amount')) or 0
total_state += amount
tot.append([t.name,amount])
data['total'] = tot
data['branch'] = li
data['state'] = s.name
data['state_total'] = total_state
last.append(data)
return last
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
print("ffffffffffffffffffff",record)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# consumption
# class FleetConsumptionReport(models.AbstractModel):
# _name = 'report.odex_fleet.car_consumption_cost_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = []
# if form['branch_ids']:
# domain += [('branch_id','in',form['branch_ids'])]
# if form['date_from'] and form['date_to']:
# domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
# man = self.env['fleet.maintenance'].sudo().search(domain)
# domain += [('invoice_id','!=', False)]
# service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
# fuel = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
# branch = self.env['res.branch'].browse(form['branch_ids']) if form['branch_ids'] else set(service.mapped('branch_id') + fuel.mapped('branch_id')+man.mapped('branch_id')+ man.mapped('branch_id')+man.mapped('branch_id'))
# types = self.env['fleet.type'].browse(form['type_ids']) if form['type_ids'] else set(service.mapped('vehicle_id.fleet_type_id') + fuel.mapped('vehicle_id.fleet_type_id')+man.mapped('vehicle_id.fleet_type_id'))
# print("gggggggggggggggggg",types,branch)
# data = {}
# li = []
# for b in branch:
# b_service = service.filtered(lambda r:r.branch_id == b)
# b_fuel = fuel.filtered(lambda r:r.branch_id == b)
# b_man = man.filtered(lambda r: r.branch_id == b)
# service_total = sum (b_service.mapped('amount'))
# fuel_total = sum (b_fuel.mapped('amount'))
# man_total = sum (b_man.mapped('total_cost'))
# totals = service_total+fuel_total+man_total
# service_total_per =service_total/totals*100 if totals>0 else 0
# fuel_total_per =fuel_total/totals*100 if totals>0 else 0
# man_total_per =man_total/totals*100 if totals>0 else 0
# total_per = man_total_per+fuel_total_per+service_total_per
# data['total'] = [[service_total,fuel_total,man_total,totals],[service_total_per,fuel_total_per,man_total_per,total_per]]
# vehicle_ids = list(set(service.mapped('vehicle_id') + fuel.mapped('vehicle_id') + man.mapped('vehicle_id')))
# rec = []
# for t in types:
# l =[]
# value = {}
# value['type'] = t.name
# print("dddddddddddd",vehicle_ids)
# # fuel_total_b = 0
# # man_total_b = 0
# # service_total_b = 0
# fuel_total_b = sum(b_fuel.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount'))
# man_total_b = sum(b_man.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('total_cost'))
# service_total_b = sum(b_service.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount'))
# total_total = service_total+man_total+fuel_total
# total_total_per = totals/ total_total *100if total_total>0 else 0
# for c in vehicle_ids:
# if c.fleet_type_id == t:
# z = {}
# z['name'] = c.name
# z['model'] = c.model_id.name
# z['driver'] = c.employee_id.name
# z['plate'] = c.license_plate
# z['job'] = c.employee_id.job_id.name
# z['fuel'] = sum(b_fuel.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('amount'))
# z['man'] = sum(b_man.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('total_cost'))
# z['service'] = sum(b_service.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('amount'))
# z['total'] = z['fuel'] + z['man'] + z['service']
# z['all_tot_per'] = z['total']/total_total*100 if total_total>0 else 0
# # print("fffffffffff444", z['all_tot_per'] , total_total,z['total'],total_total_per)
# # total_total_per += z['all_tot_per']
# # fuel_total_b += z['fuel']
# # man_total_b += z['man']
# # service_total_b += z['service']
# l.append(z)
# value['data'] = l
# value['type'] = t.name
# value['total'] = [fuel_total_b,service_total_b,man_total_b,total_total,total_total_per]
# rec.append(value)
# li.append({'branch':b.name,'data':rec,'total':[fuel_total_b,service_total_b,man_total_b,total_total,total_total_per]})
# data['branch'] = li
# return data
#
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# print("ddddddddddddddd",record)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
# # Form Renew
# # renew
# class Renew(models.AbstractModel):
# _name = 'report.odex_fleet.renew_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = [('state','=', 'approve')]
# if form['date_from'] and form['date_to']:
# domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
# form = self.env['form.renew'].sudo().search(domain)
# return form
#
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
# # To renew
# class ToRenew(models.AbstractModel):
# _name = 'report.odex_fleet.to_renew_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = []
# if form['date_from'] and form['date_to']:
# domain = [('form_end', '>=', form['date_from']), ('form_end', '<=', form['date_to'])]
# form = self.env['fleet.vehicle'].sudo().search(domain)
# return form
#
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
# # driver
# class Driver(models.AbstractModel):
# _name = 'report.odex_fleet.driver_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = [('driver','=',True),('vehicle_id','!=',False)]
# if form['state_ids']:
# domain += [('branch_id.state_id','in',form['state_ids'])]
# if form['date_from'] and form['date_to']:
# domain = [('delegation_start', '>=', form['date_from']), ('delegation_end', '<=', form['date_to'])]
# emp = self.env['hr.employee'].sudo().search(domain)
# return emp
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
#
# # driver Delegation
#
# class DriverDelegation(models.AbstractModel):
# _name = 'report.odex_fleet.driver_delegation_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = [('delegation_type','=','driver'),('state','=','approve')]
# if form['state_ids']:
# domain += [('vehicle_id.branch_id.state_id','in',form['state_ids'])]
# if form['date_from'] and form['date_to']:
# domain += [('start_date', '>=', form['date_from']), ('end_date', '<=', form['date_to'])]
# emp = self.env['vehicle.delegation'].sudo().search(domain)
# return emp
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
# Service
# class AllStateServiceReport(models.AbstractModel):
# _name = 'report.odex_fleet.service_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = [('invoice_id','!=', False)]
# if form['state_ids']:
# domain += [('branch_id.state_id','in',form['state_ids'])]
# if form['type_ids']:
# domain += [('fleet_type_id','in',form['type_ids'])]
# if form['date_from'] and form['date_to']:
# domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
# service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
# branch = service.mapped('branch_id')
# state = self.env['res.country.state'].browse(form['state_ids']) if form['state_ids'] else service.mapped('branch_id.state_id')
# last = []
# for s in state:
# data = {}
# li = []
# for b in branch:
# if b.state_id == s:
# b_service = service.filtered(lambda r:r.branch_id == b)
# rec = []
# for z in b_service:
# for t in z.cost_ids:
# value = {}
# value['name'] = z.vehicle_id.employee_id.name
# value['cost'] = t.amount
# value['service'] = t.cost_subtype_id.name
# value['vehicle'] = z.vehicle_id.fleet_type_id.name
# value['license_number'] = z.vehicle_id.license_plate
# rec.append(value)
# li.append({'branch':b.name,'data':rec,'total':sum(b_service.mapped('amount')) or 0})
# data['branch'] = li
# data['state'] = s.name
# last.append(data)
# print("RRRRRRRRRRRRRRRRRR",last)
# return last
#
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }
# # Invoice
# class Invoice(models.AbstractModel):
# _name = 'report.odex_fleet.invoice_report_pdf'
#
# def get_result(self, data=None):
# form = data
# domain = [('invoice_id','!=', False)]
# if form['vehicle_ids']:
# domain += [('vehicle_id','in',form['vehicle_ids'])]
# date = 0
# if form['date_from'] and form['date_to']:
# date = fields.Datetime.from_string(form['date_to']) - fields.Datetime.from_string(form['date_from'])
# date = date.days
# domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
# service = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
# # service_types = self.env['fleet.service.type'].browse(form['service_ids']) if form['service_ids'] else service.mapped('vehicle_id.fleet_type_id')
# vehicle_ids = self.env['fleet.vehicle'].browse(form['vehicle_ids'])
# li = []
# print("IIIIIIIIIIIIII",date)
# for v in vehicle_ids:
# b_service = service.filtered(lambda r:r.vehicle_id == v)
# invoice = b_service.mapped('invoice_id')
# if invoice:
# rec = {}
# rec['service'] = "Fuel"
# rec['car'] = v.name
# rec['driver'] = v.employee_id.name
# rec['type'] = v.fleet_type_id.name
# l = []
# total = 0
# for t in invoice:
# value = {}
# value['date'] = t.date_invoice
# value['number'] = t.number
# value['amount'] = t.amount_total
# total += t.amount_total
# l.append(value)
# rec['data'] = l
# rec['total'] = total
# rec['date'] = date
# liter = round(sum(b_service.mapped('liter'))/date,2)
# rec['liter'] = liter
# rec['liter_price'] = round(total/liter,2)
# li.append(rec)
# return li
#
#
#
# @api.model
# def _get_report_values(self, docids, data=None):
# record = self.get_result(data)
# print("OOOOOOOOOOOOOOOOOO",record)
# date_to, date_from = ' / ', ' / '
# if data['date_from'] and data['date_to']:
# date_from = data['date_from']
# date_to = data['date_to']
# return {
# 'date_from': date_from,
# 'date_to': date_to,
# 'docs': record,
# }

File diff suppressed because it is too large Load Diff

View File

@ -1,143 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- To maintains-->
<template id="maintains_purchase_req">
<t t-call="web.html_container" t-translation="off">
<t t-call="web.external_layout">
<div class="page" style="font-size:16pt;font-family:Arial;direction:rtl">
<t t-foreach="docs" t-as="o">
<br/>
<h2 colspan="10" class="text-center" style="font-size:20px;font-weight: bold">
<strong>طلب أمر شراء</strong>
<span t-esc="o.name"/>
</h2>
<br/>
<p style="text-align:right;margin-right:5%;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
<strong>
رقم الطلب(<span t-esc="o.id"/>-لوحة رقم
<span t-esc="o.vehicle_id.license_plate"/>)
الفرع
<span t-esc="o.branch_id.name"/>
</strong>
</span>
</p>
<p style="text-align:justify;margin-right:5%;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
<strong>
التاريخ :
<span t-esc="o.date"/>
</strong>
</span>
</p>
<p style="text-align:right;margin-right:5%;color:black;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
الموضـوع :
<span t-esc="o.name"/>
سيارة
رقم اللوحة
<span t-esc="o.vehicle_id.license_plate"/>
</span>
<br/>
</p>
<p style="text-align:justify;margin-right:5%;margin-left:5%;line-height: 1.8;">
إشارة للموضوع أعلاه نرجو من سيادتكم تعميد من يلزم بصرف مبلغ و قدره إشارة للموضوع أعلاه نرجو من سيادتكم تعميد من يلزم بصرف مبلغ و قدره (<span t-esc="o.total1"/>) ريال وذلك لزوم
السيارة
<span t-esc="o.name"/>
رقم اللوحة
<span t-esc="o.vehicle_id.license_plate"/>
القائد /
<span t-esc="o.employee_id.name"/>
</p>
<br/>
<table class="table table-condensed table-bordered"
style="margin-right:10%;margin-left:10%; width:80%">
<thead class="text-center">
<tr style="height:50px;text-align:center; vertical-align:middle">
<th style="text-align:center;">م</th>
<th style="text-align:center;">البيان</th>
<th style="text-align:center;width:20%">السعر</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="o.service_ids" t-as="d">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td style="text-align:center;">
<span t-esc="d.service_id.name"/>
</td>
<td style="text-align:center;">
<span t-esc="d.qty"/>
</td>
</tr>
</t>
</tbody>
</table>
<p style="text-align:right;margin-right:5%;font-weight:bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;"> * المرفقات</span>
</p>
<p style="text-align:right;margin-right:5%;font-weight:bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;"> * عرض السعر</span>
</p>
<table class="table table-condensed table-bordered"
style="margin-right:10%;margin-left:10%; width:80%">
<tr>
<td colspan="4">
<center>
<strong>مسؤول الصيانة</strong>
</center>
</td>
<td colspan="4">
<center>
<strong>تعميد المدير العام</strong>
</center>
</td>
</tr>
<tr>
<td style="height:90px;text-align:center; vertical-align:middle" colspan="4">
<p></p>
<p style="line-height:1.8;">الإسم :........................................</p>
<p style="line-height:1.8;">التوقيع :........................................
</p>
</td>
<td style="height:90px;text-align:center; vertical-align:middle" colspan="4">
<p></p>
<p style="line-height:1.8;">الإسم :........................................</p>
<p style="line-height:1.8;">التوقيع :........................................
</p>
</td>
</tr>
</table>
</t>
</div>
</t>
</t>
</template>
<report
id="maintains_purchase_req_act"
model="fleet.maintenance"
string="Maintenance Purchase Request"
report_type="qweb-pdf"
name="odex_fleet.maintains_purchase_req"
file="odex_fleet.maintains_purchase_req"/>
</data>
</odoo>

View File

@ -1,43 +0,0 @@
# -*- coding: utf-8 -*-
import io
import base64
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from datetime import datetime,timedelta,date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
class FleetMaintainsReport(models.AbstractModel):
_name = 'report.odex_fleet.maintains_report_pdf'
_description = 'Report Mainatains'
def get_result(self, data=None):
form = data
domain = []
if form['branch_ids']:
domain += [('branch_id','in',form['branch_ids'])]
if form['report_type']:
domain += [('state','in',['draft','confirm'])] if form['report_type'] == 'to_maintains' else [('state','in',['approve','paid'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
if form['department_ids']:
domain += [('vehicle_id.department_id.name', 'in', form['department_ids'])]
request = self.env['fleet.maintenance'].sudo().search(domain,order="id desc")
return request
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'report_type': data['report_type'],
'docs': record,
}

View File

@ -1,82 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- To maintains-->
<template id="maintains_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<h2 colspan="10" class="text-center" style="font-size:20px">
<t t-if="report_type == 'to_maintains'"> Vehicle Need Maintenance Report</t> <t t-if="report_type == 'maintains'"> Vehicle Maintenance Report</t><span t-esc="date_from"/> - <span t-esc="date_to"/></h2>
<h2 colspan="10" class="text-center" style="font-size:20px" >
<t t-esc="', '.join(department for department in department_ids)"/>
</h2>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">#</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Model</th>
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">Driver</th>
<th style="text-align:center;">State</th>
<th style="text-align:center;">Branch</th>
<th style="text-align:center;">Maintenance</th>
<th style="text-align:center;">Maintenance Date</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="docs" t-as="o">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.fleet_type_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.model_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.license_plate"/>
</td>
<td class="text-center">
<span t-esc="o.employee_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.branch_id.state_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.branch_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.name"/>
</td>
<td class="text-center">
<span t-esc="o.date"/>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</t>
</t>
</template>
<report
id ="maintains_report_pdf_act"
model ="fleet.maintenance"
string ="Maintenance Report"
report_type ="qweb-pdf"
name ="odex_fleet.maintains_report_pdf"
file ="odex_fleet.maintains_report_pdf"
menu="False" />
</data>
</odoo>

View File

@ -1,67 +0,0 @@
# -*- coding: utf-8 -*-
import io
import base64
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from datetime import datetime,timedelta,date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
import arabic_reshaper
from bidi.algorithm import get_display
import io
import base64
# Form Renew
# renew
class Renew(models.AbstractModel):
_name = 'report.odex_fleet.renew_report_pdf'
_description = 'Report Renew'
def get_result(self, data=None):
form = data
domain = [('state','=', 'approve')]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
form = self.env['form.renew'].sudo().search(domain)
return form
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# To renew
class ToRenew(models.AbstractModel):
_name = 'report.odex_fleet.to_renew_report_pdf'
_description = 'Report To Renew'
def get_result(self, data=None):
form = data
domain = []
if form['date_from'] and form['date_to']:
domain = [('form_end', '>=', form['date_from']), ('form_end', '<=', form['date_to'])]
form = self.env['fleet.vehicle'].sudo().search(domain)
return form
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}

View File

@ -1,168 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<!-- Form Renew-->
<!-- renew-->
<template id="renew_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<p style="text-align:right;margin-right:5%;font-weight: bold; line-height: 1.8;">
<strong>
التاريخ :
<span t-esc="context_timestamp(datetime.datetime.now()).strftime('%Y-%m-%d')"/>
</strong>
</p>
<h2 colspan="10" class="text-center" style="font-size:20px">Vehicle Form Renew Cost Report
<span t-esc="date_from"/>
-
<span t-esc="date_to"/>
</h2>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Branch</th>
<th style="text-align:center;">Manufacture Year</th>
<th style="text-align:center;">Serial</th>
<th style="text-align:center;">End Date</th>
<th style="text-align:center;">Cost</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="Total" t-value="0.0"/>
<t t-foreach="docs" t-as="o">
<tr>
<td class="text-center">
<span t-esc="o.vehicle_id.license_plate"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.model_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.branch_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.model_year"/>
</td>
<td class="text-center">
<span t-esc="o.vehicle_id.serial_number"/>
</td>
<td class="text-center">
<span t-esc="o.new_date"/>
</td>
<td class="text-center">
<span t-esc="o.cost"/>
</td>
<t t-set="Total" t-value="Total + o.cost"/>
</tr>
</t>
<tr>
<td style="text-align:center;" colspan="6">Total</td>
<td class="text-center">
<strong>
<span t-esc="Total"/>
</strong>
</td>
</tr>
</tbody>
</table>
</div>
</t>
</t>
</template>
<report
id="renew_report_pdf_act"
model="form.renew"
string="Renew Report"
report_type="qweb-pdf"
name="odex_fleet.renew_report_pdf"
file="odex_fleet.renew_report_pdf"
menu="False"/>
<!-- to renew-->
<template id="to_renew_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<p style="text-align:right;margin-right:5%;font-weight: bold; line-height: 1.8;">
<strong>
التاريخ :
<span t-esc="context_timestamp(datetime.datetime.now()).strftime('%Y-%m-%d')"/>
</strong>
</p>
<h2 colspan="10" class="text-center" style="font-size:20px">Vehicle Form To Renew Cost Report
<span t-esc="date_from"/>
-
<span t-esc="date_to"/>
</h2>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Branch</th>
<th style="text-align:center;">Manufacture Year</th>
<th style="text-align:center;">Serial</th>
<th style="text-align:center;">End Date</th>
<th style="text-align:center;">Cost</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="Total" t-value="0.0"/>
<t t-foreach="docs" t-as="o">
<tr>
<td class="text-center">
<span t-esc="o.license_plate"/>
</td>
<td class="text-center">
<span t-esc="o.model_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.branch_id.name"/>
</td>
<td class="text-center">
<span t-esc="o.model_year"/>
</td>
<td class="text-center">
<span t-esc="o.serial_number"/>
</td>
<td class="text-center">
<span t-esc="o.form_end"/>
</td>
<td class="text-center">
<span t-esc="o.fleet_type_id.amount"/>
</td>
<t t-set="Total" t-value="Total + o.fleet_type_id.amount"/>
</tr>
</t>
<tr>
<td style="text-align:center;" colspan="6">Total</td>
<td class="text-center">
<strong>
<span t-esc="Total"/>
</strong>
</td>
</tr>
</tbody>
</table>
</div>
</t>
</t>
</template>
<report
id="to_renew_report_pdf_act"
model="fleet.vehicle"
string="TO Renew Report"
report_type="qweb-pdf"
name="odex_fleet.to_renew_report_pdf"
file="odex_fleet.to_renew_report_pdf"
menu="False"/>
</data>
</odoo>

View File

@ -1,138 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<template id="services_purchase_req">
<t t-call="web.html_container" t-translation="off">
<t t-call="web.external_layout">
<div class="page" style="font-size:16pt;font-family:Arial;direction:rtl">
<t t-foreach="docs" t-as="o">
<br/>
<p style="text-align:center;font-weight: bold">
<strong>طلب أمر شراء
<span t-esc="o.cost_subtype_id.name"/>
</strong>
</p>
<br/>
<p style="text-align:right;margin-right:5%;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
<strong>
رقم الطلب(<span t-esc="o.id"/>-لوحة رقم
<span t-esc="o.vehicle_id.license_plate"/>)
الفرع
<span t-esc="o.branch_id.name"/>
</strong>
</span>
</p>
<p style="text-align:justify;margin-right:5%;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
<strong>
التاريخ :
<span t-esc="o.date"/>
</strong>
</span>
</p>
<p style="text-align:right;margin-right:5%;font-weight: bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;">
الموضـوع :شراء
<span t-esc="o.cost_subtype_id.name"/>
سيارة رقم
<span t-esc="o.vehicle_id.license_plate"/>
</span>
<br/>
</p>
<p style="text-align:justify;margin-right:5%;margin-left:5%;line-height: 1.8;">
إشارة للموضوع أعلاه نرجو من سيادتكم تعميد من يلزم بصرف مبلغ و قدره (<span t-esc="o.amount"/>) ريال وذلك لزوم
شراء
<span t-esc="o.cost_subtype_id.name"/>
للسيارة
<span t-esc="o.name"/>
رقم
<span t-esc="o.vehicle_id.license_plate"/>
القائد /
<span t-esc="o.vehicle_id.employee_id.name"/>
</p>
<br/>
<table class="table table-condensed table-bordered"
style="margin-right:10%;margin-left:10%; width:80%">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">م</th>
<th style="text-align:center;">البيان</th>
<th style="text-align:center;">العدد</th>
<th style="text-align:center;">السعر</th>
<th style="text-align:center;">الإجمالي</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="o.cost_ids" t-as="d">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td style="text-align:center;">
<span t-esc="d.cost_subtype_id.name"/>
</td>
<td style="text-align:center;">
<span t-esc="d.number"/>
</td>
<td style="text-align:center;">
<span t-esc="d.amount"/>
</td>
<td style="text-align:center;">
<span t-esc="d.total"/>
</td>
</tr>
</t>
</tbody>
</table>
<p style="text-align:right;margin-right:5%;font-weight:bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;"> * المرفقات</span>
</p>
<p style="text-align:right;margin-right:5%;font-weight:bold; line-height: 1.8;">
<span style="border-bottom: 1px solid #333;"> * عرض السعر</span>
</p>
<table class="table table-condensed table-bordered"
style="margin-right:10%;margin-left:10%; width:80%">
<tr>
<td colspan="4">
<center>
<strong>مسؤول الصيانة</strong>
</center>
</td>
<td colspan="4">
<center>
<strong>تعميد المدير العام</strong>
</center>
</td>
</tr>
<tr>
<td style="height:90px;text-align:center; vertical-align:middle" colspan="4">
<p></p>
<p style="line-height:1.8;">الإسم :........................................</p>
<p style="line-height:1.8;">التوقيع :........................................
</p>
</td>
<td style="height:90px;text-align:center; vertical-align:middle" colspan="4">
<p></p>
<p style="line-height:1.8;">الإسم :........................................</p>
<p style="line-height:1.8;">التوقيع :........................................
</p>
</td>
</tr>
</table>
</t>
</div>
</t>
</t>
</template>
<report
id="services_purchase_req_act"
model="fleet.vehicle.log.services"
string="Services Purchase Request"
report_type="qweb-pdf"
name="odex_fleet.services_purchase_req"
file="odex_fleet.services_purchase_req"/>
</data>
</odoo>

View File

@ -1,259 +0,0 @@
# -*- coding: utf-8 -*-
import io
import base64
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from datetime import datetime,timedelta,date
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
import arabic_reshaper
from bidi.algorithm import get_display
import io
import base64
# consumption
class FleetConsumptionReport(models.AbstractModel):
_name = 'report.odex_fleet.car_consumption_cost_report_pdf'
_description = 'Report Consumption'
def get_result(self, data=None):
form = data
domain = []
if form['vehicle_ids']:
domain += [('vehicle_id','in',form['vehicle_ids'])]
if form['type_ids']:
domain += [('vehicle_id.fleet_type_id','in',form['type_ids'])]
if form['branch_ids']:
domain += [('branch_id','in',form['branch_ids'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
if form['department_ids']:
domain += [('vehicle_id.department_id.name', 'in', form['department_ids'])]
man = self.env['fleet.maintenance'].sudo().search(domain)
domain += [('invoice_id','!=', False)]
service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
fuel = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
branch = self.env['res.branch'].browse(form['branch_ids']) if form['branch_ids'] else set(service.mapped('branch_id') + fuel.mapped('branch_id')+man.mapped('branch_id')+ man.mapped('branch_id')+man.mapped('branch_id'))
types = self.env['fleet.type'].browse(form['type_ids']) if form['type_ids'] else set(service.mapped('vehicle_id.fleet_type_id') + fuel.mapped('vehicle_id.fleet_type_id')+man.mapped('vehicle_id.fleet_type_id'))
data = {}
li = []
for b in branch:
b_service = service.filtered(lambda r:r.branch_id == b)
b_fuel = fuel.filtered(lambda r:r.branch_id == b)
b_man = man.filtered(lambda r: r.branch_id == b)
service_total = sum (b_service.mapped('amount'))
fuel_total = sum (b_fuel.mapped('amount'))
man_total = sum (b_man.mapped('total_cost'))
totals = service_total+fuel_total+man_total
service_total_per =service_total/totals*100 if totals>0 else 0
fuel_total_per =fuel_total/totals*100 if totals>0 else 0
man_total_per =man_total/totals*100 if totals>0 else 0
total_per = man_total_per+fuel_total_per+service_total_per
total_values = [[service_total,fuel_total,man_total,totals],[service_total_per,fuel_total_per,man_total_per,total_per]]
vehicle_ids = list(set(b_service.mapped('vehicle_id') + b_fuel.mapped('vehicle_id') + b_man.mapped('vehicle_id')))
rec = []
for t in types:
l =[]
value = {}
fuel_total_b = sum(b_fuel.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount'))
man_total_b = sum(b_man.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('total_cost'))
service_total_b = sum(b_service.filtered(lambda r: r.vehicle_id.fleet_type_id == t).mapped('amount'))
total_total = fuel_total_b+man_total_b+service_total_b
total_total_per = 0
for c in vehicle_ids:
if c.fleet_type_id == t:
z = {}
z['name'] = c.name
z['model'] = c.model_id.name
z['driver'] = c.employee_id.name
z['plate'] = c.license_plate
z['job'] = c.employee_id.job_id.name
z['fuel'] = sum(b_fuel.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('amount'))
z['man'] = sum(b_man.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('total_cost'))
z['service'] = sum(b_service.filtered(lambda r:r.vehicle_id == c and r.vehicle_id.fleet_type_id == t).mapped('amount'))
z['total'] = z['fuel'] + z['man'] + z['service']
z['all_tot_per'] = z['total']/total_total*100 if total_total>0 else 0
total_total_per += z['all_tot_per']
l.append(z)
value['data'] = sorted(l, key=lambda d: d['total'], reverse=True)
value['type'] = t.name
value['total'] = [fuel_total_b,service_total_b,man_total_b,total_total,total_total_per]
rec.append(value)
li.append({'branch':b.name,'data':rec,'total':total_values})
return li
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# Service
class AllStateServiceReport(models.AbstractModel):
_name = 'report.odex_fleet.service_report_pdf'
_description = 'Report Fleet Service'
def get_result(self, data=None):
form = data
fleet_fuel = self.env['fleet.vehicle.log.fuel'].sudo().search([], limit=1)
if fleet_fuel.integration_with_accounting == True:
domain = [('invoice_id', '!=', False)]
elif fleet_fuel.integration_with_accounting == False:
domain = []
if form['state_ids']:
domain += [('branch_id.state_id','in',form['state_ids'])]
if form['type_ids']:
domain += [('vehicle_id.fleet_type_id','in',form['type_ids'])]
if form['date_from'] and form['date_to']:
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
if form['state_ids']:
domain += [('branch_id.state_id','in',form['state_ids'])]
if form['cost_subtype_ids']:
print("==================",form['cost_subtype_ids'])
domain += [('cost_subtype_id','in',form['cost_subtype_ids'])]
if form['department_ids']:
domain += [('vehicle_id.department_id.name', 'in', form['department_ids'])]
service = self.env['fleet.vehicle.log.services'].sudo().search(domain)
print("=================",service)
branch = service.mapped('branch_id')
state = self.env['res.country.state'].browse(form['state_ids']) if form['state_ids'] else service.mapped('branch_id.state_id')
last = []
for s in state:
data = {}
li = []
for b in branch:
if b.state_id == s:
b_service = service.filtered(lambda r:r.branch_id == b)
rec = []
for z in b_service:
for t in z.cost_ids:
value = {}
value['name'] = z.vehicle_id.employee_id.name
value['cost'] = t.total
value['service'] = t.cost_subtype_id.name
value['vehicle'] = z.vehicle_id.fleet_type_id.name
value['license_number'] = z.vehicle_id.license_plate
value['date'] = z.date
rec.append(value)
li.append({'branch':b.name,'data':rec,'total':sum(b_service.mapped('amount')) or 0})
data['branch'] = li
data['state'] = s.name
last.append(data)
return last
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}
# Invoice
class Invoice(models.AbstractModel):
_name = 'report.odex_fleet.invoice_report_pdf'
_description = 'Report Invoice'
def get_result(self, data=None):
form = data
domain = []
fleet_fuel = self.env['fleet.vehicle.log.fuel'].sudo().search([],limit=1)
if fleet_fuel.integration_with_accounting == True:
domain = [('invoice_id','!=', False)]
elif fleet_fuel.integration_with_accounting == False:
domain = []
if form['vehicle_ids']:
domain += [('vehicle_id','in',form['vehicle_ids'])]
date = 0
if form['date_from'] and form['date_to']:
date = fields.Datetime.from_string(form['date_to']) - fields.Datetime.from_string(form['date_from'])
date = date.days
domain += [('date', '>=', form['date_from']), ('date', '<=', form['date_to'])]
service = self.env['fleet.vehicle.log.fuel'].sudo().search(domain)
# service_types = self.env['fleet.service.type'].browse(form['service_ids']) if form['service_ids'] else service.mapped('vehicle_id.fleet_type_id')
vehicle_ids = self.env['fleet.vehicle'].browse(form['vehicle_ids']) if form['vehicle_ids'] else service.mapped('vehicle_id')
li = []
for v in vehicle_ids:
b_service = service.filtered(lambda r:r.vehicle_id == v)
if fleet_fuel.integration_with_accounting == True:
invoice = b_service.mapped('invoice_id')
if invoice:
rec = {}
rec['service'] = "Fuel"
rec['car'] = v.name
rec['driver'] = v.employee_id.name
rec['type'] = v.fleet_type_id.name
price = v.fuel_type.price
print("fffffffff",price)
l = []
total = 0
for t in invoice:
value = {}
value['date'] = t.invoice_date
value['number'] = t.ref
value['amount'] = t.amount_total
total += t.amount_total
l.append(value)
rec['data'] = l
rec['total'] = total
rec['date'] = date
liter = round(total/date if date>0 else 0,2)
rec['liter'] = liter
rec['liter_price'] = round(liter/price if price>0 else 0,2)
# rec['liter_price'] = round(total/liter if liter>0 else 0,2)
li.append(rec)
else:
rec = {}
rec['service'] = "Fuel"
rec['car'] = v.name
rec['driver'] = v.employee_id.name
rec['type'] = v.fleet_type_id.name
price = v.fuel_type.price
l = []
total = 0
for b in b_service:
value = {}
value['date'] = b.date
value['amount'] = b.amount
total += b.amount
l.append(value)
rec['data'] = l
rec['total'] = total
rec['date'] = date
liter = round(total / date if date > 0 else 0, 2)
rec['liter'] = liter
rec['liter_price'] = round(liter / price if price > 0 else 0, 2)
# rec['liter_price'] = round(total/liter if liter>0 else 0,2)
li.append(rec)
return li
@api.model
def _get_report_values(self, docids, data=None):
record = self.get_result(data)
print("OOOOOOOOOOOOOOOOOO",record)
date_to, date_from = ' / ', ' / '
if data['date_from'] and data['date_to']:
date_from = data['date_from']
date_to = data['date_to']
return {
'date_from': date_from,
'date_to': date_to,
'docs': record,
}

View File

@ -1,355 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<!-- car consumption-->
<template id="car_consumption_cost_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<h2 colspan="10" class="text-center" style="font-size:20px"> Total Vehicle Expense For Branch Report <span t-esc="date_from"/> - <span t-esc="date_to"/></h2>
<h2 colspan="10" class="text-center" style="font-size:20px" >
<t t-esc="', '.join(department for department in department_ids)"/>
</h2>
<t t-foreach="docs" t-as="doc">
<h3><span t-esc="doc['branch']"/> </h3>
<br></br>
<t t-foreach="doc['data']" t-as="s">
<h3 colspan="2" style="text-align:center;"> <span t-esc="s['type']"/></h3>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">#</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">Model</th>
<th style="text-align:center;">Plate</th>
<th style="text-align:center;">Driver</th>
<th style="text-align:center;">Job</th>
<th style="text-align:center;">Fuel</th>
<th style="text-align:center;">Oil</th>
<th style="text-align:center;">Maintenance</th>
<th style="text-align:center;">Totel</th>
<th style="text-align:center;">Total Percentage</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="s['data']" t-as="o">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<td class="text-center">
<span t-esc="o['name']"/>
</td>
<td class="text-center">
<span t-esc="o['model']"/>
</td>
<td class="text-center">
<span t-esc="o['plate']"/>
</td>
<td class="text-center">
<span t-esc="o['driver']"/>
</td>
<td class="text-center">
<span t-esc="o['job']"/>
</td>
<td class="text-center">
<span t-esc="round(o['fuel'],2)"/>
</td>
<td class="text-center">
<span t-esc="round(o['service'],2)"/>
</td>
<td class="text-center">
<span t-esc="round(o['man'],2)"/>
</td>
<td class="text-center">
<span t-esc="round(o['total'],2)"/>
</td>
<td class="text-center">
<span t-esc="round(o['all_tot_per'],2)"/>%
</td>
</tr>
</t>
<tr>
<td colspan='6' class="text-center">
<span >Total <span t-esc="s['type']"/></span>
</td>
<t t-foreach="s['total']" t-as="a">
<td class="text-center">
<span t-esc="round(a,2)"/>
</td>
</t>
</tr>
</tbody>
</table>
<br></br>
</t>
<div class="tabel_total" >
<table class="table table-condensed table-bordered " style="width: 100%;">
<thead>
<tr style=" width:50%;">
<td style="text-align:center;"> </td>
<td style="text-align:center;">Oil</td>
<td style="text-align:center;">Fuel</td>
<td style="text-align:center;">Maintenance</td>
<td style="text-align:center;">Totals</td>
</tr>
</thead>
<tbody class="text-center">
<tr style=" width:50%;">
<td style="text-align:center;">Total</td>
<t t-foreach="doc['total'][0]" t-as="i">
<td class="text-center">
Total <span t-esc="round(i,2)"/>
</td>
</t>
</tr>
<tr style=" width:50%;">
<td style="text-align:center;">Percentage</td>
<t t-foreach="doc['total'][1]" t-as="p">
<td class="text-center">
Total <span t-esc="round(p,2)"/>
</td>
</t>
</tr>
</tbody>
</table>
</div>
<div style="page-break-before: always;"></div>
</t>
</div>
</t>
</t>
</template>
<report
id ="car_consumption_cost_report_pdf_act"
model ="fleet.wiz"
string ="Car Consumption Report"
report_type ="qweb-pdf"
name ="odex_fleet.car_consumption_cost_report_pdf"
file ="odex_fleet.car_consumption_cost_report_pdf"
menu="False" />
<!-- state Service-->
<template id="service_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<t t-foreach="docs" t-as="o">
<h2 colspan="10" class="text-center" style="font-size:20px"> Vehicle Service By state Report <span t-esc="date_from"/> - <span t-esc="date_to"/></h2>
<h2 colspan="10" class="text-center" style="font-size:20px"> <span t-esc="o['state']"/></h2>
<h2 colspan="10" class="text-center" style="font-size:20px"> <t t-esc="', '.join(department for department in department_ids)"/></h2>
<div class="row"><t t-foreach="o['branch']" t-as="doc">
<h3 colspan="10" class="text-center" style="font-size:20px"> <span t-esc="doc['branch']"/></h3>
<div class="column">
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">Name</th>
<th style="text-align:center;">Type</th>
<th style="text-align:center;">License</th>
<th style="text-align:center;">Service</th>
<th style="text-align:center;">Date</th>
<th style="text-align:center;">Cost</th>
<th style="text-align:center;">Total</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="tot" t-value="0"/>
<t t-foreach="doc['data']" t-as="s">
<tr>
<td class="text-center">
<span t-esc="s['name']"/>
</td>
<td class="text-center">
<span t-esc="s['vehicle']"/>
</td>
<td class="text-center">
<span t-esc="s['license_number']"/>
</td>
<td class="text-center">
<span t-esc="s['service']"/>
</td>
<td class="text-center">
<span t-esc="s['date']"/>
</td>
<td class="text-center">
<span t-esc="s['cost']"/>
</td>
<td class="text-center">
</td>
</tr>
<t t-set="tot" t-value="tot+s['cost']"/>
</t>
<tr>
<td colspan="5" class="text-center">
<span ></span>
</td>
<td class="text-center">
<span t-esc="tot"/>
</td>
</tr>
</tbody>
</table>
<div style="page-break-before: always;"></div>
</div>
</t>
</div>
</t>
</div>
</t>
</t>
</template>
<report
id ="service_report_pdf_act"
model ="fleet.wiz"
string ="All State Service Report"
report_type ="qweb-pdf"
name ="odex_fleet.service_report_pdf"
file ="odex_fleet.service_report_pdf"
menu="False" />
<!-- Invoice-->
<template id="invoice_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<h2 colspan="10" class="text-center" style="font-size:20px"> Invoice Report</h2>
<t t-foreach="docs" t-as="o">
<table class="table table-condensed table-bordered">
<tbody class="text-center">
<tr>
<td>
<span style="text-align:center;">Vehicle</span>
</td>
<td class="text-center">
<span t-esc="o['car']"/>
</td>
<td class="text-center">
From <span t-esc="date_from"/>
</td>
<td class="text-center">
To <span t-esc="date_to"/>
</td>
</tr>
<tr>
<td class="text-center">
<span >Type</span>
</td>
<td class="text-center">
<span t-esc="o['type']"/>
</td>
<td class="text-center">
<span >Days</span>
</td>
<td class="text-center">
<span t-esc="o['date']"/>
</td>
</tr>
<tr>
<td class="text-center">
<span >Driver</span>
</td>
<td class="text-center">
<span t-esc="o['driver']"/>
</td>
<td class="text-center">
<span >Service</span>
</td>
<td class="text-center">
<span t-esc="o['service']"/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed table-bordered">
<thead class="text-center">
<tr style=" width:100%;">
<th style="text-align:center;">#</th>
<t t-set="integration" t-value="request.env['fleet.vehicle.log.fuel'].sudo().search([],limit=1)"/>
<t t-if="integration.integration_with_accounting == True">
<th style="text-align:center;">Invoice Number</th>
</t>
<th style="text-align:center;">Date</th>
<th style="text-align:center;">Amount</th>
</tr>
</thead>
<tbody class="text-center">
<t t-set="sequence" t-value="0"/>
<t t-foreach="o['data']" t-as="a">
<tr>
<td>
<t t-set="sequence" t-value="sequence +1"/>
<t t-esc="sequence"/>
</td>
<t t-set="integration" t-value="request.env['fleet.vehicle.log.fuel'].sudo().search([],limit=1)"/>
<t t-if="integration.integration_with_accounting == True">
<td class="text-center">
<span t-esc="a['number']"/>
</td>
</t>
<td class="text-center">
<span t-esc="a['date']"/>
</td>
<td class="text-center">
<span t-esc="a['amount']"/>
</td>
</tr>
</t>
<tr>
<td colspan="2" class="text-center">
<span >Total</span>
</td>
<td class="text-center" colspan="2">
<span t-esc="o['total']"/>
</td>
</tr>
<tr>
<td colspan="2" class="text-center">
<span >Liter Per Day</span>
</td>
<td colspan="2" class="text-center">
<span t-esc="o['liter']"/>
</td>
</tr>
<tr>
<td colspan="2" class="text-center">
<span >Liter Price Per Day</span>
</td>
<td class="text-center" colspan="2">
<span t-esc="o['liter_price']"/>
</td>
</tr>
</tbody>
</table>
<div style="page-break-before: always;"></div>
</t>
</div>
</t>
</t>
</template>
<report
id ="invoice_report_pdf_act"
model ="fleet.wiz"
string ="Fleet Invoice Report"
report_type ="qweb-pdf"
name ="odex_fleet.invoice_report_pdf"
file ="odex_fleet.invoice_report_pdf"
menu="False" />
</data>
</odoo>

View File

@ -1,93 +0,0 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
fleet_vehicle_delegation_access_right,fleet_delegation_model_access_right,model_vehicle_delegation,fleet.fleet_group_user,1,0,0,0
fleet_vehicle_delegation_access_right_super,fleet_delegation_model_access_right_hr_office,model_vehicle_delegation,fleet_group_supervisor,1,0,1,0
fleet_vehicle_delegation_access_right_hr_office,fleet_delegation_model_access_right_hr_office,model_vehicle_delegation,fleet_group_hr_officer,1,0,1,0
fleet_vehicle_delegation_access_right_hr_man,fleet_delegation_model_access_right_hr_man,model_vehicle_delegation,fleet_group_hr,1,1,1,1
fleet_vehicle_delegation_access_right_vice,fleet_delegation_model_access_right_vice,model_vehicle_delegation,fleet_group_vice_gm,1,1,0,1
fleet_vehicle_form_access_right_emp,fleet_form_model_access_emp,model_form_renew,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_form_access_right_emp_super,fleet_form_model_access_emp_super,model_form_renew,fleet_group_supervisor,1,1,1,1
fleet_vehicle_form_access_right_acc,fleet_form_model_access_acc,model_form_renew,fleet_group_account,1,1,0,1
fleet_vehicle_acc_access_right_acc,fleet_acc_model_access_acc,model_fleet_account_config,fleet_group_account,1,1,1,1
fleet_vehicle_acc_access_right_emp,fleet_acc_model_access_emp,model_fleet_account_config,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_type_access_right_emp,fleet_type_model_access_emp,model_fleet_type,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_type_access_right_super,fleet_type_model_access_super,model_fleet_type,fleet_group_supervisor,1,1,1,1
fleet_vehicle_price_access_right_emp,fleet_price_model_access_emp,model_fuel_price,fleet.fleet_group_user,1,0,0,0
fleet_vehicle_price_access_right_super,fleet_price_model_access_super,model_fuel_price,fleet_group_supervisor,1,0,1,0
fleet_vehicle_price_access_right_acc,fleet_price_model_access_super,model_fuel_price,fleet_group_account,1,1,1,1
fleet_vehicle_state_access_right_super,fleet_state_model_access_super,base.model_res_country_state,fleet_group_supervisor,1,1,1,1
fleet_vehicle_state_access_right_hr,fleet_state_model_access_hr,base.model_res_country_state,fleet_group_hr_officer,1,0,1,0
fleet_vehicle_state_access_right_hr_man,fleet_state_model_access_hr_man,base.model_res_country_state,fleet_group_hr,1,1,1,1
fleet_vehicle_branch_access_right_emp,fleet_branch_model_access_emp,branch.model_res_branch,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_branch_access_right_super,fleet_branch_model_access_super,branch.model_res_branch,fleet_group_supervisor,1,1,1,1
fleet_vehicle_owner_access_right_emp,fleet_owner_model_access_emp,base.model_res_partner,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_owner_access_right_super,fleet_owner_model_access_super,base.model_res_partner,fleet_group_supervisor,1,1,1,1
fleet_vehicle_mainten_access_right_emp,fleet_mainten_model_access_emp,model_fleet_maintenance,fleet.fleet_group_user,1,0,0,0
fleet_vehicle_mainten_access_right_vice,fleet_mainten_model_access_vice,model_fleet_maintenance,fleet_group_vice_gm,1,0,0,0
fleet_vehicle_mainten_access_right_hr,fleet_mainten_model_access_super,model_fleet_maintenance,fleet_group_hr,1,0,0,0
fleet_vehicle_mainten_access_right_super,fleet_mainten_model_access_acc,model_fleet_maintenance,fleet_group_supervisor,1,1,1,0
fleet_vehicle_mainten_access_right_acc,fleet_mainten_model_access_acc,model_fleet_maintenance,fleet_group_account,1,1,1,1
fleet.fleet_vehicle_model_brand_access_right_user,fleet_vehicle_model_brand_access_right_user,fleet.model_fleet_vehicle_model_brand,fleet.fleet_group_user,1,1,1,0
fleet_vehicle_model_brand_access_right_super,fleet_vehicle_model_brand_access_right_super,fleet.model_fleet_vehicle_model_brand,fleet_group_supervisor,1,1,1,1
fleet.fleet_vehicle_model_access_right_user,fleet_vehicle_model_access_right,fleet.model_fleet_vehicle_model,fleet.fleet_group_user,1,1,1,0
fleet_vehicle_model_access_right_user_super,fleet_vehicle_model_access_right_super,fleet.model_fleet_vehicle_model,fleet_group_supervisor,1,1,1,1
fleet.fleet_service_type_access_right_user,fleet_service_type_access_right,fleet.model_fleet_service_type,fleet.fleet_group_user,1,0,1,0
fleet_service_type_access_right_super,fleet_service_type_access_right_super,fleet.model_fleet_service_type,fleet_group_supervisor,1,1,1,1
fleet_vehicle_tag_access_right_super,fleet_vehicle_tag_access_right_super,fleet.model_fleet_vehicle_tag,fleet_group_supervisor,1,1,1,1
fleet.fleet_vehicle_tag_access_right_user,fleet_vehicle_tag_access_right_user,fleet.model_fleet_vehicle_tag,fleet.fleet_group_user,1,0,1,0
fleet.fleet_vehicle_access_right_user,fleet_vehicle_access_right,fleet.model_fleet_vehicle,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_access_right_super,fleet_vehicle_access_right_super,fleet.model_fleet_vehicle,fleet_group_supervisor,1,1,1,1
fleet_vehicle_access_installment_right_user,fleet_vehicle_installment_access_right,model_insurance_installment,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_access_installment_right_super,fleet_vehicle_installment_access_right_super,model_insurance_installment,fleet_group_supervisor,1,1,1,1
fleet.fleet_vehicle_odometer_access_right,fleet_vehicle_odometer_access_right,fleet.model_fleet_vehicle_odometer,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_odometer_access_right_super,fleet_vehicle_odometer_access_right_super,fleet.model_fleet_vehicle_odometer,fleet_group_supervisor,1,1,1,1
access_fleet_vehicle_cost_user,access_fleet_vehicle_cost,model_fleet_vehicle_cost,fleet.fleet_group_user,1,0,1,0
access_fleet_vehicle_cost_super,access_fleet_cost_vehicle_super,model_fleet_vehicle_cost,fleet_group_supervisor,1,1,1,0
access_fleet_vehicle_cost_acc,access_fleet_cost_vehicle_acc,model_fleet_vehicle_cost,fleet_group_account,1,1,1,1
fleet_vehicle_log_fuel_access_right,fleet_vehicle_log_fuel_access_right,model_fleet_vehicle_log_fuel,fleet.fleet_group_user,1,0,0,0
fleet_vehicle_log_fuel_access_right_super,fleet_vehicle_log_fuel_access_right_super,model_fleet_vehicle_log_fuel,fleet_group_supervisor,1,0,1,0
fleet_vehicle_log_fuel_access_right_acc,fleet_vehicle_log_fuel_access_right_acc,model_fleet_vehicle_log_fuel,fleet_group_account,1,1,1,1
fleet.fleet_vehicle_log_services_access_right_user,fleet_vehicle_log_services_access_right_user,fleet.model_fleet_vehicle_log_services,fleet.fleet_group_user,1,0,0,0
fleet_vehicle_log_services_access_right_super,fleet_vehicle_log_services_access_right_super,fleet.model_fleet_vehicle_log_services,fleet_group_supervisor,1,0,1,0
fleet_vehicle_log_services_access_right_acc,fleet_vehicle_log_services_access_right_acc,fleet.model_fleet_vehicle_log_services,fleet_group_account,1,1,1,1
fleet.fleet_vehicle_log_contract_access_right_user,fleet_vehicle_log_contract_access_right,fleet.model_fleet_vehicle_log_contract,fleet.fleet_group_user,1,0,1,0
fleet_vehicle_log_contract_access_right_user_hr,fleet_vehicle_log_contract_access_right_hr,fleet.model_fleet_vehicle_log_contract,fleet_group_hr,1,1,1,1
fleet_vehicle_log_contract_access_right_user_hr_off,fleet_vehicle_log_contract_access_right_hr_off,fleet.model_fleet_vehicle_log_contract,fleet_group_hr_officer,1,0,1,0
fleet_vehicle_log_line,fleet_vehicle_log_line,model_fleet_service_line_config,,1,1,1,0
fleet_vehicle_log_line_quotation,fleet_vehicle_log_line_quotation,model_fleet_quotation,,1,1,1,1
fleet_vehicle_log_line_quotation_ser,fleet_vehicle_log_line_quotation_ser,model_fleet_quotation_service,,1,1,1,1
fleet_vehicle_access_right_general,fleet_vehicle_access_right_general,fleet.model_fleet_vehicle,,1,0,0,0
fleet_vehicle_access_right_acc,fleet_vehicle_access_right_general,fleet.model_fleet_vehicle,fleet_group_account,1,1,0,0
fleet_vehicle_access_right_hr_off,fleet_vehicle_access_right_general,fleet.model_fleet_vehicle,fleet_group_hr_officer,1,1,0,0
fleet_vehicle_access_right_hr_model,fleet_vehicle_access_right_hr,fleet.model_fleet_vehicle_model,fleet_group_hr_officer,1,1,0,0
fleet_vehicle_access_right_acc_model,fleet_vehicle_access_right_hr,fleet.model_fleet_vehicle_model,fleet_group_account,1,1,0,0
fleet_vehicle_access_right_brand,fleet_vehicle_access_right_hr,fleet.model_fleet_vehicle_model_brand,fleet_group_hr_officer,1,1,0,0
fleet_vehicle_access_right_brand_acc,fleet_vehicle_access_right_hr,fleet.model_fleet_vehicle_model_brand,fleet_group_account,1,1,0,0
fleet_service_type_access_right_hr,fleet_service_type_access_right,fleet.model_fleet_service_type,fleet_group_hr_officer,1,0,1,0
fleet_service_type_access_right_acc,fleet_service_type_access_right,fleet.model_fleet_service_type,fleet_group_account,1,0,0,0
fleet_odometer_access_right_acc,fleet_service_type_access_right,fleet.model_fleet_vehicle_odometer,fleet_group_account,1,0,1,0
access_fleet_vehicle_cost_hr,access_fleet_vehicle_cost,model_fleet_vehicle_cost,fleet_group_hr_officer,1,1,1,0
fleet.fleet_vehicle_state_access_right_user,fleet_vehicle_state_access_right,fleet.model_fleet_vehicle_state,,1,1,1,0
fleet.fleet_vehicle_hr_access_right_user,fleet_vehicle_state_access_right,hr.model_hr_employee,fleet.fleet_group_user,1,1,0,0
fleet_vehicle_hr_access_right_hr,fleet_vehicle_state_access_right,hr.model_hr_employee,fleet_group_hr_officer,1,1,0,0
fleet_car_category_access_right_emp,car_category_model_access_emp,model_car_category,fleet.fleet_group_user,1,0,1,0
fleet_car_category_access_right_super,car_category_model_access_super,model_car_category,fleet_group_supervisor,1,1,1,1
fleet_car_category_access_right_hr,car_category_access_right,model_car_category,fleet_group_hr_officer,1,0,1,0
fleet_car_category_access_right_acc,car_category_access_right,model_car_category,fleet_group_account,1,0,0,0
fleet_transmission_setting_access_right_emp,transmission_setting_model_access_emp,model_transmission_setting,fleet.fleet_group_user,1,0,1,0
fleet_transmission_setting_right_super,transmission_setting_model_access_super,model_transmission_setting,fleet_group_supervisor,1,1,1,1
fleet_transmission_setting_access_right_hr,transmission_setting_access_right,model_transmission_setting,fleet_group_hr_officer,1,0,1,0
fleet_transmission_setting_access_right_acc,transmission_setting_access_right,model_transmission_setting,fleet_group_account,1,0,0,0
fleet_manufacture_company_access_right_emp,manufacture_company_model_access_emp,model_manufacture_company,fleet.fleet_group_user,1,0,1,0
fleet_manufacture_company_access_right_super,manufacture_company_model_access_super,model_manufacture_company,fleet_group_supervisor,1,1,1,1
fleet_manufacture_company_access_right_hr,fleet_manufacture_company_access_right,model_manufacture_company,fleet_group_hr_officer,1,0,1,0
fleet_manufacture_company_access_right_acc,fleet_manufacture_company_access_right,model_manufacture_company,fleet_group_account,1,0,0,0
access_fleet_wiz,fleet_wiz,model_fleet_wiz,,1,1,1,1
access_reject_reason_fleet_wiz,reject_reason_fleet_wiz,model_reject_reason_fleet_wiz,,1,1,1,1
access_reject_reason_infraction_wiz,reject_reason_infraction_wiz,model_reject_reason_infraction_wiz,,1,1,1,1
access_insurance_companies,insurance_companies,model_insurance_companies,,1,1,1,1
access_vehicle_infraction,vehicle_infraction,model_vehicle_infraction,,1,1,1,1
access_driver_department,driver_department,model_driver_department,,1,1,1,1
access_fleet_vehicle_assignation_log_fleet_group_user,fleet_vehicle_assignation_log fleet_group_user,fleet.model_fleet_vehicle_assignation_log,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 fleet_vehicle_delegation_access_right fleet_delegation_model_access_right model_vehicle_delegation fleet.fleet_group_user 1 0 0 0
3 fleet_vehicle_delegation_access_right_super fleet_delegation_model_access_right_hr_office model_vehicle_delegation fleet_group_supervisor 1 0 1 0
4 fleet_vehicle_delegation_access_right_hr_office fleet_delegation_model_access_right_hr_office model_vehicle_delegation fleet_group_hr_officer 1 0 1 0
5 fleet_vehicle_delegation_access_right_hr_man fleet_delegation_model_access_right_hr_man model_vehicle_delegation fleet_group_hr 1 1 1 1
6 fleet_vehicle_delegation_access_right_vice fleet_delegation_model_access_right_vice model_vehicle_delegation fleet_group_vice_gm 1 1 0 1
7 fleet_vehicle_form_access_right_emp fleet_form_model_access_emp model_form_renew fleet.fleet_group_user 1 0 1 0
8 fleet_vehicle_form_access_right_emp_super fleet_form_model_access_emp_super model_form_renew fleet_group_supervisor 1 1 1 1
9 fleet_vehicle_form_access_right_acc fleet_form_model_access_acc model_form_renew fleet_group_account 1 1 0 1
10 fleet_vehicle_acc_access_right_acc fleet_acc_model_access_acc model_fleet_account_config fleet_group_account 1 1 1 1
11 fleet_vehicle_acc_access_right_emp fleet_acc_model_access_emp model_fleet_account_config fleet.fleet_group_user 1 0 1 0
12 fleet_vehicle_type_access_right_emp fleet_type_model_access_emp model_fleet_type fleet.fleet_group_user 1 0 1 0
13 fleet_vehicle_type_access_right_super fleet_type_model_access_super model_fleet_type fleet_group_supervisor 1 1 1 1
14 fleet_vehicle_price_access_right_emp fleet_price_model_access_emp model_fuel_price fleet.fleet_group_user 1 0 0 0
15 fleet_vehicle_price_access_right_super fleet_price_model_access_super model_fuel_price fleet_group_supervisor 1 0 1 0
16 fleet_vehicle_price_access_right_acc fleet_price_model_access_super model_fuel_price fleet_group_account 1 1 1 1
17 fleet_vehicle_state_access_right_super fleet_state_model_access_super base.model_res_country_state fleet_group_supervisor 1 1 1 1
18 fleet_vehicle_state_access_right_hr fleet_state_model_access_hr base.model_res_country_state fleet_group_hr_officer 1 0 1 0
19 fleet_vehicle_state_access_right_hr_man fleet_state_model_access_hr_man base.model_res_country_state fleet_group_hr 1 1 1 1
20 fleet_vehicle_branch_access_right_emp fleet_branch_model_access_emp branch.model_res_branch fleet.fleet_group_user 1 0 1 0
21 fleet_vehicle_branch_access_right_super fleet_branch_model_access_super branch.model_res_branch fleet_group_supervisor 1 1 1 1
22 fleet_vehicle_owner_access_right_emp fleet_owner_model_access_emp base.model_res_partner fleet.fleet_group_user 1 0 1 0
23 fleet_vehicle_owner_access_right_super fleet_owner_model_access_super base.model_res_partner fleet_group_supervisor 1 1 1 1
24 fleet_vehicle_mainten_access_right_emp fleet_mainten_model_access_emp model_fleet_maintenance fleet.fleet_group_user 1 0 0 0
25 fleet_vehicle_mainten_access_right_vice fleet_mainten_model_access_vice model_fleet_maintenance fleet_group_vice_gm 1 0 0 0
26 fleet_vehicle_mainten_access_right_hr fleet_mainten_model_access_super model_fleet_maintenance fleet_group_hr 1 0 0 0
27 fleet_vehicle_mainten_access_right_super fleet_mainten_model_access_acc model_fleet_maintenance fleet_group_supervisor 1 1 1 0
28 fleet_vehicle_mainten_access_right_acc fleet_mainten_model_access_acc model_fleet_maintenance fleet_group_account 1 1 1 1
29 fleet.fleet_vehicle_model_brand_access_right_user fleet_vehicle_model_brand_access_right_user fleet.model_fleet_vehicle_model_brand fleet.fleet_group_user 1 1 1 0
30 fleet_vehicle_model_brand_access_right_super fleet_vehicle_model_brand_access_right_super fleet.model_fleet_vehicle_model_brand fleet_group_supervisor 1 1 1 1
31 fleet.fleet_vehicle_model_access_right_user fleet_vehicle_model_access_right fleet.model_fleet_vehicle_model fleet.fleet_group_user 1 1 1 0
32 fleet_vehicle_model_access_right_user_super fleet_vehicle_model_access_right_super fleet.model_fleet_vehicle_model fleet_group_supervisor 1 1 1 1
33 fleet.fleet_service_type_access_right_user fleet_service_type_access_right fleet.model_fleet_service_type fleet.fleet_group_user 1 0 1 0
34 fleet_service_type_access_right_super fleet_service_type_access_right_super fleet.model_fleet_service_type fleet_group_supervisor 1 1 1 1
35 fleet_vehicle_tag_access_right_super fleet_vehicle_tag_access_right_super fleet.model_fleet_vehicle_tag fleet_group_supervisor 1 1 1 1
36 fleet.fleet_vehicle_tag_access_right_user fleet_vehicle_tag_access_right_user fleet.model_fleet_vehicle_tag fleet.fleet_group_user 1 0 1 0
37 fleet.fleet_vehicle_access_right_user fleet_vehicle_access_right fleet.model_fleet_vehicle fleet.fleet_group_user 1 0 1 0
38 fleet_vehicle_access_right_super fleet_vehicle_access_right_super fleet.model_fleet_vehicle fleet_group_supervisor 1 1 1 1
39 fleet_vehicle_access_installment_right_user fleet_vehicle_installment_access_right model_insurance_installment fleet.fleet_group_user 1 0 1 0
40 fleet_vehicle_access_installment_right_super fleet_vehicle_installment_access_right_super model_insurance_installment fleet_group_supervisor 1 1 1 1
41 fleet.fleet_vehicle_odometer_access_right fleet_vehicle_odometer_access_right fleet.model_fleet_vehicle_odometer fleet.fleet_group_user 1 0 1 0
42 fleet_vehicle_odometer_access_right_super fleet_vehicle_odometer_access_right_super fleet.model_fleet_vehicle_odometer fleet_group_supervisor 1 1 1 1
43 access_fleet_vehicle_cost_user access_fleet_vehicle_cost model_fleet_vehicle_cost fleet.fleet_group_user 1 0 1 0
44 access_fleet_vehicle_cost_super access_fleet_cost_vehicle_super model_fleet_vehicle_cost fleet_group_supervisor 1 1 1 0
45 access_fleet_vehicle_cost_acc access_fleet_cost_vehicle_acc model_fleet_vehicle_cost fleet_group_account 1 1 1 1
46 fleet_vehicle_log_fuel_access_right fleet_vehicle_log_fuel_access_right model_fleet_vehicle_log_fuel fleet.fleet_group_user 1 0 0 0
47 fleet_vehicle_log_fuel_access_right_super fleet_vehicle_log_fuel_access_right_super model_fleet_vehicle_log_fuel fleet_group_supervisor 1 0 1 0
48 fleet_vehicle_log_fuel_access_right_acc fleet_vehicle_log_fuel_access_right_acc model_fleet_vehicle_log_fuel fleet_group_account 1 1 1 1
49 fleet.fleet_vehicle_log_services_access_right_user fleet_vehicle_log_services_access_right_user fleet.model_fleet_vehicle_log_services fleet.fleet_group_user 1 0 0 0
50 fleet_vehicle_log_services_access_right_super fleet_vehicle_log_services_access_right_super fleet.model_fleet_vehicle_log_services fleet_group_supervisor 1 0 1 0
51 fleet_vehicle_log_services_access_right_acc fleet_vehicle_log_services_access_right_acc fleet.model_fleet_vehicle_log_services fleet_group_account 1 1 1 1
52 fleet.fleet_vehicle_log_contract_access_right_user fleet_vehicle_log_contract_access_right fleet.model_fleet_vehicle_log_contract fleet.fleet_group_user 1 0 1 0
53 fleet_vehicle_log_contract_access_right_user_hr fleet_vehicle_log_contract_access_right_hr fleet.model_fleet_vehicle_log_contract fleet_group_hr 1 1 1 1
54 fleet_vehicle_log_contract_access_right_user_hr_off fleet_vehicle_log_contract_access_right_hr_off fleet.model_fleet_vehicle_log_contract fleet_group_hr_officer 1 0 1 0
55 fleet_vehicle_log_line fleet_vehicle_log_line model_fleet_service_line_config 1 1 1 0
56 fleet_vehicle_log_line_quotation fleet_vehicle_log_line_quotation model_fleet_quotation 1 1 1 1
57 fleet_vehicle_log_line_quotation_ser fleet_vehicle_log_line_quotation_ser model_fleet_quotation_service 1 1 1 1
58 fleet_vehicle_access_right_general fleet_vehicle_access_right_general fleet.model_fleet_vehicle 1 0 0 0
59 fleet_vehicle_access_right_acc fleet_vehicle_access_right_general fleet.model_fleet_vehicle fleet_group_account 1 1 0 0
60 fleet_vehicle_access_right_hr_off fleet_vehicle_access_right_general fleet.model_fleet_vehicle fleet_group_hr_officer 1 1 0 0
61 fleet_vehicle_access_right_hr_model fleet_vehicle_access_right_hr fleet.model_fleet_vehicle_model fleet_group_hr_officer 1 1 0 0
62 fleet_vehicle_access_right_acc_model fleet_vehicle_access_right_hr fleet.model_fleet_vehicle_model fleet_group_account 1 1 0 0
63 fleet_vehicle_access_right_brand fleet_vehicle_access_right_hr fleet.model_fleet_vehicle_model_brand fleet_group_hr_officer 1 1 0 0
64 fleet_vehicle_access_right_brand_acc fleet_vehicle_access_right_hr fleet.model_fleet_vehicle_model_brand fleet_group_account 1 1 0 0
65 fleet_service_type_access_right_hr fleet_service_type_access_right fleet.model_fleet_service_type fleet_group_hr_officer 1 0 1 0
66 fleet_service_type_access_right_acc fleet_service_type_access_right fleet.model_fleet_service_type fleet_group_account 1 0 0 0
67 fleet_odometer_access_right_acc fleet_service_type_access_right fleet.model_fleet_vehicle_odometer fleet_group_account 1 0 1 0
68 access_fleet_vehicle_cost_hr access_fleet_vehicle_cost model_fleet_vehicle_cost fleet_group_hr_officer 1 1 1 0
69 fleet.fleet_vehicle_state_access_right_user fleet_vehicle_state_access_right fleet.model_fleet_vehicle_state 1 1 1 0
70 fleet.fleet_vehicle_hr_access_right_user fleet_vehicle_state_access_right hr.model_hr_employee fleet.fleet_group_user 1 1 0 0
71 fleet_vehicle_hr_access_right_hr fleet_vehicle_state_access_right hr.model_hr_employee fleet_group_hr_officer 1 1 0 0
72 fleet_car_category_access_right_emp car_category_model_access_emp model_car_category fleet.fleet_group_user 1 0 1 0
73 fleet_car_category_access_right_super car_category_model_access_super model_car_category fleet_group_supervisor 1 1 1 1
74 fleet_car_category_access_right_hr car_category_access_right model_car_category fleet_group_hr_officer 1 0 1 0
75 fleet_car_category_access_right_acc car_category_access_right model_car_category fleet_group_account 1 0 0 0
76 fleet_transmission_setting_access_right_emp transmission_setting_model_access_emp model_transmission_setting fleet.fleet_group_user 1 0 1 0
77 fleet_transmission_setting_right_super transmission_setting_model_access_super model_transmission_setting fleet_group_supervisor 1 1 1 1
78 fleet_transmission_setting_access_right_hr transmission_setting_access_right model_transmission_setting fleet_group_hr_officer 1 0 1 0
79 fleet_transmission_setting_access_right_acc transmission_setting_access_right model_transmission_setting fleet_group_account 1 0 0 0
80 fleet_manufacture_company_access_right_emp manufacture_company_model_access_emp model_manufacture_company fleet.fleet_group_user 1 0 1 0
81 fleet_manufacture_company_access_right_super manufacture_company_model_access_super model_manufacture_company fleet_group_supervisor 1 1 1 1
82 fleet_manufacture_company_access_right_hr fleet_manufacture_company_access_right model_manufacture_company fleet_group_hr_officer 1 0 1 0
83 fleet_manufacture_company_access_right_acc fleet_manufacture_company_access_right model_manufacture_company fleet_group_account 1 0 0 0
84 access_fleet_wiz fleet_wiz model_fleet_wiz 1 1 1 1
85 access_reject_reason_fleet_wiz reject_reason_fleet_wiz model_reject_reason_fleet_wiz 1 1 1 1
86 access_reject_reason_infraction_wiz reject_reason_infraction_wiz model_reject_reason_infraction_wiz 1 1 1 1
87 access_insurance_companies insurance_companies model_insurance_companies 1 1 1 1
88 access_vehicle_infraction vehicle_infraction model_vehicle_infraction 1 1 1 1
89 access_driver_department driver_department model_driver_department 1 1 1 1
90 access_fleet_vehicle_assignation_log_fleet_group_user fleet_vehicle_assignation_log fleet_group_user fleet.model_fleet_vehicle_assignation_log base.group_user 1 1 1 1

View File

@ -1,62 +0,0 @@
<?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"/>
<record id="fleet_group_supervisor" model="res.groups">
<field name="name">Fleet Supervisor</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
<field name="implied_ids" eval="[(4, ref('fleet.fleet_group_user'))]"/>
</record>
<record id="fleet.fleet_group_manager" model="res.groups">
<field name="name">Manager</field>
<field name="implied_ids" eval="[(4, ref('fleet_group_supervisor'))]"/>
<field name="category_id" ref="fleet.module_fleet_category"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="fleet_group_hr_officer" model="res.groups">
<field name="name">Hr Officer</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="fleet_group_hr" model="res.groups">
<field name="name">Hr Manager</field>
<field name="implied_ids" eval="[(4, ref('fleet_group_hr_officer'))]"/>
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="fleet_group_account" model="res.groups">
<field name="name">Fleet Account Manager</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="fleet_group_vice_gm" model="res.groups">
<field name="name">GM Vice</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
<field name="implied_ids" eval="[(4, ref('fleet_group_supervisor')),(4, ref('fleet.fleet_group_manager')),(4, ref('fleet_group_hr')),
(4, ref('fleet_group_account'))]"/>
</record>
<record id="fleet_group_draft" model="res.groups">
<field name="name">Set To Draft</field>
<field name="category_id" ref="fleet.module_fleet_category"/>
</record>
<record id="fleet_group_gm" model="res.groups">
<field name="name">GM</field>
<field name="implied_ids" eval="[(4, ref('fleet_group_vice_gm')),(4, ref('base.group_user'))]"/>
<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>
</data>
</odoo>

View File

@ -1,47 +0,0 @@
/*
* DOM element rendering detection
* https://davidwalsh.name/detect-node-insertion
*/
@keyframes chartjs-render-animation {
from { opacity: 0.99; }
to { opacity: 1; }
}
.chartjs-render-monitor {
animation: chartjs-render-animation 0.001s;
}
/*
* DOM element resizing detection
* https://github.com/marcj/css-element-queries
*/
.chartjs-size-monitor,
.chartjs-size-monitor-expand,
.chartjs-size-monitor-shrink {
position: absolute;
direction: ltr;
left: 0;
top: 0;
right: 0;
bottom: 0;
overflow: hidden;
pointer-events: none;
visibility: hidden;
z-index: -1;
}
.chartjs-size-monitor-expand > div {
position: absolute;
width: 1000000px;
height: 1000000px;
left: 0;
top: 0;
}
.chartjs-size-monitor-shrink > div {
position: absolute;
width: 200%;
height: 200%;
left: 0;
top: 0;
}

View File

@ -1 +0,0 @@
@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}

View File

@ -1,61 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record model="ir.ui.view" id="odex_fleet_vehicle_account_config_form">
<field name="name">odex.fleet.account.form</field>
<field name="model">fleet.account.config</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_confirm" groups="odex_fleet.fleet_group_account" type="object" states="draft" class="oe_highlight" string="Confirm"/>
<button name="action_close" type="object" states="confirm" class="oe_highlight" string="Close"/>
<field name="state" widget="statusbar" nolabel="1"/>
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h1>
</div>
<group colspan="4" col="4">
<field name="type" attrs="{'readonly':[('state','!=','draft')],'required':True}"/>
<field name="account_id" attrs="{'readonly':[('state','!=','draft')],'required':True}"/>
<field name="tax_id" domain="[('type_tax_use','=','purchase')]" attrs="{'readonly':[('state','!=','draft')],'required':True}"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="odex_fleet_vehicle_account_config_tree">
<field name="name">odex.fleet.account.tree</field>
<field name="model">fleet.account.config</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="type"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="odex_fleet_vehicle_account_config_serach">
<field name="name">odex.fleet.account.serach</field>
<field name="model">fleet.account.config</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="type"/>
<field name="state"/>
</search>
</field>
</record>
<record id='fleet_vehicle_account_config_action' model='ir.actions.act_window'>
<field name="name">Fleet Account Settings</field>
<field name="res_model">fleet.account.config</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Account Configuration" groups="fleet.fleet_group_user,fleet_group_account" action="fleet_vehicle_account_config_action" parent="fleet.fleet_configuration" id="fleet_account_config" sequence="101" />
</data>
</odoo>

View File

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="odex_res_config_settings_view_form" model="ir.ui.view">
<field name="name">odex.res.config.settings.view.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="sale.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="Car Notification" string="Car Notification" data-key="spl">
<h2>Fleet Notification Before</h2>
<div class="row mt16 o_settings_container">
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="license"/>
<div class="content-group">
<div class="mt16">
<field name="license" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="car_license"/>
<div class="content-group">
<div class="mt16">
<field name="car_license" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="delegation"/>
<div class="content-group">
<div class="mt16">
<field name="delegation" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="insurance"/>
<div class="content-group">
<div class="mt16">
<field name="insurance" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="operation"/>
<div class="content-group">
<div class="mt16">
<field name="operation" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="installment"/>
<div class="content-group">
<div class="mt16">
<field name="installment" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="service"/>
<div class="content-group">
<div class="mt16">
<field name="service" class="o_light_label"/>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="check"/>
<div class="content-group">
<div class="mt16">
<field name="check" class="o_light_label"/>
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View File

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id='driver_department_view_form' model='ir.ui.view'>
<field name="name">driver.department.form</field>
<field name="model">driver.department</field>
<field name="arch" type="xml">
<form string="Driver Department">
<sheet>
<group col="4" colspan="2">
<field name="name"/>
<field name="department_id"/>
<field name="branch_id"/>
</group>
</sheet>
</form>
</field>
</record>
<record id='driver_department_view_tree' model='ir.ui.view'>
<field name="name">driver.department.tree</field>
<field name="model">driver.department</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="department_id" />
<field name="branch_id" />
</tree>
</field>
</record>
<record id="driver_department_view_view_search" model="ir.ui.view">
<field name="name">driver.department.search</field>
<field name="model">driver.department</field>
<field name="arch" type="xml">
<search string="Infraction">
<field name="name"/>
<field name="department_id"/>
<field name="branch_id"/>
</search>
</field>
</record>
<record id='driver_department_action' model='ir.actions.act_window'>
<field name="name">Driver Department</field>
<field name="res_model">driver.department</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Department.
</p>
</field>
</record>
<!-- <menuitem name="Departments" parent="fleet.menu_root" id="vehicles_infractions" sequence="2" active="False"/>-->
<!-- <menuitem action="driver_department_action" name="Departments" parent="fleet.fleet_configuration" id="driver_department_menu"/>-->
</data>
</odoo>

View File

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Customize hr View -->
<record id="hr_driver_form_view" model="ir.ui.view">
<field name="name">hr.drive.inherit</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr_base.hr_extension_form_view"/>
<field eval="500" name="priority"/>
<field name="arch" type="xml">
<field name="phone_ext" position="after">
<field name="driver" />
</field>
<!-- <xpath expr="//field/name[@name='own_license']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<xpath expr="//notebook/page[@name='hr_settings']" position="after">
<page string="Driver Information" attrs="{'invisible': [('driver', '=', False)]}">
<group string ='License Information' colspan="4" col="4">
<field name="license_type" attrs="{'required':[('driver','=',True)]}"/>
<field name="license_number" attrs="{'required':[('driver','=',True)]}"/>
<field name="license_start" attrs="{'required':[('driver','=',True)]}"/>
<field name="license_end" attrs="{'required':[('driver','=',True)]}"/>
<field name="license_attache"/>
<field name="delegation_start"/>
<field name="delegation_end"/>
<field name="vehicle_id" invisable="0"/>
<field name="receive_date" invisable="0"/>
</group>
</page>
</xpath>
</field>
</record>
<record id="hr_kanban_view" model="ir.ui.view">
<field name="name">res.hr.kanban.inherit</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.hr_kanban_view_employees"/>
<field name="arch" type="xml">
<field name="id" position="after">
<field name="driver" invisable='1'/>
</field>
<field name="category_ids" position="after">
<group attrs="{'invisible': [('driver', '=', False)]}" col="4" colspan="1">
<li>License Type
<field name="license_type" ></field>
</li>
<li>License Number
<field name="license_number"></field>
</li>
<li>License Start
<field name="license_start"></field>
</li>
<li>License End
<field name="license_end"></field>
</li>
<li>Delegation Start Date
<field name="delegation_start"></field>
</li>
<li>Delegation End Date
<field name="delegation_end"></field>
</li>
<li>Vehicle
<field name="vehicle_id"></field>
</li>
</group>
</field>
</field>
</record>
<record model="ir.actions.act_window" id="odex_employees_list_action">
<field name="name">Drivers</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('driver','=',True)]</field>
<field name="context">{'default_driver':True}</field>
</record>
<menuitem action="odex_employees_list_action" parent="fleet_vehicles_delegation" groups="fleet_group_hr_officer,fleet_group_supervisor" id="fleet_vehicle_driver_menu"/>
</data>
</odoo>

View File

@ -1,102 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id='vehicle_infraction_view_form' model='ir.ui.view'>
<field name="name">vehicle.infraction.form</field>
<field name="model">vehicle.infraction</field>
<field name="arch" type="xml">
<form string="Infraction">
<header>
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight" states="draft"/>
<button name="action_approve" string="Approve" type="object" class="oe_highlight" states="confirm"/>
<button name="action_inprogress" string="Start" type="object" class="oe_highlight" states="approve"/>
<button name="action_refuse" string="Refuse" type="object" class="oe_highlight" states="confirm,in_progress,approve"/>
<button name="action_cancel" string="Cancel" type="object" class="oe_highlight" states="draft,confirm,approve,in_progress,refused"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_title">
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
<field name="vin_sn" readonly="1" force_save="1" />
<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"/>
</group>
<group col="4" colspan="2" string="Employee Information" >
<field name="employee_id" readonly = "1" force_save="1"/>
<field name="license_number" readonly="1" force_save="1"/>
<field name="license_end" readonly="1" force_save="1"/>
</group>
<group col="4" colspan="2" string="Infraction Information" >
<field name="start_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="end_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="infraction_type" required="1"/>
<field name="infraction_number" required="1"/>
<field name="infraction_date" required="1"/>
<field name="benefits_discounts" required="1"/>
<field name="infraction_cost" required="1"/>
<field name="cost_percentage" required="1" attrs="{'invisible':[('infraction_type','=','infraction')]}"/>
</group>
<notebook>
<page string="Reject Reason" attrs="{'invisible':[('state','!=','refused')]}">
<group>
<field name="reason" readonly="1" force_save="1"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id='vehicle_infraction_view_tree' model='ir.ui.view'>
<field name="name">vehicle.infraction.tree</field>
<field name="model">vehicle.infraction</field>
<field name="arch" type="xml">
<tree>
<field name="vehicle_id" />
<field name="branch_id" />
<field name="employee_id" />
<field name="state"/>
</tree>
</field>
</record>
<record id="vehicle_infraction_view_view_search" model="ir.ui.view">
<field name="name">vehicle.infraction.search</field>
<field name="model">vehicle.infraction</field>
<field name="arch" type="xml">
<search string="Infraction">
<field name="employee_id"/>
<field name="vehicle_id"/>
<field name="branch_id"/>
<field name="state" />
<separator/>
<!-- <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> -->
<group expand="1" string="Group By">
<filter name="groupby_status" context="{'group_by' : 'state'}" string="State"/>
<filter name="groupby_branch" context="{'group_by' : 'branch_id'}" string="Branch"/>
</group>
</search>
</field>
</record>
<record id='vehicle_infraction_action' model='ir.actions.act_window'>
<field name="name">Vehicle Infractions</field>
<field name="res_model">vehicle.infraction</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Infraction.
</p>
</field>
</record>
<menuitem name="Infractions" parent="fleet.menu_root" id="vehicles_infractions" sequence="2"/>
<menuitem action="vehicle_infraction_action" parent="vehicles_infractions" id="vehicles_infractions_menu"/>
</data>
</odoo>

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id='insurance_companies_view_form' model='ir.ui.view'>
<field name="name">insurance.companies.form</field>
<field name="model">insurance.companies</field>
<field name="arch" type="xml">
<form string="Insurance Companies">
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id='insurance_companies_tree' model='ir.ui.view'>
<field name="name">insurance.companies.tree</field>
<field name="model">insurance.companies</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
</tree>
</field>
</record>
<record id='insurance_companies_action' model='ir.actions.act_window'>
<field name="name">Form Insurance Companies</field>
<field name="res_model">insurance.companies</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Form Renew.
</p>
</field>
</record>
<menuitem id="insurance_companies_menu" parent="fleet.fleet_configuration" action="insurance_companies_action" name="Insurance Companies" groups="fleet.fleet_group_user" sequence="102"/>
</data>
</odoo>

View File

@ -1,152 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="driver_expiration_email_template" model="mail.template">
<field name="name">Driver Expiration e-mail template</field>
<field name="subject">Driver License</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;"> عزيزي العميل <br/><br/>
نود تذكيركم بقرب انتهاء رخصة السائق ${(object.name)} رقم ${(object.license_number)} القائد ${(object.employee_id.name)} والتي تنتهي بتاريخ ${(object.license_end)}
</p>
]]>
</field>
</record>
<record id="delegation_expiration_email_template" model="mail.template">
<field name="name">Delegation Expiration e-mail template</field>
<field name="subject">Delegation End</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_vehicle_delegation"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p > عزيزي العميل <br/><br/>
نود تذكيركم بقرب انتهاء تفويض سيارة رقم ${(object.vehicle_id.license_plate)} القائد ${(object.employee_id.name)} النوع ${(object.vehicle_id.fleet_type_id.name)} والتي تنتهي بتاريخ ${(object.end_date)}
</p>
]]>
</field>
</record>
<record id="car_expiration_email_template" model="mail.template">
<field name="name">Expiration e-mail template</field>
<field name="subject">Car License</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_fleet_vehicle"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;"> عزيزي العميل <br/><br/>
نود تذكيركم بقرب انتهاء رخصة السير للسيارة رقم ${(object.license_plate)} القائد ${(object.employee_id.name)} النوع ${(object.fleet_type_id.name)} والتي تنتهي بتاريخ ${(object.license_end)}
</p>
]]>
</field>
</record>
<record id="form_expiration_email_template" model="mail.template">
<field name="name">Form Expiration e-mail template</field>
<field name="subject">Car Form</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_fleet_vehicle"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;"> عزيزي العميل <br/><br/>
نود تذكيركم بقرب انتهاء الاستمارة للسيارة رقم ${(object.license_plate)} القائد ${(object.employee_id.name)} النوع ${(object.fleet_type_id.name)} والتي تنتهي بتاريخ ${(object.form_end)}
</p>
]]>
</field>
</record>
<record id="check_expiration_email_template" model="mail.template">
<field name="name">Check Expiration e-mail template</field>
<field name="subject">Car Check</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_fleet_vehicle"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;" > عزيزي العميل <br/><br/>
نود تذكيركم بقرب موعد الفحص للسيارة رقم ${(object.license_plate)} القائد ${(object.employee_id.name)} النوع ${(object.fleet_type_id.name)} والتي تنتهي بتاريخ ${(object.check_end)}
</p>
]]>
</field>
</record>
<record id="insurance_expiration_email_template" model="mail.template">
<field name="name">Insurance Expiration e-mail template</field>
<field name="subject">Car Insurance</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_fleet_vehicle"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;"> عزيزي العميل <br/><br/>
نود تذكيركم بقرب موعد انتهاء بوليصة التامين رقم ${(object.insurance_number)} للسيارة رقم ${(object.license_plate)} والتي تنتهي بتاريخ ${(object.insurance_end_date)}
</p>
]]>
</field>
</record>
<record id="operation_number_expiration_email_template" model="mail.template">
<field name="name">Operation Number Expiration e-mail template</field>
<field name="subject">Car Operation Number</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_fleet_vehicle"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;" > عزيزي العميل <br/><br/>
نود تذكيركم بقرب انتهاء كرت التشغيل رقم ${(object.operation_card_number)} للسيارة رقم ${(object.license_plate)} القائد ${(object.employee_id.name)} النوع ${(object.fleet_type_id.name)} والتي تنتهي بتاريخ ${(object.operation_card_number)}
</p>
]]>
</field>
</record>
<record id="installment_expiration_email_template" model="mail.template">
<field name="name">Installment e-mail template</field>
<field name="subject">Car Installment</field>
<!-- <field name="email_from">${object.company_id.name}</field> -->
<field name="email_to">${object.driver_id.email}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="odex_fleet.model_insurance_installment"/>
<field name="auto_delete" eval="False"/>
<field name="body_html">
<![CDATA[
<p style="text-align: right;"> عزيزي العميل <br/><br/>
نود تذكيركم بقرب موعد سداد قسط التامين بوليصة رقم ${(object.fleet_id.insurance_number)} بتاريخ ${(object.date)}
</p>
]]>
</field>
</record>
</data>
</odoo>

View File

@ -1,136 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id='fleet_request_maintenance_view_form' model='ir.ui.view'>
<field name="name">fleet.maintenance.vehicle.form</field>
<field name="model">fleet.maintenance</field>
<field name="arch" type="xml">
<form string="Maintenance">
<header>
<button name="action_confirm" groups="odex_fleet.fleet_group_hr,odex_fleet.fleet_group_supervisor" string="Confirm" type="object" class="oe_highlight" states="draft"/>
<button name="action_approve" groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_gm" string="Approve" type="object" class="oe_highlight" states="confirm"/>
<button name="action_refuse" groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_gm" string="Refuse" type="object" class="oe_highlight" states="confirm"/>
<button name="action_paid" groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor" string="Paid" type="object" class="oe_highlight" states="approve"/>
<button name="action_cancel" groups="odex_fleet.fleet_group_gm,odex_fleet.fleet_group_vice_gm" string="Cancel" type="object" class="oe_highlight" states="draft,confirm,approve"/>
<button name="set_to_draft" groups="odex_fleet.fleet_group_draft" type="object" states="refused,cancel" class="oe_highlight" string="Set To Draft"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h1>
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id" class="oe_inline" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
<field name="branch_id" required="1"/>
<field name="account_id" readonly="1" force_save="1" required="1"/>
<field name="tax_id" readonly="1" force_save="1" required="1"/>
<field name="employee_id" readonly="1" force_save="1"/>
<field name="total_cost"/>
<field name="license_plate" readonly="1" force_save="1"/>
<field name="odometer" readonly="1" force_save="1"/>
<field name="invoice_id" readonly="1" force_save="1"/>
<field name="date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
<field name="next_request_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="next_odometer" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
<field name="edit_access" invisible="1"/>
<field name="user_id" invisible="1"/>
</group>
<notebook>
<page string="Service">
<field name="service_ids" nolabel="1" attrs="{'readonly': [('state', '!=', 'draft')]}">
<tree editable="bottom" delete="1">
<field name="service_id" required="1"/>
<field name="number" required="1"/>
<field name="qty" required="1"/>
<field name="total" sum="Total"/>
</tree>
</field>
</page>
<page string="Quotations">
<field name="quotation_ids" nolabel="1" attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)]}">
<tree editable="bottom" delete="1">
<field name="partner_id" required="1"/>
<field name="cost" required="1"/>
<field name="offer" required="1"/>
<field name="reason" attrs="{'invisible': [('approve', '=',True)],'readonly':True}" force_save="1"/>
<button name="action_approve" string="Approve" type="object" class="oe_highlight" attrs="{'invisible': ['|',('approve', '=', True),('edit_access', '!=', True),('state','!=','draft')]}"/>
<button name="action_reject" string="Reject" type="object" class="oe_highlight" attrs="{'invisible': ['|',('approve', '=', False),('edit_access', '!=', True),('state','!=','draft')]}"/>
<field name="approve" invisible="1"/>
<field name="state" invisible="1"/>
<field name="edit_access" invisible="1"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
</div>
</form>
</field>
</record>
<record id='fleet_maintenance_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.maintenance.tree</field>
<field name="model">fleet.maintenance</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="vehicle_id" />
<field name="branch_id" />
<field name="type" />
<field name="state"/>
</tree>
</field>
</record>
<record id="fleet_maintenance_vehicle_view_search" model="ir.ui.view">
<field name="name">fleet.vehicle.maintenance.search</field>
<field name="model">fleet.maintenance</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="employee_id"/>
<field name="vehicle_id"/>
<field name="branch_id"/>
<field name="state" />
<separator/>
<group expand="1" string="Group By">
<filter name="groupby_status" context="{'group_by' : 'state'}" string="State"/>
<filter name="groupby_branch" context="{'group_by' : 'branch_id'}" string="Branch"/>
</group>
</search>
</field>
</record>
<record id='fleet_vehicle_maintenance_action' model='ir.actions.act_window'>
<field name="name">Fleet Maintenance</field>
<field name="res_model">fleet.maintenance</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="Maintenance" parent="fleet.menu_root" id="fleet_maintenance_root" sequence="2" groups="fleet.fleet_group_user,fleet_group_vice_gm,fleet_group_account,fleet_group_hr"/>
<menuitem action="fleet_vehicle_maintenance_action" parent="fleet_maintenance_root" id="vehicle_maintenance_menu" groups="fleet.fleet_group_user,fleet_group_hr,fleet_group_account" sequence="1"/>
<menuitem action="fleet.fleet_vehicle_odometer_action" parent="fleet_maintenance_root" id="fleet.fleet_vehicle_odometer_menu" groups="fleet.fleet_group_user" sequence="2"/>
<menuitem action="fleet_vehicle_log_fuel_action" parent="fleet_maintenance_root" id="fleet_vehicle_log_fuel_menu" groups="fleet.fleet_group_user,fleet_group_account" sequence="3"/>
<menuitem action="fleet.fleet_vehicle_log_services_action" parent="fleet_maintenance_root" id="fleet.fleet_vehicle_log_services_menu" groups="fleet.fleet_group_user,fleet_group_account" sequence="4"/>
<!-- <menuitem action="fleet_vehicle_costs_action" parent="fleet_maintenance_root" id="fleet_vehicle_costs_menu" groups="fleet.fleet_group_user,fleet_group_account" sequence="5"/>-->
</data>
</odoo>

View File

@ -1,107 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id='fleet_form_renew_view_form' model='ir.ui.view'>
<field name="name">fleet.form.renew.vehicle.form</field>
<field name="model">form.renew</field>
<field name="arch" type="xml">
<form string="Vehicle">
<header>
<button name="action_confirm" groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor" type="object" states="draft" class="oe_highlight" string="Confirm"/>
<button name="action_approve" groups="odex_fleet.fleet_group_gm" type="object" states="confirm" class="oe_highlight" string="Approve"/>
<button name="action_cancel" groups="odex_fleet.fleet_group_supervisor" type="object" states="draft" class="oe_highlight" string="Cancel"/>
<button name="action_refuse" groups="odex_fleet.fleet_group_gm" type="object" states="confirm" class="oe_highlight" string="Refuse"/>
<button name="set_to_draft" groups="odex_fleet.fleet_group_draft" type="object" states="refused,cancel" class="oe_highlight" string="Set To Draft"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h1>
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
<field name="cost" attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)],'required':True}" />
<field name="penalty_cost" attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)],'required':True}" />
<field name="date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="new_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="end_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
</group>
<group col="4" colspan="2" string="Account Details">
<field name="branch_id" attrs="{'readonly':[('invoice_id','!=',False)]}"/>
<field name="partner_id" attrs="{'readonly':[('invoice_id','!=',False)]}" required="1"/>
<field name="account_id" readonly="1" force_save="1" required="1"/>
<field name="tax_id" readonly="1" force_save="1" required="1"/> <field name="invoice_id" readonly="1" force_save="1"/>
<field name="user_id" readonly="1" force_save="1"/>
<field name="edit_access" invisible="1"/>
<field name="company_id" groups="base.group_multi_company" />
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
</div>
</form>
</field>
</record>
<record id='fleet_vehicle_fleet_tree_renew' model='ir.ui.view'>
<field name="name">fleet.renew.tree</field>
<field name="model">form.renew</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="vehicle_id" />
<field name="cost" />
<field name="state"/>
</tree>
</field>
</record>
<record id="fleet_delegation_vehicle_view_search" model="ir.ui.view">
<field name="name">fleet.form.renew.vehicle.search</field>
<field name="model">form.renew</field>
<field name="arch" type="xml">
<search string="All vehicles">
<field name="name" filter_domain="['|', ('name','ilike',self), ('license_plate','ilike',self)]" string="Vehicle"/>
<field name="vehicle_id"/>
<field name="branch_id"/>
<field name="state" />
<separator/>
<!-- <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> -->
<group expand="1" string="Group By">
<filter name="groupby_status" context="{'group_by' : 'state'}" string="State"/>
<filter name="groupby_branch" context="{'group_by' : 'branch_id'}" string="Branch"/>
</group>
</search>
</field>
</record>
<record id='fleet_vehicle_renew_action' model='ir.actions.act_window'>
<field name="name">Form Renew</field>
<field name="res_model">form.renew</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Form Renew.
</p>
</field>
</record>
<menuitem action="fleet_vehicle_renew_action" groups="fleet.fleet_group_user,fleet_group_supervisor,fleet_group_account" parent="fleet_maintenance_root" id="fleet_vehicle_renew_menu" sequence="6"/>
</data>
</odoo>

View File

@ -1,148 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id='fleet_vehicle_delegation_view_form' model='ir.ui.view'>
<field name="name">fleet.delegation.vehicle.form</field>
<field name="model">vehicle.delegation</field>
<field name="arch" type="xml">
<form string="Vehicle">
<header>
<button name="action_confirm" groups="odex_fleet.fleet_group_hr" string="Confirm" type="object" class="oe_highlight" states="draft"/>
<button name="action_inprogress" groups="odex_fleet.fleet_group_vice_gm" string="Start" type="object" class="oe_highlight" states="approve"/>
<button name="action_approve" groups="odex_fleet.fleet_group_vice_gm" string="Approve" type="object" class="oe_highlight" states="confirm"/>
<button name="action_refuse" groups="odex_fleet.fleet_group_vice_gm" string="Refuse" type="object" class="oe_highlight" states="confirm"/>
<button name="action_close" groups="odex_fleet.fleet_group_vice_gm" string="Close" type="object" class="oe_highlight" states="approve,in_progress"/>
<button name="action_cancel" groups="odex_fleet.fleet_group_vice_gm" string="Cancel" type="object" class="oe_highlight" states="draft,confirm,approve"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h1>
<label for="vehicle_id" class="oe_edit_only"/>
<h2>
<field name="vehicle_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}"/>
</h2>
</div>
<group col="4" colspan="2" string="Vehicle Information">
<field name="start_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="end_date" attrs="{'readonly': [('state', '!=', 'draft')],'required':True}" />
<field name="last_department_id" attrs="{'invisible': [('delegation_type', '=', 'driver')]}"/>
<field name="last_project_id" attrs="{'invisible': [('delegation_type', '=', 'driver')]}" invisible="1"/>
<field name="last_branch_id" attrs="{'invisible': [('delegation_type', '=', 'driver')]}"/>
<field name="vin_sn" readonly="1" force_save="1" />
<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" attrs="{'invisible': [('delegation_type', '!=', 'driver')]}" />
<field name="odometer" readonly="1" force_save="1" attrs="{'invisible': [('delegation_type', '!=', 'driver')]}"/>
<field name="km_number" readonly="1" force_save="1" attrs="{'invisible': [('delegation_type', '!=', 'driver')]}"/>
<field name="delegation_type" invisible="1"/>
</group>
<group col="4" colspan="2" string="Employee Information" attrs="{'invisible': [('delegation_type', '!=', 'driver')]}" >
<field name="employee_id" attrs="{'readonly': [('state', '!=', 'draft')],'required':[('delegation_type', '!=', 'branch')]}"/>
<field name="license_number" readonly="1" force_save="1"/>
<field name="license_end" readonly="1" force_save="1"/>
<field name="custody_id" invisible="1"/>
</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')]}" />-->
<field name="entity_type"/>
<field name="driver_department" attrs="{'invisible': [('entity_type', '!=', 'department')]}"/>
<field name="branch_id" attrs="{'invisible': [('entity_type', '!=', 'department')]}"/>
<field name="project_id" attrs="{'invisible': [('entity_type', '!=', 'project')]}"/>
</group>
<notebook>
<page string="Reject Reason" attrs="{'invisible':[('state','!=','refused')]}">
<group>
<field name="reason" readonly="1" force_save="1"/>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
</div>
</form>
</field>
</record>
<record id='fleet_vehicle_v_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.delegation.tree</field>
<field name="model">vehicle.delegation</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="vehicle_id" />
<field name="branch_id" />
<field name="employee_id" />
<field name="state"/>
</tree>
</field>
</record>
<record id="fleet_delegation_vehicle_view_search" model="ir.ui.view">
<field name="name">fleet.delegation.vehicle.search</field>
<field name="model">vehicle.delegation</field>
<field name="arch" type="xml">
<search string="All vehicles">
<field name="name" filter_domain="['|', ('name','ilike',self), ('license_plate','ilike',self)]" string="Vehicle"/>
<field name="employee_id"/>
<field name="vehicle_id"/>
<field name="branch_id"/>
<field name="state" />
<separator/>
<!-- <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> -->
<group expand="1" string="Group By">
<filter name="groupby_status" context="{'group_by' : 'state'}" string="State"/>
<filter name="groupby_branch" context="{'group_by' : 'branch_id'}" string="Branch"/>
</group>
</search>
</field>
</record>
<record id='fleet_vehicle_delegation_action' model='ir.actions.act_window'>
<field name="name">Driver Delegation</field>
<field name="res_model">vehicle.delegation</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('delegation_type','=','driver')]</field>
<field name="context">{'default_delegation_type':'driver'}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Driver Delegation.
</p>
</field>
</record>
<record id='fleet_branch_delegation_action' model='ir.actions.act_window'>
<field name="name">Branch Delegation</field>
<field name="res_model">vehicle.delegation</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('delegation_type','=','branch')]</field>
<field name="context">{'default_delegation_type':'branch'}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Branch Delegation.
</p>
</field>
</record>
<menuitem name="Delegation" parent="fleet.menu_root" id="fleet_vehicles_delegation" sequence="2" groups="fleet_group_hr_officer,fleet_group_vice_gm,fleet.fleet_group_user"/>
<menuitem action="fleet_vehicle_delegation_action" parent="fleet_vehicles_delegation" id="vehicle_delegation_menu" groups="fleet_group_hr_officer,fleet_group_vice_gm,fleet.fleet_group_user"/>
<menuitem action="fleet_branch_delegation_action" parent="fleet_vehicles_delegation" id="branch_delegation_menu" groups="fleet_group_hr_officer,fleet_group_vice_gm,fleet.fleet_group_user"/>
</data>
</odoo>

View File

@ -1,921 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<menuitem name="Fleet" id="fleet.menu_root" sequence="115" web_icon="fleet,static/description/icon.png"/>
<menuitem name="Vehicles" parent="fleet.menu_root" id="fleet.fleet_vehicles" sequence="2"
groups="fleet_group_hr_officer,fleet.fleet_group_user"/>
<menuitem name="Configuration" parent="fleet.menu_root" id="fleet.fleet_configuration" sequence="100"
groups="fleet.fleet_group_user,fleet_group_hr_officer,fleet_group_account"/>
<!-- Vehicle-->
<record id='fleet_vehicle_cost_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.tree</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<tree string="Vehicle Costs">
<field name="vehicle_id"/>
<field name="description"/>
<field name="cost_subtype_id"/>
<field name="date"/>
</tree>
</field>
</record>
<record id='fleet_vehicle_cost_view_kanban' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.kanban</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div>
<strong>
<field name="vehicle_id"/>
<span class="pull-right">
<field name="date"/>
</span>
</strong>
</div>
<div>
<field name="cost_subtype_id"/>
<span class="pull-right">
<field name="amount"/>
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id='fleet_vehicle_cost_view_pivot' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.pivot</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<pivot string="Vehicles costs">
<field name="vehicle_id" type="row"/>
<field name="cost_type" type="row"/>
<field name="date" interval="year" type="col"/>
<field name="amount" type="measure"/>
</pivot>
</field>
</record>
<record id='fleet_vehicle_cost_view_graph' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.graph</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<graph string="Vehicles costs">
<field name="vehicle_id"/>
<field name="date" interval="year"/>
<field name="amount" type="measure"/>
</graph>
</field>
</record>
<record id='fleet_vehicle_cost_indicative_view_pivot' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.pivot</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<pivot string="Vehicles costs">
<field name="vehicle_id" type="row"/>
<field name="cost_type" type="col"/>
<field name="amount" type="measure"/>
</pivot>
</field>
</record>
<record id='fleet_vehicle_cost_indicative_view_graph' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.graph</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<graph string="Vehicles costs">
<field name="parent_id" type="row"/>
<field name="cost_type" type="col"/>
<field name="amount" type="measure"/>
</graph>
</field>
</record>
<record id='fleet_vehicle_costs_view_search' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.search</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<search string="Vehicles costs">
<field name="vehicle_id"/>
<field name="cost_subtype_id"/>
<field name="date"/>
<field name="parent_id"/>
<filter name="parent_false" domain="[('parent_id','=',False)]" string="Effective Costs"/>
<filter name="parent_true" domain="[('parent_id','!=',False)]" string="Indicative Costs"/>
<group expand="1" string="Group By">
<filter name="groupby_cost_type" context="{'group_by': 'cost_type'}" string="Cost Type"/>
<filter name="groupby_cost_subtype_id" context="{'group_by': 'cost_subtype_id'}"
string="Cost Subtype"/>
<filter name="groupby_vehicle_id" context="{'group_by': 'vehicle_id'}" string="Vehicle"/>
<filter name="groupby_parent_id" context="{'group_by': 'parent_id'}" string="Parent"/>
<separator/>
<filter name="groupby_date" context="{'group_by': 'date:month'}" string="Month"
help="Vehicle Costs by Month"/>
<filter name="groupby_year" context="{'group_by': 'date:year'}" string="Year"/>
</group>
</search>
</field>
</record>
<record id='fleet_vehicle_costs_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.cost.form</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<form string="Vehicle costs">
<sheet>
<group col="2" string="Cost Details">
<group>
<field name="vehicle_id"/>
<field name="cost_subtype_id"/>
<field name="amount"/>
<field name="description"/>
</group>
<group>
<field name="date"/>
<field name="parent_id" groups="base.group_no_one"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="fleet_vehicle_costs_view_graph" model="ir.ui.view">
<field name="name">fleet.vehicle.cost.graph</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<graph string="Costs Per Month" stacked="True">
<field name="date" type="row"/>
<field name="vehicle_id" type="col"/>
<field name="amount" type="measure"/>
</graph>
</field>
</record>
<record id='fleet_vehicle_costs_action' model='ir.actions.act_window'>
<field name="name">Vehicle Costs</field>
<field name="res_model">fleet.vehicle.cost</field>
<field name="view_mode">tree,kanban,form,graph</field>
<field name="context">{"search_default_parent_false" : True, "search_default_groupby_vehicle_id" : True,}
</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new cost.
</p>
<p>
Odoo helps you managing the costs for your different
vehicles. Costs are created automatically from services,
contracts (fixed or recurring) and fuel logs.
</p>
</field>
</record>
<!-- <menuitem action="fleet_vehicle_costs_action" parent="fleet.fleet_vehicles" id="fleet_vehicle_costs_menu"-->
<!-- groups="fleet.fleet_group_manager"/>-->
<record model="ir.ui.view" id="odex_view_fleet_vehicle_form">
<field name="name">odex.fleet.vehicle.form</field>
<field name="model">fleet.vehicle</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_view_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="replace">
<sheet>
<field name="currency_id" invisible="1"/>
<div class="oe_button_box" name="button_box">
<button name="open_assignation_logs"
type="object"
class="oe_stat_button"
icon="fa-history">
<field name="history_count" widget="statinfo" string="Drivers History"/>
</button>
<button name="return_action_to_open"
type="object"
class="oe_stat_button"
icon="fa-book"
context="{'xml_id':'fleet_vehicle_log_contract_action'}"
help="show the contract for this vehicle">
<field name="contract_count" widget="statinfo" string="Contracts"/>
</button>
<button name="return_action_to_open"
type="object"
class="oe_stat_button"
icon="fa-wrench"
context="{'xml_id':'fleet_vehicle_log_services_action'}"
help="show the services logs for this vehicle">
<field name="service_count" widget="statinfo" string="Services"/>
</button>
<button name="return_action_to_open"
type="object"
class="oe_stat_button"
icon="fa-tachometer"
context="{'xml_id':'fleet_vehicle_odometer_action'}"
help="show the odometer logs for this vehicle"
attrs="{'invisible': [('vehicle_type', '!=', 'car')]}">
<field name="odometer_count" widget="statinfo" string="Odometer"/>
</button>
</div>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"/>
<field name="image_128" widget='image' class="oe_avatar"/>
<div class="oe_title">
<label for="model_id" class="oe_edit_only"/>
<h1>
<field name="model_id" placeholder="e.g. Model S"/>
</h1>
<label for="license_plate" class="oe_edit_only"/>
<h2>
<field name="license_plate" class="oe_inline" placeholder="e.g. PAE 326"/>
</h2>
<label for="tag_ids" class="oe_edit_only"/>
<field name="tag_ids" widget="many2many_tags"
options="{'color_field': 'color', 'no_create_edit': True}"/>
</div>
<group col="4" colspan="2" string="General Properties">
<field name="active" invisible="1"/>
<field name="vehicle_type" invisible="1"/>
<field name="states"/>
<field name="branch_id"/>
<field name="owner_id" domain="[('car_owner','=',True)]"/>
<field name="fleet_type_id" readonly="1"/>
<field name="car_category"/>
<field name="man_company" readonly="1"/>
<field name="license_end"/>
<field name="serial_number"/>
<field name="computer_number"/>
<field name="employee_id" readonly="1" force_save="1"/>
<field name="location"/>
<field name="department_id" readonly="1" force_save="1"/>
<field name="project_id" readonly="1" force_save="1" invisible="1"/>
<field name="vin_sn"/>
<field name="model_year"/>
<field name="company_id" groups="base.group_multi_company"/>
<label for="odometer"/>
<div class="o_row">
<field name="odometer"/>
<field name="odometer_unit"/>
</div>
<!-- <field name="acquisition_date" />-->
<!-- <field name="car_value" />-->
<!-- <field name="residual_value"/>-->
</group>
<group col="4" colspan="2" string="Additional Properties">
<field name="seats"/>
<field name="doors"/>
<field name="color"/>
<field name="car_weight"/>
</group>
<notebook>
<page string="Insurance Information">
<group col="4" colspan="2">
<field name="insurance_number"/>
<field name="insurance_start_date"/>
<field name="insurance_end_date"/>
<field name="insurance_attachment"/>
<field name="installment_number"/>
<field name="insurance_cost"/>
</group>
<field name="installment_ids" nolabel="1">
<tree editable="bottom">
<field name="name" required="1"/>
<field name="date" required="1"/>
<field name="amount" required="1"/>
</tree>
</field>
</page>
<page string="Engine Options">
<group col="4" colspan="2">
<field name="transmission_id" required="1"/>
<field name="fuel_type" required="1"/>
<label for="co2" invisible="1"/>
<div class="o_row" name="co2" invisible="1">
<field name="co2"/>
<span>g/km</span>
</div>
<field name="horsepower" invisible="1"/>
<field name="horsepower_tax" invisible="1"/>
<label for="power" invisible="1"/>
<div class="o_row" invisible="1">
<field name="power"/>
<span>kW</span>
</div>
<label for="fuel_consumption"/>
<div class="o_row">
<field name="fuel_consumption"/>
<span>Km</span>
</div>
</group>
</page>
<page string="Operation">
<group col="4" colspan="2">
<field name="check_end" required="1"/>
<field name="form_end" required="1"/>
<field name="operation_card_number"/>
<field name="operation_card_end"/>
<field name="form_renew_cost" readonly="1"/>
<!-- <field name="next_request_date"/>-->
</group>
</page>
<page string="Maintenance Settings">
<field name="service_ids" nolabel="1">
<tree editable="bottom">
<field name="service_ids" required="1" widget="many2many_tags"/>
<field name="type" required="1"/>
<field name="date" attrs="{'invisible': [('type','=','odometer')],
'required': [('type','!=','odometer')]}"/>
<field name="odometer" attrs="{'invisible': [('type','!=','odometer')],
'required': [('type','=','odometer')]}"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</xpath>
<xpath expr="//field[@name='insurance_number']" position="after">
<field name="insurance_companies_id"/>
</xpath>
</field>
</record>
<!-- fleet Type-->
<record id='fleet_vehicle_type_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.type.model.form</field>
<field name="model">fleet.type</field>
<field name="arch" type="xml">
<form string="Type">
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<field name="amount"/>
</group>
</sheet>
</form>
</field>
</record>
<record id='fleet_vehicle_type_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.type.tree</field>
<field name="model">fleet.type</field>
<field name="arch" type="xml">
<tree string="Type">
<field name="name"/>
<field name="amount"/>
</tree>
</field>
</record>
<record id='fleet_vehicle_amount_action' model='ir.actions.act_window'>
<field name="name">Vehicle Type</field>
<field name="res_model">fleet.type</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new type.
</p>
<p>
</p>
</field>
</record>
<menuitem action="fleet_vehicle_amount_action"
name="Vehicle Type" parent="fleet.fleet_configuration" id="fleet_type_menu" sequence="100"
groups="fleet.fleet_group_user"/>
<menuitem id="res_states_menu" name="States" sequence="1"
parent="fleet.fleet_configuration" groups="fleet.fleet_group_user,fleet_group_hr_officer"
action="base.action_country_state"/>
<menuitem id="res_branches_menu" name="Branch"
parent="fleet.fleet_configuration" groups="fleet_group_supervisor,fleet_group_hr_officer"
action="branch.branch_action_res_branch" sequence="2"/>
<!-- fuel type-->
<record id='fleet_fuel_price_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.fuel.price.model.form</field>
<field name="model">fuel.price</field>
<field name="arch" type="xml">
<form string="Fuel Price">
<sheet>
<div class="oe_title">
<label for="fuel_type" class="oe_edit_only"/>
<h1>
<field name="fuel_type" required="1"/>
</h1>
</div>
<group>
<field name="price" required="1"/>
<field name="uom_id"/>
</group>
</sheet>
</form>
</field>
</record>
<record id='fleet_fuel_price_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.fuel.price.model.tree</field>
<field name="model">fuel.price</field>
<field name="arch" type="xml">
<tree string="Fuel Price">
<field name="fuel_type"/>
<field name="price"/>
</tree>
</field>
</record>
<record id='fuel_price_action' model='ir.actions.act_window'>
<field name="name">Fuel Price</field>
<field name="res_model">fuel.price</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Fuel Price.
</p>
<p>
</p>
</field>
</record>
<menuitem action="fuel_price_action"
name="Fuel Price" parent="fleet.fleet_configuration" id="fuel_price_menu"
groups="fleet.fleet_group_user,fleet_group_account" sequence="100"/>
<!-- Car Category -->
<record id='fleet_car_category_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.car.category.model.form</field>
<field name="model">car.category</field>
<field name="arch" type="xml">
<form string="Car Category">
<sheet>
<group>
<group>
<field name="car_category"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id='fleet_car_category_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.car.category.model.tree</field>
<field name="model">car.category</field>
<field name="arch" type="xml">
<tree string="Car Category">
<field name="car_category"/>
</tree>
</field>
</record>
<record id='car_category_action' model='ir.actions.act_window'>
<field name="name">Car Category</field>
<field name="res_model">car.category</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Car Category.
</p>
<p>
</p>
</field>
</record>
<menuitem action="car_category_action"
name="Car Category" parent="fleet.fleet_configuration" id="car_category_menu"
groups="fleet.fleet_group_user" sequence="101"/>
<!-- Manufacture Company -->
<record id='fleet_man_company_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.manufacture.company.model.form</field>
<field name="model">manufacture.company</field>
<field name="arch" type="xml">
<form string="Manufacture Company">
<sheet>
<group>
<group>
<field name="man_company"/>
<field name="brand_ids" widget="many2many_tags"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id='fleet_man_company_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.manufacture.company.model.tree</field>
<field name="model">manufacture.company</field>
<field name="arch" type="xml">
<tree string="Manufacture Company">
<field name="man_company"/>
</tree>
</field>
</record>
<record id='man_company_action' model='ir.actions.act_window'>
<field name="name">Manufacture Company</field>
<field name="res_model">manufacture.company</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Manufacture Company.
</p>
<p>
</p>
</field>
</record>
<menuitem action="man_company_action"
name="Manufacture Company" parent="fleet.fleet_configuration" id="man_company_menu"
groups="fleet.fleet_group_user" sequence="101"/>
<!-- Transmission Type -->
<record id='fleet_transmission_view_form' model='ir.ui.view'>
<field name="name">fleet.vehicle.transmission.setting.model.form</field>
<field name="model">transmission.setting</field>
<field name="arch" type="xml">
<form string="Transmission Type">
<sheet>
<group>
<group>
<field name="transmission"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id='fleet_transmission_setting_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.transmission.setting.model.tree</field>
<field name="model">transmission.setting</field>
<field name="arch" type="xml">
<tree string="Transmission Type">
<field name="transmission"/>
</tree>
</field>
</record>
<record id='transmission_setting_action' model='ir.actions.act_window'>
<field name="name">Transmission Type</field>
<field name="res_model">transmission.setting</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new transmission .
</p>
<p>
</p>
</field>
</record>
<menuitem action="transmission_setting_action"
name="Transmission Type" parent="fleet.fleet_configuration" id="transmission_setting_menu"
groups="fleet.fleet_group_user" sequence="102"/>
<record id='odex_fleet_vehicle_model_brand_view_form' model='ir.ui.view'>
<field name="name">odex.fleet.vehicle.model.brand.form</field>
<field name="model">fleet.vehicle.model.brand</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_model_brand_view_form"/>
<field name="arch" type="xml">
<field name="name" position="after">
<group>
<field name="man_company_id"/>
</group>
</field>
</field>
</record>
<record id='odex_fleet_vehicle_model_view_form' model='ir.ui.view'>
<field name="name">odex.fleet.vehicle.model.form</field>
<field name="model">fleet.vehicle.model</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_model_view_form"/>
<field name="arch" type="xml">
<field name="brand_id" position="after">
<group>
<group>
<field name="fleet_type_id"/>
<field name="man_company_id" readonly="1"/>
</group>
</group>
</field>
</field>
</record>
<!-- Branch-->
<record id="fleet_branch_form_view" model="ir.ui.view">
<field name="name">fleet.branch.inherit</field>
<field name="model">res.branch</field>
<field name="inherit_id" ref="branch.branch_res_branch_view_form"/>
<field eval="200" name="priority"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="state_id"/>
</xpath>
</field>
</record>
<!-- Partner-->
<record id="action_partner_owner_form" model="ir.actions.act_window">
<field name="name">Car Owner</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="domain">[]</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('car_owner','=',True)]</field>
<field name="context">{'default_car_owner':True}</field>
<field name="filter" eval="True"/>
</record>
<!-- -->
<!-- <menuitem action="action_partner_owner_form" groups="fleet.fleet_group_user" parent="fleet.fleet_vehicles"-->
<!-- sequence="3" id="fleet_vehicle_owner_menu"/>-->
<!-- -->
<menuitem action="fleet.fleet_vehicle_action" parent="fleet.fleet_vehicles" id="fleet.fleet_vehicle_menu"
groups="fleet.fleet_group_user" sequence="2"/>
<!-- LOg-->
<record model="ir.ui.view" id="odex_fleet_vehicle_log_fuel_view_form">
<field name="name">odex.fleet.vehicle.log.form</field>
<field name="model">fleet.vehicle.log.fuel</field>
<field name="arch" type="xml">
<form>
<header>
<button name="create_invoice"
groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor" type="object"
states="approve" class="oe_highlight" string="Create Invoice"/>
<button name="action_confirm"
groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor" type="object"
states="draft" class="oe_highlight" string="Confirm"/>
<button name="action_approve" groups="odex_fleet.fleet_group_gm" type="object" states="confirm"
class="oe_highlight" string="Approve"/>
<button name="action_cancel" groups="odex_fleet.fleet_group_supervisor" type="object"
states="draft" class="oe_highlight" string="Cancel"/>
<button name="action_refuse" groups="odex_fleet.fleet_group_gm" type="object" states="confirm"
class="oe_highlight" string="Refuse"/>
<button name="set_to_draft" groups="odex_fleet.fleet_group_draft" type="object" states="refused,cancel"
class="oe_highlight" string="Set To Draft"/>
<field name="state" widget="statusbar" nolabel="1"/>
</header>
<sheet>
<group>
<group string="Vehicle Details">
<field name="vehicle_id" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="fuel_type" readonly="1" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="employee_id"/>
</group>
<group string="Refueling Details">
<field name="cal_type"
attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)],'required':True}"/>
<field name="liter"
attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)],'required':True}"/>
<field name="price_per_liter"
attrs="{'readonly': [('state', '!=', 'draft'),('edit_access', '!=', True)],'required':True}"/>
<field name="price_tax" readonly="1" force_save="1"/>
<field name="amount" readonly="1" force_save="1"/>
<field name="total_price_tax" force_save="1"
attrs="{'readonly':['|',('cal_type','!=','total'),('state','!=','draft'),('edit_access', '!=', True)]}"/>
</group>
<group string="Account Details">
<field name="branch_id" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="partner_id" required="1" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="account_id" required="1" readonly="1" force_save="1"/>
<field name="tax_id" required="1" readonly="1" force_save="1"/>
<field name="invoice_id" readonly="1" force_save="1"/>
<field name="inv_ref"/>
</group>
</group>
<group>
<group string="Odometer Details">
<label for="odometer"/>
<div class="o_row">
<field name="odometer" required="1" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="odometer_unit" attrs="{'readonly':[('state','!=','draft')]}"/>
</div>
</group>
<group string="Additional Details">
<field name="date" required="1" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="purchaser_id" required="0" invisible="1"/>
<field name="edit_access" invisible="1"/>
<field name="user_id" invisible="1"/>
</group>
</group>
<field name="notes" placeholder="Write here any other information"
attrs="{'readonly':[('state','!=','draft')]}"/>
</sheet>
</form>
</field>
</record>
<record id='fleet_vehicle_log_fuel_view_tree' model='ir.ui.view'>
<field name="name">fleet.vehicle.log.fuel.tree</field>
<field name="model">fleet.vehicle.log.fuel</field>
<field name="arch" type="xml">
<tree string="Fuel Logs">
<field name="date"/>
<field name="vehicle_id"/>
<field name="employee_id"/>
<field name="inv_ref" invisible="1"/>
<field name="vendor_id" invisible="1"/>
<field name="odometer"/>
<field name="odometer_unit"/>
<field name="liter"/>
<field name="state"/>
<field name="price_per_liter" invisible="1"/>
<field name="amount" sum="Price"/>
</tree>
</field>
</record>
<record id='fleet_vehicle_log_fuel_action' model='ir.actions.act_window'>
<field name="name">Vehicles Fuel Logs</field>
<field name="res_model">fleet.vehicle.log.fuel</field>
<field name="view_mode">tree,kanban,form,graph</field>
<field name="context">{"search_default_groupby_vehicle" : True}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new fuel log.
</p>
<p>
Here you can add refuelling entries for all vehicles. You can
also filter logs of a particular vehicle using the search
field.
</p>
</field>
</record>
<menuitem action="fleet_vehicle_log_fuel_action" parent="fleet.fleet_vehicles"
id="fleet_vehicle_log_fuel_menu"/>
<!-- service log-->
<record model="ir.ui.view" id="odex_fleet_vehicle_log_services_view_form">
<field name="name">odex.fleet.vehicle.log.services.form</field>
<field name="model">fleet.vehicle.log.services</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="replace">
<form>
<field name="active" invisible="1"/>
<field name="state" invisible="1"/>
<field name="currency_id" invisible="1"/>
<header>
<button name="create_invoice"
groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor"
type="object" states="approve" class="oe_highlight" string="Create Invoice"/>
<button name="action_confirm"
groups="odex_fleet.fleet_group_account,odex_fleet.fleet_group_supervisor"
type="object" states="draft" class="oe_highlight" string="Confirm"/>
<button name="action_approve" groups="odex_fleet.fleet_group_gm" type="object"
states="confirm" class="oe_highlight" string="Approve"/>
<button name="action_cancel" groups="odex_fleet.fleet_group_supervisor" type="object"
states="draft" class="oe_highlight" string="Cancel"/>
<button name="action_refuse" groups="odex_fleet.fleet_group_gm" type="object"
states="confirm" class="oe_highlight" string="Refuse"/>
<button name="set_to_draft" groups="odex_fleet.fleet_group_draft" type="object"
states="refused,cancel" class="oe_highlight" string="Set To Draft"/>
<field name="status" widget="statusbar" nolabel="1"/>
</header>
<sheet>
<group col="2">
<group string="Services Details">
<field name="vehicle_id" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="employee_id"/>
<field name="cost_subtype_id" attrs="{'readonly':[('state','!=','draft')]}"
string="Service Type"
domain="['|',('category','=','service'),('category','=','both')]"
required="1"/>
<field name="amount"
attrs="{'readonly':[('state','!=','draft'),('edit_access', '!=', True)]}"/>
</group>
<group string="Account Details">
<field name="branch_id"/>
<field name="partner_id" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="account_id" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="invoice_id" readonly="1" force_save="1"/>
</group>
<group string="Odometer Details">
<label for="odometer"/>
<div class="o_row">
<field name="odometer" required="1"
attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="odometer_unit" attrs="{'readonly':[('state','!=','draft')]}"/>
</div>
</group>
</group>
<group col="2">
<group string="Additional Details">
<field name="date" required="1" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="purchaser_id" required="0" invisible="1"/>
<field name="vendor_id" required="0" invisible="1"/>
<!-- <field name="service_type_id" /> -->
<field name="inv_ref" required="0" attrs="{'readonly':[('state','!=','draft')]}"/>
<field name="edit_access" invisible="1"/>
<field name="user_id" invisible="1"/>
</group>
</group>
<group string="Included Services">
<field name="cost_ids" required="1" nolabel="1"
attrs="{'readonly':[('state','!=','draft'),('edit_access', '!=', True)]}">
<tree string="Included Services" editable="bottom">
<field name="cost_subtype_id" required="1" string="Service"
domain="[('category','=','service')]"/>
<field name="number" required="1"/>
<field name="amount" required="1" sum="Price" string="Indicative Cost"/>
<field name="total" sum="Total"/>
</tree>
</field>
</group>
<group string="Notes">
<field nolabel="1" attrs="{'readonly':[('state','!=','draft')]}" name="notes"
placeholder="Write here any other information related to the service completed."/>
</group>
</sheet>
</form>
</xpath>
</field>
</record>
<record id='odex_fleet_vehicle_log_services_view_tree' model='ir.ui.view'>
<field name="name">odex.vehicle.log.services.tree</field>
<field name="model">fleet.vehicle.log.services</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_tree"/>
<field name="arch" type="xml">
<field name="inv_ref" position="after">
<field name="state"/>
</field>
<field name="purchaser_id" position="replace">
<field name="employee_id"/>
</field>
<field name="service_type_id" position="replace">
<field name="cost_subtype_id"/>
</field>
<field name="vendor_id" position="replace">
<field name="partner_id"/>
</field>
</field>
</record>
<!-- menu overwrite-->
<menuitem action="fleet.fleet_vehicle_model_action" groups="fleet.fleet_group_user"
parent="fleet.fleet_configuration" id="fleet.fleet_vehicle_model_menu" sequence="1"/>
<menuitem action="fleet.fleet_vehicle_model_brand_action" groups="fleet.fleet_group_user"
parent="fleet.fleet_configuration" id="fleet.fleet_vehicle_model_brand_menu" sequence="2"/>
<menuitem action="fleet.fleet_vehicle_log_contract_action" parent="fleet.fleet_vehicles"
id="fleet.fleet_vehicle_log_contract_menu" groups="fleet.fleet_group_user,fleet_group_hr_officer"
active="False"/>
<menuitem action="fleet.fleet_vehicle_service_types_action" parent="fleet.fleet_configuration"
groups="fleet.fleet_group_user" id="fleet.fleet_vehicle_service_types_menu" sequence="3"/>
<menuitem id="fleet.fleet_vehicle_tag_menu" parent="fleet.fleet_configuration"
action="fleet.fleet_vehicle_tag_action" groups="fleet.fleet_group_user" sequence="112"/>
</data>
</odoo>

View File

@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
from . import fleet_wiz
from . import reject_reason
from . import reject_reason_infraction

View File

@ -1,267 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record model="ir.ui.view" id="fleet_report_form">
<field name="name">fleet.report.form</field>
<field name="model">fleet.wiz</field>
<field name="arch" type="xml">
<form>
<sheet>
<group col="4" colspan="2">
<field name="date_from" attrs="{'invisible': [('report_type', '=' ,'delegation')]}"/>
<field name="date_to" attrs="{'invisible': [('report_type', '=' ,'delegation')]}"/>
<field name="vehicle_del_type" attrs="{'invisible': [('report_type', '!=' ,'branch_cost'),('report_type', '!=' ,'all_branch_cost')]}"/>
<field name="department_ids" widget="many2many_tags" attrs="{'invisible': [('report_type', '!=' ,'driver'),('report_type', '!=' ,'service'),('report_type', '!=' ,'car_consumption'),('report_type', '!=' ,'maintains'),('vehicle_del_type', '!=' ,'department')]}"/>
<field name="project_ids" widget="many2many_tags" attrs="{'invisible': [('vehicle_del_type', '!=' ,'project')]}"/>
<field name="vehicle_ids" widget="many2many_tags"
attrs="{'invisible': [('report_type', 'in', ['service','maintains','to_maintains','all_branch_cost','state_cost','branch_cost','driver','delegation','renew','to_renew'])]}"/>
<field name="branch_ids" widget="many2many_tags"
attrs="{'invisible': [('report_type', 'in', ['invoice','service','state_cost','driver','delegation','renew','to_renew'])]}"/>
<field name="type_ids" widget="many2many_tags"
attrs="{'invisible': [('report_type', 'in', ['invoice','maintains','to_maintains','driver','delegation','renew','to_renew'])]}"/>
<field name="state_ids" widget="many2many_tags"
attrs="{'invisible': [('report_type', 'in', ['invoice','maintains','to_maintains','car_consumption','all_branch_cost','branch_cost','renew','to_renew'])]}"/>
<field name="cost_subtype_ids" widget="many2many_tags"
attrs="{'invisible': [('report_type', 'in', ['invoice','maintains','to_maintains','car_consumption','all_branch_cost','state_cost','branch_cost','driver','delegation','renew','to_renew'])]}"/>
<field name="report_type" invisible="1"/>
</group>
</sheet>
<footer>
<button name="print_report" string="Print PDF" type="object" class="oe_highlight"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- <menuitem id="menu_fleet_reporting_general_costs"-->
<!-- name="General Costs"-->
<!-- parent="fleet.menu_fleet_reporting"-->
<!-- action="fleet_report_action"-->
<!-- sequence="4"-->
<!-- />-->
<!--fleet file-->
<!--Cost-->
<record id="cost_state_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet State Expense Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'state_cost'}</field>
<field name="target">new</field>
</record>
<menuitem name="Reporting" parent="fleet.menu_root" id="fleet.menu_fleet_reporting" sequence="99" groups="fleet.fleet_group_manager,fleet.fleet_group_user,fleet_group_vice_gm"/>
<menuitem id="menu_fleet_reporting_state_cost"
name="State Expense "
parent="fleet.menu_fleet_reporting"
action="cost_state_report_fleet_report_action"
sequence="4"
/>
<!--Branch expense-->
<record id="branch_cost_cost_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Branch Expense Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'branch_cost'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_branch_cost"
name="Branch Expense "
parent="fleet.menu_fleet_reporting"
action="branch_cost_cost_report_fleet_report_action"
sequence="4"
/>
<!-- chart-->
<record id="all_branch_cost_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet All Branch Expense Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'all_branch_cost'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_all_branch_cost"
name="All Branch Expense "
parent="fleet.menu_fleet_reporting"
action="all_branch_cost_report_fleet_report_action"
sequence="4"
/>
<!-- maintance-->
<record id="maintains_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Maintains Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'maintains'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_maintains"
name="Fleet Maintains"
parent="fleet.menu_fleet_reporting"
action="maintains_report_fleet_report_action"
sequence="4"
/>
<record id="to_maintains_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Need Maintains Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'to_maintains'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_to_maintains"
name="Fleet Need Maintains"
parent="fleet.menu_fleet_reporting"
action="to_maintains_report_fleet_report_action"
sequence="4"
/>
<!-- renew-->
<record id="to_renew_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Need Renew Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'to_renew'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_to_renew"
name="Fleet Need Renew"
parent="fleet.menu_fleet_reporting"
action="to_renew_report_fleet_report_action"
sequence="4"
/>
<record id="renew_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Renew Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'renew'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_renew"
name="Renew Report"
parent="fleet.menu_fleet_reporting"
action="renew_report_fleet_report_action"
sequence="4"
/>
<!-- service-->
<record id="car_consumption_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Consumption Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'car_consumption'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_car_consumption"
name="Consumption Report"
parent="fleet.menu_fleet_reporting"
action="car_consumption_report_fleet_report_action"
sequence="4"
/>
<record id="service_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Service Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'service'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_car_service"
name="Service Report"
parent="fleet.menu_fleet_reporting"
action="service_report_fleet_report_action"
sequence="4"
/>
<record id="invoice_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Expense Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'invoice'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_car_invoice"
name="Fleet Expense Invoice Report"
parent="fleet.menu_fleet_reporting"
action="invoice_report_fleet_report_action"
sequence="4"
/>
<!-- delegation-->
<record id="driver_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Driver Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'driver'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_car_driver"
name="Fleet Driver Report"
parent="fleet.menu_fleet_reporting"
action="driver_report_fleet_report_action"
sequence="4"
/>
<record id="delegation_report_fleet_report_action" model="ir.actions.act_window">
<field name="name">Fleet Delegation Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">fleet.wiz</field>
<field name="view_mode">form</field>
<field name="context">{'default_report_type':'delegation'}</field>
<field name="target">new</field>
</record>
<menuitem id="menu_fleet_reporting_car_delegation"
name="Fleet Delegation Report"
parent="fleet.menu_fleet_reporting"
action="delegation_report_fleet_report_action"
sequence="4"
/>
</data>
</odoo>

View File

@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Expert (LCT, Life Connection Technology)
# Copyright (C) 2020-2021 LCT
#
##############################################################################
from dateutil.relativedelta import relativedelta
from odoo.exceptions import ValidationError
from odoo import models, fields, api, _
class FleettWiz(models.TransientModel):
_name = 'fleet.wiz'
_description = "Fleet Wizard Report"
date_from = fields.Date(string='Date From')
date_to = fields.Date(string='Date To')
service_ids = fields.Many2many('fleet.service.type','fleet_service_wiz_rel', 'service_id', 'wiz_id', string='Service', )
branch_ids = fields.Many2many('res.branch', string='Branch', )
type_ids = fields.Many2many('fleet.type', string='Fleet Type', )
vehicle_ids = fields.Many2many('fleet.vehicle', string='Vehicle', )
state_ids = fields.Many2many('res.country.state', string=' States')
cost_subtype_ids = fields.Many2many('fleet.service.type', string='Service Type')
vehicle_del_type = fields.Selection(selection=[('department', 'Department'),
('project', 'Project')])
department_ids = fields.Many2many('hr.department',string='Departments')
project_ids = fields.Many2many('project.project',string='projects')
report_type = fields.Selection(selection=[('branch_cost','Branch Cost'),
('state_cost','State Cost'),
('all_branch_cost', 'All Branch Cost'),
('car_consumption','Car Consumption'),
('driver','Driver'),
('delegation','Delegation'),
('renew','Renew'),
('to_renew','To Renew'),
('service','Service'),
('invoice','Invoice'),
('maintains','Maintenance'),
('to_maintains','To Maintenance'),
])
@api.constrains('date_from','date_to')
def check_date(self):
for rec in self:
if rec.date_from and rec.date_to:
if rec.date_from>rec.date_to:
raise ValidationError(_("Date To Should Be Greater Than Date From"))
def print_report(self):
data ={'state_ids':self.state_ids.ids if self.state_ids else False,'date_from':self.date_from,'date_to':self.date_to,'report_type':self.report_type,
'type_ids':self.type_ids.ids if self.type_ids else False,'branch_ids':self.branch_ids.ids if self.branch_ids else False ,
'vehicle_ids':self.vehicle_ids.ids if self.vehicle_ids else False,'cost_subtype_ids': self.cost_subtype_ids.ids if self.cost_subtype_ids else False,
'vehicle_del_type' : self.vehicle_del_type if self.vehicle_del_type else False ,
'department_ids':self.department_ids.mapped('name'),
'project_ids':self.project_ids.mapped('name')}
if self.report_type == 'branch_cost':
return self.env.ref('odex_fleet.fleet_branch_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'state_cost':
return self.env.ref('odex_fleet.state_cost_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'all_branch_cost':
return self.env.ref('odex_fleet.all_branch_cost_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'car_consumption':
return self.env.ref('odex_fleet.car_consumption_cost_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'to_renew':
return self.env.ref('odex_fleet.to_renew_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'renew':
return self.env.ref('odex_fleet.renew_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'driver':
return self.env.ref('odex_fleet.driver_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'delegation':
return self.env.ref('odex_fleet.driver_delegation_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'service':
return self.env.ref('odex_fleet.service_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'service':
return self.env.ref('odex_fleet.service_report_pdf_act').report_action(self, data=data)
elif self.report_type == 'invoice':
return self.env.ref('odex_fleet.invoice_report_pdf_act').report_action(self, data=data)
elif self.report_type in ['to_maintains','maintains']:
return self.env.ref('odex_fleet.maintains_report_pdf_act').report_action(self, data=data)

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class RejectReasonFleet(models.TransientModel):
_name = 'reject.reason.fleet.wiz'
_description = 'Reject Wiz'
reason = fields.Text()
delegation_id = fields.Many2one('vehicle.delegation')
maintenance_id = fields.Many2one('fleet.maintenance')
request_id = fields.Many2one('fleet.quotation')
def action_reject(self):
if self.delegation_id:
self.delegation_id.sudo().write({
'state': 'refused',
'reason': self.reason
})
elif self.request_id:
self.request_id.sudo().write({
'approve': False,
'reason': self.reason
})

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="wizard_reject_reason_fleet_wiz_form" model="ir.ui.view">
<field name="name">Reject Reason</field>
<field name="model">reject.reason.fleet.wiz</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="reason" required="1"/>
<field name="maintenance_id" invisible="1"/>
<field name="delegation_id" invisible="1"/>
<field name="request_id" invisible="1"/>
</group>
</sheet>
<footer>
<button name="action_reject" string="Confirm" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>

View File

@ -1,16 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class RejectReasonInfraction(models.TransientModel):
_name = 'reject.reason.infraction.wiz'
reason = fields.Text()
infraction_id = fields.Many2one('vehicle.infraction')
def action_reject(self):
if self.infraction_id:
self.infraction_id.sudo().write({
'state': 'refused',
'reason': self.reason
})

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="wizard_reject_reason_infraction_form" model="ir.ui.view">
<field name="name">Reject Reason Infraction</field>
<field name="model">reject.reason.infraction.wiz</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="reason" required="1"/>
</group>
</sheet>
<footer>
<button name="action_reject" string="Confirm" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>