Online Help - Time Recording


ERROR 21 - Database read only
The app cannot read its own files (this might happen after ROM upgrade or system restore).
To fix, do this:
1. Go to Menu / Preferences and click "Create backup" (THIS IS IMPORTANT!! Otherwise you'll lose all your data)
2. Close the app and uninstall it from your device
3. Reinstall the app through Android Market
4. On first start after reinstall, you will be asked to restore the data - confirm with OK






ERROR 22 - Disk full
The app tries to write export or backup files but fails due to lack of space.
• Check "Storage / USB Storage" in the Android "Settings" menu
• Delete large unused files from the SD Card (e.g. mp3 files or camera shots), then retry
• In rare cases, the internal phone storage is full. If so, try to move apps to the SD Card. As last resort, remove unused apps





ERROR 23 - Critical database error 
The app cannot open its database file.
1) Please close the app (using the "Back" button), then reopen and retry
2) If it still fails, reboot your device and try again.

3) If the app still fails after reboot you will need to do data recovery:
• Uninstall and reinstall the app.
• On first start after reinstallation, the app will ask for data recovery. Confirm with "OK".
Note the app writes its backup files every two days to the SD Card by default, so you will lose your latest changes.
• If this fails, or if you want to recover manually, go to "Preferences", "Restore", "Restore local backup". Pick the latest backup on that screen. The "#S" column shows the number of entries per backup.
• Alternatively, use "Restore from Google Drive" or "Restore from Dropbox" if "Auto backup" is enabled.





ERROR 24 - Invalid import file
"Restore backup" fails with "Invalid import file"! What can i do?
• Contact developer and send the latest backup as email attachment.
• Alternatively, try this:
1) copy the backup file to your PC. If it's a zip/gz file, extract it so that you get the ".db" file.
2) install the "SQLite Manager" Firefox addon.
3) open that .db file with the SQLite Manager. Do this:
- "Compact database"
- "Analyze database" 
- "Check integrity"
- on the "DB Settings" tab, set the "Journal mode" setting to "delete"
Then save the file.
4) copy the 'sanitised' db file to your SD Card (top level), then try "Prefs Tab1" / "Restore" / "Restore backup" again






ERROR 25 - Backup / Export failed 
The app writes its backup and data export files to the SD Card, this has failed. Most times this is a one time issue.
• To make sure things are fine, close the app and reopen, then go to "Preferences" and click "Create backup". If this works then everything is okay.
• If it still fails on that, please reboot your phone and retry doing the backup in the app. Also, make sure your SD Card isn't running out of free space (see "USB Storage" in Android System Settings / Storage)
• If you keep getting errors, contact developer.






The app cannot write its backup or data export files to the SD Card. Make sure the SD Card is properly inserted. 
In some cases, rebooting the phone helps (e.g. if SD Card status says "bad_removal" or "mounted_ro").
Note that access to the SD Card is *not* possible while the phone is attached via USB to your PC. If so, detach the phone and retry.







1) Please try the following:
• Reboot your phone
• Click "Create backup" / "Upload to Google Drive" or "Upload to Dropbox" on Preferences page 1
 If this works fine then everything is okay

2) if (1) fails with the same error message please try the following:
• Click "Create backup / Send as email" on preferences page 1 and send that mail to yourself
• Uninstall the «Time Recording» or «Time Recording Pro» app
• Uninstall all «DynamicG Plugin» apps
• Reboot your device
• Reinstall all apps - start with the Plugin apps, and only after that install the main app (Time Recording / Time Recording Pro).
• Open Time Recording or Time Recording Pro. The app will ask for data recovery. Confirm with OK
• Retry the original action

If it still fails with the same error please contact developer.






The database file has been deleted.
 See "Error 23" above regarding how to do data recovery
