56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
package handler
|
|
|
|
import (
|
|
"apskel-pos-be/internal/appcontext"
|
|
"apskel-pos-be/internal/contract"
|
|
"apskel-pos-be/internal/service"
|
|
"apskel-pos-be/internal/util"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type ReportHandler struct {
|
|
reportService service.ReportService
|
|
userService UserService
|
|
}
|
|
|
|
func NewReportHandler(reportService service.ReportService, userService UserService) *ReportHandler {
|
|
return &ReportHandler{reportService: reportService, userService: userService}
|
|
}
|
|
|
|
// GET /api/v1/outlets/:outlet_id/reports/daily-transaction.pdf?date=YYYY-MM-DD
|
|
func (h *ReportHandler) GetDailyTransactionReportPDF(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
ci := appcontext.FromGinContext(ctx)
|
|
|
|
outletID := c.Param("outlet_id")
|
|
var dayPtr *time.Time
|
|
if d := c.Query("date"); d != "" {
|
|
if t, err := time.Parse("2006-01-02", d); err == nil {
|
|
dayPtr = &t
|
|
}
|
|
}
|
|
|
|
// Get user name for "Dicetak Oleh"
|
|
user, err := h.userService.GetUserByID(ctx, ci.UserID)
|
|
var genBy string
|
|
if err != nil {
|
|
// Fallback to user ID if name cannot be retrieved
|
|
genBy = ci.UserID.String()
|
|
} else {
|
|
genBy = user.Name
|
|
}
|
|
|
|
publicURL, fileName, err := h.reportService.GenerateDailyTransactionPDF(ctx, ci.OrganizationID.String(), outletID, dayPtr, genBy)
|
|
if err != nil {
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "ReportHandler::GetDailyTransactionReportPDF", err.Error())}), "ReportHandler::GetDailyTransactionReportPDF")
|
|
return
|
|
}
|
|
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(map[string]string{
|
|
"url": publicURL,
|
|
"file_name": fileName,
|
|
}), "ReportHandler::GetDailyTransactionReportPDF")
|
|
}
|