update due date and range date

This commit is contained in:
2026-05-29 18:24:14 +07:00
parent d26f5c5354
commit dc13bb5f93
23 changed files with 640 additions and 84 deletions
+12 -6
View File
@@ -432,19 +432,24 @@ func ProfitLossAnalyticsContractToModel(req *contract.ProfitLossAnalyticsRequest
return nil, fmt.Errorf("request cannot be nil")
}
dateTime, err := util.ParseDateToJakartaTime(req.Date)
dateFrom, dateTo, err := util.ParseDateRangeToJakartaTime(req.DateFrom, req.DateTo)
if err != nil {
return nil, fmt.Errorf("invalid date format: %w", err)
return nil, fmt.Errorf("invalid date range: %w", err)
}
if dateTime == nil {
return nil, fmt.Errorf("date is required")
if dateFrom == nil {
return nil, fmt.Errorf("date_from is required")
}
if dateTo == nil {
return nil, fmt.Errorf("date_to is required")
}
return &models.ProfitLossAnalyticsRequest{
OrganizationID: req.OrganizationID,
OutletID: parseOutletID(req.OutletID),
Date: *dateTime,
DateFrom: *dateFrom,
DateTo: *dateTo,
}, nil
}
@@ -469,7 +474,8 @@ func ProfitLossAnalyticsModelToContract(resp *models.ProfitLossAnalyticsResponse
return &contract.ProfitLossAnalyticsResponse{
OrganizationID: resp.OrganizationID,
OutletID: resp.OutletID,
Date: resp.Date,
DateFrom: resp.DateFrom,
DateTo: resp.DateTo,
MainSummary: mainSummary,
OperationalExpenses: opsItems,
OperationalExpensesTotal: resp.OperationalExpensesTotal,
@@ -74,3 +74,40 @@ func TestPurchasingAnalyticsModelToContractOmitsNilOutletName(t *testing.T) {
require.NoError(t, err)
require.NotContains(t, string(payload), "outlet_name")
}
func TestProfitLossAnalyticsContractToModelParsesDateRange(t *testing.T) {
orgID := uuid.New()
outletID := uuid.New().String()
result, err := ProfitLossAnalyticsContractToModel(&contract.ProfitLossAnalyticsRequest{
OrganizationID: orgID,
OutletID: &outletID,
DateFrom: "01-05-2026",
DateTo: "29-05-2026",
})
require.NoError(t, err)
require.Equal(t, orgID, result.OrganizationID)
require.NotNil(t, result.OutletID)
require.Equal(t, outletID, result.OutletID.String())
location, err := time.LoadLocation("Asia/Jakarta")
require.NoError(t, err)
require.Equal(t, time.Date(2026, 5, 1, 0, 0, 0, 0, location), result.DateFrom)
require.Equal(t, time.Date(2026, 5, 29, 23, 59, 59, int(time.Second-time.Nanosecond), location), result.DateTo)
}
func TestProfitLossAnalyticsModelToContractCopiesDateRange(t *testing.T) {
dateFrom := time.Date(2026, 5, 1, 0, 0, 0, 0, time.UTC)
dateTo := time.Date(2026, 5, 29, 23, 59, 59, int(time.Second-time.Nanosecond), time.UTC)
result := ProfitLossAnalyticsModelToContract(&models.ProfitLossAnalyticsResponse{
OrganizationID: uuid.New(),
DateFrom: dateFrom,
DateTo: dateTo,
})
require.NotNil(t, result)
require.Equal(t, dateFrom, result.DateFrom)
require.Equal(t, dateTo, result.DateTo)
}
@@ -25,10 +25,14 @@ func CreatePurchaseOrderRequestToModel(req *contract.CreatePurchaseOrderRequest)
return nil, err
}
// Parse due date
dueDate, err := time.Parse("2006-01-02", req.DueDate)
if err != nil {
return nil, err
// Parse due date if provided
var dueDate *time.Time
if req.DueDate != nil && *req.DueDate != "" {
parsedDate, err := time.Parse("2006-01-02", *req.DueDate)
if err != nil {
return nil, err
}
dueDate = &parsedDate
}
return &models.CreatePurchaseOrderRequest{
@@ -0,0 +1,43 @@
package transformer
import (
"encoding/json"
"testing"
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/models"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
func TestCreatePurchaseOrderRequestToModelAllowsMissingDueDate(t *testing.T) {
result, err := CreatePurchaseOrderRequestToModel(&contract.CreatePurchaseOrderRequest{
VendorID: uuid.New(),
PONumber: "PO-001",
TransactionDate: "2026-05-29",
Items: []contract.CreatePurchaseOrderItemRequest{
{
IngredientID: uuid.New(),
Quantity: 1,
UnitID: uuid.New(),
Amount: 1000,
},
},
})
require.NoError(t, err)
require.Nil(t, result.DueDate)
}
func TestPurchaseOrderModelResponseToResponseIncludesNullDueDate(t *testing.T) {
result := PurchaseOrderModelResponseToResponse(&models.PurchaseOrderResponse{
ID: uuid.New(),
VendorID: uuid.New(),
PONumber: "PO-001",
})
payload, err := json.Marshal(result)
require.NoError(t, err)
require.Contains(t, string(payload), `"due_date":null`)
}