19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:00 +01:00
parent a1137a1456
commit e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions

View file

@ -9,7 +9,7 @@
<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" />
<img src="https://download.odoocdn.com/digests/hr_expense/static/src/img/milk-expense.png" width="540" class="illustration_border" />
</div>
</field>
</record>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="ir_cron_send_submitted_expenses_mail" model="ir.cron">
<field name="name">HR Expense: Send Submitted Expenses Mail</field>
<field name="model_id" ref="model_hr_expense"/>
<field name="state">code</field>
<field name="code">model._cron_send_submitted_expenses_mail()</field>
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
</record>
</data>
</odoo>

View file

@ -8,11 +8,11 @@
<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="purchase_ok" eval="True"/>
<field name="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=False)"/>
<field name="image_1920" type="base64" file="hr_expense/static/img/food.svg"/>
</record>
<record id="expense_product_travel_accommodation" model="product.product">
@ -21,23 +21,27 @@
<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 &amp; ACC</field>
<field name="can_be_expensed" eval="True"/>
<field name="purchase_ok" eval="True"/>
<field name="sale_ok" eval="False"/>
<field name="purchase_ok" eval="False"/>
<field name="purchase_ok" eval="True"/>
<field name="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=False)"/>
<field name="image_1920" type="base64" file="hr_expense/static/img/transport.svg"/>
</record>
<record id="uom.product_uom_km" model="uom.uom">
<field name="active" eval="True"/>
</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="purchase_ok" eval="True"/>
<field name="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=False)"/>
<field name="image_1920" type="base64" file="hr_expense/static/img/mileage.svg"/>
</record>
<record id="expense_product_gift" model="product.product">
@ -45,12 +49,12 @@
<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="uom_id" ref="uom.product_uom_unit"/>
<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="purchase_ok" eval="True"/>
<field name="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=False)"/>
<field name="image_1920" type="base64" file="hr_expense/static/img/gift.svg"/>
</record>
<record id="expense_product_communication" model="product.product">
@ -58,21 +62,22 @@
<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="uom_id" ref="uom.product_uom_unit"/>
<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="purchase_ok" eval="True"/>
<field name="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=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="name">Expenses</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="categ_id" eval="ref('product.product_category_expenses', raise_if_not_found=False)"/>
<field name="can_be_expensed" eval="True"/>
<field name="purchase_ok" eval="True"/>
<field name="image_1920" type="base64" file="hr_expense/static/img/other.svg"/>
</record>
</data>

View file

