package service
|
|
import (
|
"aps_crm/model"
|
"aps_crm/pkg/ecode"
|
"gorm.io/gorm"
|
)
|
|
type SaleChanceService struct{}
|
|
func (SaleChanceService) AddSaleChance(saleChange *model.SaleChance) int {
|
err := model.NewSaleChanceSearch().Create(saleChange)
|
if err != nil {
|
return ecode.SaleChanceExist
|
}
|
return ecode.OK
|
}
|
|
func (SaleChanceService) UpdateSaleChance(saleChange *model.SaleChance) int {
|
// update saleChange
|
old, err := model.NewSaleChanceSearch().SetId(saleChange.Id).Find()
|
if err != nil {
|
return ecode.SaleChanceNotExist
|
}
|
newProducts, removedProducts := NewProductsService().PickDiffProducts(saleChange.Products, old.Products)
|
err = model.WithTransaction(func(db *gorm.DB) error {
|
err = model.NewSaleChanceSearch().SetId(saleChange.Id).Update(saleChange)
|
if err != nil {
|
return err
|
}
|
if len(removedProducts) > 0 {
|
removedProductIds := make([]uint, 0, len(removedProducts))
|
for _, product := range removedProducts {
|
removedProductIds = append(removedProductIds, product.Id)
|
}
|
err = model.NewProductSearch(db).SetIds(removedProductIds).Delete()
|
if err != nil {
|
return err
|
}
|
}
|
if len(newProducts) > 0 {
|
for _, p := range newProducts {
|
p.Id = 0
|
}
|
err = model.NewProductSearch(db).CreateBatch(newProducts)
|
if err != nil {
|
return err
|
}
|
var rel []*model.SaleChanceProduct
|
for _, p := range newProducts {
|
rel = append(rel, &model.SaleChanceProduct{
|
SaleChanceId: saleChange.Id,
|
ProductId: p.Id,
|
})
|
}
|
err = model.NewSaleChanceProductSearch().CreateBatch(rel)
|
if err != nil {
|
return err
|
}
|
}
|
return nil
|
})
|
|
if err != nil {
|
return ecode.SaleChanceUpdateErr
|
}
|
|
return ecode.OK
|
}
|
|
// CheckSaleChangeExist check saleChange exist
|
func CheckSaleChangeExist(id int) int {
|
tmp, err := model.NewSaleChanceSearch().SetId(id).Find()
|
if err != nil {
|
return ecode.SaleChanceNotExist
|
}
|
|
if tmp.Id == 0 {
|
return ecode.SaleChanceNotExist
|
}
|
|
return ecode.OK
|
}
|
|
func (SaleChanceService) GetSaleChanceList(page, pageSize int, data map[string]interface{}) ([]*model.SaleChance, int64, int) {
|
// get contact list
|
contacts, total, err := model.NewSaleChanceSearch().SetPage(page, pageSize).SetSearchMap(data).FindAll()
|
if err != nil {
|
return nil, 0, ecode.SaleChanceListErr
|
}
|
return contacts, total, ecode.OK
|
}
|
|
// push
|
func (SaleChanceService) PushSaleChance(id, step int) int {
|
// check saleChange exist
|
errCode := CheckSaleChangeExist(id)
|
if errCode != ecode.OK {
|
return errCode
|
}
|
// check step
|
_, err := model.NewSaleStageSearch().SetId(step).Find()
|
if err != nil {
|
return ecode.SaleStageNotExist
|
}
|
|
// push saleChange
|
err = model.NewSaleChanceSearch().SetId(id).Update(&model.SaleChance{SaleStageId: step})
|
if err != nil {
|
return ecode.SaleChanceUpdateErr
|
}
|
|
return ecode.OK
|
}
|
|
func (SaleChanceService) DeleteSaleChance(ids []int) int {
|
// delete client
|
err := model.NewSaleChanceSearch().SetIds(ids).Delete()
|
if err != nil {
|
return ecode.SaleChanceDeleteErr
|
}
|
return ecode.OK
|
}
|