| | |
| | | } |
| | | |
| | | func CheckDetailsRepeat(details []*models.OperationDetails) bool { |
| | | detailIDs := []string{} |
| | | var detailIDs []string |
| | | var tempID string |
| | | for _, v := range details { |
| | | detailIDs = append(detailIDs, v.ProductId) |
| | |
| | | } |
| | | |
| | | if operation.BaseOperationType == constvar.BaseOperationTypeIncoming { |
| | | operationInputs := []*models.Operation{} |
| | | var operationInputs []*models.Operation |
| | | for k, v := range listProdt { |
| | | value, ok := mapProdt[v.ID] |
| | | if !ok { |
| | |
| | | } |
| | | |
| | | locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | |
| | | if err == nil { |
| | | operationTransfer := &models.Operation{ |
| | | Number: operation.Number, |
| | | SourceNumber: operation.SourceNumber, |
| | | OperationTypeId: 0, |
| | | OperationTypeName: operation.OperationTypeName, |
| | | Status: constvar.OperationStatus_Finish, |
| | | FromLocationID: locationRule.AreaId, |
| | | ToLocationID: locationRule.LocationId, |
| | | OperationDate: operation.OperationDate, |
| | | ContacterID: operation.ContacterID, |
| | | ContacterName: operation.ContacterName, |
| | | CompanyID: operation.CompanyID, |
| | | CompanyName: operation.CompanyName, |
| | | Comment: operation.Comment, |
| | | BaseOperationType: constvar.BaseOperationTypeInternal, |
| | | Details: []*models.OperationDetails{ |
| | | { |
| | | ProductId: v.ID, |
| | | Amount: value, |
| | | }, |
| | | }, |
| | | } |
| | | operationInputs = append(operationInputs, operationTransfer) |
| | | |
| | | //if err := tx.Create(&operationTransfer).Error; err != nil { |
| | | // return err |
| | | //} |
| | | |
| | | //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段 |
| | | locAmount, err := models.NewLocationProductAmountSearch(). |
| | | SetProductId(v.ID). |
| | | SetLocationId(locationRule.LocationId). |
| | | First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | locAmount.LocationId = locationRule.LocationId |
| | | locAmount.ProductId = v.ID |
| | | locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") |
| | | locAmount.Amount = locAmount.Amount.Add(value) |
| | | if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { |
| | | return res.Error |
| | | } |
| | | } else { |
| | | locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | |
| | | Comment: operation.Comment, |
| | | BaseOperationType: constvar.BaseOperationTypeInternal, |
| | | Details: []*models.OperationDetails{ |
| | | &models.OperationDetails{ |
| | | { |
| | | ProductId: v.ID, |
| | | Amount: value, |
| | | }, |
| | | }, |
| | | } |
| | | operationTransfer.Id = 0 |
| | | operationTransfer.FromLocationID = locationRule.AreaId |
| | | operationTransfer.ToLocationID = locationRule.LocationId |
| | | operationTransfer.Status = constvar.OperationStatus_Finish |
| | | operationTransfer.Details = []*models.OperationDetails{ |
| | | &models.OperationDetails{ |
| | | ProductId: v.ID, |
| | | Amount: value, |
| | | }, |
| | | } |
| | | operationInputs = append(operationInputs, operationTransfer) |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if len(operationInputs) > 0 { |
| | | if err := tx.Create(&operationInputs).Error; err != nil { |
| | | return err |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | if operation.BaseOperationType == constvar.BaseOperationTypeInternal { |
| | | var operationInputs []*models.Operation |
| | | for _, v := range listProdt { |
| | | value, ok := mapProdt[v.ID] |
| | | if !ok { |
| | |
| | | return err |
| | | } |
| | | |
| | | toLocAmount, res := models.NewLocationProductAmountSearch(). |
| | | SetProductId(v.ID). |
| | | SetLocationId(operation.ToLocationID). |
| | | FirstRes() |
| | | if res.Error != nil { |
| | | locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | toLocAmount.Amount = toLocAmount.Amount.Add(value) |
| | | if err := models.NewLocationProductAmountSearch().SetID(toLocAmount.Id).Update(toLocAmount); err != nil { |
| | | |
| | | if err == nil { |
| | | operationTransfer := &models.Operation{ |
| | | Number: operation.Number, |
| | | SourceNumber: operation.SourceNumber, |
| | | OperationTypeId: 0, |
| | | OperationTypeName: operation.OperationTypeName, |
| | | Status: constvar.OperationStatus_Finish, |
| | | FromLocationID: locationRule.AreaId, |
| | | ToLocationID: locationRule.LocationId, |
| | | OperationDate: operation.OperationDate, |
| | | ContacterID: operation.ContacterID, |
| | | ContacterName: operation.ContacterName, |
| | | CompanyID: operation.CompanyID, |
| | | CompanyName: operation.CompanyName, |
| | | Comment: operation.Comment, |
| | | BaseOperationType: constvar.BaseOperationTypeInternal, |
| | | Details: []*models.OperationDetails{ |
| | | { |
| | | ProductId: v.ID, |
| | | Amount: value, |
| | | }, |
| | | }, |
| | | } |
| | | operationInputs = append(operationInputs, operationTransfer) |
| | | |
| | | //if err := tx.Create(&operationTransfer).Error; err != nil { |
| | | // return err |
| | | //} |
| | | |
| | | locAmount, err := models.NewLocationProductAmountSearch(). |
| | | SetProductId(v.ID). |
| | | SetLocationId(locationRule.LocationId). |
| | | First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | locAmount.LocationId = locationRule.LocationId |
| | | locAmount.ProductId = v.ID |
| | | locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") |
| | | locAmount.Amount = locAmount.Amount.Add(value) |
| | | if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { |
| | | return res.Error |
| | | } |
| | | } else { |
| | | locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | if err == nil { |
| | | operationTransfer := &models.Operation{ |
| | | Number: operation.Number, |
| | | SourceNumber: operation.SourceNumber, |
| | | OperationTypeId: 0, |
| | | OperationTypeName: operation.OperationTypeName, |
| | | Status: constvar.OperationStatus_Finish, |
| | | FromLocationID: locationRule.AreaId, |
| | | ToLocationID: locationRule.LocationId, |
| | | OperationDate: operation.OperationDate, |
| | | ContacterID: operation.ContacterID, |
| | | ContacterName: operation.ContacterName, |
| | | CompanyID: operation.CompanyID, |
| | | CompanyName: operation.CompanyName, |
| | | Comment: operation.Comment, |
| | | BaseOperationType: constvar.BaseOperationTypeInternal, |
| | | Details: []*models.OperationDetails{ |
| | | { |
| | | ProductId: v.ID, |
| | | Amount: value, |
| | | }, |
| | | }, |
| | | } |
| | | operationInputs = append(operationInputs, operationTransfer) |
| | | |
| | | //if err := tx.Create(&operationTransfer).Error; err != nil { |
| | | // return err |
| | | //} |
| | | |
| | | locAmount, err := models.NewLocationProductAmountSearch(). |
| | | SetProductId(v.ID). |
| | | SetLocationId(locationRule.LocationId). |
| | | First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | locAmount.LocationId = locationRule.LocationId |
| | | locAmount.ProductId = v.ID |
| | | locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") |
| | | locAmount.Amount = locAmount.Amount.Add(value) |
| | | if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { |
| | | return res.Error |
| | | } |
| | | } else { |
| | | locAmount, err := models.NewLocationProductAmountSearch(). |
| | | SetProductId(v.ID). |
| | | SetLocationId(operation.ToLocationID). |
| | | First() |
| | | if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { |
| | | return err |
| | | } |
| | | locAmount.LocationId = operation.ToLocationID |
| | | locAmount.ProductId = v.ID |
| | | locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") |
| | | locAmount.Amount = locAmount.Amount.Add(value) |
| | | if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { |
| | | return res.Error |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if len(operationInputs) > 0 { |
| | | if err := tx.Create(&operationInputs).Error; err != nil { |
| | | return err |
| | | } |
| | | } |