* refactor: overlapping shifts validation
- convert raw query to frappe.qb
- check for overlapping timings if dates overlap
- translation friendly error messages with link to overlapping doc
* refactor: consider timeslots in `get_employee_shift`
* fix: handle shift grace overlap while finding current shift
* refactor: handle shifts spanning over 2 different days
* fix: fetching shift on timing boundaries
* refactor: rewrite docstrings and add type hints for functions
* refactor: Allow multiple attendance records creation for different shifts
* feat: auto attendance marking for multiple shifts on the same day
* refactor: mark absent for employees with no attendance
- break down into smaller functions
- make it work with multiple shifts
- this will mark employee as absent per shift, meaning employee can be present for one shift and absent for another on the same day
* chore: sort imports, remove unused imports
* refactor: Monthly Attendance Sheet
- split into smaller functions
- add type hints
- get rid of unnecessary db calls and loops
- add docstrings for functions
* feat: add colors for attendance status to lessen the cognitive load
- legend with colors and full form for status abbreviations
* feat: show shift-wise attendance in monthly attendance sheet
* test: monthly attendance sheet
* style: format code with black
* chore: ignore formatting changes in blame
* test: fetching shifts in Employee Checkins
* fix(test): make holiday list for shift and checkin tests
* fix: tests
* test: shift assignment creation
* fix: attendance fixes
- check half day attendance threshold before absent threshold to avoid half day getting marked as absent
- round working hours to 2 digits for better accuracy
- start and end dates for absent attendance marking
* test: Shift Type with Auto Attendance setup and working
fix test setups
* refactor: Overlapping validation for Shift Request
- commonify time overlap function between request and assignment
- add tests for shift request overlap
* chore: remove unused import
* fix: add validation for overlapping shift attendance
- skip auto attendance in case of overlapping shift attendance record
- this case won't occur in case of shift assignment, since it will not allow overlapping shifts to be assigned
- can happen if manual attendance records are created
* test: validations for duplicate and overlapping shift attendance records
* test: skip auto attendance
* fix: skip validation for overlapping shift attendance if no shift is linked
* test: add holiday related shift and attendance tests
* test: add attendance sheet tests for employee filter, half days
* fix: sider
- incorrect opening balance on boundary allocation dates
- carry forwarded leaves accounted in leaves allocated column, should be part of opening balance
- leaves allocated column also adds expired leave allocations causing negative balances, should only consider non-expiry records
* refactor: Vehicle Expense Report
* test: Vehicle Expenses Report
* feat: Added Employee filter to report
- fix Vehicle Log form view
* fix: set currency fieldtype for chart data
- added filters for employee and vehicle
* fix: service expenses not getting set
* feat: Moved Document to Payroll Module
* feat: Moved Reports to Payroll Module
* feat: Moved Print fromat With Patch
* feat: Moved Notifiction to Payroll Module and patches
* feat: added dashboard and desk page to Payroll
* feat: Payroll Dashboard
* feat: Module onboarding
* feat: Income tax Deductions Report
* feat: Ecs Checklist Report
* feat: Provident Fund Report
* feat: Professional Fund report and commonified Code
* feat: Total Payments Based On Payment Mode Report
* fix: refactor and added chart Total Payments Based On Payment Mode
* feat: Payroll Settings
* fix: Bank remittance Report
* feat(Payroll based on): Considered unmarked days
* feat: Added Help for condition an formula in Salary structure
* fix: requested changes
* fix: rename report Ecs checklist to salary_payments_via_ecs
* fix: renamed report report/total_payments_based_on_payment_mode
* fix: added role via setup.py for regional report
* feat: added All reports to desk page
* fix: frappe.reload doc in all patches
* fix: codacy
* fix: frappe.reload_doctype for patches
* patch: is_income_tax_component and component_type for salary component
* fix: uncommented code
* test: fixture
* fix: test
* test: test_payment_days_based_on_attendance