hr_lite 0.21.3 → 0.22.1
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 +75 -0
- data/README.md +54 -2
- data/app/assets/javascripts/hr_lite/confirm.js +18 -3
- data/app/assets/javascripts/hr_lite/geo_punch.js +65 -10
- data/app/assets/javascripts/hr_lite/nav.js +17 -0
- data/app/assets/javascripts/hr_lite/select_filter.js +46 -0
- data/app/assets/stylesheets/hr_lite/hr_lite.css +219 -79
- data/app/controllers/hr_lite/admin/assets_controller.rb +1 -1
- data/app/controllers/hr_lite/admin/attendances_controller.rb +31 -0
- data/app/controllers/hr_lite/approvals_controller.rb +1 -12
- data/app/controllers/hr_lite/attendance_controller.rb +7 -0
- data/app/controllers/hr_lite/holidays_controller.rb +1 -0
- data/app/controllers/hr_lite/home_controller.rb +40 -3
- data/app/controllers/hr_lite/hr_requests_controller.rb +1 -1
- data/app/controllers/hr_lite/leave_requests_controller.rb +13 -2
- data/app/controllers/hr_lite/regularization_requests_controller.rb +10 -2
- data/app/controllers/hr_lite/tax_declarations_controller.rb +4 -0
- data/app/helpers/hr_lite/application_helper.rb +43 -30
- data/app/jobs/hr_lite/attendance_close_job.rb +6 -1
- data/app/models/hr_lite/approval.rb +5 -0
- data/app/models/hr_lite/attendance_record.rb +26 -0
- data/app/models/hr_lite/employee_profile.rb +1 -0
- data/app/models/hr_lite/hr_request.rb +2 -1
- data/app/models/hr_lite/office_location.rb +12 -0
- data/app/models/hr_lite/regularization_request.rb +10 -4
- data/app/services/hr_lite/attendance_puncher.rb +8 -3
- data/app/views/hr_lite/admin/assets/index.html.erb +3 -2
- data/app/views/hr_lite/admin/assets/new.html.erb +6 -2
- data/app/views/hr_lite/admin/attendances/index.html.erb +37 -6
- data/app/views/hr_lite/admin/attendances/show.html.erb +11 -7
- data/app/views/hr_lite/admin/attendances/week.html.erb +42 -0
- data/app/views/hr_lite/admin/checklists/index.html.erb +1 -1
- data/app/views/hr_lite/admin/comp_off_requests/index.html.erb +2 -2
- data/app/views/hr_lite/admin/comp_off_requests/show.html.erb +2 -2
- data/app/views/hr_lite/admin/documents/index.html.erb +1 -1
- data/app/views/hr_lite/admin/employees/_form.html.erb +15 -7
- data/app/views/hr_lite/admin/employees/show.html.erb +5 -5
- data/app/views/hr_lite/admin/expenses/index.html.erb +2 -2
- data/app/views/hr_lite/admin/leave_balances/index.html.erb +3 -3
- data/app/views/hr_lite/admin/leave_requests/index.html.erb +2 -2
- data/app/views/hr_lite/admin/leave_requests/show.html.erb +4 -6
- data/app/views/hr_lite/admin/loans/new.html.erb +2 -1
- data/app/views/hr_lite/admin/overview/index.html.erb +3 -3
- data/app/views/hr_lite/admin/regularization_requests/index.html.erb +1 -1
- data/app/views/hr_lite/admin/shared/_approvals_tabs.html.erb +6 -5
- data/app/views/hr_lite/appraisals/show.html.erb +1 -1
- data/app/views/hr_lite/approvals/index.html.erb +1 -1
- data/app/views/hr_lite/attendance/_month_grid.html.erb +21 -26
- data/app/views/hr_lite/attendance/_punch_card.html.erb +32 -10
- data/app/views/hr_lite/attendance/show.html.erb +36 -7
- data/app/views/hr_lite/benefits/index.html.erb +1 -1
- data/app/views/hr_lite/calendar/show.html.erb +29 -22
- data/app/views/hr_lite/comp_off_requests/index.html.erb +3 -3
- data/app/views/hr_lite/comp_off_requests/new.html.erb +3 -2
- data/app/views/hr_lite/documents/index.html.erb +32 -30
- data/app/views/hr_lite/employee_profiles/show.html.erb +2 -2
- data/app/views/hr_lite/expenses/index.html.erb +17 -35
- data/app/views/hr_lite/expenses/new.html.erb +11 -6
- data/app/views/hr_lite/holidays/_next_holiday.html.erb +11 -8
- data/app/views/hr_lite/holidays/index.html.erb +6 -6
- data/app/views/hr_lite/home/index.html.erb +29 -19
- data/app/views/hr_lite/hr_requests/index.html.erb +7 -24
- data/app/views/hr_lite/hr_requests/new.html.erb +7 -5
- data/app/views/hr_lite/hr_requests/show.html.erb +4 -0
- data/app/views/hr_lite/kudos/index.html.erb +4 -3
- data/app/views/hr_lite/leave_balances/index.html.erb +14 -5
- data/app/views/hr_lite/leave_requests/_balance_chips.html.erb +5 -3
- data/app/views/hr_lite/leave_requests/_out_list.html.erb +16 -0
- data/app/views/hr_lite/leave_requests/index.html.erb +8 -21
- data/app/views/hr_lite/leave_requests/new.html.erb +22 -9
- data/app/views/hr_lite/leave_requests/show.html.erb +3 -5
- data/app/views/hr_lite/loans/index.html.erb +18 -20
- data/app/views/hr_lite/policies/index.html.erb +1 -1
- data/app/views/hr_lite/regularization_requests/index.html.erb +2 -2
- data/app/views/hr_lite/regularization_requests/new.html.erb +11 -8
- data/app/views/hr_lite/resignations/show.html.erb +1 -1
- data/app/views/hr_lite/salary_slips/_slip_detail.html.erb +9 -3
- data/app/views/hr_lite/salary_slips/index.html.erb +48 -44
- data/app/views/hr_lite/shared/_bell.html.erb +1 -1
- data/app/views/hr_lite/shared/_form_errors.html.erb +1 -1
- data/app/views/hr_lite/tax_declarations/show.html.erb +24 -19
- data/app/views/hr_lite/team/show.html.erb +2 -2
- data/app/views/layouts/hr_lite/application.html.erb +24 -8
- data/config/routes.rb +3 -1
- data/lib/hr_lite/configuration.rb +16 -2
- data/lib/hr_lite/notifications.rb +1 -0
- data/lib/hr_lite/version.rb +1 -1
- metadata +4 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<% content_for(:page_title) { "Weekly hours" } %>
|
|
2
|
+
<div class="hrl-page__head">
|
|
3
|
+
<h1 class="hrl-page__title">Weekly hours</h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class="hrl-row hrl-row--mb">
|
|
7
|
+
<a class="hrl-btn" href="<%= hr_lite.week_admin_attendances_path(date: @monday - 7) %>" aria-label="Previous week">←</a>
|
|
8
|
+
<strong><%= @monday.strftime("%d %b") %> – <%= (@monday + 4).strftime("%d %b %Y") %></strong>
|
|
9
|
+
<a class="hrl-btn" href="<%= hr_lite.week_admin_attendances_path(date: @monday + 7) %>" aria-label="Next week">→</a>
|
|
10
|
+
<a class="hrl-btn" href="<%= hr_lite.admin_attendances_path %>">Day view</a>
|
|
11
|
+
</div>
|
|
12
|
+
<p class="hrl-small hrl-muted">Monday to Friday only — Saturday is not counted. The target drops by a day for each holiday or full-day leave<%= ", and this week counts only the days already over" if @monday + 4 >= Date.current %>.</p>
|
|
13
|
+
|
|
14
|
+
<div class="hrl-kpis">
|
|
15
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= @rows.size %></div><div class="hrl-kpi__label">People</div></div>
|
|
16
|
+
<div class="hrl-kpi"><div class="hrl-kpi__value"><%= @rows.count { |r| r[:below] } %></div><div class="hrl-kpi__label">Below target</div></div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="hrl-table-wrap">
|
|
20
|
+
<table class="hrl-table hrl-table--stack">
|
|
21
|
+
<thead><tr><th>Employee</th><th>Hours</th><th>Avg / day</th><th>Target</th><th>Status</th></tr></thead>
|
|
22
|
+
<tbody>
|
|
23
|
+
<% @rows.each do |row| %>
|
|
24
|
+
<tr>
|
|
25
|
+
<td data-label="Employee"><a class="hrl-card__link" href="<%= hr_lite.admin_attendance_path(row[:user].id, month: @monday.strftime("%Y-%m")) %>"><%= hr_display_name(row[:user]) %></a></td>
|
|
26
|
+
<td data-label="Hours"><%= row[:hours].round(1) %>h</td>
|
|
27
|
+
<td data-label="Avg / day"><%= row[:avg] ? "#{row[:avg].round(1)}h" : "—" %></td>
|
|
28
|
+
<td data-label="Target"><%= row[:target] ? "#{row[:target].round(1)}h" : "—" %></td>
|
|
29
|
+
<td data-label="Status">
|
|
30
|
+
<% if row[:below] %>
|
|
31
|
+
<span class="hrl-badge hrl-badge--bad">Below target</span>
|
|
32
|
+
<% elsif row[:target]&.positive? %>
|
|
33
|
+
<span class="hrl-badge hrl-badge--ok">Met</span>
|
|
34
|
+
<% else %>
|
|
35
|
+
<span class="hrl-badge hrl-badge--muted">—</span>
|
|
36
|
+
<% end %>
|
|
37
|
+
</td>
|
|
38
|
+
</tr>
|
|
39
|
+
<% end %>
|
|
40
|
+
</tbody>
|
|
41
|
+
</table>
|
|
42
|
+
</div>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<td data-label="Due"><%= item.due_on&.strftime("%d %b %Y") || "—" %></td>
|
|
38
38
|
<td data-label="">
|
|
39
39
|
<%= form_with url: hr_lite.complete_admin_checklist_path(item), method: :post do %>
|
|
40
|
-
<%= text_field_tag :note, nil, placeholder: "Note" %>
|
|
40
|
+
<%= text_field_tag :note, nil, placeholder: "Note", class: "hrl-input" %>
|
|
41
41
|
<%= submit_tag "Done", class: "hrl-btn hrl-btn--primary" %>
|
|
42
42
|
<% end %>
|
|
43
43
|
</td>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
<%= render "hr_lite/admin/shared/approvals_tabs", active: :comp_off %>
|
|
7
7
|
|
|
8
|
-
<div class="hrl-row
|
|
8
|
+
<div class="hrl-row hrl-row--mb">
|
|
9
9
|
<span class="hrl-small hrl-muted">Status</span>
|
|
10
10
|
<% HrLite::CompOffRequest::STATUSES.each do |status| %>
|
|
11
11
|
<a class="hrl-btn <%= 'hrl-btn--primary' if @status == status %>"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<tr>
|
|
24
24
|
<td data-label="Employee"><%= hr_display_name(request.user) %></td>
|
|
25
25
|
<td data-label="Day worked"><%= request.date_worked.strftime("%a, %d %b %Y") %></td>
|
|
26
|
-
<td data-label="Credit" class="hrl-num"><%= request.credit_days
|
|
26
|
+
<td data-label="Credit" class="hrl-num"><%= hrl_days(request.credit_days) %></td>
|
|
27
27
|
<td data-label=""><a class="hrl-btn" href="<%= hr_lite.admin_comp_off_request_path(request) %>">Open</a></td>
|
|
28
28
|
</tr>
|
|
29
29
|
<% end %>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<section class="hrl-card">
|
|
10
10
|
<dl class="hrl-deflist">
|
|
11
11
|
<dt>Day worked</dt><dd><%= @request.date_worked.strftime("%A, %d %B %Y") %></dd>
|
|
12
|
-
<dt>Credit</dt><dd><%= @request.credit_days
|
|
12
|
+
<dt>Credit</dt><dd><%= hrl_days(@request.credit_days) %> day</dd>
|
|
13
13
|
<dt>Reason</dt><dd><%= @request.reason %></dd>
|
|
14
14
|
<dt>Status</dt><dd><%= hrl_request_status_badge(@request.status) %></dd>
|
|
15
15
|
<dt>Punch that day</dt>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<%= f.text_area :decision_note, id: "approve_note" %>
|
|
41
41
|
</div>
|
|
42
42
|
<div class="hrl-form-actions">
|
|
43
|
-
<%= f.button "Approve — credit #{@request.credit_days
|
|
43
|
+
<%= f.button "Approve — credit #{hrl_days(@request.credit_days)} day",
|
|
44
44
|
type: :submit, class: "hrl-btn hrl-btn--primary" %>
|
|
45
45
|
</div>
|
|
46
46
|
<% end %>
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<%= button_to "Verify", hr_lite.verify_admin_document_path(doc),
|
|
45
45
|
method: :post, class: "hrl-btn hrl-btn--primary" %>
|
|
46
46
|
<%= form_with url: hr_lite.reject_admin_document_path(doc), method: :post, local: true do %>
|
|
47
|
-
<%= text_field_tag :note, nil, placeholder: "What is wrong with it" %>
|
|
47
|
+
<%= text_field_tag :note, nil, placeholder: "What is wrong with it", class: "hrl-input" %>
|
|
48
48
|
<%= submit_tag "Reject", class: "hrl-btn" %>
|
|
49
49
|
<% end %>
|
|
50
50
|
</td>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<section class="hrl-card">
|
|
2
2
|
<%= form_with model: profile, url: url, method: method, scope: :employee_profile, local: true do |f| %>
|
|
3
3
|
<%= render "hr_lite/shared/form_errors", record: profile %>
|
|
4
|
-
<%= f.hidden_field :user_id %>
|
|
5
4
|
<% if profile.new_record? && profile.user_id.blank? %>
|
|
6
5
|
<div class="hrl-field">
|
|
7
6
|
<%= f.label :user_id, "Existing staff member" %>
|
|
8
7
|
<%= f.select :user_id, HrLite.employees.map { |u| [ HrLite.display_name(u), u.id ] },
|
|
9
|
-
include_blank: "— onboard a brand-new person below —"
|
|
8
|
+
{ include_blank: "— onboard a brand-new person below —" },
|
|
9
|
+
data: { hrl_filter: "Filter existing staff" } %>
|
|
10
10
|
</div>
|
|
11
|
-
<fieldset class="hrl-card"
|
|
11
|
+
<fieldset class="hrl-card">
|
|
12
12
|
<legend class="hrl-card__title">New login (onboarding)</legend>
|
|
13
13
|
<p class="hrl-hint">Fill these ONLY for someone who has no account yet — their sign-in is
|
|
14
14
|
created with the profile; there is no self sign-up.</p>
|
|
@@ -27,11 +27,13 @@
|
|
|
27
27
|
password. Fill it only if you want to hand a password over yourself.</p>
|
|
28
28
|
</div>
|
|
29
29
|
</fieldset>
|
|
30
|
+
<% else %>
|
|
31
|
+
<%= f.hidden_field :user_id %>
|
|
30
32
|
<% end %>
|
|
31
33
|
<% if profile.persisted? %>
|
|
32
34
|
<div class="hrl-field">
|
|
33
35
|
<%= f.label :employee_code %>
|
|
34
|
-
<input class="hrl-input" type="text" value="<%= profile.employee_code %>" disabled>
|
|
36
|
+
<input class="hrl-input" type="text" id="employee_profile_employee_code" value="<%= profile.employee_code %>" disabled>
|
|
35
37
|
<p class="hrl-hint">System-assigned; the prefix lives under Settings.</p>
|
|
36
38
|
</div>
|
|
37
39
|
<% else %>
|
|
@@ -51,15 +53,21 @@
|
|
|
51
53
|
<% end %>
|
|
52
54
|
<%= f.select :manager_id,
|
|
53
55
|
candidates.map { |u| [ HrLite.display_name(u), u.id ] },
|
|
54
|
-
include_blank: "— nobody (top of the org) —"
|
|
56
|
+
{ include_blank: "— nobody (top of the org) —" },
|
|
57
|
+
data: { hrl_filter: "Filter Reports to" } %>
|
|
55
58
|
</div>
|
|
56
59
|
<div class="hrl-field"><%= f.label :department %><%= f.text_field :department %></div>
|
|
57
60
|
<div class="hrl-field"><%= f.label :work_location %><%= f.text_field :work_location %></div>
|
|
58
61
|
<div class="hrl-field"><%= f.label :date_of_birth %><%= f.date_field :date_of_birth %></div>
|
|
59
62
|
<div class="hrl-field"><%= f.label :date_of_joining %><%= f.date_field :date_of_joining %></div>
|
|
60
63
|
<div class="hrl-field">
|
|
61
|
-
<%= f.label :blood_group %>
|
|
62
|
-
|
|
64
|
+
<%= f.label :blood_group, id: "hrl-blood-group", for: nil %>
|
|
65
|
+
<div class="hrl-chiprow" role="radiogroup" aria-labelledby="hrl-blood-group">
|
|
66
|
+
<label><%= f.radio_button :blood_group, "" %><span>Not set</span></label>
|
|
67
|
+
<% HrLite::EmployeeProfile::BLOOD_GROUPS.each do |g| %>
|
|
68
|
+
<label><%= f.radio_button :blood_group, g %><span><%= g %></span></label>
|
|
69
|
+
<% end %>
|
|
70
|
+
</div>
|
|
63
71
|
</div>
|
|
64
72
|
<div class="hrl-field"><%= f.label :emergency_contact, "Emergency contact (printed on the ID card)" %><%= f.telephone_field :emergency_contact %></div>
|
|
65
73
|
<div class="hrl-field">
|
|
@@ -87,15 +87,15 @@
|
|
|
87
87
|
<h2 class="hrl-card__title">Salary structures</h2>
|
|
88
88
|
<% if @structures.any? %>
|
|
89
89
|
<div class="hrl-table-wrap">
|
|
90
|
-
<table class="hrl-table">
|
|
90
|
+
<table class="hrl-table hrl-table--stack">
|
|
91
91
|
<thead><tr><th>Effective</th><th class="hrl-num">Basic</th><th class="hrl-num">Gross</th><th></th></tr></thead>
|
|
92
92
|
<tbody>
|
|
93
93
|
<% @structures.each do |structure| %>
|
|
94
94
|
<tr>
|
|
95
|
-
<td><%= structure.effective_from.strftime("%b %Y") %></td>
|
|
96
|
-
<td class="hrl-num"><%= hrl_money(structure.basic) %></td>
|
|
97
|
-
<td class="hrl-num"><%= hrl_money(structure.monthly_gross) %></td>
|
|
98
|
-
<td><a class="hrl-
|
|
95
|
+
<td data-label="Effective"><%= structure.effective_from.strftime("%b %Y") %></td>
|
|
96
|
+
<td data-label="Basic" class="hrl-num"><%= hrl_money(structure.basic) %></td>
|
|
97
|
+
<td data-label="Gross" class="hrl-num"><%= hrl_money(structure.monthly_gross) %></td>
|
|
98
|
+
<td data-label=""><a class="hrl-btn" href="<%= hr_lite.edit_admin_employee_salary_structure_path(@profile, structure) %>">Edit</a></td>
|
|
99
99
|
</tr>
|
|
100
100
|
<% end %>
|
|
101
101
|
</tbody>
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
<%= submit_tag "Approve", class: "hrl-btn hrl-btn--primary" %>
|
|
35
35
|
<% end %>
|
|
36
36
|
<%= form_with url: hr_lite.reject_admin_expense_path(expense), method: :post do %>
|
|
37
|
-
<%= text_field_tag :decision_note, nil, placeholder: "Why not" %>
|
|
37
|
+
<%= text_field_tag :decision_note, nil, placeholder: "Why not", class: "hrl-input" %>
|
|
38
38
|
<%= submit_tag "Reject", class: "hrl-btn" %>
|
|
39
39
|
<% end %>
|
|
40
40
|
<% elsif expense.approved? %>
|
|
41
41
|
<%= form_with url: hr_lite.reimburse_admin_expense_path(expense), method: :post do %>
|
|
42
|
-
<%= text_field_tag :period_month, Date.current.strftime("%Y-%m"), size: 8 %>
|
|
42
|
+
<%= text_field_tag :period_month, Date.current.strftime("%Y-%m"), size: 8, class: "hrl-input" %>
|
|
43
43
|
<%= submit_tag "Mark reimbursed", class: "hrl-btn" %>
|
|
44
44
|
<% end %>
|
|
45
45
|
<% end %>
|
|
@@ -7,17 +7,17 @@
|
|
|
7
7
|
|
|
8
8
|
<section class="hrl-card">
|
|
9
9
|
<div class="hrl-table-wrap">
|
|
10
|
-
<table class="hrl-table">
|
|
10
|
+
<table class="hrl-table hrl-table--stack">
|
|
11
11
|
<thead>
|
|
12
12
|
<tr><th>Employee</th><% @types.each do |type| %><th class="hrl-num"><%= type.code %></th><% end %></tr>
|
|
13
13
|
</thead>
|
|
14
14
|
<tbody>
|
|
15
15
|
<% @employees.each do |employee| %>
|
|
16
16
|
<tr>
|
|
17
|
-
<td><%= hr_display_name(employee) %></td>
|
|
17
|
+
<td data-label="Employee"><%= hr_display_name(employee) %></td>
|
|
18
18
|
<% @types.each do |type| %>
|
|
19
19
|
<% balance = HrLite::LeaveBalance.for(employee, type, @year) %>
|
|
20
|
-
<td class="hrl-num"><strong><%= balance.available
|
|
20
|
+
<td data-label="<%= type.code %>" class="hrl-num"><span><strong><%= hrl_days(balance.available) %></strong> left<br><span class="hrl-small hrl-muted"><%= hrl_days(balance.used) %>/<%= hrl_days(balance.entitled) %> used</span></span></td>
|
|
21
21
|
<% end %>
|
|
22
22
|
</tr>
|
|
23
23
|
<% end %>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<%= render "hr_lite/admin/shared/approvals_tabs", active: :leaves %>
|
|
10
10
|
|
|
11
|
-
<div class="hrl-row
|
|
11
|
+
<div class="hrl-row hrl-row--mb">
|
|
12
12
|
<% HrLite::LeaveRequest::STATUSES.each do |status| %>
|
|
13
13
|
<a class="hrl-btn <%= 'hrl-btn--primary' if @status == status %>"
|
|
14
14
|
href="<%= hr_lite.admin_leave_requests_path(status: status) %>"><%= status.humanize %></a>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<td data-label="Employee"><%= hr_display_name(request.user) %></td>
|
|
27
27
|
<td data-label="Type"><%= request.leave_type.name %></td>
|
|
28
28
|
<td data-label="Dates"><%= request.date_range_label %></td>
|
|
29
|
-
<td data-label="Days" class="hrl-num"><%= request.days_count
|
|
29
|
+
<td data-label="Days" class="hrl-num"><%= hrl_days(request.days_count) %></td>
|
|
30
30
|
<td data-label=""><a class="hrl-btn" href="<%= hr_lite.admin_leave_request_path(request) %>">Open</a></td>
|
|
31
31
|
</tr>
|
|
32
32
|
<% end %>
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
<% content_for(:page_title) { "Leave decision" } %>
|
|
2
|
+
<a class="hrl-backlink" href="<%= hr_lite.admin_leave_requests_path %>"><span aria-hidden="true">‹</span> Approvals</a>
|
|
2
3
|
<div class="hrl-page__head">
|
|
3
4
|
<h1 class="hrl-page__title"><%= hr_display_name(@request.user) %></h1>
|
|
4
|
-
<div class="hrl-page__actions">
|
|
5
|
-
<a class="hrl-btn" href="<%= hr_lite.admin_leave_requests_path %>">Back</a>
|
|
6
|
-
</div>
|
|
7
5
|
</div>
|
|
8
6
|
|
|
9
7
|
<section class="hrl-card">
|
|
@@ -12,14 +10,14 @@
|
|
|
12
10
|
<dt>Dates</dt><dd><%= @request.date_range_label %></dd>
|
|
13
11
|
<%# Counted live, not from the create-time cache: a holiday added after
|
|
14
12
|
the request was filed changes what the balance is actually debited. %>
|
|
15
|
-
<dt>Working days</dt><dd><%= HrLite::LeaveDayCounter.count(@request)
|
|
13
|
+
<dt>Working days</dt><dd><%= hrl_days(HrLite::LeaveDayCounter.count(@request)) %></dd>
|
|
16
14
|
<dt>Status</dt><dd><span class="hrl-badge"><%= @request.status.humanize %></span></dd>
|
|
17
15
|
<% if @request.reason.present? %><dt>Reason</dt><dd><%= @request.reason %></dd><% end %>
|
|
18
16
|
<% unless @request.leave_type.unlimited? %>
|
|
19
17
|
<dt>Balance</dt>
|
|
20
|
-
<dd><%= @balance.available
|
|
18
|
+
<dd><%= hrl_days(@balance.available) %> of <%= hrl_days(@balance.entitled) %> available</dd>
|
|
21
19
|
<% if (@request.pending? || @request.approved?) && (short = @request.days_beyond_balance).positive? %>
|
|
22
|
-
<dt>Loss of pay</dt><dd><%= short
|
|
20
|
+
<dt>Loss of pay</dt><dd><%= hrl_days(short) %> day(s) beyond the balance will be unpaid</dd>
|
|
23
21
|
<% end %>
|
|
24
22
|
<% end %>
|
|
25
23
|
<% if @request.decision_note.present? %><dt>Decision note</dt><dd><%= @request.decision_note %></dd><% end %>
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
<div class="hrl-field">
|
|
13
13
|
<%= f.label :user_id, "Employee" %>
|
|
14
14
|
<%= f.select :user_id, options_for_select(HrLite.employees.map { |u| [ hr_display_name(u), u.id ] },
|
|
15
|
-
@loan.user_id)
|
|
15
|
+
@loan.user_id),
|
|
16
|
+
{}, data: { hrl_filter: "Type a name to filter" } %>
|
|
16
17
|
</div>
|
|
17
18
|
<div class="hrl-field">
|
|
18
19
|
<%= f.label :principal, "Amount lent (₹)" %>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<div class="hrl-feed__item">
|
|
21
21
|
<div class="hrl-feed__body">
|
|
22
22
|
<strong><%= hr_display_name(request.user) %></strong>
|
|
23
|
-
— <%= request.leave_type.name %>, <%= request.date_range_label %> (<%= request.days_count
|
|
23
|
+
— <%= request.leave_type.name %>, <%= request.date_range_label %> (<%= hrl_days(request.days_count) %> d)
|
|
24
24
|
</div>
|
|
25
25
|
<a class="hrl-btn" href="<%= hr_lite.admin_leave_request_path(request) %>">Decide</a>
|
|
26
26
|
</div>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
<div class="hrl-feed__body">
|
|
33
33
|
<strong><%= hr_display_name(request.user) %></strong>
|
|
34
34
|
— comp-off for <%= request.date_worked.strftime("%d %b") %>
|
|
35
|
-
(<%= request.credit_days
|
|
35
|
+
(<%= hrl_days(request.credit_days) %> d)
|
|
36
36
|
</div>
|
|
37
37
|
<a class="hrl-btn" href="<%= hr_lite.admin_comp_off_request_path(request) %>">Decide</a>
|
|
38
38
|
</div>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<a class="hrl-btn" href="<%= hr_lite.admin_regularization_request_path(request) %>">Decide</a>
|
|
47
47
|
</div>
|
|
48
48
|
<% end %>
|
|
49
|
-
<a class="hrl-
|
|
49
|
+
<a class="hrl-card__link" href="<%= hr_lite.admin_leave_requests_path %>">All requests</a>
|
|
50
50
|
</section>
|
|
51
51
|
<% end %>
|
|
52
52
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
<%= render "hr_lite/admin/shared/approvals_tabs", active: :regularizations %>
|
|
7
7
|
|
|
8
|
-
<div class="hrl-row
|
|
8
|
+
<div class="hrl-row hrl-row--mb">
|
|
9
9
|
<span class="hrl-small hrl-muted">Status</span>
|
|
10
10
|
<% HrLite::RegularizationRequest::STATUSES.each do |status| %>
|
|
11
11
|
<a class="hrl-btn <%= 'hrl-btn--primary' if @status == status %>"
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<%# locals: active (:leaves | :comp_off | :regularizations | :balances) %>
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
<% tab = ->(key) { tag.attributes(class: [ "hrl-btn", ("hrl-btn--primary" if active == key) ], aria: { current: ("page" if active == key) }) } %>
|
|
3
|
+
<div class="hrl-row hrl-row--mb hrl-row--tabs">
|
|
4
|
+
<a <%= tab.(:leaves) %>
|
|
4
5
|
href="<%= hr_lite.admin_leave_requests_path %>">Leaves</a>
|
|
5
|
-
<a
|
|
6
|
+
<a <%= tab.(:comp_off) %>
|
|
6
7
|
href="<%= hr_lite.admin_comp_off_requests_path %>">Comp-off
|
|
7
8
|
<% if (n = HrLite::CompOffRequest.pending.count).positive? %><span class="hrl-badge hrl-badge--warn"><%= n %></span><% end %></a>
|
|
8
|
-
<a
|
|
9
|
+
<a <%= tab.(:regularizations) %>
|
|
9
10
|
href="<%= hr_lite.admin_regularization_requests_path %>">Regularization
|
|
10
11
|
<% if (n = HrLite::RegularizationRequest.pending.count).positive? %><span class="hrl-badge hrl-badge--warn"><%= n %></span><% end %></a>
|
|
11
|
-
<a
|
|
12
|
+
<a <%= tab.(:balances) %>
|
|
12
13
|
href="<%= hr_lite.admin_leave_balances_path %>">Balances</a>
|
|
13
14
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<% content_for(:page_title) { "Appraisal" } %>
|
|
2
|
+
<a class="hrl-backlink" href="<%= hr_lite.appraisals_path %>"><span aria-hidden="true">‹</span> Appraisals</a>
|
|
2
3
|
<div class="hrl-page__head">
|
|
3
4
|
<h1 class="hrl-page__title">Appraisal — <%= @appraisal.period_label %></h1>
|
|
4
|
-
<div class="hrl-page__actions"><a class="hrl-btn" href="<%= hr_lite.appraisals_path %>">Back</a></div>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
<section class="hrl-card">
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
<td data-label="Waiting"><%= time_ago_in_words(approval.created_at) %></td>
|
|
40
40
|
<td data-label="">
|
|
41
41
|
<% if (path = hrl_approval_path(approval)) %>
|
|
42
|
-
<a class="hrl-
|
|
42
|
+
<a class="hrl-btn" href="<%= path %>">Open</a>
|
|
43
43
|
<% end %>
|
|
44
44
|
</td>
|
|
45
45
|
</tr>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
<%# locals: month (Date, any day in month), day_status (HrLite::DayStatus), link_builder (optional lambda date -> url) %>
|
|
1
|
+
<%# locals: month (Date, any day in month), day_status (HrLite::DayStatus), link_builder (optional lambda date -> url or nil), pending_dates (optional Set of dates with a pending ticket) %>
|
|
2
2
|
<% first = month.beginning_of_month
|
|
3
3
|
last = month.end_of_month
|
|
4
|
-
link_builder = local_assigns[:link_builder]
|
|
5
|
-
|
|
4
|
+
link_builder = local_assigns[:link_builder]
|
|
5
|
+
pending_dates = local_assigns[:pending_dates]
|
|
6
|
+
states = HrLite::ApplicationHelper::DAY_STATES %>
|
|
7
|
+
<div class="hrl-mgrid" role="group" aria-label="Attendance for <%= month.strftime('%B %Y') %>">
|
|
6
8
|
<% %w[Mo Tu We Th Fr Sa Su].each do |d| %>
|
|
7
9
|
<div class="hrl-mgrid__head"><%= d %></div>
|
|
8
10
|
<% end %>
|
|
@@ -11,31 +13,24 @@
|
|
|
11
13
|
<% end %>
|
|
12
14
|
<% (first..last).each do |date| %>
|
|
13
15
|
<% day = day_status.for(date)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<% if link_builder %>
|
|
24
|
-
<a href="<%= link_builder.call(date) %>"><%= date.day %></a>
|
|
25
|
-
<% else %>
|
|
26
|
-
<%= date.day %>
|
|
27
|
-
<% end %>
|
|
28
|
-
</span>
|
|
29
|
-
<% if day.record&.check_in_at %>
|
|
30
|
-
<span class="hrl-mgrid__tag"><%= day.record.check_in_at.strftime("%H:%M") %><% if day.record.check_out_at %><br><%= day.record.check_out_at.strftime("%H:%M") %><% end %></span>
|
|
31
|
-
<% elsif day.kind == :absent %>
|
|
32
|
-
<span class="hrl-mgrid__tag">absent</span>
|
|
33
|
-
<% end %>
|
|
16
|
+
# Today with no punch yet is not a lost day; only the views say so (payroll still reads DayStatus).
|
|
17
|
+
code, word, mod = date == Date.current && day.kind == :absent ? [ "Today", "Today, not checked in yet", "today" ] : states[day.kind] %>
|
|
18
|
+
<% pending = pending_dates&.include?(date) %>
|
|
19
|
+
<div class="<%= class_names("hrl-mgrid__day", "hrl-mgrid__day--#{mod}", "hrl-mgrid__day--today": date == Date.current, "hrl-mgrid__day--pending": pending) %>" role="group"
|
|
20
|
+
aria-label="<%= date.strftime('%-d %b') %>, <%= word %><%= ', worked' if %i[holiday weekend].include?(day.kind) && day.record&.check_in_at %><%= ', Flagged' if day.record&.flagged? %><%= ', fix pending' if pending %>">
|
|
21
|
+
<% if day.record&.flagged? %><span class="hrl-mgrid__flag" aria-hidden="true"></span><% end %>
|
|
22
|
+
<% url = link_builder&.call(date) %>
|
|
23
|
+
<span class="hrl-mgrid__num"><%= url ? link_to(date.day, url) : date.day %></span>
|
|
24
|
+
<% if code %><span class="hrl-mgrid__tag"><%= code %></span><% end %>
|
|
34
25
|
</div>
|
|
35
26
|
<% end %>
|
|
36
27
|
</div>
|
|
37
28
|
<div class="hrl-legend hrl-small">
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
29
|
+
<% states.except(:upcoming).each_value do |code, word, mod| %>
|
|
30
|
+
<span class="hrl-badge hrl-mgrid__key hrl-mgrid__day--<%= mod %>"><%= code %> <%= word %></span>
|
|
31
|
+
<% end %>
|
|
32
|
+
<span class="hrl-badge hrl-mgrid__key hrl-mgrid__day--today">Today</span>
|
|
33
|
+
<span class="hrl-badge hrl-mgrid__key"><span class="hrl-mgrid__flag" aria-hidden="true"></span> Flagged</span>
|
|
34
|
+
<% if pending_dates %><span class="hrl-badge hrl-mgrid__key hrl-mgrid__day--pending">Fix pending</span><% end %>
|
|
35
|
+
<span class="hrl-badge hrl-mgrid__key hrl-mgrid__day--muted">Upcoming</span>
|
|
41
36
|
</div>
|
|
@@ -9,15 +9,17 @@
|
|
|
9
9
|
<section class="hrl-card">
|
|
10
10
|
<h2 class="hrl-card__title">Today, <%= Date.current.strftime("%d %b") %></h2>
|
|
11
11
|
|
|
12
|
-
<div class="hrl-row hrl-
|
|
13
|
-
<% if record&.check_in_at %>
|
|
12
|
+
<div class="hrl-row hrl-row--mb hrl-small">
|
|
13
|
+
<% if record&.check_in_at && !record.check_out_at %>
|
|
14
|
+
<span class="hrl-badge hrl-badge--ok">In since <%= record.check_in_at.strftime("%H:%M") %> · <%= hrl_duration(Time.current - record.check_in_at) %> so far</span>
|
|
15
|
+
<% elsif record&.check_in_at %>
|
|
14
16
|
<span class="hrl-badge hrl-badge--ok">In <%= record.check_in_at.strftime("%H:%M") %></span>
|
|
15
17
|
<% end %>
|
|
16
18
|
<% if record&.check_out_at %>
|
|
17
19
|
<span class="hrl-badge hrl-badge--muted">Out <%= record.check_out_at.strftime("%H:%M") %></span>
|
|
18
20
|
<% end %>
|
|
19
21
|
<% if record&.flagged? %>
|
|
20
|
-
<span class="hrl-badge hrl-badge--bad"
|
|
22
|
+
<span class="hrl-badge hrl-badge--bad">Flagged</span>
|
|
21
23
|
<% end %>
|
|
22
24
|
<% if open_yesterday %>
|
|
23
25
|
<span class="hrl-badge hrl-badge--warn">Yesterday still open —
|
|
@@ -26,36 +28,56 @@
|
|
|
26
28
|
<span class="hrl-muted">Not checked in yet.</span>
|
|
27
29
|
<% end %>
|
|
28
30
|
</div>
|
|
31
|
+
<% if record&.flagged? %>
|
|
32
|
+
<p class="hrl-small">Flagged: <%= record.flag_note %></p>
|
|
33
|
+
<% end %>
|
|
29
34
|
|
|
30
35
|
<% if open_yesterday %>
|
|
31
36
|
<%= form_with url: hr_lite.check_out_attendance_path, method: :post, local: true,
|
|
32
|
-
html: { data: { "hrl-geo-punch": true } } do %>
|
|
37
|
+
html: { data: { "hrl-geo-punch": true, "hrl-geo-required": HrLite.config.require_punch_location.presence } } do %>
|
|
33
38
|
<input type="hidden" name="lat"><input type="hidden" name="lng">
|
|
34
39
|
<input type="hidden" name="accuracy_m"><input type="hidden" name="geo_status">
|
|
35
40
|
<button type="submit" class="hrl-btn hrl-btn--big hrl-btn--block">
|
|
36
41
|
Check out yesterday's shift
|
|
37
42
|
</button>
|
|
38
|
-
<p class="hrl-small hrl-muted" data-hrl-geo-status
|
|
43
|
+
<p class="hrl-small hrl-muted" data-hrl-geo-status role="status" aria-live="polite"></p>
|
|
39
44
|
<% end %>
|
|
40
45
|
<% elsif record&.check_in_at.blank? %>
|
|
41
46
|
<%= form_with url: hr_lite.check_in_attendance_path, method: :post, local: true,
|
|
42
|
-
html: { data: { "hrl-geo-punch": true } } do %>
|
|
47
|
+
html: { data: { "hrl-geo-punch": true, "hrl-geo-required": HrLite.config.require_punch_location.presence } } do %>
|
|
43
48
|
<input type="hidden" name="lat"><input type="hidden" name="lng">
|
|
44
49
|
<input type="hidden" name="accuracy_m"><input type="hidden" name="geo_status">
|
|
45
50
|
<button type="submit" class="hrl-btn hrl-btn--primary hrl-btn--big hrl-btn--block">Check in</button>
|
|
46
|
-
<p class="hrl-small hrl-muted" data-hrl-geo-status
|
|
51
|
+
<p class="hrl-small hrl-muted" data-hrl-geo-status role="status" aria-live="polite"></p>
|
|
47
52
|
<% end %>
|
|
48
53
|
<% else %>
|
|
49
54
|
<%= form_with url: hr_lite.check_out_attendance_path, method: :post, local: true,
|
|
50
|
-
html: { data: { "hrl-geo-punch": true } } do %>
|
|
55
|
+
html: { data: { "hrl-geo-punch": true, "hrl-geo-required": HrLite.config.require_punch_location.presence } } do %>
|
|
51
56
|
<input type="hidden" name="lat"><input type="hidden" name="lng">
|
|
52
57
|
<input type="hidden" name="accuracy_m"><input type="hidden" name="geo_status">
|
|
53
58
|
<button type="submit" class="hrl-btn hrl-btn--big hrl-btn--block">
|
|
54
59
|
<%= record.check_out_at ? "Update check-out" : "Check out" %>
|
|
55
60
|
</button>
|
|
56
|
-
<p class="hrl-small hrl-muted" data-hrl-geo-status
|
|
61
|
+
<p class="hrl-small hrl-muted" data-hrl-geo-status role="status" aria-live="polite"></p>
|
|
57
62
|
<% end %>
|
|
58
63
|
<% end %>
|
|
59
64
|
|
|
60
|
-
|
|
65
|
+
<% if local_assigns[:attention].present? %><p class="hrl-small hrl-muted hrl-mt">Needs a fix</p><% end %>
|
|
66
|
+
<% local_assigns[:attention]&.each do |date, reason| %>
|
|
67
|
+
<div class="hrl-feed__item hrl-row">
|
|
68
|
+
<div class="hrl-feed__body"><%= date.strftime("%a %-d %b") %> · <%= reason %></div>
|
|
69
|
+
<a class="hrl-btn" href="<%= hr_lite.new_regularization_request_path(date: date) %>">Fix<span class="hrl-sr-only"> <%= date.strftime("%a %-d %b") %></span></a>
|
|
70
|
+
</div>
|
|
71
|
+
<% end %>
|
|
72
|
+
|
|
73
|
+
<a class="hrl-card__link" href="<%= hr_lite.attendance_path %>">View my month</a>
|
|
74
|
+
|
|
75
|
+
<% if local_assigns.key?(:attention) %>
|
|
76
|
+
<div class="hrl-row">
|
|
77
|
+
<a class="hrl-btn" href="<%= hr_lite.new_leave_request_path %>">Apply leave</a>
|
|
78
|
+
<a class="hrl-btn" href="<%= hr_lite.new_regularization_request_path %>">Fix a punch</a>
|
|
79
|
+
<a class="hrl-btn" href="<%= hr_lite.new_comp_off_request_path %>">Comp-off</a>
|
|
80
|
+
<% if hr_lite_route?(:salary_slips_path) %><a class="hrl-btn" href="<%= hr_lite.salary_slips_path %>">Payslip</a><% end %>
|
|
81
|
+
</div>
|
|
82
|
+
<% end %>
|
|
61
83
|
</section>
|
|
@@ -6,20 +6,49 @@
|
|
|
6
6
|
<%= render "hr_lite/attendance/punch_card" %>
|
|
7
7
|
|
|
8
8
|
<section class="hrl-card">
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
<% prev_m, next_m = @month - 1.month, @month + 1.month %>
|
|
10
|
+
<div class="hrl-row hrl-row--mb">
|
|
11
|
+
<a class="hrl-btn" href="<%= hr_lite.attendance_path(month: prev_m.strftime("%Y-%m")) %>" aria-label="Previous month, <%= prev_m.strftime("%B %Y") %>"><span aria-hidden="true">‹</span> <%= prev_m.strftime("%b") %></a>
|
|
11
12
|
<strong><%= @month.strftime("%B %Y") %></strong>
|
|
12
|
-
<a class="hrl-btn" href="<%= hr_lite.attendance_path(month: (
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
<a class="hrl-btn" href="<%= hr_lite.attendance_path(month: next_m.strftime("%Y-%m")) %>" aria-label="Next month, <%= next_m.strftime("%B %Y") %>"><%= next_m.strftime("%b") %> <span aria-hidden="true">›</span></a>
|
|
14
|
+
<div class="hrl-row hrl-right">
|
|
15
|
+
<% { present: "ok", half_day: "ok", leave: nil, absent: "bad" }.each do |kind, tone| %>
|
|
16
|
+
<% code, word = HrLite::ApplicationHelper::DAY_STATES[kind] %>
|
|
17
|
+
<span class="<%= class_names("hrl-badge", "hrl-badge--#{tone}": tone) %>" role="img" aria-label="<%= word %> <%= pluralize(@counts[kind], "day") %>"><%= code %> <%= @counts[kind] %></span>
|
|
18
|
+
<% end %>
|
|
19
|
+
</div>
|
|
16
20
|
</div>
|
|
17
|
-
<%= render "hr_lite/attendance/month_grid", month: @month, day_status: @day_status
|
|
21
|
+
<%= render "hr_lite/attendance/month_grid", month: @month, day_status: @day_status, pending_dates: @pending_dates,
|
|
22
|
+
link_builder: ->(d) { hr_lite.attendance_path(month: @month.strftime("%Y-%m"), day: d.iso8601, anchor: "day") if d <= Date.current } %>
|
|
18
23
|
<p class="hrl-small hrl-muted hrl-mt">Forgot to check in or out on some day?
|
|
19
24
|
<a href="<%= hr_lite.new_regularization_request_path %>">Raise a regularization ticket</a>
|
|
20
25
|
· <a href="<%= hr_lite.regularization_requests_path %>">My tickets</a></p>
|
|
21
26
|
</section>
|
|
22
27
|
|
|
28
|
+
<% if @day %>
|
|
29
|
+
<% rec, leave = @day_info.record, @day_info.leave
|
|
30
|
+
part = rec&.half_day_part.presence || leave&.half_day_part.presence
|
|
31
|
+
open_today = @day == Date.current && @day_info.kind == :absent
|
|
32
|
+
tone = { present: "ok", half_day: "ok", absent: "bad", holiday: "warn", weekend: "muted" }[@day_info.kind] unless open_today %>
|
|
33
|
+
<section class="hrl-card" id="day">
|
|
34
|
+
<h2 class="hrl-card__title"><%= @day.strftime("%a, %-d %b") %>
|
|
35
|
+
<span class="<%= class_names("hrl-badge", "hrl-badge--#{tone}": tone) %>"><%= open_today ? "Not checked in yet" : HrLite::ApplicationHelper::DAY_STATES[@day_info.kind][1] %></span></h2>
|
|
36
|
+
<dl class="hrl-deflist">
|
|
37
|
+
<dt>In</dt><dd><%= rec&.check_in_at&.strftime("%H:%M") || "—" %></dd>
|
|
38
|
+
<dt>Out</dt><dd><%= rec&.check_out_at&.strftime("%H:%M") || "—" %></dd>
|
|
39
|
+
<dt>Worked</dt><dd><%= hrl_duration(rec&.worked_duration) %></dd>
|
|
40
|
+
<% if part %><dt>Half</dt><dd><%= HrLite::DAY_PARTS.rassoc(part)&.first %></dd><% end %>
|
|
41
|
+
<% if leave %><dt>Leave</dt><dd><%= leave.leave_type.name %></dd><% end %>
|
|
42
|
+
<% if @day_info.kind == :holiday %><dt>Holiday</dt><dd><%= HrLite::Holiday.find_by(date: @day)&.name %></dd><% end %>
|
|
43
|
+
<% if rec&.flagged? %><dt>Flag</dt><dd><%= rec.flag_note %></dd><% end %>
|
|
44
|
+
<% if @day_ticket %><dt>Ticket</dt><dd><%= hrl_request_status_badge(@day_ticket.status) %> <%= @day_ticket.times_label %></dd><% end %>
|
|
45
|
+
</dl>
|
|
46
|
+
<% unless %i[holiday weekend leave].include?(@day_info.kind) || @day_ticket&.pending? %>
|
|
47
|
+
<a class="hrl-btn hrl-btn--primary hrl-btn--block hrl-mt" href="<%= hr_lite.new_regularization_request_path(date: @day) %>">Fix this day</a>
|
|
48
|
+
<% end %>
|
|
49
|
+
</section>
|
|
50
|
+
<% end %>
|
|
51
|
+
|
|
23
52
|
<% content_for :scripts do %>
|
|
24
53
|
<%= javascript_include_tag "hr_lite/geo_punch", defer: true %>
|
|
25
54
|
<% end %>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<% else %>
|
|
8
8
|
<div class="hrl-table-wrap">
|
|
9
9
|
<table class="hrl-table hrl-table--stack">
|
|
10
|
-
<thead><tr><th>Benefit</th><th>Cover</th><th>Since</th><th>Dependants</th></tr></thead>
|
|
10
|
+
<thead><tr><th>Benefit</th><th class="hrl-num">Cover</th><th>Since</th><th class="hrl-num">Dependants</th></tr></thead>
|
|
11
11
|
<tbody>
|
|
12
12
|
<% @enrolments.each do |enrolment| %>
|
|
13
13
|
<% benefit = enrolment.benefit %>
|