add product ingredients
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func MapOrderIngredientTransactionEntityToModel(entity *entities.OrderIngredientTransaction) *models.OrderIngredientTransaction {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.OrderIngredientTransaction{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
OrderID: entity.OrderID,
|
||||
OrderItemID: entity.OrderItemID,
|
||||
ProductID: entity.ProductID,
|
||||
ProductVariantID: entity.ProductVariantID,
|
||||
IngredientID: entity.IngredientID,
|
||||
GrossQty: entity.GrossQty,
|
||||
NetQty: entity.NetQty,
|
||||
WasteQty: entity.WasteQty,
|
||||
Unit: entity.Unit,
|
||||
TransactionDate: entity.TransactionDate,
|
||||
CreatedBy: entity.CreatedBy,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
Organization: nil,
|
||||
Outlet: nil,
|
||||
Order: nil,
|
||||
OrderItem: nil,
|
||||
Product: nil,
|
||||
ProductVariant: nil,
|
||||
Ingredient: nil,
|
||||
CreatedByUser: nil,
|
||||
}
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionModelToEntity(model *models.OrderIngredientTransaction) *entities.OrderIngredientTransaction {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.OrderIngredientTransaction{
|
||||
ID: model.ID,
|
||||
OrganizationID: model.OrganizationID,
|
||||
OutletID: model.OutletID,
|
||||
OrderID: model.OrderID,
|
||||
OrderItemID: model.OrderItemID,
|
||||
ProductID: model.ProductID,
|
||||
ProductVariantID: model.ProductVariantID,
|
||||
IngredientID: model.IngredientID,
|
||||
GrossQty: model.GrossQty,
|
||||
NetQty: model.NetQty,
|
||||
WasteQty: model.WasteQty,
|
||||
Unit: model.Unit,
|
||||
TransactionDate: model.TransactionDate,
|
||||
CreatedBy: model.CreatedBy,
|
||||
CreatedAt: model.CreatedAt,
|
||||
UpdatedAt: model.UpdatedAt,
|
||||
Organization: entities.Organization{},
|
||||
Outlet: nil,
|
||||
Order: entities.Order{},
|
||||
OrderItem: nil,
|
||||
Product: entities.Product{},
|
||||
ProductVariant: nil,
|
||||
Ingredient: entities.Ingredient{},
|
||||
CreatedByUser: entities.User{},
|
||||
}
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionEntitiesToModels(entities []*entities.OrderIngredientTransaction) []*models.OrderIngredientTransaction {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
models := make([]*models.OrderIngredientTransaction, len(entities))
|
||||
for i, entity := range entities {
|
||||
models[i] = MapOrderIngredientTransactionEntityToModel(entity)
|
||||
}
|
||||
|
||||
return models
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionModelsToEntities(models []*models.OrderIngredientTransaction) []*entities.OrderIngredientTransaction {
|
||||
if models == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
entities := make([]*entities.OrderIngredientTransaction, len(models))
|
||||
for i, model := range models {
|
||||
entities[i] = MapOrderIngredientTransactionModelToEntity(model)
|
||||
}
|
||||
|
||||
return entities
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionEntityToResponse(entity *entities.OrderIngredientTransaction) *models.OrderIngredientTransactionResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.OrderIngredientTransactionResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
OrderID: entity.OrderID,
|
||||
OrderItemID: entity.OrderItemID,
|
||||
ProductID: entity.ProductID,
|
||||
ProductVariantID: entity.ProductVariantID,
|
||||
IngredientID: entity.IngredientID,
|
||||
GrossQty: entity.GrossQty,
|
||||
NetQty: entity.NetQty,
|
||||
WasteQty: entity.WasteQty,
|
||||
Unit: entity.Unit,
|
||||
TransactionDate: entity.TransactionDate,
|
||||
CreatedBy: entity.CreatedBy,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
UpdatedAt: entity.UpdatedAt,
|
||||
Organization: nil,
|
||||
Outlet: nil,
|
||||
Order: nil,
|
||||
OrderItem: nil,
|
||||
Product: nil,
|
||||
ProductVariant: nil,
|
||||
Ingredient: nil,
|
||||
CreatedByUser: nil,
|
||||
}
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionEntitiesToResponses(entities []*entities.OrderIngredientTransaction) []*models.OrderIngredientTransactionResponse {
|
||||
if entities == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
responses := make([]*models.OrderIngredientTransactionResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
responses[i] = MapOrderIngredientTransactionEntityToResponse(entity)
|
||||
}
|
||||
|
||||
return responses
|
||||
}
|
||||
|
||||
func MapOrderIngredientTransactionSummary(transactions []*entities.OrderIngredientTransaction) []*models.OrderIngredientTransactionSummary {
|
||||
if transactions == nil || len(transactions) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Group by ingredient ID
|
||||
ingredientMap := make(map[uuid.UUID]*models.OrderIngredientTransactionSummary)
|
||||
|
||||
for _, transaction := range transactions {
|
||||
ingredientID := transaction.IngredientID
|
||||
|
||||
if summary, exists := ingredientMap[ingredientID]; exists {
|
||||
summary.TotalGrossQty += transaction.GrossQty
|
||||
summary.TotalNetQty += transaction.NetQty
|
||||
summary.TotalWasteQty += transaction.WasteQty
|
||||
} else {
|
||||
ingredientMap[ingredientID] = &models.OrderIngredientTransactionSummary{
|
||||
IngredientID: ingredientID,
|
||||
IngredientName: transaction.Ingredient.Name,
|
||||
TotalGrossQty: transaction.GrossQty,
|
||||
TotalNetQty: transaction.NetQty,
|
||||
TotalWasteQty: transaction.WasteQty,
|
||||
Unit: transaction.Unit,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Convert map to slice and calculate waste percentage
|
||||
var summaries []*models.OrderIngredientTransactionSummary
|
||||
for _, summary := range ingredientMap {
|
||||
if summary.TotalGrossQty > 0 {
|
||||
summary.WastePercentage = (summary.TotalWasteQty / summary.TotalGrossQty) * 100
|
||||
}
|
||||
summaries = append(summaries, summary)
|
||||
}
|
||||
|
||||
return summaries
|
||||
}
|
||||
Reference in New Issue
Block a user