Files
2026-02-06 14:22:35 +07:00

97 lines
2.7 KiB
Go

package services
import (
"backendcareit/models"
"fmt"
"log"
"gorm.io/gorm"
)
func Edit_INACBG_Admin(db *gorm.DB, input models.Edit_INACBG_Request) error {
log.Printf("[Edit INACBG] Received ID_Billing=%d, Tipe=%s, Kode_count=%d, Delete_count=%d, Total_Klaim=%.2f, Billing_Sign=%s\n",
input.ID_Billing, input.Tipe_inacbg, len(input.Kode_inacbg), len(input.Kode_Delete), input.Total_Klaim, input.Billing_Sign)
tx := db.Begin()
if tx.Error != nil {
return tx.Error
}
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 1. Hapus kode yang udah dipilih untuk dihapus
if len(input.Kode_Delete) > 0 {
switch input.Tipe_inacbg {
case "RI":
if err := tx.Where("\"ID_Billing\" = ? AND \"ID_INACBG_RI\" IN ?", input.ID_Billing, input.Kode_Delete).Delete(&models.Billing_INACBG_RI{}).Error; err != nil {
tx.Rollback()
return fmt.Errorf("gagal delete INACBG RI: %w", err)
}
case "RJ":
if err := tx.Where("\"ID_Billing\" = ? AND \"ID_INACBG_RJ\" IN ?", input.ID_Billing, input.Kode_Delete).Delete(&models.Billing_INACBG_RJ{}).Error; err != nil {
tx.Rollback()
return fmt.Errorf("gagal delete INACBG RJ: %w", err)
}
default:
tx.Rollback()
return fmt.Errorf("invalid tipe_inacbg: %s", input.Tipe_inacbg)
}
}
// 2. Tambahin kode INACBG yang baru
if len(input.Kode_inacbg) > 0 {
switch input.Tipe_inacbg {
case "RI":
for _, kode := range input.Kode_inacbg {
inacbgRI := models.Billing_INACBG_RI{
ID_Billing: input.ID_Billing,
Kode_INACBG: kode,
}
if err := tx.Create(&inacbgRI).Error; err != nil {
tx.Rollback()
return fmt.Errorf("gagal insert INACBG RI kode %s: %w", kode, err)
}
}
case "RJ":
for _, kode := range input.Kode_inacbg {
inacbgRJ := models.Billing_INACBG_RJ{
ID_Billing: input.ID_Billing,
Kode_INACBG: kode,
}
if err := tx.Create(&inacbgRJ).Error; err != nil {
tx.Rollback()
return fmt.Errorf("gagal insert INACBG RJ kode %s: %w", kode, err)
}
}
}
}
// 3. Update data di tabel billing_pasien
updateData := map[string]interface{}{
"Total_Klaim": input.Total_Klaim,
"Billing_Sign": input.Billing_Sign,
}
if err := tx.Model(&models.BillingPasien{}).Where("\"ID_Billing\" = ?", input.ID_Billing).Updates(updateData).Error; err != nil {
tx.Rollback()
return fmt.Errorf("gagal update billing_pasien: %w", err)
}
if err := tx.Commit().Error; err != nil {
return err
}
// 4. Ngirim email kalo billing_sign gak kosong
go func(id int) {
if err := SendEmailBillingSignToDokter(id); err != nil {
log.Printf("Warning: Gagal mengirim email ke dokter untuk billing ID %d: %v\n", id, err)
}
}(input.ID_Billing)
return nil
}