Add GetTicketByID method

This commit is contained in:
Steven Polley 2018-06-20 14:24:50 -06:00
parent 4e97924700
commit 480d28baa0
1 changed files with 202 additions and 0 deletions

202
3.0/connectwise/tickets.go Normal file
View File

@ -0,0 +1,202 @@
package connectwise
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
)
type Tickets []Ticket
type Ticket struct {
ID int `json:"id"`
Summary string `json:"summary"`
RecordType string `json:"recordType"`
Board struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
BoardHref string `json:"board_href"`
} `json:"_info"`
} `json:"board"`
Status struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
StatusHref string `json:"status_href"`
} `json:"_info"`
} `json:"status"`
Company struct {
ID int `json:"id"`
Identifier string `json:"identifier"`
Name string `json:"name"`
Info struct {
CompanyHref string `json:"company_href"`
MobileGUID string `json:"mobileGuid"`
} `json:"_info"`
} `json:"company"`
Site struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
SiteHref string `json:"site_href"`
MobileGUID string `json:"mobileGuid"`
} `json:"_info"`
} `json:"site,omitempty"`
AddressLine1 string `json:"addressLine1,omitempty"`
City string `json:"city,omitempty"`
StateIdentifier string `json:"stateIdentifier,omitempty"`
Zip string `json:"zip,omitempty"`
ContactName string `json:"contactName"`
ContactPhoneNumber string `json:"contactPhoneNumber"`
ContactEmailAddress string `json:"contactEmailAddress,omitempty"`
Team struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
TeamHref string `json:"team_href"`
} `json:"_info"`
} `json:"team"`
Priority struct {
ID int `json:"id"`
Name string `json:"name"`
Sort int `json:"sort"`
Info struct {
PriorityHref string `json:"priority_href"`
ImageHref string `json:"image_href"`
} `json:"_info"`
} `json:"priority"`
ServiceLocation struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
LocationHref string `json:"location_href"`
} `json:"_info"`
} `json:"serviceLocation"`
Source struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
SourceHref string `json:"source_href"`
} `json:"_info"`
} `json:"source"`
Agreement struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
AgreementHref string `json:"agreement_href"`
} `json:"_info"`
} `json:"agreement,omitempty"`
Severity string `json:"severity"`
Impact string `json:"impact"`
AllowAllClientsPortalView bool `json:"allowAllClientsPortalView"`
CustomerUpdatedFlag bool `json:"customerUpdatedFlag"`
AutomaticEmailContactFlag bool `json:"automaticEmailContactFlag"`
AutomaticEmailResourceFlag bool `json:"automaticEmailResourceFlag"`
AutomaticEmailCcFlag bool `json:"automaticEmailCcFlag"`
ClosedDate time.Time `json:"closedDate"`
ClosedBy string `json:"closedBy"`
ClosedFlag bool `json:"closedFlag"`
DateEntered time.Time `json:"dateEntered"`
EnteredBy string `json:"enteredBy"`
ActualHours float64 `json:"actualHours,omitempty"`
Approved bool `json:"approved"`
EstimatedExpenseCost float64 `json:"estimatedExpenseCost"`
EstimatedExpenseRevenue float64 `json:"estimatedExpenseRevenue"`
EstimatedProductCost float64 `json:"estimatedProductCost"`
EstimatedProductRevenue float64 `json:"estimatedProductRevenue"`
EstimatedTimeCost float64 `json:"estimatedTimeCost"`
EstimatedTimeRevenue float64 `json:"estimatedTimeRevenue"`
BillingMethod string `json:"billingMethod"`
SubBillingMethod string `json:"subBillingMethod"`
DateResolved time.Time `json:"dateResolved"`
DateResplan time.Time `json:"dateResplan"`
DateResponded time.Time `json:"dateResponded"`
ResolveMinutes int `json:"resolveMinutes"`
ResPlanMinutes int `json:"resPlanMinutes"`
RespondMinutes int `json:"respondMinutes"`
IsInSLA bool `json:"isInSla"`
HasChildTicket bool `json:"hasChildTicket"`
BillTime string `json:"billTime"`
BillExpenses string `json:"billExpenses"`
BillProducts string `json:"billProducts"`
LocationID int `json:"locationId"`
BusinessUnitID int `json:"businessUnitId"`
MobileGUID string `json:"mobileGuid"`
SLA struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
SLAHref string `json:"sla_href"`
} `json:"_info"`
} `json:"sla"`
Currency struct {
ID int `json:"id"`
Symbol string `json:"symbol"`
IsoCode string `json:"isoCode"`
Name string `json:"name"`
Info struct {
CurrencyHref string `json:"currency_href"`
} `json:"_info"`
} `json:"currency"`
Info struct {
LastUpdated time.Time `json:"lastUpdated"`
UpdatedBy string `json:"updatedBy"`
ActivitiesHref string `json:"activities_href"`
ScheduleentriesHref string `json:"scheduleentries_href"`
DocumentsHref string `json:"documents_href"`
ConfigurationsHref string `json:"configurations_href"`
TasksHref string `json:"tasks_href"`
NotesHref string `json:"notes_href"`
ProductsHref string `json:"products_href"`
TimeentriesHref string `json:"timeentries_href"`
ExpenseEntriesHref string `json:"expenseEntries_href"`
} `json:"_info"`
CustomFields []struct {
ID int `json:"id"`
Caption string `json:"caption"`
Type string `json:"type"`
EntryMethod string `json:"entryMethod"`
NumberOfDecimals int `json:"numberOfDecimals"`
} `json:"customFields"`
RequiredDate time.Time `json:"requiredDate,omitempty"`
BudgetHours float64 `json:"budgetHours,omitempty"`
AddressLine2 string `json:"addressLine2,omitempty"`
Contact struct {
ID int `json:"id"`
Name string `json:"name"`
Info struct {
MobileGUID string `json:"mobileGuid"`
ContactHref string `json:"contact_href"`
} `json:"_info"`
} `json:"contact,omitempty"`
ContactPhoneExtension string `json:"contactPhoneExtension,omitempty"`
}
func GetTicketByID(site *ConnectwiseSite, ticketID int) *Ticket {
ticket := Ticket{}
//Build the request URL
var Url *url.URL
Url, err := url.Parse(site.Site)
check(err)
Url.Path += fmt.Sprintf("/service/tickets/%d", ticketID)
//Build and make the request
client := &http.Client{}
req, err := http.NewRequest("GET", Url.String(), nil)
check(err)
req.Header.Set("Authorization", site.Auth)
req.Header.Set("Content-Type", "application/json")
response, err := client.Do(req)
check(err)
defer response.Body.Close()
body := getHTTPResponseBody(response)
check(json.Unmarshal(body, &ticket))
return &ticket
}