@ -1,9 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="base.user_demo" model="res.users">
<field name="group_ids" eval="[
(3, ref('hr_expense.group_hr_expense_team_approver')),
(3, ref('hr_expense.group_hr_expense_user')),
(3, ref('hr_expense.group_hr_expense_manager')),
]"/>
</record>
<record id="base.default_user_group" model="res.groups">
<field name="implied_ids" eval="[(4, ref('hr_expense.group_hr_expense_manager'))]"/>
</record>
<record id="hr.employee_mit" model="hr.employee">
<field name="address_home_id" ref="base.res_partner_address_3"/>
<field name="private_email">douglas.fletcher51@example.com</field>
<field name="private_phone">(132)-553-7242</field>
</record>
<record id="hr_expense_account_journal" model="account.journal">
@ -15,32 +27,30 @@
<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"/>
<field name="private_street">Chaussée de Namur, 40</field>
<field name="private_zip">1367</field>
<field name="private_city">Grand-Rosière-Hottomont</field>
<field name="private_country_id" ref="base.be"/>
</record>
<record id="hr.employee_al" model="hr.employee">
<field name="address_home_id" ref="res_partner_address_fp"/>
<field name="private_street">Chaussée de Namur, 40</field>
<field name="private_zip">1367</field>
<field name="private_city">Grand-Rosière-Hottomont</field>
<field name="private_country_id" ref="base.be"/>
</record>
<!-- ++++++++++++++ Expense sheet for Admin ++++++++++++++-->
<!-- ++++++++++++++ Expense 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 eval="289.0" name="total_amount_currency"/>
<field name="date" eval="time.strftime('%Y')+'-04-03'"/>
<field name="payment_mode">company_account</field>
<field name="approval_state">submitted</field>
</record>
<record id="laptop_expense" model="hr.expense">
@ -48,7 +58,7 @@
<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 eval="889.0" name="total_amount_currency"/>
<field name="date" eval="time.strftime('%Y')+'-04-03'"/>
</record>
@ -56,23 +66,16 @@
<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"/>
<field eval="108.84" name="quantity"/>
<field name="approval_state">submitted</field>
</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>
<field eval="20" name="total_amount_currency"/>
</record>
<record id="travel_by_air_expense" model="hr.expense">
@ -80,11 +83,11 @@
<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 eval="700.0" name="total_amount_currency"/>
<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"/>
<field name="approval_state">submitted</field>
<field name="payment_mode">company_account</field>
</record>
<record id="hotel_bill_expense" model="hr.expense">
@ -92,11 +95,10 @@
<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 eval="2000.0" name="total_amount_currency"/>
<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"/>
<field name="approval_state">submitted</field>
</record>
<record id="lunch_customer_bill_expense" model="hr.expense">
@ -104,10 +106,8 @@
<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 eval="152.8" name="total_amount_currency"/>
<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">
@ -116,28 +116,18 @@
<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>
<field eval="56.8" name="total_amount_currency"/>
</record>
<!-- ++++++++++++++ Expense for Demo ++++++++++++++-->
<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"/>
<field eval="120.85" name="quantity"/>
</record>
<record id="lunch_demo_customer_bill_expense" model="hr.expense">
@ -146,26 +136,18 @@
<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>
<field eval="152.8" name="total_amount_currency"/>
<field name="approval_state">approved</field>
</record>
<!-- ++++++++++++++ Expense for Keith Byrd ++++++++++++++-->
<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"/>
<field eval="154" name="total_amount_currency"/>
</record>
<record id="drinks_bill_expense" model="hr.expense">
@ -174,9 +156,7 @@
<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"/>
<field eval="42.5" name="total_amount_currency"/>
</record>
<record id="paintball_bill_expense" model="hr.expense">
@ -185,16 +165,11 @@
<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"/>
<field eval="25" name="total_amount_currency"/>
<field name="approval_state">approved</field>
</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>
@ -202,8 +177,7 @@
<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"/>
<field eval="55.75" name="total_amount_currency"/>
</record>
<record id="lamp_bill_expense" model="hr.expense">
@ -212,8 +186,8 @@
<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"/>
<field eval="28.99" name="total_amount_currency"/>
<field name="approval_state">refused</field>
</record>
<!-- ++++++++++++++ Expense for Randall Lewis ++++++++++++++-->
@ -223,8 +197,8 @@
<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"/>
<field eval="450.58" name="total_amount_currency"/>
<field name="payment_mode">company_account</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="hr_expense_tour" model="web_tour.tour">
<field name="name">hr_expense_tour</field>
<field name="rainbow_man_message">There you go - expense management in a nutshell!</field>
</record>
</odoo>

View file

@ -3,8 +3,9 @@
<data noupdate="1">
<record id="mail_act_expense_approval" model="mail.activity.type">
<field name="name">Expense Approval</field>
<field name="summary">Expense Approval</field>
<field name="icon">fa-dollar</field>
<field name="res_model">hr.expense.sheet</field>
<field name="res_model">hr.expense</field>
</record>
</data>
</odoo>

View file

@ -5,7 +5,6 @@
<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>

View file

