package purchase_wms import ( "context" "github.com/shopspring/decimal" "strconv" "time" "wms/constvar" "wms/models" "wms/pkg/timex" ) type Server struct { UnimplementedPurchaseServiceServer } func (s *Server) PurchaseToWms(c context.Context, req *PurchaseToWmsRequest) (*PurchaseToWmsResponse, error) { var operation models.Operation var details []*models.OperationDetails operation.SourceNumber = req.Number operation.OperationDate = timex.TimeToString2(time.Now()) operation.Number = strconv.FormatInt(time.Now().Unix(), 10) operation.Status = constvar.OperationStatus_Ready operation.CompanyName = req.SupplierName warehouse, err := models.NewWarehouseSearch().First() if err != nil { return nil, err } operationType, err := models.NewOperationTypeSearch().SetWarehouseId(warehouse.Id).SetBaseOperationType(constvar.BaseOperationTypeIncoming).First() if err != nil { return nil, err } operation.OperationTypeName = operationType.Name operation.OperationTypeId = operationType.Id location, err := models.NewLocationSearch().SetID(warehouse.LocationId).First() if err != nil { return nil, err } operation.ToLocationID = location.Id first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First() if err != nil { return nil, err } operation.FromLocationID = first.Id operation.BaseOperationType = constvar.BaseOperationTypeIncoming for _, product := range req.Product { var detail models.OperationDetails detail.ProductId = product.Id detail.Amount = decimal.NewFromInt(product.Amount) details = append(details, &detail) } err = models.NewOperationSearch().Create(&operation) return new(PurchaseToWmsResponse), err }