package service import ( "aps_crm/constvar" "aps_crm/model" "aps_crm/pkg/ecode" "github.com/shopspring/decimal" ) type SContractService struct{} func (SContractService) AddServiceContract(serviceContract *model.ServiceContract) int { serviceContract.AmountReceivable = decimal.Zero.Round(2) serviceContract.AmountInvoiced = decimal.Zero.Round(2) serviceContract.AmountReceived = decimal.Zero.Round(2) for _, product := range serviceContract.Products { serviceContract.AmountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price)) } serviceContract.AmountReceivable = serviceContract.AmountReceivable.Round(2) err := model.NewServiceContractSearch().Create(serviceContract) if err != nil { return ecode.SContractExist } return ecode.OK } func (SContractService) UpdateServiceContract(serviceContract *model.ServiceContract) int { // check serviceContract exist old, err := model.NewServiceContractSearch().SetId(serviceContract.Id).First() if err != nil { return ecode.SContractNotExist } var amountReceivable decimal.Decimal for _, product := range serviceContract.Products { amountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price)) } if amountReceivable.LessThan(serviceContract.AmountInvoiced) { return ecode.SContractProductPriceLowerThanInvoiceAmountErr } if amountReceivable.LessThan(serviceContract.AmountReceived) { return ecode.SContractProductPriceLowerThanReceivedAmountErr } serviceContract.AmountInvoiced = old.AmountReceived serviceContract.AmountReceived = old.AmountReceived serviceContract.AmountReceivable = amountReceivable.Round(2) err = model.NewServiceContractSearch().SetId(serviceContract.Id).Update(serviceContract) if err != nil { return ecode.SContractSetErr } return ecode.OK } //func (SContractService) GetServiceContractByContractId(contractId int) ([]*model.ServiceContract, int) { // list, err := model.NewServiceContractSearch().SetId(contractId).FindAll() // if err != nil { // return nil, ecode.SContractListErr // } // // return list, ecode.OK //} func (SContractService) DeleteServiceContract(ids []int) int { // delete client err := model.NewServiceContractSearch().SetIds(ids).Delete() if err != nil { return ecode.SContractDeleteErr } return ecode.OK } func (SContractService) GetServiceContractList(page, pageSize int, queryClass constvar.ServiceContractQueryClass, keywordType constvar.ServiceContractKeywordType, keyword string) ([]*model.ServiceContract, int64, int) { // get contact list contacts, total, err := model.NewServiceContractSearch(). SetKeyword(keyword). SetKeywordType(keywordType). SetQueryClass(queryClass). SetPage(page, pageSize). SetPreload(true). Find() if err != nil { return nil, 0, ecode.SContractListErr } return contacts, total, ecode.OK }