mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
[FEAT/BE] fixing fifo fallback recording,fixing backdate and fixing product category
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package recording
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
validation "gitlab.com/mbugroup/lti-api.git/internal/modules/production/recordings/validations"
|
||||
)
|
||||
@@ -70,3 +73,87 @@ func MapEggs(recordingID uint, createdBy uint, items []validation.Egg) []entity.
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
type EggTotals struct {
|
||||
Qty int
|
||||
Weight float64
|
||||
}
|
||||
|
||||
func StockUsageByWarehouse(items []entity.RecordingStock) map[uint]float64 {
|
||||
return TotalsByWarehouse(items, func(stock entity.RecordingStock) (uint, float64) {
|
||||
var usage float64
|
||||
if stock.UsageQty != nil {
|
||||
usage = *stock.UsageQty
|
||||
}
|
||||
return stock.ProductWarehouseId, usage
|
||||
})
|
||||
}
|
||||
|
||||
func StockUsageByWarehouseReq(items []validation.Stock) map[uint]float64 {
|
||||
return TotalsByWarehouse(items, func(item validation.Stock) (uint, float64) {
|
||||
return item.ProductWarehouseId, item.Qty
|
||||
})
|
||||
}
|
||||
|
||||
func FloatMapsEqual(a, b map[uint]float64) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
for key, value := range a {
|
||||
other, ok := b[key]
|
||||
if !ok || !floatNearlyEqual(value, other) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func EggTotalsEqual(a, b map[uint]EggTotals) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
for key, value := range a {
|
||||
other, ok := b[key]
|
||||
if !ok || value.Qty != other.Qty || !floatNearlyEqual(value.Weight, other.Weight) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func floatNearlyEqual(a, b float64) bool {
|
||||
return a-b <= 0.000001 && b-a <= 0.000001
|
||||
}
|
||||
|
||||
func TotalsByWarehouse[T any](items []T, get func(T) (uint, float64)) map[uint]float64 {
|
||||
result := make(map[uint]float64)
|
||||
for _, item := range items {
|
||||
warehouseID, qty := get(item)
|
||||
result[warehouseID] += qty
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func EggTotalsByWarehouse[T any](items []T, get func(T) (uint, int, *float64)) map[uint]EggTotals {
|
||||
result := make(map[uint]EggTotals)
|
||||
for _, item := range items {
|
||||
warehouseID, qty, weightPtr := get(item)
|
||||
weight := 0.0
|
||||
if weightPtr != nil {
|
||||
weight = *weightPtr
|
||||
}
|
||||
current := result[warehouseID]
|
||||
current.Qty += qty
|
||||
current.Weight += weight
|
||||
result[warehouseID] = current
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func RecordingNote(action string, id uint) string {
|
||||
action = strings.TrimSpace(action)
|
||||
if action == "" {
|
||||
return fmt.Sprintf("Recording#%d", id)
|
||||
}
|
||||
return fmt.Sprintf("Recording-%s#%d", action, id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user