update due date and range date
This commit is contained in:
@@ -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`)
|
||||
}
|
||||
Reference in New Issue
Block a user