Implementasi HPP std dan real
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
package transformer
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
"apskel-pos-be/internal/util"
|
||||
"time"
|
||||
)
|
||||
|
||||
func StandardHPPContractToModel(req *contract.StandardHPPRequest) *models.StandardHPPRequest {
|
||||
return &models.StandardHPPRequest{
|
||||
OrganizationID: req.OrganizationID,
|
||||
ProductID: req.ProductID,
|
||||
CategoryID: req.CategoryID,
|
||||
}
|
||||
}
|
||||
|
||||
func StandardHPPModelToContract(resp *models.StandardHPPResponse) *contract.StandardHPPResponse {
|
||||
if resp == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
products := make([]contract.StandardHPPProductData, len(resp.Products))
|
||||
for i, p := range resp.Products {
|
||||
products[i] = contract.StandardHPPProductData{
|
||||
ProductID: p.ProductID,
|
||||
ProductName: p.ProductName,
|
||||
ProductSku: p.ProductSku,
|
||||
CategoryID: p.CategoryID,
|
||||
CategoryName: p.CategoryName,
|
||||
SellingPrice: p.SellingPrice,
|
||||
ProductCost: p.ProductCost,
|
||||
StandardCost: p.StandardCost,
|
||||
StandardHPPPercentage: p.StandardHPPPercentage,
|
||||
HasRecipe: p.HasRecipe,
|
||||
}
|
||||
}
|
||||
|
||||
ingredients := make([]contract.StandardHPPIngredientData, len(resp.Ingredients))
|
||||
for i, ing := range resp.Ingredients {
|
||||
ingredients[i] = contract.StandardHPPIngredientData{
|
||||
ProductID: ing.ProductID,
|
||||
IngredientID: ing.IngredientID,
|
||||
IngredientName: ing.IngredientName,
|
||||
Quantity: ing.Quantity,
|
||||
UnitName: ing.UnitName,
|
||||
CostPerUnit: ing.CostPerUnit,
|
||||
WastePercentage: ing.WastePercentage,
|
||||
TotalCost: ing.TotalCost,
|
||||
}
|
||||
}
|
||||
|
||||
return &contract.StandardHPPResponse{
|
||||
OrganizationID: resp.OrganizationID,
|
||||
Summary: hppSummaryModelToContract(resp.Summary),
|
||||
Products: products,
|
||||
Ingredients: ingredients,
|
||||
}
|
||||
}
|
||||
|
||||
func RealHPPContractToModel(req *contract.RealHPPRequest) *models.RealHPPRequest {
|
||||
var dateFrom, dateTo time.Time
|
||||
|
||||
if fromTime, toTime, err := util.ParseDateRangeToJakartaTime(req.DateFrom, req.DateTo); err == nil {
|
||||
if fromTime != nil {
|
||||
dateFrom = *fromTime
|
||||
}
|
||||
if toTime != nil {
|
||||
dateTo = *toTime
|
||||
}
|
||||
}
|
||||
|
||||
return &models.RealHPPRequest{
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
ProductID: req.ProductID,
|
||||
CategoryID: req.CategoryID,
|
||||
DateFrom: dateFrom,
|
||||
DateTo: dateTo,
|
||||
GroupBy: req.GroupBy,
|
||||
}
|
||||
}
|
||||
|
||||
func RealHPPModelToContract(resp *models.RealHPPResponse) *contract.RealHPPResponse {
|
||||
if resp == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
products := make([]contract.RealHPPProductData, len(resp.Products))
|
||||
for i, p := range resp.Products {
|
||||
products[i] = contract.RealHPPProductData{
|
||||
ProductID: p.ProductID,
|
||||
ProductName: p.ProductName,
|
||||
ProductSku: p.ProductSku,
|
||||
CategoryID: p.CategoryID,
|
||||
CategoryName: p.CategoryName,
|
||||
SellingPrice: p.SellingPrice,
|
||||
RealTotalCost: p.RealTotalCost,
|
||||
RealTotalRevenue: p.RealTotalRevenue,
|
||||
RealHPPPercentage: p.RealHPPPercentage,
|
||||
TotalQuantitySold: p.TotalQuantitySold,
|
||||
TotalOrders: p.TotalOrders,
|
||||
}
|
||||
}
|
||||
|
||||
timeSeries := make([]contract.RealHPPTimeSeriesData, len(resp.TimeSeries))
|
||||
for i, ts := range resp.TimeSeries {
|
||||
timeSeries[i] = contract.RealHPPTimeSeriesData{
|
||||
Date: ts.Date,
|
||||
RealTotalCost: ts.RealTotalCost,
|
||||
RealTotalRevenue: ts.RealTotalRevenue,
|
||||
RealHPPPercentage: ts.RealHPPPercentage,
|
||||
TotalOrders: ts.TotalOrders,
|
||||
}
|
||||
}
|
||||
|
||||
return &contract.RealHPPResponse{
|
||||
OrganizationID: resp.OrganizationID,
|
||||
OutletID: resp.OutletID,
|
||||
DateFrom: resp.DateFrom,
|
||||
DateTo: resp.DateTo,
|
||||
GroupBy: resp.GroupBy,
|
||||
Summary: hppSummaryModelToContract(resp.Summary),
|
||||
Products: products,
|
||||
TimeSeries: timeSeries,
|
||||
}
|
||||
}
|
||||
|
||||
func hppSummaryModelToContract(s models.HPPSummary) contract.HPPSummary {
|
||||
return contract.HPPSummary{
|
||||
AverageStandardHPP: s.AverageStandardHPP,
|
||||
AverageRealHPP: s.AverageRealHPP,
|
||||
HPPVariance: s.HPPVariance,
|
||||
TotalProducts: s.TotalProducts,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user