zhangqian
2023-08-11 093c9ab35998d9f4163aa5fe6d3432d9e1a1a522
新增、修改服务合同时更改价税合计,应收金额,未开票金额
3个文件已修改
35 ■■■■■ 已修改文件
model/serviceContract.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/invoice.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/serviceContract.go 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/serviceContract.go
@@ -39,6 +39,7 @@
        AmountReceived          decimal.Decimal       `gorm:"column:amount_received;type:decimal(12,2);comment:已收金额" json:"amountReceived"`        // 已收金额
        AmountInvoiced          decimal.Decimal       `gorm:"column:amount_invoiced;type:decimal(12,2);comment:已开票金额" json:"amountInvoiced"`       // 已开票金额
        AmountUnInvoiced        decimal.Decimal       `gorm:"column:amount_not_invoiced;type:decimal(12,2);comment:未开票金额" json:"amountUnInvoiced"` // 未开票金额
        AmountTotal             decimal.Decimal       `gorm:"column:amount_total;type:decimal(12,2);comment:价税合计" json:"amountTotal"`              // 价税合计
        Products                []*Product            `json:"products" gorm:"many2many:service_contract_product;"`
        gorm.Model              `json:"-"`
    }
service/invoice.go
@@ -184,6 +184,7 @@
            removedProductIds = append(removedProductIds, product.Id)
        }
        amountInvoiced = amountInvoiced.Round(2)
        amountNotInvoiced = amountNotInvoiced.Round(2)
        err = model.WithTransaction(func(db *gorm.DB) error {
            err = model.NewInvoiceSearch().SetId(invoice.Id).Save(invoice)
            if err != nil {
service/serviceContract.go
@@ -13,10 +13,15 @@
    serviceContract.AmountReceivable = decimal.Zero.Round(2)
    serviceContract.AmountInvoiced = decimal.Zero.Round(2)
    serviceContract.AmountReceived = decimal.Zero.Round(2)
    serviceContract.AmountUnInvoiced = decimal.Zero.Round(2)
    serviceContract.AmountTotal = decimal.Zero.Round(2)
    for _, product := range serviceContract.Products {
        serviceContract.AmountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price))
        serviceContract.AmountTotal = serviceContract.AmountTotal.Add(product.Amount.Mul(product.Price))
    }
    serviceContract.AmountReceivable = serviceContract.AmountReceivable.Round(2)
    serviceContract.AmountTotal = serviceContract.AmountTotal.Round(2)
    serviceContract.AmountReceivable = serviceContract.AmountTotal
    serviceContract.AmountUnInvoiced = serviceContract.AmountTotal
    err := model.NewServiceContractSearch().Create(serviceContract)
    if err != nil {
        return ecode.SContractExist
@@ -31,19 +36,21 @@
    if err != nil {
        return ecode.SContractNotExist
    }
    var amountReceivable decimal.Decimal
    for _, product := range serviceContract.Products {
        amountReceivable = serviceContract.AmountReceivable.Add(product.Amount.Mul(product.Price))
    var totalAmount decimal.Decimal
    totalAmount = serviceContract.AmountTotal
    newProducts, removedProducts := NewProductsService().PickDiffProducts(serviceContract.Products, old.Products)
    for _, product := range newProducts {
        totalAmount = totalAmount.Add(product.Amount.Mul(product.Price))
    }
    if amountReceivable.LessThan(serviceContract.AmountInvoiced) {
        return ecode.SContractProductPriceLowerThanInvoiceAmountErr
    removedProductIds := make([]uint, 0, len(removedProducts))
    for _, product := range removedProducts {
        totalAmount = totalAmount.Sub(product.Amount.Mul(product.Price))
        removedProductIds = append(removedProductIds, product.Id)
    }
    if amountReceivable.LessThan(serviceContract.AmountReceived) {
        return ecode.SContractProductPriceLowerThanReceivedAmountErr
    }
    serviceContract.AmountInvoiced = old.AmountReceived
    serviceContract.AmountReceived = old.AmountReceived
    serviceContract.AmountReceivable = amountReceivable.Round(2)
    serviceContract.AmountTotal = totalAmount.Round(2)
    serviceContract.AmountReceivable = serviceContract.AmountTotal.Sub(serviceContract.AmountReceived)
    serviceContract.AmountUnInvoiced = serviceContract.AmountTotal.Sub(serviceContract.AmountInvoiced)
    err = model.NewServiceContractSearch().SetId(serviceContract.Id).Update(serviceContract)
    if err != nil {
        return ecode.SContractSetErr