Creating or Updating a Timesheet
Once a timesheet is sent through to a payroll system, a manager may review it and feel its incorrect or alternately there may be times where an employee has forgotten to do a timesheet and a manager wants to add it from another application. This is all possible via the Deputy API where developers have the ability to not only update but also create timesheets from scratch.
Below are some code examples of how to update and create timesheets in the Deputy application using the Deputy API
Creating a timesheet via the API
When creating a timesheet in the Deputy application, there is a number of data elements which need to be known before this request can be made. Your application will need to know the following information:
- The start and stop time of the timesheet
- Whether any meal or rest break was taken
- Optionally, whether the employee was able to start the shift early, end the shift early and whether a break was mandatory.
If you intend to offer the ability to create timesheets remotely in Deputy from your app, you will need to think about how to capture that data.
Below is a simple example of adding a timesheet to the Deputy install via the API.
URL
curl --request POST --url 'https://{install}.{geo}.deputy.com/api/v1/supervise/timesheet/update'
Sample request to add a timesheet
{
"intEmployeeId": 1,
"intOpunitId": 2,
"intStartTimestamp": 1616360400,
"intEndTimestamp": 1616382000,
"arrSlots": [{
"blnEmptySlot": false,
"strType": "B",
"intStart": 7200,
"intEnd": 9000,
"intUnixStart": 1616367600,
"intUnixEnd": 1616369400,
"mixedActivity": {
"intState": 2,
"blnCanStartEarly": 1,
"blnCanEndEarly": 1,
"blnIsMandatory": 1,
"strBreakType": "M"
},
"strTypeName": "Meal Break",
"strState": "Finished"
}]
}
Data Elements
Data Element | Info |
---|---|
intEmployeeId | The id record of the employee for who the timesheet is for. |
intOpUnitId | The id of the location who the timesheet is for |
intStartTimestamp | The unix time of the start of the timesheet |
intEndTimestamp | The unix time of the end of the timesheet |
arrSlots | This contains information about any breaks that may have occured during the time period |
blnEmptySlot | If including data in this array always false as the slot exists |
strType | The type of slot. For breaks use B |
intStart | This is how much time has elapsed into the shift before the break started. So in the example 7200 ticks. |
intEnd | This is how much time has elapsed into the shift when the break ended. So in the example 9000 ticks. |
intUnixStart | The start timestamp of the break in unix time |
intUnixEnd | The end timestamp of the break in unix time |
mixedActivity object | This object gives information about the break itself such as can the employee choose to take it early. |
intState | The state of the break. 0 - Not started yet 1 - In progress. Employee has started break 2- A break has been taken and has both a start and end time. 3 - A scheduled break which is yet to start 4 - Finished break however the time may be different to the defined break at roster publish time because employee was allowed to take early or late etc. |
blnCanStartEarly | Boolean. 1 if break is allowed to start earlier than scheduled, 0 if not allowed. |
blnCanEndEarly | Boolean.1 if break is allowed to end earlier than scheduled, 0 if not allowed. |
blnIsMandatory | Whether the break should be considered mandatory. 1 if mandatory, 0 if not. |
strBreakType | The type of break. M - Meal break R - Rest break |
Sample response when adding a timesheet via the API
{
"Id": 257,
"Employee": 1,
"EmployeeHistory": 105907,
"EmployeeAgreement": 3,
"Date": "2021-03-22T00:00:00+11:00",
"StartTime": 1616360400,
"EndTime": 1616382000,
"Mealbreak": "2021-03-22T00:00:00+11:00",
"MealbreakSlots": {
"1616367600": "OUT",
"1616369400": "IN"
},
"Slots": [
{
"blnEmptySlot": false,
"strType": "B",
"intStart": 7200,
"intEnd": 9000,
"intUnixStart": 1616367600,
"intUnixEnd": 1616369400,
"mixedActivity": {
"intState": 2,
"blnCanStartEarly": 1,
"blnCanEndEarly": 1,
"blnIsMandatory": 1,
"strBreakType": "M"
},
"strTypeName": "Meal Break",
"strState": "Finished"
}
],
"TotalTime": 6,
"TotalTimeInv": 6,
"Cost": null,
"Roster": null,
"EmployeeComment": null,
"SupervisorComment": null,
"Supervisor": null,
"Disputed": false,
"TimeApproved": false,
"TimeApprover": null,
"Discarded": null,
"ValidationFlag": 0,
"OperationalUnit": 2,
"IsInProgress": false,
"IsLeave": false,
"LeaveId": null,
"LeaveRule": null,
"Invoiced": false,
"InvoiceComment": null,
"PayRuleApproved": false,
"Exported": null,
"StagingId": null,
"PayStaged": false,
"PaycycleId": 78,
"File": null,
"CustomFieldData": null,
"RealTime": 0,
"AutoProcessed": 0,
"AutoRounded": 0,
"AutoTimeApproved": 0,
"AutoPayRuleApproved": 0,
"Creator": 3,
"Created": "2022-09-11T12:51:23+10:00",
"Modified": "2022-09-11T12:51:23+10:00",
"OperationalUnitObject": {
"Id": 2,
"Creator": 1,
"Created": "2022-05-05T16:43:57+10:00",
"Modified": "2022-09-02T13:52:01+10:00",
"Company": 1,
"WorkType": null,
"ParentOperationalUnit": 0,
"OperationalUnitName": "Cashier",
"Active": true,
"PayrollExportName": "",
"Address": 158,
"Contact": null,
"RosterSortOrder": 1,
"ShowOnRoster": true,
"Colour": null,
"RosterActiveHoursSchedule": null,
"DailyRosterBudget": null,
"OperationalUnitType": 1,
"AddressObject": {
"Id": 158,
"ContactName": null,
"UnitNo": null,
"StreetNo": null,
"SuiteNo": null,
"PoBox": null,
"Street1": "90 Pacific St, Kiama NSW 2533, Australia",
"Street2": null,
"City": null,
"State": null,
"Postcode": null,
"Country": 13,
"Phone": null,
"Notes": null,
"Format": null,
"Saved": null,
"Creator": 1,
"Created": "2022-05-05T16:43:57+10:00",
"Modified": "2022-05-05T16:43:57+10:00",
"Print": "90 Pacific St, Kiama NSW 2533, Australia\n"
},
"CompanyCode": "Sim",
"CompanyName": "Simons Sambos",
"CompanyAddress": 157
},
"OnCost": 0,
"StartTimeLocalized": "2021-03-22T08:00:00+11:00",
"EndTimeLocalized": "2021-03-22T14:00:00+11:00",
"_DPMetaData": {
"System": "Timesheet",
"CreatorInfo": {
"Id": 3,
"DisplayName": "AdamRhys Sapo",
"EmployeeProfile": 3,
"Employee": 3,
"Photo": "https://photo2.deputy.com/deputec_b220505063318_11516/-135x135_45ca58e0db1a271fda5c83c399f7221a.jpg?Expires=1662947704&Key-Pair-Id=APKAINP5UVPK4IGBHXOQ&Signature=aXV4TVZHVAYNoYe6NLvgIkujV6kNjS5jmNkFwzlEhy0fZCS7qHvwBSQK5pMOU2xcpAWv3E6nIPuPxgj-eHOVf3uHWoRAT649EcW94OAPAL6kgdpNIUp8MiO1MNBUUY3ARgZ2gz5pzNKtIVVBToSsqiqW2xQQObH6goTMwPlMlXg_",
"Pronouns": 4,
"CustomPronouns": "Carlos"
},
"OperationalUnitInfo": {
"Id": 2,
"OperationalUnitName": "Cashier",
"Company": 1,
"CompanyName": "Simons Sambos",
"LabelWithCompany": "[Sim] Cashier"
},
"EmployeeInfo": {
"Id": 1,
"DisplayName": "Simon Hutchinson",
"EmployeeProfile": 1,
"Employee": 1,
"Photo": "https://photo2.deputy.com/deputec_b220505063318_11516/-135x135_1e4417bce8404f8facdfe89990f3bedb.jpg?Expires=1662938013&Key-Pair-Id=APKAINP5UVPK4IGBHXOQ&Signature=HucgElDpUN2nval4W9JDkeEytACcyxlm0-soF-Yqzsufal5evb4ibu4gZXhGZANw265oPFklFeP3u3La5gIYl1EE4Hd2Li88ZaB0sAh4OyNNjnI91esVzDpHyj-4691ILLFa6F~CjHAe4wvL4EXDuYXAeOQh4FNl843Sp8liv~Q_",
"Pronouns": 0,
"CustomPronouns": ""
},
"CustomFieldData": null
},
"CanEdit": true
}
The response is very much the same as that when you are retrieving existing timesheets as detailed in the Getting Timesheets from Deputy guide.
Updating an existing timesheet
The process to update an existing timesheet, is exactly the same as adding a new one (same URL for example) with two key differences. The id record of the timesheet to be updated is included in the payload and update on the end of the URL. Example below
URL
curl --request POST --url 'https://{install}.{geo}.deputy.com/api/v1/supervise/timesheet/update'
{
intTimesheetId: 1,
intStartTimestamp: 1616360400,
intEndTimestamp: 1616382000,
intOpunitId: 2,
strComment: "This timesheet was recently updated via the API"
}
In this example, the timesheet with the id record of 1 is having its start time, stop time and location updated, with a comment included that the timesheet was updated by the API.
Updated over 1 year ago