quote.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package budget
  2. import (
  3. "time"
  4. "zhiyuan/pkg/db"
  5. "zhiyuan/pkg/utils"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type QuoteData interface {
  9. GetID() int64
  10. GetProp(string) (string, bool)
  11. GetSubs() *[]QuoteData
  12. GetHeaders() *[]QuoteData
  13. GetName() string
  14. GetItem() *Item
  15. GetValue() string
  16. GetQuote() *Quote
  17. GetTable() *Table
  18. GetHeader() *Header
  19. GetModule() *Module
  20. GetGroup() *Group
  21. GetRow() *Row
  22. GetMyItem() *Item
  23. }
  24. type Quote struct {
  25. ID int64 `json:"id" prop:"add:false"`
  26. Name string `json:"name" label:"报价名称" type:"string" prop:"add edit" search:"like"`
  27. State int64 `json:"state" label:"状态" type:"int" prop:"edit" default:"0" search:"="`
  28. Property string `json:"property" label:"属性" type:"string" prop:"edit"`
  29. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  30. CreatedAt int64 `json:"created_at" prop:"add:false select:false"`
  31. UpdatedAt int64 `json:"updated_at" prop:"add:false select:false"`
  32. Tables []QuoteData `json:"tables" prop:"ignore"`
  33. Prop map[string]string `json:"prop" prop:"ignore"`
  34. db.BaseModel
  35. }
  36. func (Quote) TableName() string {
  37. return "zy_budget_quote"
  38. }
  39. func (Quote) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  40. return true
  41. }
  42. func (Quote) OnePrivilege(c *gin.Context, id int64) bool {
  43. return true
  44. }
  45. func (Quote) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  46. return nil
  47. }
  48. func (Quote) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  49. return nil
  50. }
  51. func (Quote) DelPrivilege(c *gin.Context, id int64) error {
  52. return nil
  53. }
  54. func (model Quote) AddAfter(c *gin.Context, id int64, post map[string]interface{}, data map[string]interface{}) {
  55. if use, ok := post["use"].(float64); ok && use != 0 {
  56. quote, _, _, _, _, _, _ := GetQuoteModel(int64(use))
  57. if quote != nil {
  58. db.UpdateModel(db.Type(model), id, map[string]interface{}{
  59. "property": quote.Property,
  60. })
  61. order := time.Now().Unix()
  62. CopyTables(quote.Tables, id, order)
  63. }
  64. }
  65. }
  66. func (Quote) Page() bool {
  67. return true
  68. }
  69. func (Quote) Count() bool {
  70. return true
  71. }
  72. func (model Quote) GetProperty() map[string]string {
  73. props := make(map[string]string)
  74. utils.JsonDecode(model.Property).To(&props)
  75. return props
  76. }
  77. func (model Quote) GetID() int64 {
  78. return model.ID
  79. }
  80. func (model Quote) GetProp(name string) (expression string, ok bool) {
  81. expression, ok = model.Prop[name]
  82. return
  83. }
  84. func (model Quote) GetSubs() *[]QuoteData {
  85. return &model.Tables
  86. }
  87. func (model Quote) GetName() string {
  88. return model.Name
  89. }
  90. func (model Quote) GetHeaders() *[]QuoteData {
  91. return nil
  92. }
  93. func (model Quote) GetItem() *Item {
  94. return nil
  95. }
  96. func (model Quote) GetValue() string {
  97. return ""
  98. }
  99. func (model Quote) GetQuote() *Quote {
  100. return &model
  101. }
  102. func (model Quote) GetTable() *Table {
  103. return nil
  104. }
  105. func (model Quote) GetHeader() *Header {
  106. return nil
  107. }
  108. func (model Quote) GetModule() *Module {
  109. return nil
  110. }
  111. func (model Quote) GetGroup() *Group {
  112. return nil
  113. }
  114. func (model Quote) GetRow() *Row {
  115. return nil
  116. }
  117. func (model Quote) GetMyItem() *Item {
  118. return nil
  119. }
  120. func GetQuoteModel(id int64) (quote *Quote, tables []QuoteData, headers []QuoteData, modules []QuoteData, groups []QuoteData, rows []QuoteData, items []QuoteData) {
  121. db.GetModel(map[string]interface{}{"id": id}, &quote)
  122. if quote != nil {
  123. var tablelist []Table
  124. var headerlist []Header
  125. var modulelist []Module
  126. var grouplist []Group
  127. var rowlist []Row
  128. var itemlist []Item
  129. where := map[string]interface{}{
  130. "quoteId": id,
  131. "deleted_at": 0,
  132. }
  133. db.GetModel(where, &tablelist)
  134. db.GetModel(where, &headerlist)
  135. db.GetModel(where, &modulelist)
  136. db.GetModel(where, &grouplist)
  137. db.GetModel(where, &rowlist)
  138. itemids := make([]int64, 0)
  139. for _, row := range rowlist {
  140. if row.ItemId != 0 {
  141. itemids = append(itemids, row.ItemId)
  142. }
  143. }
  144. if len(itemids) != 0 {
  145. itemlist, items = GetItemModels(map[string]interface{}{
  146. "id in": itemids,
  147. "deleted_at": 0,
  148. })
  149. }
  150. for _, header := range headerlist {
  151. headers = append(headers, header)
  152. }
  153. quote.Prop = quote.GetProperty()
  154. tables, modules, groups, rows = findTables(quote.ID, tablelist, headerlist, modulelist, grouplist, rowlist, itemlist)
  155. quote.Tables = tables
  156. }
  157. return
  158. }
  159. func (model Quote) Copy(name string) (int64, error) {
  160. order := time.Now().Unix()
  161. id, err := db.InsertModel(db.Type(model), map[string]interface{}{
  162. "name": name,
  163. "property": model.Property,
  164. "order_at": order,
  165. })
  166. if err != nil {
  167. return 0, err
  168. }
  169. err = CopyTables(model.Tables, id, order)
  170. if err != nil {
  171. return id, err
  172. }
  173. return id, nil
  174. }