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,64 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_date_range_type_hr_tree" model="ir.ui.view">
<field name="name">date.range.type.hr.tree</field>
<field name="model">date.range.type</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="allow_overlap" />
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
<field name="hr_fiscal_year" />
<field name="hr_period" />
<field name="active" />
</tree>
</field>
</record>
<record id="view_date_range_type_hr_form_view" model="ir.ui.view">
<field name="name">date.range.type.hr.form</field>
<field name="model">date.range.type</field>
<field name="arch" type="xml">
<form string="Daterange Type">
<group col="4">
<field name="name" />
<field name="allow_overlap" />
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
<field name="hr_fiscal_year" />
<field name="hr_period" />
<field name="active" />
</group>
</form>
</field>
</record>
<record id="date_range_type_hr_action" model="ir.actions.act_window">
<field name="name">Period Types</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">date.range.type</field>
<field name="view_mode">tree,form</field>
<field
name="view_ids"
eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_date_range_type_hr_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('view_date_range_type_hr_form_view')})]"
/>
<field
name="domain"
>['|', ('hr_period', '=', True), ('hr_fiscal_year', '=', True)]</field>
<field name="context">{}</field>
</record>
<menuitem
action="date_range_type_hr_action"
id="menu_date_range_type_action"
parent="hr_payroll_period.hr_period_configure"
sequence="23"
/>
</odoo>

View file

