mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-24 22:32:08 +02:00
Initial commit: Hr packages
This commit is contained in:
commit
62531cd146
2820 changed files with 1432848 additions and 0 deletions
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="digest_tip_hr_expense_0" model="digest.tip">
|
||||
<field name="name">Tip: Snap pictures of your receipts with the remote app</field>
|
||||
<field name="sequence">1100</field>
|
||||
<field name="group_id" ref="base.group_user" />
|
||||
<field name="tip_description" type="html">
|
||||
<div>
|
||||
<p class="tip_title">Tip: Snap pictures of your receipts with the remote app</p>
|
||||
<p class="tip_content">Do not keep your expense tickets in your pockets any longer. Just snap a picture of your receipt and let Odoo digitalizes it for you. The OCR and Artificial Intelligence will fill the data automatically.</p>
|
||||
<img src="https://download.odoocdn.com/digests/hr_expense/static/src/img/expense.png" class="illustration_border" />
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- sgv note - icons will be replaced. Design task is ongoing -->
|
||||
<record id="expense_product_meal" model="product.product">
|
||||
<field name="name">Meals</field>
|
||||
<field name="description">Restaurants, business lunches, etc.</field>
|
||||
<field name="standard_price">0.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="uom_id" ref="uom.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_unit"/>
|
||||
<field name="default_code">FOOD</field>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="sale_ok" eval="False"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/food.svg"/>
|
||||
</record>
|
||||
<record id="expense_product_travel_accommodation" model="product.product">
|
||||
<field name="name">Travel & Accommodation</field>
|
||||
<field name="description">Hotel, plane ticket, taxi, etc.</field>
|
||||
<field name="standard_price">0.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="uom_id" ref="uom.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_unit"/>
|
||||
<field name="default_code">TRANS & ACC</field>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="sale_ok" eval="False"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/transport.svg"/>
|
||||
</record>
|
||||
<record id="expense_product_mileage" model="product.product">
|
||||
<field name="name">Mileage</field>
|
||||
<field name="standard_price">1.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="uom_id" ref="uom.product_uom_km"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_km"/>
|
||||
<field name="default_code">MIL</field>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="sale_ok" eval="False"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/mileage.svg"/>
|
||||
</record>
|
||||
<record id="expense_product_gift" model="product.product">
|
||||
<field name="name">Gifts</field>
|
||||
<field name="description">Gifts to customers or vendors</field>
|
||||
<field name="standard_price">0.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="uom_id" ref="uom.product_uom_km"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_km"/>
|
||||
<field name="default_code">GIFT</field>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="sale_ok" eval="False"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/gift.svg"/>
|
||||
</record>
|
||||
<record id="expense_product_communication" model="product.product">
|
||||
<field name="name">Communication</field>
|
||||
<field name="description">Phone bills, postage, etc.</field>
|
||||
<field name="standard_price">0.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="uom_id" ref="uom.product_uom_km"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_km"/>
|
||||
<field name="default_code">COMM</field>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="sale_ok" eval="False"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/communication.svg"/>
|
||||
</record>
|
||||
<record id="product_product_no_cost" model="product.product">
|
||||
<field name="name">Others</field>
|
||||
<field name="standard_price">0.0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="default_code">EXP_GEN</field>
|
||||
<field name="categ_id" ref="product.cat_expense"/>
|
||||
<field name="can_be_expensed" eval="True"/>
|
||||
<field name="image_1920" type="base64" file="hr_expense/static/img/other.svg"/>
|
||||
</record>
|
||||
</data>
|
||||
<data>
|
||||
<function model="ir.config_parameter" name="set_param" eval="('hr_expense.use_mailgateway', True)"/>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,230 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="hr.employee_mit" model="hr.employee">
|
||||
<field name="address_home_id" ref="base.res_partner_address_3"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_expense_account_journal" model="account.journal">
|
||||
<field name="name">Expense</field>
|
||||
<field name="code">EXP</field>
|
||||
<field name="type">purchase</field>
|
||||
<!-- avoid being selected as default journal -->
|
||||
<field name="sequence">99</field>
|
||||
<field name="alias_name">purchase_expense</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_address_fp" model="res.partner">
|
||||
<field name="name">Pieter Parter's Farm</field>
|
||||
<field name="parent_id" ref="base.partner_root"/>
|
||||
<field name="street">Chaussée de Namur, 40</field>
|
||||
<field name="zip">1367</field>
|
||||
<field name="city">Grand-Rosière-Hottomont</field>
|
||||
<field name="country_id" ref="base.be"/>
|
||||
<field name="type">private</field>
|
||||
</record>
|
||||
|
||||
<record id="hr.employee_fme" model="hr.employee">
|
||||
<field name="address_home_id" ref="res_partner_address_fp"/>
|
||||
</record>
|
||||
|
||||
<record id="hr.employee_al" model="hr.employee">
|
||||
<field name="address_home_id" ref="res_partner_address_fp"/>
|
||||
</record>
|
||||
|
||||
<!-- ++++++++++++++ Expense sheet for Admin ++++++++++++++-->
|
||||
<record id="screen_expense" model="hr.expense">
|
||||
<field name="name">Screen</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_our_super_product'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field eval="289.0" name="total_amount"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-04-03'"/>
|
||||
</record>
|
||||
|
||||
<record id="laptop_expense" model="hr.expense">
|
||||
<field name="name">Laptop</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_our_super_product'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field eval="889.0" name="total_amount"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-04-03'"/>
|
||||
</record>
|
||||
|
||||
<record id="travel_admin_by_car_expense" model="hr.expense">
|
||||
<field name="name">Travel by car</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="product_id" ref="expense_product_mileage"/>
|
||||
<field eval="108.84" name="total_amount"/>
|
||||
<field name="product_uom_id" ref="uom.product_uom_km"/>
|
||||
<field eval="320.0" name="quantity"/>
|
||||
</record>
|
||||
|
||||
<record id="breakfast_admin_expense" model="hr.expense">
|
||||
<field name="name">BreakFast</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="product_id" ref="expense_product_meal"/>
|
||||
<field eval="20" name="total_amount"/>
|
||||
<field eval="1.0" name="quantity"/>
|
||||
</record>
|
||||
|
||||
<record id="travel_ny_sheet" model="hr.expense.sheet">
|
||||
<field name="name">Commercial Travel at New York</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="state">approve</field>
|
||||
</record>
|
||||
|
||||
<record id="travel_by_air_expense" model="hr.expense">
|
||||
<field name="name">Travel by Air</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_our_super_product'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_travel_accommodation"/>
|
||||
<field eval="700.0" name="total_amount"/>
|
||||
<field name="product_uom_id" ref="uom.product_uom_unit"/>
|
||||
<field eval="1.0" name="quantity"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-12'"/>
|
||||
<field name="sheet_id" ref="travel_ny_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="hotel_bill_expense" model="hr.expense">
|
||||
<field name="name">Hotel Expenses</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_travel_accommodation"/>
|
||||
<field eval="2000.0" name="total_amount"/>
|
||||
<field name="product_uom_id" ref="uom.product_uom_unit"/>
|
||||
<field eval="5.0" name="quantity"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-17'"/>
|
||||
<field name="sheet_id" ref="travel_ny_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="lunch_customer_bill_expense" model="hr.expense">
|
||||
<field name="name">Lunch with Customer</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_meal"/>
|
||||
<field eval="152.8" name="total_amount"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-13'"/>
|
||||
<field eval="1.0" name="quantity"/>
|
||||
<field name="sheet_id" ref="travel_ny_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="lunch_bill_expense" model="hr.expense">
|
||||
<field name="name">Lunch</field>
|
||||
<field name="employee_id" ref="hr.employee_admin"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_meal"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-15'"/>
|
||||
<field eval="56.8" name="total_amount"/>
|
||||
<field eval="1.0" name="quantity"/>
|
||||
<field name="sheet_id" ref="travel_ny_sheet"/>
|
||||
</record>
|
||||
|
||||
<!-- ++++++++++++++ Expense sheet for Demo ++++++++++++++-->
|
||||
<record id="customer_meeting_sheet" model="hr.expense.sheet">
|
||||
<field name="name">Customer meeting</field>
|
||||
<field name="employee_id" ref="hr.employee_qdp"/>
|
||||
<field name="state">submit</field>
|
||||
</record>
|
||||
|
||||
<record id="travel_demo_by_car_expense" model="hr.expense">
|
||||
<field name="name">Travel by Car</field>
|
||||
<field name="employee_id" ref="hr.employee_qdp"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_our_super_product'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_mileage"/>
|
||||
<field eval="120.85" name="total_amount"/>
|
||||
<field name="product_uom_id" ref="uom.product_uom_km"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-01-15'"/>
|
||||
<field eval="152.0" name="quantity"/>
|
||||
<field name="sheet_id" ref="customer_meeting_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="lunch_demo_customer_bill_expense" model="hr.expense">
|
||||
<field name="name">Lunch with Customer</field>
|
||||
<field name="employee_id" ref="hr.employee_qdp"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-01-15'"/>
|
||||
<field eval="152.8" name="total_amount"/>
|
||||
<field name="sheet_id" ref="customer_meeting_sheet"/>
|
||||
</record>
|
||||
|
||||
<!-- ++++++++++++++ Expense sheet for Keith Byrd ++++++++++++++-->
|
||||
<record id="team_building_sheet" model="hr.expense.sheet">
|
||||
<field name="name">Team Building</field>
|
||||
<field name="employee_id" ref="hr.employee_fme"/>
|
||||
<field name="state">submit</field>
|
||||
</record>
|
||||
|
||||
<record id="pizzas_bill_expense" model="hr.expense">
|
||||
<field name="name">Pizzas</field>
|
||||
<field name="employee_id" ref="hr.employee_fme"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_meal"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-05'"/>
|
||||
<field eval="154" name="total_amount"/>
|
||||
<field eval="12.0" name="quantity"/>
|
||||
<field name="sheet_id" ref="team_building_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="drinks_bill_expense" model="hr.expense">
|
||||
<field name="name">Drinks</field>
|
||||
<field name="employee_id" ref="hr.employee_fme"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="expense_product_meal"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-05'"/>
|
||||
<field eval="42.5" name="total_amount"/>
|
||||
<field eval="17.0" name="quantity"/>
|
||||
<field name="sheet_id" ref="team_building_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="paintball_bill_expense" model="hr.expense">
|
||||
<field name="name">Paintball</field>
|
||||
<field name="employee_id" ref="hr.employee_fme"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field name="date" eval="time.strftime('%Y-%m')+'-05'"/>
|
||||
<field eval="25" name="total_amount"/>
|
||||
<field name="sheet_id" ref="team_building_sheet"/>
|
||||
</record>
|
||||
|
||||
<!-- ++++++++++++++ Expense sheet for Ronnie Hart ++++++++++++++-->
|
||||
<record id="office_furniture_sheet" model="hr.expense.sheet">
|
||||
<field name="name">Office furniture</field>
|
||||
<field name="employee_id" ref="hr.employee_al"/>
|
||||
<field name="state">submit</field>
|
||||
</record>
|
||||
|
||||
<record id="chair_bill_expense" model="hr.expense">
|
||||
<field name="name">Chairs</field>
|
||||
<field name="employee_id" ref="hr.employee_al"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-06-02'"/>
|
||||
<field eval="55.75" name="total_amount"/>
|
||||
<field name="sheet_id" ref="office_furniture_sheet"/>
|
||||
</record>
|
||||
|
||||
<record id="lamp_bill_expense" model="hr.expense">
|
||||
<field name="name">Lamp</field>
|
||||
<field name="employee_id" ref="hr.employee_al"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-06-02'"/>
|
||||
<field eval="28.99" name="total_amount"/>
|
||||
<field name="sheet_id" ref="office_furniture_sheet"/>
|
||||
</record>
|
||||
|
||||
<!-- ++++++++++++++ Expense for Randall Lewis ++++++++++++++-->
|
||||
<record id="afterwork_bill_expense" model="hr.expense">
|
||||
<field name="name">Car tyres</field>
|
||||
<field name="employee_id" ref="hr.employee_stw"/>
|
||||
<field name="analytic_distribution" eval="{ref('analytic.analytic_nebula'): 100}"/>
|
||||
<field name="product_id" ref="product_product_no_cost"/>
|
||||
<field name="date" eval="time.strftime('%Y')+'-03-15'"/>
|
||||
<field eval="450.58" name="total_amount"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="seq_hr_expense_invoice" model="ir.sequence">
|
||||
<field name="name">Expense invoice</field>
|
||||
<field name="code">hr.expense.invoice</field>
|
||||
<field name="prefix">EXP/</field>
|
||||
<field name="padding">3</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="mail_act_expense_approval" model="mail.activity.type">
|
||||
<field name="name">Expense Approval</field>
|
||||
<field name="icon">fa-dollar</field>
|
||||
<field name="res_model">hr.expense.sheet</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- default alias for expenses -->
|
||||
<record id="mail_alias_expense" model="mail.alias">
|
||||
<field name="alias_name">expense</field>
|
||||
<field name="alias_model_id" ref="model_hr_expense"/>
|
||||
<field name="alias_user_id" ref="base.user_admin"/>
|
||||
<field name="alias_contact">employees</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Expense-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_expense_approved" model="mail.message.subtype">
|
||||
<field name="name">Approved</field>
|
||||
<field name="res_model">hr.expense.sheet</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="description">Expense report approved</field>
|
||||
</record>
|
||||
<record id="mt_expense_refused" model="mail.message.subtype">
|
||||
<field name="name">Refused</field>
|
||||
<field name="res_model">hr.expense.sheet</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="description">Expense report refused</field>
|
||||
</record>
|
||||
<record id="mt_expense_paid" model="mail.message.subtype">
|
||||
<field name="name">Paid</field>
|
||||
<field name="res_model">hr.expense.sheet</field>
|
||||
<field name="description">Expense report paid</field>
|
||||
<field name="default" eval="True"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<template id="hr_expense_template_refuse_reason">
|
||||
<p>Your Expense <t t-if="is_sheet">Report </t><t t-esc="name"/> has been refused</p>
|
||||
<ul class="o_timeline_tracking_value_list">
|
||||
<li>Reason : <t t-esc="reason"/></li>
|
||||
</ul>
|
||||
</template>
|
||||
|
||||
<template id="hr_expense_template_register">
|
||||
<p>Dear <t t-esc="expense.employee_id.name"/>,</p>
|
||||
<p>
|
||||
Your expense has been successfully registered.
|
||||
<t t-if="expense.employee_id.user_id">
|
||||
You can now submit it to the manager from the following link.
|
||||
</t>
|
||||
</p>
|
||||
<p t-if="expense.product_id">
|
||||
Category: <t t-esc="expense.product_id.name"/>
|
||||
</p>
|
||||
<div t-else="">
|
||||
<p>Category: not found</p>
|
||||
<p>The first word of the email subject did not correspond to any category code. You'll have to set the category manually on the expense.</p>
|
||||
</div>
|
||||
<p>
|
||||
Price: <t t-esc="expense.unit_amount"/><t t-esc="expense.currency_id.symbol"/>
|
||||
</p>
|
||||
<p t-if="expense.employee_id.user_id">
|
||||
<br/>
|
||||
<a t-att-href="'/web#id=%s&model=hr.expense&view_type=form' % (expense.id)" style="background-color: #9E588B; margin-top: 10px; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;">View Expense</a>
|
||||
</p>
|
||||
</template>
|
||||
|
||||
<template id="hr_expense_template_register_no_user">
|
||||
<div style="background:#F0F0F0;color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
|
||||
<table style="width:600px;margin:5px auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="/"><img src="/web/binary/company_logo" style="vertical-align:baseline;max-width:100px;" /></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:15px 20px 10px 20px;">
|
||||
<t t-call="hr_expense.hr_expense_template_register"/>
|
||||
<p style="color:#9E588B;">Powered by <a target="_blank" href="https://www.odoo.com">Odoo</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
</data>
|
||||
</odoo>
|
||||
Loading…
Add table
Add a link
Reference in a new issue