Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.18.9 - 2026-10-02
Security
- the key that signs the cookies is no longer in the repository: every instance creates its own on first start (common/data/cookie-validation.key), login cookies cannot be made with a known key any more; after the update everyone has to log in once more and the language is German again until it is chosen; a login with "remember me" ends when the timeCard password changes
Fixed
- login: logged out after 24 minutes without a click, the session of PHP ended before the time of the app; the login now lasts 10 hours without a click (was 3 days, not reached because of this); once the session has ended anyway (for example after an update), the next click logs in by SSO again, without a prompt as long as the SSO login lasts, and returns to the page; the page of a module showed "Not Found" instead of the login page then
2.18.8 - 2026-10-02
Added
- Controlling: offers and purchase orders from SharePoint (site Projekte, folder "Angebote
/ ..."), read with the Microsoft login of the user: the page "Documents in SharePoint" lists the purchase orders with their versions and the offers of a project, shows what Reports already has of them, and creates an order from a purchase order, positions from an offer or an amendment from a new version of the purchase order; the imports of offers and amendments list the documents of the project as well and suggest the unused offer - Controlling: amendment from a new version of the purchase order (PDF) and an extension offer (Word), uploaded or from SharePoint: date, number, end of the service period and a note come from the order, each row of the offer adds budget to the position with the same title or task or becomes a new position with budget 0 whose budget comes from the amendment; added order positions can be created, the sum of the offer rows is shown next to the added order positions
Changed
- project and booking report: the check for inconsistent time bookings covers the last 12 months up to the end of the period as well, with its own pages to older and newer 12 months (it showed only those in the period before); without inconsistent time bookings in the last 12 months a slim line says so and links to the older ones
- project and booking report: the footer with the checked period of the inconsistent bookings is a slim line, there is no empty space below their tables any more
- project and booking report, controlling: the inconsistent time and project bookings are one panel "Inkonsistente Buchungen" with a table for each kind, checked together for the same 12 months with one pager; without any in the last 12 months there is only one line instead of two; controlling shows the checked period in the panel
- Controlling: positions imported from an extension offer get the note "Erweiterungsangebot
"; the number of an offer is the date in front of its file name, if there is one - absence calendar: the header and the weekends are light grey like the other tables instead of light blue
- project and booking report: the links to older and newer inconsistent bookings skip the 12 months without any and are only shown while there are older ones; the first older page checks the whole history once (a few seconds), then paging needs no queries any more; without any inconsistent bookings at all a line says so
Fixed
- project and booking report: after paging the inconsistent bookings the form created no new report, only the page of the check was loaded again
- inconsistent time bookings: the column of the second entry type was titled "Datum 2" instead of "Eintrag 2"; controlling no longer shows the refresh button of the check, which led to an error page there
- Controlling: in a changed purchase order (Änderung Version 2) the page head is no longer read into the titles of the positions, and positions marked as added, changed or deleted are recognised
2.18.7 - 2026-10-02
Changed
- project report: the tables in the tabs have their title and icon in the panel heading, the tabs and the warnings about inconsistent bookings are cards of their own as in controlling
- project and booking report: the warnings about inconsistent time and project bookings have a warning icon before their title and, in their red frame, a light red head like the checks in controlling
- project report: loads about thirteen times faster (all projects, one month: 5 s instead of 64 s); project bookings before the period are no longer loaded in full but only the last one per employee, which tells whether a project is still running, the start/stop check compares the bookings in the database, the names of employees, projects and tasks in the tables are loaded with one query each, and dates and numbers in the tables are formatted faster; the booking report profits as well
- project and booking report: the check for inconsistent project bookings covers the last 12 months up to the end of the period instead of the whole history; the footer of its panel shows the checked period and pages to older and newer 12 months, which repeats only the check, not the report; without inconsistent bookings in the last 12 months a slim line says so and links to the older ones
- Controlling: actuals and the start/stop check of an order are calculated about a fifth faster
Fixed
- project and booking report: reloading (F5) or opening a shared link of a period without bookings no longer says that the permissions are missing; the message is only shown when the selected projects are not accessible
2.18.6 - 2026-10-02
Changed
- Controlling: bookings after the service end in the details of an order are red instead of blue
- absence calendar: loads about four times faster (one query for the public holidays of all employees instead of three per employee, absences without extra queries per relation); the column of today is framed in blue
- all pages: the timeCard table schema is cached for an hour, the user groups, the boss check and the accessible projects are loaded once per request (working-hours check and annual leave overview load about twice as fast)
- absence calendar: header in light blue, weekends as light blue columns, absences and public holidays as rounded squares with a thicker red frame when not approved, legend with rounded colours, greyed out hidden types and an icon for "show/hide all"
Fixed
- absence calendar: with a long period and many employees the absence requests could exceed the 2100 parameters SQL Server accepts; a public holiday profile between the first and the last of an employee's profiles was ignored
2.18.5 - 2026-10-02
Changed
- personal settings: title with its icon, the controlling section with the controlling icon, the notification table in a frame
- devcontainer: optional read-only mounts of the OneDrive folders with the orders and offers of 2026 (commented out), no change for the deployed app
2.18.3 - 2026-10-02
Fixed
- skills reminder: the run stopped with "Undefined array key 0" at a person without employee or user in timeCard; such persons are skipped now
2.18.2 - 2026-10-02
Changed
- Controlling: forms (order, position, order position, amendment, upload of the imports) as a narrower card in the middle
- Controlling: "Edit" in the actions of an order, "Edit" and "Delete" in the actions of a position
- changelog and error pages as a card in the middle
- Controlling: the details of an order and of a position show the forecast right below the consumption, the remaining budget row is gone (it is in the tables)
- Controlling: the details of a position no longer show the hours per person day
- Controlling: the details of a position call it offer position and show its order position above it
- Controlling: breadcrumb in the order overview when it is filtered by a project; shorter column headers "Projektnr.", "Beginn" and "Ende"
Fixed
- Controlling: saving an order with additional notification addresses failed with "must be a string"
2.18.1 - 2026-10-02
Changed
- Controlling: tables and chart show person days by default
- Controlling: the action buttons below the sidebar are left aligned, their icons in one column
Fixed
- login page: centred card instead of a squeezed box
2.18.0 - 2026-10-02
Added
- Controlling: ordered budgets (person days or hours) per order position, mapped to project tasks and the service period of the order
- Controlling: budget, actual, remaining and consumption in hours and person days, time-proportional plan and forecast (from two weeks after the service start)
- Controlling: history chart, monthly and per employee tables, drilldown into the bookings of a position, booking checks (the tab shows the number of issues found; the task of bookings without position can be assigned to a position there)
- Controlling: progress tab with four charts (cumulated, burndown of the remaining budget, burndown per month up to the end of the period: every month starts with the remaining budget of the month before, split into the remaining budget (red below zero when overdrawn) and its consumption, names and values written into the bars and the total (remaining budget at the start of the month) above them, after the reference date by the forecast (the plan while there is none yet, months marked orange), consumption per day or month) and "All at once" to draw the total and every position together
- Controlling: consumption of every month since the service start per position, bookings of a single month per position; the overview shows the responsible person, can be filtered by project and responsible person and sorted by every column
- Controlling: switch between hours and person days for all tables and the chart
- Controlling: amendments of an order with additional budget for single positions and/or a new end of the service period, shown as history and as steps of the budget line
- Controlling: responsible person of an order (timeCard user); they and all their bosses (also the second boss in timeCard) get its warning mails by default, the form shows them for the chosen responsible person
- personal settings (name at the top right), first setting: which default controlling notifications to receive, per kind of warning, for own orders, orders of subordinates and orders where one is entered as recipient; timeCard users entered in an order follow their settings, external addresses get all warnings
- Controlling: notification addresses chosen from the timeCard users of current employees (Select2), other addresses can be typed in
- Controlling: an order has no title, it is shown by its order number (required); several orders with the same number of a project are counted with -2, -3
- Controlling: supplier number and contact person of the customer per order, also taken from the purchase order PDF
- Controlling: "Today" button next to the reference date
- Controlling: forecast column says why there is no forecast (service end reached, not started yet, forecast from date)
- Controlling: flat-rate positions without bookings in timeCard: a fixed value per month of the service period is booked automatically on the first day of the month; the activity is named in free text
- Controlling: bookings after the service end of an order that is not closed count for its budget and are marked as red months in the positions table and as red actual value in the order overview
- Controlling: bookings of the project that count for other orders within the service period, shown in the order
- Controlling: "(all tasks)" for a position that covers all bookings of the project
- Controlling: hours per person day per position; the value of the order is the default for new positions
- Controlling: order positions bundle several offer positions of an order; their budget is the sum of the offer positions, and status, forecast and warning mails apply to both levels; in the positions table an order position can be collapsed
- Controlling: import positions from the price table of an offer (Word .docx upload): table and columns are detected, tasks with the same name are suggested (the highest skill of a service offered with several skills gets its [Snr] task), the skill is appended to the title, rows with the same task are merged, everything can be changed before the positions are created; the file can be dropped onto a large upload area
- Controlling: create an order from a purchase order (PDF upload, e.g. from SAP): order number, service end and order positions are filled in; a following offer import assigns its rows to the order positions whose net value their total prices add up to
- Controlling: additional orders to a main order, also with other or fewer tasks; bookings on shared tasks count against the main order until its budget is used up
- Controlling: warning mails when the threshold or the budget is reached or the forecast runs out before the service end, and once when there are bookings after the service end of an order that is not closed (
php yii controlling/notify, daily cron); every address gets its own mail, and if one fails, the warning goes again only to that address the next day - absence calendar and working hours check: bosses can select "my employees" like a department, the employees below them on any level whatever their department; both start with them
- working hours check: more than 6 hours of work in a row with only interruptions shorter than 15 minutes is marked as a violation (§ 4 ArbZG: shorter breaks do not count)
- annual leave overview: columns for carry-over, entitlement, corrections (with month and reason), total and exit date, a bar with the distribution, employee search with a reset button and an Excel export
Changed
- multiple selects (Select2) grow with the selected entries instead of overflowing the box
- Project Evaluation: bookings load faster and with less memory
- merged the SQLite databases
user.dbandskills.dbintocommon/data/app.db, imported automatically on first start - SQLite schema is managed by Yii migrations (
php yii migrate), run on every container start - cron jobs are maintained in one file (
docker/crontab) and installed on container start; archive instances run none - footer shows the new company name netcare GmbH
- annual leave overview: one table per department, bosses also see the employees below their subordinates (all levels), loads in a few seconds instead of up to a minute
- annual leave overview: employees whose exit date has passed are no longer listed
- skills and employee report: bosses get the employees below them on any level (team skills, names in the skills search, employees of the employee report)
- skills: the request for anonymously selected persons also goes to their second boss (Zweitvorgesetzter), who is on copy of the direct request as well
- working hours check: only for employees in Germany, because it checks against the German working hours act; bosses see their employees on all levels and in all departments
- working hours check: starts with the last 60 days; no longer marked as beta
- Bootstrap 4 and Font Awesome 5 instead of Bootstrap 3 and Font Awesome 4.7; the pages look the same as before
- new layout: grey page with white cards, the page title with its icon at the top of the sidebar, the breadcrumb as chips (only on pages below the second level), grid headings with title, number of entries and export in one line, underlined tabs, #0099ff as the main colour
- Controlling: per row a pencil to edit and a "…" menu with the project evaluation and delete; the charts are in panels; the numbers in the progress bars are white
- annual leave overview: the legend with search and export and every department are cards of their own
- absence calendar: the legend is a card of its own below the sidebar, in two columns
Fixed
- numbers ending in 5 after the second decimal were rounded down in some cases (2,005 shown as 2,00 instead of 2,01) in all reports, their exports and the controlling mails; they are now rounded half up
- Skills: the monthly reminder mails to update the skills are sent again (the cron job had not run since the move to Docker in 2023)
- annual leave overview: an entitlement starting on 1st January of the current year was ignored
- annual leave overview: holiday taken today was counted neither as taken nor as planned, planned holiday without a request was missing
- absence calendar: the second boss (Zweitvorgesetzter) and the bosses above the direct boss see the absence type of their employees
- working hours check: the second boss sees their employees
- working hours check: an invalid date or a period ending before its start no longer causes an error, today is not marked as inconsistent while the employee is still at work
- skills search: the second boss sees the names of their employees
- skills: the page "missing skills" failed with an error
- employee report: a boss could open the report of any employee by URL
- HR (timeCard groups "HR", "HR Admin" and "HR Standard") sees all employees in the annual leave overview, the absence calendar and the working hours check; the configured group name matched no group
Removed
- seed databases in
src/initial/and the outdated schema filesuser.sqlandskills_init.sql - invoice report (Abrechnungsbericht): its summary per project and activity is the tab "Projektbuchungen Zusammenfassung" in the project report
2.17.1 - 2026-07-28
Fixed
- yii\base\ErrorException: Trying to access array offset on value of type null in /var/www/src/frontend/models/Report.php:407
Changed
- moved invoice-report to main menu, removed it from dashboard
- auto logout for SSO
2.17.0 - 2025-10-31
Fixed
- vacation list access also for Zweitvorgesetze
Added
- Project Evaluation > Employee report
- Project Evaluation: 2 new summary grids
Changed
- some labeling
- menu and submenus
2.16.0-hf.1 - 2023-09-22
Fixed
- Monday is first day of week now
2.16.0 - 2023-09-22
Fixed
- method to determine if an employee is active in timeCard or not which also fixes a null object access
Added
- serbian translation
Changed
- styling (absent calendar, button focus)
2.15.3 - 2023-06-13
Fixed
- team skills compatibility issue with uasort in PHP 8.2
- access non-existing array element in Report generation
2.15.2 - 2023-06-12
Added
- link to Company regulations on working hours and business trips
- link to Company regulations on remote work
Changed
- link to Instructions on time recording to Confluence
- 'Reported sick' to 'Reported Ill' to be consistent
Fixed
- bring back missing stuff from 2.14.6
2.15.1-hf.1 - 2023-06-06
Fixed
- Hotfix: error in project-report when array element does not exist
2.15.1 - 2023-06-02
Changed
- login screen is now always set to SSO by default
- dependency updates: yiisoft/yii2 (2.0.48 => 2.0.48.1)
Fixed
- star rating colors and styling issues after plugin update with breaking changes
- startup script to not overwrite db files
2.15.0 - 2023-05-23
Changed
- updated to latest Yii2 2.0.48 version and php 8.2
- updated all dependencies
- infrastructure is now based on docker
2.14.6 - 2022-06-27
Added
- ability to request skill/person directly
- KRG absence type
2.14.4 - 2021-05-08
- optimisation of Skills-module: actionSearch queries in ExperienceController
2.14.3 - 2021-05-07
Changed
- working-hours module: hiding department/employee dropdowns when there's only one item to select
2.14.2 - 2021-05-03
Added
- new validation rules (working over 6h without/too short break)
- working hours act hyperlinks added (DE only)
- REPORTS-118: new column in annual holiday overview table for unapproved holiday count
Changed
- separating working-hours-validation rules based on employee's country
Fixed
- REPORTS-119: not properly shown absences in calendar grid (if whole or half day)
2.14.1 - 2021-04-20
Changed
- validation rules for "working-hours" module and error messages
2.14.0 - 2021-04-19
Removed
- skills.db file from VCS
Added
- "working-hours" module for more detailed overview of employees' working hours & pauses
Changed
- new env config: reports works now just with PHP 5
- more memory for PHP script execution
Fixed
- calendar weeks representation inside absence calendar table
- referenced module inside DefaultController of Project-Report module
2.13.2 - 2021-02-23
Changed
- allow "Admin HR" users to see annual holiday overview for all active employees
Added
- File export plugin for "datatables" lib
- export for annual holiday overview (XLSX)
- new column added to annual holiday overview table
2.13.1 - 2021-02-02
Fixed
- REPORTS-113: End date for sidebar DateRage Widget is false
2.13.0 - 2021-01-25
Added
- changelog updated to follow "Keep a Changelog" standard
- php markdown parser for newly formatted changelog file
- new, colored column added to annual holiday overview: "Available holiday relative (%)"
Changed
- hide search widget for annual holiday overview when less than 2 entities in table
- column "Available holiday absolute (%)" is not colored anymore
2.12.0 - 2020-12-21
Added
- REPORTS-117: Tabular overview of employees' annual holiday data (Beta-Version)
- new global models: Holiday, MonthlyBalance, MonthlyTransfer
- new models for Absence module: EmployeeHolidaySummary
2.11.0 - 2020-08-18
Added
- "Team-Skills" view/controller in "Skills" module
- new models: WorkingScheduleProfile (AZPROFIL), WorkScheduleType (AZART), WorkScheduleTime (AZZEIT), EmployeeProfile (MITARBEITERPROFILE)
- REPORTS-111: Implementing "Calendar week" feature
- REPORTS-112: Adding "Remote work - Notfall" (RWN), and "Kurzarbeit" (KA) absence types
Changed
- implements improved absence-calendar widget
- make legend for absence-calendar interactive (show/hide absence types)
Fixed
- "LastExperience" model update: new column "first_reports_login" (activates skill-reminder for employee without skills)
- REPORTS-110: Red border for not approved absences visible to all
- REPORTS-114: "Dauer" column in table "Buchung" has higher prio than "Sollprozent"
- REPORTS-115: project-report does not show comments sometimes
- REPORTS-116: "getRelevantEmployees" returns duplicates
- several missing EN translations
- fixes depricated dependency "Fortawesome/Font-Awesome" with "fortawesome/font-awesome": "v4.7.0"
2.10.0 - 2020-03-25
Added
- added column person days to grid
Fixed
- fixed decimal hours label in grid
2.9.0 - 2020-03-17
Added
- netcare Reports english translation
2.8.2 - 2019-09-30
Fixed
- using send() method when redirecting in beforeAction(), (https://www.yiiframework.com/doc/api/2.0/yii-web-response#redirect()-detail)
2.8.1 - 2019-07-15
Changed
- changing reminder E-Mail subject to "netcare Skills Update Reminder"
2.8.0 - 2019-07-12
Changed
- console controller for Skills module: used for to remind users to update their skills (runned by cronjob)
2.7.1 - 2019-06-17
Changed
- refactored BigBoss function
- BigBoss can see all absence types now
2.7.0 - 2019-06-14
Added
- Remote Work to absence module, Remote Work is always shown to everyone (added $alwaysShownAbsences array property to Module class)
Removed
- environment specific absence colours so global ones are used
2.6 - 2019-02-28
Added
- new "Skills" Module implemented
Changed
- font changed to Sofia Pro
2.5 - ?
Changed
- original netcare "blue" implemented
- changed font from Arial to Lato
Fixed
- fixed login form positioning for sm screen
2.4 - 2016-02-15
Fixed
- fixed absence diagonal line in IE9, 10, 11
- fixed correct URL in Share button and prevent browsers from throwing exceptions for not supporting history.pushState()
Removed
- removed workaround for #698 since select2 is fiwxed with 4.0.1
2.3 - 2016-02-11
Changed
- absence: improved half day absences by showing also different types on the same day
- absence: increased tooltip max-width and added forced line-break after date in tooltip
Fixed
- absence: fixed class "today" to be on the correct day/date
2016-02-09
Added
- absence: added visuality of multiple half day vacations at the same day (diagonal line and tooltip text)
2016-02-01
Added
- added Version to Footer and linked it to this changelog
- added username to the header and moved logout link to its submenu
Changed
- refactoring of index page tiles to take advantage of bootstrap responsive grid and to be able to change height of the tiles by changing height of the image
- moved help link in header to the left
- absence: aborting running ajax requests when a new request was started
- absence: improved calendar table width, height and scrolling, also made it responsive to window resizing
- absence: updated absence colours to colours used by timecard
- absence: initial range is now -7 to last day of next month, today is marked blue
Fixed
- absence: fixed loading indicator and covered tooltip on absence grid view
- absence: fixed multiple ajax load indicators
Removed
- removed Welcome message from index page
- absence: removed clipboard functionality (flash), added share button next to "Kalender erzeugen"
2015-10-05
Fixed
- fixed #699 - User which is not marked as active can no longer login to netcare-reports. LoginForm model is changed so that not only username and password are being validated but also the status: 0 = INAKTIV, 1 = AKTIV
2015-10-02
Fixed
- fixed #698 partially
2.2 - 2015-06-19
Added
- added one more instance for accessing the timeCard archive by http://reports-arch.netcare.de
2.1 - 2015-03-20
Added
- invoice report
- link manual "Anleitung timeCard" in navbar
2.0 - 2015-03-13
Added
- deep link to report & absence calendar
- absence calendar
- session timeout with remember me option in login form
- link changelog.txt in footer
Changed
- enhanced project time calculation, so the sum is equivalent to timeCard sum
- renamed "Reiner SCT" to "timeCard" in login form
1.5 - 2015-03-12
Fixed
- Project filter in sidebar has shown all projects, even if the user has access to just specific projects
1.4 - 2015-03-11
Changed
- Filtering inconsistent entries of "renewed" employees & disable inactive projects by checkbox
- disable inactive projects by checkbox in sidebar
- If an employee's enter date was changed (ANÜ to real employee), all past inconsistencies are ignored now
- Export button is always enabled now. But there will be a confirm message if there are still inconsistent entries.
- "Meine Projekte" is confusing, cause some employees think they could make reports over all their projects with this. To avoid that, it is renamed into "Meine Projektbuchungen"
1.3 - 2015-03-03
Changed
- user should be able to filter all projects in personal report
Fixed
- There was a bug, that user was only able to filter projects he has access to. In the past that worked very well. The bug was introduced by refactoring sidebar code to a central widget
1.2 - 2015-02-25
Changed
- show inconsistencies just for filtered projects. If there is no project filtered, take only those the user has access to
1.1 - 2015-02-24
Changed
- project inconsistencies over whole history
- if there where inconsistencies for a relevant filtered project, it would show ALL inconsistencies whether the interested in timeslot begins later than those inconsistencies
1.0 - 2015-02-20
Changed
- decimal format in summary with , instead of .
- refactored export from kartik\export\ExportMenu to grid internal export widget
- changed excel-export filenames and excel styling
- modified footer css
- modified table columns width and line-break
- enhanced decimal sum calculation
- only recognize project entries which are between "Kommen" and "Gehen" for calculation
- made full-ajax-form out of the report widgets
- remember active tabs in local storage
- reload all grids when updating inconsistencies with ajax button
- solved problem that one ajax button cancels the request of the other button in inconsistency grid
- switched sum calculation from decimal to minutes
- changed sorting in grid from "date, project, employee, task" to "date, project, task, employee"
- filter entries with 0 in time summary
- switched sum calculation from timestamps to decimal
- modified hint in inconsitency check & disable export if there are inconsistencies
- Export just Excel 2007+, put toggle button to right side, changed toggle all text
- modified footer text & changed brand logo
- modified time and decimal hours columns view
- changed column order of reports to "date, project, task, employee"
Fixed
- fixed route issue for inconsistency ajax button in employees report
0.5 - 2015-02-12
Added
- added one more column to reports to display time AND decimal hours
- implemented authorization mechanism
- added productname to page-title and navbar
- added favicon
- implemented unit tests for core functions
- refresh button in grid for inconsistent time entries and project entries
- display inconsistent time entries in chosen time slot
- display inconsistent project entries in chosen time slot
Changed
- round half up in time sum of project entries
- redirecting to login page if user has no access
- changed behavior of inconsistency check of time entries to only show relevant employees
- enhanced inconsistency checks for projects (stop/stop & start/stop_another)
- made module out of project report
- show login-form to un-authenticated users
- changed sorting in grid from "date, employee, project, task" to "date, project, employee, task"
- optimized DB queries with caching
- little sidebar modifications
- tabs with different reports
- enhancement to get ability to group tasks and remove employees from report
Fixed
- fixed a bug in time calculation, caused of long-term projects
- fixed bug: display projekt text wihout null value formatting
Removed
- removed export types csv, text, html
0.4 - 2015-01-27
Added
- added yii2-export to export the grid
Changed
- commented the employee select2-input
- renamed reports menu
Fixed
- fixed daily sum array calculation
0.3 - 2015-01-26
Fixed
- Hotfix: fixed bugs in time calculation
- Taskfilter did not work properly
- Summarization over more than days failed
0.2 - 2015-01-26
Fixed
- Hotfix: fixed bug in timeEntry fetching
- removed the -3600 calculation from end-date selector
0.1 - 2015-01-26
- Release: first initial release to test on live stc environment
- no changes yet