diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/fleet/views | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/fleet/views')
| -rw-r--r-- | addons/fleet/views/fleet_board_view.xml | 75 | ||||
| -rw-r--r-- | addons/fleet/views/fleet_vehicle_cost_views.xml | 333 | ||||
| -rw-r--r-- | addons/fleet/views/fleet_vehicle_model_views.xml | 188 | ||||
| -rw-r--r-- | addons/fleet/views/fleet_vehicle_views.xml | 499 | ||||
| -rw-r--r-- | addons/fleet/views/mail_activity_views.xml | 16 | ||||
| -rw-r--r-- | addons/fleet/views/res_config_settings_views.xml | 55 |
6 files changed, 1166 insertions, 0 deletions
diff --git a/addons/fleet/views/fleet_board_view.xml b/addons/fleet/views/fleet_board_view.xml new file mode 100644 index 00000000..ecd72789 --- /dev/null +++ b/addons/fleet/views/fleet_board_view.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="fleet_costs_report_view_search" model="ir.ui.view"> + <field name="name">fleet.vehicle.cost.view.search</field> + <field name="model">fleet.vehicle.cost.report</field> + <field name="arch" type="xml"> + <search string="Fleet Costs Analysis"> + <field name="name" filter_domain="[('name', 'ilike', self)]"/> + <field name="driver_id" filter_domain="[('driver_id', 'ilike', self)]"/> + <field name="date_start"/> + <filter string="Service" name="service" domain="[('cost_type', '=', 'service')]"/> + <filter string="Contract" name="contract" domain="[('cost_type', '=', 'contract')]"/> + <separator/> + <filter name="filter_date_start" date="date_start" default_period="this_year"/> + <group expand="1" string="Group By"> + <filter string="Vehicle" name="vehicle" context="{'group_by':'vehicle_id'}"/> + <filter string="Driver" name="driver" context="{'group_by':'driver_id'}"/> + </group> + </search> + </field> + </record> + + <record id="fleet_costs_report_view_pivot" model="ir.ui.view"> + <field name="name">fleet.vehicle.cost.view.pivot</field> + <field name="model">fleet.vehicle.cost.report</field> + <field name="arch" type="xml"> + <pivot sample="1" disable_linking="True"> + <field name="date_start" type="col" interval="year" /> + <field name="cost_type" type="col" /> + <field name="vehicle_id" type="row" /> + <field name="cost" type="measure" /> + </pivot> + </field> + </record> + + <record id="fleet_costs_report_view_graph" model="ir.ui.view"> + <field name="name">fleet.vehicle.cost.view.graph</field> + <field name="model">fleet.vehicle.cost.report</field> + <field name="arch" type="xml"> + <graph string="Fleet Costs Analysis" type="bar" sample="1" disable_linking="1"> + <field name="date_start" type="row" interval="month"/> + <field name="cost_type" type="row"/> + <field name="cost" type="measure"/> + </graph> + </field> + </record> + + + <record id="fleet_costs_reporting_action" model="ir.actions.act_window"> + <field name="name">Costs Analysis</field> + <field name="res_model">fleet.vehicle.cost.report</field> + <field name="view_mode">graph,pivot</field> + <field name="view_id"></field> + <field name="context" eval="{'search_default_filter_date_start': 1}"/> + <field name="search_view_id" ref="fleet.fleet_costs_report_view_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_empty_folder"> + No data for analysis + </p><p> + Odoo helps you managing the costs for your different vehicles + Costs are generally created from services and contract and appears here. + </p><p> + Thanks to the different filters, Odoo can only print the effective + costs, sort them by type and by vehicle. + </p> + </field> + </record> + <menuitem name="Reporting" parent="menu_root" id="menu_fleet_reporting" sequence="99" groups="fleet_group_manager"/> + <menuitem id="menu_fleet_reporting_costs" + name="Costs" + parent="menu_fleet_reporting" + action="fleet_costs_reporting_action" + sequence="1" + groups="fleet_group_manager"/> +</odoo> diff --git a/addons/fleet/views/fleet_vehicle_cost_views.xml b/addons/fleet/views/fleet_vehicle_cost_views.xml new file mode 100644 index 00000000..9f1157bc --- /dev/null +++ b/addons/fleet/views/fleet_vehicle_cost_views.xml @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id='fleet_vehicle_log_contract_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.log_contract.form</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <form string="Contract logs"> + <header> + <button name="contract_open" states="futur" type="object" string="Start Contract" class="oe_highlight" groups="fleet.fleet_group_manager"/> + <button name="contract_close" states="futur" type="object" string="Cancel" groups="fleet.fleet_group_manager"/> + <button name="contract_close" states="open,expired,futur" type="object" class="oe_highlight" string="Close Contract" groups="fleet.fleet_group_manager"/> + <button name="contract_draft" states="closed" type="object" string="Reset To Draft" groups="fleet.fleet_group_manager"/> + <field name="state" widget="statusbar" /> + </header> + <sheet> + <field name="active" invisible="1"/> + <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> + <field name="currency_id" invisible="1"/> + <div class="oe_title"> + <h1><field name="name"/></h1> + </div> + <group col="2"> + <group string="Contract Information"> + <field name="user_id"/> + <field name="cost_subtype_id"/> + <field name="insurer_id"/> + <field name="ins_ref"/> + </group> + <group string="Vehicle Information"> + <field name="vehicle_id"/> + <field name="purchaser_id"/> + </group> + </group> + <group col="2"> + <group> + <field name="amount" string="Activation Cost" help="Cost that is paid only once at the creation of the contract" widget="monetary"/> + <label for="cost_generated"/> + <div class="o_row"> + <field name="cost_generated" attrs="{'invisible': [('cost_frequency','=','no')]}" widget="monetary"/> + <field name="cost_frequency"/> + </div> + </group> + <group> + <field name="date" string="Invoice Date"/> + <field name="start_date"/> + <field name="expiration_date" attrs="{'required': [('cost_frequency', '!=', 'no')]}"/> + </group> + </group> + <group string="Included Services"> + <field name="service_ids" widget="many2many_tags" nolabel="1"/> + </group> + <group string="Terms and Conditions"> + <field name="notes" nolabel="1" placeholder="Write here all other information relative to this contract" /> + </group> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids"/> + <field name="activity_ids"/> + <field name="message_ids"/> + </div> + </form> + </field> + </record> + + <record id='fleet_vehicle_log_contract_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.contract.tree</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <tree string="Contract logs" + decoration-danger="days_left==0" + decoration-muted="state=='closed'" + default_order="expiration_date" + sample="1"> + <field name="active" invisible="1"/> + <field name="name" class="font-weight-bold" /> + <field name="start_date" /> + <field name="expiration_date" widget="remaining_days"/> + <field name="days_left" invisible="1"/> + <field name="vehicle_id" widget="many2one_avatar" /> + <field name="insurer_id" /> + <field name="purchaser_id"/> + <field name="cost_generated" widget="monetary"/> + <field name="currency_id" invisible="1"/> + <field name="cost_frequency"/> + <field name="state" widget="badge" decoration-info="state == 'open'" decoration-danger="state == 'expired'" /> + <field name="activity_exception_decoration" widget="activity_exception"/> + </tree> + </field> + </record> + + <record id='fleet_vehicle_log_contract_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.contract.kanban</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <kanban class="o_kanban_mobile" sample="1"> + <field name="activity_state"/> + <progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_global_click"> + <div> + <strong> + <field name="vehicle_id" widget="res_partner_many2one"/> + <span class="float-right badge badge-secondary"> + <field name="state"/> + </span> + </strong> + </div> + <div> + <field name="start_date"/> - <field name="expiration_date"/> + </div> + <div> + <field name="insurer_id" widget="res_partner_many2one"/> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="fleet_vehicle_log_contract_view_graph" model="ir.ui.view"> + <field name="name">fleet.vehicle.log.contract.graph</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <graph string="Contract Costs Per Month" type="bar" stacked="True" sample="1"> + <field name="date" type="row"/> + <field name="vehicle_id" type="row"/> + <field name="amount" type="measure"/> + </graph> + </field> + </record> + + <record id="fleet_vehicle_log_contract_view_search" model="ir.ui.view"> + <field name="name">fleet.vehicle.log.contract.search</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <search string="Vehicles Contracts"> + <field name="vehicle_id" string="Vehicle" filter_domain="[('vehicle_id.name','ilike', self)]"/> + <field name="purchaser_id" string="Driver" filter_domain="[('purchaser_id','child_of', self)]"/> + <field name="insurer_id" string="Vendor" filter_domain="[('insurer_id','child_of', self)]"/> + <filter string="In Progress" name="open" domain="[('state', '=', 'open')]"/> + <filter string="Expired" name="expired" domain="[('state', '=', 'expired')]"/> + <separator/> + <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/> + <separator/> + <filter invisible="1" string="Late Activities" name="activities_overdue" + domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" + help="Show all records which has next action date is before today"/> + <filter invisible="1" string="Today Activities" name="activities_today" + domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/> + <filter invisible="1" string="Future Activities" name="activities_upcoming_all" + domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/> + <group expand="0" string="Group By"> + <filter string="Vehicle" name="vehicle" context="{'group_by': 'vehicle_id'}"/> + </group> + </search> + </field> + </record> + + <record id="fleet_vehicle_log_contract_view_activity" model="ir.ui.view"> + <field name="name">fleet.vehicle.log.contract.activity</field> + <field name="model">fleet.vehicle.log.contract</field> + <field name="arch" type="xml"> + <activity string="Vehicles Contracts"> + <field name="purchaser_id"/> + <templates> + <div t-name="activity-box"> + <img t-att-src="activity_image('res.partner', 'image_128', record.purchaser_id.raw_value)" t-att-title="record.purchaser_id.value" t-att-alt="record.purchaser_id.value"/> + <div> + <field name="vehicle_id" display="full"/> + </div> + </div> + </templates> + </activity> + </field> + </record> + + <record id='fleet_vehicle_log_contract_action' model='ir.actions.act_window'> + <field name="name">Contracts</field> + <field name="res_model">fleet.vehicle.log.contract</field> + <field name="view_mode">tree,kanban,form,graph,activity</field> + <field name="context">{'search_default_open': 1}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new contract + </p><p> + Manage all your contracts (leasing, insurances, etc.) with + their related services, costs. Odoo will automatically warn + you when some contracts have to be renewed. + </p><p> + Each contract (e.g.: leasing) may include several services + (reparation, insurances, periodic maintenance). + </p> + </field> + </record> + + <menuitem action="fleet_vehicle_log_contract_action" parent="fleet_vehicles" id="fleet_vehicle_log_contract_menu" groups="fleet_group_user" sequence="2"/> + + <record id='fleet_vehicle_log_services_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.services.form</field> + <field name="model">fleet.vehicle.log.services</field> + <field name="arch" type="xml"> + <form string="Services Logs"> + <field name="active" invisible="1" /> + <field name="currency_id" invisible="1" /> + <header> + <field name="state" widget="statusbar" options="{'clickable': '1'}"/> + </header> + <sheet> + <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> + <group col="2"> + <group> + <field name="description" /> + <field name="service_type_id" /> + <field name="date" /> + <field name="amount" widget="monetary"/> + <field name="vendor_id"/> + </group> + <group> + <field name="vehicle_id"/> + <field name="purchaser_id"/> + <label for="odometer"/> + <div class="o_row"> + <field name="odometer"/> + <field name="odometer_unit"/> + </div> + </group> + </group> + <group string="Notes"> + <field nolabel="1" name="notes" placeholder="Write here any other information related to the service completed."/> + </group> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids"/> + <field name="activity_ids"/> + <field name="message_ids"/> + </div> + </form> + </field> + </record> + + <record id='fleet_vehicle_log_services_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.services.tree</field> + <field name="model">fleet.vehicle.log.services</field> + <field name="arch" type="xml"> + <tree string="Services Logs" multi_edit="1"> + <field name="date" readonly="1" /> + <field name="description" /> + <field name="service_type_id" /> + <field name="vehicle_id" readonly="1" widget="many2one_avatar" /> + <field name="purchaser_id" readonly="1" widget="many2one_avatar"/> + <field name="vendor_id" optional="show" /> + <field name="inv_ref" invisible="1" /> + <field name="notes" optional="show" /> + <field name="amount" sum="Total" widget="monetary"/> + <field name="currency_id" invisible="1"/> + <field name="state" readonly="1" widget="badge" decoration-success="state == 'done'" decoration-warning="state == 'todo'" decoration-info="state == 'running'" /> + </tree> + </field> + </record> + + <record id='fleet_vehicle_log_services_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.services.kanban</field> + <field name="model">fleet.vehicle.log.services</field> + <field name="arch" type="xml"> + <kanban class="o_kanban_mobile"> + <field name="currency_id"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_global_click"> + <div> + <strong> + <field name="vehicle_id" widget="res_partner_many2one"/> + <span class="float-right"><field name="date"/></span> + </strong> + </div> + <div> + <field name="purchaser_id" widget="res_partner_many2one"/> + </div> + <div> + <span><field name="vendor_id" widget="res_partner_many2one"/></span> + <span class="float-right"><field name="amount" widget="monetary"/></span> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="fleet_vehicle_log_services_view_graph" model="ir.ui.view"> + <field name="name">fleet.vehicle.log.services.graph</field> + <field name="model">fleet.vehicle.log.services</field> + <field name="arch" type="xml"> + <graph string="Services Costs Per Month" stacked="True" sample="1"> + <field name="date" type="row"/> + <field name="vehicle_id" type="row"/> + <field name="amount" type="measure"/> + </graph> + </field> + </record> + + <record id='fleet_vehicle_log_services_view_search' model='ir.ui.view'> + <field name="name">fleet.vehicle.log.services.search</field> + <field name="model">fleet.vehicle.log.services</field> + <field name="arch" type="xml"> + <search string="Services Logs" > + <field name="vehicle_id"/> + <field name="service_type_id"/> + <separator/> + <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/> + </search> + </field> + </record> + + <record id='fleet_vehicle_log_services_action' model='ir.actions.act_window'> + <field name="name">Services</field> + <field name="res_model">fleet.vehicle.log.services</field> + <field name="view_mode">tree,kanban,form,graph</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new service entry + </p><p> + Track all the services done on your vehicle. + Services can be of many types: occasional repair, fixed maintenance, etc. + </p> + </field> + </record> + + <menuitem action="fleet_vehicle_log_services_action" parent="fleet_vehicles" id="fleet_vehicle_log_services_menu" groups="fleet_group_user" sequence="3"/> + +</odoo> diff --git a/addons/fleet/views/fleet_vehicle_model_views.xml b/addons/fleet/views/fleet_vehicle_model_views.xml new file mode 100644 index 00000000..474f43b1 --- /dev/null +++ b/addons/fleet/views/fleet_vehicle_model_views.xml @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <record id='fleet_vehicle_model_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.form</field> + <field name="model">fleet.vehicle.model</field> + <field name="arch" type="xml"> + <form string="Model"> + <sheet> + <widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> + <field name="image_128" widget='image' class="oe_avatar"/> + <div class="oe_title"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name" placeholder="e.g. Model S"/> + </h1> + <label for="brand_id" class="oe_edit_only"/> + <h2> + <field name="brand_id" placeholder="e.g. Tesla"/> + </h2> + </div> + <group> + <group> + <field name="active" invisible="1"/> + <field name="vehicle_type"/> + <field name="manager_id" groups="fleet.fleet_group_manager"/> + </group> + </group> + <notebook> + <page string="Vendors" name="vendors"> + <field name="vendors"> + <kanban quick_create="false" create="true"> + <field name="name"/> + <templates> + <t t-name="kanban-box"> + <div style="position: relative" class="oe_kanban_global_click"> + <div class="oe_module_vignette"> + <div class="oe_module_desc o_kanban_record_title"> + <field name="name"/> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + + <record id='fleet_vehicle_model_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.tree</field> + <field name="model">fleet.vehicle.model</field> + <field name="arch" type="xml"> + <tree string="Models"> + <field name="brand_id" /> + <field name="name" /> + <field name="vehicle_type"/> + </tree> + </field> + </record> + + <record id='fleet_vehicle_model_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.kanban</field> + <field name="model">fleet.vehicle.model</field> + <field name="arch" type="xml"> + <kanban string="Models"> + <templates> + <t t-name="kanban-box"> + <div class="oe_kanban_details"> + <div><strong><field name="name"/></strong></div> + <div><field name="brand_id"/></div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id='fleet_vehicle_model_view_search' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.search</field> + <field name="model">fleet.vehicle.model</field> + <field name="arch" type="xml"> + <search string="Vehicles costs" > + <field name="brand_id" /> + <group expand="1" string="Group By"> + <filter name="groupby_brand" context="{'group_by' : 'brand_id'}" string="Make"/> + </group> + </search> + </field> + </record> + + <record id='fleet_vehicle_model_action' model='ir.actions.act_window'> + <field name="name">Vehicles Model</field> + <field name="res_model">fleet.vehicle.model</field> + <field name="view_mode">tree,form</field> + <field name="context">{"search_default_groupby_brand" : True,}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new model + </p><p> + You can define several models (e.g. A3, A4) for each make (Audi). + </p> + </field> + </record> + + <menuitem name="Fleet" id="menu_root" sequence="115" groups="fleet_group_user" web_icon="fleet,static/description/icon.png"/> + <menuitem name="Configuration" parent="menu_root" id="fleet_configuration" sequence="100" groups="fleet_group_manager"/> + + <record id='fleet_vehicle_model_brand_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.brand.tree</field> + <field name="model">fleet.vehicle.model.brand</field> + <field name="arch" type="xml"> + <tree string="Model Make"> + <field name="name" /> + </tree> + </field> + </record> + + <record id='fleet_vehicle_model_brand_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.brand.form</field> + <field name="model">fleet.vehicle.model.brand</field> + <field name="arch" type="xml"> + <form string="Model Make"> + <sheet> + <group> + <div> + <field name="image_128" widget="image" class="oe_avatar"/> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name"/> + </h1> + </div> + </group> + </sheet> + </form> + </field> + </record> + + <record id='fleet_vehicle_model_brand_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.model.brandkanban</field> + <field name="model">fleet.vehicle.model.brand</field> + <field name="arch" type="xml"> + <kanban> + <field name="id"/> + <field name="name" /> + <templates> + <t t-name="kanban-box"> + <div class="oe_kanban_vignette oe_semantic_html_override oe_kanban_global_click"> + <a type="open" href="#" class="o_kanban_image oe_kanban_action"> + <img alt="Open" t-att-src="kanban_image('fleet.vehicle.model.brand', 'image_128', record.id.raw_value)" class="img-fluid" style="width:100px;"/> + </a> + <div class="oe_kanban_details"> + <h4 class="oe_partner_heading"> + <a type="open" class="o_kanban_record_title"> + <field name="name"/> + </a> + </h4> + </div> + <div class="o_kanban_button"> + <a type="object" name="action_brand_model" class="oe_kanban_action oe_kanban_action_a"> + <field name="model_count"/> + MODELS + </a> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id='fleet_vehicle_model_brand_action' model='ir.actions.act_window'> + <field name="name">Manufacturers</field> + <field name="res_model">fleet.vehicle.model.brand</field> + <field name="view_mode">kanban,tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new manufacturer + </p> + </field> + </record> + + <menuitem action="fleet_vehicle_model_brand_action" parent="fleet_configuration" id="fleet_vehicle_model_brand_menu" sequence="2"/> + <menuitem action="fleet_vehicle_model_action" parent="fleet_configuration" id="fleet_vehicle_model_menu" sequence="2"/> +</odoo> diff --git a/addons/fleet/views/fleet_vehicle_views.xml b/addons/fleet/views/fleet_vehicle_views.xml new file mode 100644 index 00000000..a9c3c009 --- /dev/null +++ b/addons/fleet/views/fleet_vehicle_views.xml @@ -0,0 +1,499 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + + <record id='fleet_vehicle_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.form</field> + <field name="model">fleet.vehicle</field> + <field name="arch" type="xml"> + <form string="Vehicle"> + <header> + <field name="state_id" widget="statusbar" options="{'clickable': '1'}"/> + </header> + <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="2"> + <group string="Driver"> + <field name="active" invisible="1"/> + <field name="vehicle_type" invisible="1"/> + <field name="driver_id" domain="['|', ('company_id', '=', False ), ('company_id', '=', company_id)]"/> + <label for="future_driver_id"/> + <div class="o_row"> + <field name="future_driver_id"/> + <button string="Apply Change" + class="btn btn-primary" + type="object" + name="action_accept_driver_change" + attrs="{'invisible': [('future_driver_id', '=', False)]}"/> + </div> + <field name="plan_to_change_car" groups="fleet.fleet_group_manager"/> + <field name="next_assignation_date"/> + <field name="location"/> + </group> + <group string="Vehicle"> + <label for="odometer" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/> + <div class="o_row" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"> + <field name="odometer"/> + <field name="odometer_unit"/> + </div> + <field name="acquisition_date" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/> + <field name="vin_sn"/> + <field name="car_value" widget="monetary"/> + <field name="net_car_value" widget="monetary"/> + <field name="residual_value" widget="monetary"/> + <field name="company_id" groups="base.group_multi_company"/> + </group> + <group string="Contract" name="contract"> + <field name="manager_id" domain="[('share', '=', False)]"/> + <field name="first_contract_date"/> + </group> + <group string="Model"> + <field name="seats" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/> + <field name="doors" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/> + <field name="color"/> + <field name="model_year"/> + </group> + <group string="Engine" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"> + <field name="transmission"/> + <field name="fuel_type"/> + <label for="co2"/> + <div class="o_row" name="co2"> + <field name="co2"/><span>g/km</span> + </div> + <field name="horsepower"/> + <field name="horsepower_tax" widget="monetary"/> + <label for="power"/> + <div class="o_row"> + <field name="power"/><span>kW</span> + </div> + </group> + <group string="Description"> + <field name="description" nolabel="1" placeholder="Write here any other information related to this vehicle" /> + </group> + </group> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids"/> + <field name="activity_ids"/> + <field name="message_ids"/> + </div> + </form> + </field> + </record> + + <record id='fleet_vehicle_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.tree</field> + <field name="model">fleet.vehicle</field> + <field name="arch" type="xml"> + <tree string="Vehicle" + decoration-warning="contract_renewal_due_soon and not contract_renewal_overdue" + decoration-danger="contract_renewal_overdue" + sample="1"> + <field name="active" invisible="1"/> + <field name="license_plate"/> + <field name="model_id" widget="many2one_avatar" /> + <field name="driver_id" widget="many2one_avatar"/> + <field name="future_driver_id" widget="many2one_avatar"/> + <field name="log_drivers" invisible="1"/> + <field name="vin_sn"/> + <field name="co2" string="CO2 Emissions g/km" optional="hide" /> + <field name="acquisition_date"/> + <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/> + <field name="state_id" widget="badge" /> + <field name="company_id" groups="base.group_multi_company"/> + <field name="contract_renewal_due_soon" invisible="1"/> + <field name="contract_renewal_overdue" invisible="1"/> + <field name="contract_renewal_total" invisible="1"/> + <field name="activity_exception_decoration" widget="activity_exception"/> + </tree> + </field> + </record> + + <record id="fleet_vehicle_view_search" model="ir.ui.view"> + <field name="name">fleet.vehicle.search</field> + <field name="model">fleet.vehicle</field> + <field name="arch" type="xml"> + <search string="All vehicles"> + <field string="Vehicle" name="name" filter_domain="['|', ('name', 'ilike', self), ('license_plate', 'ilike', self)]"/> + <field string="Drivers" name="log_drivers" filter_domain="[('log_drivers.driver_id.name', 'ilike', self)]"/> + <field string="Current Driver" name="driver_id"/> + <field name="future_driver_id"/> + <field name="tag_ids"/> + <field name="location"/> + <field string="Status" name="state_id"/> + <filter string="Available" name="available" + domain="['&', ('future_driver_id', '=', False), '|', ('driver_id', '=', False), ('plan_to_change_car', '=', True)]"/> + <filter name="planned" string="Planned for Change" domain="[('plan_to_change_car', '=', True)]"/> + <separator/> + <filter string="Need Action" name="alert_true" domain="['|', ('contract_renewal_due_soon', '=', True), ('contract_renewal_overdue', '=', True)]"/> + <separator/> + <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/> + <separator/> + <filter invisible="1" string="Late Activities" name="activities_overdue" + domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" + help="Show all records which has next action date is before today"/> + <filter invisible="1" string="Today Activities" name="activities_today" + domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/> + <filter invisible="1" string="Future Activities" name="activities_upcoming_all" + domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/> + <group expand="1" string="Group By"> + <filter string="Status" name="groupby_status" context="{'group_by': 'state_id'}"/> + <filter string="Model" name="groupby_model" context="{'group_by': 'model_id'}"/> + <filter string="Brand" name="groupby_make" context="{'group_by': 'brand_id'}"/> + </group> + </search> + </field> + </record> + + + <record id='fleet_vehicle_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.kanban</field> + <field name="model">fleet.vehicle</field> + <field name="arch" type="xml"> + <kanban default_group_by="state_id" sample="1"> + <field name="license_plate" /> + <field name="model_id" /> + <field name="driver_id" /> + <field name="future_driver_id" /> + <field name="location" /> + <field name="state_id" /> + <field name="id" /> + <field name="tag_ids" /> + <field name="contract_renewal_due_soon" /> + <field name="contract_renewal_overdue" /> + <field name="contract_renewal_name" /> + <field name="contract_renewal_total" /> + <field name="contract_count" /> + <field name="activity_ids"/> + <field name="activity_state"/> + <progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/> + + <templates> + <t t-name="kanban-box"> + <div class="oe_kanban_global_click o_kanban_record_has_image_fill"> + <div class="o_kanban_image" t-attf-style="background-image:url('#{kanban_image('fleet.vehicle', 'image_128', record.id.raw_value)}')"/> + <div class="oe_kanban_details"> + <strong class="o_kanban_record_title"> + <t t-if="record.license_plate.raw_value"><field name="license_plate"/>:</t> <field name="model_id"/> + </strong> + <div class="o_kanban_tags_section"> + <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/> + </div> + <ul> + <li> + <t t-if="record.driver_id.raw_value"><field name="driver_id"/></t> + </li> + <li> + <t t-if="record.future_driver_id.raw_value">Future Driver : <field name="future_driver_id"/></t> + </li> + <li> + <t t-if="record.location.raw_value"><field name="location"/></t> + </li> + </ul> + <div class="o_kanban_record_bottom" t-if="!selection_mode"> + <div class="oe_kanban_bottom_left"> + <a t-if="record.contract_count.raw_value>0" data-type="object" + data-name="return_action_to_open" href="#" class="oe_kanban_action oe_kanban_action_a" + data-context='{"xml_id":"fleet_vehicle_log_contract_action"}'> + <field name="contract_count"/> + Contract(s) + <span t-if="record.contract_renewal_due_soon.raw_value and !record.contract_renewal_overdue.raw_value" + class="fa fa-exclamation-triangle" t-att-style="'color:orange'" role="img" aria-label="Warning: renewal due soon" title="Warning: renewal due soon"> + </span> + <span t-if="record.contract_renewal_overdue.raw_value" + class="fa fa-exclamation-triangle" t-att-style="'color:red;'" role="img" aria-label="Attention: renewal overdue" title="Attention: renewal overdue"> + </span> + </a> + <field name="activity_ids" widget="kanban_activity"/> + </div> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="fleet_vehicle_view_activity" model="ir.ui.view"> + <field name="name">fleet.vehicle.activity</field> + <field name="model">fleet.vehicle</field> + <field name="arch" type="xml"> + <activity string="Vehicles"> + <field name="license_plate"/> + <field name="id"/> + <templates> + <div t-name="activity-box"> + <img t-att-src="activity_image('fleet.vehicle', 'image_128', record.id.raw_value)" role="img" t-att-title="record.id.value" t-att-alt="record.id.value"/> + <div> + <field name="license_plate"/> : <field name="model_id"/> + </div> + </div> + </templates> + </activity> + </field> + </record> + + <record id='fleet_vehicle_action' model='ir.actions.act_window'> + <field name="name">Vehicles</field> + <field name="res_model">fleet.vehicle</field> + <field name="view_mode">kanban,tree,form,activity</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Ready to manage your fleet more efficiently ? + </p><p> + Let's create your first vehicle. + </p> + </field> + </record> + + <menuitem name="Vehicles" parent="menu_root" id="fleet_vehicles" sequence="2" groups="fleet_group_user"/> + <menuitem action="fleet_vehicle_action" parent="fleet_vehicles" id="fleet_vehicle_menu" groups="fleet_group_user" sequence="1"/> + + <record id='fleet_vehicle_odometer_view_form' model='ir.ui.view'> + <field name="name">fleet.vehicle.odometer.form</field> + <field name="model">fleet.vehicle.odometer</field> + <field name="arch" type="xml"> + <form string="Odometer Logs"> + <sheet> + <group> + <field name="vehicle_id"/> + <field name="value" class="oe_inline"/> + <field name="unit" class="oe_inline"/> + <field name="date" /> + </group> + </sheet> + </form> + </field> + </record> + + <record id='fleet_vehicle_odometer_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.odometer.tree</field> + <field name="model">fleet.vehicle.odometer</field> + <field name="arch" type="xml"> + <tree string="Odometer Logs" editable="top"> + <field name="date" /> + <field name="vehicle_id" widget="many2one_avatar"/> + <field name="driver_id" widget="many2one_avatar"/> + <field name="value" /> + <field name="unit" /> + </tree> + </field> + </record> + + <record id='fleet_vehicle_odometer_view_kanban' model='ir.ui.view'> + <field name="name">fleet.vehicle.odometer.kanban</field> + <field name="model">fleet.vehicle.odometer</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" widget="res_partner_many2one"/> + <span class="float-right"><field name="date"/></span> + </strong> + </div> + <div> + <span><field name="driver_id" widget="res_partner_many2one"/></span> + <span class="float-right"><field name="value"/> Km</span> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id='fleet_vehicle_odometer_view_search' model='ir.ui.view'> + <field name="name">fleet.vehicle.odometer.search</field> + <field name="model">fleet.vehicle.odometer</field> + <field name="arch" type="xml"> + <search string="Vehicles odometers" > + <field name="vehicle_id"/> + <field name="driver_id"/> + <field name="value"/> + <field name="date"/> + <group expand="0" string="Group By"> + <filter name="groupby_vehicle" context="{'group_by': 'vehicle_id'}" string="Vehicle"/> + </group> + </search> + </field> + </record> + + <record id="fleet_vehicle_odometer_view_graph" model="ir.ui.view"> + <field name="name">fleet.vehicle.odometer.graph</field> + <field name="model">fleet.vehicle.odometer</field> + <field name="arch" type="xml"> + <graph string="Odometer Values Per Vehicle" sample="1"> + <field name="vehicle_id" type="row"/> + <field name="value" type="measure"/> + </graph> + </field> + </record> + + <record id='fleet_vehicle_odometer_action' model='ir.actions.act_window'> + <field name="name">Odometers</field> + <field name="res_model">fleet.vehicle.odometer</field> + <field name="view_mode">tree,kanban,form,graph</field> + <field name="context"></field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new odometer log + </p><p> + You can add various odometer entries for all vehicles. + </p> + </field> + </record> + + <menuitem action="fleet_vehicle_odometer_action" parent="fleet_vehicles" id="fleet_vehicle_odometer_menu" groups="fleet_group_user" sequence="10"/> + + <record id='fleet_vehicle_service_types_view_tree' model='ir.ui.view'> + <field name="name">fleet.service.type.tree</field> + <field name="model">fleet.service.type</field> + <field name="arch" type="xml"> + <tree string="Service Types"> + <field name="name" /> + <field name="category"/> + </tree> + </field> + </record> + + <record id='fleet_vehicle_service_types_action' model='ir.actions.act_window'> + <field name="name">Service Types</field> + <field name="res_model">fleet.service.type</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new type of service + </p><p> + Each service can used in contracts, as a standalone service or both. + </p> + </field> + </record> + <menuitem action="fleet_vehicle_service_types_action" parent="fleet_configuration" id="fleet_vehicle_service_types_menu" sequence="3" groups="base.group_no_one"/> + + <record id='fleet_vehicle_state_view_tree' model='ir.ui.view'> + <field name="name">fleet.vehicle.state.tree</field> + <field name="model">fleet.vehicle.state</field> + <field name="arch" type="xml"> + <tree string="State" editable="bottom"> + <field name="sequence" widget="handle"/> + <field name="name" /> + </tree> + </field> + </record> + + <record id='fleet_vehicle_state_action' model='ir.actions.act_window'> + <field name="name">Vehicle Status</field> + <field name="res_model">fleet.vehicle.state</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new vehicle status + </p><p> + You can customize available status to track the evolution of + each vehicle. Example: active, being repaired, sold. + </p> + </field> + </record> + + <menuitem action="fleet_vehicle_state_action" parent="fleet_configuration" id="fleet_vehicle_state_menu" groups="base.group_no_one"/> + + <record id="fleet_vehicle_tag_view_view_form" model="ir.ui.view"> + <field name="name">fleet.vehicle.tag.form</field> + <field name="model">fleet.vehicle.tag</field> + <field name="arch" type="xml"> + <form string="Vehicle Tags"> + <sheet> + <group> + <field name="name"/> + </group> + </sheet> + </form> + </field> + </record> + + <record id="fleet_vehicle_tag_view_view_tree" model="ir.ui.view"> + <field name="name">fleet.vehicle.tag.tree</field> + <field name="model">fleet.vehicle.tag</field> + <field name="arch" type="xml"> + <tree string="Vehicle Tags" editable="bottom"> + <field name="name"/> + </tree> + </field> + </record> + + <record id="fleet_vehicle_tag_action" model="ir.actions.act_window"> + <field name="name">Vehicle Tags</field> + <field name="res_model">fleet.vehicle.tag</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Add a new tag + </p> + </field> + </record> + + <menuitem id="fleet_vehicle_tag_menu" parent="fleet_configuration" action="fleet_vehicle_tag_action" sequence="89" groups="base.group_no_one"/> + + <record id="fleet_vehicle_assignation_log_view_list" model="ir.ui.view"> + <field name="name">fleet.vehicle.assignation.log.view.tree</field> + <field name="model">fleet.vehicle.assignation.log</field> + <field name="arch" type="xml"> + <tree string="Assignment Logs" editable="bottom"> + <field name="vehicle_id" invisible="1"/> + <field name="driver_id"/> + <field name="date_start"/> + <field name="date_end"/> + </tree> + </field> + </record> + +</odoo> diff --git a/addons/fleet/views/mail_activity_views.xml b/addons/fleet/views/mail_activity_views.xml new file mode 100644 index 00000000..2ef3f878 --- /dev/null +++ b/addons/fleet/views/mail_activity_views.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<odoo> + <!-- Activity types config --> + <record id="mail_activity_type_action_config_fleet" model="ir.actions.act_window"> + <field name="name">Activity Types</field> + <field name="res_model">mail.activity.type</field> + <field name="view_mode">tree,form</field> + <field name="domain">['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'fleet.vehicle.log.contract')]</field> + <field name="context">{'default_res_model': 'fleet.vehicle.log.contract'}</field> + </record> + <menuitem id="fleet_menu_config_activity_type" + action="mail_activity_type_action_config_fleet" + parent="fleet_configuration" + sequence="99" + groups="base.group_no_one"/> +</odoo>
\ No newline at end of file diff --git a/addons/fleet/views/res_config_settings_views.xml b/addons/fleet/views/res_config_settings_views.xml new file mode 100644 index 00000000..b7946f5f --- /dev/null +++ b/addons/fleet/views/res_config_settings_views.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data> + <record id="res_config_settings_view_form" model="ir.ui.view"> + <field name="name">res.config.settings.view.form.inherit.hr.fleet</field> + <field name="model">res.config.settings</field> + <field name="priority" eval="90"/> + <field name="inherit_id" ref="base.res_config_settings_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//div[hasclass('settings')]" position="inside"> + <div class="app_settings_block" data-string="Fleet" id="fleet" string="Fleet" data-key="fleet" groups="fleet.fleet_group_manager"> + <h2>Fleet Management</h2> + <div class="row mt16 o_settings_container" id="end_contract_setting"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"/> + <div class="o_setting_right_pane"> + <span class="o_form_label">End Date Contract Alert</span> + <div class="text-muted content-group mt16"> + <span>Send an alert </span> + <field name="delay_alert_contract" class="text-center oe_inline" /> + <span> days before the end date</span> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box" invisible="1"> + <div class="o_setting_left_pane"> + <field name="module_fleet_account" widget="upgrade_boolean"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_fleet_account" string="Analytic Accounting"/> + <div class="text-muted"> + Analyse vehicle costs with analytic accounting + </div> + </div> + </div> + </div> + </div> + </xpath> + </field> + </record> + + <record id="fleet_config_settings_action" model="ir.actions.act_window"> + <field name="name">Settings</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.config.settings</field> + <field name="view_mode">form</field> + <field name="target">inline</field> + <field name="context">{'module' : 'fleet', 'bin_size': False}</field> + </record> + + <menuitem id="fleet_config_settings_menu" name="Settings" + parent="fleet.fleet_configuration" sequence="0" action="fleet_config_settings_action" + groups="base.group_system"/> + </data> +</odoo> |