• Does this error occur right after you have removed or swapped your SD Card? If so please reinsert the original SD Card and try again.
• Those who have used "Storage admin / Move to SD Card" earlier on - make sure the file "timeRecording.db" is properly available in the folder "/sdcard/dynamicg/database" or "/sdcard/dynamicg/database-pro". We strongly suggest you move the data file back to internal storage after recovery (see "Storage admin / Move to Phone" on the Preferences page)






This typically happens with Android 4.4 KitKat or newer when trying to restore a backup from the external SD Card (access to external SD Card data is severely limited since Android 4.4, this affects all apps).
 Workaround: copy the backup files to the "internal sd card" and try "restore" again.
 Alternatively: use "Backup to Google Drive" on the old device, "Restore from Google Drive" on the new device.






App installed on SD Card 
The app is currently installed on the SD Card, this will lead to several issues:
• The app will crash (force close) if the SD Card is removed or mounted to your PC.
• The widget does not work properly
• Alarm notification (e.g. "daily target reached") from within the app does not work
It's strongly recommended to move the app to internal storage. See "Manage apps" in the Android system settings.






Restore
See this help page: Backup & Restore





Public App Services
'Time Recording' provides these public services for 3rd party integration, plus it 
integrates as plugin into Tasker/Locale.

Package names
com.dynamicg.timerecording (Free version)
com.dynamicg.timerecording.pro (Pro version)

Receivers
com.dynamicg.timerecording.CHECK_IN
com.dynamicg.timerecording.CHECK_OUT
com.dynamicg.timerecording.PUNCH
com.dynamicg.timerecording.START_NEW_TASK
com.dynamicg.timerecording.DATA_EXPORT (see details below)
com.dynamicg.timerecording.GET_INFO (see 
details below) 

Activities
com.dynamicg.timerecording.activity.CHECK_IN
com.dynamicg.timerecording.activity.CHECK_OUT
com.dynamicg.timerecording.activity.PUNCH
com.dynamicg.timerecording.activity.SWITCH_TASK

Setup in Llama
See this blog entry:

Setting a specific task
• Set the "com.dynamicg.timerecording.TASK" extra. Value is the numeric, unique "Task ID" as displayed on the "Edit task" screen in Time Recording
• Alternatively, since version 5.15, set the "com.dynamicg.timerecording.TASK_NAMEparameter with the given task name. If the same tasks exists for different clients, use format "name[[client]]".
Samples: "Project A" or "Project A[[Client X]]".
• Tasker info: when setting parameters in Tasker use this notation, where <ID> is the place holder for a task id (note the colon between ...TASK and <ID>)
com.dynamicg.timerecording.TASK:<ID> 

Setting a specific time
Available since version 5.15. 
Set the "com.dynamicg.timerecording.TIME" extra.
Format is "nn:nn" in 24 hour notation, i.e. 00:00 to 23:59.
If you need to set the "Validity date" to next day: use format "nn:nn+1" e.g. "00:45+1"

Passing work unit notes
Set the "com.dynamicg.timerecording.NOTES" extra

GET_INFO
This is for developers who want to integrate Time Recording status information into their own apps or widgets. GET_INFO sends current task, running total work time, current daily and weekly "delta", and other data to your BroadcastReceiver. A very simple and fully working Android sample project is available here:
The relevant call is: com.dynamicg.timerecinfogetter.TimeRecDataGetter.getData()

DATA_EXPORT for pulling reports
Report E1 to E8 generation can be triggered through broadcast intent. See sample here.

What's Check in vs. Punch vs. Start new task
• 'Check in' will check in once. Repeated calls will be ignored
• 'Punch time' will do a check in or a check out, depending on the current state. Each call is processed (so multiple calls will result in a series of checkin/checkout events)
• 'Start new task' will do a check in to start a new work unit. If you have been checked in already, the previous work unit is closed with a check out. Multiple calls will result in a series of work units.







Automatic breaks
These rules apply for the 'Automatic breaks' to kick in:
• Only active after first check-in per day. Will be applied on first check-out.
• Logic: if daily total greater or equals than [Total], then add break with duration [Break] starting at [When].
• With 'Active, single break' only the first matching rule will be applied. With 'Active, multiple breaks' all matching rules will be applied.
• Note that with rotating shifts, only 'Active, single break' works properly.

