| | |
| | | package service |
| | | |
| | | import ( |
| | | "aps_crm/constvar" |
| | | "aps_crm/model" |
| | | "aps_crm/model/request" |
| | | "aps_crm/pkg/ecode" |
| | | "github.com/shopspring/decimal" |
| | | "gorm.io/gorm" |
| | | ) |
| | | |
| | | type ReceiptService struct{} |
| | |
| | | } |
| | | |
| | | func (ReceiptService) AddReceipt(receipt *model.Receipt) int { |
| | | err := model.NewReceiptSearch().Create(receipt) |
| | | var moneyAdder model.MoneyAdder |
| | | switch receipt.SourceType { |
| | | case constvar.ReceiptSourceTypeSalesDetails: |
| | | moneyAdder = model.NewSalesDetailsSearch() |
| | | case constvar.ReceiptSourceTypeServiceContract: |
| | | moneyAdder = model.NewServiceContractSearch() |
| | | } |
| | | err := model.WithTransaction(func(db *gorm.DB) error { |
| | | err := model.NewReceiptSearch().SetOrm(db).Create(receipt) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, decimal.Zero.Sub(receipt.Amount).Round(2)) |
| | | }) |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | | |
| | | return ecode.OK |
| | | } |
| | | |
| | | func (ReceiptService) DeleteReceipt(id int) int { |
| | | err := model.NewReceiptSearch().SetId(id).Delete() |
| | | receipt, err := model.NewReceiptSearch().SetId(id).First() |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | | var moneyAdder model.MoneyAdder |
| | | switch receipt.SourceType { |
| | | case constvar.ReceiptSourceTypeSalesDetails: |
| | | moneyAdder = model.NewSalesDetailsSearch() |
| | | case constvar.ReceiptSourceTypeServiceContract: |
| | | moneyAdder = model.NewServiceContractSearch() |
| | | } |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | err := model.NewReceiptSearch().SetId(id).Delete() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, receipt.Amount.Round(2)) |
| | | }) |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | |
| | | return ecode.DBErr |
| | | } |
| | | |
| | | err = model.NewReceiptSearch().SetId(v.Id).Updates(map[string]interface{}{ |
| | | |
| | | }) |
| | | err = model.NewReceiptSearch().SetId(v.Id).Updates(map[string]interface{}{}) |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | |
| | | } |
| | | |
| | | func (ReceiptService) UpdateReceipt(receipt *model.Receipt) int { |
| | | old, err := model.NewReceiptSearch().SetId(receipt.Id).First() |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | | var moneyAdder model.MoneyAdder |
| | | switch receipt.SourceType { |
| | | case constvar.ReceiptSourceTypeSalesDetails: |
| | | moneyAdder = model.NewSalesDetailsSearch() |
| | | case constvar.ReceiptSourceTypeServiceContract: |
| | | moneyAdder = model.NewServiceContractSearch() |
| | | } |
| | | err = model.WithTransaction(func(db *gorm.DB) error { |
| | | err := model.NewReceiptSearch().SetId(receipt.Id).Save(receipt) |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | return err |
| | | } |
| | | diffAmount := receipt.Amount.Sub(old.Amount) |
| | | return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, diffAmount.Round(2)) |
| | | }) |
| | | if err != nil { |
| | | return ecode.DBErr |
| | | } |
| | | return ecode.OK |
| | | } |