Skip to content

DrCopyPaste/RoutinR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About

RoutinR makes keeping a timesheet as easy as pushing a button. (after some initial configuration)

Features

  • Hit the Punch Clock Button to start tracking time
  • a stopwatch like clock appears showing the total current running time
  • Hit the Punch Clock Button again to stop tracking time and log it
  • previous start time of a running session is being restored when application is closed and restarted
  • when currently not tracking a job the current idle time is shown
  • use the default idle job to track time
  • or add custom job names
  • timesheets for all jobs can be viewed in a list
  • current job for punch clock can be changed (set effectively on stopping, enabling toggling while already having started)
  • saved job timesheets can be updated (change assigned job and/ or start/ end time)
  • api export profiles can be added with individual templates for jobs to export to an external rest api
  • the application db can be exported to a folder
  • the application db can be imported and overridden from a selected file
  • setting "ExportOnStoppingTimeSheet" looks for export profiles when finishing a job, automatically exporting them to their target apis

Installing

  • use the msix file from github action for windows
  • use the apk file from github action for android -- before trying to upgrade you should export your database and reimport that after upgrading -- upgrading does not really work -- (something to do with the non signed package?)

Limits

  • crossing timezones is not supported
  • day light savings transitions are not supported (FBT/ SFT)
  • start time is expected to be always smaller than end and both are expected to always be in the past
  • violating this might crash the application

Architecture

Maui Stuff

  • using CommunityToolkit.Mvvm.ComponentModel to save boilerplate code: only define private lowercase fields inside ViewModel and decorate as ObservableProperty => this generates proper public PascalCase properties (but sometimes can lead to weird error outputs inside visual studio, despite builds running correctly, but restarting vs solves problems as always)

  • dotnet workload install maui-android maui-ios maui-maccatalyst

  • dotnet workload update

Interesting Maui Links

Interesting Testing Links

Maui issues:

  • crashes when scrollable content in swipeview on windows exceeds display: dotnet/maui#8870
  • Picker width on Windows not filling container: dotnet/maui#6391
  • AndroidManifest file does not exist: dotnet/maui#1129
  • Frame-Tag must have background color set to transparent

Features ToDo

  • show start time on main screen (optional?)

  • allow editing start time afterwards (before stopping)

  • allow stopping time "into the future" (create a job time sheet entry that ends in the future)

  • separate add api export profile from list view => new edit/add view

  • add api export profile view allows editing

  • hide header values (might contain api keys etc.) in frontend

  • api export profiles should be editable

  • option to suppress screen locking on android?

  • add toast notifications/ "general" (lockscreen?!?) notifications

  • how to add sth to lockscreen (like playercontrols from vlc)

  • versioning installer packages

  • sometimes desktop (win) app does only react to moving and closing (window does not refresh, links/buttons are dead) -- maui debug controls also dont show up in this case

  • huge delay when adding to dictionaryeditor?!? (can provoke showing by pressing a key inside another dictionary editors key editor)

  • exporting creates an export log entry with date and reference to that timesheet entry

  • export individual timesheet entries

  • add clear all settings button

  • add clear database button

  • pretty format time sheet entries

  • (import) buttons change color on settings page after pressing?

  • form field validation

  • wrap all (core or service calling) client code with exception handling

  • overthink precision (ui allows only for minute precision, but backend uses second(??)-precision)

  • testing TimeSheetEntry

  • testing ApiExportProfile

  • testing ExportService.ExportToApi extreme cases

  • prevent adding post templates that dont contain placeholders (make readonly, add getter/adder?)

  • visualize adjacent/ potentially overlapping time sheet entries when editing job time sheet entries

  • consistent datetime formatters

  • job timesheets can be filtered by jobname and time interval (also today/ this week/ this month filter for time sheet entries)

  • enable merging adjacent time sheet entries if they share the same job

  • Test "Equals"/"GetHashCode" ?

  • ?allow apiprofile without job templates (in case jobs are created afterwards?)? => WHAT IF ALL JOBS GET DELETED that a profile references???

  • is it dangerous to override Equals memorywise? should we use value types/ records/ structs?

  • concurrency tests for dataservices

  • gracefully fail in cases the app encounters something unexpected

Misc

Highlander-principle: there can only ever be one timer running

  • starting tracking time for a task-item stops tracking time for all other task-items,
  • this is really only to make creating statistics of per day times easy
  • so this MIGHT be changed in the future, then reworking how stats work :-)

(like times from the future, negative timespans, etc.)

  • RoutinR is designed to help creating timesheet stats (where the sum of the items may not exceed 24 hours/day)
  • A List/Set of work item types can be created
  • Of these work item types 3 (?) may be selected to be favorite and visible from the home screen on mobile devices
  • a global stop button is visible from the home screen
  • play buttons next to those favorite work items start the stopwatch for that work item (and thus stopping any other stopwatch)
  • therefore there may only ever be one stopwatch active

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages