Initial commit: OCA Payroll packages (5 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:05 +02:00
commit d19274f581
407 changed files with 214057 additions and 0 deletions

View file

@ -0,0 +1,48 @@
# Payroll
Odoo addon: payroll
## Installation
```bash
pip install odoo-bringout-oca-payroll-payroll
```
## Dependencies
This addon depends on:
- hr_contract
- hr_holidays
- mail
## Manifest Information
- **Name**: Payroll
- **Version**: 16.0.1.6.0
- **Category**: Payroll
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/payroll](https://github.com/OCA/payroll) branch 16.0, addon `payroll`.
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Payroll Module - payroll
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for payroll. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,7 @@
# Dependencies
This addon depends on:
- [hr_contract](../../odoo-bringout-oca-ocb-hr_contract)
- [hr_holidays](../../odoo-bringout-oca-ocb-hr_holidays)
- [mail](../../odoo-bringout-oca-ocb-mail)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon payroll or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-payroll-payroll"
# or
uv pip install odoo-bringout-oca-payroll-payroll"
```

View file

@ -0,0 +1,26 @@
# Models
Detected core models and extensions in payroll.
```mermaid
classDiagram
class hr_contribution_register
class hr_payroll_structure
class hr_payslip
class hr_payslip_input
class hr_payslip_line
class hr_payslip_run
class hr_payslip_worked_days
class hr_rule_input
class hr_salary_rule
class hr_salary_rule_category
class hr_contract
class hr_employee
class hr_leave_type
class hr_salary_rule
class res_config_settings
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: payroll. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon payroll
- License: LGPL-3

View file

@ -0,0 +1,32 @@
# Reports
Report definitions and templates in payroll.
```mermaid
classDiagram
class PayslipDetailsReport
AbstractModel <|-- PayslipDetailsReport
class ContributionRegisterReport
AbstractModel <|-- ContributionRegisterReport
```
## Available Reports
### PDF/Document Reports
- **Payslip Lines** (PDF/Print)
- **Payslip** (PDF/Print)
- **PaySlip Details** (PDF/Print)
## Report Files
- **__init__.py** (Python logic)
- **report_contribution_register.py** (Python logic)
- **report_payslip_details.py** (Python logic)
- **report.xml** (XML template/definition)
## Notes
- Named reports above are accessible through Odoo's reporting menu
- Python files define report logic and data processing
- XML files contain report templates, definitions, and formatting
- Reports are integrated with Odoo's printing and email systems

View file

@ -0,0 +1,42 @@
# Security
Access control and security definitions in payroll.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../payroll/security/ir.model.access.csv)**
- 15 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[hr_payroll_security.xml](../payroll/security/hr_payroll_security.xml)**
- 2 security groups defined
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[hr_payroll_security.xml](../payroll/security/hr_payroll_security.xml)**
- Security groups, categories, and XML-based rules
- **[ir.model.access.csv](../payroll/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon payroll
```

View file

@ -0,0 +1,10 @@
# Wizards
Transient models exposed as UI wizards in payroll.
```mermaid
classDiagram
class HrPayslipChangeState
class HrPayslipEmployees
class PayslipLinesContributionRegister
```

View file

@ -0,0 +1,97 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
=======
Payroll
=======
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5f032cc222a0a92ee450fbaf9e0fbdb36faff21fa042e621e00912c16c8696ca
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpayroll-lightgray.png?logo=github
:target: https://github.com/OCA/payroll/tree/16.0/payroll
:alt: OCA/payroll
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/payroll-16-0/payroll-16-0-payroll
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/payroll&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Manage your employee payroll records.
This module is a backport from Odoo SA and as such, it is not included in the OCA CLA. That means we do not have a copy of the copyright on it like all other OCA modules.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/payroll/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/payroll/issues/new?body=module:%20payroll%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Odoo SA
Contributors
~~~~~~~~~~~~
* Odoo SA <info@odoo.com>
* David James <david@djdc.net.au>
* Hilar AK <hilarak@gmail.com>
* Nimarosa (Nicolas Rodriguez) <nicolarsande@gmail.com>
* Henrik Norlin
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-norlinhenrik| image:: https://github.com/norlinhenrik.png?size=40px
:target: https://github.com/norlinhenrik
:alt: norlinhenrik
.. |maintainer-nimarosa| image:: https://github.com/nimarosa.png?size=40px
:target: https://github.com/nimarosa
:alt: nimarosa
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-norlinhenrik| |maintainer-nimarosa|
This module is part of the `OCA/payroll <https://github.com/OCA/payroll/tree/16.0/payroll>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,5 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import report
from . import wizard

View file

@ -0,0 +1,47 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
"name": "Payroll",
"version": "16.0.1.6.0",
"category": "Payroll",
"website": "https://github.com/OCA/payroll",
"sequence": 38,
"summary": "Manage your employee payroll records",
"license": "LGPL-3",
"author": "Odoo SA, Odoo Community Association (OCA)",
"depends": [
"hr_contract",
"hr_holidays",
"mail",
],
"data": [
"security/hr_payroll_security.xml",
"security/ir.model.access.csv",
"data/hr_payroll_sequence.xml",
"data/hr_payroll_data.xml",
"wizard/hr_payroll_contribution_register_report_views.xml",
"wizard/hr_payroll_payslips_by_employees_views.xml",
"views/menus.xml",
"views/hr_contract_views.xml",
"views/hr_payroll_structure_views.xml",
"views/hr_salary_rule_category_views.xml",
"views/hr_contribution_register_views.xml",
"views/hr_salary_rule_views.xml",
"views/hr_payslip_line_views.xml",
"views/hr_payslip_views.xml",
"views/hr_payslip_input_views.xml",
"views/hr_payslip_run_views.xml",
"views/hr_employee_views.xml",
"views/report_contributionregister.xml",
"views/report_payslip.xml",
"views/report_payslipdetails.xml",
"report/report.xml",
"views/res_config_settings_views.xml",
"wizard/hr_payroll_send_email.xml",
"wizard/hr_payslip_change_state_view.xml",
"views/hr_leave_type.xml",
],
"demo": ["demo/hr_payroll_demo.xml"],
"application": True,
"maintainers": ["norlinhenrik", "nimarosa"],
}

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Decimal Precision -->
<record forcecreate="True" id="decimal_payroll" model="decimal.precision">
<field name="name">Payroll</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_payroll_rate" model="decimal.precision">
<field name="name">Payroll Rate</field>
<field name="digits">4</field>
</record>
</odoo>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="seq_salary_slip" model="ir.sequence">
<field name="name">Salary Slip</field>
<field name="code">salary.slip</field>
<field name="prefix">SLIP/</field>
<field name="padding">3</field>
</record>
</odoo>

