package service import ( "aps_crm/model" "aps_crm/pkg/ecode" "aps_crm/pkg/mysqlx" ) type QuotationService struct{} func (QuotationService) AddQuotation(quotation *model.Quotation) int { err := model.NewQuotationSearch(nil).Create(quotation) if err != nil { return ecode.QuotationExist } return ecode.OK } func (QuotationService) UpdateQuotation(quotation *model.Quotation) int { // check quotation exist tmp, err := model.NewQuotationSearch(nil).SetId(quotation.Id).Find() if err != nil { return ecode.QuotationNotExist } if len(quotation.Products) == 0 { err = model.NewQuotationSearch(nil).SetId(quotation.Id).Update(quotation) if err != nil { return ecode.QuotationSetErr } } else { tx := mysqlx.GetDB().Begin() err = tx.Model(tmp).Association("Products").Clear() if err != nil { tx.Rollback() return ecode.QuotationSetErr } err = model.NewQuotationSearch(tx).SetId(quotation.Id).Update(quotation) if err != nil { tx.Rollback() return ecode.QuotationSetErr } for _, product := range quotation.Products { if product.Id == 0 { err = model.NewProductSearch(tx).Create(&product) if err != nil { tx.Rollback() return ecode.QuotationSetErr } } else { err = model.NewProductSearch(tx).SetId(product.Id).Update(&product) if err != nil { tx.Rollback() return ecode.QuotationSetErr } } err = tx.Model(&tmp).Association("Products").Append(&product) if err != nil { tx.Rollback() return ecode.QuotationSetErr } } tx.Commit() } return ecode.OK } func (QuotationService) GetQuotationList(page, pageSize int, data map[string]interface{}) ([]*model.Quotation, int64, int) { // get contact list contacts, total, err := model.NewQuotationSearch(nil).SetPage(page, pageSize).SetSearchMap(data).FindAll() if err != nil { return nil, 0, ecode.QuotationListErr } return contacts, total, ecode.OK } func (QuotationService) DeleteQuotation(ids []int) int { // delete client err := model.NewQuotationSearch(nil).SetIds(ids).Delete() if err != nil { return ecode.QuotationDeleteErr } return ecode.OK }