@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Form -->
<record id="view_hr_fiscalyear_form" model="ir.ui.view">
<field name="name">hr.fiscalyear.form</field>
<field name="model">hr.fiscalyear</field>
<field name="arch" type="xml">
<form string="Fiscal Year">
<header>
<button
name="create_periods"
string="Create Periods"
type="object"
class="btn-primary"
states="draft"
/>
<button
name="button_set_to_draft"
string="Set To Draft"
type="object"
states="open"
/>
<button
name="button_confirm"
string="Confirm"
type="object"
class="btn-primary"
states="draft"
/>
<field name="state" widget="statusbar" nolabel="1" />
</header>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" placeholder="Fiscal year..." />
</h1>
</div>
<group>
<group>
<field name="schedule_pay" />
<label for="date_start" string="Period" />
<div>
<field
name="date_start"
widget="daterange"
class="oe_inline"
options="{'related_end_date': 'date_end'}"
/>
-
<field
name="date_end"
widget="daterange"
class="oe_inline"
options="{'related_start_date': 'date_start'}"
/>
</div>
</group>
<group>
<field
name="company_id"
groups="base.group_multi_company"
/>
<field name="type_id" domain="[('hr_fiscal_year','=',True)]" />
</group>
<group>
<field
name="payment_day"
attrs="{
'invisible': [('schedule_pay', 'in', ['weekly', 'bi-weekly'])],
'required': [('schedule_pay', 'not in', ['weekly', 'bi-weekly'])],
}"
/>
<newline />
<field
name="payment_weekday"
attrs="{
'invisible': [('schedule_pay', 'not in', ['weekly', 'bi-weekly'])],
'required': [('schedule_pay', 'in', ['weekly', 'bi-weekly'])],
}"
/>
<field
name="payment_week"
attrs="{
'invisible': [('schedule_pay', 'not in', ['weekly', 'bi-weekly'])],
'required': [('schedule_pay', 'in', ['weekly', 'bi-weekly'])],
}"
/>
</group>
</group>
<field colspan="4" name="period_ids" nolabel="1" />
</sheet>
</form>
</field>
</record>
<!-- Tree -->
<record id="view_hr_fiscalyear_tree" model="ir.ui.view">
<field name="name">hr.fiscalyear.tree</field>
<field name="model">hr.fiscalyear</field>
<field name="arch" type="xml">
<tree
decoration-info="state == 'draft'"
decoration-muted="state == 'done'"
name="Fiscalyear"
>
<field name="name" />
<field name="company_id" groups="base.group_multi_company" />
<field name="state" />
</tree>
</field>
</record>
<!-- Search -->
<record id="view_hr_fiscalyear_search" model="ir.ui.view">
<field name="name">hr.fiscalyear.search</field>
<field name="model">hr.fiscalyear</field>
<field name="arch" type="xml">
<search string="Search Fiscalyear">
<field
name="name"
filter_domain="[('name', 'ilike', self)]"
string="Fiscal Year"
/>
<field name="schedule_pay" />
<field name="payment_weekday" />
<field name="payment_day" />
<filter
name="open"
string="Open"
domain="[('state', '=', 'open')]"
icon="terp-camera_test"
/>
<filter
name="closed"
string="Closed"
domain="[('state', '=', 'done')]"
icon="terp-dialog-close"
/>
<field name="state" />
<group expand="0" string="Group By...">
<filter
name="Status"
context="{'group_by': 'state'}"
icon="terp-stock_effects-object-colorize"
/>
</group>
</search>
</field>
</record>
<!-- Action -->
<record id="action_hr_fiscalyear" model="ir.actions.act_window">
<field name="name">Payroll Fiscal Years</field>
<field name="res_model">hr.fiscalyear</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('type_id.hr_fiscal_year','=',True)]</field>
</record>
<!-- Menu -->
<menuitem
id="menu_action_hr_fiscalyear"
action="action_hr_fiscalyear"
parent="hr_payroll_period.hr_period_configure"
sequence="25"
/>
</odoo>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_hr_payslip_by_employees" model="ir.ui.view">
<field name="name">hr_payroll_payslip_employees</field>
<field name="model">hr.payslip.employees</field>
<field name="inherit_id" ref="payroll.view_hr_payslip_by_employees" />
<field name="arch" type="xml">
<field name="employee_ids" position="before">
<field name="company_id" groups="base.group_multi_company" />
<field name="schedule_pay" />
<field
name="employee_ids"
nolabel="1"
groups="!base.group_multi_company"
colspan="2"
/>
</field>
<field name="employee_ids" position="attributes">
<attribute name="colspan">2</attribute>
<attribute name="domain">[
('company_id', '=', company_id)
]</attribute>
<attribute name="groups">base.group_multi_company</attribute>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Form -->
<record id="hr_payslip_run_form" model="ir.ui.view">
<field name="name">hr.payslip.run.period.form</field>
<field name="model">hr.payslip.run</field>
<field name="inherit_id" ref="payroll.hr_payslip_run_view_form" />
<field name="priority">100</field>
<field name="arch" type="xml">
<field name="struct_id" position="before">
<field name="company_id" invisible="1" />
</field>
<label for="date_start" position="before">
<field
name="hr_period_id"
domain="[
('state', '=', 'open'),
]"
groups="!base.group_multi_company"
/>
<field
name="hr_period_id"
domain="[
('state', '=', 'open'),
('company_id', '=', company_id)
]"
groups="base.group_multi_company"
/>
<field name="schedule_pay" />
<field name="date_payment" required="1" />
</label>
<button
name="%(payroll.action_hr_payslip_by_employees)d"
position="replace"
>
<button
name="get_payslip_employees_wizard"
type="object"
states="draft"
string="Generate Payslips"
class="btn-primary"
/>
</button>
</field>
</record>
<!-- Search -->
<record id="hr_payslip_run_filter" model="ir.ui.view">
<field name="name">hr.payslip.run.period.search</field>
<field name="model">hr.payslip.run</field>
<field name="inherit_id" ref="payroll.hr_payslip_run_view_search" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="company_id" />
<field name="date_payment" />
<field name="schedule_pay" />
</field>
<search position="inside">
<group string="Group By...">
<filter
string="Company"
name="company_id"
groups="base.group_multi_company"
context="{'group_by':'company_id'}"
/>
<filter
string="Scheduled Pay"
name="schedule_pay"
context="{'group_by':'schedule_pay'}"
/>
<filter
string="Payment Date"
name="date_payment"
context="{'group_by':'date_payment'}"
/>
</group>
</search>
</field>
</record>
<!-- Tree -->
<record id="hr_payslip_run_tree" model="ir.ui.view">
<field name="name">hr.payslip.run.period.tree</field>
<field name="model">hr.payslip.run</field>
<field name="inherit_id" ref="payroll.hr_payslip_run_view_tree" />
<field name="arch" type="xml">
<field name="date_end" position="after">
<field name="date_payment" />
<field name="schedule_pay" />
<field name="company_id" groups="base.group_multi_company" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Form -->
<record id="view_hr_payslip_form" model="ir.ui.view">
<field name="name">hr.payslip.period.form</field>
<field name="model">hr.payslip</field>
<field name="inherit_id" ref="payroll.hr_payslip_view_form" />
<field name="arch" type="xml">
<field name="date_from" position="before">
<field
name="hr_period_id"
domain="[
('state', '=', 'open'),
]"
groups="!base.group_multi_company"
/>
<field
name="hr_period_id"
domain="[
('state', '=', 'open'),
('company_id', '=', company_id)
]"
groups="base.group_multi_company"
/>
</field>
<field name="name" position="after">
<field name="date_payment" required="1" />
</field>
</field>
</record>
<!-- Tree -->
<record id="view_hr_payslip_tree" model="ir.ui.view">
<field name="name">hr.payslip.period.tree</field>
<field name="model">hr.payslip</field>
<field name="inherit_id" ref="payroll.hr_payslip_view_tree" />
<field name="arch" type="xml">
<field name="date_to" position="after">
<field name="date_payment" />
</field>
</field>
</record>
<!-- Search -->
<record id="view_hr_payslip_filter" model="ir.ui.view">
<field name="name">hr.payslip.period.select</field>
<field name="model">hr.payslip</field>
<field name="inherit_id" ref="payroll.hr_payslip_view_search" />
<field name="arch" type="xml">
<field name="date_from" position="after">
<field name="date_payment" />
</field>
<filter name="employee_id" position="after">
<filter
string="Payment Date"
name="date_payment"
context="{'group_by':'date_payment'}"
/>
</filter>
</field>
</record>
</odoo>

