148 lines
3.2 KiB
Go
148 lines
3.2 KiB
Go
package nurse
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
|
|
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
|
db "simrs-vx/pkg/dualtrx-helper"
|
|
pl "simrs-vx/pkg/logger"
|
|
"strconv"
|
|
|
|
erg "simrs-vx/internal/domain/references/organization"
|
|
|
|
enr "simrs-vx/internal/domain/main-entities/nurse"
|
|
epr "simrs-vx/internal/domain/main-entities/person"
|
|
es "simrs-vx/internal/domain/main-entities/user"
|
|
|
|
el "simrs-vx/internal/domain/simgos-entities/m-login"
|
|
en "simrs-vx/internal/domain/simgos-entities/m-perawat"
|
|
|
|
un "simrs-vx/internal/use-case/simgos-sync-use-case/new/nurse"
|
|
)
|
|
|
|
type user struct {
|
|
el.MLogin
|
|
en.MPerawat
|
|
}
|
|
|
|
func SeedNurse(kdnur []uint, event *pl.Event, tx *db.Dualtx) error {
|
|
|
|
log.Println("=== START SeedNurse ===")
|
|
|
|
var users []user
|
|
|
|
log.Println("Querying SIMGOS nurses...")
|
|
|
|
err := tx.Simgos.
|
|
Table("m_perawat").
|
|
Select(`
|
|
DISTINCT ON (l.nip)
|
|
m_perawat.idperawat,
|
|
m_perawat.nama,
|
|
l.nip,
|
|
l.nama_pegawai
|
|
`).
|
|
Joins("LEFT JOIN m_login l ON l.kdperawat = m_perawat.idperawat").
|
|
Where(`m_perawat.idperawat IN (?)`, kdnur).
|
|
Order(`l.nip`).
|
|
Scan(&users).Error
|
|
|
|
if err != nil {
|
|
log.Println("Error Querying SIMGOS:", err)
|
|
return err
|
|
}
|
|
|
|
log.Printf("Found %d nurses to seed\n", len(users))
|
|
|
|
// mapping
|
|
for i, d := range users {
|
|
log.Printf("[%d/%d] Processing nurse KdPerawat=%d ...", i+1, len(users), d.Idperawat)
|
|
|
|
kdprawat := strconv.Itoa(int(*d.Idperawat))
|
|
nik := seeder.GenerateDummyNIK("F")
|
|
|
|
nursesimx := es.CreateDto{
|
|
Name: d.MLogin.NIP,
|
|
Password: "1234",
|
|
ContractPosition_Code: erg.CSCEmp,
|
|
Code: &kdprawat,
|
|
Person: &epr.UpdateDto{
|
|
CreateDto: epr.CreateDto{
|
|
Name: d.NamaPegawai,
|
|
ResidentIdentityNumber: &nik,
|
|
},
|
|
},
|
|
Employee: &es.EmployeUpdateDto{
|
|
Position_Code: erg.EPCNur,
|
|
},
|
|
}
|
|
|
|
log.Printf("[%d] Creating User for NIP=%v ...", i+1, d.MLogin.NIP)
|
|
|
|
// create user
|
|
userData, err := seeder.CreateUser(nursesimx)
|
|
if err != nil {
|
|
log.Println("Error createUser:", err)
|
|
return err
|
|
}
|
|
|
|
log.Printf("[%d] User created: ID=%d", i+1, userData.Id)
|
|
|
|
log.Printf("[%d] Fetching nurse with code=%s ...", i+1, kdprawat)
|
|
|
|
// get nurse
|
|
dataNurse, err := getNurse(kdprawat)
|
|
if err != nil {
|
|
log.Println("Error get nurses:", err)
|
|
return err
|
|
}
|
|
|
|
data := *dataNurse
|
|
ddata := data[0]
|
|
|
|
log.Printf("[%d] Linking nurse %d to %s ...", i+1, ddata.Id, kdprawat)
|
|
if _, err := un.CreateLinkData(ddata.Id, *d.Idperawat, event); err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Printf("[%d] Link created successfully.", i+1)
|
|
}
|
|
|
|
log.Println("=== FINISH Seednurse ===")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func getNurse(code string) (*[]enr.Nurse, error) {
|
|
path := fmt.Sprintf("nurse?code=%s", code)
|
|
|
|
resp, err := seeder.Send(http.MethodGet, path, nil, "von")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
type MetaData struct {
|
|
Source string `json:"source"`
|
|
Status string `json:"status"`
|
|
Structure string `json:"structure"`
|
|
}
|
|
|
|
type MainApiResp struct {
|
|
Meta MetaData `json:"meta"`
|
|
Data []enr.Nurse `json:"data"`
|
|
}
|
|
|
|
// getting response
|
|
var data MainApiResp
|
|
err = json.Unmarshal(resp, &data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &data.Data, nil
|
|
}
|