feat: include tariff period in package detail

This commit is contained in:
2026-08-22 11:46:43 +07:00
parent d183e321e8
commit 412e926a65
2 changed files with 56 additions and 33 deletions

View File

@@ -50,29 +50,37 @@ type PaketSummary struct {
}
type PaketDetail struct {
PaketID string `json:"PaketID"`
Nama string `json:"Nama"`
JenisPaket string `json:"JenisPaket"`
RJ int `json:"RJ"`
RI int `json:"RI"`
TglDari string `json:"TglDari"`
TglSampai string `json:"TglSampai"`
MultiVisit int `json:"MultiVisit"`
HeaderPaket string `json:"HeaderPaket"`
KelasID string `json:"KelasID"`
JumlahHari int `json:"JumlahHari"`
TotalHarga string `json:"TotalHarga"`
Keterangan string `json:"Keterangan"`
StatusID int `json:"StatusID"`
LoginBuat string `json:"LoginBuat"`
TanggalBuat string `json:"TanggalBuat"`
LoginEdit string `json:"LoginEdit"`
TanggalEdit string `json:"TanggalEdit"`
NA string `json:"NA"`
Layanan []PaketLayanan `json:"layanan"`
Operasi []PaketOperasi `json:"operasi"`
Item []PaketItem `json:"item"`
Kamar []PaketKamar `json:"kamar"`
PaketID string `json:"PaketID"`
Nama string `json:"Nama"`
JenisPaket string `json:"JenisPaket"`
RJ int `json:"RJ"`
RI int `json:"RI"`
TglDari string `json:"TglDari"`
TglSampai string `json:"TglSampai"`
MultiVisit int `json:"MultiVisit"`
HeaderPaket string `json:"HeaderPaket"`
KelasID string `json:"KelasID"`
JumlahHari int `json:"JumlahHari"`
TotalHarga string `json:"TotalHarga"`
Keterangan string `json:"Keterangan"`
StatusID int `json:"StatusID"`
LoginBuat string `json:"LoginBuat"`
TanggalBuat string `json:"TanggalBuat"`
LoginEdit string `json:"LoginEdit"`
TanggalEdit string `json:"TanggalEdit"`
NA string `json:"NA"`
PeriodeTarif *PaketPeriodeTarif `json:"PeriodeTarif"`
Layanan []PaketLayanan `json:"layanan"`
Operasi []PaketOperasi `json:"operasi"`
Item []PaketItem `json:"item"`
Kamar []PaketKamar `json:"kamar"`
}
type PaketPeriodeTarif struct {
PeriodeTarifID int64 `json:"PeriodeTarifID"`
Keterangan *string `json:"Keterangan"`
TanggalBerlaku string `json:"TanggalBerlaku"`
TanggalBerakhir string `json:"TanggalBerakhir"`
}
type PaketLayanan struct {
@@ -243,10 +251,11 @@ func (r MySQLLayananRepository) GetPaket(ctx context.Context, id string) (*Paket
result.TanggalBuat = laravelDateJSON(tanggalBuat)
result.TanggalEdit = laravelDateJSON(tanggalEdit)
tariffTable, err := r.activePaketTariffTable(ctx)
periodeTarif, tariffTable, err := r.activePaketTariff(ctx)
if err != nil {
return nil, err
}
result.PeriodeTarif = periodeTarif
pricing := newPaketBasePricing()
if result.Layanan, err = r.paketLayanan(ctx, id, result.KelasID, tariffTable, pricing); err != nil {
return nil, err
@@ -275,29 +284,37 @@ func newPaketBasePricing() *paketBasePricing {
}
}
func (r MySQLLayananRepository) activePaketTariffTable(ctx context.Context) (string, error) {
var periodID int64
func (r MySQLLayananRepository) activePaketTariff(ctx context.Context) (*PaketPeriodeTarif, string, error) {
var period PaketPeriodeTarif
var keterangan sql.NullString
err := r.db.QueryRowContext(ctx, `
SELECT PeriodeTarifID
SELECT PeriodeTarifID, Keterangan,
CAST(TanggalBerlaku AS CHAR), CAST(TanggalBerakhir AS CHAR)
FROM periode_tarif
WHERE DATE(TanggalBerlaku) <= CURRENT_DATE()
AND DATE(TanggalBerakhir) >= CURRENT_DATE()
AND NA = 'N'
ORDER BY PeriodeTarifID DESC
LIMIT 1`).Scan(&periodID)
LIMIT 1`).Scan(
&period.PeriodeTarifID,
&keterangan,
&period.TanggalBerlaku,
&period.TanggalBerakhir,
)
if err == sql.ErrNoRows {
return "", nil
return nil, "", nil
}
if err != nil {
return "", err
return nil, "", err
}
period.Keterangan = nullStringPtr(keterangan)
tableName := "harga_layanan_" + strconv.FormatInt(periodID, 10)
tableName := "harga_layanan_" + strconv.FormatInt(period.PeriodeTarifID, 10)
exists, err := r.tableExists(ctx, tableName)
if err != nil || !exists {
return "", err
return &period, "", err
}
return tableName, nil
return &period, tableName, nil
}
func (r MySQLLayananRepository) paketLayanan(