revisi back date dan dpjp login
This commit is contained in:
@@ -228,6 +228,7 @@ type BillingRequest struct {
|
||||
Ruangan string `json:"ruangan" binding:"required"`
|
||||
Kelas string `json:"kelas" binding:"required"`
|
||||
Tindakan_RS []string `json:"tindakan_rs" binding:"required"`
|
||||
Tanggal_Masuk string `json:"tanggal_masuk"` // ← Added: Tanggal masuk dari frontend (format: YYYY-MM-DD)
|
||||
Tanggal_Keluar string `json:"tanggal_keluar"`
|
||||
Billing_sign string `json:"billing_sign"`
|
||||
ICD9 []string `json:"icd9"`
|
||||
|
||||
@@ -314,6 +314,30 @@ func DataFromFE(input models.BillingRequest) (
|
||||
|
||||
now := time.Now()
|
||||
|
||||
// Parse Tanggal_Masuk - accept multiple formats
|
||||
var masukPtr *time.Time
|
||||
if input.Tanggal_Masuk != "" && input.Tanggal_Masuk != "null" {
|
||||
s := input.Tanggal_Masuk
|
||||
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
|
||||
masukPtr = &t
|
||||
break
|
||||
}
|
||||
}
|
||||
if masukPtr == nil {
|
||||
tx.Rollback()
|
||||
return nil, nil, nil, nil, nil, fmt.Errorf("invalid tanggal_masuk format: %s", input.Tanggal_Masuk)
|
||||
}
|
||||
} else {
|
||||
// Jika tidak ada input, default ke hari ini
|
||||
masukPtr = &now
|
||||
}
|
||||
|
||||
// Parse Tanggal_Keluar (frontend sends string). Accept multiple formats.
|
||||
var keluarPtr *time.Time
|
||||
if input.Tanggal_Keluar != "" && input.Tanggal_Keluar != "null" {
|
||||
@@ -355,7 +379,7 @@ func DataFromFE(input models.BillingRequest) (
|
||||
billing = models.BillingPasien{
|
||||
ID_Pasien: pasien.ID_Pasien,
|
||||
Cara_Bayar: input.Cara_Bayar,
|
||||
Tanggal_masuk: &now,
|
||||
Tanggal_masuk: masukPtr,
|
||||
Tanggal_keluar: keluarPtr,
|
||||
Total_Tarif_RS: input.Total_Tarif_RS,
|
||||
Total_Klaim: input.Total_Klaim_BPJS, // ← Changed: Use input value instead of hardcoded 0
|
||||
|
||||
@@ -46,6 +46,7 @@ func GetRiwayatPasienAll(db *gorm.DB) ([]models.Riwayat_Pasien_all, error) {
|
||||
if err := db.Table("\"billing_tindakan\"").
|
||||
Where("\"ID_Billing\" IN ?", billingIDs).
|
||||
Select("\"ID_Billing\", \"ID_Tarif_RS\" as \"Kode\"").
|
||||
Order("\"ID_Billing\" ASC, \"tanggal_tindakan\" ASC").
|
||||
Scan(&tindakanRows).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -54,7 +55,7 @@ func GetRiwayatPasienAll(db *gorm.DB) ([]models.Riwayat_Pasien_all, error) {
|
||||
tindakanMap[t.ID_Billing] = append(tindakanMap[t.ID_Billing], t.Kode)
|
||||
}
|
||||
|
||||
// Ambil tanggal tindakan dari tabel billing_tindakan
|
||||
// Ambil tanggal tindakan dari tabel billing_tindakan (ambil yang pertama aja per billing supaya konsisten)
|
||||
tindakanDateMap := make(map[int]*time.Time)
|
||||
var tindakanDateRows []struct {
|
||||
ID_Billing int
|
||||
@@ -64,12 +65,13 @@ func GetRiwayatPasienAll(db *gorm.DB) ([]models.Riwayat_Pasien_all, error) {
|
||||
if err := db.Table("\"billing_tindakan\"").
|
||||
Where("\"ID_Billing\" IN ?", billingIDs).
|
||||
Select("\"ID_Billing\", \"tanggal_tindakan\"").
|
||||
Order("\"ID_Billing\" ASC, \"tanggal_tindakan\" ASC").
|
||||
Scan(&tindakanDateRows).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, t := range tindakanDateRows {
|
||||
if t.Tanggal_Tindakan != nil {
|
||||
if t.Tanggal_Tindakan != nil && tindakanDateMap[t.ID_Billing] == nil {
|
||||
tindakanDateMap[t.ID_Billing] = t.Tanggal_Tindakan
|
||||
}
|
||||
}
|
||||
@@ -262,6 +264,7 @@ func GetAllRiwayatpasien(db *gorm.DB) ([]models.Request_Admin_Inacbg, error) {
|
||||
if err := db.Table("\"billing_tindakan\"").
|
||||
Where("\"ID_Billing\" IN ?", billingIDs).
|
||||
Select("\"ID_Billing\", \"ID_Tarif_RS\" as \"Kode\"").
|
||||
Order("\"ID_Billing\" ASC, \"tanggal_tindakan\" ASC").
|
||||
Scan(&tindakanRows).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -620,7 +620,7 @@ const BillingPasien = ({ onEditBilling }: BillingPasienProps) => {
|
||||
// Tambah tindakan - nyimpen Deskripsi (bukan KodeRS) karena backend nyari pake Tindakan_RS (Deskripsi)
|
||||
const handleAddTindakan = (kode: string) => {
|
||||
const tarif = tarifRSList.find(t => (t as any).KodeRS === kode);
|
||||
if (tarif && (tarif as any).Deskripsi && !selectedTindakan.includes((tarif as any).Deskripsi)) {
|
||||
if (tarif && (tarif as any).Deskripsi && ((tarif as any).Deskripsi)) {
|
||||
setSelectedTindakan([...selectedTindakan, (tarif as any).Deskripsi]);
|
||||
setTindakanSearch('');
|
||||
setTindakanDropdownOpen(false);
|
||||
@@ -654,9 +654,9 @@ const BillingPasien = ({ onEditBilling }: BillingPasienProps) => {
|
||||
(t as any).KodeRS?.toLowerCase().includes(tindakanSearch.toLowerCase())
|
||||
);
|
||||
|
||||
// Hapus tindakan - sekarang pake Deskripsi
|
||||
const handleRemoveTindakan = (deskripsi: string) => {
|
||||
setSelectedTindakan(selectedTindakan.filter(t => t !== deskripsi));
|
||||
// Hapus tindakan - sekarang support duplikat dengan remove by index
|
||||
const handleRemoveTindakan = (index: number) => {
|
||||
setSelectedTindakan(selectedTindakan.filter((_, i) => i !== index));
|
||||
};
|
||||
|
||||
// Tambah ICD9 - nyimpen Prosedur (bukan Kode_ICD9) karena backend nyari pake Prosedur
|
||||
@@ -1379,16 +1379,16 @@ const BillingPasien = ({ onEditBilling }: BillingPasienProps) => {
|
||||
{/* Selected tindakan chips */}
|
||||
{selectedTindakan.length > 0 && (
|
||||
<div className="mt-2 flex flex-wrap gap-2">
|
||||
{selectedTindakan.map((t) => {
|
||||
{selectedTindakan.map((t, index) => {
|
||||
const tarif = tarifRSList.find(tar => (tar as any).Deskripsi === t);
|
||||
const harga = (tarif as any)?.Harga || 0;
|
||||
return (
|
||||
<div key={t} className="flex items-center bg-blue-50 border border-blue-200 text-[#2591D0] rounded-full px-3 py-1 text-sm">
|
||||
<div key={`${index}_${t}`} className="flex items-center bg-blue-50 border border-blue-200 text-[#2591D0] rounded-full px-3 py-1 text-sm">
|
||||
<span className="mr-2">{t}</span>
|
||||
<span className="text-xs text-gray-600 mr-2">Rp {harga.toLocaleString('id-ID')}</span>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => handleRemoveTindakan(t)}
|
||||
onClick={() => handleRemoveTindakan(index)}
|
||||
className="text-red-500 hover:text-red-700 ml-1"
|
||||
aria-label={`Hapus tindakan ${t}`}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user