package main import ( "encoding/json" "fmt" "net/url" "strings" "time" ) type crmdMeetingAttendance struct { Status string `json:"status,omitempty"` } type crmdMeeting struct { crmdEntityBase Status string `json:"status,omitempty"` DateStart string `json:"dateStart,omitempty"` DateEnd string `json:"dateEnd,omitempty"` Duration int `json:"duration,omitempty"` Reminders []struct { Seconds int `json:"seconds,omitempty"` Type string `json:"type,omitempty"` } `json:"reminders,omitempty"` Venue string `json:"venue,omitempty"` ParentID string `json:"parentId,omitempty"` ParentType string `json:"parentType,omitempty"` ParentName string `json:"parentName,omitempty"` AccountID string `json:"accountId,omitempty"` AccountName string `json:"accountName,omitempty"` //users, attendance UsersIds []string `json:"usersIds,omitempty"` UsersNames map[string]string `json:"usersNames,omitempty"` UsersColumns map[string]crmdMeetingAttendance `json:"usersColumns"` //contacts, attendance ContactsIds []string `json:"contactsIds,omitempty"` ContactsNames map[string]string `json:"contactsNames,omitempty"` ContactsColumns map[string]crmdMeetingAttendance `json:"contactsColumns,omitempty"` //lead, attendance LeadsIds []string `json:"leadsIds,omitempty"` LeadsNames map[string]string `json:"leadsNames,omitempty"` LeadsColumns map[string]crmdMeetingAttendance `json:"leadsColumns"` //cover CoverID string `json:"coverId,omitempty"` CoverName string `json:"coverName,omitempty"` //for web spa operation spaFlashTitle string spaFlashMsg []string } func (m crmdMeeting) save() (newMeeting crmdMeeting, err error) { jsonB, err := json.Marshal(m) if err != nil { return } if m.ID == "" { //create entity, e := crmCreateEntity("Meeting", jsonB) if e != nil { err = e return } newMeeting = entity.(crmdMeeting) } else { //patch entity, e := crmUpdateEntity("Meeting", m.ID, jsonB) if e != nil { err = e return } newMeeting = entity.(crmdMeeting) } return } func (m *crmdMeeting) clearSpaErr(e string) { m.spaFlashMsg = []string{} } func (m *crmdMeeting) addFlashMsg(e string) { m.spaFlashMsg = append(m.spaFlashMsg, e) } func (m crmdMeeting) FlashMessage() string { v := strings.Join(m.spaFlashMsg, "
") return v } func (m crmdMeeting) FlashTitle() string { return m.spaFlashTitle } func (m *crmdMeeting) setFlashTitle(val string) string { m.spaFlashTitle = val return m.spaFlashTitle } func (m crmdMeeting) hasError() bool { return len(m.spaFlashMsg) > 0 } func (m crmdMeeting) CoverCacheURL() string { if m.CoverID != "" { u := CRMConfig.CacheSiteURL + "?a=" + m.CoverID return buildSignatureAppend2Url(u, IntraAPIConfig.CRMSecrete) } return GlobalPath.ThisSiteURL + "spa/assets/img/meetingdefault.jpg" } func crmGetMeeting(id string) (ret crmdMeeting, err error) { entity, err := crmGetEntity("Meeting", id) if err != nil && entity == nil { return } ret = entity.(crmdMeeting) return } func (m crmdMeeting) StartDate() string { t := time.Now().Add(time.Duration(240) * time.Hour) //10days later if m.DateStart != "" { t, _ = time.Parse(getCrmTimeLayout(), m.DateStart) } AEST, _ := time.LoadLocation("Australia/Sydney") return t.In(AEST).Format("02 January, 2006") } func (m crmdMeeting) StartHour() string { if m.DateStart != "" { AEST, _ := time.LoadLocation("Australia/Sydney") t, _ := time.Parse(getCrmTimeLayout(), m.DateStart) return t.In(AEST).Format("15:04") } return "10:30" } func (m crmdMeeting) DurationHour() string { if m.Duration > 20 { hour := m.Duration / 3600 minute := (m.Duration % 3600) / 60 return fmt.Sprintf("%02d:%02d", hour, minute) } return "01:30" } func (m crmdMeeting) getEditMeetingURL(leadID string) string { u, _ := url.Parse(GlobalPath.ThisSiteURL + "spa/redirect") q := u.Query() q.Add("url", GlobalPath.ThisSiteURL+"spa/editmeeting") if leadID != "" { q.Add("lid", leadID) } q.Add("meetingid", m.ID) u.RawQuery = q.Encode() return buildSignatureAppend2Url(u.String(), IntraAPIConfig.CRMSecrete) } //meeting status is "submitted" func (m *crmdMeeting) getMeetingByLead(leadID string) { filters := []crmdSearchFilter{ {"parentId", "equals", leadID}, {"parentType", "equals", "Lead"}, {"status", "equals", "submitted"}, } cs, err := crmSearchEntity("Meeting", filters) if err != nil && cs.Total < 1 { return } total, list, err := cs.toEntityList("Meeting") if total < 1 || err != nil || list == nil { return } meetings := list.([]crmdMeeting) // log.Println(meetings) // log.Println(len(meetings)) *m = meetings[0] // log.Println(*m) // log.Println(m.ID) }