add export excel from api

This commit is contained in:
giovanni
2026-04-22 22:50:20 +07:00
parent ff630a1ed0
commit 3e99caf3a7
5 changed files with 946 additions and 0 deletions
@@ -30,6 +30,8 @@ type RepportController struct {
RepportService service.RepportService
}
const expenseReportExcelExportFetchLimit = 100
func NewRepportController(repportService service.RepportService) *RepportController {
return &RepportController{
RepportService: repportService,
@@ -66,6 +68,14 @@ func (c *RepportController) GetExpense(ctx *fiber.Ctx) error {
query.AllowedAreaIDs = toInt64Slice(areaScope.IDs)
}
if isAllExpenseExcelExportRequest(ctx) {
allResults, err := c.getAllExpenseRowsForExcel(ctx, query)
if err != nil {
return err
}
return exportExpenseReportListExcel(ctx, allResults)
}
if query.Page < 1 || query.Limit < 1 {
return fiber.NewError(fiber.StatusBadRequest, "page and limit must be greater than 0")
}
@@ -90,6 +100,33 @@ func (c *RepportController) GetExpense(ctx *fiber.Ctx) error {
})
}
func (c *RepportController) getAllExpenseRowsForExcel(ctx *fiber.Ctx, baseQuery *validation.ExpenseQuery) ([]dto.RepportExpenseListDTO, error) {
query := *baseQuery
query.Page = 1
query.Limit = expenseReportExcelExportFetchLimit
results := make([]dto.RepportExpenseListDTO, 0)
for {
pageResults, total, err := c.RepportService.GetExpense(ctx, &query)
if err != nil {
return nil, err
}
if len(pageResults) == 0 || total == 0 {
break
}
results = append(results, pageResults...)
if int64(len(results)) >= total {
break
}
query.Page++
}
return results, nil
}
func (c *RepportController) GetExpenseDepreciation(ctx *fiber.Ctx) error {
rows, meta, err := c.RepportService.GetExpenseDepreciation(ctx)
if err != nil {