@ -4,21 +4,44 @@
<!-- 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>
<field name="res_model">hr.expense</field>
<field name="default" eval="False"/>
<field name="description">Expense 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>
<field name="res_model">hr.expense</field>
<field name="default" eval="False"/>
<field name="description">Expense 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"/>
<field name="res_model">hr.expense</field>
<field name="description">Expense paid</field>
<field name="default" eval="False"/>
</record>
<record id="mt_expense_reset" model="mail.message.subtype">
<field name="name">Draft</field>
<field name="res_model">hr.expense</field>
<field name="default" eval="False"/>
<field name="description">Expense reset to Draft</field>
</record>
<record id="mt_expense_entry_delete" model="mail.message.subtype">
<field name="name">Journal Entry Deleted</field>
<field name="res_model">hr.expense</field>
<field name="default" eval="False"/>
<field name="description">Journal entry deleted</field>
</record>
<record id="mt_expense_entry_draft" model="mail.message.subtype">
<field name="name">Journal Entry Reset to Draft</field>
<field name="res_model">hr.expense</field>
<field name="default" eval="False"/>
<field name="description">Journal entry reset to draft</field>
</record>
</data>
</odoo>

View file

@ -2,14 +2,14 @@
<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>
<p>Your Expense <t t-out="name"/> has been refused</p>
<ul class="o_timeline_tracking_value_list">
<li>Reason : <t t-esc="reason"/></li>
<li>Reason: <t t-out="reason"/></li>
</ul>
</template>
<template id="hr_expense_template_register">
<p>Dear <t t-esc="expense.employee_id.name"/>,</p>
<p>Dear <t t-out="expense.employee_id.name"/>,</p>
<p>
Your expense has been successfully registered.
<t t-if="expense.employee_id.user_id">
@ -17,27 +17,61 @@
</t>
</p>
<p t-if="expense.product_id">
Category: <t t-esc="expense.product_id.name"/>
Category: <t t-out="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"/>
Price: <t t-out="expense.price_unit"/><t t-out="expense.currency_id.symbol"/>
</p>
<p t-if="expense.employee_id.user_id">
<br/>
<a t-att-href="'/web#id=%s&amp;model=hr.expense&amp;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>
<a t-att-href="'/odoo/hr.expense/%s' % (expense.id)" class="o_expense_button_mail">View Expense</a>
</p>
</template>
<template id="hr_expense_template_submitted_expenses">
<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;background:white;border:1px solid #e1e1e1;">
<tbody><tr>
<td style="padding:15px 20px 10px 20px;">
<p style="font-size:20px;font-weight:bold;color:#515166;">Expenses approval</p>
<hr style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/>
<p>Dear <t t-out="manager_name"/>,</p>
<p>New expenses are waiting for your approval. You can Review them by following this link.</p>
<br/>
<a t-att-href="url" style="padding: 8px 12px; font-size: 12px; color: #FFFFFF; text-decoration: none !important; font-weight: 400; background-color: #875A7B; border: 0px solid #875A7B; border-radius:3px">View expenses</a>
<br/><br/>
<hr style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/>
<table style="width: 100%;">
<tbody><tr>
<td align="center" style="min-width: 590px; padding: 0 8px 0 8px; font-size:11px;">
<b t-out="company.name"/><br/>
<div style="color: #999999;">
<t t-out="company.phone"/>
<t t-if="company.email"> | <a t-att-href="'mailto:%s' % company.email" style="text-decoration:none; color: #999999;"><t t-out="company.email"/></a></t>
<t t-if="company.website"> | <a t-att-href="company.website" style="text-decoration:none; color: #999999;"><t t-out="company.website"/></a></t>
</div>
</td>
</tr></tbody>
</table>
</td>
</tr></tbody>
</table>
<p style="text-align: center;font-size: 13px;">
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=expense" style="color: #9E588B;">Odoo</a>.
</p>
</div>
</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;">
<table style="width:600px;margin:5px auto;" t-if="not expense.employee_id.company_id.uses_default_logo">
<tbody>
<tr>
<td><a href="/"><img src="/web/binary/company_logo" style="vertical-align:baseline;max-width:100px;" /></a></td>
<td><a href="/"><img t-attf-src="/logo.png?company={{ expense.employee_id.company_id.id }}" style="vertical-align:baseline;max-width:100px;max-height:50px;" /></a></td>
</tr>
</tbody>
</table>