revice tab ordering service

This commit is contained in:
2024-07-16 13:18:58 +07:00
parent 938e6d60f1
commit a729d6ab67
11 changed files with 441 additions and 476 deletions

View File

@@ -25,7 +25,7 @@ func NewTabDaftarPesertaServices(uStore db.AppStore) *TabDaftarPesertaServices {
}
}
func (tdps *TabDaftarPesertaServices) GetListMcuDaftarPeserta(id string, currentpage int, rowperpage int) ([]models.ModelMcuDaftarPeserta, int, error) {
func (tdps *TabDaftarPesertaServices) GetListDaftarPesertaMCU(id string, currentpage int, rowperpage int) ([]models.ModelMcuDaftarPeserta, int, error) {
logger, _ := zap.NewProduction()
var listDaftarPeserta []models.ModelMcuDaftarPeserta
var totalData int
@@ -43,7 +43,7 @@ func (tdps *TabDaftarPesertaServices) GetListMcuDaftarPeserta(id string, current
query := `SELECT T_OrderHeaderID,
T_OrderHeaderDate,
T_OrderHeaderLabNumber,
IFNULL(T_OrderHeaderLabNumber, 0) AS T_OrderHeaderLabNumber,
T_OrderHeaderM_PatientAge,
M_PatientID,
M_PatientNoReg,
@@ -72,194 +72,28 @@ func (tdps *TabDaftarPesertaServices) GetListMcuDaftarPeserta(id string, current
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
defer logger.Sync()
logger.Info("GET DATA PESERTA",
zap.Any("id", id),
zap.Any("total data", totalData),
zap.Any("peserta", listDaftarPeserta),
)
// logger.Info("GET DATA PESERTA",
// zap.Any("id", id),
// zap.Any("total data", totalData),
// zap.Any("peserta", listDaftarPeserta),
// )
return listDaftarPeserta, totalPage, nil
}
func (tdps *TabDaftarPesertaServices) GetReportMcu(orderheaderID string) ([]models.TabViewReportMcu, error) {
var ret []models.TabViewReportMcu
var data []models.ModelMcuPesertaReport
var totalData int
q := `
SELECT COUNT(*)
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
`
if err := dbx.Handlex.Get(&totalData, q, orderheaderID); err != nil {
return ret, fmt.Errorf("error get total mcu report: %v", err)
}
q = `
SELECT
So_ResultEntryID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
ORDER BY So_ResultEntryNonlab_TemplateID
`
if err := dbx.Handlex.Select(&data, q, orderheaderID); err != nil {
return ret, fmt.Errorf("error get mcu report: %v", err)
}
// Lab
ret = append(ret, models.TabViewReportMcu{Name: "Hasil Laboratorium", Link: "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test.rptdesign&__format=pdf&PID=" + orderheaderID + "&username=adhi&tm=1717726294764"})
// Non-lab
for _, n := range data {
var link models.TabViewReportMcu
switch n.So_ResultEntryNonlab_TemplateName {
case "ECG":
link.Name = "Elektromedis"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_elmd.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Thorax PA":
link.Name = "Radiologi"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_xray.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Audiometri":
link.Name = "Audiometri"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_audiometri.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Spirometri":
link.Name = "Spirometri"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_spirometri.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Fisik Umum":
namaFisik := []string{"Hasil Fisik", "Hasil Pajanan", "Riwayat"}
linkFisik := []string{
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_fisik.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=fisik&username=adhi&tm=1717726294764",
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_pajanan.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=fisik&username=adhi&tm=1717726294764",
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_riwayat.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=riwayat&username=adhi&tm=1717726294764",
}
for i := 0; i < 3; i++ {
ret = append(ret, models.TabViewReportMcu{Name: namaFisik[i], Link: linkFisik[i]})
}
continue
}
ret = append(ret, link)
}
ret = append(ret, models.TabViewReportMcu{Name: "Resume Individu", Link: "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/rpt_mcu_resume.rptdesign&__format=pdf&PID=" + orderheaderID + "&username=adhi&tm=1717726294764"})
return ret, nil
}
func (tdps *TabDaftarPesertaServices) GetListReportPeserta(orderheaderID string, host string) ([]models.TabViewReportMcu, error) {
var ret []models.TabViewReportMcu
var data []models.ModelMcuPesertaReport
q := `
SELECT
So_ResultEntryID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
ORDER BY So_ResultEntryNonlab_TemplateID
`
if err := dbx.Handlex.Select(&data, q, orderheaderID); err != nil {
return ret, fmt.Errorf("error get mcu report : %v", err)
}
var tabdata []models.OrderReport
q = `
SELECT
M_OrderReportID,
M_OrderReportName,
M_OrderReportOrdering,
M_OrderReportUrl,
M_OrderReportIsOrderHeader,
M_OrderReportIsFisikUmum,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM m_order_report
WHERE
M_OrderReportIsActive = 'Y'
AND (
M_OrderReportName LIKE "%Hasil Laboratorium%"
OR
M_OrderReportName LIKE "%Resume Individu%"
`
temParam := map[string]int{}
for _, d := range data {
switch d.So_ResultEntryNonlab_TemplateName {
case "ECG":
q = q + `OR M_OrderReportName LIKE "%Elektromedis%"`
temParam["Elektromedis"] = d.So_ResultEntryID
case "Thorax PA":
q = q + `OR M_OrderReportName LIKE "%Radiologi%"`
temParam["Radiologi"] = d.So_ResultEntryID
case "Audiometri":
q = q + `OR M_OrderReportName LIKE "%Audiometri%"`
temParam["Audiometri"] = d.So_ResultEntryID
case "Spirometri":
q = q + `OR M_OrderReportName LIKE "%Spirometri%"`
temParam["Spirometri"] = d.So_ResultEntryID
case "Fisik Umum":
q = q + `OR M_OrderReportIsFisikUmum = 'Y'`
temParam["Fisik Umum"] = d.So_ResultEntryID
default:
q = q + `OR M_OrderReportName LIKE "%` + d.So_ResultEntryNonlab_TemplateName + `%"`
temParam[d.So_ResultEntryNonlab_TemplateName] = d.So_ResultEntryID
}
}
q = q + `) ORDER BY M_OrderReportOrdering ASC`
if err := dbx.Handlex.Select(&tabdata, q); err != nil {
return ret, fmt.Errorf("error get link mcu report: %v", err)
}
if host == "localhost:5000" {
host = "https://devcpone.aplikasi.web.id"
}
for _, t := range tabdata {
if t.M_OrderReportIsFisikUmum == "Y" {
id := strconv.Itoa(temParam["Fisik Umum"])
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + id + "&tm=" + t.Datetime,
})
} else if t.M_OrderReportIsOrderHeader != "Y" {
id := strconv.Itoa(temParam[t.M_OrderReportName])
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + id + "&tm=" + t.Datetime,
})
} else {
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + orderheaderID + "&tm=" + t.Datetime,
})
}
}
return ret, nil
}
func (tdps *TabDaftarPesertaServices) GenerataPasswordMCU(mgmMCUID string, host string) (models.GeneratePasswordResponse, error) {
// Generate email dan password utk seluruh peserta mgm mcu
// https://devcpone.aplikasi.web.id/one-api/tools/auth_patient/generate/<XID>
// <XID> : mgmMcuID
if host == "localhost:5000" {
host = "https://devcpone.aplikasi.web.id"
}
// if host == "localhost:5000" {
// host = "https://devcpone.aplikasi.web.id"
// }
logger, _ := zap.NewProduction()
var ret models.GeneratePasswordResponse
uri := host + "/one-api/tools/auth_patient/generate/" + mgmMCUID
uri := "https://cpone.aplikasi.web.id/one-api/tools/auth_patient/generate/" + mgmMCUID
payload := []byte{}
resp, err := http.Post(uri, "application/json", bytes.NewBuffer(payload))
@@ -304,3 +138,215 @@ func (tdps *TabDaftarPesertaServices) GetAkunPeserta(patientID string) (models.A
return ret, nil
}
func (tdps *TabDaftarPesertaServices) GetListReportPesertaV2(orderheaderID string, host string) ([]models.TabViewReportMcu, error) {
var returnTabRpt []models.TabViewReportMcu
var SoResultData []models.SoResultEntryReportModel
q := `
SELECT
So_ResultEntryID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
ORDER BY So_ResultEntryNonlab_TemplateID
`
if err := dbx.Handlex.Select(&SoResultData, q, orderheaderID); err != nil {
return returnTabRpt, fmt.Errorf("error get so result data non lab: %v", err)
}
mapSoResult := map[string]int{}
for _, so := range SoResultData {
switch so.So_ResultEntryNonlab_TemplateName {
case "ECG":
mapSoResult["Elektromedik"] = so.So_ResultEntryID
case "Thorax PA":
mapSoResult["Radiologi"] = so.So_ResultEntryID
case "Fisik Umum", "Fisik Umum K3":
mapSoResult["Fisik"] = so.So_ResultEntryID
default:
mapSoResult[so.So_ResultEntryNonlab_TemplateName] = so.So_ResultEntryID
}
}
var GroupResultOrder []models.GroupResultOrderModel
q = `
SELECT
gr.Group_ResultID,
gr.Group_ResultName,
gr.Group_ResultResumeMcu,
gr.Group_ResultUrl,
gr.Group_ResultIsOrderHeader,
gro.Group_ResultOrderOrder,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM t_orderdetail todtl
JOIN t_test tt ON todtl.T_OrderDetailT_TestID = tt.T_TestID
AND tt.T_TestIsActive = 'Y'
JOIN group_resultdetail grd ON tt.T_TestID = grd.Group_ResultDetailT_TestID
AND grd.Group_ResultDetailIsActive = 'Y'
JOIN group_result gr ON grd.Group_ResultDetailGroup_ResultID = gr.Group_ResultID
AND gr.Group_ResultIsActive = 'Y'
JOIN group_resultorder gro ON gro.Group_ResultOrderGroup_ResultID = gr.Group_ResultID
AND Group_ResultOrderIsActive = 'Y'
WHERE todtl.T_OrderDetailT_OrderHeaderID = ?
AND todtl.T_OrderDetailIsActive = 'Y'
GROUP BY gr.Group_ResultID
ORDER BY gro.Group_ResultOrderOrder
`
if err := dbx.Handlex.Select(&GroupResultOrder, q, orderheaderID); err != nil {
return returnTabRpt, fmt.Errorf("error get group result order: %v", err)
}
for _, d := range GroupResultOrder {
var urlMap map[string]string
if err := json.Unmarshal([]byte(d.Group_ResultUrl), &urlMap); err != nil {
return returnTabRpt, fmt.Errorf("error parsing json: %v", err)
}
if d.Group_ResultIsOrderHeader == "N" {
if d.Group_ResultResumeMcu == "FISIK" {
soResultID := strconv.Itoa(mapSoResult["Fisik"])
for key, value := range urlMap {
returnTabRpt = append(returnTabRpt, models.TabViewReportMcu{
Name: key,
Link: value + soResultID + "&tm=" + d.Datetime,
})
}
}
if d.Group_ResultResumeMcu == "NONLAB" {
soResultID := strconv.Itoa(mapSoResult[d.Group_ResultName])
for key, value := range urlMap {
returnTabRpt = append(returnTabRpt, models.TabViewReportMcu{
Name: key,
Link: value + soResultID + "&tm=" + d.Datetime,
})
}
}
} else {
for _, value := range urlMap {
returnTabRpt = append(returnTabRpt, models.TabViewReportMcu{
Name: d.Group_ResultName,
Link: value + orderheaderID + "&tm=" + d.Datetime,
})
}
}
}
return returnTabRpt, nil
}
func (tdps *TabDaftarPesertaServices) GetListReportPesertaV3(orderheaderID string, staffname string) ([]models.TabViewReportMcu, error) {
var returnTab []models.TabViewReportMcu
var GroupResultOrder []models.GroupResultOrderModel
var SoResultData []models.SoResultEntryReportModel
q := `
SELECT
gr.Group_ResultID,
gr.Group_ResultName,
gr.Group_ResultResumeMcu,
gr.Group_ResultUrl,
gr.Group_ResultIsOrderHeader,
gro.Group_ResultOrderOrder,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM t_orderdetail todtl
JOIN t_test tt ON todtl.T_OrderDetailT_TestID = tt.T_TestID
AND tt.T_TestIsActive = 'Y'
JOIN group_resultdetail grd ON tt.T_TestID = grd.Group_ResultDetailT_TestID
AND grd.Group_ResultDetailIsActive = 'Y'
JOIN group_result gr ON grd.Group_ResultDetailGroup_ResultID = gr.Group_ResultID
AND gr.Group_ResultIsActive = 'Y'
JOIN group_resultorder gro ON gro.Group_ResultOrderGroup_ResultID = gr.Group_ResultID
AND Group_ResultOrderIsActive = 'Y'
WHERE todtl.T_OrderDetailT_OrderHeaderID = ?
AND todtl.T_OrderDetailIsActive = 'Y'
GROUP BY gr.Group_ResultID
ORDER BY gro.Group_ResultOrderOrder
`
if err := dbx.Handlex.Select(&GroupResultOrder, q, orderheaderID); err != nil {
return returnTab, fmt.Errorf("error get group result order: %v", err)
}
q = `
SELECT
sre.So_ResultEntryID,
sre.So_ResultEntryT_OrderHeaderID,
sre.So_ResultEntryT_OrderDetailID,
sre.So_ResultEntryNonlab_TemplateID,
sre.So_ResultEntryNonlab_TemplateName
FROM t_orderdetail tdet
JOIN t_test tt ON tdet.T_OrderDetailT_TestID = tt.T_TestID
AND tt.T_TestIsActive = 'Y'
JOIN so_resultentry sre ON sre.So_ResultEntryT_OrderDetailID = tdet.T_OrderDetailID
AND sre.So_ResultEntryIsActive = 'Y'
WHERE tdet.T_OrderDetailT_OrderHeaderID = ?
AND tdet.T_OrderDetailIsActive = 'Y'
`
if err := dbx.Handlex.Select(&SoResultData, q, orderheaderID); err != nil {
return returnTab, fmt.Errorf("error get so result data non lab: %v", err)
}
mapSoResultData := map[string]int{}
for _, so := range SoResultData {
switch so.So_ResultEntryNonlab_TemplateName {
case "ECG":
mapSoResultData["Elektromedik"] = so.So_ResultEntryID
case "Thorax PA":
mapSoResultData["Rontgen"] = so.So_ResultEntryID
case "Fisik Umum", "Fisik Umum K3":
mapSoResultData["FISIK"] = so.So_ResultEntryID
default:
mapSoResultData[so.So_ResultEntryNonlab_TemplateName] = so.So_ResultEntryID
}
}
for _, group := range GroupResultOrder {
var urlMap map[string]string
if err := json.Unmarshal([]byte(group.Group_ResultUrl), &urlMap); err != nil {
return returnTab, fmt.Errorf("error parsing json: %v", err)
}
switch group.Group_ResultResumeMcu {
case "FISIK":
soResultID := strconv.Itoa(mapSoResultData["FISIK"])
if soResultID != "0" {
for key, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: key,
Link: value + "&username=" + staffname + "&PID=" + soResultID + "&tm=" + group.Datetime,
})
}
}
case "NONLAB":
soResultID := strconv.Itoa(mapSoResultData[group.Group_ResultName])
if soResultID != "0" {
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + soResultID + "&tm=" + group.Datetime,
})
}
}
case "LAB":
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + orderheaderID + "&tm=" + group.Datetime,
})
}
default:
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + orderheaderID + "&tm=" + group.Datetime,
})
}
}
}
return returnTab, nil
}

View File

@@ -4,6 +4,7 @@ import (
"cpone/db"
"cpone/models"
dbx "cpone/package/database"
"encoding/json"
"fmt"
"math"
"strconv"
@@ -62,52 +63,6 @@ func (sp *PatientServices) GetDashboardPatientBreadcrumb(title string) (models.B
return breadcrumb, nil
}
func (sp *PatientServices) ListingData(search string, date string, patID string, corpId string, currentpage int, rowperpage int) ([]models.DashboardPatient, int, error) {
logger, _ := zap.NewProduction()
var ret []models.DashboardPatient
var totalData int
if len(date) == 0 {
date = ""
}
prmSearch := "%" + search + "%"
offset := (currentpage - 1) * rowperpage
q := `
SELECT COUNT(*)
FROM t_orderheader
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderLabNumber LIKE ?
AND T_OrderHeaderM_PatientID = ?
`
if err := dbx.Handlex.Get(&totalData, q, prmSearch, patID); err != nil {
return nil, 0, fmt.Errorf("error query get total data: %v", err)
}
q = `
SELECT
T_OrderHeaderID,
DATE_FORMAT(T_OrderHeaderDate, '%d/%m/%Y') AS T_OrderHeaderDate,
T_OrderHeaderLabNumber,
T_OrderHeaderM_PatientID,
T_OrderHeaderCorporateID,
T_OrderHeaderMgm_McuID,
T_OrderHeaderIsActive
FROM t_orderheader
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderLabNumber LIKE ?
AND T_OrderHeaderM_PatientID = ?
LIMIT ? OFFSET ?
`
if err := dbx.Handlex.Select(&ret, q, prmSearch, patID, rowperpage, offset); err != nil {
return nil, 0, fmt.Errorf("error query get data: %v", err)
}
logger.Info("response", zap.Any("data", ret))
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
return ret, totalPage, nil
}
func (sp *PatientServices) GetListtingData(email string, currentpage int, rowperpage int) ([]models.DashboardPatient, int, error) {
logger, _ := zap.NewProduction()
var ret []models.DashboardPatient
@@ -150,167 +105,114 @@ func (sp *PatientServices) GetListtingData(email string, currentpage int, rowper
return ret, totalPage, nil
}
func (sp *PatientServices) GetReportMcu(orderheaderID string) ([]models.TabViewReportMcu, error) {
var ret []models.TabViewReportMcu
var data []models.ModelMcuPesertaReport
var totalData int
q := `
SELECT COUNT(*)
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
`
if err := dbx.Handlex.Get(&totalData, q, orderheaderID); err != nil {
return ret, fmt.Errorf("error get total mcu report: %v", err)
}
q = `
SELECT
So_ResultEntryID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
ORDER BY So_ResultEntryNonlab_TemplateID
`
if err := dbx.Handlex.Select(&data, q, orderheaderID); err != nil {
return ret, err
}
// Lab
ret = append(ret, models.TabViewReportMcu{Name: "Hasil Laboratorium", Link: "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_test.rptdesign&__format=pdf&PID=" + orderheaderID + "&username=adhi&tm=1717726294764"})
// Non-lab
for _, n := range data {
var link models.TabViewReportMcu
switch n.So_ResultEntryNonlab_TemplateName {
case "ECG":
link.Name = "Elektromedis"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_elmd.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Thorax PA":
link.Name = "Radiologi"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_xray.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Audiometri":
link.Name = "Audiometri"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_audiometri.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Spirometri":
link.Name = "Spirometri"
link.Link = "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/lab/rpt_hasil_so_spirometri.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&username=adhi&tm=1717726294764"
case "Fisik Umum":
namaFisik := []string{"Hasil Fisik", "Hasil Pajanan", "Riwayat"}
linkFisik := []string{
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_fisik.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=fisik&username=adhi&tm=1717726294764",
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_pajanan.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=fisik&username=adhi&tm=1717726294764",
"https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/mcu_riwayat.rptdesign&__format=pdf&PID=" + strconv.Itoa(n.So_ResultEntryID) + "&PType=riwayat&username=adhi&tm=1717726294764",
}
for i := 0; i < 3; i++ {
ret = append(ret, models.TabViewReportMcu{Name: namaFisik[i], Link: linkFisik[i]})
}
continue
}
ret = append(ret, link)
}
ret = append(ret, models.TabViewReportMcu{Name: "Resume Individu", Link: "https://devcpone.aplikasi.web.id/birt/run?__report=report/one/mcu/rpt_mcu_resume.rptdesign&__format=pdf&PID=" + orderheaderID + "&username=adhi&tm=1717726294764"})
return ret, nil
}
func (tdps *PatientServices) GetListReportPeserta(orderheaderID string, host string) ([]models.TabViewReportMcu, error) {
var ret []models.TabViewReportMcu
var data []models.ModelMcuPesertaReport
func (sp *PatientServices) GetListReportPesertaV3(orderheaderID string, staffname string) ([]models.TabViewReportMcu, error) {
var returnTab []models.TabViewReportMcu
var GroupResultOrder []models.GroupResultOrderModel
var SoResultData []models.SoResultEntryReportModel
q := `
SELECT
So_ResultEntryID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName,
gr.Group_ResultID,
gr.Group_ResultName,
gr.Group_ResultResumeMcu,
gr.Group_ResultUrl,
gr.Group_ResultIsOrderHeader,
gro.Group_ResultOrderOrder,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ?
AND So_ResultEntryIsActive = 'Y'
ORDER BY So_ResultEntryNonlab_TemplateID
FROM t_orderdetail todtl
JOIN t_test tt ON todtl.T_OrderDetailT_TestID = tt.T_TestID
AND tt.T_TestIsActive = 'Y'
JOIN group_resultdetail grd ON tt.T_TestID = grd.Group_ResultDetailT_TestID
AND grd.Group_ResultDetailIsActive = 'Y'
JOIN group_result gr ON grd.Group_ResultDetailGroup_ResultID = gr.Group_ResultID
AND gr.Group_ResultIsActive = 'Y'
JOIN group_resultorder gro ON gro.Group_ResultOrderGroup_ResultID = gr.Group_ResultID
AND Group_ResultOrderIsActive = 'Y'
WHERE todtl.T_OrderDetailT_OrderHeaderID = ?
AND todtl.T_OrderDetailIsActive = 'Y'
GROUP BY gr.Group_ResultID
ORDER BY gro.Group_ResultOrderOrder
`
if err := dbx.Handlex.Select(&data, q, orderheaderID); err != nil {
return ret, fmt.Errorf("error get mcu report : %v", err)
if err := dbx.Handlex.Select(&GroupResultOrder, q, orderheaderID); err != nil {
return returnTab, fmt.Errorf("error get group result order: %v", err)
}
var tabdata []models.OrderReport
q = `
SELECT
M_OrderReportID,
M_OrderReportName,
M_OrderReportOrdering,
M_OrderReportUrl,
M_OrderReportIsOrderHeader,
M_OrderReportIsFisikUmum,
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
FROM m_order_report
WHERE
M_OrderReportIsActive = 'Y'
AND (
M_OrderReportName LIKE "%Hasil Laboratorium%"
OR
M_OrderReportName LIKE "%Resume Individu%"
sre.So_ResultEntryID,
sre.So_ResultEntryT_OrderHeaderID,
sre.So_ResultEntryT_OrderDetailID,
sre.So_ResultEntryNonlab_TemplateID,
sre.So_ResultEntryNonlab_TemplateName
FROM t_orderdetail tdet
JOIN t_test tt ON tdet.T_OrderDetailT_TestID = tt.T_TestID
AND tt.T_TestIsActive = 'Y'
JOIN so_resultentry sre ON sre.So_ResultEntryT_OrderDetailID = tdet.T_OrderDetailID
AND sre.So_ResultEntryIsActive = 'Y'
WHERE tdet.T_OrderDetailT_OrderHeaderID = ?
AND tdet.T_OrderDetailIsActive = 'Y'
`
if err := dbx.Handlex.Select(&SoResultData, q, orderheaderID); err != nil {
return returnTab, fmt.Errorf("error get so result data non lab: %v", err)
}
temParam := map[string]int{}
for _, d := range data {
switch d.So_ResultEntryNonlab_TemplateName {
mapSoResultData := map[string]int{}
for _, so := range SoResultData {
switch so.So_ResultEntryNonlab_TemplateName {
case "ECG":
q = q + `OR M_OrderReportName LIKE "%Elektromedis%"`
temParam["Elektromedis"] = d.So_ResultEntryID
mapSoResultData["Elektromedik"] = so.So_ResultEntryID
case "Thorax PA":
q = q + `OR M_OrderReportName LIKE "%Radiologi%"`
temParam["Radiologi"] = d.So_ResultEntryID
case "Audiometri":
q = q + `OR M_OrderReportName LIKE "%Audiometri%"`
temParam["Audiometri"] = d.So_ResultEntryID
case "Spirometri":
q = q + `OR M_OrderReportName LIKE "%Spirometri%"`
temParam["Spirometri"] = d.So_ResultEntryID
case "Fisik Umum":
q = q + `OR M_OrderReportIsFisikUmum = 'Y'`
temParam["Fisik Umum"] = d.So_ResultEntryID
mapSoResultData["Rontgen"] = so.So_ResultEntryID
case "Fisik Umum", "Fisik Umum K3":
mapSoResultData["FISIK"] = so.So_ResultEntryID
default:
q = q + `OR M_OrderReportName LIKE "%` + d.So_ResultEntryNonlab_TemplateName + `%"`
temParam[d.So_ResultEntryNonlab_TemplateName] = d.So_ResultEntryID
}
}
q = q + `) ORDER BY M_OrderReportOrdering ASC`
if err := dbx.Handlex.Select(&tabdata, q); err != nil {
return ret, fmt.Errorf("error get link mcu report: %v", err)
}
if host == "localhost:5000" {
host = "https://devcpone.aplikasi.web.id"
}
for _, t := range tabdata {
if t.M_OrderReportIsFisikUmum == "Y" {
id := strconv.Itoa(temParam["Fisik Umum"])
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + id + "&tm=" + t.Datetime,
})
} else if t.M_OrderReportIsOrderHeader != "Y" {
id := strconv.Itoa(temParam[t.M_OrderReportName])
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + id + "&tm=" + t.Datetime,
})
} else {
ret = append(ret, models.TabViewReportMcu{
Name: t.M_OrderReportName,
Link: host + t.M_OrderReportUrl + orderheaderID + "&tm=" + t.Datetime,
})
mapSoResultData[so.So_ResultEntryNonlab_TemplateName] = so.So_ResultEntryID
}
}
return ret, nil
for _, group := range GroupResultOrder {
var urlMap map[string]string
if err := json.Unmarshal([]byte(group.Group_ResultUrl), &urlMap); err != nil {
return returnTab, fmt.Errorf("error parsing json: %v", err)
}
switch group.Group_ResultResumeMcu {
case "FISIK":
soResultID := strconv.Itoa(mapSoResultData["FISIK"])
if soResultID != "0" {
for key, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: key,
Link: value + "&username=" + staffname + "&PID=" + soResultID + "&tm=" + group.Datetime,
})
}
}
case "NONLAB":
soResultID := strconv.Itoa(mapSoResultData[group.Group_ResultName])
if soResultID != "0" {
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + soResultID + "&tm=" + group.Datetime,
})
}
}
case "LAB":
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + orderheaderID + "&tm=" + group.Datetime,
})
}
default:
for _, value := range urlMap {
returnTab = append(returnTab, models.TabViewReportMcu{
Name: group.Group_ResultName,
Link: value + "&username=" + staffname + "&PID=" + orderheaderID + "&tm=" + group.Datetime,
})
}
}
}
return returnTab, nil
}

View File

@@ -1,11 +1,9 @@
package public_services
import (
"bytes"
"cpone/db"
"cpone/models"
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
@@ -24,58 +22,15 @@ func NewServicesLogin(uStore db.AppStore) *ServicesLogin {
}
}
func (ls *ServicesLogin) Login(username string, password string) (models.ResponseApi, error) {
logger, _ := zap.NewProduction()
url := "https://devcpone.aplikasi.web.id/one-api/v1/system/auth/login"
var resp models.ResponseApi
// Create a JSON payload with the username and password
payload := []byte(fmt.Sprintf(`{"username": "%s", "password": "%s"}`, username, password))
logger.Info("payload", zap.Any("data", payload))
// Make the POST request
request, err := http.Post(url, "application/json", bytes.NewBuffer(payload))
if err != nil {
logger.Info("requser", zap.Any("err", err))
return resp, err
}
if request.StatusCode != http.StatusOK {
logger.Info("status", zap.Any("err", request.StatusCode))
return resp, fmt.Errorf("server returned non-OK status: %d", request.StatusCode)
}
defer request.Body.Close()
// Read the response body
body, err := io.ReadAll(request.Body)
if err != nil {
logger.Info("body", zap.Any("data", body))
return resp, err
}
if err := json.Unmarshal(body, &resp); err != nil {
logger.Info("json", zap.Any("data", err))
return resp, err
}
// Check if status is "ERR"
if resp.Status == "ERR" {
logger.Info("status", zap.Any("data", resp.Message))
return resp, fmt.Errorf("login failed: %s", resp.Message)
}
return resp, nil
}
func (ls *ServicesLogin) MultiSignIn(username string, password string, host string) (models.Response, error) {
logger, _ := zap.NewProduction()
var ret models.Response
if host == "localhost:5000" {
host = "https://devcpone.aplikasi.web.id"
}
// if host == "localhost:5000" {
// host = "https://cpone.aplikasi.web.id"
// }
uri := host + "/one-api/v1/system/auth/multi_login"
uri := "https://cpone.aplikasi.web.id/one-api/v1/system/auth/multi_login"
params := url.Values{}
params.Add("username", username)