admin-portal
admin-portal copied to clipboard
Creating / editing manual time entries in the mobile application corrupts the task's timesheets
I am using the paid Pro SaaS version with:
- The web interface at app.invoicing.co running in a regular desktop web browser
- The Android app (version 5.0.172 from the F-Droid repositories), on either an old LineageOS phone or a bog-standard Pixel phone running the stock Android 15 OS provided by big brother
I have discovered that timesheet edits done by the mobile app can lead to catastrophic corruption. Considering how much of a PITA it is to manually enter/correct timesheets when I need to, this is essentially data loss in my user point of view.
Here I am providing a simplified test case (with fake data) to illustrate how to achieve this, but I don't know how to describe this in steps, and it wouldn't really be clear anyway, so I'm providing screenshots and a demonstration video instead.
First, create a simple task with a couple of manual entries using the web interface's "Add new time sheet" row button thingy:
Notice that those dates are all in the future (in June, while today is May 25th). The idea here is that I'm planning to attend an event where I am paid an arbitrary fixed number of hours per day, so I'm not starting and stopping the timer in the middle of the event, and I don't want to forget logging those hours.
Then, try to edit that task from the mobile app to manually add some more time entries (my usecase is that I had input the core conference days but forgot to add the travel hassle days before and after the event dates)... and you will see how things go very, very wrong, in various ways, as shown in this video demonstrating the reproduction steps (and bugs) in the mobile app: https://youtu.be/gK7dhiEv0ws
Note: in that video I use my Don Lafontaine voice to narrate what is going on (in a world… where one web interface stands between your mobile app and timesheets oblivion), so watch the video with sound turned on if you want to understand the attempted workflow.
Then, when you refresh the same timesheet from the web interface, I can see that the results are indeed corrupt (but it's not easy to figure that out without watching the video above):
Hopefully there is some UI test suite for situations like these, because subtle corruption / data loss like that should never occur...
On a semi-related note, please make it easy to actually create and edit timesheet entries manually without fighting the GUI, not every situation can use a live stopwatch 🤞
Thanks for reporting this
Are you able to cause the problem just using the mobile app? It would be helpful to know which app is the source of the problem.
Yup, it is possible to trigger with a task created entirely with the mobile app, even with just two time log entries. I just didn't start with that originally because I am so unbearably slow at entering dates and times in a mobile/touch UI 😅
🐞 Bug Report – Time Sheet Corruption When Editing Tasks on Web and Mobile
Time sheet entries are corrupted when editing tasks with future dates using both the web and mobile versions of Invoice Ninja.
Attachments: 🎥 Demonstration Video: (https://www.youtube.com/watch?v=gK7dhiEv0ws)
⸻
Environment: • Platform: Web and Flutter Mobile App (Invoice Ninja) • App Version: 5.0.172 • Device (mobile): Pixel phone • OS (mobile): Android 15 • Browser (web): On regular web browser • Date of Test: May 25, 2025
⸻
Description: When editing or adding time sheet entries for future dates, both the web and mobile apps of Invoice Ninja behave incorrectly. Instead of applying changes to the selected time entry, the application alters unrelated existing entries — effectively corrupting the time sheet. This results in inconsistencies and data mismatch across platforms.
⸻
Steps to Reproduce: 1. Create a task via the web interface with manual time entries set to future dates (e.g., June 1–2). 2. Open the task in the mobile app. 3. Add a new time entry using the start timer (play button), then stop it. 4. Edit the time entry manually: • Set start time to a future date/time (e.g., June 1, 3:00 a.m.). • Set end time to the same date (e.g., June 1, 6:00 a.m.). 5. Save the entry. 6. Check the time entries list on both mobile and web platforms.
⸻
Expected Behavior: The app should only update the selected time entry, with no changes to unrelated entries.
⸻
Actual Behavior: • A different, unrelated entry (e.g., June 2 “HackFest day one”) is modified instead. • A short “leftover” entry from the current date (e.g., May 25, a few seconds long) remains in the list. • Repeating the steps creates new entries, but does not clean up or properly isolate existing data. • The corrupted data appears consistently on both mobile and web platforms.
⸻
Impact: • Time tracking becomes unreliable. • Existing entries may be overwritten or misdated. • Manual correction is required on the web interface. • Risk of incorrect billing or reports due to corrupted time logs.
@nekohayo You’re welcome to correct anything inaccurate in this short report.
Thank you for reporting this, a fix will be included with the next release.
@DarkMust : je vous somme de ne pas pourrir mes rapports de bug avec des remix inutiles d'intelligence artificielle.