feat: cash advance

This commit is contained in:
Efril
2026-08-13 14:38:28 +07:00
parent e6078e3c0b
commit 2c6864147b
36 changed files with 2355 additions and 186 deletions
@@ -0,0 +1,126 @@
package transformer
import (
"time"
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/models"
)
func CreateCashAdvanceRequestToModel(req *contract.CreateCashAdvanceRequest) (*models.CreateCashAdvanceRequest, error) {
issuedDate, err := time.Parse("2006-01-02", req.IssuedDate)
if err != nil {
return nil, err
}
var dueDate *time.Time
if req.DueDate != nil && *req.DueDate != "" {
parsed, err := time.Parse("2006-01-02", *req.DueDate)
if err != nil {
return nil, err
}
dueDate = &parsed
}
return &models.CreateCashAdvanceRequest{
OutletID: req.OutletID,
CodeNumber: req.CodeNumber,
TeamScope: req.TeamScope,
TeamCategoryID: req.TeamCategoryID,
Amount: req.Amount,
IssuedDate: issuedDate,
DueDate: dueDate,
Status: req.Status,
Description: req.Description,
}, nil
}
func UpdateCashAdvanceRequestToModel(req *contract.UpdateCashAdvanceRequest) (*models.UpdateCashAdvanceRequest, error) {
var issuedDate *time.Time
if req.IssuedDate != nil && *req.IssuedDate != "" {
parsed, err := time.Parse("2006-01-02", *req.IssuedDate)
if err != nil {
return nil, err
}
issuedDate = &parsed
}
var dueDate *time.Time
if req.DueDate != nil && *req.DueDate != "" {
parsed, err := time.Parse("2006-01-02", *req.DueDate)
if err != nil {
return nil, err
}
dueDate = &parsed
}
return &models.UpdateCashAdvanceRequest{
CodeNumber: req.CodeNumber,
TeamScope: req.TeamScope,
TeamCategoryID: req.TeamCategoryID,
Amount: req.Amount,
ReturnedAmount: req.ReturnedAmount,
IssuedDate: issuedDate,
DueDate: dueDate,
Status: req.Status,
Description: req.Description,
}, nil
}
func ListCashAdvancesRequestToModel(req *contract.ListCashAdvancesRequest) *models.ListCashAdvancesRequest {
return &models.ListCashAdvancesRequest{
Page: req.Page,
Limit: req.Limit,
Search: req.Search,
Status: req.Status,
SettlementStatus: req.SettlementStatus,
Team: req.Team,
TeamScope: req.TeamScope,
TeamCategoryID: req.TeamCategoryID,
StartDate: req.StartDate,
EndDate: req.EndDate,
}
}
func CashAdvanceModelResponseToResponse(cashAdvance *models.CashAdvanceResponse) *contract.CashAdvanceResponse {
if cashAdvance == nil {
return nil
}
response := &contract.CashAdvanceResponse{
ID: cashAdvance.ID,
OrganizationID: cashAdvance.OrganizationID,
OutletID: cashAdvance.OutletID,
CodeNumber: cashAdvance.CodeNumber,
TeamScope: cashAdvance.TeamScope,
TeamCategoryID: cashAdvance.TeamCategoryID,
Amount: cashAdvance.Amount,
SettledAmount: cashAdvance.SettledAmount,
ReturnedAmount: cashAdvance.ReturnedAmount,
RemainingAmount: cashAdvance.RemainingAmount,
SettlementStatus: cashAdvance.SettlementStatus,
IssuedDate: cashAdvance.IssuedDate,
DueDate: cashAdvance.DueDate,
Status: cashAdvance.Status,
Description: cashAdvance.Description,
CreatedAt: cashAdvance.CreatedAt,
UpdatedAt: cashAdvance.UpdatedAt,
Team: PurchaseTeamModelToResponse(cashAdvance.Team),
}
if cashAdvance.Settlements != nil {
response.Settlements = make([]contract.CashAdvanceSettlementResponse, len(cashAdvance.Settlements))
for i, settlement := range cashAdvance.Settlements {
response.Settlements[i] = contract.CashAdvanceSettlementResponse{
Type: settlement.Type,
ID: settlement.ID,
Number: settlement.Number,
Date: settlement.Date,
Amount: settlement.Amount,
Status: settlement.Status,
}
}
}
return response
}
@@ -21,6 +21,7 @@ func CreateExpenseRequestToModel(req *contract.CreateExpenseRequest) *models.Cre
Description: req.Description,
Tax: req.Tax,
Total: req.Total,
CashAdvanceID: req.CashAdvanceID,
Items: items,
}
}
@@ -46,6 +47,7 @@ func UpdateExpenseRequestToModel(req *contract.UpdateExpenseRequest) *models.Upd
Tax: req.Tax,
Total: req.Total,
Reserved1: req.Reserved1,
CashAdvanceID: req.CashAdvanceID,
}
if req.Items != nil {
@@ -103,6 +105,7 @@ func ExpenseModelResponseToResponse(expense *models.ExpenseResponse) *contract.E
Tax: expense.Tax,
Total: expense.Total,
Reserved1: expense.Reserved1,
CashAdvanceID: expense.CashAdvanceID,
CreatedAt: expense.CreatedAt,
UpdatedAt: expense.UpdatedAt,
Items: items,
@@ -46,6 +46,7 @@ func CreatePurchaseOrderRequestToModel(req *contract.CreatePurchaseOrderRequest)
Message: req.Message,
TeamScope: req.TeamScope,
TeamCategoryID: req.TeamCategoryID,
CashAdvanceID: req.CashAdvanceID,
Items: items,
AttachmentFileIDs: req.AttachmentFileIDs,
}, nil
@@ -98,6 +99,7 @@ func UpdatePurchaseOrderRequestToModel(req *contract.UpdatePurchaseOrderRequest)
Message: req.Message,
TeamScope: req.TeamScope,
TeamCategoryID: req.TeamCategoryID,
CashAdvanceID: req.CashAdvanceID,
Items: items,
AttachmentFileIDs: req.AttachmentFileIDs,
}, nil
@@ -159,6 +161,7 @@ func PurchaseOrderModelResponseToResponse(po *models.PurchaseOrderResponse) *con
TotalAmount: po.TotalAmount,
TeamScope: po.TeamScope,
TeamCategoryID: po.TeamCategoryID,
CashAdvanceID: po.CashAdvanceID,
CreatedAt: po.CreatedAt,
UpdatedAt: po.UpdatedAt,
Team: PurchaseTeamModelToResponse(po.Team),