hr_lite 0.2.0 → 0.3.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 +67 -0
- data/README.md +2 -1
- data/app/assets/stylesheets/hr_lite/hr_lite.css +17 -4
- data/app/controllers/hr_lite/admin/comp_off_requests_controller.rb +38 -0
- data/app/controllers/hr_lite/admin/employees_controller.rb +4 -1
- data/app/controllers/hr_lite/admin/leave_types_controller.rb +1 -1
- data/app/controllers/hr_lite/admin/regularization_requests_controller.rb +38 -0
- data/app/controllers/hr_lite/comp_off_requests_controller.rb +46 -0
- data/app/controllers/hr_lite/regularization_requests_controller.rb +36 -0
- data/app/controllers/hr_lite/team_controller.rb +11 -0
- data/app/helpers/hr_lite/application_helper.rb +61 -3
- data/app/mailers/hr_lite/event_mailer.rb +2 -2
- data/app/models/hr_lite/comp_off_request.rb +177 -0
- data/app/models/hr_lite/leave_request.rb +18 -0
- data/app/models/hr_lite/leave_type.rb +17 -0
- data/app/models/hr_lite/regularization_request.rb +181 -0
- data/app/services/hr_lite/team_day.rb +84 -0
- data/app/views/hr_lite/admin/comp_off_requests/index.html.erb +37 -0
- data/app/views/hr_lite/admin/comp_off_requests/show.html.erb +47 -0
- data/app/views/hr_lite/admin/employees/_form.html.erb +3 -1
- data/app/views/hr_lite/admin/leave_requests/index.html.erb +2 -0
- data/app/views/hr_lite/admin/leave_types/_form.html.erb +4 -0
- data/app/views/hr_lite/admin/regularization_requests/index.html.erb +37 -0
- data/app/views/hr_lite/admin/regularization_requests/show.html.erb +50 -0
- data/app/views/hr_lite/admin/shared/_approvals_tabs.html.erb +11 -0
- data/app/views/hr_lite/attendance/show.html.erb +3 -0
- data/app/views/hr_lite/comp_off_requests/index.html.erb +42 -0
- data/app/views/hr_lite/comp_off_requests/new.html.erb +28 -0
- data/app/views/hr_lite/leave_requests/index.html.erb +1 -0
- data/app/views/hr_lite/regularization_requests/index.html.erb +41 -0
- data/app/views/hr_lite/regularization_requests/new.html.erb +30 -0
- data/app/views/hr_lite/team/show.html.erb +48 -0
- data/app/views/layouts/hr_lite/application.html.erb +1 -1
- data/config/routes.rb +13 -0
- data/db/migrate/20260719104315_add_comp_off_to_hr_lite_leave_types.rb +6 -0
- data/db/migrate/20260719104316_create_hr_lite_comp_off_requests.rb +24 -0
- data/db/migrate/20260719104317_create_hr_lite_regularization_requests.rb +20 -0
- data/lib/hr_lite/configuration.rb +5 -1
- data/lib/hr_lite/notifications.rb +19 -6
- data/lib/hr_lite/seeds.rb +16 -1
- data/lib/hr_lite/version.rb +1 -1
- data/lib/hr_lite.rb +7 -0
- metadata +22 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<% content_for(:page_title) { "Raise a regularization ticket" } %>
|
|
2
|
+
<div class="hrl-page__head">
|
|
3
|
+
<h1 class="hrl-page__title">Raise a regularization ticket</h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<section class="hrl-card">
|
|
7
|
+
<%= form_with model: @request, url: hr_lite.regularization_requests_path, scope: :regularization_request, local: true do |f| %>
|
|
8
|
+
<%= render "hr_lite/shared/form_errors", record: @request %>
|
|
9
|
+
<div class="hrl-field">
|
|
10
|
+
<%= f.label :date, "Which day needs fixing?" %>
|
|
11
|
+
<%= f.date_field :date, value: @request.date&.strftime("%Y-%m-%d"), max: Date.current %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="hrl-field">
|
|
14
|
+
<%= f.label :check_in_at, "Actual check-in (leave blank if only check-out is missing)" %>
|
|
15
|
+
<%= f.datetime_local_field :check_in_at, value: @request.check_in_at&.strftime("%Y-%m-%dT%H:%M"), max: Date.current.strftime("%Y-%m-%dT23:59") %>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="hrl-field">
|
|
18
|
+
<%= f.label :check_out_at, "Actual check-out (leave blank if only check-in is missing)" %>
|
|
19
|
+
<%= f.datetime_local_field :check_out_at, value: @request.check_out_at&.strftime("%Y-%m-%dT%H:%M"), max: Date.current.strftime("%Y-%m-%dT23:59") %>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="hrl-field">
|
|
22
|
+
<%= f.label :reason, "Why was the punch missed? (required)" %>
|
|
23
|
+
<%= f.text_area :reason %>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="hrl-form-actions">
|
|
26
|
+
<%= f.submit "Raise ticket", class: "hrl-btn hrl-btn--primary" %>
|
|
27
|
+
<a class="hrl-btn" href="<%= hr_lite.regularization_requests_path %>">Cancel</a>
|
|
28
|
+
</div>
|
|
29
|
+
<% end %>
|
|
30
|
+
</section>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<% content_for(:page_title) { "Team" } %>
|
|
2
|
+
<div class="hrl-page__head">
|
|
3
|
+
<h1 class="hrl-page__title">Team — <%= @date == Date.current ? "today" : @date.strftime("%A, %d %B") %></h1>
|
|
4
|
+
<div class="hrl-page__actions">
|
|
5
|
+
<a class="hrl-btn" aria-label="Previous day" href="<%= hr_lite.team_path(date: (@date - 1).strftime("%Y-%m-%d")) %>">←</a>
|
|
6
|
+
<% unless @date == Date.current %>
|
|
7
|
+
<a class="hrl-btn" href="<%= hr_lite.team_path %>">Today</a>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% if @date < Date.current %>
|
|
10
|
+
<a class="hrl-btn" aria-label="Next day" href="<%= hr_lite.team_path(date: (@date + 1).strftime("%Y-%m-%d")) %>">→</a>
|
|
11
|
+
<% end %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<% kpis = @board.kpis %>
|
|
16
|
+
<div class="hrl-kpis">
|
|
17
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= kpis[:checked_in] %></div><div class="hrl-kpi__label">Checked in</div></div>
|
|
18
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= kpis[:on_leave] %></div><div class="hrl-kpi__label">On leave</div></div>
|
|
19
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= kpis[:not_in] %></div><div class="hrl-kpi__label">Not in</div></div>
|
|
20
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= @board.rows.size %></div><div class="hrl-kpi__label">Team size</div></div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<section class="hrl-card">
|
|
24
|
+
<% if @board.rows.any? %>
|
|
25
|
+
<div class="hrl-table-wrap">
|
|
26
|
+
<table class="hrl-table hrl-table--stack">
|
|
27
|
+
<thead><tr><th>Name</th><th>Status</th><th>Hours <%= @date == Date.current ? "today" : "that day" %></th><th>Hours this month</th></tr></thead>
|
|
28
|
+
<tbody>
|
|
29
|
+
<% @board.rows.each do |row| %>
|
|
30
|
+
<tr>
|
|
31
|
+
<td data-label="Name">
|
|
32
|
+
<span><strong><%= hr_display_name(row.user) %></strong><% if row.profile&.designation.present? %>
|
|
33
|
+
<span class="hrl-small hrl-muted"> · <%= row.profile.designation %></span><% end %></span>
|
|
34
|
+
</td>
|
|
35
|
+
<td data-label="Status"><%= hrl_team_status(row) %></td>
|
|
36
|
+
<td data-label="Hours" class="hrl-num"><%= hrl_duration(row.day_seconds) %></td>
|
|
37
|
+
<td data-label="Hours this month" class="hrl-num"><%= hrl_duration(row.month_seconds) %></td>
|
|
38
|
+
</tr>
|
|
39
|
+
<% end %>
|
|
40
|
+
</tbody>
|
|
41
|
+
</table>
|
|
42
|
+
</div>
|
|
43
|
+
<% else %>
|
|
44
|
+
<p class="hrl-card--empty">Nobody to show for this date.</p>
|
|
45
|
+
<% end %>
|
|
46
|
+
<p class="hrl-small hrl-muted hrl-mt">Forgot a punch yourself?
|
|
47
|
+
<a href="<%= hr_lite.new_regularization_request_path %>">Raise a regularization ticket</a>.</p>
|
|
48
|
+
</section>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<% end %>
|
|
32
32
|
|
|
33
33
|
<% if hr_admin? || hr_leadership? %>
|
|
34
|
-
<span class="hrl-side__group">
|
|
34
|
+
<span class="hrl-side__group">Manage</span>
|
|
35
35
|
<% hrl_nav_items(HrLite::ApplicationHelper::ADMIN_NAV_ITEMS).each do |item| %>
|
|
36
36
|
<%= hrl_nav_link(item) %>
|
|
37
37
|
<% end %>
|
data/config/routes.rb
CHANGED
|
@@ -13,6 +13,13 @@ HrLite::Engine.routes.draw do
|
|
|
13
13
|
member { post :cancel }
|
|
14
14
|
end
|
|
15
15
|
resources :leave_balances, only: :index
|
|
16
|
+
resources :comp_off_requests, only: %i[index new create] do
|
|
17
|
+
member { post :cancel }
|
|
18
|
+
end
|
|
19
|
+
resources :regularization_requests, only: %i[index new create] do
|
|
20
|
+
member { post :cancel }
|
|
21
|
+
end
|
|
22
|
+
get "team", to: "team#show"
|
|
16
23
|
resources :holidays, only: :index
|
|
17
24
|
get "calendar", to: "calendar#show"
|
|
18
25
|
resources :salary_slips, only: %i[index show]
|
|
@@ -32,6 +39,12 @@ HrLite::Engine.routes.draw do
|
|
|
32
39
|
resources :leave_balances, only: :index do
|
|
33
40
|
collection { post :adjust }
|
|
34
41
|
end
|
|
42
|
+
resources :comp_off_requests, only: %i[index show] do
|
|
43
|
+
member { post :approve; post :reject }
|
|
44
|
+
end
|
|
45
|
+
resources :regularization_requests, only: %i[index show] do
|
|
46
|
+
member { post :approve; post :reject }
|
|
47
|
+
end
|
|
35
48
|
resources :leave_types, except: :show
|
|
36
49
|
resources :office_locations, except: :show
|
|
37
50
|
resources :holidays, only: %i[index create update destroy] do
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class CreateHrLiteCompOffRequests < ActiveRecord::Migration[8.0]
|
|
2
|
+
def change
|
|
3
|
+
create_table :hr_lite_comp_off_requests do |t|
|
|
4
|
+
t.bigint :user_id, null: false
|
|
5
|
+
t.date :date_worked, null: false
|
|
6
|
+
t.boolean :half_day, null: false, default: false
|
|
7
|
+
t.text :reason, null: false
|
|
8
|
+
t.string :status, null: false, default: "pending"
|
|
9
|
+
t.bigint :decided_by_id
|
|
10
|
+
t.datetime :decided_at
|
|
11
|
+
t.text :decision_note
|
|
12
|
+
|
|
13
|
+
t.timestamps
|
|
14
|
+
end
|
|
15
|
+
add_index :hr_lite_comp_off_requests, [ :user_id, :status ]
|
|
16
|
+
add_index :hr_lite_comp_off_requests, [ :user_id, :date_worked ]
|
|
17
|
+
add_index :hr_lite_comp_off_requests, [ :status, :date_worked ]
|
|
18
|
+
# Two tabs / a double-tap racing past the app-level duplicate check
|
|
19
|
+
# must not create two live requests for one worked day.
|
|
20
|
+
add_index :hr_lite_comp_off_requests, [ :user_id, :date_worked ],
|
|
21
|
+
unique: true, where: "status IN ('pending', 'approved')",
|
|
22
|
+
name: "index_hr_lite_comp_off_requests_live_uniqueness"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class CreateHrLiteRegularizationRequests < ActiveRecord::Migration[8.0]
|
|
2
|
+
def change
|
|
3
|
+
create_table :hr_lite_regularization_requests do |t|
|
|
4
|
+
t.bigint :user_id, null: false
|
|
5
|
+
t.date :date, null: false
|
|
6
|
+
t.datetime :check_in_at
|
|
7
|
+
t.datetime :check_out_at
|
|
8
|
+
t.text :reason, null: false
|
|
9
|
+
t.string :status, null: false, default: "pending"
|
|
10
|
+
t.bigint :decided_by_id
|
|
11
|
+
t.datetime :decided_at
|
|
12
|
+
t.text :decision_note
|
|
13
|
+
|
|
14
|
+
t.timestamps
|
|
15
|
+
end
|
|
16
|
+
add_index :hr_lite_regularization_requests, [ :user_id, :status ]
|
|
17
|
+
add_index :hr_lite_regularization_requests, [ :user_id, :date ]
|
|
18
|
+
add_index :hr_lite_regularization_requests, [ :status, :date ]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -9,7 +9,7 @@ module HrLite
|
|
|
9
9
|
:time_zone, :currency_symbol, :on_designation_change,
|
|
10
10
|
:leadership_emails, :leadership_check, :extra_stylesheets,
|
|
11
11
|
:mailer_from, :public_url_base, :notification_matrix, :back_link,
|
|
12
|
-
:onboard_user, :offboard_user
|
|
12
|
+
:onboard_user, :offboard_user, :invite_url_for
|
|
13
13
|
|
|
14
14
|
# 0.1.0 pre-release name for public_url_base; kept as an alias so early
|
|
15
15
|
# adopters' initializers don't break.
|
|
@@ -58,6 +58,10 @@ module HrLite
|
|
|
58
58
|
klass.create!(attributes)
|
|
59
59
|
}
|
|
60
60
|
@offboard_user = ->(user) { }
|
|
61
|
+
# Optional: return an absolute set-your-password URL for a freshly
|
|
62
|
+
# onboarded user (e.g. a Devise reset link). When present, the welcome
|
|
63
|
+
# email carries it and leadership never needs to hand over a password.
|
|
64
|
+
@invite_url_for = nil
|
|
61
65
|
end
|
|
62
66
|
end
|
|
63
67
|
|
|
@@ -29,15 +29,27 @@ module HrLite
|
|
|
29
29
|
"resignation.accepted" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
30
30
|
"resignation.withdrawn" => { bell: true, email: false, leadership_email: true, leadership_bell: false },
|
|
31
31
|
"employee.onboarded" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
32
|
-
"payroll.draft_ready" => { bell: false, email: false, leadership_email: true, leadership_bell: true }
|
|
32
|
+
"payroll.draft_ready" => { bell: false, email: false, leadership_email: true, leadership_bell: true },
|
|
33
|
+
"leave.team_notice" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
34
|
+
"comp_off.requested" => { bell: true, email: false, leadership_email: true, leadership_bell: true },
|
|
35
|
+
"comp_off.approved" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
36
|
+
"comp_off.rejected" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
37
|
+
"comp_off.cancelled" => { bell: true, email: false, leadership_email: true, leadership_bell: false },
|
|
38
|
+
"regularization.requested" => { bell: true, email: false, leadership_email: true, leadership_bell: false },
|
|
39
|
+
"regularization.approved" => { bell: true, email: true, leadership_email: true, leadership_bell: false },
|
|
40
|
+
"regularization.rejected" => { bell: true, email: true, leadership_email: false, leadership_bell: false },
|
|
41
|
+
"regularization.cancelled" => { bell: true, email: false, leadership_email: true, leadership_bell: false }
|
|
33
42
|
}.freeze
|
|
34
43
|
|
|
35
44
|
class << self
|
|
45
|
+
# DEFAULT under the host override: a host matrix pinned on an older
|
|
46
|
+
# gem version keeps working when new events ship (rows it doesn't
|
|
47
|
+
# know about fall back to the defaults instead of vanishing).
|
|
36
48
|
def matrix
|
|
37
|
-
HrLite.config.notification_matrix ||
|
|
49
|
+
DEFAULT_MATRIX.merge(HrLite.config.notification_matrix || {})
|
|
38
50
|
end
|
|
39
51
|
|
|
40
|
-
def publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil)
|
|
52
|
+
def publish(event, title:, body: nil, path: nil, bell_to: [], email_to: [], lines: [], diff: nil, link_url: nil)
|
|
41
53
|
row = matrix[event.to_s]
|
|
42
54
|
unless row
|
|
43
55
|
Rails.logger.warn("[hr_lite] unknown notification event #{event}")
|
|
@@ -45,7 +57,7 @@ module HrLite
|
|
|
45
57
|
end
|
|
46
58
|
|
|
47
59
|
deliver_bells(event, row, bell_to, title, body, path)
|
|
48
|
-
deliver_emails(row, email_to, title, body, path, lines)
|
|
60
|
+
deliver_emails(row, email_to, title, body, path, lines, link_url)
|
|
49
61
|
deliver_leadership_email(event, row, title, body, path, lines, diff)
|
|
50
62
|
deliver_leadership_bells(event, row, bell_to, title, body, path)
|
|
51
63
|
nil
|
|
@@ -61,14 +73,15 @@ module HrLite
|
|
|
61
73
|
end
|
|
62
74
|
end
|
|
63
75
|
|
|
64
|
-
def deliver_emails(row, email_to, title, body, path, lines)
|
|
76
|
+
def deliver_emails(row, email_to, title, body, path, lines, link_url = nil)
|
|
65
77
|
return unless row[:email]
|
|
66
78
|
|
|
67
79
|
Array(email_to).compact.uniq.each do |user|
|
|
68
80
|
next if user.email.blank?
|
|
69
81
|
|
|
70
82
|
EventMailer.event(to: user.email, subject: title, heading: title,
|
|
71
|
-
body: body, lines: lines, path: path
|
|
83
|
+
body: body, lines: lines, path: path,
|
|
84
|
+
link_url: link_url).deliver_later
|
|
72
85
|
end
|
|
73
86
|
rescue => e
|
|
74
87
|
Rails.logger.error("[hr_lite] event email failed: #{e.class}: #{e.message}")
|
data/lib/hr_lite/seeds.rb
CHANGED
|
@@ -7,13 +7,28 @@ module HrLite
|
|
|
7
7
|
{ code: "SL", name: "Sick leave", color: "#f59e0b", paid: true, annual_quota: 6, accrual: "yearly_upfront", carry_forward_cap: 0, position: 2 },
|
|
8
8
|
{ code: "EL", name: "Earned leave", color: "#10b981", paid: true, annual_quota: 15, accrual: "monthly", carry_forward_cap: 30, position: 3 },
|
|
9
9
|
{ code: "LWP", name: "Leave without pay", color: "#6b7280", paid: false, annual_quota: nil, accrual: "yearly_upfront", carry_forward_cap: 0, position: 4 },
|
|
10
|
-
{ code: "CO", name: "Comp off", color: "#8b5cf6", paid: true, annual_quota: 0, accrual: "yearly_upfront", carry_forward_cap: 0, position: 5 }
|
|
10
|
+
{ code: "CO", name: "Comp off", color: "#8b5cf6", paid: true, annual_quota: 0, accrual: "yearly_upfront", carry_forward_cap: 0, position: 5, comp_off: true }
|
|
11
11
|
].freeze
|
|
12
12
|
|
|
13
13
|
def self.run!
|
|
14
14
|
seed_leave_types! + seed_holidays!
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
# Deliberately NOT auto-run from run!: an operator unticking every
|
|
18
|
+
# comp-off flag to disable the feature must stay disabled across
|
|
19
|
+
# deploys ("re-runs never overwrite operator edits"). Pre-0.3.0
|
|
20
|
+
# installs call this once from their own upgrade seed, or just tick
|
|
21
|
+
# the box under Settings -> Leave types.
|
|
22
|
+
def self.seed_comp_off_flag!
|
|
23
|
+
return [] if LeaveType.exists?(comp_off: true)
|
|
24
|
+
|
|
25
|
+
type = LeaveType.find_by(code: "CO")
|
|
26
|
+
return [] if type.nil?
|
|
27
|
+
|
|
28
|
+
type.update!(comp_off: true)
|
|
29
|
+
[ "comp_off flag on CO" ]
|
|
30
|
+
end
|
|
31
|
+
|
|
17
32
|
def self.seed_leave_types!
|
|
18
33
|
DEFAULT_LEAVE_TYPES.filter_map do |attrs|
|
|
19
34
|
next if LeaveType.exists?(code: attrs[:code])
|
data/lib/hr_lite/version.rb
CHANGED
data/lib/hr_lite.rb
CHANGED
|
@@ -57,6 +57,13 @@ module HrLite
|
|
|
57
57
|
config.employees_scope.call.sort_by { |u| display_name(u).downcase }
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
# employees minus anyone whose profile says they have exited — user
|
|
61
|
+
# accounts outlive employment (slip access), broadcasts must not.
|
|
62
|
+
def active_employees(on: Date.current)
|
|
63
|
+
exits = HrLite::EmployeeProfile.where.not(date_of_exit: nil).pluck(:user_id, :date_of_exit).to_h
|
|
64
|
+
employees.select { |u| exits[u.id].nil? || exits[u.id] >= on }
|
|
65
|
+
end
|
|
66
|
+
|
|
60
67
|
def display_name(user)
|
|
61
68
|
return "" if user.nil?
|
|
62
69
|
|
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.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- kshitiz sinha
|
|
@@ -58,6 +58,7 @@ files:
|
|
|
58
58
|
- app/controllers/hr_lite/admin/attendances_controller.rb
|
|
59
59
|
- app/controllers/hr_lite/admin/audit_logs_controller.rb
|
|
60
60
|
- app/controllers/hr_lite/admin/base_controller.rb
|
|
61
|
+
- app/controllers/hr_lite/admin/comp_off_requests_controller.rb
|
|
61
62
|
- app/controllers/hr_lite/admin/designation_changes_controller.rb
|
|
62
63
|
- app/controllers/hr_lite/admin/employees_controller.rb
|
|
63
64
|
- app/controllers/hr_lite/admin/holidays_controller.rb
|
|
@@ -68,6 +69,7 @@ files:
|
|
|
68
69
|
- app/controllers/hr_lite/admin/office_locations_controller.rb
|
|
69
70
|
- app/controllers/hr_lite/admin/overview_controller.rb
|
|
70
71
|
- app/controllers/hr_lite/admin/payroll_runs_controller.rb
|
|
72
|
+
- app/controllers/hr_lite/admin/regularization_requests_controller.rb
|
|
71
73
|
- app/controllers/hr_lite/admin/resignations_controller.rb
|
|
72
74
|
- app/controllers/hr_lite/admin/salary_slips_controller.rb
|
|
73
75
|
- app/controllers/hr_lite/admin/salary_structures_controller.rb
|
|
@@ -77,14 +79,17 @@ files:
|
|
|
77
79
|
- app/controllers/hr_lite/attendance_controller.rb
|
|
78
80
|
- app/controllers/hr_lite/calendar_controller.rb
|
|
79
81
|
- app/controllers/hr_lite/career_controller.rb
|
|
82
|
+
- app/controllers/hr_lite/comp_off_requests_controller.rb
|
|
80
83
|
- app/controllers/hr_lite/employee_profiles_controller.rb
|
|
81
84
|
- app/controllers/hr_lite/holidays_controller.rb
|
|
82
85
|
- app/controllers/hr_lite/home_controller.rb
|
|
83
86
|
- app/controllers/hr_lite/kudos_controller.rb
|
|
84
87
|
- app/controllers/hr_lite/leave_balances_controller.rb
|
|
85
88
|
- app/controllers/hr_lite/leave_requests_controller.rb
|
|
89
|
+
- app/controllers/hr_lite/regularization_requests_controller.rb
|
|
86
90
|
- app/controllers/hr_lite/resignations_controller.rb
|
|
87
91
|
- app/controllers/hr_lite/salary_slips_controller.rb
|
|
92
|
+
- app/controllers/hr_lite/team_controller.rb
|
|
88
93
|
- app/controllers/hr_lite/users_controller.rb
|
|
89
94
|
- app/helpers/hr_lite/application_helper.rb
|
|
90
95
|
- app/jobs/hr_lite/application_job.rb
|
|
@@ -99,6 +104,7 @@ files:
|
|
|
99
104
|
- app/models/hr_lite/appraisal.rb
|
|
100
105
|
- app/models/hr_lite/attendance_record.rb
|
|
101
106
|
- app/models/hr_lite/audit_log.rb
|
|
107
|
+
- app/models/hr_lite/comp_off_request.rb
|
|
102
108
|
- app/models/hr_lite/designation_change.rb
|
|
103
109
|
- app/models/hr_lite/employee_profile.rb
|
|
104
110
|
- app/models/hr_lite/holiday.rb
|
|
@@ -109,6 +115,7 @@ files:
|
|
|
109
115
|
- app/models/hr_lite/leave_type.rb
|
|
110
116
|
- app/models/hr_lite/office_location.rb
|
|
111
117
|
- app/models/hr_lite/payroll_run.rb
|
|
118
|
+
- app/models/hr_lite/regularization_request.rb
|
|
112
119
|
- app/models/hr_lite/resignation.rb
|
|
113
120
|
- app/models/hr_lite/salary_slip.rb
|
|
114
121
|
- app/models/hr_lite/salary_structure.rb
|
|
@@ -126,6 +133,7 @@ files:
|
|
|
126
133
|
- app/services/hr_lite/payroll_run_processor.rb
|
|
127
134
|
- app/services/hr_lite/pdf_renderer.rb
|
|
128
135
|
- app/services/hr_lite/slip_builder.rb
|
|
136
|
+
- app/services/hr_lite/team_day.rb
|
|
129
137
|
- app/services/hr_lite/working_calendar.rb
|
|
130
138
|
- app/views/hr_lite/admin/appraisals/_form.html.erb
|
|
131
139
|
- app/views/hr_lite/admin/appraisals/edit.html.erb
|
|
@@ -133,6 +141,8 @@ files:
|
|
|
133
141
|
- app/views/hr_lite/admin/attendances/index.html.erb
|
|
134
142
|
- app/views/hr_lite/admin/attendances/show.html.erb
|
|
135
143
|
- app/views/hr_lite/admin/audit_logs/index.html.erb
|
|
144
|
+
- app/views/hr_lite/admin/comp_off_requests/index.html.erb
|
|
145
|
+
- app/views/hr_lite/admin/comp_off_requests/show.html.erb
|
|
136
146
|
- app/views/hr_lite/admin/designation_changes/new.html.erb
|
|
137
147
|
- app/views/hr_lite/admin/employees/_form.html.erb
|
|
138
148
|
- app/views/hr_lite/admin/employees/edit.html.erb
|
|
@@ -155,11 +165,14 @@ files:
|
|
|
155
165
|
- app/views/hr_lite/admin/payroll_runs/index.html.erb
|
|
156
166
|
- app/views/hr_lite/admin/payroll_runs/new.html.erb
|
|
157
167
|
- app/views/hr_lite/admin/payroll_runs/show.html.erb
|
|
168
|
+
- app/views/hr_lite/admin/regularization_requests/index.html.erb
|
|
169
|
+
- app/views/hr_lite/admin/regularization_requests/show.html.erb
|
|
158
170
|
- app/views/hr_lite/admin/salary_slips/show.html.erb
|
|
159
171
|
- app/views/hr_lite/admin/salary_structures/_form.html.erb
|
|
160
172
|
- app/views/hr_lite/admin/salary_structures/edit.html.erb
|
|
161
173
|
- app/views/hr_lite/admin/salary_structures/new.html.erb
|
|
162
174
|
- app/views/hr_lite/admin/settings/edit.html.erb
|
|
175
|
+
- app/views/hr_lite/admin/shared/_approvals_tabs.html.erb
|
|
163
176
|
- app/views/hr_lite/appraisals/index.html.erb
|
|
164
177
|
- app/views/hr_lite/appraisals/show.html.erb
|
|
165
178
|
- app/views/hr_lite/attendance/_month_grid.html.erb
|
|
@@ -167,6 +180,8 @@ files:
|
|
|
167
180
|
- app/views/hr_lite/attendance/show.html.erb
|
|
168
181
|
- app/views/hr_lite/calendar/show.html.erb
|
|
169
182
|
- app/views/hr_lite/career/show.html.erb
|
|
183
|
+
- app/views/hr_lite/comp_off_requests/index.html.erb
|
|
184
|
+
- app/views/hr_lite/comp_off_requests/new.html.erb
|
|
170
185
|
- app/views/hr_lite/employee_profiles/show.html.erb
|
|
171
186
|
- app/views/hr_lite/event_mailer/event.html.erb
|
|
172
187
|
- app/views/hr_lite/event_mailer/event.text.erb
|
|
@@ -182,6 +197,8 @@ files:
|
|
|
182
197
|
- app/views/hr_lite/leave_requests/index.html.erb
|
|
183
198
|
- app/views/hr_lite/leave_requests/new.html.erb
|
|
184
199
|
- app/views/hr_lite/leave_requests/show.html.erb
|
|
200
|
+
- app/views/hr_lite/regularization_requests/index.html.erb
|
|
201
|
+
- app/views/hr_lite/regularization_requests/new.html.erb
|
|
185
202
|
- app/views/hr_lite/resignations/show.html.erb
|
|
186
203
|
- app/views/hr_lite/salary_slips/_slip_detail.html.erb
|
|
187
204
|
- app/views/hr_lite/salary_slips/index.html.erb
|
|
@@ -189,6 +206,7 @@ files:
|
|
|
189
206
|
- app/views/hr_lite/salary_slips/show.html.erb
|
|
190
207
|
- app/views/hr_lite/shared/_form_errors.html.erb
|
|
191
208
|
- app/views/hr_lite/shared/_pagination.html.erb
|
|
209
|
+
- app/views/hr_lite/team/show.html.erb
|
|
192
210
|
- app/views/layouts/hr_lite/application.html.erb
|
|
193
211
|
- app/views/layouts/hr_lite/mailer.html.erb
|
|
194
212
|
- app/views/layouts/hr_lite/mailer.text.erb
|
|
@@ -211,6 +229,9 @@ files:
|
|
|
211
229
|
- db/migrate/20260718195953_create_hr_lite_appraisals.rb
|
|
212
230
|
- db/migrate/20260718195954_create_hr_lite_designation_changes.rb
|
|
213
231
|
- db/migrate/20260719065841_create_hr_lite_resignations.rb
|
|
232
|
+
- db/migrate/20260719104315_add_comp_off_to_hr_lite_leave_types.rb
|
|
233
|
+
- db/migrate/20260719104316_create_hr_lite_comp_off_requests.rb
|
|
234
|
+
- db/migrate/20260719104317_create_hr_lite_regularization_requests.rb
|
|
214
235
|
- lib/generators/hr_lite/install/install_generator.rb
|
|
215
236
|
- lib/generators/hr_lite/install/templates/AFTER_INSTALL
|
|
216
237
|
- lib/generators/hr_lite/install/templates/initializer.rb
|