What is "Incremental"?
Setting an auto break configuration entry to "Incremental" will make a break as long as the time passed since [When] was reached if you check out within that break phase.
Sample: if your configuration is "Total=05:00, When=14:00, Break=00:30", and you check out after 05:17 work time, break duration will be set as 17 minutes (i.e. the app will add a break from 14:00 to 14:17)



• Only available to Pro users
• One way sync only! Time Recording is the master system, import from the calendar into the app is not supported.
• Make sure to set the "Calendar type" setting on the Calendar Sync preferences page properly:
→ Set to "Shared" if the target calendar also hosts other entries (i.e. items you enter manually or through another app). With this configuration, all synced entries by Time Recording will be marked with a "[TR]" tag in the event details (so that the TR app can identify its entries later)
→ Set to "Exclusive" If the target calendar is only used for Time Recording. Caution: when set, each Sync step will delete all existing entries on the given day and replace with the according entries from Time Recording

• You can only sync to calendars available in the local Calendar app. If you want to sync to an unregistered account, add it using the according Android system settings (on Home screen, see Menu / System settings / Accounts & Sync, or equivalent on your device).
Also see the troubleshooting page.

• You can use any calendar account available through the android Calendar app. Click the "..." (three dots) lookup next to the calendar name input field to get the list of valid calendars.
→ Hint: most users use their Google account, but other calendar providers are also supported. If e.g. you have an MS Exchange account configured in your mail/calendar app, you can use this one as sync target calendar. Make sure that the Android "Account & sync" options are set properly.
→ Info: Sync is done in two steps: first from Time Recording to the local calendar app (controlled by Time Recording), then from the Calendar app to the web (controlled by the Calendar app).

• Extra feature if you want to exclude specific tasks from sync:
Work units are not synced if the name of the assigned task ends with " (-)", that is [blank][parentheses open][dash][parentheses close] 


Can I sync past days? I have just started using the sync and want to copy previous entries.
For users on Time Recording 5.03 or higher: click the "Sync existing entries" button on preferences page 1.
With older versions: open the "TimeRec Plugin 1" app and go to Menu / Calendar sync / Force sync.
• Put in "date from" and "date to" (sample value: 2011-01-27)
• Click Start
Note: if you intend to sync a large date range, test it with just a few days first and check in the calendar app if data has been copied correctly. Only then proceed with the full date range.


"Event Description" and tokens $d to $g are new features as per release 5.11

Use free text and/or substitution tokens. Sample: "Work log $1"
The following tokens will be replaced:
• $1: Task name (*)
• $2: Total time (*)
• $3: Start and end time of work unit (*)
• $4: Amount (*)
• $5: Running week time total.
• $6: Customer name (*)
• $7: Work unit notes (*)
• $8: Total time of work day
• $9: Amount total of work day
• $b: Task Extra 1 (*)
• $c: Task Extra 2 (*)
• $d: Generic "Stamp Value 1" (as per "Value1 enabled" setting on Preferences page 2) (*)
• $e: Generic "Stamp Value 2" (as per "Value2 enabled" setting on Preferences page 2) (*)
• $f: Day notes
• $g: Work unit details. This is only supported for the "Event description"

The number of synced calendar events depends on the setting "1 event per work unit / block / day":
 "1 event per work unit" copies over one event for each work unit line on the main screen. Tokens marked with (*) above relate to this work unit (e.g. $3 is begin/end of the given work unit)
 1 event per block: contiguous work units without break in-between are synced as one event. Tokens marked with (*) above relate to this time block (e.g. $3 is first punch-in and last punch-out of the work units of that block). If a token resolves to multiple text values (e.g. $1 with different tasks) sync will put a comma-separated list.
 1 event per day: one single entry for all wok units of that day. Same consolidation rules as with "1 event per block" apply