Merge pull request #34 from dikstub-rssa/fix/encounter
fix (encounter): add open orders guard
This commit is contained in:
@@ -375,7 +375,11 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := UpdateDischargeData(input, data, &event, tx); err != nil {
|
||||
if err := updateDischargeData(input, data, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := checkNewOrdersExist(data.Id, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,15 @@ package encounter
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/encounter"
|
||||
es "simrs-vx/internal/domain/main-entities/soapi"
|
||||
|
||||
edo "simrs-vx/internal/domain/main-entities/device-order"
|
||||
emo "simrs-vx/internal/domain/main-entities/material-order"
|
||||
emco "simrs-vx/internal/domain/main-entities/mcu-order"
|
||||
em "simrs-vx/internal/domain/main-entities/medication"
|
||||
emei "simrs-vx/internal/domain/main-entities/medication-item"
|
||||
emi "simrs-vx/internal/domain/main-entities/medicine-mix"
|
||||
@@ -16,6 +22,7 @@ import (
|
||||
ep "simrs-vx/internal/domain/main-entities/prescription"
|
||||
epi "simrs-vx/internal/domain/main-entities/prescription-item"
|
||||
|
||||
// udo "simrs-vx/internal/use-case/main-use-case/device-order"
|
||||
um "simrs-vx/internal/use-case/main-use-case/medication"
|
||||
umei "simrs-vx/internal/use-case/main-use-case/medication-item"
|
||||
umi "simrs-vx/internal/use-case/main-use-case/medicine-mix"
|
||||
@@ -205,3 +212,97 @@ func createMedicationItem(medication_id uint, input epi.PrescriptionItem, event
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkNewOrdersExist(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "started", "CheckNewOrdersExist")
|
||||
var errs []string
|
||||
if err := getDeviceOrders(encounter_id, event, tx); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
|
||||
if err := getMaterialOrders(encounter_id, event, tx); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
|
||||
if err := getMcuOrders(encounter_id, event, tx); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return fmt.Errorf("encounter has open orders: %s", strings.Join(errs, "; "))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDeviceOrders(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "started", "getDeviceOrders")
|
||||
var orders []edo.DeviceOrder
|
||||
err := tx.Where("\"Encounter_Id\" = ? AND \"Status_Code\" = ?", encounter_id, erc.DSCNew).Find(&orders).Error
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil
|
||||
}
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-get-fail",
|
||||
Detail: "get device order failed",
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, nil)
|
||||
}
|
||||
|
||||
if len(orders) > 0 {
|
||||
return fmt.Errorf("encounter has %d device orders", len(orders))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getMaterialOrders(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "started", "getMaterialOrders")
|
||||
var orders []emo.MaterialOrder
|
||||
err := tx.Where("\"Encounter_Id\" = ? AND \"Status_Code\" = ?", encounter_id, erc.DSCNew).Find(&orders).Error
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil
|
||||
}
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-get-fail",
|
||||
Detail: "get material order failed",
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, nil)
|
||||
}
|
||||
|
||||
if len(orders) > 0 {
|
||||
return fmt.Errorf("encounter has %d material orders", len(orders))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getMcuOrders(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "started", "getMcuOrders")
|
||||
var orders []emco.McuOrder
|
||||
err := tx.Where("\"Encounter_Id\" = ? AND \"Status_Code\" = ?", encounter_id, erc.DSCNew).Find(&orders).Error
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil
|
||||
}
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-get-fail",
|
||||
Detail: "get mcu order failed",
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, nil)
|
||||
}
|
||||
|
||||
if len(orders) > 0 {
|
||||
return fmt.Errorf("encounter has %d mcu orders", len(orders))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ func DeleteData(data *e.Encounter, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func UpdateDischargeData(input e.DischargeDto, data *e.Encounter, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
func updateDischargeData(input e.DischargeDto, data *e.Encounter, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, data, "started", "DBUpdateDischarge")
|
||||
setDataDischarge(input, data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user