View file

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Form -->
<record id="view_hr_period_form" model="ir.ui.view">
<field name="name">hr.period.form</field>
<field name="model">hr.period</field>
<field name="arch" type="xml">
<form string="Payroll Periods">
<header>
<button
name="button_open"
string="Open Period"
type="object"
states="draft"
/>
<button
name="button_re_open"
string="Re-Open Period"
type="object"
states="done"
/>
<button
name="button_close"
string="Close Period"
type="object"
states="open"
/>
<field
name="state"
widget="statusbar"
statusbar_visible="draft,open,done"
/>
</header>
<sheet>
<group>
<group>
<field name="name" />
<field name="fiscalyear_id" widget="selection" />
<label for="date_start" string="Duration" />
<div>
<field
name="date_start"
nolabel="1"
class="oe_inline"
/> -
<field name="date_end" nolabel="1" class="oe_inline" />
</div>
<field name="date_payment" />
</group>
<group>
<field name="schedule_pay" />
<field name="type_id" domain="[('hr_period','=',True)]" />
<field name="number" />
<field
name="company_id"
widget="selection"
groups="base.group_multi_company"
/>
</group>
</group>
<separator string="Payslips" />
<newline />
<field name="payslip_ids" nolabel="1" />
</sheet>
</form>
</field>
</record>
<!-- Tree -->
<record id="view_hr_period_tree" model="ir.ui.view">
<field name="name">hr.period.tree</field>
<field name="model">hr.period</field>
<field name="arch" type="xml">
<tree
decoration-info="state == 'open'"
decoration-muted="state == 'done'"
name="Payroll Period"
>
<field name="name" />
<field name="date_start" />
<field name="date_end" />
<field name="date_payment" />
<field name="company_id" groups="base.group_multi_company" />
<field name="state" />
</tree>
</field>
</record>
<!-- Search -->
<record id="view_hr_period_search" model="ir.ui.view">
<field name="name">hr.period.search</field>
<field name="model">hr.period</field>
<field name="arch" type="xml">
<search string="Search Period">
<field
name="name"
filter_domain="['|', ('name', 'ilike', self), ('number', 'ilike', self)]"
string="Period"
/>
<field name="schedule_pay" />
<field name="fiscalyear_id" />
<field name="date_payment" />
<field name="state" />
<group expand="0" string="Group By...">
<filter
string="To Close"
name="draft"
domain="[('state', '=', 'draft')]"
icon="terp-dialog-close"
/>
</group>
</search>
</field>
</record>
<!-- Action -->
<record id="action_hr_period" model="ir.actions.act_window">
<field name="name">Payroll Periods</field>
<field name="res_model">hr.period</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('type_id.hr_period', '=', True)]</field>
<field
name="context"
>{'search_default_state': 'open', 'search_default_schedule_pay': 'monthly'}</field>
</record>
<!-- Menu -->
<menuitem
id="menu_action_hr_period"
action="action_hr_period"
parent="hr_payroll_period.hr_period_configure"
sequence="26"
/>
</odoo>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<menuitem
id="hr_period_configure"
parent="payroll.payroll_menu_configuration"
name="Fiscal Years and Periods"
groups="payroll.group_payroll_manager"
sequence="50"
/>
</odoo>