Delete odex25_fleet directory
This commit is contained in:
parent
9523e1a5bf
commit
22cad40ada
|
|
@ -1,3 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
|
|
@ -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',
|
||||
# ],
|
||||
}
|
||||
|
|
@ -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 ""
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -1,143 +0,0 @@
|
|||
<!--<?xml version="1.0" encoding="utf-8" ?>-->
|
||||
<!--<odoo>-->
|
||||
<!-- <!– inherit fleet vehicle fuel –>-->
|
||||
<!-- <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>-->
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
|
|
@ -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',
|
||||
],
|
||||
}
|
||||
|
|
@ -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 "المركبة"
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
|
|
@ -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 |
|
|
@ -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>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from .import models
|
||||
from .import wizards
|
||||
from .import reports
|
||||
|
|
@ -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',
|
||||
|
||||
]
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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'
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
@ -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')
|
||||
|
|
@ -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
|
||||
|
|
@ -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'
|
||||
|
|
@ -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'
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -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")
|
||||
|
|
@ -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()
|
||||
|
|
@ -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()
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
from . import fleet_report
|
||||
from . import maintains_report
|
||||
from . import renew_report
|
||||
from . import service_report
|
||||
from . import driver
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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
|
|
@ -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>
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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,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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import fleet_wiz
|
||||
from . import reject_reason
|
||||
from . import reject_reason_infraction
|
||||
|
|
@ -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>
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
})
|
||||
|
|
@ -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>
|
||||
|
|
@ -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
|
||||
})
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue