| GET | /{Workspace}/API/Task/Schema | ||
|---|---|---|---|
| GET, PUT, POST, DELETE | /{Workspace}/API/Task/{Id} | ||
| GET, PUT, POST, DELETE | /{Workspace}/API/Task | ||
| GET | /{Workspace}/API/Task/Schema/{TaskTemplate} |
import Foundation
import ServiceStack
// @DataContract
public class PublicTask : Codable
{
// @DataMember
public var id:String
// @DataMember
public var workspace:String
// @DataMember
public var taskTemplate:String
// @DataMember
public var task:Task
// @DataMember
public var tasks:[Task] = []
required public init(){}
}
/**
* Contains the data for a task within the system, with versioned object referneces to users and forms.
*/
public class Task : Codable
{
public var workspace:String
public var assignedWorkspace:String
public var objectId:String
public var versionId:String
public var basedOn:String
public var externalId:String
public var created:String
public var lastUpdated:String
public var lastUpdatedLocal:String
public var rank:Double
public var name:String
public var Description:String
public var address:Address
public var schedules:[Schedule] = []
public var status:String
public var blockedReason:String
public var taskType:String
public var dueDate:String
public var desiredCompletionDate:String
public var desiredTimeWindow:TimeWindow
public var priority:Int?
public var percentComplete:Double
public var users:[String] = []
public var usersExtended:[DomainItem] = []
public var teams:[DomainItem] = []
public var documents:[String] = []
public var docs:[DomainItem] = []
public var docSummaries:[Document] = []
public var data:[String:Object] = [:]
public var contacts:[String] = []
public var statusLocation:Location
public var assets:[String] = []
public var tasks:[String] = []
public var owner:String
public var events:[EventItem] = []
public var userStatuses:[String:[EventItem]] = [:]
public var createdBy:String
public var timeZone:String
public var seriesId:String
public var jobTimerRunTime:Int
public var jobTimerPauseTime:Int
public var jobTimerTransitTime:Int
public var currentJobTimerStatus:String
public var currentJobTimerTime:String
public var inventoryItems:[String] = []
public var laborItems:[String] = []
public var requiredAssets:[RequiredAsset] = []
public var requiredInventoryTypes:[RequiredInventoryType] = []
public var requiredUsers:[RequiredUser] = []
public var locked:Bool
public var ready:Bool
public var taskTemplate:TaskTemplate
public var customDataFields:[CustomDataField] = []
required public init(){}
}
public class Address : Codable
{
public var street:String
public var unit:String
public var city:String
public var state:String
public var zip:String
public var contactTitle:String
public var contactName:String
public var contactPhone:String
public var contactEmail:String
public var location:Location
public var siteName:String
public var geocodeFailed:Bool
public var country:String
required public init(){}
}
public class Location : Codable
{
public var y:Double
public var x:Double
required public init(){}
}
public class Schedule : Codable
{
public var workspace:String
public var objectId:String
public var versionId:String
public var basedOn:String
public var start:String
public var end:String
public var timeZone:String
public var users:[String] = []
public var teams:[String] = []
public var data:[String:Object] = [:]
required public init(){}
}
public class TimeWindow : Codable
{
public var start:Int
public var end:Int
required public init(){}
}
public class DomainItem : Codable
{
public var workspace:String
public var objectId:String
public var versionId:String
public var lastUpdated:String
required public init(){}
}
/**
* Represents a document associated with a task or user. To return multiple documents, call /{Workspace}/Document and pass in query parameter ids = comma separated list of document ids.
*/
public class Document : Codable
{
public var workspace:String
public var assignedWorkspace:String
public var objectId:String
public var versionId:String
public var basedOn:String
public var created:String
public var externalId:String
public var lastUpdated:String
public var type:String
public var name:String
public var title:String
public var data:[String:Object] = [:]
public var owner:ClassedItem
public var secondaryOwners:[ClassedItem] = []
public var location:Location
public var date:String
public var createdBy:String
public var percentComplete:Double
public var percentTotal:Int
public var percentDone:Int
public var rangeExceptions:[RangeExceptionItem] = []
public var submitted:Bool
public var schema:String
public var ownerData:DocumentOwnerData
required public init(){}
}
public class ClassedItem : Codable
{
public var objectId:String
public var `class`:String
public var versionId:String
public var ancestors:[String] = []
public var type:String
required public init(){}
}
public class RangeExceptionItem : Codable
{
public var binding:String
public var message:String
public var type:String
public var className:String
required public init(){}
}
public class DocumentOwnerData : Codable
{
public var ownerType:String
public var taskData:DocumentOwnerDataTask
public var assetData:DocumentOwnerDataAsset
required public init(){}
}
public class DocumentOwnerDataTask : Codable
{
public var objectId:String
public var name:String
public var status:String
public var taskType:String
public var lastUpdated:Date
public var created:Date
public var priority:Int?
public var rank:Double
public var firstTeam:Team
public var address:Address
public var customDataFields:[CustomDataField] = []
required public init(){}
}
/**
* Represents a DTO for a team in a workspace. Calls without an ObjectId will retrieve an array of all team objects for the workspace.
*/
public class Team : Codable
{
public var workspace:String
public var timeZone:String
public var objectId:String
public var externalId:String
public var versionId:String
public var basedOn:String
public var name:String
public var enabled:Bool
public var members:[DomainItem] = []
public var lead:DomainItem
public var parent:DomainItem
public var address:Address
public var data:[String:String] = [:]
public var teams:[String] = []
public var events:[EventItem] = []
public var createdBy:String
public var activeLaborTypes:[String:Object] = [:]
required public init(){}
}
public class EventItem : Codable
{
public var objectId:String
public var date:String
public var location:Location
public var barcode:String
public var details:String
public var type:String
public var isScan:Bool
public var user:String
public var selectedBy:String
public var status:String
public var statusType:String
public var dateCreated:String
public var automatic:Bool
required public init(){}
}
public class Address : AddressBase
{
public var siteName:String
public var contactTitle:String
public var contactName:String
public var contactPhone:String
public var contactEmail:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case siteName
case contactTitle
case contactName
case contactPhone
case contactEmail
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
siteName = try container.decodeIfPresent(String.self, forKey: .siteName)
contactTitle = try container.decodeIfPresent(String.self, forKey: .contactTitle)
contactName = try container.decodeIfPresent(String.self, forKey: .contactName)
contactPhone = try container.decodeIfPresent(String.self, forKey: .contactPhone)
contactEmail = try container.decodeIfPresent(String.self, forKey: .contactEmail)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if siteName != nil { try container.encode(siteName, forKey: .siteName) }
if contactTitle != nil { try container.encode(contactTitle, forKey: .contactTitle) }
if contactName != nil { try container.encode(contactName, forKey: .contactName) }
if contactPhone != nil { try container.encode(contactPhone, forKey: .contactPhone) }
if contactEmail != nil { try container.encode(contactEmail, forKey: .contactEmail) }
}
}
public class AddressBase : Codable
{
public var id:String
public var addressLine1:String
public var addressLine2:String
public var city:String
public var state:String
public var zip:String
public var location:Location
public var name:String
public var nameSingleLine:String
public var nameSingleLine5DigitZip:String
public var hasValidLocation:Bool
public var geocodeFailed:Bool
public var geocodeResultCode:String
public var country:String
required public init(){}
}
public class Location : Codable
{
public var latitude:Double
public var longitude:Double
public var hasValidLocation:Bool
required public init(){}
}
public class CustomDataField : Codable
{
public var binding:String
public var label:String
//value:Object ignored. Type could not be extended in Swift
public var dataType:String
public var isReadOnly:Bool
public var isHidden:Bool
public var values:String
required public init(){}
}
public class DocumentOwnerDataAsset : Codable
{
public var objectId:String
public var name:String
public var assetType:String
public var lastUpdated:Date
public var created:Date
public var address:AddressBasic
public var customDataFields:[CustomDataField] = []
required public init(){}
}
public class AddressBasic : AddressBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class RequiredAsset : Codable
{
public var number:Int
public var type:String
required public init(){}
}
public class RequiredInventoryType : Codable
{
public var number:Int
public var type:String
public var name:String
public var isSerialized:Bool
public var Description:String
required public init(){}
}
public class RequiredUser : Codable
{
public var number:Int
public var skillTags:[String] = []
required public init(){}
}
public class TaskTemplate : Codable
{
public var customFields:[CustomField] = []
public var statuses:[TaskStatusDef] = []
public var taskListDetails:String
public var autoAssignStatus:String
public var autoUnassignStatus:String
public var autoScheduleStatus:String
public var autoUnscheduleStatus:String
public var autoUpdateStartStatus:String
public var autoUpdateEndStatus:String
public var arrivalStatus:String
public var departureStatus:String
public var confirmArrival:Bool
public var confirmDeparture:Bool
public var manualArrivalAllowed:Bool
public var manualDepartureAllowed:Bool
public var hideDisabledStatuses:Bool
public var geofenceRadius:Int
required public init(){}
}
public class CustomField : Codable
{
public var key:String
public var label:String
public var isActive:Bool
public var isReadOnly:Bool
public var isHidden:Bool
public var isMandatory:Bool
public var displayOnMap:Bool
public var customFieldDataType:CustomFieldDataType
public var values:String
public var prompt:String
public var `default`:String
public var defaultAutoUpdate:Bool
public var requiredIf:String
public var hidden:[String] = []
public var readOnly:[String] = []
public var controlArgs:[String:Object] = [:]
public var indexSlot:String
public var index:String
required public init(){}
}
public enum CustomFieldDataType : String, Codable
{
case Text
case Number
case Decimal
case Money
case PhoneNumber
case Ssn
case List
case Date
case File
case Barcode
case GPS
case Photo
case Spacer
case Separator
case AutoNumber
case TextArea
case Contact
case User
case Asset
case Checkbox
case CoreAssetList
case CoreTaskList
case CoreParentTask
case CoreContactList
case ComboBox
case DateTime
case Time
case Location
case CoreLocation
case Label
case EventLog
case Address
case Catalog
case CoreTeamList
case Segment
case CoreTimeSeries
case TimeSeries
case Command
case AutoNumberNumeric
case CatalogList
case CatalogComboBox
case DateRange
case DocumentGrid
case ReportLink
case Hyperlink
case PercentComplete
case Chart
case Range
case ExternalId
case AssetCatalog
case Inventory
case CoreTaskLaborItemTypes
case CoreTaskLaborItems
case ObjectList
case CoreTimeZone
}
public class TaskStatusDef : Codable
{
public var name:String
public var color:String
public var code:String
public var transitionFrom:String
public var transitionMessage:String
public var transitionCustomFields:[String] = []
public var hiddenIf:String
public var isStart:Bool
public var isEnd:Bool
public var isBlocked:Bool
public var statusType:String
public var progressType:String
public var autoCreateDocuments:[String] = []
public var lockTask:Bool
public var submittedForms:[BindingDescriptor] = []
required public init(){}
}
public class BindingDescriptor : Codable
{
public var binding:String
public var required:Bool
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /{Workspace}/API/Task/{Id} HTTP/1.1
Host: dev.fieldsquared.com
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"Id":"String","Workspace":"String","TaskTemplate":"String","Task":{"Name":"String","Description":"String","ExternalId":"String","TaskType":"String","Priority":0,"DueDate":"String","DesiredCompletionDate":"String","Lat":0,"Lon":0,"StreetAddress":"String","Unit":"String","City":"String","State":"String","Zip":"String","Country":"String","ScheduleStart":"String","ScheduleEnd":"String","Status":"String","User":"String","Team":"String","Asset":"String","Contact":"String","TimeZone":"String","LastUpdated":"String","Created":"String","Data":{"String":{}}},"Tasks":[{"Name":"String","Description":"String","ExternalId":"String","TaskType":"String","Priority":0,"DueDate":"String","DesiredCompletionDate":"String","Lat":0,"Lon":0,"StreetAddress":"String","Unit":"String","City":"String","State":"String","Zip":"String","Country":"String","ScheduleStart":"String","ScheduleEnd":"String","Status":"String","User":"String","Team":"String","Asset":"String","Contact":"String","TimeZone":"String","LastUpdated":"String","Created":"String","Data":{"String":{}}}]}