53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"backendcareit/database"
|
|
"backendcareit/models"
|
|
)
|
|
|
|
// CloseBilling - Nutup billing dengan set Tanggal_Keluar (selesai dah pasiennya)
|
|
func CloseBilling(closeReq models.Close_billing) error {
|
|
// Cari billing berdasarkan ID_Billing
|
|
var billing models.BillingPasien
|
|
if err := database.DB.Where("\"ID_Billing\" = ?", closeReq.ID_Billing).First(&billing).Error; err != nil {
|
|
return fmt.Errorf("billing dengan ID %d tidak ditemukan: %w", closeReq.ID_Billing, err)
|
|
}
|
|
|
|
// Parse Tanggal_Keluar dari string ke time.Time
|
|
// Menggunakan multiple layouts seperti di billing_pasien.go
|
|
var keluarTime *time.Time
|
|
if closeReq.Tanggal_Keluar != "" {
|
|
s := closeReq.Tanggal_Keluar
|
|
var parsed time.Time
|
|
var err error
|
|
layouts := []string{time.RFC3339, "2006-01-02 15:04:05", "2006-01-02"}
|
|
for _, layout := range layouts {
|
|
parsed, err = time.Parse(layout, s)
|
|
if err == nil {
|
|
t := parsed
|
|
keluarTime = &t
|
|
break
|
|
}
|
|
}
|
|
if keluarTime == nil {
|
|
return fmt.Errorf("format tanggal_keluar tidak valid: %s", closeReq.Tanggal_Keluar)
|
|
}
|
|
} else {
|
|
return errors.New("tanggal_keluar tidak boleh kosong")
|
|
}
|
|
|
|
// Update Tanggal_keluar pada billing
|
|
billing.Tanggal_keluar = keluarTime
|
|
|
|
// Simpan perubahan
|
|
if err := database.DB.Save(&billing).Error; err != nil {
|
|
return fmt.Errorf("gagal update billing: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|