| | |
| | | } |
| | | |
| | | // FinishOperationOutput 完成出库或报废 |
| | | func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) { |
| | | func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) { |
| | | var internalInputDetails []*models.OperationDetails //内部调拨产生的出库验证后,生成入库单 |
| | | for k, v := range listDetails { |
| | | if v.Product.Amount.LessThan(v.Amount) { |
| | |
| | | } |
| | | } |
| | | if len(internalInputDetails) > 0 { |
| | | opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | operation := &models.Operation{ |
| | | OperationTypeId: opTypeId, |
| | | Number: strconv.FormatInt(time.Now().Unix(), 10), |
| | | Status: constvar.OperationStatus_Ready, |
| | | OperationDate: time.Now().Format("2006-01-02 15:04:05"), |
| | |
| | | } |
| | | |
| | | // FinishOperationInternal 验证内部调拨生成出库单 |
| | | func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails) (err error) { |
| | | func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails, originOperation *models.Operation) (err error) { |
| | | var outputDetails []*models.OperationDetails |
| | | for _, v := range listDetails { |
| | | outputDetails = append(outputDetails, &models.OperationDetails{ |
| | |
| | | SalePrice: v.SalePrice, |
| | | }) |
| | | if len(outputDetails) > 0 { |
| | | opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | operation := &models.Operation{ |
| | | OperationTypeId: opTypeId, |
| | | Number: strconv.FormatInt(time.Now().Unix(), 10), |
| | | Status: constvar.OperationStatus_Ready, |
| | | OperationDate: time.Now().Format("2006-01-02 15:04:05"), |
| | |
| | | |
| | | // FinishOperationAdjust 完成库存调整 |
| | | // 验证后生成入库单或出库单(库存减少生成出库单,库存增加生成入库单) |
| | | func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) { |
| | | func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) { |
| | | var inputDetails []*models.OperationDetails |
| | | var outputDetails []*models.OperationDetails |
| | | for _, v := range listDetails { |
| | |
| | | //} |
| | | |
| | | if len(inputDetails) > 0 { |
| | | opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | operation := &models.Operation{ |
| | | OperationTypeId: opTypeId, |
| | | Number: strconv.FormatInt(time.Now().Unix(), 10), |
| | | Status: constvar.OperationStatus_Ready, |
| | | OperationDate: time.Now().Format("2006-01-02 15:04:05"), |
| | |
| | | } |
| | | } |
| | | if len(outputDetails) > 0 { |
| | | opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | operation := &models.Operation{ |
| | | OperationTypeId: opTypeId, |
| | | Number: strconv.FormatInt(time.Now().Unix(), 10), |
| | | Status: constvar.OperationStatus_Ready, |
| | | OperationDate: time.Now().Format("2006-01-02 15:04:05"), |
| | |
| | | return nil |
| | | |
| | | } |
| | | |
| | | func GetTargetOperationTypeIdByOperation(operation *models.Operation, baseOT constvar.BaseOperationType) (operationTypeId int, err error) { |
| | | oT, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First() |
| | | if err != nil { |
| | | return 0, err |
| | | } |
| | | targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(oT.WarehouseId).First() |
| | | if err != nil { |
| | | return 0, err |
| | | } |
| | | return targetOT.Id, nil |
| | | } |