Classes/003-SDPRequest.ps1

class SDPRequest {
    [string]$Id
    [string]$Subject
    [string]$Description
    [SDPReference]$Status
    [SDPReference]$Priority
    [SDPReference]$Urgency
    [SDPReference]$Impact
    [SDPReference]$RequestType
    [SDPReference]$Mode
    [SDPReference]$Level
    [SDPReference]$Category
    [SDPReference]$Subcategory
    [SDPReference]$Item
    [SDPReference]$Requester
    [SDPReference]$CreatedBy
    [SDPReference]$Technician
    [SDPReference]$Group
    [SDPReference]$Site
    [SDPReference]$Department
    [nullable[datetime]]$CreatedTime
    [nullable[datetime]]$UpdatedTime
    [nullable[datetime]]$DueByTime
    [nullable[datetime]]$ResolvedTime
    [nullable[datetime]]$ClosedTime
    [bool]$IsOverdue
    [bool]$IsServiceRequest
    [string]$Resolution
    [pscustomobject]$UdfFields
    [pscustomobject]$RawData

    SDPRequest([object]$data) {
        $this.Id            = $data.id
        $this.Subject       = $data.subject
        $this.Description   = $data.description
        $this.IsOverdue     = [bool]$data.is_overdue
        $this.IsServiceRequest = [bool]$data.is_service_request

        if ($data.status)       { $this.Status      = [SDPReference]::new($data.status) }
        if ($data.priority)     { $this.Priority     = [SDPReference]::new($data.priority) }
        if ($data.urgency)      { $this.Urgency      = [SDPReference]::new($data.urgency) }
        if ($data.impact)       { $this.Impact       = [SDPReference]::new($data.impact) }
        if ($data.request_type) { $this.RequestType  = [SDPReference]::new($data.request_type) }
        if ($data.mode)         { $this.Mode         = [SDPReference]::new($data.mode) }
        if ($data.level)        { $this.Level        = [SDPReference]::new($data.level) }
        if ($data.category)     { $this.Category     = [SDPReference]::new($data.category) }
        if ($data.subcategory)  { $this.Subcategory  = [SDPReference]::new($data.subcategory) }
        if ($data.item)         { $this.Item         = [SDPReference]::new($data.item) }
        if ($data.requester)    { $this.Requester    = [SDPReference]::new($data.requester) }
        if ($data.created_by)   { $this.CreatedBy    = [SDPReference]::new($data.created_by) }
        if ($data.technician)   { $this.Technician   = [SDPReference]::new($data.technician) }
        if ($data.group)        { $this.Group        = [SDPReference]::new($data.group) }
        if ($data.site)         { $this.Site         = [SDPReference]::new($data.site) }
        if ($data.department)   { $this.Department   = [SDPReference]::new($data.department) }

        $this.CreatedTime  = [SDPUtil]::ParseTime($data.created_time)
        $this.UpdatedTime  = [SDPUtil]::ParseTime($data.updated_time)
        $this.DueByTime    = [SDPUtil]::ParseTime($data.due_by_time)
        $this.ResolvedTime = [SDPUtil]::ParseTime($data.resolved_time)
        $this.ClosedTime   = [SDPUtil]::ParseTime($data.closed_time)

        if ($data.resolution) { $this.Resolution = $data.resolution.content }
        if ($data.udf_fields) { $this.UdfFields  = $data.udf_fields }

        $this.RawData = $data
    }
}