Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

188 lines
4.7KB

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/url"
  6. "strings"
  7. "time"
  8. )
  9. type crmdMeetingAttendance struct {
  10. Status string `json:"status,omitempty"`
  11. }
  12. type crmdMeeting struct {
  13. crmdEntityBase
  14. Status string `json:"status,omitempty"`
  15. DateStart string `json:"dateStart,omitempty"`
  16. DateEnd string `json:"dateEnd,omitempty"`
  17. Duration int `json:"duration,omitempty"`
  18. Reminders []struct {
  19. Seconds int `json:"seconds,omitempty"`
  20. Type string `json:"type,omitempty"`
  21. } `json:"reminders,omitempty"`
  22. Venue string `json:"venue,omitempty"`
  23. ParentID string `json:"parentId,omitempty"`
  24. ParentType string `json:"parentType,omitempty"`
  25. ParentName string `json:"parentName,omitempty"`
  26. AccountID string `json:"accountId,omitempty"`
  27. AccountName string `json:"accountName,omitempty"`
  28. //users, attendance
  29. UsersIds []string `json:"usersIds,omitempty"`
  30. UsersNames map[string]string `json:"usersNames,omitempty"`
  31. UsersColumns map[string]crmdMeetingAttendance `json:"usersColumns"`
  32. //contacts, attendance
  33. ContactsIds []string `json:"contactsIds,omitempty"`
  34. ContactsNames map[string]string `json:"contactsNames,omitempty"`
  35. ContactsColumns map[string]crmdMeetingAttendance `json:"contactsColumns,omitempty"`
  36. //lead, attendance
  37. LeadsIds []string `json:"leadsIds,omitempty"`
  38. LeadsNames map[string]string `json:"leadsNames,omitempty"`
  39. LeadsColumns map[string]crmdMeetingAttendance `json:"leadsColumns"`
  40. //cover
  41. CoverID string `json:"coverId,omitempty"`
  42. CoverName string `json:"coverName,omitempty"`
  43. //for web spa operation
  44. spaFlashTitle string
  45. spaFlashMsg []string
  46. }
  47. func (m crmdMeeting) save() (newMeeting crmdMeeting, err error) {
  48. jsonB, err := json.Marshal(m)
  49. if err != nil {
  50. return
  51. }
  52. if m.ID == "" { //create
  53. entity, e := crmCreateEntity("Meeting", jsonB)
  54. if e != nil {
  55. err = e
  56. return
  57. }
  58. newMeeting = entity.(crmdMeeting)
  59. } else { //patch
  60. entity, e := crmUpdateEntity("Meeting", m.ID, jsonB)
  61. if e != nil {
  62. err = e
  63. return
  64. }
  65. newMeeting = entity.(crmdMeeting)
  66. }
  67. return
  68. }
  69. func (m *crmdMeeting) clearSpaErr(e string) {
  70. m.spaFlashMsg = []string{}
  71. }
  72. func (m *crmdMeeting) addFlashMsg(e string) {
  73. m.spaFlashMsg = append(m.spaFlashMsg, e)
  74. }
  75. func (m crmdMeeting) FlashMessage() string {
  76. v := strings.Join(m.spaFlashMsg, "<br>")
  77. return v
  78. }
  79. func (m crmdMeeting) FlashTitle() string {
  80. return m.spaFlashTitle
  81. }
  82. func (m *crmdMeeting) setFlashTitle(val string) string {
  83. m.spaFlashTitle = val
  84. return m.spaFlashTitle
  85. }
  86. func (m crmdMeeting) hasError() bool {
  87. return len(m.spaFlashMsg) > 0
  88. }
  89. func (m crmdMeeting) CoverCacheURL() string {
  90. if m.CoverID != "" {
  91. u := CRMConfig.CacheSiteURL + "?a=" + m.CoverID
  92. return buildSignatureAppend2Url(u, IntraAPIConfig.CRMSecrete)
  93. }
  94. return GlobalPath.ThisSiteURL + "spa/assets/img/meetingdefault.jpg"
  95. }
  96. func crmGetMeeting(id string) (ret crmdMeeting, err error) {
  97. entity, err := crmGetEntity("Meeting", id)
  98. if err != nil && entity == nil {
  99. return
  100. }
  101. ret = entity.(crmdMeeting)
  102. return
  103. }
  104. func (m crmdMeeting) StartDate() string {
  105. t := time.Now().Add(time.Duration(240) * time.Hour) //10days later
  106. if m.DateStart != "" {
  107. t, _ = time.Parse(getCrmTimeLayout(), m.DateStart)
  108. }
  109. AEST, _ := time.LoadLocation("Australia/Sydney")
  110. return t.In(AEST).Format("02 January, 2006")
  111. }
  112. func (m crmdMeeting) StartHour() string {
  113. if m.DateStart != "" {
  114. AEST, _ := time.LoadLocation("Australia/Sydney")
  115. t, _ := time.Parse(getCrmTimeLayout(), m.DateStart)
  116. return t.In(AEST).Format("15:04")
  117. }
  118. return "10:30"
  119. }
  120. func (m crmdMeeting) DurationHour() string {
  121. if m.Duration > 20 {
  122. hour := m.Duration / 3600
  123. minute := (m.Duration % 3600) / 60
  124. return fmt.Sprintf("%02d:%02d", hour, minute)
  125. }
  126. return "01:30"
  127. }
  128. func (m crmdMeeting) getEditMeetingURL(leadID string) string {
  129. u, _ := url.Parse(GlobalPath.ThisSiteURL + "spa/redirect")
  130. q := u.Query()
  131. q.Add("url", GlobalPath.ThisSiteURL+"spa/editmeeting")
  132. if leadID != "" {
  133. q.Add("lid", leadID)
  134. }
  135. q.Add("meetingid", m.ID)
  136. u.RawQuery = q.Encode()
  137. return buildSignatureAppend2Url(u.String(), IntraAPIConfig.CRMSecrete)
  138. }
  139. //meeting status is "submitted"
  140. func (m *crmdMeeting) getMeetingByLead(leadID string) {
  141. filters := []crmdSearchFilter{
  142. {"parentId", "equals", leadID},
  143. {"parentType", "equals", "Lead"},
  144. {"status", "equals", "submitted"},
  145. }
  146. cs, err := crmSearchEntity("Meeting", filters)
  147. if err != nil && cs.Total < 1 {
  148. return
  149. }
  150. total, list, err := cs.toEntityList("Meeting")
  151. if total < 1 || err != nil || list == nil {
  152. return
  153. }
  154. meetings := list.([]crmdMeeting)
  155. // log.Println(meetings)
  156. // log.Println(len(meetings))
  157. *m = meetings[0]
  158. // log.Println(*m)
  159. // log.Println(m.ID)
  160. }