View file

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="contrib_register_employees" model="hr.contribution.register">
<field name="name">Employees</field>
<field name="partner_id" eval="False" />
</record>
<record id="BASIC" model="hr.salary.rule.category">
<field name="name">Basic</field>
<field name="code">BASIC</field>
</record>
<record id="ALW" model="hr.salary.rule.category">
<field name="name">Allowance</field>
<field name="code">ALW</field>
</record>
<record id="GROSS" model="hr.salary.rule.category">
<field name="name">Gross</field>
<field name="code">GROSS</field>
</record>
<record id="DED" model="hr.salary.rule.category">
<field name="name">Deduction</field>
<field name="code">DED</field>
</record>
<record id="NET" model="hr.salary.rule.category">
<field name="name">Net</field>
<field name="code">NET</field>
</record>
<record id="COMP" model="hr.salary.rule.category">
<field name="name">Company Contribution</field>
<field name="code">COMP</field>
</record>
<record id="hr_rule_basic" model="hr.salary.rule">
<field name="name">Basic Salary</field>
<field name="sequence" eval="1" />
<field name="code">BASIC</field>
<field name="category_id" ref="payroll.BASIC" />
<field name="condition_select">none</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
result = contract.wage
</field>
</record>
<record id="hr_rule_taxable" model="hr.salary.rule">
<field name="name">Gross</field>
<field name="sequence" eval="100" />
<field name="code">GROSS</field>
<field name="category_id" ref="payroll.GROSS" />
<field name="condition_select">none</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
result = categories.BASIC + categories.ALW
</field>
</record>
<record id="hr_rule_net" model="hr.salary.rule">
<field name="name">Net Salary</field>
<field name="sequence" eval="200" />
<field name="code">NET</field>
<field name="category_id" ref="payroll.NET" />
<field name="condition_select">none</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
result = categories.BASIC + categories.ALW + categories.DED
</field>
<field name="register_id" ref="contrib_register_employees" />
</record>
<!-- Salary Structure -->
<record id="structure_base" model="hr.payroll.structure">
<field name="code">BASE</field>
<field name="name">Base for new structures</field>
<field
eval="[(6, 0, [ref('hr_rule_basic'), ref('hr_rule_taxable'),ref('hr_rule_net')])]"
name="rule_ids"
/>
<field name="company_id" ref="base.main_company" />
</record>
<!-- Contribution Register -->
<record id="hr_houserent_register" model="hr.contribution.register">
<field name="name">House Rent Allowance Register</field>
</record>
<record id="hr_provident_fund_register" model="hr.contribution.register">
<field name="name">Provident Fund Register</field>
</record>
<record id="hr_professional_tax_register" model="hr.contribution.register">
<field name="name">Professional Tax Register</field>
</record>
<record id="hr_meal_voucher_register" model="hr.contribution.register">
<field name="name">Meal Voucher Register</field>
</record>
<!-- Salary Rules -->
<record id="hr_salary_rule_houserentallowance1" model="hr.salary.rule">
<field name="amount_select">percentage</field>
<field eval="40.0" name="amount_percentage" />
<field name="amount_percentage_base">contract.wage</field>
<field name="code">HRA</field>
<field name="category_id" ref="payroll.ALW" />
<field name="register_id" ref="hr_houserent_register" />
<field name="name">House Rent Allowance</field>
<field name="sequence" eval="5" />
</record>
<record id="hr_salary_rule_convanceallowance1" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="800.0" name="amount_fix" />
<field name="code">CA</field>
<field name="category_id" ref="payroll.ALW" />
<field name="name">Conveyance Allowance</field>
<field name="sequence" eval="10" />
</record>
<record id="hr_salary_rule_professionaltax1" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="150" name="sequence" />
<field eval="-200.0" name="amount_fix" />
<field name="code">PT</field>
<field name="category_id" ref="payroll.DED" />
<field name="register_id" ref="hr_professional_tax_register" />
<field name="name">Professional Tax</field>
</record>
<record id="hr_salary_rule_providentfund1" model="hr.salary.rule">
<field name="amount_select">percentage</field>
<field eval="120" name="sequence" />
<field eval="-12.5" name="amount_percentage" />
<field name="amount_percentage_base">contract.wage</field>
<field name="code">PF</field>
<field name="category_id" ref="payroll.DED" />
<field name="register_id" ref="hr_provident_fund_register" />
<field name="name">Provident Fund</field>
</record>
<record id="hr_salary_rule_ca_demo" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="600.0" name="amount_fix" />
<field name="code">CAMD</field>
<field name="category_id" ref="payroll.ALW" />
<field name="name">Conveyance Allowance For Marc Demo</field>
<field name="sequence" eval="15" />
</record>
<record id="hr_salary_rule_meal_voucher" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="10" name="amount_fix" />
<field name="quantity">
worked_days.WORK100 and worked_days.WORK100.number_of_days
</field>
<field name="code">MA</field>
<field name="category_id" ref="payroll.ALW" />
<field name="register_id" ref="hr_meal_voucher_register" />
<field name="name">Meal Voucher</field>
<field name="sequence" eval="16" />
</record>
<record id="hr_salary_rule_sales_commission" model="hr.salary.rule">
<field name="amount_select">code</field>
<field name="code">SALE</field>
<field name="category_id" ref="payroll.ALW" />
<field name="name">Get 1% of sales</field>
<field name="sequence" eval="17" />
<field name="amount_python_compute">
result = ((inputs.SALEURO and inputs.SALEURO.amount) + (inputs.SALASIA and
inputs.SALASIA.amount)) * 0.01
</field>
</record>
<!-- Rule Inputs -->
<record id="hr_rule_input_sale_a" model="hr.rule.input">
<field name="code">SALEURO</field>
<field name="name">Sales to Europe</field>
<field name="input_id" ref="hr_salary_rule_sales_commission" />
</record>
<record id="hr_rule_input_sale_b" model="hr.rule.input">
<field name="code">SALASIA</field>
<field name="name">Sales to Asia</field>
<field name="input_id" ref="hr_salary_rule_sales_commission" />
</record>
<!-- Salary Structure -->
<record id="structure_001" model="hr.payroll.structure">
<field name="code">ME</field>
<field name="name">Marketing Executive</field>
<field
eval="[(6, 0, [ref('hr_salary_rule_houserentallowance1'),
ref('hr_salary_rule_convanceallowance1'),ref('hr_salary_rule_professionaltax1'),ref('hr_salary_rule_providentfund1')])]"
name="rule_ids"
/>
<field name="company_id" ref="base.main_company" />
<field name="parent_id" ref="structure_base" />
</record>
<record id="structure_002" model="hr.payroll.structure">
<field name="code">MEMD</field>
<field name="name">Marketing Executive for Marc Demo</field>
<field
eval="[(6, 0, [ref('hr_salary_rule_ca_demo'), ref('hr_salary_rule_meal_voucher')])]"
name="rule_ids"
/>
<field name="company_id" ref="base.main_company" />
<field name="parent_id" ref="structure_001" />
</record>
<!-- Employee -->
<record id="hr_employee_payroll" model="hr.employee">
<field name="company_id" ref="base.main_company" />
<field eval="1" name="active" />
<field name="name">Roger Scott</field>
<field name="work_phone">+3282823500</field>
<field
name="image_1920"
type="base64"
file="payroll/static/img/hr_employee_payroll-image.jpg"
/>
</record>
<!-- Employee Contract -->
<record id="hr_contract_firstcontract1" model="hr.contract">
<field name="name">Marketing Executive Contract</field>
<field name="date_start" eval="time.strftime('%Y-%m')+'-1'" />
<field name="date_end" eval="time.strftime('%Y')+'-12-31'" />
<field name="struct_id" ref="payroll.structure_001" />
<field name="employee_id" ref="hr_employee_payroll" />
<field name="notes">Default contract for marketing executives</field>
<field eval="4000.0" name="wage" />
</record>
<record id="hr_contract_marc_demo" model="hr.contract">
<field name="name">Contract For Marc Demo</field>
<field name="date_start" eval="time.strftime('%Y-%m')+'-1'" />
<field name="date_end" eval="time.strftime('%Y')+'-12-31'" />
<field name="struct_id" ref="payroll.structure_002" />
<field name="employee_id" ref="hr.employee_qdp" />
<field name="notes">This is Marc Demo's contract</field>
<field eval="5000.0" name="wage" />
</record>
</odoo>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,27 @@
<?xml version='1.0' encoding='utf-8' ?>
<odoo>
<record id="mail_template_hr_payslip" model="mail.template">
<field name="email_from">{{user.employee_id.work_email}}</field>
<field name="email_to">{{object.employee_id.address_home_id.email}}</field>
<field name="reply_to">{{user.employee_id.work_email}}</field>
<field
name="subject"
>Payslip for {{object.payslip_run_id.name}} from {{object.company_id.name}}</field>
<field name="lang">{{object.employee_id.address_home_id.lang}}</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Dear <t t-out="object.employee_id.name" />,
<br /><br />
Please find attached the payslip for <t
t-out="object.payslip_run_id.name"
/>.
<br /><br />
Do not hesitate to contact us if you have any questions.
<br /><br />
<t t-out="user.signature" />
</p>
</div>
</field>
</record>
</odoo>

View file

@ -0,0 +1,11 @@
# Copyright 2023 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openupgradelib import openupgrade
@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(
env.cr, "payroll", "migrations/16.0.1.1.0/noupdate_changes.xml"
)

View file

@ -0,0 +1,17 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import hr_contract
from . import hr_employee
from . import hr_leave_type
from . import hr_payroll_structure
from . import hr_salary_rule
from . import hr_salary_rule_category
from . import hr_rule_input
from . import hr_contribution_register
from . import base_browsable
from . import hr_payslip
from . import hr_payslip_line
from . import hr_payslip_input
from . import hr_payslip_worked_days
from . import hr_payslip_run
from . import res_config_settings

Some files were not shown because too many files have changed in this diff Show more