hr_lite 0.16.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +117 -0
- data/README.md +12 -0
- data/app/assets/javascripts/hr_lite/nav.js +21 -0
- data/app/assets/stylesheets/hr_lite/hr_lite.css +1 -1
- data/app/controllers/hr_lite/admin/benefits_controller.rb +61 -0
- data/app/controllers/hr_lite/admin/expense_categories_controller.rb +43 -0
- data/app/controllers/hr_lite/admin/leave_balances_controller.rb +4 -1
- data/app/controllers/hr_lite/admin/leave_requests_controller.rb +3 -3
- data/app/controllers/hr_lite/admin/payroll_line_items_controller.rb +47 -0
- data/app/controllers/hr_lite/admin/payroll_runs_controller.rb +3 -1
- data/app/controllers/hr_lite/leave_requests_controller.rb +3 -1
- data/app/controllers/hr_lite/regularization_requests_controller.rb +10 -1
- data/app/controllers/hr_lite/salary_slips_controller.rb +6 -6
- data/app/helpers/hr_lite/application_helper.rb +12 -6
- data/app/jobs/hr_lite/attendance_close_job.rb +42 -0
- data/app/jobs/hr_lite/payroll_auto_draft_job.rb +4 -3
- data/app/jobs/hr_lite/slips_ready_job.rb +10 -0
- data/app/models/hr_lite/attendance_record.rb +1 -0
- data/app/models/hr_lite/audit_log.rb +1 -1
- data/app/models/hr_lite/benefit_enrolment.rb +1 -1
- data/app/models/hr_lite/leave_balance.rb +2 -1
- data/app/models/hr_lite/leave_request.rb +38 -17
- data/app/models/hr_lite/payroll_line_item.rb +5 -3
- data/app/models/hr_lite/payroll_run.rb +19 -3
- data/app/models/hr_lite/regularization_request.rb +40 -3
- data/app/models/hr_lite/salary_slip.rb +6 -0
- data/app/services/hr_lite/attendance_summary.rb +12 -15
- data/app/services/hr_lite/overview_query.rb +4 -1
- data/app/views/hr_lite/admin/benefits/index.html.erb +65 -0
- data/app/views/hr_lite/admin/benefits/new.html.erb +37 -0
- data/app/views/hr_lite/admin/expense_categories/_form.html.erb +16 -0
- data/app/views/hr_lite/admin/expense_categories/edit.html.erb +3 -0
- data/app/views/hr_lite/admin/expense_categories/index.html.erb +30 -0
- data/app/views/hr_lite/admin/expense_categories/new.html.erb +3 -0
- data/app/views/hr_lite/admin/leave_balances/index.html.erb +4 -0
- data/app/views/hr_lite/admin/leave_requests/new.html.erb +8 -1
- data/app/views/hr_lite/admin/leave_requests/show.html.erb +3 -0
- data/app/views/hr_lite/admin/leave_types/index.html.erb +1 -0
- data/app/views/hr_lite/admin/payroll_line_items/index.html.erb +47 -0
- data/app/views/hr_lite/admin/payroll_line_items/new.html.erb +42 -0
- data/app/views/hr_lite/admin/payroll_runs/show.html.erb +1 -0
- data/app/views/hr_lite/admin/salary_structures/_form.html.erb +5 -1
- data/app/views/hr_lite/admin/shared/_approvals_tabs.html.erb +3 -1
- data/app/views/hr_lite/leave_requests/index.html.erb +4 -0
- data/app/views/hr_lite/leave_requests/new.html.erb +1 -0
- data/app/views/hr_lite/regularization_requests/new.html.erb +3 -0
- data/app/views/hr_lite/salary_slips/index.html.erb +1 -1
- data/app/views/layouts/hr_lite/application.html.erb +5 -4
- data/config/routes.rb +5 -0
- data/db/migrate/20260929081109_add_paid_days_to_hr_lite_leave_requests.rb +5 -0
- data/lib/hr_lite/configuration.rb +21 -1
- data/lib/hr_lite/notifications.rb +8 -2
- data/lib/hr_lite/version.rb +1 -1
- metadata +16 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<% content_for(:page_title) { "Add a pay item" } %>
|
|
2
|
+
<div class="hrl-page__head"><h1 class="hrl-page__title">Add a pay item</h1></div>
|
|
3
|
+
|
|
4
|
+
<section class="hrl-card">
|
|
5
|
+
<p class="hrl-muted hrl-small">
|
|
6
|
+
A bonus, incentive, arrears, reimbursement or one-time deduction on one
|
|
7
|
+
month's payslip. Payroll picks it up when that month's run is computed —
|
|
8
|
+
add it first, or recompute the run while it is in review. A month that
|
|
9
|
+
has already been paid is refused.
|
|
10
|
+
</p>
|
|
11
|
+
<%= form_with model: @item, url: hr_lite.admin_payroll_line_items_path, method: :post, local: true do |f| %>
|
|
12
|
+
<%= render "hr_lite/shared/form_errors", record: @item %>
|
|
13
|
+
<div class="hrl-field">
|
|
14
|
+
<%= f.label :user_id, "Employee" %>
|
|
15
|
+
<%= f.select :user_id, options_for_select(HrLite.employees.map { |u| [ hr_display_name(u), u.id ] },
|
|
16
|
+
@item.user_id) %>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="hrl-field">
|
|
19
|
+
<%= f.label :component_id, "Item" %>
|
|
20
|
+
<%# Loan repayment is left out: finalize books that line against the person's loans. %>
|
|
21
|
+
<%= f.select :component_id,
|
|
22
|
+
HrLite::SalaryComponent.active.ordered.where.not(code: "loan_repayment")
|
|
23
|
+
.map { |c| [ "#{c.label} (#{c.kind})", c.id ] } %>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="hrl-field">
|
|
26
|
+
<%= f.label :period_month, "Month" %>
|
|
27
|
+
<%= f.month_field :period_month, value: @item.period_month&.strftime("%Y-%m") %>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="hrl-field">
|
|
30
|
+
<%= f.label :amount, "Amount (₹)" %>
|
|
31
|
+
<%= f.text_field :amount, value: @item.amount&.to_s("F"), inputmode: "decimal" %>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="hrl-field">
|
|
34
|
+
<%= f.label :note, "Note (optional)" %>
|
|
35
|
+
<%= f.text_field :note %>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="hrl-form-actions">
|
|
38
|
+
<%= f.submit "Add", class: "hrl-btn hrl-btn--primary" %>
|
|
39
|
+
<a class="hrl-btn" href="<%= hr_lite.admin_payroll_line_items_path(month: @item.period_month&.strftime("%Y-%m")) %>">Cancel</a>
|
|
40
|
+
</div>
|
|
41
|
+
<% end %>
|
|
42
|
+
</section>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
<div class="hrl-page__head">
|
|
3
3
|
<h1 class="hrl-page__title">Payroll — <%= @run.label %></h1>
|
|
4
4
|
<div class="hrl-page__actions">
|
|
5
|
+
<a class="hrl-btn" href="<%= hr_lite.admin_payroll_line_items_path(month: @run.period_month.strftime("%Y-%m")) %>">One-off items</a>
|
|
5
6
|
<a class="hrl-btn" href="<%= hr_lite.admin_payroll_runs_path %>">All runs</a>
|
|
6
7
|
</div>
|
|
7
8
|
</div>
|
|
@@ -14,7 +14,11 @@
|
|
|
14
14
|
<div class="hrl-field hrl-field--check"><%= f.check_box :esi_applicable %><%= f.label :esi_applicable, "ESI applicable (auto-exempt above gross ceiling)" %></div>
|
|
15
15
|
<div class="hrl-field">
|
|
16
16
|
<%= f.label :pt_state, "Professional tax state" %>
|
|
17
|
-
|
|
17
|
+
<%# A stored rate card carries no PT (slabs live in their own table), so list those states too. %>
|
|
18
|
+
<% pt_states = [ HrLite::ProfessionalTaxSlab::NO_LEVY, structure.pt_state ] |
|
|
19
|
+
HrLite::ProfessionalTaxSlab.distinct.order(:state).pluck(:state) |
|
|
20
|
+
HrLite::StatutoryRateCard.for(Date.current)[:pt].keys %>
|
|
21
|
+
<%= f.select :pt_state, pt_states.map { |s| [ s.humanize, s ] } %>
|
|
18
22
|
</div>
|
|
19
23
|
<div class="hrl-field"><%= f.label :notes %><%= f.text_area :notes %></div>
|
|
20
24
|
<div class="hrl-form-actions">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<%# locals: active (:leaves | :comp_off | :regularizations) %>
|
|
1
|
+
<%# locals: active (:leaves | :comp_off | :regularizations | :balances) %>
|
|
2
2
|
<div class="hrl-row" style="margin-bottom:.85rem;">
|
|
3
3
|
<a class="hrl-btn <%= 'hrl-btn--primary' if active == :leaves %>"
|
|
4
4
|
href="<%= hr_lite.admin_leave_requests_path %>">Leaves</a>
|
|
@@ -8,4 +8,6 @@
|
|
|
8
8
|
<a class="hrl-btn <%= 'hrl-btn--primary' if active == :regularizations %>"
|
|
9
9
|
href="<%= hr_lite.admin_regularization_requests_path %>">Regularization
|
|
10
10
|
<% if (n = HrLite::RegularizationRequest.pending.count).positive? %><span class="hrl-badge hrl-badge--warn"><%= n %></span><% end %></a>
|
|
11
|
+
<a class="hrl-btn <%= 'hrl-btn--primary' if active == :balances %>"
|
|
12
|
+
href="<%= hr_lite.admin_leave_balances_path %>">Balances</a>
|
|
11
13
|
</div>
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
<div class="hrl-page__head">
|
|
3
3
|
<h1 class="hrl-page__title">My leaves</h1>
|
|
4
4
|
<div class="hrl-page__actions">
|
|
5
|
+
<a class="hrl-btn" href="<%= hr_lite.leave_balances_path %>">Balances</a>
|
|
5
6
|
<a class="hrl-btn" href="<%= hr_lite.comp_off_requests_path %>">Comp-off</a>
|
|
7
|
+
<% if hr_can?("leave.approve", scope: :team) %>
|
|
8
|
+
<a class="hrl-btn" href="<%= hr_lite.new_admin_leave_request_path %>">Record leave for someone</a>
|
|
9
|
+
<% end %>
|
|
6
10
|
<a class="hrl-btn hrl-btn--primary" href="<%= hr_lite.new_leave_request_path %>">Apply</a>
|
|
7
11
|
</div>
|
|
8
12
|
</div>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
</div>
|
|
5
5
|
|
|
6
6
|
<%= render "hr_lite/leave_requests/balance_chips" %>
|
|
7
|
+
<p class="hrl-small hrl-muted">Days beyond your balance are unpaid (loss of pay), cut from that month's salary.</p>
|
|
7
8
|
|
|
8
9
|
<section class="hrl-card">
|
|
9
10
|
<%= form_with model: @request, url: hr_lite.leave_requests_path, local: true do |f| %>
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
<section class="hrl-card">
|
|
7
7
|
<%= form_with model: @request, url: hr_lite.regularization_requests_path, scope: :regularization_request, local: true do |f| %>
|
|
8
8
|
<%= render "hr_lite/shared/form_errors", record: @request %>
|
|
9
|
+
<% if (rule = HrLite.config.self_regularization) %>
|
|
10
|
+
<p class="hrl-small hrl-muted">A missed punch on a working day from today back to <%= rule[:within_days] %> days ago is fixed as soon as you submit, up to <%= rule[:per_week] %> times a week. Anything else goes to HR as a ticket.</p>
|
|
11
|
+
<% end %>
|
|
9
12
|
<div class="hrl-field">
|
|
10
13
|
<%= f.label :date, "Which day needs fixing?" %>
|
|
11
14
|
<%= f.date_field :date, value: @request.date&.strftime("%Y-%m-%d"), max: Date.current %>
|
|
@@ -24,6 +24,6 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<%= hrl_pagination %>
|
|
26
26
|
<% else %>
|
|
27
|
-
<p class="hrl-card--empty">No published salary slips yet
|
|
27
|
+
<p class="hrl-card--empty">No published salary slips yet.<% if (day = HrLite.config.slip_release_day) %> Each month's slip opens on the <%= day.ordinalize %> of the next month.<% end %></p>
|
|
28
28
|
<% end %>
|
|
29
29
|
</section>
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
<%= hrl_nav_link(item) %>
|
|
31
31
|
<% end %>
|
|
32
32
|
|
|
33
|
-
<% if hr_admin? || hr_leadership? %>
|
|
33
|
+
<% if hr_admin? || hr_leadership? || hr_can?("expense.approve", scope: :team) %>
|
|
34
34
|
<span class="hrl-side__group">Manage</span>
|
|
35
35
|
<% hrl_nav_items(HrLite::ApplicationHelper::ADMIN_NAV_ITEMS).each do |item| %>
|
|
36
|
-
<%= hrl_nav_link(item) %>
|
|
36
|
+
<%= hrl_nav_link(item) if item[:if] || hr_admin? || hr_leadership? %>
|
|
37
37
|
<% end %>
|
|
38
38
|
<% end %>
|
|
39
39
|
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
<% rest.each do |item| %>
|
|
101
101
|
<%= hrl_nav_link(item) %>
|
|
102
102
|
<% end %>
|
|
103
|
-
<% if hr_admin? || hr_leadership? %>
|
|
103
|
+
<% if hr_admin? || hr_leadership? || hr_can?("expense.approve", scope: :team) %>
|
|
104
104
|
<span class="hrl-side__group">Manage</span>
|
|
105
105
|
<% hrl_nav_items(HrLite::ApplicationHelper::ADMIN_NAV_ITEMS).each do |item| %>
|
|
106
|
-
<%= hrl_nav_link(item) %>
|
|
106
|
+
<%= hrl_nav_link(item) if item[:if] || hr_admin? || hr_leadership? %>
|
|
107
107
|
<% end %>
|
|
108
108
|
<% end %>
|
|
109
109
|
<% if hr_leadership? || hr_superadmin? %>
|
|
@@ -125,6 +125,7 @@
|
|
|
125
125
|
|
|
126
126
|
<%= javascript_include_tag "hr_lite/confirm", defer: true %>
|
|
127
127
|
<%= javascript_include_tag "hr_lite/mention", defer: true %>
|
|
128
|
+
<%= javascript_include_tag "hr_lite/nav", defer: true %>
|
|
128
129
|
<%= yield :scripts %>
|
|
129
130
|
</body>
|
|
130
131
|
</html>
|
data/config/routes.rb
CHANGED
|
@@ -91,11 +91,15 @@ HrLite::Engine.routes.draw do
|
|
|
91
91
|
resources :assets, only: %i[index new create] do
|
|
92
92
|
member { post :assign; post :take_back }
|
|
93
93
|
end
|
|
94
|
+
resources :benefits, only: %i[index new create] do
|
|
95
|
+
member { post :enrol; post :unenrol }
|
|
96
|
+
end
|
|
94
97
|
resources :checklists, only: :index do
|
|
95
98
|
member { post :complete; post :reopen }
|
|
96
99
|
end
|
|
97
100
|
resources :leave_types, except: :show
|
|
98
101
|
resources :office_locations, except: :show
|
|
102
|
+
resources :expense_categories, except: %i[show destroy]
|
|
99
103
|
resources :holidays, only: %i[index create update destroy] do
|
|
100
104
|
collection { post :bulk_create }
|
|
101
105
|
end
|
|
@@ -119,6 +123,7 @@ HrLite::Engine.routes.draw do
|
|
|
119
123
|
get :register
|
|
120
124
|
end
|
|
121
125
|
end
|
|
126
|
+
resources :payroll_line_items, only: %i[index new create destroy]
|
|
122
127
|
resources :salary_slips, only: %i[show update]
|
|
123
128
|
resource :setting, only: %i[edit update]
|
|
124
129
|
resources :audit_logs, only: :index
|
|
@@ -14,7 +14,7 @@ module HrLite
|
|
|
14
14
|
# the HR shell; nil (default) shows nothing.
|
|
15
15
|
:notifications
|
|
16
16
|
|
|
17
|
-
attr_reader :leave_year_start_month
|
|
17
|
+
attr_reader :leave_year_start_month, :slip_release_day, :self_regularization
|
|
18
18
|
|
|
19
19
|
# Misconfiguration must fail at boot, not as production 500s on every
|
|
20
20
|
# balance screen. Accepts "7" (ENV-friendly) and validates 1..12.
|
|
@@ -27,6 +27,24 @@ module HrLite
|
|
|
27
27
|
@leave_year_start_month = month
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
# nil = an employee sees a slip the moment it is published; 10 = the
|
|
31
|
+
# October slip opens on 10 November. 1..28 so every month has that day.
|
|
32
|
+
def slip_release_day=(value)
|
|
33
|
+
day = value.presence && Integer(value)
|
|
34
|
+
raise ArgumentError, "slip_release_day must be 1..28 or nil, got #{value.inspect}" if day && !(1..28).cover?(day)
|
|
35
|
+
|
|
36
|
+
@slip_release_day = day
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# nil = only HR fixes a missed punch. { within_days: 2, per_week: 2 } = an
|
|
40
|
+
# employee may fix their own day for 2 days after it, at most 2 a week.
|
|
41
|
+
def self_regularization=(value)
|
|
42
|
+
ok = value.nil? || (value.is_a?(Hash) && %i[within_days per_week].all? { |k| value[k].is_a?(Integer) && value[k].positive? })
|
|
43
|
+
raise ArgumentError, "self_regularization must be nil or { within_days:, per_week: } (positive integers), got #{value.inspect}" unless ok
|
|
44
|
+
|
|
45
|
+
@self_regularization = value
|
|
46
|
+
end
|
|
47
|
+
|
|
30
48
|
# 0.1.0 pre-release name for public_url_base; kept as an alias so early
|
|
31
49
|
# adopters' initializers don't break.
|
|
32
50
|
alias_method :mail_link_base, :public_url_base
|
|
@@ -67,6 +85,8 @@ module HrLite
|
|
|
67
85
|
@notification_matrix = nil # resolved lazily to Notifications::DEFAULT_MATRIX
|
|
68
86
|
@back_link = nil # optional {label:, url:} for the shell nav
|
|
69
87
|
@leave_year_start_month = 1 # 1 = calendar year; 7 = July–June leave year
|
|
88
|
+
@slip_release_day = nil # e.g. 10 = slips open on the 10th of the next month
|
|
89
|
+
@self_regularization = nil # e.g. { within_days: 2, per_week: 2 } — employees fix their own missed punch
|
|
70
90
|
|
|
71
91
|
# Leadership onboarding/offboarding. onboard_user must return a saved
|
|
72
92
|
# user record (default: create on user_class with whatever of
|
|
@@ -18,6 +18,8 @@ module HrLite
|
|
|
18
18
|
"leave.cancelled" => { bell: true, email: false, leadership_email: true, leadership_bell: false },
|
|
19
19
|
"attendance.flagged" => { bell: true, email: false, leadership_email: false, leadership_bell: false },
|
|
20
20
|
"attendance.regularized" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
21
|
+
"attendance.missed_check_in" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
22
|
+
"attendance.missed_check_out" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
21
23
|
"payroll.finalized" => { bell: false, email: false, leadership_email: true, leadership_bell: true },
|
|
22
24
|
"payroll.published" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
23
25
|
"kudos.mentioned" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
@@ -48,7 +50,7 @@ module HrLite
|
|
|
48
50
|
"resignation.accepted" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
49
51
|
"resignation.withdrawn" => { bell: true, email: false, leadership_email: true, leadership_bell: false },
|
|
50
52
|
"employee.onboarded" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
51
|
-
"payroll.draft_ready" => { bell:
|
|
53
|
+
"payroll.draft_ready" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
52
54
|
"leave.team_notice" => { bell: true, email: false, leadership_email: false, leadership_bell: false },
|
|
53
55
|
"comp_off.requested" => { bell: true, email: false, leadership_email: true, leadership_bell: true },
|
|
54
56
|
"comp_off.approved" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
@@ -73,8 +75,10 @@ module HrLite
|
|
|
73
75
|
# employee-scoped path ("Your appraisal has been shared", /appraisals/7):
|
|
74
76
|
# fanned out verbatim, leadership read them as being about themselves and
|
|
75
77
|
# followed a link their own scope 404s or resolves to their own record.
|
|
78
|
+
# `skip_leadership:` is for a delayed employee half of an event whose
|
|
79
|
+
# leadership copy already went out.
|
|
76
80
|
def publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [],
|
|
77
|
-
diff: nil, link_url: nil, leadership: {})
|
|
81
|
+
diff: nil, link_url: nil, leadership: {}, skip_leadership: false)
|
|
78
82
|
row = matrix[event.to_s]
|
|
79
83
|
unless row
|
|
80
84
|
Rails.logger.warn("[hr_lite] unknown notification event #{event}")
|
|
@@ -87,6 +91,8 @@ module HrLite
|
|
|
87
91
|
|
|
88
92
|
deliver_bells(event, row, bell_to, title, body, path)
|
|
89
93
|
deliver_emails(row, email_to, title, body, path, lines, link_url)
|
|
94
|
+
return if skip_leadership
|
|
95
|
+
|
|
90
96
|
deliver_leadership_email(event, row, lead_title, lead_body, lead_path, lines, diff)
|
|
91
97
|
deliver_leadership_bells(event, row, bell_to, lead_title, lead_body, lead_path)
|
|
92
98
|
nil
|
data/lib/hr_lite/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hr_lite
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.19.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- kshitiz sinha
|
|
@@ -67,6 +67,7 @@ files:
|
|
|
67
67
|
- app/assets/javascripts/hr_lite/confirm.js
|
|
68
68
|
- app/assets/javascripts/hr_lite/geo_punch.js
|
|
69
69
|
- app/assets/javascripts/hr_lite/mention.js
|
|
70
|
+
- app/assets/javascripts/hr_lite/nav.js
|
|
70
71
|
- app/assets/javascripts/hr_lite/print.js
|
|
71
72
|
- app/assets/stylesheets/hr_lite/application.css
|
|
72
73
|
- app/assets/stylesheets/hr_lite/hr_lite.css
|
|
@@ -75,11 +76,13 @@ files:
|
|
|
75
76
|
- app/controllers/hr_lite/admin/attendances_controller.rb
|
|
76
77
|
- app/controllers/hr_lite/admin/audit_logs_controller.rb
|
|
77
78
|
- app/controllers/hr_lite/admin/base_controller.rb
|
|
79
|
+
- app/controllers/hr_lite/admin/benefits_controller.rb
|
|
78
80
|
- app/controllers/hr_lite/admin/checklists_controller.rb
|
|
79
81
|
- app/controllers/hr_lite/admin/comp_off_requests_controller.rb
|
|
80
82
|
- app/controllers/hr_lite/admin/designation_changes_controller.rb
|
|
81
83
|
- app/controllers/hr_lite/admin/documents_controller.rb
|
|
82
84
|
- app/controllers/hr_lite/admin/employees_controller.rb
|
|
85
|
+
- app/controllers/hr_lite/admin/expense_categories_controller.rb
|
|
83
86
|
- app/controllers/hr_lite/admin/expenses_controller.rb
|
|
84
87
|
- app/controllers/hr_lite/admin/holidays_controller.rb
|
|
85
88
|
- app/controllers/hr_lite/admin/hr_requests_controller.rb
|
|
@@ -90,6 +93,7 @@ files:
|
|
|
90
93
|
- app/controllers/hr_lite/admin/loans_controller.rb
|
|
91
94
|
- app/controllers/hr_lite/admin/office_locations_controller.rb
|
|
92
95
|
- app/controllers/hr_lite/admin/overview_controller.rb
|
|
96
|
+
- app/controllers/hr_lite/admin/payroll_line_items_controller.rb
|
|
93
97
|
- app/controllers/hr_lite/admin/payroll_runs_controller.rb
|
|
94
98
|
- app/controllers/hr_lite/admin/policies_controller.rb
|
|
95
99
|
- app/controllers/hr_lite/admin/regularization_requests_controller.rb
|
|
@@ -133,10 +137,12 @@ files:
|
|
|
133
137
|
- app/helpers/hr_lite/application_helper.rb
|
|
134
138
|
- app/jobs/hr_lite/application_job.rb
|
|
135
139
|
- app/jobs/hr_lite/approval_escalation_job.rb
|
|
140
|
+
- app/jobs/hr_lite/attendance_close_job.rb
|
|
136
141
|
- app/jobs/hr_lite/daily_digest_job.rb
|
|
137
142
|
- app/jobs/hr_lite/document_expiry_job.rb
|
|
138
143
|
- app/jobs/hr_lite/leave_year_rollover_job.rb
|
|
139
144
|
- app/jobs/hr_lite/payroll_auto_draft_job.rb
|
|
145
|
+
- app/jobs/hr_lite/slips_ready_job.rb
|
|
140
146
|
- app/mailers/hr_lite/application_mailer.rb
|
|
141
147
|
- app/mailers/hr_lite/event_mailer.rb
|
|
142
148
|
- app/models/concerns/hr_lite/approvable.rb
|
|
@@ -214,6 +220,8 @@ files:
|
|
|
214
220
|
- app/views/hr_lite/admin/attendances/index.html.erb
|
|
215
221
|
- app/views/hr_lite/admin/attendances/show.html.erb
|
|
216
222
|
- app/views/hr_lite/admin/audit_logs/index.html.erb
|
|
223
|
+
- app/views/hr_lite/admin/benefits/index.html.erb
|
|
224
|
+
- app/views/hr_lite/admin/benefits/new.html.erb
|
|
217
225
|
- app/views/hr_lite/admin/checklists/index.html.erb
|
|
218
226
|
- app/views/hr_lite/admin/comp_off_requests/index.html.erb
|
|
219
227
|
- app/views/hr_lite/admin/comp_off_requests/show.html.erb
|
|
@@ -225,6 +233,10 @@ files:
|
|
|
225
233
|
- app/views/hr_lite/admin/employees/index.html.erb
|
|
226
234
|
- app/views/hr_lite/admin/employees/new.html.erb
|
|
227
235
|
- app/views/hr_lite/admin/employees/show.html.erb
|
|
236
|
+
- app/views/hr_lite/admin/expense_categories/_form.html.erb
|
|
237
|
+
- app/views/hr_lite/admin/expense_categories/edit.html.erb
|
|
238
|
+
- app/views/hr_lite/admin/expense_categories/index.html.erb
|
|
239
|
+
- app/views/hr_lite/admin/expense_categories/new.html.erb
|
|
228
240
|
- app/views/hr_lite/admin/expenses/index.html.erb
|
|
229
241
|
- app/views/hr_lite/admin/holidays/index.html.erb
|
|
230
242
|
- app/views/hr_lite/admin/hr_requests/index.html.erb
|
|
@@ -245,6 +257,8 @@ files:
|
|
|
245
257
|
- app/views/hr_lite/admin/office_locations/index.html.erb
|
|
246
258
|
- app/views/hr_lite/admin/office_locations/new.html.erb
|
|
247
259
|
- app/views/hr_lite/admin/overview/index.html.erb
|
|
260
|
+
- app/views/hr_lite/admin/payroll_line_items/index.html.erb
|
|
261
|
+
- app/views/hr_lite/admin/payroll_line_items/new.html.erb
|
|
248
262
|
- app/views/hr_lite/admin/payroll_runs/index.html.erb
|
|
249
263
|
- app/views/hr_lite/admin/payroll_runs/new.html.erb
|
|
250
264
|
- app/views/hr_lite/admin/payroll_runs/show.html.erb
|
|
@@ -361,6 +375,7 @@ files:
|
|
|
361
375
|
- db/migrate/20260818010401_create_hr_lite_assets_and_onboarding.rb
|
|
362
376
|
- db/migrate/20260927100145_add_id_card_fields_to_hr_lite_employee_profiles.rb
|
|
363
377
|
- db/migrate/20260927101031_add_created_by_id_to_hr_lite_leave_requests.rb
|
|
378
|
+
- db/migrate/20260929081109_add_paid_days_to_hr_lite_leave_requests.rb
|
|
364
379
|
- lib/generators/hr_lite/install/install_generator.rb
|
|
365
380
|
- lib/generators/hr_lite/install/templates/AFTER_INSTALL
|
|
366
381
|
- lib/generators/hr_lite/install/templates/initializer.rb
|