Add Inventory Report
This commit is contained in:
@@ -2,6 +2,7 @@ package handler
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/constants"
|
||||
@@ -279,7 +280,6 @@ func (h *InventoryHandler) GetZeroStockItems(c *gin.Context) {
|
||||
util.HandleResponse(c.Writer, c.Request, inventoryResponse, "InventoryHandler::GetZeroStockItems")
|
||||
}
|
||||
|
||||
// GetInventoryReportSummary returns summary statistics for inventory report
|
||||
func (h *InventoryHandler) GetInventoryReportSummary(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
@@ -293,7 +293,20 @@ func (h *InventoryHandler) GetInventoryReportSummary(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
summary, err := h.inventoryService.GetInventoryReportSummary(ctx, outletID, contextInfo.OrganizationID)
|
||||
// Parse date range parameters for summary
|
||||
var dateFrom, dateTo *time.Time
|
||||
if dateFromStr := c.Query("date_from"); dateFromStr != "" {
|
||||
if parsedDateFrom, err := time.Parse("2006-01-02", dateFromStr); err == nil {
|
||||
dateFrom = &parsedDateFrom
|
||||
}
|
||||
}
|
||||
if dateToStr := c.Query("date_to"); dateToStr != "" {
|
||||
if parsedDateTo, err := time.Parse("2006-01-02", dateToStr); err == nil {
|
||||
dateTo = &parsedDateTo
|
||||
}
|
||||
}
|
||||
|
||||
summary, err := h.inventoryService.GetInventoryReportSummary(ctx, outletID, contextInfo.OrganizationID, dateFrom, dateTo)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("InventoryHandler::GetInventoryReportSummary -> Failed to get inventory report summary from service")
|
||||
responseError := contract.NewResponseError(constants.InternalServerErrorCode, constants.RequestEntity, err.Error())
|
||||
@@ -305,16 +318,13 @@ func (h *InventoryHandler) GetInventoryReportSummary(c *gin.Context) {
|
||||
util.HandleResponse(c.Writer, c.Request, response, "InventoryHandler::GetInventoryReportSummary")
|
||||
}
|
||||
|
||||
// GetInventoryReportDetails returns detailed inventory report with products and ingredients
|
||||
func (h *InventoryHandler) GetInventoryReportDetails(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
// Parse query parameters
|
||||
filter := &models.InventoryReportFilter{}
|
||||
|
||||
// Parse outlet_id (required)
|
||||
if outletIDStr := c.Query("outlet_id"); outletIDStr != "" {
|
||||
if outletIDStr := c.Param("outlet_id"); outletIDStr != "" {
|
||||
outletID, err := uuid.Parse(outletIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("InventoryHandler::GetInventoryReportDetails -> Invalid outlet ID")
|
||||
@@ -330,7 +340,6 @@ func (h *InventoryHandler) GetInventoryReportDetails(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// Parse category_id (optional)
|
||||
if categoryIDStr := c.Query("category_id"); categoryIDStr != "" {
|
||||
categoryID, err := uuid.Parse(categoryIDStr)
|
||||
if err != nil {
|
||||
@@ -375,6 +384,18 @@ func (h *InventoryHandler) GetInventoryReportDetails(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
dateFromStr := c.Query("date_from")
|
||||
dateToStr := c.Query("date_to")
|
||||
|
||||
if fromTime, toTime, err := util.ParseDateRangeToJakartaTime(dateFromStr, dateToStr); err == nil {
|
||||
if fromTime != nil {
|
||||
filter.DateFrom = fromTime
|
||||
}
|
||||
if toTime != nil {
|
||||
filter.DateTo = toTime
|
||||
}
|
||||
}
|
||||
|
||||
report, err := h.inventoryService.GetInventoryReportDetails(ctx, filter, contextInfo.OrganizationID)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("InventoryHandler::GetInventoryReportDetails -> Failed to get inventory report details from service")
|
||||
|
||||
Reference in New Issue
Block a user