Merge branch 'dev' of https://github.com/dikstub-rssa/simrs-be into feat/functional-position-100
This commit is contained in:
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Doctor) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
data.SIP_Number = inputSrc.SIP_Number
|
||||
|
||||
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Laborant) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Midwife) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Nurse) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
data.Unit_Id = inputSrc.Unit_Id
|
||||
|
||||
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Nutritionist) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
}
|
||||
|
||||
@@ -352,18 +352,18 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
|
||||
}
|
||||
|
||||
func Search(input e.SearchDto) (*d.Data, error) {
|
||||
func SearchByResidentIdentityNumber(input e.SearchDto) (*d.Data, error) {
|
||||
var data *e.Patient
|
||||
var err error
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Search",
|
||||
Feature: "Search By Resident Identity Number",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "search")
|
||||
if data, err = SearchData(input, &event); err != nil {
|
||||
if data, err = SearchDataByRIN(input, &event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -377,6 +377,46 @@ func Search(input e.SearchDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func Search(input e.SearchDto) (*d.Data, error) {
|
||||
var dataList []e.Patient
|
||||
var metaList *e.MetaDto
|
||||
var err error
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Search",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "readList")
|
||||
|
||||
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
|
||||
if dataList, metaList, err = SearchData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.IS{
|
||||
"source": source,
|
||||
"structure": "list-data",
|
||||
"status": "fetched",
|
||||
"page_number": strconv.Itoa(metaList.PageNumber),
|
||||
"page_size": strconv.Itoa(metaList.PageSize),
|
||||
"record_totalCount": strconv.Itoa(metaList.Count),
|
||||
"record_currentCount": strconv.Itoa(len(dataList)),
|
||||
},
|
||||
Data: e.ToResponseList(dataList),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func Upload(input e.UploadDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: uint16(input.Id)}
|
||||
var data *e.Patient
|
||||
|
||||
@@ -154,11 +154,11 @@ func DeleteData(data *e.Patient, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func SearchData(input e.SearchDto, event *pl.Event, dbx ...*gorm.DB) (*e.Patient, error) {
|
||||
// Search By Resident Identity Number
|
||||
func SearchDataByRIN(input e.SearchDto, event *pl.Event, dbx ...*gorm.DB) (*e.Patient, error) {
|
||||
pl.SetLogInfo(event, input, "started", "DBSearch")
|
||||
|
||||
var patient e.Patient
|
||||
var err error
|
||||
var data e.Patient
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
@@ -174,27 +174,60 @@ func SearchData(input e.SearchDto, event *pl.Event, dbx ...*gorm.DB) (*e.Patient
|
||||
Preload("Person.Relatives").
|
||||
Preload("Person.Insurances")
|
||||
|
||||
switch input.Mode {
|
||||
case e.SMIdent:
|
||||
// Search by patient number OR person's resident identity number (exact match) OR person's name (partial match)
|
||||
err = tx.Joins("JOIN \"Person\" ON \"Patient\".\"Person_Id\" = \"Person\".\"Id\"").
|
||||
Where("\"Patient\".\"Number\" = ? OR \"Person\".\"ResidentIdentityNumber\" = ? OR \"Person\".\"Name\" ILIKE ?",
|
||||
input.Search, input.Search, "%"+input.Search+"%").
|
||||
First(&patient).Error
|
||||
case e.SMNik:
|
||||
// Search by patient person's resident identity number (exact match)
|
||||
err = tx.Joins("JOIN \"Person\" ON \"Patient\".\"Person_Id\" = \"Person\".\"Id\"").
|
||||
Where("\"Person\".\"ResidentIdentityNumber\" = ?",
|
||||
input.Search).
|
||||
First(&patient).Error
|
||||
}
|
||||
// Search by patient person's resident identity number (exact match)
|
||||
err := tx.Joins("JOIN \"Person\" ON \"Patient\".\"Person_Id\" = \"Person\".\"Id\"").
|
||||
Where("\"Person\".\"ResidentIdentityNumber\" = ?",
|
||||
input.Search).
|
||||
First(&data).Error
|
||||
|
||||
if err != nil {
|
||||
if processedErr := pu.HandleSearchError(err, event, source, input.Search, patient); processedErr != nil {
|
||||
if processedErr := pu.HandleSearchError(err, event, source, input.Search, data); processedErr != nil {
|
||||
return nil, processedErr
|
||||
}
|
||||
}
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &patient, nil
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
func SearchData(input e.SearchDto, event *pl.Event, dbx ...*gorm.DB) ([]e.Patient, *e.MetaDto, error) {
|
||||
pl.SetLogInfo(event, input, "started", "DBSearch")
|
||||
|
||||
var data []e.Patient
|
||||
pagination := gh.Pagination{}
|
||||
count := int64(0)
|
||||
meta := e.MetaDto{}
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
// Preload associations for complete data
|
||||
tx = tx.Preload(clause.Associations)
|
||||
tx = tx.Preload("Person.Addresses").
|
||||
Preload("Person.Contacts").
|
||||
Preload("Person.Relatives").
|
||||
Preload("Person.Insurances")
|
||||
|
||||
// Search by patient number OR person's resident identity number (exact match) OR person's name (partial match)
|
||||
tx = tx.Joins("JOIN \"Person\" ON \"Patient\".\"Person_Id\" = \"Person\".\"Id\"").
|
||||
Where("\"Patient\".\"Number\" ILIKE ? OR \"Person\".\"ResidentIdentityNumber\" ILIKE ? OR \"Person\".\"Name\" ILIKE ?",
|
||||
"%"+input.Search+"%", "%"+input.Search+"%", "%"+input.Search+"%")
|
||||
err := tx.Scopes(gh.Paginate(input, &pagination)).Find(&data).Error
|
||||
|
||||
if err != nil {
|
||||
if processedErr := pu.HandleSearchError(err, event, source, input.Search, data); processedErr != nil {
|
||||
return nil, nil, processedErr
|
||||
}
|
||||
}
|
||||
|
||||
meta.Count = int(count)
|
||||
meta.PageNumber = pagination.PageNumber
|
||||
meta.PageSize = pagination.PageSize
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return data, &meta, nil
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Pharmacist) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.Code = inputSrc.Code
|
||||
data.Employee_Id = inputSrc.Employee_Id
|
||||
data.IHS_Number = inputSrc.IHS_Number
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||
ee "simrs-vx/internal/domain/main-entities/employee"
|
||||
el "simrs-vx/internal/domain/main-entities/laborant"
|
||||
emw "simrs-vx/internal/domain/main-entities/midwife"
|
||||
en "simrs-vx/internal/domain/main-entities/nurse"
|
||||
et "simrs-vx/internal/domain/main-entities/nutritionist"
|
||||
ep "simrs-vx/internal/domain/main-entities/pharmacist"
|
||||
@@ -18,6 +19,7 @@ import (
|
||||
ud "simrs-vx/internal/use-case/main-use-case/doctor"
|
||||
ue "simrs-vx/internal/use-case/main-use-case/employee"
|
||||
ul "simrs-vx/internal/use-case/main-use-case/laborant"
|
||||
umw "simrs-vx/internal/use-case/main-use-case/midwife"
|
||||
un "simrs-vx/internal/use-case/main-use-case/nurse"
|
||||
ut "simrs-vx/internal/use-case/main-use-case/nutritionist"
|
||||
upe "simrs-vx/internal/use-case/main-use-case/person"
|
||||
@@ -106,6 +108,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
switch input.Employee.Position_Code {
|
||||
case ero.EPCDoc:
|
||||
createDoc := ed.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
SIP_Number: input.SIP_Number,
|
||||
@@ -118,6 +121,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}
|
||||
case ero.EPCNur:
|
||||
createNurse := en.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
Unit_Id: input.Unit_Id,
|
||||
@@ -128,6 +132,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}
|
||||
case ero.EPCNut:
|
||||
createNutritionist := et.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -136,6 +141,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}
|
||||
case ero.EPCPha:
|
||||
createPharmacist := ep.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -144,12 +150,22 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}
|
||||
case ero.EPCLab:
|
||||
createLaborant := el.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if _, err := ul.CreateData(createLaborant, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
case ero.EPCMwi:
|
||||
createMidWife := emw.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if _, err := umw.CreateData(createMidWife, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
return errors.New("invalid employee position")
|
||||
}
|
||||
@@ -380,6 +396,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
createDoc := ed.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
SIP_Number: input.SIP_Number,
|
||||
@@ -402,6 +419,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
createNur := en.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -422,6 +440,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
createNut := et.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -442,6 +461,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
createPha := ep.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -462,6 +482,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
createLab := el.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
@@ -475,6 +496,27 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
if _, err := ul.CreateData(createLab, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
case ero.EPCMwi:
|
||||
readMidWife := emw.ReadDetailDto{Employee_Id: &employeeData.Id}
|
||||
readMidWifeData, err := umw.ReadDetailData(readMidWife, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
createMidWife := emw.CreateDto{
|
||||
Code: input.Code,
|
||||
Employee_Id: &employeeData.Id,
|
||||
IHS_Number: input.IHS_Number,
|
||||
}
|
||||
if readMidWifeData != nil {
|
||||
if err := umw.UpdateData(emw.UpdateDto{CreateDto: createMidWife}, readMidWifeData, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if _, err := umw.CreateData(createMidWife, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
return errors.New("invalid employee position")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user