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
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,15 @@ package encounter
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/main-entities/encounter"
|
e "simrs-vx/internal/domain/main-entities/encounter"
|
||||||
es "simrs-vx/internal/domain/main-entities/soapi"
|
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"
|
em "simrs-vx/internal/domain/main-entities/medication"
|
||||||
emei "simrs-vx/internal/domain/main-entities/medication-item"
|
emei "simrs-vx/internal/domain/main-entities/medication-item"
|
||||||
emi "simrs-vx/internal/domain/main-entities/medicine-mix"
|
emi "simrs-vx/internal/domain/main-entities/medicine-mix"
|
||||||
@@ -16,6 +22,7 @@ import (
|
|||||||
ep "simrs-vx/internal/domain/main-entities/prescription"
|
ep "simrs-vx/internal/domain/main-entities/prescription"
|
||||||
epi "simrs-vx/internal/domain/main-entities/prescription-item"
|
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"
|
um "simrs-vx/internal/use-case/main-use-case/medication"
|
||||||
umei "simrs-vx/internal/use-case/main-use-case/medication-item"
|
umei "simrs-vx/internal/use-case/main-use-case/medication-item"
|
||||||
umi "simrs-vx/internal/use-case/main-use-case/medicine-mix"
|
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
|
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
|
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")
|
pl.SetLogInfo(event, data, "started", "DBUpdateDischarge")
|
||||||
setDataDischarge(input, data)
|
setDataDischarge(input, data)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user