Update project from local
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesClientDashboard struct {
|
||||
CLientDashboardStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesClientDashboard(uStore db.AppStore) *ServicesClientDashboard {
|
||||
|
||||
return &ServicesClientDashboard{
|
||||
|
||||
CLientDashboardStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesClientDashboard struct {
|
||||
CLientDashboardStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesClientDashboard(uStore db.AppStore) *ServicesClientDashboard {
|
||||
|
||||
return &ServicesClientDashboard{
|
||||
|
||||
CLientDashboardStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMCUPreregister struct {
|
||||
MCUPreregisterStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMCUPreregister(uStore db.AppStore) *ServicesMCUPreregister {
|
||||
|
||||
return &ServicesMCUPreregister{
|
||||
|
||||
MCUPreregisterStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMCUPreregister struct {
|
||||
MCUPreregisterStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMCUPreregister(uStore db.AppStore) *ServicesMCUPreregister {
|
||||
|
||||
return &ServicesMCUPreregister{
|
||||
|
||||
MCUPreregisterStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMCUSetup struct {
|
||||
MCUSetupStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMCUSetup(uStore db.AppStore) *ServicesMCUSetup {
|
||||
|
||||
return &ServicesMCUSetup{
|
||||
|
||||
MCUSetupStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMCUSetup struct {
|
||||
MCUSetupStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMCUSetup(uStore db.AppStore) *ServicesMCUSetup {
|
||||
|
||||
return &ServicesMCUSetup{
|
||||
|
||||
MCUSetupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdBahan struct {
|
||||
MdBahanStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdBahan(uStore db.AppStore) *ServicesMdBahan {
|
||||
|
||||
return &ServicesMdBahan{
|
||||
|
||||
MdBahanStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdBahan struct {
|
||||
MdBahanStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdBahan(uStore db.AppStore) *ServicesMdBahan {
|
||||
|
||||
return &ServicesMdBahan{
|
||||
|
||||
MdBahanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdCorp struct {
|
||||
MdCorpStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdCorp(uStore db.AppStore) *ServicesMdCorp {
|
||||
|
||||
return &ServicesMdCorp{
|
||||
|
||||
MdCorpStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdCorp struct {
|
||||
MdCorpStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdCorp(uStore db.AppStore) *ServicesMdCorp {
|
||||
|
||||
return &ServicesMdCorp{
|
||||
|
||||
MdCorpStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdDokter struct {
|
||||
MdDokterStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdDokter(uStore db.AppStore) *ServicesMdDokter {
|
||||
|
||||
return &ServicesMdDokter{
|
||||
|
||||
MdDokterStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdDokter struct {
|
||||
MdDokterStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdDokter(uStore db.AppStore) *ServicesMdDokter {
|
||||
|
||||
return &ServicesMdDokter{
|
||||
|
||||
MdDokterStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaPanel struct {
|
||||
MdHargaPanelStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaPanel(uStore db.AppStore) *ServicesMdHargaPanel {
|
||||
|
||||
return &ServicesMdHargaPanel{
|
||||
|
||||
MdHargaPanelStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaPanel struct {
|
||||
MdHargaPanelStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaPanel(uStore db.AppStore) *ServicesMdHargaPanel {
|
||||
|
||||
return &ServicesMdHargaPanel{
|
||||
|
||||
MdHargaPanelStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaProfile struct {
|
||||
MdHargaProfileStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaProfile(uStore db.AppStore) *ServicesMdHargaProfile {
|
||||
|
||||
return &ServicesMdHargaProfile{
|
||||
|
||||
MdHargaProfileStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaProfile struct {
|
||||
MdHargaProfileStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaProfile(uStore db.AppStore) *ServicesMdHargaProfile {
|
||||
|
||||
return &ServicesMdHargaProfile{
|
||||
|
||||
MdHargaProfileStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaSingle struct {
|
||||
MdHargaSingleStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaSingle(uStore db.AppStore) *ServicesMdHargaSingle {
|
||||
|
||||
return &ServicesMdHargaSingle{
|
||||
|
||||
MdHargaSingleStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdHargaSingle struct {
|
||||
MdHargaSingleStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdHargaSingle(uStore db.AppStore) *ServicesMdHargaSingle {
|
||||
|
||||
return &ServicesMdHargaSingle{
|
||||
|
||||
MdHargaSingleStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPaket struct {
|
||||
MdPaketStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPaket(uStore db.AppStore) *ServicesMdPaket {
|
||||
|
||||
return &ServicesMdPaket{
|
||||
|
||||
MdPaketStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPaket struct {
|
||||
MdPaketStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPaket(uStore db.AppStore) *ServicesMdPaket {
|
||||
|
||||
return &ServicesMdPaket{
|
||||
|
||||
MdPaketStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPanel struct {
|
||||
MdPanelStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPanel(uStore db.AppStore) *ServicesMdPanel {
|
||||
|
||||
return &ServicesMdPanel{
|
||||
|
||||
MdPanelStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPanel struct {
|
||||
MdPanelStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPanel(uStore db.AppStore) *ServicesMdPanel {
|
||||
|
||||
return &ServicesMdPanel{
|
||||
|
||||
MdPanelStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPasien struct {
|
||||
MdPasienStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPasien(uStore db.AppStore) *ServicesMdPasien {
|
||||
|
||||
return &ServicesMdPasien{
|
||||
|
||||
MdPasienStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdPasien struct {
|
||||
MdPasienStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdPasien(uStore db.AppStore) *ServicesMdPasien {
|
||||
|
||||
return &ServicesMdPasien{
|
||||
|
||||
MdPasienStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdProfile struct {
|
||||
MdProfileStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdProfile(uStore db.AppStore) *ServicesMdProfile {
|
||||
|
||||
return &ServicesMdProfile{
|
||||
|
||||
MdProfileStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdProfile struct {
|
||||
MdProfileStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdProfile(uStore db.AppStore) *ServicesMdProfile {
|
||||
|
||||
return &ServicesMdProfile{
|
||||
|
||||
MdProfileStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdResultNonLab struct {
|
||||
MdResultNonLabStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdResultNonLab(uStore db.AppStore) *ServicesMdResultNonLab {
|
||||
|
||||
return &ServicesMdResultNonLab{
|
||||
|
||||
MdResultNonLabStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdResultNonLab struct {
|
||||
MdResultNonLabStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdResultNonLab(uStore db.AppStore) *ServicesMdResultNonLab {
|
||||
|
||||
return &ServicesMdResultNonLab{
|
||||
|
||||
MdResultNonLabStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdSampleStation struct {
|
||||
MdSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdSampleStation(uStore db.AppStore) *ServicesMdSampleStation {
|
||||
|
||||
return &ServicesMdSampleStation{
|
||||
|
||||
MdSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdSampleStation struct {
|
||||
MdSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdSampleStation(uStore db.AppStore) *ServicesMdSampleStation {
|
||||
|
||||
return &ServicesMdSampleStation{
|
||||
|
||||
MdSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdSampleType struct {
|
||||
MdSampleTypeStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdSampleType(uStore db.AppStore) *ServicesMdSampleType {
|
||||
|
||||
return &ServicesMdSampleType{
|
||||
|
||||
MdSampleTypeStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdSampleType struct {
|
||||
MdSampleTypeStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdSampleType(uStore db.AppStore) *ServicesMdSampleType {
|
||||
|
||||
return &ServicesMdSampleType{
|
||||
|
||||
MdSampleTypeStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdTemplateFisik struct {
|
||||
MdTemplateFisikStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdTemplateFisik(uStore db.AppStore) *ServicesMdTemplateFisik {
|
||||
|
||||
return &ServicesMdTemplateFisik{
|
||||
|
||||
MdTemplateFisikStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdTemplateFisik struct {
|
||||
MdTemplateFisikStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdTemplateFisik(uStore db.AppStore) *ServicesMdTemplateFisik {
|
||||
|
||||
return &ServicesMdTemplateFisik{
|
||||
|
||||
MdTemplateFisikStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdTest struct {
|
||||
MdTestStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdTest(uStore db.AppStore) *ServicesMdTest {
|
||||
|
||||
return &ServicesMdTest{
|
||||
|
||||
MdTestStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdTest struct {
|
||||
MdTestStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdTest(uStore db.AppStore) *ServicesMdTest {
|
||||
|
||||
return &ServicesMdTest{
|
||||
|
||||
MdTestStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdUser struct {
|
||||
MdUserStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdUser(uStore db.AppStore) *ServicesMdUser {
|
||||
|
||||
return &ServicesMdUser{
|
||||
|
||||
MdUserStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdUser struct {
|
||||
MdUserStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdUser(uStore db.AppStore) *ServicesMdUser {
|
||||
|
||||
return &ServicesMdUser{
|
||||
|
||||
MdUserStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdUserGroup struct {
|
||||
MdUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdUserGroup(uStore db.AppStore) *ServicesMdUserGroup {
|
||||
|
||||
return &ServicesMdUserGroup{
|
||||
|
||||
MdUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesMdUserGroup struct {
|
||||
MdUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesMdUserGroup(uStore db.AppStore) *ServicesMdUserGroup {
|
||||
|
||||
return &ServicesMdUserGroup{
|
||||
|
||||
MdUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesTransaksiSampleStation struct {
|
||||
TransaksiSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesTransaksiSampleStation(uStore db.AppStore) *ServicesTransaksiSampleStation {
|
||||
|
||||
return &ServicesTransaksiSampleStation{
|
||||
|
||||
TransaksiSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
package client_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesTransaksiSampleStation struct {
|
||||
TransaksiSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesTransaksiSampleStation(uStore db.AppStore) *ServicesTransaksiSampleStation {
|
||||
|
||||
return &ServicesTransaksiSampleStation{
|
||||
|
||||
TransaksiSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package corporate_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesCompany struct {
|
||||
CompanyStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesCompany(uStore db.AppStore) *ServicesCompany {
|
||||
|
||||
return &ServicesCompany{
|
||||
|
||||
CompanyStore: uStore,
|
||||
}
|
||||
}
|
||||
package corporate_services
|
||||
|
||||
import "cpone/db"
|
||||
|
||||
type ServicesCompany struct {
|
||||
CompanyStore db.AppStore
|
||||
}
|
||||
|
||||
func NewServicesCompany(uStore db.AppStore) *ServicesCompany {
|
||||
|
||||
return &ServicesCompany{
|
||||
|
||||
CompanyStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,143 +1,143 @@
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type DashboardPicServices struct {
|
||||
DashboardPicStore db.AppStore
|
||||
}
|
||||
|
||||
func NewDashboardPicServices(uStore db.AppStore) *DashboardPicServices {
|
||||
return &DashboardPicServices{
|
||||
DashboardPicStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) DummyDataTest() ([]models.DashboardPic, error) {
|
||||
employees := []models.DashboardPic{
|
||||
{
|
||||
Mgm_McuID: 1,
|
||||
Mgm_McuLabel: "Employee 1",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "Yes",
|
||||
Mgm_McuBisaTambahPemeriksaan: "No",
|
||||
Mgm_McuCorporateID: 101,
|
||||
Mgm_McuNumber: "EMP001",
|
||||
Mgm_McuNumberNational: "NAT001",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet.",
|
||||
Mgm_McuStartDate: "2024-01-01",
|
||||
Mgm_McuEndDate: "2024-12-31",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
{
|
||||
Mgm_McuID: 2,
|
||||
Mgm_McuLabel: "Employee 2",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "No",
|
||||
Mgm_McuBisaTambahPemeriksaan: "Yes",
|
||||
Mgm_McuCorporateID: 102,
|
||||
Mgm_McuNumber: "EMP002",
|
||||
Mgm_McuNumberNational: "NAT002",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet consectetur.",
|
||||
Mgm_McuStartDate: "2024-02-15",
|
||||
Mgm_McuEndDate: "2024-11-30",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
}
|
||||
|
||||
return employees, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) GetCorporateName(userID string) (string, error) {
|
||||
var corpName string
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
CorporateName
|
||||
FROM mgm_mcuuser
|
||||
JOIN mgm_mcu ON Mgm_McuID = Mgm_McuUserMgm_McuID
|
||||
JOIN corporate ON CorporateID = Mgm_McuCorporateID
|
||||
WHERE Mgm_McuUserID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&corpName, q, userID); err != nil {
|
||||
return "PT. ABC", err
|
||||
}
|
||||
|
||||
if corpName == "" {
|
||||
corpName = "Perusahaan A"
|
||||
}
|
||||
|
||||
return corpName, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) ListingDashboardPic(email string, search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.DashboardPic, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPic
|
||||
var totalData int
|
||||
|
||||
if len(startdate) == 0 {
|
||||
startdate = "1900-01-01"
|
||||
}
|
||||
if len(enddate) == 0 {
|
||||
enddate = "9999-12-12"
|
||||
}
|
||||
|
||||
prmLabel := "%" + search + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
|
||||
logger.Info("Params", zap.Any("email", email))
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
JOIN mgm_mcuuser ON Mgm_McuUserMgm_McuID = Mgm_McuID
|
||||
WHERE Mgm_McuUserEmail = ?
|
||||
AND Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
ORDER BY Mgm_McuID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, email, prmLabel, startdate, enddate, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get data: %v", err)
|
||||
}
|
||||
totalData = len(ret)
|
||||
logger.Info("Response", zap.Any("data", ret), zap.Any("total data", totalData))
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type DashboardPicServices struct {
|
||||
DashboardPicStore db.AppStore
|
||||
}
|
||||
|
||||
func NewDashboardPicServices(uStore db.AppStore) *DashboardPicServices {
|
||||
return &DashboardPicServices{
|
||||
DashboardPicStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) DummyDataTest() ([]models.DashboardPic, error) {
|
||||
employees := []models.DashboardPic{
|
||||
{
|
||||
Mgm_McuID: 1,
|
||||
Mgm_McuLabel: "Employee 1",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "Yes",
|
||||
Mgm_McuBisaTambahPemeriksaan: "No",
|
||||
Mgm_McuCorporateID: 101,
|
||||
Mgm_McuNumber: "EMP001",
|
||||
Mgm_McuNumberNational: "NAT001",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet.",
|
||||
Mgm_McuStartDate: "2024-01-01",
|
||||
Mgm_McuEndDate: "2024-12-31",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
{
|
||||
Mgm_McuID: 2,
|
||||
Mgm_McuLabel: "Employee 2",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "No",
|
||||
Mgm_McuBisaTambahPemeriksaan: "Yes",
|
||||
Mgm_McuCorporateID: 102,
|
||||
Mgm_McuNumber: "EMP002",
|
||||
Mgm_McuNumberNational: "NAT002",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet consectetur.",
|
||||
Mgm_McuStartDate: "2024-02-15",
|
||||
Mgm_McuEndDate: "2024-11-30",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
}
|
||||
|
||||
return employees, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) GetCorporateName(userID string) (string, error) {
|
||||
var corpName string
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
CorporateName
|
||||
FROM mgm_mcuuser
|
||||
JOIN mgm_mcu ON Mgm_McuID = Mgm_McuUserMgm_McuID
|
||||
JOIN corporate ON CorporateID = Mgm_McuCorporateID
|
||||
WHERE Mgm_McuUserID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&corpName, q, userID); err != nil {
|
||||
return "PT. ABC", err
|
||||
}
|
||||
|
||||
if corpName == "" {
|
||||
corpName = "Perusahaan A"
|
||||
}
|
||||
|
||||
return corpName, nil
|
||||
}
|
||||
|
||||
func (ea *DashboardPicServices) ListingDashboardPic(email string, search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.DashboardPic, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPic
|
||||
var totalData int
|
||||
|
||||
if len(startdate) == 0 {
|
||||
startdate = "1900-01-01"
|
||||
}
|
||||
if len(enddate) == 0 {
|
||||
enddate = "9999-12-12"
|
||||
}
|
||||
|
||||
prmLabel := "%" + search + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
|
||||
logger.Info("Params", zap.Any("email", email))
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
JOIN mgm_mcuuser ON Mgm_McuUserMgm_McuID = Mgm_McuID
|
||||
WHERE Mgm_McuUserEmail = ?
|
||||
AND Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
ORDER BY Mgm_McuID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, email, prmLabel, startdate, enddate, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get data: %v", err)
|
||||
}
|
||||
totalData = len(ret)
|
||||
logger.Info("Response", zap.Any("data", ret), zap.Any("total data", totalData))
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
|
||||
@@ -1,111 +1,111 @@
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type McuDetailServices struct {
|
||||
McuDetailStore db.AppStore
|
||||
}
|
||||
|
||||
func NewMcuDetailServices(uStore db.AppStore) *McuDetailServices {
|
||||
return &McuDetailServices{
|
||||
McuDetailStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (mcud *McuDetailServices) GetBreadcrumb(id string) (models.BreadCrumbV1, error) {
|
||||
var mcu models.DashboardPic
|
||||
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: "",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, id); err != nil {
|
||||
return breadcrumb, err
|
||||
}
|
||||
|
||||
breadcrumb.Title = mcu.Mgm_McuLabel
|
||||
breadcrumb.Item[2].Item = mcu.Mgm_McuLabel
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (mcud *McuDetailServices) GetTabNameList(id string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
GROUP BY Mcu_ImageGrafikGroupMenu, Mcu_ImageGrafikGroupResult
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, id); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab name: %v", err)
|
||||
}
|
||||
|
||||
for i, d := range ret {
|
||||
switch d.Mcu_ImageGrafikGroupMenu {
|
||||
case "SUMMARY":
|
||||
if d.Mcu_ImageGrafikGroupResult == "LAB" {
|
||||
ret[i].TabID = "tabkelainanlab"
|
||||
ret[i].TabName = "Kelainan Lab"
|
||||
} else if d.Mcu_ImageGrafikGroupResult == "NONLAB" {
|
||||
ret[i].TabID = "tabkelainannonlab"
|
||||
ret[i].TabName = "Kelainan Non Lab"
|
||||
} else {
|
||||
ret[i].TabID = "tabkelainanfisik"
|
||||
ret[i].TabName = "Kelainan Fisik"
|
||||
}
|
||||
case "GLOBAL":
|
||||
ret[i].TabID = "tabkelainanglobal"
|
||||
ret[i].TabName = "Kelainan Global"
|
||||
case "PESERTA":
|
||||
ret[i].TabID = "tabkepesertaan"
|
||||
ret[i].TabName = "Peserta"
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type McuDetailServices struct {
|
||||
McuDetailStore db.AppStore
|
||||
}
|
||||
|
||||
func NewMcuDetailServices(uStore db.AppStore) *McuDetailServices {
|
||||
return &McuDetailServices{
|
||||
McuDetailStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (mcud *McuDetailServices) GetBreadcrumb(id string) (models.BreadCrumbV1, error) {
|
||||
var mcu models.DashboardPic
|
||||
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: "",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "/corp/dashboard_pic",
|
||||
},
|
||||
{
|
||||
Item: "",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, id); err != nil {
|
||||
return breadcrumb, err
|
||||
}
|
||||
|
||||
breadcrumb.Title = mcu.Mgm_McuLabel
|
||||
breadcrumb.Item[2].Item = mcu.Mgm_McuLabel
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (mcud *McuDetailServices) GetTabNameList(id string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
GROUP BY Mcu_ImageGrafikGroupMenu, Mcu_ImageGrafikGroupResult
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, id); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab name: %v", err)
|
||||
}
|
||||
|
||||
for i, d := range ret {
|
||||
switch d.Mcu_ImageGrafikGroupMenu {
|
||||
case "SUMMARY":
|
||||
if d.Mcu_ImageGrafikGroupResult == "LAB" {
|
||||
ret[i].TabID = "tabkelainanlab"
|
||||
ret[i].TabName = "Kelainan Lab"
|
||||
} else if d.Mcu_ImageGrafikGroupResult == "NONLAB" {
|
||||
ret[i].TabID = "tabkelainannonlab"
|
||||
ret[i].TabName = "Kelainan Non Lab"
|
||||
} else {
|
||||
ret[i].TabID = "tabkelainanfisik"
|
||||
ret[i].TabName = "Kelainan Fisik"
|
||||
}
|
||||
case "GLOBAL":
|
||||
ret[i].TabID = "tabkelainanglobal"
|
||||
ret[i].TabName = "Kelainan Global"
|
||||
case "PESERTA":
|
||||
ret[i].TabID = "tabkepesertaan"
|
||||
ret[i].TabName = "Peserta"
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,349 +1,349 @@
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"cpone/utils"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKelainanGlobalServices struct {
|
||||
TabKelainanGlobalServicesStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKelainanGlobalServices(store db.AppStore) *TabKelainanGlobalServices {
|
||||
return &TabKelainanGlobalServices{
|
||||
TabKelainanGlobalServicesStore: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetBarChartConf(title string, data models.BarDataset) (models.Barchart, error) {
|
||||
isEmpty := ""
|
||||
if len(data.Source) <= 1 {
|
||||
isEmpty = "Data tidak ditemukan"
|
||||
}
|
||||
|
||||
option := models.Barchart{}
|
||||
option.Title = struct {
|
||||
Text string "json:\"text\""
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
}
|
||||
option.Dataset = data
|
||||
option.Grid.ContainLabel = true
|
||||
option.XAxis.Name = "person"
|
||||
option.YAxis.Type = "category"
|
||||
option.VisualMap.Orient = "horizontal"
|
||||
option.VisualMap.Left = "center"
|
||||
option.VisualMap.Min = 0
|
||||
option.VisualMap.Max = 10
|
||||
option.VisualMap.Show = false
|
||||
option.VisualMap.Dimension = 0
|
||||
option.VisualMap.InRange.Color = []string{"#035bff", "#42aaf5", "#00eaf2"}
|
||||
option.Series = []struct {
|
||||
Label struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
} "json:\"label\""
|
||||
Type string "json:\"type\""
|
||||
Encode struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
} "json:\"encode\""
|
||||
}{
|
||||
{
|
||||
Label: struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
}{
|
||||
Position: "right",
|
||||
Show: true,
|
||||
Formatter: "{@[3]} %",
|
||||
},
|
||||
Type: "bar",
|
||||
Encode: struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
}{
|
||||
X: "amount",
|
||||
Y: "product",
|
||||
},
|
||||
},
|
||||
}
|
||||
option.Tooltip = struct {
|
||||
Trigger string "json:\"trigger\""
|
||||
AxisPointer struct {
|
||||
Type string "json:\"type\""
|
||||
} "json:\"axisPointer\""
|
||||
}{
|
||||
Trigger: "axis",
|
||||
AxisPointer: struct {
|
||||
Type string "json:\"type\""
|
||||
}{
|
||||
Type: "shadow",
|
||||
},
|
||||
}
|
||||
option.Graphic = struct {
|
||||
Type string "json:\"type\""
|
||||
Left string "json:\"left\""
|
||||
Top string "json:\"top\""
|
||||
Style struct {
|
||||
Text string "json:\"text\""
|
||||
FontSize string "json:\"fontSize\""
|
||||
FontWeight string "json:\"fontWeight\""
|
||||
} "json:\"style\""
|
||||
}{
|
||||
Type: "text",
|
||||
Left: "center",
|
||||
Top: "middle",
|
||||
Style: struct {
|
||||
Text string "json:\"text\""
|
||||
FontSize string "json:\"fontSize\""
|
||||
FontWeight string "json:\"fontWeight\""
|
||||
}{
|
||||
Text: isEmpty,
|
||||
FontSize: "15",
|
||||
FontWeight: "bold",
|
||||
},
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanGlobalMCU(mcuID string) (models.Barchart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalMCUModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
IFNULL(Nat_TestName ,Mcu_KelainanGroupName) AS Test,
|
||||
COUNT(Mgm_HeaderT_OrderHeaderID) AS total
|
||||
FROM mgm_header
|
||||
JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_DetailIsActive = 'Y'
|
||||
JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
LEFT JOIN nat_test ON Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ?
|
||||
AND Mgm_HeaderIsNormal = 'N'
|
||||
GROUP BY Mcu_KelainanGroupID ORDER BY COUNT(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
`
|
||||
// Mgm_DetailMcu_KelainanID ->> versi php
|
||||
// Mcu_KelainanGroupID ->> versi excel
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global mcu %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Kelainan MCU"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
max := 1
|
||||
for _, d := range data {
|
||||
if d.Total >= max {
|
||||
max = d.Total
|
||||
}
|
||||
}
|
||||
|
||||
for i, d := range data {
|
||||
percentage := float64(d.Total) / float64(max) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
i, d.Total, d.Test, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error insert data to barchart %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanFisik(mcuID string) (models.Barchart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalFisikModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_KelainanName,
|
||||
COUNT(Mgm_HeaderT_OrderHeaderID) AS total
|
||||
FROM mgm_header
|
||||
JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID
|
||||
AND Mgm_DetailIsActive = 'Y'
|
||||
JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ?
|
||||
AND Mgm_HeaderType = 'F'
|
||||
AND Mgm_HeaderIsNormal = 'N'
|
||||
GROUP BY Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global fisik %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Kelainan Fisik"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
max := 1
|
||||
for _, d := range data {
|
||||
if d.Total >= max {
|
||||
max = d.Total
|
||||
}
|
||||
}
|
||||
|
||||
for _, d := range data {
|
||||
percentage := float64(d.Total) / float64(max) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
d.Total, d.Total, d.Mcu_KelainanName, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, nil
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanGlobalV2(mcuID string) (models.Barchart, error) {
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalModel
|
||||
|
||||
q := `
|
||||
SELECT * FROM (
|
||||
SELECT Mcu_KelainanID,
|
||||
Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_lab
|
||||
JOIN t_orderheader ON T_KelainanLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarylab ON T_KelainanLabMcu_SummaryLabID = Mcu_SummaryLabID
|
||||
join mcu_kelainan on Mcu_summaryLabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryLabNat_TestID = Nat_TestID AND T_KelainanLabNat_TestID = Mcu_SummaryLabNat_TestID
|
||||
where T_KelainanLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
UNION
|
||||
SELECT Mcu_KelainanID, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_nonlab
|
||||
JOIN t_orderheader ON T_KelainanNonLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarynonlab ON T_KelainanNonLabMcu_SummaryNonlabID = Mcu_SummaryNonlabID
|
||||
join mcu_kelainan on Mcu_SummaryNonlabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryNonlabNat_TestID = Nat_TestID AND
|
||||
T_KelainanNonLabNat_TestID = Mcu_SummaryNonlabNat_TestID
|
||||
where T_KelainanNonLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
UNION
|
||||
SELECT Mcu_KelainanID, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_fisik
|
||||
JOIN t_orderheader ON T_KelainanFiskT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summaryfisik ON T_KelainanFiskMcu_FisikSummaryID = Mcu_SummaryFisikID AND
|
||||
Mcu_SummaryFisikID NOT IN (63,67,68,69,70,71,72,73)
|
||||
join mcu_kelainan on Mcu_SummaryFisikMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
where T_KelainanFiskIsActive = 'Y' and T_OrderHeaderMgm_McuID = ? AND
|
||||
Mcu_KelainanClasification NOT IN ('who','kemenkes','JNC-VIII','ESC/ESH')
|
||||
group by Mcu_KelainanID
|
||||
) a
|
||||
|
||||
ORDER BY total DESC
|
||||
LIMIT 10
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID, mcuID, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global %v", err)
|
||||
}
|
||||
|
||||
var jumlahPeserta models.TotalPesertaModel
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
COUNT(distinct(T_OrderHeaderID)) as peserta,
|
||||
COUNT( distinct(Mcu_PreregisterPatientsM_PatientID)) as total
|
||||
FROM mcu_preregister_patients
|
||||
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID AND
|
||||
T_OrderHeaderIsActive = 'Y'
|
||||
WHERE
|
||||
Mcu_PreregisterPatientsMgm_McuID = ? AND
|
||||
Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&jumlahPeserta, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get jumlah peserta %v", err)
|
||||
}
|
||||
|
||||
title := "Kelainan Global (10 Terbesar)"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
for i, d := range data {
|
||||
percentage := float64(d.Total) / float64(jumlahPeserta.Peserta) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
newText := utils.SplitStrings(d.Test, 2)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
i, d.Total, newText, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error insert data to barchart %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetChartRenderGlobal(mcuID string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mcu_ImageGrafikGroupMenu = "GLOBAL"
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, mcuID); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab peserta: %v", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"cpone/utils"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKelainanGlobalServices struct {
|
||||
TabKelainanGlobalServicesStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKelainanGlobalServices(store db.AppStore) *TabKelainanGlobalServices {
|
||||
return &TabKelainanGlobalServices{
|
||||
TabKelainanGlobalServicesStore: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetBarChartConf(title string, data models.BarDataset) (models.Barchart, error) {
|
||||
isEmpty := ""
|
||||
if len(data.Source) <= 1 {
|
||||
isEmpty = "Data tidak ditemukan"
|
||||
}
|
||||
|
||||
option := models.Barchart{}
|
||||
option.Title = struct {
|
||||
Text string "json:\"text\""
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
}
|
||||
option.Dataset = data
|
||||
option.Grid.ContainLabel = true
|
||||
option.XAxis.Name = "person"
|
||||
option.YAxis.Type = "category"
|
||||
option.VisualMap.Orient = "horizontal"
|
||||
option.VisualMap.Left = "center"
|
||||
option.VisualMap.Min = 0
|
||||
option.VisualMap.Max = 10
|
||||
option.VisualMap.Show = false
|
||||
option.VisualMap.Dimension = 0
|
||||
option.VisualMap.InRange.Color = []string{"#035bff", "#42aaf5", "#00eaf2"}
|
||||
option.Series = []struct {
|
||||
Label struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
} "json:\"label\""
|
||||
Type string "json:\"type\""
|
||||
Encode struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
} "json:\"encode\""
|
||||
}{
|
||||
{
|
||||
Label: struct {
|
||||
Position string "json:\"position\""
|
||||
Show bool "json:\"show\""
|
||||
Formatter string "json:\"formatter\""
|
||||
}{
|
||||
Position: "right",
|
||||
Show: true,
|
||||
Formatter: "{@[3]} %",
|
||||
},
|
||||
Type: "bar",
|
||||
Encode: struct {
|
||||
X string "json:\"x\""
|
||||
Y string "json:\"y\""
|
||||
}{
|
||||
X: "amount",
|
||||
Y: "product",
|
||||
},
|
||||
},
|
||||
}
|
||||
option.Tooltip = struct {
|
||||
Trigger string "json:\"trigger\""
|
||||
AxisPointer struct {
|
||||
Type string "json:\"type\""
|
||||
} "json:\"axisPointer\""
|
||||
}{
|
||||
Trigger: "axis",
|
||||
AxisPointer: struct {
|
||||
Type string "json:\"type\""
|
||||
}{
|
||||
Type: "shadow",
|
||||
},
|
||||
}
|
||||
option.Graphic = struct {
|
||||
Type string "json:\"type\""
|
||||
Left string "json:\"left\""
|
||||
Top string "json:\"top\""
|
||||
Style struct {
|
||||
Text string "json:\"text\""
|
||||
FontSize string "json:\"fontSize\""
|
||||
FontWeight string "json:\"fontWeight\""
|
||||
} "json:\"style\""
|
||||
}{
|
||||
Type: "text",
|
||||
Left: "center",
|
||||
Top: "middle",
|
||||
Style: struct {
|
||||
Text string "json:\"text\""
|
||||
FontSize string "json:\"fontSize\""
|
||||
FontWeight string "json:\"fontWeight\""
|
||||
}{
|
||||
Text: isEmpty,
|
||||
FontSize: "15",
|
||||
FontWeight: "bold",
|
||||
},
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanGlobalMCU(mcuID string) (models.Barchart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalMCUModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
IFNULL(Nat_TestName ,Mcu_KelainanGroupName) AS Test,
|
||||
COUNT(Mgm_HeaderT_OrderHeaderID) AS total
|
||||
FROM mgm_header
|
||||
JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_DetailIsActive = 'Y'
|
||||
JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
LEFT JOIN nat_test ON Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ?
|
||||
AND Mgm_HeaderIsNormal = 'N'
|
||||
GROUP BY Mcu_KelainanGroupID ORDER BY COUNT(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
`
|
||||
// Mgm_DetailMcu_KelainanID ->> versi php
|
||||
// Mcu_KelainanGroupID ->> versi excel
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global mcu %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Kelainan MCU"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
max := 1
|
||||
for _, d := range data {
|
||||
if d.Total >= max {
|
||||
max = d.Total
|
||||
}
|
||||
}
|
||||
|
||||
for i, d := range data {
|
||||
percentage := float64(d.Total) / float64(max) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
i, d.Total, d.Test, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error insert data to barchart %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanFisik(mcuID string) (models.Barchart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalFisikModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_KelainanName,
|
||||
COUNT(Mgm_HeaderT_OrderHeaderID) AS total
|
||||
FROM mgm_header
|
||||
JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID
|
||||
AND Mgm_DetailIsActive = 'Y'
|
||||
JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ?
|
||||
AND Mgm_HeaderType = 'F'
|
||||
AND Mgm_HeaderIsNormal = 'N'
|
||||
GROUP BY Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global fisik %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Kelainan Fisik"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
max := 1
|
||||
for _, d := range data {
|
||||
if d.Total >= max {
|
||||
max = d.Total
|
||||
}
|
||||
}
|
||||
|
||||
for _, d := range data {
|
||||
percentage := float64(d.Total) / float64(max) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
d.Total, d.Total, d.Mcu_KelainanName, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, nil
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetKelainanGlobalV2(mcuID string) (models.Barchart, error) {
|
||||
var option models.Barchart
|
||||
var data []models.KelainanGlobalModel
|
||||
|
||||
q := `
|
||||
SELECT * FROM (
|
||||
SELECT Mcu_KelainanID,
|
||||
Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_lab
|
||||
JOIN t_orderheader ON T_KelainanLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarylab ON T_KelainanLabMcu_SummaryLabID = Mcu_SummaryLabID
|
||||
join mcu_kelainan on Mcu_summaryLabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryLabNat_TestID = Nat_TestID AND T_KelainanLabNat_TestID = Mcu_SummaryLabNat_TestID
|
||||
where T_KelainanLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
UNION
|
||||
SELECT Mcu_KelainanID, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_nonlab
|
||||
JOIN t_orderheader ON T_KelainanNonLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarynonlab ON T_KelainanNonLabMcu_SummaryNonlabID = Mcu_SummaryNonlabID
|
||||
join mcu_kelainan on Mcu_SummaryNonlabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryNonlabNat_TestID = Nat_TestID AND
|
||||
T_KelainanNonLabNat_TestID = Mcu_SummaryNonlabNat_TestID
|
||||
where T_KelainanNonLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
UNION
|
||||
SELECT Mcu_KelainanID, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as Total
|
||||
FROM t_kelainan_fisik
|
||||
JOIN t_orderheader ON T_KelainanFiskT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summaryfisik ON T_KelainanFiskMcu_FisikSummaryID = Mcu_SummaryFisikID AND
|
||||
Mcu_SummaryFisikID NOT IN (63,67,68,69,70,71,72,73)
|
||||
join mcu_kelainan on Mcu_SummaryFisikMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
where T_KelainanFiskIsActive = 'Y' and T_OrderHeaderMgm_McuID = ? AND
|
||||
Mcu_KelainanClasification NOT IN ('who','kemenkes','JNC-VIII','ESC/ESH')
|
||||
group by Mcu_KelainanID
|
||||
) a
|
||||
|
||||
ORDER BY total DESC
|
||||
LIMIT 10
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID, mcuID, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data kelainan global %v", err)
|
||||
}
|
||||
|
||||
var jumlahPeserta models.TotalPesertaModel
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
COUNT(distinct(T_OrderHeaderID)) as peserta,
|
||||
COUNT( distinct(Mcu_PreregisterPatientsM_PatientID)) as total
|
||||
FROM mcu_preregister_patients
|
||||
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID AND
|
||||
T_OrderHeaderIsActive = 'Y'
|
||||
WHERE
|
||||
Mcu_PreregisterPatientsMgm_McuID = ? AND
|
||||
Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&jumlahPeserta, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get jumlah peserta %v", err)
|
||||
}
|
||||
|
||||
title := "Kelainan Global (10 Terbesar)"
|
||||
chartData := models.BarDataset{
|
||||
Source: [][]interface{}{
|
||||
{"score", "amount", "product", "percentage"},
|
||||
},
|
||||
}
|
||||
|
||||
for i, d := range data {
|
||||
percentage := float64(d.Total) / float64(jumlahPeserta.Peserta) * 100
|
||||
roundedPercentage := math.Round(percentage*100) / 100
|
||||
percentStr := strconv.FormatFloat(roundedPercentage, 'f', -1, 64)
|
||||
newText := utils.SplitStrings(d.Test, 2)
|
||||
chartData.Source = append(chartData.Source, []interface{}{
|
||||
i, d.Total, newText, percentStr,
|
||||
})
|
||||
}
|
||||
|
||||
option, err := tkg.GetBarChartConf(title, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error insert data to barchart %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkg *TabKelainanGlobalServices) GetChartRenderGlobal(mcuID string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mcu_ImageGrafikGroupMenu = "GLOBAL"
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, mcuID); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab peserta: %v", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,267 +1,267 @@
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKepersertaanServices struct {
|
||||
TabKepersertaanServiceStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKepersertaanService(store db.AppStore) *TabKepersertaanServices {
|
||||
return &TabKepersertaanServices{
|
||||
TabKepersertaanServiceStore: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetPieChartConf(title string, subtext string, data []models.SeriesData) (models.Piechart, error) {
|
||||
|
||||
option := models.Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
SubText string `json:"subtext"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
SubText: subtext,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
Height int `json:"height"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
Height: 75,
|
||||
},
|
||||
Series: []models.Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: data,
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetTotalKepesertaanMCU(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data models.TotalPesertaModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
COUNT(distinct(T_OrderHeaderID)) as peserta,
|
||||
COUNT( distinct(Mcu_PreregisterPatientsM_PatientID)) as total
|
||||
FROM mcu_preregister_patients
|
||||
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID AND
|
||||
T_OrderHeaderIsActive = 'Y'
|
||||
WHERE
|
||||
Mcu_PreregisterPatientsMgm_McuID = ? AND
|
||||
Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Get(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get total participant %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Total Peserta " + strconv.Itoa(data.Total)
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
if data.Total == 0 {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
} else {
|
||||
chartData = []models.SeriesData{
|
||||
{
|
||||
Value: data.Peserta,
|
||||
Name: "Sudah MCU: " + strconv.Itoa(data.Peserta) + " peserta",
|
||||
},
|
||||
{
|
||||
Value: data.Total - data.Peserta,
|
||||
Name: "Belum MCU: " + strconv.Itoa(data.Total-data.Peserta) + " peserta",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart total peserta: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetKepesertaanByGender(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data []models.GenderPesertaModel
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Berdasarkan jenis kelamin"
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
q := `
|
||||
SELECT IF(M_PatientGender = 'male','Laki-laki','Perempuan') as M_PatientGender,
|
||||
COUNT(T_OrderHeaderID) as Jumlah
|
||||
FROM t_orderheader
|
||||
LEFT JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderMgm_McuID = ? AND T_OrderHeaderIsActive = 'Y'
|
||||
GROUP BY M_PatientGender
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get total gender %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
if data != nil {
|
||||
for _, d := range data {
|
||||
chartData = append(chartData, models.SeriesData{
|
||||
Value: d.Jumlah,
|
||||
Name: d.M_PatientGender + ": " + strconv.Itoa(d.Jumlah) + " Peserta",
|
||||
})
|
||||
}
|
||||
} else {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart total gender: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetKepesertaanByUmur(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data []models.UmurPesertaModel
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Berdasarkan umur"
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
CASE
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) < '30' THEN "1. < 30 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '30' AND left(T_OrderHeaderM_PatientAge,2) < '40' THEN "2. 30 -< 40 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '40' AND left(T_OrderHeaderM_PatientAge,2) < '50' THEN "3. 40 - < 50 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '50' THEN "4. > 50 tahun" ELSE ""
|
||||
END AS umur,
|
||||
COUNT(T_OrderHeaderID) as total
|
||||
FROM t_orderheader
|
||||
LEFT JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y'
|
||||
WHERE t_orderheaderMgm_McuID = ? AND T_OrderHeaderIsActive = 'Y'
|
||||
GROUP BY
|
||||
CASE
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) < '30' THEN "1. < 30 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '30' AND left(T_OrderHeaderM_PatientAge,2) < '40' THEN "2. 30 -< 40 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '40' AND left(T_OrderHeaderM_PatientAge,2) < '50' THEN "3. 40 - < 50 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '50' THEN "4. > 50 tahun" ELSE ""
|
||||
END
|
||||
ORDER BY umur
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data jumlah umur: %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("response data", zap.Any("data", data))
|
||||
|
||||
if data != nil {
|
||||
for _, d := range data {
|
||||
chartData = append(chartData, models.SeriesData{
|
||||
Value: d.Total,
|
||||
Name: d.Umur + ": " + strconv.Itoa(d.Total) + " Peserta",
|
||||
})
|
||||
}
|
||||
} else {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart jumlah umur: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetChartRenderPeserta(mcuID string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mcu_ImageGrafikGroupMenu = "PESERTA"
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, mcuID); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab peserta: %v", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKepersertaanServices struct {
|
||||
TabKepersertaanServiceStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKepersertaanService(store db.AppStore) *TabKepersertaanServices {
|
||||
return &TabKepersertaanServices{
|
||||
TabKepersertaanServiceStore: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetPieChartConf(title string, subtext string, data []models.SeriesData) (models.Piechart, error) {
|
||||
|
||||
option := models.Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
SubText string `json:"subtext"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
SubText: subtext,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
Height int `json:"height"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
Height: 75,
|
||||
},
|
||||
Series: []models.Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: data,
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetTotalKepesertaanMCU(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data models.TotalPesertaModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
COUNT(distinct(T_OrderHeaderID)) as peserta,
|
||||
COUNT( distinct(Mcu_PreregisterPatientsM_PatientID)) as total
|
||||
FROM mcu_preregister_patients
|
||||
LEFT JOIN t_orderheader ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID AND
|
||||
T_OrderHeaderIsActive = 'Y'
|
||||
WHERE
|
||||
Mcu_PreregisterPatientsMgm_McuID = ? AND
|
||||
Mcu_PreregisterPatientsIsActive = 'Y'
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Get(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get total participant %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Total Peserta " + strconv.Itoa(data.Total)
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
if data.Total == 0 {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
} else {
|
||||
chartData = []models.SeriesData{
|
||||
{
|
||||
Value: data.Peserta,
|
||||
Name: "Sudah MCU: " + strconv.Itoa(data.Peserta) + " peserta",
|
||||
},
|
||||
{
|
||||
Value: data.Total - data.Peserta,
|
||||
Name: "Belum MCU: " + strconv.Itoa(data.Total-data.Peserta) + " peserta",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart total peserta: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetKepesertaanByGender(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data []models.GenderPesertaModel
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Berdasarkan jenis kelamin"
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
q := `
|
||||
SELECT IF(M_PatientGender = 'male','Laki-laki','Perempuan') as M_PatientGender,
|
||||
COUNT(T_OrderHeaderID) as Jumlah
|
||||
FROM t_orderheader
|
||||
LEFT JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderMgm_McuID = ? AND T_OrderHeaderIsActive = 'Y'
|
||||
GROUP BY M_PatientGender
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get total gender %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("resp data", zap.Any("data", data))
|
||||
|
||||
if data != nil {
|
||||
for _, d := range data {
|
||||
chartData = append(chartData, models.SeriesData{
|
||||
Value: d.Jumlah,
|
||||
Name: d.M_PatientGender + ": " + strconv.Itoa(d.Jumlah) + " Peserta",
|
||||
})
|
||||
}
|
||||
} else {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart total gender: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetKepesertaanByUmur(mcuID string) (models.Piechart, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var option models.Piechart
|
||||
var data []models.UmurPesertaModel
|
||||
|
||||
title := "Peserta MCU"
|
||||
subtext := "Berdasarkan umur"
|
||||
chartData := []models.SeriesData{}
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
CASE
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) < '30' THEN "1. < 30 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '30' AND left(T_OrderHeaderM_PatientAge,2) < '40' THEN "2. 30 -< 40 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '40' AND left(T_OrderHeaderM_PatientAge,2) < '50' THEN "3. 40 - < 50 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '50' THEN "4. > 50 tahun" ELSE ""
|
||||
END AS umur,
|
||||
COUNT(T_OrderHeaderID) as total
|
||||
FROM t_orderheader
|
||||
LEFT JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y'
|
||||
WHERE t_orderheaderMgm_McuID = ? AND T_OrderHeaderIsActive = 'Y'
|
||||
GROUP BY
|
||||
CASE
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) < '30' THEN "1. < 30 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '30' AND left(T_OrderHeaderM_PatientAge,2) < '40' THEN "2. 30 -< 40 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '40' AND left(T_OrderHeaderM_PatientAge,2) < '50' THEN "3. 40 - < 50 tahun"
|
||||
WHEN LEFT(T_OrderHeaderM_PatientAge,2) >= '50' THEN "4. > 50 tahun" ELSE ""
|
||||
END
|
||||
ORDER BY umur
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&data, q, mcuID); err != nil {
|
||||
return option, fmt.Errorf("error get data jumlah umur: %v", err)
|
||||
}
|
||||
defer logger.Sync()
|
||||
logger.Info("response data", zap.Any("data", data))
|
||||
|
||||
if data != nil {
|
||||
for _, d := range data {
|
||||
chartData = append(chartData, models.SeriesData{
|
||||
Value: d.Total,
|
||||
Name: d.Umur + ": " + strconv.Itoa(d.Total) + " Peserta",
|
||||
})
|
||||
}
|
||||
} else {
|
||||
chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"})
|
||||
}
|
||||
|
||||
option, err := tkp.GetPieChartConf(title, subtext, chartData)
|
||||
if err != nil {
|
||||
return option, fmt.Errorf("error get piechart jumlah umur: %v", err)
|
||||
}
|
||||
|
||||
return option, nil
|
||||
}
|
||||
|
||||
func (tkp *TabKepersertaanServices) GetChartRenderPeserta(mcuID string) ([]models.McuTabModels, error) {
|
||||
var ret []models.McuTabModels
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mcu_ImageGrafikGroupResult,
|
||||
Mcu_ImageGrafikGroupMenu,
|
||||
Mcu_ImageGrafikName,
|
||||
Mcu_ImageGrafikJsonRender
|
||||
FROM mgm_mcugrafik
|
||||
JOIN mcu_image_grafik ON Mcu_ImageGrafikID = Mgm_McuGrafikMcu_ImageGrafikID
|
||||
WHERE Mgm_McuGrafikMgm_McuID = ?
|
||||
AND Mcu_ImageGrafikGroupMenu = "PESERTA"
|
||||
AND Mgm_McuGrafikIsActive = 'Y'
|
||||
ORDER BY Mcu_ImageGrafikID
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, mcuID); err != nil {
|
||||
return ret, fmt.Errorf("error get data tab peserta: %v", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
@@ -1,307 +1,307 @@
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKesimpulanServices struct {
|
||||
TabKesimpulanStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKesimpulanServices(uStore db.AppStore) *TabKesimpulanServices {
|
||||
return &TabKesimpulanServices{
|
||||
TabKesimpulanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listLab),
|
||||
)
|
||||
return listLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listLab),
|
||||
)
|
||||
return listLab, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanNonLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listNonLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listNonLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data NON lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listNonLab),
|
||||
)
|
||||
return listNonLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listNonLab),
|
||||
)
|
||||
return listNonLab, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanFisik(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listFisik []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalFisik string
|
||||
if len(dataTot) > 0 {
|
||||
totalFisik = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalFisik),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listFisik, query, totalFisik, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data fisik",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listFisik),
|
||||
)
|
||||
return listFisik, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
return listFisik, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanLabV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor,
|
||||
Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_lab
|
||||
JOIN t_orderheader ON T_KelainanLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarylab ON T_KelainanLabMcu_SummaryLabID = Mcu_SummaryLabID
|
||||
join mcu_kelainan on Mcu_summaryLabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryLabNat_TestID = Nat_TestID AND T_KelainanLabNat_TestID = Mcu_SummaryLabNat_TestID
|
||||
where T_KelainanLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan lab %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanNonLabV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_nonlab
|
||||
JOIN t_orderheader ON T_KelainanNonLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarynonlab ON T_KelainanNonLabMcu_SummaryNonlabID = Mcu_SummaryNonlabID
|
||||
join mcu_kelainan on Mcu_SummaryNonlabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryNonlabNat_TestID = Nat_TestID AND
|
||||
T_KelainanNonLabNat_TestID = Mcu_SummaryNonlabNat_TestID
|
||||
where T_KelainanNonLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan non lab %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanFisikV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_fisik
|
||||
JOIN t_orderheader ON T_KelainanFiskT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summaryfisik ON T_KelainanFiskMcu_FisikSummaryID = Mcu_SummaryFisikID AND
|
||||
Mcu_SummaryFisikID NOT IN (63,67,68,69,70,71,72,73)
|
||||
join mcu_kelainan on Mcu_SummaryFisikMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
where T_KelainanFiskIsActive = 'Y' and T_OrderHeaderMgm_McuID = ? AND
|
||||
Mcu_KelainanClasification NOT IN ('who','kemenkes','JNC-VIII','ESC/ESH')
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan fisik %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKesimpulanServices struct {
|
||||
TabKesimpulanStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKesimpulanServices(uStore db.AppStore) *TabKesimpulanServices {
|
||||
return &TabKesimpulanServices{
|
||||
TabKesimpulanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listLab),
|
||||
)
|
||||
return listLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listLab),
|
||||
)
|
||||
return listLab, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanNonLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listNonLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listNonLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data NON lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listNonLab),
|
||||
)
|
||||
return listNonLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listNonLab),
|
||||
)
|
||||
return listNonLab, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanFisik(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listFisik []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalFisik string
|
||||
if len(dataTot) > 0 {
|
||||
totalFisik = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalFisik),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listFisik, query, totalFisik, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data fisik",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listFisik),
|
||||
)
|
||||
return listFisik, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
return listFisik, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanLabV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor,
|
||||
Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_lab
|
||||
JOIN t_orderheader ON T_KelainanLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarylab ON T_KelainanLabMcu_SummaryLabID = Mcu_SummaryLabID
|
||||
join mcu_kelainan on Mcu_summaryLabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryLabNat_TestID = Nat_TestID AND T_KelainanLabNat_TestID = Mcu_SummaryLabNat_TestID
|
||||
where T_KelainanLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan lab %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanNonLabV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_nonlab
|
||||
JOIN t_orderheader ON T_KelainanNonLabT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summarynonlab ON T_KelainanNonLabMcu_SummaryNonlabID = Mcu_SummaryNonlabID
|
||||
join mcu_kelainan on Mcu_SummaryNonlabMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
JOIN nat_test ON Mcu_SummaryNonlabNat_TestID = Nat_TestID AND
|
||||
T_KelainanNonLabNat_TestID = Mcu_SummaryNonlabNat_TestID
|
||||
where T_KelainanNonLabIsActive = 'Y' and T_OrderHeaderMgm_McuID = ?
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan non lab %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (tks *TabKesimpulanServices) GetListKesimpulanFisikV2(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
var data []models.ModelKesimpulanLab
|
||||
|
||||
q := `
|
||||
SELECT Mcu_KelainanID as nomor, Mcu_KelainanName as Test,
|
||||
count(distinct T_OrderHeaderID) as total
|
||||
FROM t_kelainan_fisik
|
||||
JOIN t_orderheader ON T_KelainanFiskT_OrderHeaderID = T_OrderHeaderID
|
||||
JOIN mcu_summaryfisik ON T_KelainanFiskMcu_FisikSummaryID = Mcu_SummaryFisikID AND
|
||||
Mcu_SummaryFisikID NOT IN (63,67,68,69,70,71,72,73)
|
||||
join mcu_kelainan on Mcu_SummaryFisikMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
where T_KelainanFiskIsActive = 'Y' and T_OrderHeaderMgm_McuID = ? AND
|
||||
Mcu_KelainanClasification NOT IN ('who','kemenkes','JNC-VIII','ESC/ESH')
|
||||
group by Mcu_KelainanID
|
||||
ORDER BY total DESC
|
||||
LIMIT 3
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, id); err != nil {
|
||||
return data, fmt.Errorf("error get data top 3 kelainan fisik %v", err)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1,198 +1,198 @@
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKeuanganServices struct {
|
||||
TabKeuanganStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKeuanganServices(uStore db.AppStore) *TabKeuanganServices {
|
||||
return &TabKeuanganServices{
|
||||
TabKeuanganStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetTotalOrderKeuangan(mcuID string) (int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var mcu models.DashboardPic
|
||||
ret := 0
|
||||
var data []models.TotalOrderHeader
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
T_OrderHeaderID,
|
||||
T_OrderHeaderCorporateID,
|
||||
T_OrderHeaderTotal,
|
||||
T_OrderHeaderCreated
|
||||
FROM t_orderheader
|
||||
WHERE T_OrderHeaderIsActive = 'Y'
|
||||
AND T_OrderHeaderCorporateID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcu.Mgm_McuCorporateID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get orderheader data by corp id", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, fmt.Errorf("error get orderheader data by corp id: %v", err)
|
||||
}
|
||||
|
||||
for _, d := range data {
|
||||
ret = ret + int(d.T_OrderHeaderTotal)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetTotalCardData(mcuID string) (models.TotalBillCard, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.TotalBillCard
|
||||
var mcu models.DashboardPic
|
||||
var uang []models.KeuanganModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
fb.F_BillID,
|
||||
fb.F_BillNo,
|
||||
fb.F_BillCorporateID,
|
||||
DATE_FORMAT(fb.F_BillDueDate, '%e %M %Y') AS F_BillDueDate,
|
||||
fb.F_BillTotal,
|
||||
fb.F_BillUnpaid,
|
||||
DATE_FORMAT(fb.F_BillCreated, '%e %M %Y') AS F_BillCreated
|
||||
FROM f_bill fb
|
||||
WHERE fb.F_BillIsActive = 'Y'
|
||||
AND fb.F_BillCorporateID = ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&uang, q, mcu.Mgm_McuCorporateID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Bill Data", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for _, bill := range uang {
|
||||
ret.TotalTagihan = ret.TotalTagihan + bill.F_BillTotal
|
||||
ret.TotalHutang = ret.TotalHutang + bill.F_BillUnpaid
|
||||
}
|
||||
ret.TotalPelunasan = ret.TotalTagihan - ret.TotalHutang
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetListingDataKeuangan(mcuID string, currentpage int, rowperpage int) ([]models.KeuanganModel, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.KeuanganModel
|
||||
var totalData int
|
||||
var mcu models.DashboardPic
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, 0, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM f_bill
|
||||
WHERE F_BillIsActive = 'Y' AND F_BillCorporateID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, mcu.Mgm_McuCorporateID); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
fb.F_BillID,
|
||||
fb.F_BillNo,
|
||||
fb.F_BillCorporateID,
|
||||
DATE_FORMAT(fb.F_BillDueDate, '%e %M %Y') AS F_BillDueDate,
|
||||
fb.F_BillTotal,
|
||||
fb.F_BillUnpaid,
|
||||
DATE_FORMAT(fb.F_BillCreated, '%e %M %Y') AS F_BillCreated
|
||||
FROM f_bill fb
|
||||
WHERE fb.F_BillIsActive = 'Y'
|
||||
AND fb.F_BillCorporateID = ?
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&ret, q, mcu.Mgm_McuCorporateID, rowperpage, offset); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Bill Data", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for idx, data := range ret {
|
||||
var paym []models.BillPaymentModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
F_BillPaymentID,
|
||||
F_BillPaymentF_BillID,
|
||||
DATE_FORMAT(F_BillPaymentDate, '%e %M %Y') AS F_BillPaymentDate,
|
||||
F_BillPaymentNumber,
|
||||
F_BillPaymentAmount
|
||||
FROM f_bill_payment
|
||||
WHERE F_BillPaymentIsActive = 'Y'
|
||||
AND F_BillPaymentF_BillID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&paym, q, data.F_BillID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Payment Data", zap.Any("billID", data.F_BillID))
|
||||
return ret, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
ret[idx].BillPayment = append(ret[idx].BillPayment, paym...)
|
||||
ret[idx].TotalBillPayment = data.F_BillTotal - data.F_BillUnpaid
|
||||
}
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
package mcu_corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type TabKeuanganServices struct {
|
||||
TabKeuanganStore db.AppStore
|
||||
}
|
||||
|
||||
func NewTabKeuanganServices(uStore db.AppStore) *TabKeuanganServices {
|
||||
return &TabKeuanganServices{
|
||||
TabKeuanganStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetTotalOrderKeuangan(mcuID string) (int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var mcu models.DashboardPic
|
||||
ret := 0
|
||||
var data []models.TotalOrderHeader
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
T_OrderHeaderID,
|
||||
T_OrderHeaderCorporateID,
|
||||
T_OrderHeaderTotal,
|
||||
T_OrderHeaderCreated
|
||||
FROM t_orderheader
|
||||
WHERE T_OrderHeaderIsActive = 'Y'
|
||||
AND T_OrderHeaderCorporateID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&data, q, mcu.Mgm_McuCorporateID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get orderheader data by corp id", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, fmt.Errorf("error get orderheader data by corp id: %v", err)
|
||||
}
|
||||
|
||||
for _, d := range data {
|
||||
ret = ret + int(d.T_OrderHeaderTotal)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetTotalCardData(mcuID string) (models.TotalBillCard, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.TotalBillCard
|
||||
var mcu models.DashboardPic
|
||||
var uang []models.KeuanganModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
fb.F_BillID,
|
||||
fb.F_BillNo,
|
||||
fb.F_BillCorporateID,
|
||||
DATE_FORMAT(fb.F_BillDueDate, '%e %M %Y') AS F_BillDueDate,
|
||||
fb.F_BillTotal,
|
||||
fb.F_BillUnpaid,
|
||||
DATE_FORMAT(fb.F_BillCreated, '%e %M %Y') AS F_BillCreated
|
||||
FROM f_bill fb
|
||||
WHERE fb.F_BillIsActive = 'Y'
|
||||
AND fb.F_BillCorporateID = ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&uang, q, mcu.Mgm_McuCorporateID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Bill Data", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for _, bill := range uang {
|
||||
ret.TotalTagihan = ret.TotalTagihan + bill.F_BillTotal
|
||||
ret.TotalHutang = ret.TotalHutang + bill.F_BillUnpaid
|
||||
}
|
||||
ret.TotalPelunasan = ret.TotalTagihan - ret.TotalHutang
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (tks *TabKeuanganServices) GetListingDataKeuangan(mcuID string, currentpage int, rowperpage int) ([]models.KeuanganModel, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.KeuanganModel
|
||||
var totalData int
|
||||
var mcu models.DashboardPic
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&mcu, q, mcuID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("error get corportate id", zap.Any("mcuID", mcuID))
|
||||
return ret, 0, fmt.Errorf("error get corporate id: %v", err)
|
||||
}
|
||||
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM f_bill
|
||||
WHERE F_BillIsActive = 'Y' AND F_BillCorporateID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, mcu.Mgm_McuCorporateID); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
fb.F_BillID,
|
||||
fb.F_BillNo,
|
||||
fb.F_BillCorporateID,
|
||||
DATE_FORMAT(fb.F_BillDueDate, '%e %M %Y') AS F_BillDueDate,
|
||||
fb.F_BillTotal,
|
||||
fb.F_BillUnpaid,
|
||||
DATE_FORMAT(fb.F_BillCreated, '%e %M %Y') AS F_BillCreated
|
||||
FROM f_bill fb
|
||||
WHERE fb.F_BillIsActive = 'Y'
|
||||
AND fb.F_BillCorporateID = ?
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&ret, q, mcu.Mgm_McuCorporateID, rowperpage, offset); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Bill Data", zap.Any("corpID", mcu.Mgm_McuCorporateID))
|
||||
return ret, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for idx, data := range ret {
|
||||
var paym []models.BillPaymentModel
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
F_BillPaymentID,
|
||||
F_BillPaymentF_BillID,
|
||||
DATE_FORMAT(F_BillPaymentDate, '%e %M %Y') AS F_BillPaymentDate,
|
||||
F_BillPaymentNumber,
|
||||
F_BillPaymentAmount
|
||||
FROM f_bill_payment
|
||||
WHERE F_BillPaymentIsActive = 'Y'
|
||||
AND F_BillPaymentF_BillID = ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&paym, q, data.F_BillID); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Get List Payment Data", zap.Any("billID", data.F_BillID))
|
||||
return ret, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
ret[idx].BillPayment = append(ret[idx].BillPayment, paym...)
|
||||
ret[idx].TotalBillPayment = data.F_BillTotal - data.F_BillUnpaid
|
||||
}
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
|
||||
@@ -1,372 +1,372 @@
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type PatientServices struct {
|
||||
PatientStore db.AppStore
|
||||
}
|
||||
|
||||
func NewPatientServices(uStore db.AppStore) *PatientServices {
|
||||
|
||||
return &PatientServices{
|
||||
|
||||
PatientStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetPatientData(email string) (string, error) {
|
||||
var ret string
|
||||
prmEmail := "%" + email + "%"
|
||||
q := `
|
||||
SELECT
|
||||
M_PatientName
|
||||
FROM m_patient
|
||||
WHERE M_PatientEmail LIKE ?
|
||||
AND M_PatientIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&ret, q, prmEmail); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetDashboardPatientBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pat",
|
||||
},
|
||||
{
|
||||
Item: "PT. ABC",
|
||||
Url: "",
|
||||
},
|
||||
{
|
||||
Item: title,
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetListtingData(email string, currentpage int, rowperpage int) ([]models.DashboardPatient, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPatient
|
||||
var totalData int
|
||||
|
||||
prmEmail := "%" + email + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_patient mp
|
||||
JOIN t_orderheader toh ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
WHERE mp.M_PatientEmail LIKE ?
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, q, prmEmail); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
toh.T_OrderHeaderID,
|
||||
toh.T_OrderHeaderDate,
|
||||
toh.T_OrderHeaderLabNumber,
|
||||
toh.T_OrderHeaderM_PatientID,
|
||||
toh.T_OrderHeaderCorporateID,
|
||||
toh.T_OrderHeaderMgm_McuID,
|
||||
toh.T_OrderHeaderIsActive
|
||||
FROM m_patient mp
|
||||
JOIN t_orderheader toh ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
WHERE mp.M_PatientEmail LIKE ?
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, prmEmail, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get list 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) 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
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetListReportPesertaV4(orderheaderID string, staffname string) ([]models.TabViewReportMcu, error) {
|
||||
var returnTab []models.TabViewReportMcu
|
||||
|
||||
var profile_patient models.PatientMCU
|
||||
lab_rpt := ""
|
||||
|
||||
sql := `
|
||||
SELECT
|
||||
toh.T_OrderHeaderID,
|
||||
toh.T_OrderHeaderLabNumber,
|
||||
mp.M_PatientID,
|
||||
mp.M_PatientName,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderheader toh
|
||||
JOIN m_patient mp ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
WHERE toh.T_OrderHeaderID = ? AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&profile_patient, sql, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get group result order: %v", err)
|
||||
}
|
||||
if profile_patient.T_OrderHeaderLabNumber != "" {
|
||||
lab_rpt = "/birt/frameset?__report=report/one/lab/rpt_test_portal.rptdesign&__format=pdf&PID=" + profile_patient.T_OrderHeaderID + "&tm=" + profile_patient.Datetime + "&username=" + staffname
|
||||
}
|
||||
|
||||
var so_data_rpt []models.SoRptData
|
||||
fisik := ""
|
||||
rontgen := ""
|
||||
ekg := ""
|
||||
audiometri := ""
|
||||
spirometri := ""
|
||||
treadmill := ""
|
||||
papsmear := ""
|
||||
|
||||
sql_rpt := `
|
||||
SELECT DISTINCT group_resultName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'N' AND Group_ResultName <> 'LAB' AND Group_ResultFlagNonLab = 'N'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
UNION
|
||||
SELECT DISTINCT group_resultName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
||||
JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
|
||||
T_SamplingSoT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'N' AND Group_ResultName <> 'LAB' AND Group_ResultFlagNonLab = 'Y'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
UNION
|
||||
SELECT DISTINCT T_TestName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestName NOT IN ('Visus Mata','Buta Warna','Pemeriksaan Lapang Pandang')
|
||||
JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
|
||||
T_SamplingSoT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'Y' AND Group_ResultFlagNonLab = 'Y'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
`
|
||||
if err := dbx.Handlex.Select(&so_data_rpt, sql_rpt, orderheaderID, orderheaderID, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get data so_id: %v", err)
|
||||
}
|
||||
|
||||
for _, d := range so_data_rpt {
|
||||
switch d.Rpt_name {
|
||||
case "Pemeriksaan Fisik":
|
||||
fisik = "/birt/frameset?__report=report/one/mcu/mcu_fisik_history_v2_portal.rptdesign&__format=pdf&PType=fisik&PLang=1&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
// fisik = "/birt/run?__report=report/one/mcu/mcu_fisik_history_v2_portal.rptdesign&__format=pdf&PType=fisik&PLang=1&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Rontgen":
|
||||
rontgen = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_xray_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Audiometri":
|
||||
audiometri = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_audiometri_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Spirometri":
|
||||
spirometri = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_spirometri_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "ECG":
|
||||
ekg = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_ecg_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Treadmill":
|
||||
treadmill = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_treadmill_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Papsmear":
|
||||
papsmear = "/birt/frameset?__report=report/one/lab/rpt_test_papsmear_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
}
|
||||
}
|
||||
|
||||
var ResumeData models.ResumeMCU
|
||||
kesimpulan := ""
|
||||
// cover := ""
|
||||
|
||||
sql_resume := `
|
||||
SELECT
|
||||
Mcu_ResumeID,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM mcu_resume
|
||||
WHERE Mcu_ResumeT_OrderHeaderID = ?
|
||||
AND Mcu_ResumeIsActive = 'Y' AND Mcu_ResumeStatus = 'VAL'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&ResumeData, sql_resume, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get data resume id: %v", err)
|
||||
}
|
||||
|
||||
if ResumeData.Mcu_ResumeID != "" {
|
||||
// cover = "/birt/frameset?__report=report/one/mcu/rpt_mcu_resume_cover_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + ResumeData.Mcu_ResumeID + "&tm=" + ResumeData.Datetime
|
||||
kesimpulan = "/birt/frameset?__report=report/one/mcu/rpt_mcu_saran_kesimpulan_v2_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + ResumeData.Mcu_ResumeID + "&tm=" + ResumeData.Datetime
|
||||
}
|
||||
|
||||
if fisik != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Fisik", Link: fisik})
|
||||
}
|
||||
if rontgen != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Rontgen", Link: rontgen})
|
||||
}
|
||||
if ekg != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Elektromedik", Link: ekg})
|
||||
}
|
||||
if audiometri != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Audiometri", Link: audiometri})
|
||||
}
|
||||
if spirometri != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Spirometri", Link: spirometri})
|
||||
}
|
||||
if treadmill != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Treadmill", Link: treadmill})
|
||||
}
|
||||
if kesimpulan != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Kesimpulan", Link: kesimpulan})
|
||||
}
|
||||
if lab_rpt != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Lab", Link: lab_rpt})
|
||||
}
|
||||
if papsmear != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Papsmear", Link: papsmear})
|
||||
}
|
||||
|
||||
return returnTab, nil
|
||||
}
|
||||
package corporate_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type PatientServices struct {
|
||||
PatientStore db.AppStore
|
||||
}
|
||||
|
||||
func NewPatientServices(uStore db.AppStore) *PatientServices {
|
||||
|
||||
return &PatientServices{
|
||||
|
||||
PatientStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetPatientData(email string) (string, error) {
|
||||
var ret string
|
||||
prmEmail := "%" + email + "%"
|
||||
q := `
|
||||
SELECT
|
||||
M_PatientName
|
||||
FROM m_patient
|
||||
WHERE M_PatientEmail LIKE ?
|
||||
AND M_PatientIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&ret, q, prmEmail); err != nil {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetDashboardPatientBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/corp/dashboard_pat",
|
||||
},
|
||||
{
|
||||
Item: "PT. ABC",
|
||||
Url: "",
|
||||
},
|
||||
{
|
||||
Item: title,
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetListtingData(email string, currentpage int, rowperpage int) ([]models.DashboardPatient, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPatient
|
||||
var totalData int
|
||||
|
||||
prmEmail := "%" + email + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_patient mp
|
||||
JOIN t_orderheader toh ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
WHERE mp.M_PatientEmail LIKE ?
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, q, prmEmail); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
toh.T_OrderHeaderID,
|
||||
toh.T_OrderHeaderDate,
|
||||
toh.T_OrderHeaderLabNumber,
|
||||
toh.T_OrderHeaderM_PatientID,
|
||||
toh.T_OrderHeaderCorporateID,
|
||||
toh.T_OrderHeaderMgm_McuID,
|
||||
toh.T_OrderHeaderIsActive
|
||||
FROM m_patient mp
|
||||
JOIN t_orderheader toh ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
WHERE mp.M_PatientEmail LIKE ?
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, prmEmail, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get list 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) 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
|
||||
}
|
||||
|
||||
func (sp *PatientServices) GetListReportPesertaV4(orderheaderID string, staffname string) ([]models.TabViewReportMcu, error) {
|
||||
var returnTab []models.TabViewReportMcu
|
||||
|
||||
var profile_patient models.PatientMCU
|
||||
lab_rpt := ""
|
||||
|
||||
sql := `
|
||||
SELECT
|
||||
toh.T_OrderHeaderID,
|
||||
toh.T_OrderHeaderLabNumber,
|
||||
mp.M_PatientID,
|
||||
mp.M_PatientName,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderheader toh
|
||||
JOIN m_patient mp ON toh.T_OrderHeaderM_PatientID = mp.M_PatientID
|
||||
AND mp.M_PatientIsActive = 'Y'
|
||||
WHERE toh.T_OrderHeaderID = ? AND toh.T_OrderHeaderIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&profile_patient, sql, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get group result order: %v", err)
|
||||
}
|
||||
if profile_patient.T_OrderHeaderLabNumber != "" {
|
||||
lab_rpt = "/birt/frameset?__report=report/one/lab/rpt_test_portal.rptdesign&__format=pdf&PID=" + profile_patient.T_OrderHeaderID + "&tm=" + profile_patient.Datetime + "&username=" + staffname
|
||||
}
|
||||
|
||||
var so_data_rpt []models.SoRptData
|
||||
fisik := ""
|
||||
rontgen := ""
|
||||
ekg := ""
|
||||
audiometri := ""
|
||||
spirometri := ""
|
||||
treadmill := ""
|
||||
papsmear := ""
|
||||
|
||||
sql_rpt := `
|
||||
SELECT DISTINCT group_resultName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'N' AND Group_ResultName <> 'LAB' AND Group_ResultFlagNonLab = 'N'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
UNION
|
||||
SELECT DISTINCT group_resultName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
||||
JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
|
||||
T_SamplingSoT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'N' AND Group_ResultName <> 'LAB' AND Group_ResultFlagNonLab = 'Y'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
UNION
|
||||
SELECT DISTINCT T_TestName as rpt_name,
|
||||
IFNULL(So_ResultEntryID,0) as so_id,
|
||||
T_OrderDetailT_OrderHeaderID as order_id,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM t_orderdetail
|
||||
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestName NOT IN ('Visus Mata','Buta Warna','Pemeriksaan Lapang Pandang')
|
||||
JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
|
||||
T_SamplingSoT_TestID = T_TestID
|
||||
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID
|
||||
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND
|
||||
Group_ResultFlagPerTest = 'Y' AND Group_ResultFlagNonLab = 'Y'
|
||||
LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
|
||||
WHERE
|
||||
T_OrderDetailT_OrderHeaderID = ? AND Group_ResultName <> 'Tanpa Hasil'
|
||||
`
|
||||
if err := dbx.Handlex.Select(&so_data_rpt, sql_rpt, orderheaderID, orderheaderID, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get data so_id: %v", err)
|
||||
}
|
||||
|
||||
for _, d := range so_data_rpt {
|
||||
switch d.Rpt_name {
|
||||
case "Pemeriksaan Fisik":
|
||||
fisik = "/birt/frameset?__report=report/one/mcu/mcu_fisik_history_v2_portal.rptdesign&__format=pdf&PType=fisik&PLang=1&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
// fisik = "/birt/run?__report=report/one/mcu/mcu_fisik_history_v2_portal.rptdesign&__format=pdf&PType=fisik&PLang=1&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Rontgen":
|
||||
rontgen = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_xray_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Audiometri":
|
||||
audiometri = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_audiometri_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Spirometri":
|
||||
spirometri = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_spirometri_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "ECG":
|
||||
ekg = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_ecg_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Treadmill":
|
||||
treadmill = "/birt/frameset?__report=report/one/lab/rpt_hasil_so_treadmill_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
case "Papsmear":
|
||||
papsmear = "/birt/frameset?__report=report/one/lab/rpt_test_papsmear_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + d.So_id + "&tm=" + d.Datetime
|
||||
}
|
||||
}
|
||||
|
||||
var ResumeData models.ResumeMCU
|
||||
kesimpulan := ""
|
||||
// cover := ""
|
||||
|
||||
sql_resume := `
|
||||
SELECT
|
||||
Mcu_ResumeID,
|
||||
DATE_FORMAT(NOW(), '%y%m%d%H%i%s') AS Datetime
|
||||
FROM mcu_resume
|
||||
WHERE Mcu_ResumeT_OrderHeaderID = ?
|
||||
AND Mcu_ResumeIsActive = 'Y' AND Mcu_ResumeStatus = 'VAL'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&ResumeData, sql_resume, orderheaderID); err != nil {
|
||||
return returnTab, fmt.Errorf("error get data resume id: %v", err)
|
||||
}
|
||||
|
||||
if ResumeData.Mcu_ResumeID != "" {
|
||||
// cover = "/birt/frameset?__report=report/one/mcu/rpt_mcu_resume_cover_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + ResumeData.Mcu_ResumeID + "&tm=" + ResumeData.Datetime
|
||||
kesimpulan = "/birt/frameset?__report=report/one/mcu/rpt_mcu_saran_kesimpulan_v2_portal.rptdesign&__format=pdf&username=" + staffname + "&PID=" + ResumeData.Mcu_ResumeID + "&tm=" + ResumeData.Datetime
|
||||
}
|
||||
|
||||
if fisik != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Fisik", Link: fisik})
|
||||
}
|
||||
if rontgen != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Rontgen", Link: rontgen})
|
||||
}
|
||||
if ekg != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Elektromedik", Link: ekg})
|
||||
}
|
||||
if audiometri != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Audiometri", Link: audiometri})
|
||||
}
|
||||
if spirometri != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Spirometri", Link: spirometri})
|
||||
}
|
||||
if treadmill != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Treadmill", Link: treadmill})
|
||||
}
|
||||
if kesimpulan != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Kesimpulan", Link: kesimpulan})
|
||||
}
|
||||
if lab_rpt != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Lab", Link: lab_rpt})
|
||||
}
|
||||
if papsmear != "" {
|
||||
returnTab = append(returnTab, models.TabViewReportMcu{Name: "Papsmear", Link: papsmear})
|
||||
}
|
||||
|
||||
return returnTab, nil
|
||||
}
|
||||
|
||||
@@ -1,206 +1,206 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/utils"
|
||||
"fmt"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func NewServicesAutoComplete(uStore db.AppStore) *ServicesAutoComplete {
|
||||
|
||||
return &ServicesAutoComplete{
|
||||
AutoCompleteStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type ServicesAutoComplete struct {
|
||||
AutoCompleteStore db.AppStore
|
||||
}
|
||||
|
||||
// example autocomplete
|
||||
func (su *ServicesAutoComplete) GetAutoComplete(param string, pageOfParam string, limitOfStr string) (string, string, string, []AutoComplete, error) {
|
||||
// fmt.Println("ini param : ", param)
|
||||
|
||||
dummyAutoComplete := []AutoComplete{
|
||||
{
|
||||
Name: "Google",
|
||||
},
|
||||
{
|
||||
Name: "Google 1",
|
||||
},
|
||||
{
|
||||
Name: "Google 2",
|
||||
},
|
||||
{
|
||||
Name: "Google 3",
|
||||
},
|
||||
{
|
||||
Name: "Google 4",
|
||||
},
|
||||
{
|
||||
Name: "Google 5",
|
||||
},
|
||||
{
|
||||
Name: "Google 6",
|
||||
},
|
||||
{
|
||||
Name: "Gojek",
|
||||
},
|
||||
{
|
||||
Name: "Mozilla Firefox",
|
||||
},
|
||||
{
|
||||
Name: "Apple",
|
||||
},
|
||||
{
|
||||
Name: "Microsoft",
|
||||
},
|
||||
{
|
||||
Name: "Facebook",
|
||||
},
|
||||
{
|
||||
Name: "Amazon",
|
||||
},
|
||||
{
|
||||
Name: "Twitter",
|
||||
},
|
||||
{
|
||||
Name: "Instagram",
|
||||
},
|
||||
{
|
||||
Name: "Snapchat",
|
||||
},
|
||||
{
|
||||
Name: "LinkedIn",
|
||||
},
|
||||
{
|
||||
Name: "Netflix",
|
||||
},
|
||||
{
|
||||
Name: "YouTube",
|
||||
},
|
||||
{
|
||||
Name: "Reddit",
|
||||
},
|
||||
{
|
||||
Name: "WhatsApp",
|
||||
},
|
||||
{
|
||||
Name: "Pinterest",
|
||||
},
|
||||
{
|
||||
Name: "TikTok",
|
||||
},
|
||||
{
|
||||
Name: "Spotify",
|
||||
},
|
||||
{
|
||||
Name: "Zoom",
|
||||
},
|
||||
}
|
||||
|
||||
var textFound string
|
||||
var results []AutoComplete
|
||||
// var currentRes []AutoComplete
|
||||
// var oldResults []AutoComplete
|
||||
// var limit int = 3
|
||||
var count int = 0
|
||||
var foundCount int = 0
|
||||
var totalData int = 0
|
||||
var startIndex int = 0
|
||||
var endIndex int = 3
|
||||
|
||||
if len(dummyAutoComplete) > 0 {
|
||||
totalData = len(dummyAutoComplete)
|
||||
}
|
||||
|
||||
// pageOf, err := strconv.Atoi(pageOfParam)
|
||||
// if err != nil {
|
||||
// return "", "", "", nil, err
|
||||
// }
|
||||
|
||||
limit, err := strconv.Atoi(limitOfStr)
|
||||
if err != nil {
|
||||
return "", "", "", nil, err
|
||||
}
|
||||
|
||||
// find data search
|
||||
if pageOfParam == "1" {
|
||||
count = 0
|
||||
// for _, item := range dummyAutoComplete {
|
||||
// if utils.Contains(item.Name, param) {
|
||||
// results = append(results, item)
|
||||
// count++
|
||||
// if count == limit {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
for _, item := range dummyAutoComplete {
|
||||
if utils.Contains(item.Name, param) {
|
||||
// Check if the item is already in results
|
||||
found := false
|
||||
for _, res := range results {
|
||||
if res.Name == item.Name {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
// If not found, append it
|
||||
if !found {
|
||||
results = append(results, item)
|
||||
count++
|
||||
if count == limit {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// ketika klik load more
|
||||
// count = 0
|
||||
for _, item := range dummyAutoComplete {
|
||||
if utils.Contains(item.Name, param) {
|
||||
results = append(results, item)
|
||||
count++
|
||||
if count == limit {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
startIndex = 0
|
||||
endIndex = limit
|
||||
|
||||
if startIndex >= len(dummyAutoComplete) {
|
||||
return "", "max", "", nil, nil
|
||||
}
|
||||
|
||||
if endIndex > len(dummyAutoComplete) {
|
||||
endIndex = len(dummyAutoComplete)
|
||||
}
|
||||
|
||||
for _, item := range dummyAutoComplete[startIndex:endIndex] {
|
||||
found := false
|
||||
for _, res := range results {
|
||||
if res.Name == item.Name {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
// If not found, append it
|
||||
if !found {
|
||||
results = append(results, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foundCount = len(results)
|
||||
totalCount := len(dummyAutoComplete)
|
||||
textFound = fmt.Sprintf("Ditemukan %d dari %d", foundCount, totalCount)
|
||||
|
||||
return strconv.Itoa(totalData), strconv.Itoa(foundCount), textFound, results, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/utils"
|
||||
"fmt"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func NewServicesAutoComplete(uStore db.AppStore) *ServicesAutoComplete {
|
||||
|
||||
return &ServicesAutoComplete{
|
||||
AutoCompleteStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type ServicesAutoComplete struct {
|
||||
AutoCompleteStore db.AppStore
|
||||
}
|
||||
|
||||
// example autocomplete
|
||||
func (su *ServicesAutoComplete) GetAutoComplete(param string, pageOfParam string, limitOfStr string) (string, string, string, []AutoComplete, error) {
|
||||
// fmt.Println("ini param : ", param)
|
||||
|
||||
dummyAutoComplete := []AutoComplete{
|
||||
{
|
||||
Name: "Google",
|
||||
},
|
||||
{
|
||||
Name: "Google 1",
|
||||
},
|
||||
{
|
||||
Name: "Google 2",
|
||||
},
|
||||
{
|
||||
Name: "Google 3",
|
||||
},
|
||||
{
|
||||
Name: "Google 4",
|
||||
},
|
||||
{
|
||||
Name: "Google 5",
|
||||
},
|
||||
{
|
||||
Name: "Google 6",
|
||||
},
|
||||
{
|
||||
Name: "Gojek",
|
||||
},
|
||||
{
|
||||
Name: "Mozilla Firefox",
|
||||
},
|
||||
{
|
||||
Name: "Apple",
|
||||
},
|
||||
{
|
||||
Name: "Microsoft",
|
||||
},
|
||||
{
|
||||
Name: "Facebook",
|
||||
},
|
||||
{
|
||||
Name: "Amazon",
|
||||
},
|
||||
{
|
||||
Name: "Twitter",
|
||||
},
|
||||
{
|
||||
Name: "Instagram",
|
||||
},
|
||||
{
|
||||
Name: "Snapchat",
|
||||
},
|
||||
{
|
||||
Name: "LinkedIn",
|
||||
},
|
||||
{
|
||||
Name: "Netflix",
|
||||
},
|
||||
{
|
||||
Name: "YouTube",
|
||||
},
|
||||
{
|
||||
Name: "Reddit",
|
||||
},
|
||||
{
|
||||
Name: "WhatsApp",
|
||||
},
|
||||
{
|
||||
Name: "Pinterest",
|
||||
},
|
||||
{
|
||||
Name: "TikTok",
|
||||
},
|
||||
{
|
||||
Name: "Spotify",
|
||||
},
|
||||
{
|
||||
Name: "Zoom",
|
||||
},
|
||||
}
|
||||
|
||||
var textFound string
|
||||
var results []AutoComplete
|
||||
// var currentRes []AutoComplete
|
||||
// var oldResults []AutoComplete
|
||||
// var limit int = 3
|
||||
var count int = 0
|
||||
var foundCount int = 0
|
||||
var totalData int = 0
|
||||
var startIndex int = 0
|
||||
var endIndex int = 3
|
||||
|
||||
if len(dummyAutoComplete) > 0 {
|
||||
totalData = len(dummyAutoComplete)
|
||||
}
|
||||
|
||||
// pageOf, err := strconv.Atoi(pageOfParam)
|
||||
// if err != nil {
|
||||
// return "", "", "", nil, err
|
||||
// }
|
||||
|
||||
limit, err := strconv.Atoi(limitOfStr)
|
||||
if err != nil {
|
||||
return "", "", "", nil, err
|
||||
}
|
||||
|
||||
// find data search
|
||||
if pageOfParam == "1" {
|
||||
count = 0
|
||||
// for _, item := range dummyAutoComplete {
|
||||
// if utils.Contains(item.Name, param) {
|
||||
// results = append(results, item)
|
||||
// count++
|
||||
// if count == limit {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
for _, item := range dummyAutoComplete {
|
||||
if utils.Contains(item.Name, param) {
|
||||
// Check if the item is already in results
|
||||
found := false
|
||||
for _, res := range results {
|
||||
if res.Name == item.Name {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
// If not found, append it
|
||||
if !found {
|
||||
results = append(results, item)
|
||||
count++
|
||||
if count == limit {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// ketika klik load more
|
||||
// count = 0
|
||||
for _, item := range dummyAutoComplete {
|
||||
if utils.Contains(item.Name, param) {
|
||||
results = append(results, item)
|
||||
count++
|
||||
if count == limit {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
startIndex = 0
|
||||
endIndex = limit
|
||||
|
||||
if startIndex >= len(dummyAutoComplete) {
|
||||
return "", "max", "", nil, nil
|
||||
}
|
||||
|
||||
if endIndex > len(dummyAutoComplete) {
|
||||
endIndex = len(dummyAutoComplete)
|
||||
}
|
||||
|
||||
for _, item := range dummyAutoComplete[startIndex:endIndex] {
|
||||
found := false
|
||||
for _, res := range results {
|
||||
if res.Name == item.Name {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
// If not found, append it
|
||||
if !found {
|
||||
results = append(results, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foundCount = len(results)
|
||||
totalCount := len(dummyAutoComplete)
|
||||
textFound = fmt.Sprintf("Ditemukan %d dari %d", foundCount, totalCount)
|
||||
|
||||
return strconv.Itoa(totalData), strconv.Itoa(foundCount), textFound, results, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,37 +1,37 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
)
|
||||
|
||||
type DetailMcuServices struct {
|
||||
DetailMcuStore db.AppStore
|
||||
}
|
||||
|
||||
func NewDetailMcuServices(uStore db.AppStore) *DetailMcuServices {
|
||||
return &DetailMcuServices{
|
||||
DetailMcuStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (dmcu *DetailMcuServices) GetBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "/dev/employeeanalytic/",
|
||||
},
|
||||
{
|
||||
Item: title,
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
return breadcrumb, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
)
|
||||
|
||||
type DetailMcuServices struct {
|
||||
DetailMcuStore db.AppStore
|
||||
}
|
||||
|
||||
func NewDetailMcuServices(uStore db.AppStore) *DetailMcuServices {
|
||||
return &DetailMcuServices{
|
||||
DetailMcuStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (dmcu *DetailMcuServices) GetBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "/dev/employeeanalytic/",
|
||||
},
|
||||
{
|
||||
Item: title,
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesEmployee(u Employee, uStore db.AppStore) *ServicesEmployee {
|
||||
|
||||
return &ServicesEmployee{
|
||||
Employee: u,
|
||||
EmployeeStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type Employee struct {
|
||||
ID int `json:"id"`
|
||||
Employeename string `json:"Employeename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type EmployeeService struct {
|
||||
EmployeeID int `json:"EmployeeID"`
|
||||
EmployeeTitle string `json:"EmployeeTitle"`
|
||||
EmployeeDescription string `json:"EmployeeDescription"`
|
||||
EmployeeStartDate string `json:"EmployeeStartDate"`
|
||||
EmployeeEndDate string `json:"EmployeeEndDate"`
|
||||
}
|
||||
|
||||
type ServicesEmployee struct {
|
||||
Employee Employee
|
||||
EmployeeStore db.AppStore
|
||||
}
|
||||
|
||||
func (se *ServicesEmployee) GetEmployeeService() ([]EmployeeService, error) {
|
||||
|
||||
data := []EmployeeService{
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Calon Karyawan",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 2,
|
||||
EmployeeTitle: "MCU Karyawan",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Eselon 1",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Eselon 2",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesEmployee(u Employee, uStore db.AppStore) *ServicesEmployee {
|
||||
|
||||
return &ServicesEmployee{
|
||||
Employee: u,
|
||||
EmployeeStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type Employee struct {
|
||||
ID int `json:"id"`
|
||||
Employeename string `json:"Employeename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type EmployeeService struct {
|
||||
EmployeeID int `json:"EmployeeID"`
|
||||
EmployeeTitle string `json:"EmployeeTitle"`
|
||||
EmployeeDescription string `json:"EmployeeDescription"`
|
||||
EmployeeStartDate string `json:"EmployeeStartDate"`
|
||||
EmployeeEndDate string `json:"EmployeeEndDate"`
|
||||
}
|
||||
|
||||
type ServicesEmployee struct {
|
||||
Employee Employee
|
||||
EmployeeStore db.AppStore
|
||||
}
|
||||
|
||||
func (se *ServicesEmployee) GetEmployeeService() ([]EmployeeService, error) {
|
||||
|
||||
data := []EmployeeService{
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Calon Karyawan",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 2,
|
||||
EmployeeTitle: "MCU Karyawan",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Eselon 1",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
{
|
||||
EmployeeID: 1,
|
||||
EmployeeTitle: "MCU Eselon 2",
|
||||
EmployeeDescription: "Tanggal Pelaksanaan",
|
||||
EmployeeStartDate: "01/04/2024",
|
||||
EmployeeEndDate: "06/04/2024",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1,128 +1,128 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type EmployeeAnalyticServices struct {
|
||||
EmployeeAnalyticStore db.AppStore
|
||||
}
|
||||
|
||||
func NewEmployeeAnalyticServices(uStore db.AppStore) *EmployeeAnalyticServices {
|
||||
return &EmployeeAnalyticServices{
|
||||
EmployeeAnalyticStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) DummyDataTest() ([]models.DashboardPic, error) {
|
||||
employees := []models.DashboardPic{
|
||||
{
|
||||
Mgm_McuID: 1,
|
||||
Mgm_McuLabel: "Employee 1",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "Yes",
|
||||
Mgm_McuBisaTambahPemeriksaan: "No",
|
||||
Mgm_McuCorporateID: 101,
|
||||
Mgm_McuNumber: "EMP001",
|
||||
Mgm_McuNumberNational: "NAT001",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet.",
|
||||
Mgm_McuStartDate: "2024-01-01",
|
||||
Mgm_McuEndDate: "2024-12-31",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
{
|
||||
Mgm_McuID: 2,
|
||||
Mgm_McuLabel: "Employee 2",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "No",
|
||||
Mgm_McuBisaTambahPemeriksaan: "Yes",
|
||||
Mgm_McuCorporateID: 102,
|
||||
Mgm_McuNumber: "EMP002",
|
||||
Mgm_McuNumberNational: "NAT002",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet consectetur.",
|
||||
Mgm_McuStartDate: "2024-02-15",
|
||||
Mgm_McuEndDate: "2024-11-30",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
}
|
||||
|
||||
return employees, nil
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) ListingEmployeeAnalytic(search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.DashboardPic, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPic
|
||||
var totalData int
|
||||
|
||||
if len(startdate) == 0 {
|
||||
startdate = "1900-01-01"
|
||||
}
|
||||
if len(enddate) == 0 {
|
||||
enddate = "9999-12-12"
|
||||
}
|
||||
|
||||
prmLabel := "%" + search + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, q, prmLabel, startdate, enddate); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
ORDER BY Mgm_McuID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, prmLabel, startdate, enddate, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get data: %v", err)
|
||||
}
|
||||
logger.Info("Resp", zap.Any("Respsone", ret))
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type EmployeeAnalyticServices struct {
|
||||
EmployeeAnalyticStore db.AppStore
|
||||
}
|
||||
|
||||
func NewEmployeeAnalyticServices(uStore db.AppStore) *EmployeeAnalyticServices {
|
||||
return &EmployeeAnalyticServices{
|
||||
EmployeeAnalyticStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) {
|
||||
breadcrumb := models.BreadCrumbV1{
|
||||
Title: title,
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Employee Health Medical Analytic",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return breadcrumb, nil
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) DummyDataTest() ([]models.DashboardPic, error) {
|
||||
employees := []models.DashboardPic{
|
||||
{
|
||||
Mgm_McuID: 1,
|
||||
Mgm_McuLabel: "Employee 1",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "Yes",
|
||||
Mgm_McuBisaTambahPemeriksaan: "No",
|
||||
Mgm_McuCorporateID: 101,
|
||||
Mgm_McuNumber: "EMP001",
|
||||
Mgm_McuNumberNational: "NAT001",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet.",
|
||||
Mgm_McuStartDate: "2024-01-01",
|
||||
Mgm_McuEndDate: "2024-12-31",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
{
|
||||
Mgm_McuID: 2,
|
||||
Mgm_McuLabel: "Employee 2",
|
||||
Mgm_McuFlagRelasiBayarSendiri: "No",
|
||||
Mgm_McuBisaTambahPemeriksaan: "Yes",
|
||||
Mgm_McuCorporateID: 102,
|
||||
Mgm_McuNumber: "EMP002",
|
||||
Mgm_McuNumberNational: "NAT002",
|
||||
Mgm_McuNote: "Lorem ipsum dolor sit amet consectetur.",
|
||||
Mgm_McuStartDate: "2024-02-15",
|
||||
Mgm_McuEndDate: "2024-11-30",
|
||||
Mgm_McuIsActive: "Y",
|
||||
},
|
||||
}
|
||||
|
||||
return employees, nil
|
||||
}
|
||||
|
||||
func (ea *EmployeeAnalyticServices) ListingEmployeeAnalytic(search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.DashboardPic, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.DashboardPic
|
||||
var totalData int
|
||||
|
||||
if len(startdate) == 0 {
|
||||
startdate = "1900-01-01"
|
||||
}
|
||||
if len(enddate) == 0 {
|
||||
enddate = "9999-12-12"
|
||||
}
|
||||
|
||||
prmLabel := "%" + search + "%"
|
||||
offset := (currentpage - 1) * rowperpage
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, q, prmLabel, startdate, enddate); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
q = `
|
||||
SELECT
|
||||
Mgm_McuID,
|
||||
Mgm_McuLabel,
|
||||
Mgm_McuFlagRelasiBayarSendiri,
|
||||
Mgm_McuBisaTambahPemeriksaan,
|
||||
Mgm_McuCorporateID,
|
||||
Mgm_McuNumber,
|
||||
Mgm_McuNumberNational,
|
||||
Mgm_McuNote,
|
||||
DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate,
|
||||
DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate,
|
||||
Mgm_McuIsActive
|
||||
FROM mgm_mcu
|
||||
WHERE Mgm_McuIsActive = 'Y'
|
||||
AND Mgm_McuLabel LIKE ?
|
||||
AND Mgm_McuStartDate >= ?
|
||||
AND Mgm_McuEndDate <= ?
|
||||
ORDER BY Mgm_McuID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&ret, q, prmLabel, startdate, enddate, rowperpage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get data: %v", err)
|
||||
}
|
||||
logger.Info("Resp", zap.Any("Respsone", ret))
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage)))
|
||||
return ret, totalPage, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,232 +1,232 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesKesimpulan(uStore db.AppStore) *KesimpulanServices {
|
||||
return &KesimpulanServices{
|
||||
KesimpulanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type KesimpulanServices struct {
|
||||
KesimpulanStore db.AppStore
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listLab),
|
||||
)
|
||||
return listLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listLab),
|
||||
)
|
||||
return listLab, nil
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanNonLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listNonLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listNonLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data NON lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listNonLab),
|
||||
)
|
||||
return listNonLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listNonLab),
|
||||
)
|
||||
return listNonLab, nil
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanFisik(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listFisik []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalFisik string
|
||||
if len(dataTot) > 0 {
|
||||
totalFisik = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalFisik),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listFisik, query, totalFisik, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data fisik",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listFisik),
|
||||
)
|
||||
return listFisik, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
return listFisik, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesKesimpulan(uStore db.AppStore) *KesimpulanServices {
|
||||
return &KesimpulanServices{
|
||||
KesimpulanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type KesimpulanServices struct {
|
||||
KesimpulanStore db.AppStore
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'L'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listLab),
|
||||
)
|
||||
return listLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listLab),
|
||||
)
|
||||
return listLab, nil
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanNonLab(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listNonLab []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalLab string
|
||||
if len(dataTot) > 0 {
|
||||
totalLab = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalLab),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'NL'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listNonLab, query, totalLab, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data NON lab",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listNonLab),
|
||||
)
|
||||
return listNonLab, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cekkkk", listNonLab),
|
||||
)
|
||||
return listNonLab, nil
|
||||
}
|
||||
|
||||
func (k *KesimpulanServices) GetListKesimpulanFisik(id string) ([]models.ModelKesimpulanLab, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listFisik []models.ModelKesimpulanLab
|
||||
var dataTot []models.ModelKesimpulanLab
|
||||
|
||||
qryTot := `select '' as nomor,
|
||||
'' as Test, sum(total) as total
|
||||
from(
|
||||
select count(*) as total
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ) x`
|
||||
|
||||
err := dbx.Handlex.Select(&dataTot, qryTot, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get total",
|
||||
zap.Any("id", id),
|
||||
zap.Any("total data", dataTot),
|
||||
)
|
||||
// return dataTot, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
// Extracting the Total value
|
||||
var totalFisik string
|
||||
if len(dataTot) > 0 {
|
||||
totalFisik = dataTot[0].Total
|
||||
}
|
||||
|
||||
logger.Info("data",
|
||||
zap.Any("id", id),
|
||||
zap.Any("cek total", totalFisik),
|
||||
)
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC) AS nomor,
|
||||
ifnull(Nat_TestName ,Mcu_KelainanGroupName) as Test,
|
||||
cast(count(Mgm_HeaderT_OrderHeaderID)/?*100 as decimal(2,0)) as total
|
||||
|
||||
FROM mgm_header
|
||||
join mgm_detail on Mgm_DetailMgm_HeaderID = Mgm_HeaderID and Mgm_DetailIsActive = 'Y'
|
||||
join mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID
|
||||
join mcu_kelainangroup on Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
||||
left join nat_test on Nat_TestCode = Mgm_HeaderNat_TestCode
|
||||
|
||||
where Mgm_HeaderIsActive = 'Y' and Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderType = 'F'
|
||||
and Mgm_HeaderIsNormal = 'N'
|
||||
group by Mgm_DetailMcu_KelainanID, Mgm_HeaderType ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC
|
||||
LIMIT 3`
|
||||
|
||||
err = dbx.Handlex.Select(&listFisik, query, totalFisik, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data fisik",
|
||||
zap.Any("id", id),
|
||||
zap.Any("list data", listFisik),
|
||||
)
|
||||
return listFisik, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
return listFisik, nil
|
||||
}
|
||||
|
||||
@@ -1,287 +1,287 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLandingPage(uStore db.AppStore) *ServicesLandingPage {
|
||||
|
||||
return &ServicesLandingPage{
|
||||
|
||||
LandingPageStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type LandingPage struct {
|
||||
ID int `json:"id"`
|
||||
LandingPagename string `json:"LandingPagename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ClientService struct {
|
||||
ClientServiceID int `json:"ClientServiceID"`
|
||||
ClientServiceName string `json:"ClientServiceName"`
|
||||
ClientServiceDescription string `json:"ClientServiceDescription"`
|
||||
ClientServiceIcon string `json:"ClientServiceIcon"`
|
||||
ClientServiceLink string `json:"ClientServiceLink"`
|
||||
}
|
||||
type AdvantageClient struct {
|
||||
AdvantageClientID int `json:"AdvantageClientID"`
|
||||
AdvantageClientName string `json:"AdvantageClientName"`
|
||||
AdvantageClientDesc string `json:"AdvantageClientDesc"`
|
||||
}
|
||||
|
||||
type Promotion struct {
|
||||
PromotionID int `json:"PromotionID"`
|
||||
PromotionAsset string `json:"PromotionAsset"`
|
||||
PromotionLink string `json:"PromotionLink"`
|
||||
}
|
||||
|
||||
type FooterSubNav struct {
|
||||
FootSubNavID int `json:"FootSubNavID"`
|
||||
FootSubNavTitle string `json:"FootSubNavTitle"`
|
||||
FootSubNavLink string `json:"FootSubNavLink"`
|
||||
}
|
||||
|
||||
type FooterNav struct {
|
||||
FooterNavID int `json:"FooterNavID"`
|
||||
FooterNavTitle string `json:"FooterNavTitle"`
|
||||
FooteSubNav []FooterSubNav `json:"FooterSubNav,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLandingPage struct {
|
||||
LandingPage LandingPage
|
||||
LandingPageStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetAllLandingPages() ([]LandingPage, error) {
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.LandingPageStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []LandingPage{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
LandingPages := []LandingPage{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
|
||||
LandingPages = append(LandingPages, su.LandingPage)
|
||||
}
|
||||
|
||||
return LandingPages, nil
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetLandingPageById(id int) (LandingPage, error) {
|
||||
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.LandingPageStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.LandingPage.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.LandingPage.ID,
|
||||
).Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
return su.LandingPage, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientService() ([]ClientService, error) {
|
||||
|
||||
data := []ClientService{
|
||||
{
|
||||
ClientServiceID: 1,
|
||||
ClientServiceName: "In House Clinic",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "uil:clinic-medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 2,
|
||||
ClientServiceName: "Laboratorium Test",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "healthicons:clinical-a-outline",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 3,
|
||||
ClientServiceName: "Medical Check Up",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 4,
|
||||
ClientServiceName: "Medical Check Up 2",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 5,
|
||||
ClientServiceName: "Medical Check Up 3",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientAdvantage() ([]AdvantageClient, error) {
|
||||
|
||||
data := []AdvantageClient{
|
||||
{
|
||||
AdvantageClientID: 1,
|
||||
AdvantageClientName: "ISO Certificate",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory has obtained ISO 15189:2009 (ISO 15189:2007) Accreditation from the National Accreditation Committee (KAN) and the Health Laboratory Accreditation Commission (KALK).",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 2,
|
||||
AdvantageClientName: "Modern Technology",
|
||||
AdvantageClientDesc: "Laboratory Information System (LIS) is an information system in which laboratory equipment and diagnostic support have been integrated automatically so that examination results can be immediately filled in in employee data. This eliminates the possibility of human error.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 3,
|
||||
AdvantageClientName: "Good Quality Facilities",
|
||||
AdvantageClientDesc: "The laboratory and medical support equipment used at the Westerindo Clinical Laboratory is international scale for precise, fast and accurate results. Lab and medical equipment certificates are periodically renewed according to standards.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 4,
|
||||
AdvantageClientName: "Professional Service",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is committed to providing professional and excellent service. Therefore, all staff and doctors at the Westerindo Clinical Laboratory have competency certification according to their field.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 5,
|
||||
AdvantageClientName: "Experienced",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is very experienced in carrying out Medical Check Ups both onsite and insite, in all corners of Indonesia. Serving various kinds of companies, from oil and gas companies, automotive, manufacturing, offices, and others.",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetPromotionList() ([]Promotion, error) {
|
||||
|
||||
data := []Promotion{
|
||||
{
|
||||
PromotionID: 1,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_1.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 2,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 3,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 4,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 5,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetFooterNavList() ([]FooterNav, error) {
|
||||
data := []FooterNav{
|
||||
{
|
||||
FooterNavID: 1,
|
||||
FooterNavTitle: "Dashboard",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Dashboard #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Dashboard #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 2,
|
||||
FooterNavTitle: "Benefit",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Benefit #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Benefit #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 3,
|
||||
FooterNavTitle: "Finance & Claims",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Finance & Claims #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Finance & Claims #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 4,
|
||||
FooterNavTitle: "Memberships",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Memberships #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Memberships #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLandingPage(uStore db.AppStore) *ServicesLandingPage {
|
||||
|
||||
return &ServicesLandingPage{
|
||||
|
||||
LandingPageStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type LandingPage struct {
|
||||
ID int `json:"id"`
|
||||
LandingPagename string `json:"LandingPagename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ClientService struct {
|
||||
ClientServiceID int `json:"ClientServiceID"`
|
||||
ClientServiceName string `json:"ClientServiceName"`
|
||||
ClientServiceDescription string `json:"ClientServiceDescription"`
|
||||
ClientServiceIcon string `json:"ClientServiceIcon"`
|
||||
ClientServiceLink string `json:"ClientServiceLink"`
|
||||
}
|
||||
type AdvantageClient struct {
|
||||
AdvantageClientID int `json:"AdvantageClientID"`
|
||||
AdvantageClientName string `json:"AdvantageClientName"`
|
||||
AdvantageClientDesc string `json:"AdvantageClientDesc"`
|
||||
}
|
||||
|
||||
type Promotion struct {
|
||||
PromotionID int `json:"PromotionID"`
|
||||
PromotionAsset string `json:"PromotionAsset"`
|
||||
PromotionLink string `json:"PromotionLink"`
|
||||
}
|
||||
|
||||
type FooterSubNav struct {
|
||||
FootSubNavID int `json:"FootSubNavID"`
|
||||
FootSubNavTitle string `json:"FootSubNavTitle"`
|
||||
FootSubNavLink string `json:"FootSubNavLink"`
|
||||
}
|
||||
|
||||
type FooterNav struct {
|
||||
FooterNavID int `json:"FooterNavID"`
|
||||
FooterNavTitle string `json:"FooterNavTitle"`
|
||||
FooteSubNav []FooterSubNav `json:"FooterSubNav,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLandingPage struct {
|
||||
LandingPage LandingPage
|
||||
LandingPageStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetAllLandingPages() ([]LandingPage, error) {
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.LandingPageStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []LandingPage{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
LandingPages := []LandingPage{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
|
||||
LandingPages = append(LandingPages, su.LandingPage)
|
||||
}
|
||||
|
||||
return LandingPages, nil
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetLandingPageById(id int) (LandingPage, error) {
|
||||
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.LandingPageStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.LandingPage.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.LandingPage.ID,
|
||||
).Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
return su.LandingPage, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientService() ([]ClientService, error) {
|
||||
|
||||
data := []ClientService{
|
||||
{
|
||||
ClientServiceID: 1,
|
||||
ClientServiceName: "In House Clinic",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "uil:clinic-medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 2,
|
||||
ClientServiceName: "Laboratorium Test",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "healthicons:clinical-a-outline",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 3,
|
||||
ClientServiceName: "Medical Check Up",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 4,
|
||||
ClientServiceName: "Medical Check Up 2",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 5,
|
||||
ClientServiceName: "Medical Check Up 3",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientAdvantage() ([]AdvantageClient, error) {
|
||||
|
||||
data := []AdvantageClient{
|
||||
{
|
||||
AdvantageClientID: 1,
|
||||
AdvantageClientName: "ISO Certificate",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory has obtained ISO 15189:2009 (ISO 15189:2007) Accreditation from the National Accreditation Committee (KAN) and the Health Laboratory Accreditation Commission (KALK).",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 2,
|
||||
AdvantageClientName: "Modern Technology",
|
||||
AdvantageClientDesc: "Laboratory Information System (LIS) is an information system in which laboratory equipment and diagnostic support have been integrated automatically so that examination results can be immediately filled in in employee data. This eliminates the possibility of human error.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 3,
|
||||
AdvantageClientName: "Good Quality Facilities",
|
||||
AdvantageClientDesc: "The laboratory and medical support equipment used at the Westerindo Clinical Laboratory is international scale for precise, fast and accurate results. Lab and medical equipment certificates are periodically renewed according to standards.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 4,
|
||||
AdvantageClientName: "Professional Service",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is committed to providing professional and excellent service. Therefore, all staff and doctors at the Westerindo Clinical Laboratory have competency certification according to their field.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 5,
|
||||
AdvantageClientName: "Experienced",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is very experienced in carrying out Medical Check Ups both onsite and insite, in all corners of Indonesia. Serving various kinds of companies, from oil and gas companies, automotive, manufacturing, offices, and others.",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetPromotionList() ([]Promotion, error) {
|
||||
|
||||
data := []Promotion{
|
||||
{
|
||||
PromotionID: 1,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_1.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 2,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 3,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 4,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 5,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetFooterNavList() ([]FooterNav, error) {
|
||||
data := []FooterNav{
|
||||
{
|
||||
FooterNavID: 1,
|
||||
FooterNavTitle: "Dashboard",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Dashboard #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Dashboard #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 2,
|
||||
FooterNavTitle: "Benefit",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Benefit #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Benefit #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 3,
|
||||
FooterNavTitle: "Finance & Claims",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Finance & Claims #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Finance & Claims #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 4,
|
||||
FooterNavTitle: "Memberships",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Memberships #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Memberships #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLogin(u Login, uStore db.AppStore) *ServicesLogin {
|
||||
|
||||
return &ServicesLogin{
|
||||
Login: u,
|
||||
LoginStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type Login struct {
|
||||
ID int `json:"id"`
|
||||
Loginname string `json:"Loginname"`
|
||||
Email string `json:"Email"`
|
||||
Password string `json:"Password"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLogin struct {
|
||||
Login Login
|
||||
LoginStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLogin) GetLogin(Email string, Password string) (Login, error) {
|
||||
|
||||
query := `SELECT id, Loginname, Email, Password, created_at FROM Login
|
||||
WHERE Email = ? AND Password = ?`
|
||||
|
||||
stmt, err := su.LoginStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return Login{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.Login.Email = Email
|
||||
su.Login.Password = Password
|
||||
err = stmt.QueryRow(
|
||||
su.Login.Email,
|
||||
su.Login.Password,
|
||||
).Scan(
|
||||
&su.Login.ID,
|
||||
&su.Login.Loginname,
|
||||
&su.Login.Email,
|
||||
&su.Login.Password,
|
||||
&su.Login.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return Login{}, err
|
||||
}
|
||||
|
||||
return su.Login, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLogin(u Login, uStore db.AppStore) *ServicesLogin {
|
||||
|
||||
return &ServicesLogin{
|
||||
Login: u,
|
||||
LoginStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type Login struct {
|
||||
ID int `json:"id"`
|
||||
Loginname string `json:"Loginname"`
|
||||
Email string `json:"Email"`
|
||||
Password string `json:"Password"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLogin struct {
|
||||
Login Login
|
||||
LoginStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLogin) GetLogin(Email string, Password string) (Login, error) {
|
||||
|
||||
query := `SELECT id, Loginname, Email, Password, created_at FROM Login
|
||||
WHERE Email = ? AND Password = ?`
|
||||
|
||||
stmt, err := su.LoginStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return Login{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.Login.Email = Email
|
||||
su.Login.Password = Password
|
||||
err = stmt.QueryRow(
|
||||
su.Login.Email,
|
||||
su.Login.Password,
|
||||
).Scan(
|
||||
&su.Login.ID,
|
||||
&su.Login.Loginname,
|
||||
&su.Login.Email,
|
||||
&su.Login.Password,
|
||||
&su.Login.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return Login{}, err
|
||||
}
|
||||
|
||||
return su.Login, nil
|
||||
}
|
||||
|
||||
@@ -1,349 +1,349 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
dbx "cpone/package/database"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesMasterMenuUserGroup(uStore db.AppStore) *ServicesMasterMenuUserGroup {
|
||||
|
||||
return &ServicesMasterMenuUserGroup{
|
||||
|
||||
MasterMenuUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
// MasterMenu struct
|
||||
type Breadcrumb struct {
|
||||
IDBreadcrumb string `json:"id_breadcrumb"`
|
||||
Name string `json:"name"`
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
||||
type ChildrenMenu struct {
|
||||
ChildrenParentID string `json:"children_parent_id"`
|
||||
ChildrenMenuID string `json:"children_menu_id"`
|
||||
ChildrenMenuName string `json:"children_menu_name"`
|
||||
ChildrenMenuURL string `json:"children_menu_url"`
|
||||
// Breadcrumb []Breadcrumb `json:"breadcrumb"`
|
||||
}
|
||||
|
||||
type MasterMenu struct {
|
||||
ID string `json:"id"`
|
||||
ParentMenuID string `json:"parent_menu_id"`
|
||||
ParentMenuName string `json:"parent_menu_name"`
|
||||
ParentUrl string `json:"parent_url"`
|
||||
ParentIcon string `json:"parent_icon"`
|
||||
Children []ChildrenMenu `json:"children"`
|
||||
}
|
||||
|
||||
type ServicesMasterMenuUserGroup struct {
|
||||
MasterMenuUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
type AutoComplete struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroup() ([]models.UserGroup, error) {
|
||||
data := []models.UserGroup{
|
||||
{UserGroupID: 1, UserGroupKode: "A", UserGroupName: "UG1"},
|
||||
{UserGroupID: 2, UserGroupKode: "B", UserGroupName: "UG2"},
|
||||
{UserGroupID: 3, UserGroupKode: "C", UserGroupName: "UG3"},
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroupByID(id string) (models.UserGroup, error) {
|
||||
listdata := []models.UserGroup{
|
||||
{UserGroupID: 1, UserGroupKode: "A", UserGroupName: "UG1"},
|
||||
{UserGroupID: 2, UserGroupKode: "B", UserGroupName: "UG2"},
|
||||
{UserGroupID: 3, UserGroupKode: "C", UserGroupName: "UG3"},
|
||||
}
|
||||
var data models.UserGroup
|
||||
idData, err := strconv.Atoi(id)
|
||||
if err != nil {
|
||||
return data, fmt.Errorf("pack %v: %w", "Error", err)
|
||||
}
|
||||
for _, v := range listdata {
|
||||
|
||||
if v.UserGroupID == idData {
|
||||
data = v
|
||||
}
|
||||
}
|
||||
// time.Sleep(5 * time.Second)
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// try
|
||||
func (su *ServicesMasterMenuUserGroup) GetListMasterUserGroup() ([]models.UserGroupV1, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
order by M_UserGroupID ASC
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query); err != nil {
|
||||
return nil, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
return userGroupList, nil
|
||||
}
|
||||
|
||||
func (su *ServicesMasterMenuUserGroup) GetListBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master User Group",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User Group",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
// if utils.Contains(breadcrumb.Title, title) {
|
||||
// ret = breadcrumb
|
||||
// return ret, nil
|
||||
// }
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroupByIDV1(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.UserGroupV1
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM m_usergroup
|
||||
WHERE M_UserGroupID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data ug by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *ServicesMasterMenuUserGroup) AddUserGroup(code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `INSERT INTO m_usergroup
|
||||
(M_UserGroupCode,
|
||||
M_UserGroupName)
|
||||
VALUES (?,?);`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = ug.GetUserGroupByIDV1(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *ServicesMasterMenuUserGroup) EditUserGroup(id string, code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y' AND M_UserGroupID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupCode = ?,
|
||||
M_UserGroupName= ?
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetUserGroupByIDV1(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) DeleteUserGroup(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupIsActive = 'N'
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete usergroup",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetUserGroupByIDV1(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (su *ServicesMasterMenuUserGroup) GetListMasterUserGroupV2(search string, currentPage int, rowPerPage int) ([]models.UserGroupV1, int, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
order by M_UserGroupID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return userGroupList, totalPage, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
dbx "cpone/package/database"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesMasterMenuUserGroup(uStore db.AppStore) *ServicesMasterMenuUserGroup {
|
||||
|
||||
return &ServicesMasterMenuUserGroup{
|
||||
|
||||
MasterMenuUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
// MasterMenu struct
|
||||
type Breadcrumb struct {
|
||||
IDBreadcrumb string `json:"id_breadcrumb"`
|
||||
Name string `json:"name"`
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
||||
type ChildrenMenu struct {
|
||||
ChildrenParentID string `json:"children_parent_id"`
|
||||
ChildrenMenuID string `json:"children_menu_id"`
|
||||
ChildrenMenuName string `json:"children_menu_name"`
|
||||
ChildrenMenuURL string `json:"children_menu_url"`
|
||||
// Breadcrumb []Breadcrumb `json:"breadcrumb"`
|
||||
}
|
||||
|
||||
type MasterMenu struct {
|
||||
ID string `json:"id"`
|
||||
ParentMenuID string `json:"parent_menu_id"`
|
||||
ParentMenuName string `json:"parent_menu_name"`
|
||||
ParentUrl string `json:"parent_url"`
|
||||
ParentIcon string `json:"parent_icon"`
|
||||
Children []ChildrenMenu `json:"children"`
|
||||
}
|
||||
|
||||
type ServicesMasterMenuUserGroup struct {
|
||||
MasterMenuUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
type AutoComplete struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroup() ([]models.UserGroup, error) {
|
||||
data := []models.UserGroup{
|
||||
{UserGroupID: 1, UserGroupKode: "A", UserGroupName: "UG1"},
|
||||
{UserGroupID: 2, UserGroupKode: "B", UserGroupName: "UG2"},
|
||||
{UserGroupID: 3, UserGroupKode: "C", UserGroupName: "UG3"},
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroupByID(id string) (models.UserGroup, error) {
|
||||
listdata := []models.UserGroup{
|
||||
{UserGroupID: 1, UserGroupKode: "A", UserGroupName: "UG1"},
|
||||
{UserGroupID: 2, UserGroupKode: "B", UserGroupName: "UG2"},
|
||||
{UserGroupID: 3, UserGroupKode: "C", UserGroupName: "UG3"},
|
||||
}
|
||||
var data models.UserGroup
|
||||
idData, err := strconv.Atoi(id)
|
||||
if err != nil {
|
||||
return data, fmt.Errorf("pack %v: %w", "Error", err)
|
||||
}
|
||||
for _, v := range listdata {
|
||||
|
||||
if v.UserGroupID == idData {
|
||||
data = v
|
||||
}
|
||||
}
|
||||
// time.Sleep(5 * time.Second)
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// try
|
||||
func (su *ServicesMasterMenuUserGroup) GetListMasterUserGroup() ([]models.UserGroupV1, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
order by M_UserGroupID ASC
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query); err != nil {
|
||||
return nil, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
return userGroupList, nil
|
||||
}
|
||||
|
||||
func (su *ServicesMasterMenuUserGroup) GetListBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master User Group",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User Group",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
// if utils.Contains(breadcrumb.Title, title) {
|
||||
// ret = breadcrumb
|
||||
// return ret, nil
|
||||
// }
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) GetUserGroupByIDV1(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.UserGroupV1
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM m_usergroup
|
||||
WHERE M_UserGroupID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data ug by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *ServicesMasterMenuUserGroup) AddUserGroup(code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `INSERT INTO m_usergroup
|
||||
(M_UserGroupCode,
|
||||
M_UserGroupName)
|
||||
VALUES (?,?);`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = ug.GetUserGroupByIDV1(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *ServicesMasterMenuUserGroup) EditUserGroup(id string, code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y' AND M_UserGroupID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupCode = ?,
|
||||
M_UserGroupName= ?
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetUserGroupByIDV1(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *ServicesMasterMenuUserGroup) DeleteUserGroup(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupIsActive = 'N'
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete usergroup",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetUserGroupByIDV1(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (su *ServicesMasterMenuUserGroup) GetListMasterUserGroupV2(search string, currentPage int, rowPerPage int) ([]models.UserGroupV1, int, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
order by M_UserGroupID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return userGroupList, totalPage, nil
|
||||
}
|
||||
|
||||
@@ -1,74 +1,74 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type McuDaftarPesertaServices struct {
|
||||
McuDaftarPesertaStore db.AppStore
|
||||
}
|
||||
|
||||
func NewMcuDaftarPesertaServices(uStore db.AppStore) *McuDaftarPesertaServices {
|
||||
return &McuDaftarPesertaServices{
|
||||
McuDaftarPesertaStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (mdp *McuDaftarPesertaServices) GetListMcuDaftarPeserta(id string, currentPage int, rowPerPage int) ([]models.ModelMcuDaftarPeserta, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listDaftarPeserta []models.ModelMcuDaftarPeserta
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
|
||||
querytotal := `SELECT COUNT(*)
|
||||
FROM t_orderheader
|
||||
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
||||
AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderMgm_McuID = ?`
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, id); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
query := `SELECT T_OrderHeaderID,
|
||||
T_OrderHeaderDate,
|
||||
T_OrderHeaderLabNumber,
|
||||
T_OrderHeaderM_PatientAge,
|
||||
M_PatientID,
|
||||
M_PatientNoReg,
|
||||
M_PatientName,
|
||||
M_PatientGender,
|
||||
CASE
|
||||
WHEN M_PatientGender = 'male' THEN 'Laki - Laki'
|
||||
WHEN M_PatientGender = 'female' THEN 'Perempuan'
|
||||
ELSE ' '
|
||||
END AS jenisKelamin,
|
||||
M_PatientDOB,
|
||||
FLOOR(DATEDIFF(CURDATE(), M_PatientDOB)/ 365.25) AS age
|
||||
FROM t_orderheader
|
||||
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
||||
AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderMgm_McuID = ?
|
||||
ORDER BY M_PatientName ASC
|
||||
LIMIT ? OFFSET ?`
|
||||
|
||||
if err := dbx.Handlex.Select(&listDaftarPeserta, query, id, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
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),
|
||||
)
|
||||
|
||||
return listDaftarPeserta, totalPage, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type McuDaftarPesertaServices struct {
|
||||
McuDaftarPesertaStore db.AppStore
|
||||
}
|
||||
|
||||
func NewMcuDaftarPesertaServices(uStore db.AppStore) *McuDaftarPesertaServices {
|
||||
return &McuDaftarPesertaServices{
|
||||
McuDaftarPesertaStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
func (mdp *McuDaftarPesertaServices) GetListMcuDaftarPeserta(id string, currentPage int, rowPerPage int) ([]models.ModelMcuDaftarPeserta, int, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var listDaftarPeserta []models.ModelMcuDaftarPeserta
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
|
||||
querytotal := `SELECT COUNT(*)
|
||||
FROM t_orderheader
|
||||
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
||||
AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderMgm_McuID = ?`
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, id); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
query := `SELECT T_OrderHeaderID,
|
||||
T_OrderHeaderDate,
|
||||
T_OrderHeaderLabNumber,
|
||||
T_OrderHeaderM_PatientAge,
|
||||
M_PatientID,
|
||||
M_PatientNoReg,
|
||||
M_PatientName,
|
||||
M_PatientGender,
|
||||
CASE
|
||||
WHEN M_PatientGender = 'male' THEN 'Laki - Laki'
|
||||
WHEN M_PatientGender = 'female' THEN 'Perempuan'
|
||||
ELSE ' '
|
||||
END AS jenisKelamin,
|
||||
M_PatientDOB,
|
||||
FLOOR(DATEDIFF(CURDATE(), M_PatientDOB)/ 365.25) AS age
|
||||
FROM t_orderheader
|
||||
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
||||
AND M_PatientIsActive = 'Y'
|
||||
WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderMgm_McuID = ?
|
||||
ORDER BY M_PatientName ASC
|
||||
LIMIT ? OFFSET ?`
|
||||
|
||||
if err := dbx.Handlex.Select(&listDaftarPeserta, query, id, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
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),
|
||||
)
|
||||
|
||||
return listDaftarPeserta, totalPage, nil
|
||||
}
|
||||
|
||||
@@ -1,251 +1,251 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdBahanServices(uStore db.AppStore) *MdBahanServices {
|
||||
|
||||
return &MdBahanServices{
|
||||
|
||||
MdBahanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdBahanServices struct {
|
||||
MdBahanStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *MdBahanServices) GetListMdBahan(
|
||||
search string,
|
||||
stationID string,
|
||||
currentPage int,
|
||||
rowPerPage int) ([]models.Bahan, int, error) {
|
||||
var bahanList []models.Bahan
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
filterStation := ""
|
||||
if stationID != "0" {
|
||||
filterStation = "AND T_BahanT_SampleStationID = " + stationID
|
||||
|
||||
}
|
||||
querytotal := `
|
||||
SELECT COUNT(*) FROM
|
||||
t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE (T_BahanName LIKE ? OR T_BahanCode LIKE ? )
|
||||
|
||||
` + filterStation
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT t_bahan.*,
|
||||
T_SampleStationName,
|
||||
T_SampleStationID FROM
|
||||
t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE (T_BahanName LIKE ? OR T_BahanCode LIKE ? )
|
||||
` + filterStation + `
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&bahanList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return bahanList, totalPage, nil
|
||||
|
||||
}
|
||||
|
||||
func (su *MdBahanServices) GetMdBahanBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
|
||||
ret := models.BreadCrumbV1{
|
||||
Title: "Master Bahan",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Bahan",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
func (su *MdBahanServices) GetListSampleStation(isFilter bool) ([]models.TmpSampleStation, error) {
|
||||
var stationList []models.TmpSampleStation
|
||||
query := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationName
|
||||
FROM
|
||||
t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y'
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&stationList, query); err != nil {
|
||||
return nil, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
if isFilter {
|
||||
stationList = append(
|
||||
[]models.TmpSampleStation{{T_SampleStationID: 0, T_SampleStationName: "Semua"}}, stationList...)
|
||||
}
|
||||
|
||||
return stationList, nil
|
||||
}
|
||||
func (su *MdBahanServices) AddMdBahan(code string, name string, stationid string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var datacek []models.Bahan
|
||||
qryCek := `SELECT T_BahanCode FROM t_bahan WHERE T_BahanCode = ? AND T_BahanIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return false, fmt.Errorf("query cek failed")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return false, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
query := `
|
||||
INSERT INTO t_bahan(
|
||||
T_BahanT_SampleStationID,
|
||||
T_BahanCode,
|
||||
T_BahanName,
|
||||
T_BahanCreated,
|
||||
T_BahanCreatedUserID)
|
||||
VALUES(?,?,?, NOW(), 1)
|
||||
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, stationid, code, name)
|
||||
_, err = rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("insert data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
func (ug *MdBahanServices) GetMdBahanByID(id string) (models.Bahan, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.Bahan
|
||||
err := dbx.Handlex.Get(&data,
|
||||
`SELECT t_bahan.*,
|
||||
T_SampleStationID,
|
||||
T_SampleStationName
|
||||
FROM t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE T_BahanID = ? `, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data bahan by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("get bahan failed")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (su *MdBahanServices) EditMdBahan(id string, code string, name string, stationid string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var datacek []models.Bahan
|
||||
qryCek := `SELECT T_BahanCode FROM t_bahan WHERE T_BahanCode = ? AND T_BahanIsActive = 'Y' AND T_BahanID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return false, fmt.Errorf("query cek failed")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return false, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
query := `
|
||||
UPDATE t_bahan SET
|
||||
T_BahanCode = ?,
|
||||
T_BahanName = ?,
|
||||
T_BahanT_SampleStationID = ?
|
||||
WHERE T_BahanID = ?
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, code, name, stationid, id)
|
||||
_, err = rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error edit t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("edit data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
func (su *MdBahanServices) DeleteMdBahan(id string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
query := `
|
||||
UPDATE t_bahan
|
||||
SET T_BahanIsActive = 'N',
|
||||
T_BahanDeleted = NOW(),
|
||||
T_BahanDeletedUserID = '1'
|
||||
WHERE T_BahanID = ?
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, id)
|
||||
_, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error edit t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("edit data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdBahanServices(uStore db.AppStore) *MdBahanServices {
|
||||
|
||||
return &MdBahanServices{
|
||||
|
||||
MdBahanStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdBahanServices struct {
|
||||
MdBahanStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *MdBahanServices) GetListMdBahan(
|
||||
search string,
|
||||
stationID string,
|
||||
currentPage int,
|
||||
rowPerPage int) ([]models.Bahan, int, error) {
|
||||
var bahanList []models.Bahan
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
filterStation := ""
|
||||
if stationID != "0" {
|
||||
filterStation = "AND T_BahanT_SampleStationID = " + stationID
|
||||
|
||||
}
|
||||
querytotal := `
|
||||
SELECT COUNT(*) FROM
|
||||
t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE (T_BahanName LIKE ? OR T_BahanCode LIKE ? )
|
||||
|
||||
` + filterStation
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT t_bahan.*,
|
||||
T_SampleStationName,
|
||||
T_SampleStationID FROM
|
||||
t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE (T_BahanName LIKE ? OR T_BahanCode LIKE ? )
|
||||
` + filterStation + `
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&bahanList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return bahanList, totalPage, nil
|
||||
|
||||
}
|
||||
|
||||
func (su *MdBahanServices) GetMdBahanBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
|
||||
ret := models.BreadCrumbV1{
|
||||
Title: "Master Bahan",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Bahan",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
func (su *MdBahanServices) GetListSampleStation(isFilter bool) ([]models.TmpSampleStation, error) {
|
||||
var stationList []models.TmpSampleStation
|
||||
query := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationName
|
||||
FROM
|
||||
t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y'
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&stationList, query); err != nil {
|
||||
return nil, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
if isFilter {
|
||||
stationList = append(
|
||||
[]models.TmpSampleStation{{T_SampleStationID: 0, T_SampleStationName: "Semua"}}, stationList...)
|
||||
}
|
||||
|
||||
return stationList, nil
|
||||
}
|
||||
func (su *MdBahanServices) AddMdBahan(code string, name string, stationid string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var datacek []models.Bahan
|
||||
qryCek := `SELECT T_BahanCode FROM t_bahan WHERE T_BahanCode = ? AND T_BahanIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return false, fmt.Errorf("query cek failed")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return false, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
query := `
|
||||
INSERT INTO t_bahan(
|
||||
T_BahanT_SampleStationID,
|
||||
T_BahanCode,
|
||||
T_BahanName,
|
||||
T_BahanCreated,
|
||||
T_BahanCreatedUserID)
|
||||
VALUES(?,?,?, NOW(), 1)
|
||||
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, stationid, code, name)
|
||||
_, err = rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("insert data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
func (ug *MdBahanServices) GetMdBahanByID(id string) (models.Bahan, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.Bahan
|
||||
err := dbx.Handlex.Get(&data,
|
||||
`SELECT t_bahan.*,
|
||||
T_SampleStationID,
|
||||
T_SampleStationName
|
||||
FROM t_bahan
|
||||
JOIN
|
||||
t_samplestation
|
||||
ON T_BahanT_SampleStationID = T_SampleStationID
|
||||
AND T_BahanIsActive = 'Y'
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
WHERE T_BahanID = ? `, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data bahan by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("get bahan failed")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (su *MdBahanServices) EditMdBahan(id string, code string, name string, stationid string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var datacek []models.Bahan
|
||||
qryCek := `SELECT T_BahanCode FROM t_bahan WHERE T_BahanCode = ? AND T_BahanIsActive = 'Y' AND T_BahanID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return false, fmt.Errorf("query cek failed")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return false, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
query := `
|
||||
UPDATE t_bahan SET
|
||||
T_BahanCode = ?,
|
||||
T_BahanName = ?,
|
||||
T_BahanT_SampleStationID = ?
|
||||
WHERE T_BahanID = ?
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, code, name, stationid, id)
|
||||
_, err = rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error edit t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("edit data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
func (su *MdBahanServices) DeleteMdBahan(id string) (bool, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
query := `
|
||||
UPDATE t_bahan
|
||||
SET T_BahanIsActive = 'N',
|
||||
T_BahanDeleted = NOW(),
|
||||
T_BahanDeletedUserID = '1'
|
||||
WHERE T_BahanID = ?
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(query, id)
|
||||
_, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error edit t bahan",
|
||||
zap.Any("code", err),
|
||||
)
|
||||
return false, fmt.Errorf("edit data failed")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,262 +1,262 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdNatUnitServices(uStore db.AppStore) *MdNatUnitServices {
|
||||
return &MdNatUnitServices{
|
||||
MdNatUnitStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdNatUnitServices struct {
|
||||
MdNatUnitStore db.AppStore
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetListMdNatUnit(search string, currentPage int, rowPerPage int) ([]models.NatUnit, int, error) {
|
||||
var natUnitList []models.NatUnit
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `SELECT COUNT(*)
|
||||
FROM nat_unit
|
||||
WHERE Nat_UnitIsActive = 'Y'
|
||||
AND (Nat_UnitCode LIKE ? OR Nat_UnitName LIKE ?)`
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY Nat_UnitID DESC) AS nomor,
|
||||
Nat_UnitID,
|
||||
Nat_UnitCode,
|
||||
Nat_UnitName,
|
||||
Nat_UnitCreated,
|
||||
Nat_UnitLastUpdated,
|
||||
Nat_UnitIsActive
|
||||
FROM nat_unit
|
||||
WHERE Nat_UnitIsActive = 'Y'
|
||||
AND (Nat_UnitCode LIKE ? OR Nat_UnitName LIKE ?)
|
||||
ORDER BY Nat_UnitID DESC
|
||||
LIMIT ? OFFSET ?`
|
||||
|
||||
if err := dbx.Handlex.Select(&natUnitList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return natUnitList, totalPage, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetMdNatUnitBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master Unit",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Unit",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetMdNatUnitByID(id string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.NatUnit
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM nat_unit
|
||||
WHERE Nat_UnitID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data unit by id",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) AddMdNatUnit(code string, name string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
var datacek []models.NatUnit
|
||||
|
||||
qryCek := `SELECT Nat_UnitCode FROM nat_unit
|
||||
WHERE Nat_UnitCode = ? AND Nat_UnitIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
|
||||
qry := `INSERT INTO nat_unit
|
||||
(Nat_UnitCode,
|
||||
Nat_UnitName) VALUES(?,?)`
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert natunit",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = nu.GetMdNatUnitByID(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get natunit by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) EditMdNatUnit(id string, code string, name string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
var datacek []models.NatUnit
|
||||
|
||||
qryCek := `SELECT Nat_UnitCode FROM nat_unit
|
||||
WHERE Nat_UnitCode = ? AND Nat_UnitIsActive = 'Y' AND Nat_UnitID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
|
||||
qry := `UPDATE nat_unit
|
||||
SET Nat_UnitCode = ?,
|
||||
Nat_UnitName = ?,
|
||||
Nat_UnitLastUpdated = NOW()
|
||||
WHERE Nat_UnitID = ?`
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update natunit",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = nu.GetMdNatUnitByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get natunit by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) DeleteMdNatUnit(id string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
qry := `UPDATE nat_unit
|
||||
SET Nat_UnitLastUpdated = NOW(),
|
||||
Nat_UnitIsActive = 'N'
|
||||
WHERE Nat_UnitID = ?`
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete nat unit",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = nu.GetMdNatUnitByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get nat unit by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdNatUnitServices(uStore db.AppStore) *MdNatUnitServices {
|
||||
return &MdNatUnitServices{
|
||||
MdNatUnitStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdNatUnitServices struct {
|
||||
MdNatUnitStore db.AppStore
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetListMdNatUnit(search string, currentPage int, rowPerPage int) ([]models.NatUnit, int, error) {
|
||||
var natUnitList []models.NatUnit
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `SELECT COUNT(*)
|
||||
FROM nat_unit
|
||||
WHERE Nat_UnitIsActive = 'Y'
|
||||
AND (Nat_UnitCode LIKE ? OR Nat_UnitName LIKE ?)`
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
|
||||
query := `SELECT ROW_NUMBER() OVER (ORDER BY Nat_UnitID DESC) AS nomor,
|
||||
Nat_UnitID,
|
||||
Nat_UnitCode,
|
||||
Nat_UnitName,
|
||||
Nat_UnitCreated,
|
||||
Nat_UnitLastUpdated,
|
||||
Nat_UnitIsActive
|
||||
FROM nat_unit
|
||||
WHERE Nat_UnitIsActive = 'Y'
|
||||
AND (Nat_UnitCode LIKE ? OR Nat_UnitName LIKE ?)
|
||||
ORDER BY Nat_UnitID DESC
|
||||
LIMIT ? OFFSET ?`
|
||||
|
||||
if err := dbx.Handlex.Select(&natUnitList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return natUnitList, totalPage, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetMdNatUnitBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master Unit",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Unit",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) GetMdNatUnitByID(id string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.NatUnit
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM nat_unit
|
||||
WHERE Nat_UnitID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data unit by id",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) AddMdNatUnit(code string, name string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
var datacek []models.NatUnit
|
||||
|
||||
qryCek := `SELECT Nat_UnitCode FROM nat_unit
|
||||
WHERE Nat_UnitCode = ? AND Nat_UnitIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
|
||||
qry := `INSERT INTO nat_unit
|
||||
(Nat_UnitCode,
|
||||
Nat_UnitName) VALUES(?,?)`
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert natunit",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = nu.GetMdNatUnitByID(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get natunit by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) EditMdNatUnit(id string, code string, name string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
var datacek []models.NatUnit
|
||||
|
||||
qryCek := `SELECT Nat_UnitCode FROM nat_unit
|
||||
WHERE Nat_UnitCode = ? AND Nat_UnitIsActive = 'Y' AND Nat_UnitID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
|
||||
qry := `UPDATE nat_unit
|
||||
SET Nat_UnitCode = ?,
|
||||
Nat_UnitName = ?,
|
||||
Nat_UnitLastUpdated = NOW()
|
||||
WHERE Nat_UnitID = ?`
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update natunit",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = nu.GetMdNatUnitByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get natunit by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (nu *MdNatUnitServices) DeleteMdNatUnit(id string) (models.NatUnit, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.NatUnit
|
||||
qry := `UPDATE nat_unit
|
||||
SET Nat_UnitLastUpdated = NOW(),
|
||||
Nat_UnitIsActive = 'N'
|
||||
WHERE Nat_UnitID = ?`
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete nat unit",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = nu.GetMdNatUnitByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get nat unit by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1,277 +1,277 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMDSampleStationServices(uStore db.AppStore) *MDSampleStationServices {
|
||||
return &MDSampleStationServices{
|
||||
MDSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MDSampleStationServices struct {
|
||||
MDSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetMDSampleStationBreadcrumb() (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
Breadcrumb := models.BreadCrumbV1{
|
||||
Title: "Master Sample Station",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Sample Stasion",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
ret = Breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetListSampleStation(search string, currentPage int, rowPerPage int) ([]models.MDSampleStation, int, error) {
|
||||
var sampleStationList []models.MDSampleStation
|
||||
var totalData int
|
||||
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y' AND (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationNat_GroupID,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationIsActive
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y'
|
||||
AND (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
ORDER BY T_SampleStationID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&sampleStationList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for i := range sampleStationList {
|
||||
if len(sampleStationList[i].T_SampleStationIsNonLab) == 0 {
|
||||
sampleStationList[i].T_SampleStationIsNonLab = "LAB"
|
||||
}
|
||||
}
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return sampleStationList, totalPage, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetMDSampleStationByID(id string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var ret models.MDSampleStation
|
||||
q := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationNat_GroupID,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationIsActive
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationID = ?`
|
||||
|
||||
err := dbx.Handlex.Get(&ret, q, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data by ID", zap.String("ID", id), zap.Error(err))
|
||||
return ret, fmt.Errorf("query get data by id failed")
|
||||
}
|
||||
|
||||
if len(ret.T_SampleStationIsNonLab) == 0 {
|
||||
ret.T_SampleStationIsNonLab = "LAB"
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetListGroupSampleStation() ([]models.MDSampleStationGroup, error) {
|
||||
data := []models.MDSampleStationGroup{
|
||||
{
|
||||
ID: 1,
|
||||
Group: "RADIODIAGNOSTIC",
|
||||
},
|
||||
{
|
||||
ID: 2,
|
||||
Group: "ELEKTROMEDIS",
|
||||
},
|
||||
{
|
||||
ID: 3,
|
||||
Group: "LAB",
|
||||
},
|
||||
{
|
||||
ID: 4,
|
||||
Group: "OTHERS",
|
||||
},
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) AddMDSampleStation(code string, name string, group string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.MDSampleStation
|
||||
|
||||
if strings.ToUpper(group) == "LAB" {
|
||||
group = " "
|
||||
}
|
||||
|
||||
// cek existing code & name
|
||||
var count int
|
||||
var prmCode = "%" + code + "%"
|
||||
var prmName = "%" + name + "%"
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
`
|
||||
err := dbx.Handlex.Get(&count, q, prmCode, prmName)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("cek duplicate", zap.Any("code", prmCode), zap.Any("name", prmName))
|
||||
return data, fmt.Errorf("query failed to cek duplicate")
|
||||
}
|
||||
if count > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("duplicate data", zap.Any("code", code), zap.Any("name", name))
|
||||
return data, fmt.Errorf("duplicate code or name")
|
||||
}
|
||||
|
||||
q = `
|
||||
INSERT INTO t_samplestation (
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationCreated,
|
||||
T_SampleStationCreatedUserID
|
||||
) VALUES (?,?,?,NOW(),1);
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(q, code, name, group)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("error insert data", zap.Any("code", code), zap.Any("name", name), zap.Any("group", group))
|
||||
return data, fmt.Errorf("query failed insert data")
|
||||
}
|
||||
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
|
||||
return ss.GetMDSampleStationByID(s)
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) EditMDSampleStation(id string, code string, name string, group string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDSampleStation
|
||||
|
||||
if strings.ToUpper(group) == "LAB" {
|
||||
group = " "
|
||||
}
|
||||
|
||||
// cek existeing code & name
|
||||
var count int
|
||||
var prmCode = "%" + code + "%"
|
||||
var prmName = "%" + name + "%"
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
AND T_SampleStationID <> ?
|
||||
`
|
||||
err := dbx.Handlex.Get(&count, q, prmCode, prmName, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("cek duplicate", zap.Any("code", code), zap.Any("name", name))
|
||||
return ret, fmt.Errorf("query failed to cek duplicate")
|
||||
}
|
||||
if count > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("duplicate data", zap.Any("code", code), zap.Any("name", name))
|
||||
return ret, fmt.Errorf("duplicate code or name")
|
||||
}
|
||||
|
||||
// update data
|
||||
q = `
|
||||
UPDATE t_samplestation SET
|
||||
T_SampleStationCode = ?,
|
||||
T_SampleStationName = ?,
|
||||
T_SampleStationIsNonLab = ?,
|
||||
T_SampleStationLastUpdated = NOW(),
|
||||
T_SampleStationLastUpdatedUserID = 1
|
||||
WHERE T_SampleStationID = ?;
|
||||
`
|
||||
updt := dbx.Handlex.MustExec(q, code, name, group, id)
|
||||
_, err = updt.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("error update data", zap.Any("code", code), zap.Any("name", name), zap.Any("group", group))
|
||||
return ret, fmt.Errorf("query failed to update data")
|
||||
}
|
||||
|
||||
return ss.GetMDSampleStationByID(id)
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) DeleteMDSampleStation(id string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDSampleStation
|
||||
|
||||
q := `
|
||||
UPDATE t_samplestation
|
||||
SET
|
||||
T_SampleStationIsActive = 'N',
|
||||
T_SampleStationDeleted = NOW(),
|
||||
T_SampleStationDeletedUserID = '1'
|
||||
WHERE T_SampleStationID = ?;
|
||||
`
|
||||
dlt := dbx.Handlex.MustExec(q, id)
|
||||
_, err := dlt.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete sample station", zap.String("id", id))
|
||||
return ret, fmt.Errorf("query failed")
|
||||
}
|
||||
|
||||
ret, err = ss.GetMDSampleStationByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get sample station id", zap.String("id", id))
|
||||
return ret, fmt.Errorf("query failed")
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMDSampleStationServices(uStore db.AppStore) *MDSampleStationServices {
|
||||
return &MDSampleStationServices{
|
||||
MDSampleStationStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MDSampleStationServices struct {
|
||||
MDSampleStationStore db.AppStore
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetMDSampleStationBreadcrumb() (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
Breadcrumb := models.BreadCrumbV1{
|
||||
Title: "Master Sample Station",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "Sample Stasion",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
ret = Breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetListSampleStation(search string, currentPage int, rowPerPage int) ([]models.MDSampleStation, int, error) {
|
||||
var sampleStationList []models.MDSampleStation
|
||||
var totalData int
|
||||
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y' AND (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query get total data: %v", err)
|
||||
}
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationNat_GroupID,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationIsActive
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationIsActive = 'Y'
|
||||
AND (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
ORDER BY T_SampleStationID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
if err := dbx.Handlex.Select(&sampleStationList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error query database: %v", err)
|
||||
}
|
||||
|
||||
for i := range sampleStationList {
|
||||
if len(sampleStationList[i].T_SampleStationIsNonLab) == 0 {
|
||||
sampleStationList[i].T_SampleStationIsNonLab = "LAB"
|
||||
}
|
||||
}
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return sampleStationList, totalPage, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetMDSampleStationByID(id string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var ret models.MDSampleStation
|
||||
q := `
|
||||
SELECT
|
||||
T_SampleStationID,
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationNat_GroupID,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationIsActive
|
||||
FROM t_samplestation
|
||||
WHERE T_SampleStationID = ?`
|
||||
|
||||
err := dbx.Handlex.Get(&ret, q, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data by ID", zap.String("ID", id), zap.Error(err))
|
||||
return ret, fmt.Errorf("query get data by id failed")
|
||||
}
|
||||
|
||||
if len(ret.T_SampleStationIsNonLab) == 0 {
|
||||
ret.T_SampleStationIsNonLab = "LAB"
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) GetListGroupSampleStation() ([]models.MDSampleStationGroup, error) {
|
||||
data := []models.MDSampleStationGroup{
|
||||
{
|
||||
ID: 1,
|
||||
Group: "RADIODIAGNOSTIC",
|
||||
},
|
||||
{
|
||||
ID: 2,
|
||||
Group: "ELEKTROMEDIS",
|
||||
},
|
||||
{
|
||||
ID: 3,
|
||||
Group: "LAB",
|
||||
},
|
||||
{
|
||||
ID: 4,
|
||||
Group: "OTHERS",
|
||||
},
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) AddMDSampleStation(code string, name string, group string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.MDSampleStation
|
||||
|
||||
if strings.ToUpper(group) == "LAB" {
|
||||
group = " "
|
||||
}
|
||||
|
||||
// cek existing code & name
|
||||
var count int
|
||||
var prmCode = "%" + code + "%"
|
||||
var prmName = "%" + name + "%"
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
`
|
||||
err := dbx.Handlex.Get(&count, q, prmCode, prmName)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("cek duplicate", zap.Any("code", prmCode), zap.Any("name", prmName))
|
||||
return data, fmt.Errorf("query failed to cek duplicate")
|
||||
}
|
||||
if count > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("duplicate data", zap.Any("code", code), zap.Any("name", name))
|
||||
return data, fmt.Errorf("duplicate code or name")
|
||||
}
|
||||
|
||||
q = `
|
||||
INSERT INTO t_samplestation (
|
||||
T_SampleStationCode,
|
||||
T_SampleStationName,
|
||||
T_SampleStationIsNonLab,
|
||||
T_SampleStationCreated,
|
||||
T_SampleStationCreatedUserID
|
||||
) VALUES (?,?,?,NOW(),1);
|
||||
`
|
||||
rst := dbx.Handlex.MustExec(q, code, name, group)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("error insert data", zap.Any("code", code), zap.Any("name", name), zap.Any("group", group))
|
||||
return data, fmt.Errorf("query failed insert data")
|
||||
}
|
||||
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
|
||||
return ss.GetMDSampleStationByID(s)
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) EditMDSampleStation(id string, code string, name string, group string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDSampleStation
|
||||
|
||||
if strings.ToUpper(group) == "LAB" {
|
||||
group = " "
|
||||
}
|
||||
|
||||
// cek existeing code & name
|
||||
var count int
|
||||
var prmCode = "%" + code + "%"
|
||||
var prmName = "%" + name + "%"
|
||||
q := `
|
||||
SELECT COUNT(*)
|
||||
FROM t_samplestation
|
||||
WHERE (T_SampleStationCode LIKE ? OR T_SampleStationName LIKE ?)
|
||||
AND T_SampleStationIsActive = 'Y'
|
||||
AND T_SampleStationID <> ?
|
||||
`
|
||||
err := dbx.Handlex.Get(&count, q, prmCode, prmName, id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("cek duplicate", zap.Any("code", code), zap.Any("name", name))
|
||||
return ret, fmt.Errorf("query failed to cek duplicate")
|
||||
}
|
||||
if count > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("duplicate data", zap.Any("code", code), zap.Any("name", name))
|
||||
return ret, fmt.Errorf("duplicate code or name")
|
||||
}
|
||||
|
||||
// update data
|
||||
q = `
|
||||
UPDATE t_samplestation SET
|
||||
T_SampleStationCode = ?,
|
||||
T_SampleStationName = ?,
|
||||
T_SampleStationIsNonLab = ?,
|
||||
T_SampleStationLastUpdated = NOW(),
|
||||
T_SampleStationLastUpdatedUserID = 1
|
||||
WHERE T_SampleStationID = ?;
|
||||
`
|
||||
updt := dbx.Handlex.MustExec(q, code, name, group, id)
|
||||
_, err = updt.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("error update data", zap.Any("code", code), zap.Any("name", name), zap.Any("group", group))
|
||||
return ret, fmt.Errorf("query failed to update data")
|
||||
}
|
||||
|
||||
return ss.GetMDSampleStationByID(id)
|
||||
}
|
||||
|
||||
func (ss *MDSampleStationServices) DeleteMDSampleStation(id string) (models.MDSampleStation, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDSampleStation
|
||||
|
||||
q := `
|
||||
UPDATE t_samplestation
|
||||
SET
|
||||
T_SampleStationIsActive = 'N',
|
||||
T_SampleStationDeleted = NOW(),
|
||||
T_SampleStationDeletedUserID = '1'
|
||||
WHERE T_SampleStationID = ?;
|
||||
`
|
||||
dlt := dbx.Handlex.MustExec(q, id)
|
||||
_, err := dlt.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete sample station", zap.String("id", id))
|
||||
return ret, fmt.Errorf("query failed")
|
||||
}
|
||||
|
||||
ret, err = ss.GetMDSampleStationByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get sample station id", zap.String("id", id))
|
||||
return ret, fmt.Errorf("query failed")
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
@@ -1,261 +1,261 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdUserGroupServices(uStore db.AppStore) *MdUserGroupServices {
|
||||
|
||||
return &MdUserGroupServices{
|
||||
|
||||
MdUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdUserGroupServices struct {
|
||||
MdUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *MdUserGroupServices) GetListMdUserGroup(search string, currentPage int, rowPerPage int) ([]models.UserGroupV1, int, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
order by M_UserGroupID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return userGroupList, totalPage, nil
|
||||
}
|
||||
func (ug *MdUserGroupServices) GetMdUserGroupByID(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.UserGroupV1
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM m_usergroup
|
||||
WHERE M_UserGroupID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data ug by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *MdUserGroupServices) AddMdUserGroup(code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `INSERT INTO m_usergroup
|
||||
(M_UserGroupCode,
|
||||
M_UserGroupName)
|
||||
VALUES (?,?);`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = ug.GetMdUserGroupByID(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *MdUserGroupServices) EditMdUsergroup(id string, code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y' AND M_UserGroupID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupCode = ?,
|
||||
M_UserGroupName= ?
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetMdUserGroupByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *MdUserGroupServices) DeleteMdUserGroup(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupIsActive = 'N',
|
||||
M_UserGroupDeleted = NOW(),
|
||||
M_UserGroupDeletedUserID = '1'
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete usergroup",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetMdUserGroupByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (su *MdUserGroupServices) GetMdUserGroupBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master User Group",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User Group",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewMdUserGroupServices(uStore db.AppStore) *MdUserGroupServices {
|
||||
|
||||
return &MdUserGroupServices{
|
||||
|
||||
MdUserGroupStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type MdUserGroupServices struct {
|
||||
MdUserGroupStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *MdUserGroupServices) GetListMdUserGroup(search string, currentPage int, rowPerPage int) ([]models.UserGroupV1, int, error) {
|
||||
var userGroupList []models.UserGroupV1
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserGroupID,
|
||||
M_UserGroupCode,
|
||||
M_UserGroupName,
|
||||
M_UserGroupCreated,
|
||||
M_UserGroupLastUpdated,
|
||||
M_UserGroupIsActive
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
order by M_UserGroupID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userGroupList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return userGroupList, totalPage, nil
|
||||
}
|
||||
func (ug *MdUserGroupServices) GetMdUserGroupByID(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
var data models.UserGroupV1
|
||||
err := dbx.Handlex.Get(&data, `SELECT * FROM m_usergroup
|
||||
WHERE M_UserGroupID = ?`, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get data ug by id vs",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *MdUserGroupServices) AddMdUserGroup(code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y'`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `INSERT INTO m_usergroup
|
||||
(M_UserGroupCode,
|
||||
M_UserGroupName)
|
||||
VALUES (?,?);`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name)
|
||||
insertedID, err := rst.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Insert usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
data, err = ug.GetMdUserGroupByID(s)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (ug *MdUserGroupServices) EditMdUsergroup(id string, code string, name string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
var datacek []models.UserGroupV1
|
||||
|
||||
qryCek := `SELECT M_UserGroupCode FROM m_usergroup WHERE M_UserGroupCode = ? AND M_UserGroupIsActive = 'Y' AND M_UserGroupID <> ?`
|
||||
err := dbx.Handlex.Select(&datacek, qryCek, code, id)
|
||||
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error cek data by code",
|
||||
zap.String("code", code),
|
||||
zap.Any("datacek", datacek),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
if len(datacek) > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("Code already taken by another data",
|
||||
zap.String("code", code),
|
||||
)
|
||||
return data, fmt.Errorf("code sudah dipakai")
|
||||
}
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupCode = ?,
|
||||
M_UserGroupName= ?
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, code, name, id)
|
||||
_, err = rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error Update usergroup",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetMdUserGroupByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("code", code),
|
||||
zap.String("name", name),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (ug *MdUserGroupServices) DeleteMdUserGroup(id string) (models.UserGroupV1, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var data models.UserGroupV1
|
||||
qry := `UPDATE m_usergroup
|
||||
SET M_UserGroupIsActive = 'N',
|
||||
M_UserGroupDeleted = NOW(),
|
||||
M_UserGroupDeletedUserID = '1'
|
||||
WHERE M_UserGroupID = ?;`
|
||||
// time.Sleep(5 * time.Second)
|
||||
rst := dbx.Handlex.MustExec(qry, id)
|
||||
_, err := rst.RowsAffected()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error delete usergroup",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
|
||||
data, err = ug.GetMdUserGroupByID(id)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get usergroup by id",
|
||||
zap.String("id", id),
|
||||
)
|
||||
return data, fmt.Errorf("QUERY_FAILED")
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
func (su *MdUserGroupServices) GetMdUserGroupBreadCrumb(title string) (models.BreadCrumbV1, error) {
|
||||
var ret models.BreadCrumbV1
|
||||
|
||||
dummyBreadcrumb := []models.BreadCrumbV1{
|
||||
{
|
||||
Title: "Master User Group",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User Group",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Title: "Master User",
|
||||
Item: []models.ItemBreadCrumbV1{
|
||||
{
|
||||
Item: "Dashboard",
|
||||
Url: "/dev/dashboard",
|
||||
},
|
||||
{
|
||||
Item: "Master",
|
||||
Url: "/dev/master",
|
||||
},
|
||||
{
|
||||
Item: "User",
|
||||
Url: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, breadcrumb := range dummyBreadcrumb {
|
||||
if breadcrumb.Title == title {
|
||||
ret = breadcrumb
|
||||
return ret, nil
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
@@ -1,97 +1,97 @@
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
)
|
||||
|
||||
func NewServicesUser(u User, uStore db.AppStore) *ServicesUser {
|
||||
|
||||
return &ServicesUser{
|
||||
User: u,
|
||||
AppStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesUser struct {
|
||||
User User
|
||||
AppStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesUser) GetAllUsers() ([]User, error) {
|
||||
query := `SELECT id, username, email, created_at FROM users ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.AppStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []User{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
users := []User{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.User.ID,
|
||||
&su.User.Username,
|
||||
&su.User.Email,
|
||||
&su.User.CreatedAt,
|
||||
)
|
||||
|
||||
users = append(users, su.User)
|
||||
}
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (su *ServicesUser) GetUserById(id int) (User, error) {
|
||||
|
||||
query := `SELECT id, username, email, created_at FROM users
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.AppStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.User.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.User.ID,
|
||||
).Scan(
|
||||
&su.User.ID,
|
||||
&su.User.Username,
|
||||
&su.User.Email,
|
||||
&su.User.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
return su.User, nil
|
||||
}
|
||||
|
||||
func ConverDateTime(tz string, dt time.Time) string {
|
||||
loc, _ := time.LoadLocation(tz)
|
||||
|
||||
return dt.In(loc).Format(time.RFC822Z)
|
||||
}
|
||||
|
||||
func GetUser() (models.User, error) {
|
||||
a := models.User{
|
||||
UserID: 1,
|
||||
Username: "andy",
|
||||
UserFullName: "Alfianto Andy P",
|
||||
UserPosition: "Software Developer",
|
||||
}
|
||||
return a, nil
|
||||
}
|
||||
package dev_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
)
|
||||
|
||||
func NewServicesUser(u User, uStore db.AppStore) *ServicesUser {
|
||||
|
||||
return &ServicesUser{
|
||||
User: u,
|
||||
AppStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesUser struct {
|
||||
User User
|
||||
AppStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesUser) GetAllUsers() ([]User, error) {
|
||||
query := `SELECT id, username, email, created_at FROM users ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.AppStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []User{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
users := []User{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.User.ID,
|
||||
&su.User.Username,
|
||||
&su.User.Email,
|
||||
&su.User.CreatedAt,
|
||||
)
|
||||
|
||||
users = append(users, su.User)
|
||||
}
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (su *ServicesUser) GetUserById(id int) (User, error) {
|
||||
|
||||
query := `SELECT id, username, email, created_at FROM users
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.AppStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.User.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.User.ID,
|
||||
).Scan(
|
||||
&su.User.ID,
|
||||
&su.User.Username,
|
||||
&su.User.Email,
|
||||
&su.User.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
return su.User, nil
|
||||
}
|
||||
|
||||
func ConverDateTime(tz string, dt time.Time) string {
|
||||
loc, _ := time.LoadLocation(tz)
|
||||
|
||||
return dt.In(loc).Format(time.RFC822Z)
|
||||
}
|
||||
|
||||
func GetUser() (models.User, error) {
|
||||
a := models.User{
|
||||
UserID: 1,
|
||||
Username: "andy",
|
||||
UserFullName: "Alfianto Andy P",
|
||||
UserPosition: "Software Developer",
|
||||
}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,112 +1,112 @@
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesKartuKontrol(uStore db.AppStore) *ServicesKartuKontrol {
|
||||
|
||||
return &ServicesKartuKontrol{
|
||||
KartuKontrolStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type ServicesKartuKontrol struct {
|
||||
KartuKontrolStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesKartuKontrol) GetkartuKontrolById(nomorRegistrasi string) ([]models.KartuKontrolModel, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
logger.Info("QUERY SEARCH GET KARTU KONTROL",
|
||||
zap.String("query search", ""),
|
||||
)
|
||||
|
||||
dataPasien := []models.DataPasien{
|
||||
{
|
||||
NomorRegistrasi: "00234",
|
||||
NomorLab: "LA90002",
|
||||
NamaPasien: "Hendra Setiawan",
|
||||
TanggalLahir: "2000-01-01",
|
||||
Umur: "24 tahun",
|
||||
JenisKelamin: "Laki-laki",
|
||||
NamaDivisi: "Development",
|
||||
NamaCompany: "PT. Sadhana Abiyasa Sampoerna",
|
||||
},
|
||||
}
|
||||
|
||||
dataPemeriksaanList := []models.DataPemeriksaanList{
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
}
|
||||
|
||||
dataPemeriksaanPengambilanSample := []models.DataPemeriksaanPengambilanSample{
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Laboratorium",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "Darah",
|
||||
SampleTypeDateTime: "15-05-2024 10:00",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
{
|
||||
SampleTypeName: "Urine",
|
||||
SampleTypeDateTime: "15-05-2024 10:00",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Rontgen",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "Thorax AP (PCR)",
|
||||
SampleTypeDateTime: "",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Elektromedis",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "ECG",
|
||||
SampleTypeStatus: "Belum",
|
||||
SampleTypeDateTime: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
kartuKontrol := []models.KartuKontrolModel{
|
||||
{
|
||||
KartuKontrolDataPasienList: dataPasien,
|
||||
KartuKontrolDataPemeriksaanList: dataPemeriksaanList,
|
||||
KartuKontrolDataPemeriksaanPengambilanSample: dataPemeriksaanPengambilanSample,
|
||||
},
|
||||
}
|
||||
|
||||
return kartuKontrol, nil
|
||||
}
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesKartuKontrol(uStore db.AppStore) *ServicesKartuKontrol {
|
||||
|
||||
return &ServicesKartuKontrol{
|
||||
KartuKontrolStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type ServicesKartuKontrol struct {
|
||||
KartuKontrolStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesKartuKontrol) GetkartuKontrolById(nomorRegistrasi string) ([]models.KartuKontrolModel, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
logger.Info("QUERY SEARCH GET KARTU KONTROL",
|
||||
zap.String("query search", ""),
|
||||
)
|
||||
|
||||
dataPasien := []models.DataPasien{
|
||||
{
|
||||
NomorRegistrasi: "00234",
|
||||
NomorLab: "LA90002",
|
||||
NamaPasien: "Hendra Setiawan",
|
||||
TanggalLahir: "2000-01-01",
|
||||
Umur: "24 tahun",
|
||||
JenisKelamin: "Laki-laki",
|
||||
NamaDivisi: "Development",
|
||||
NamaCompany: "PT. Sadhana Abiyasa Sampoerna",
|
||||
},
|
||||
}
|
||||
|
||||
dataPemeriksaanList := []models.DataPemeriksaanList{
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
{NamaPemeriksaanList: "Hematologi Lengkap"},
|
||||
{NamaPemeriksaanList: "Urine Lengkap"},
|
||||
{NamaPemeriksaanList: "ACG"},
|
||||
{NamaPemeriksaanList: "Treadmill"},
|
||||
{NamaPemeriksaanList: "Pemeriksaan Fisik"},
|
||||
}
|
||||
|
||||
dataPemeriksaanPengambilanSample := []models.DataPemeriksaanPengambilanSample{
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Laboratorium",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "Darah",
|
||||
SampleTypeDateTime: "15-05-2024 10:00",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
{
|
||||
SampleTypeName: "Urine",
|
||||
SampleTypeDateTime: "15-05-2024 10:00",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Rontgen",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "Thorax AP (PCR)",
|
||||
SampleTypeDateTime: "",
|
||||
SampleTypeStatus: "Sudah",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
NamaPemeriksaanPengambilanSample: "Elektromedis",
|
||||
SampleTypeListData: []models.SampleTypeList{
|
||||
{
|
||||
SampleTypeName: "ECG",
|
||||
SampleTypeStatus: "Belum",
|
||||
SampleTypeDateTime: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
kartuKontrol := []models.KartuKontrolModel{
|
||||
{
|
||||
KartuKontrolDataPasienList: dataPasien,
|
||||
KartuKontrolDataPemeriksaanList: dataPemeriksaanList,
|
||||
KartuKontrolDataPemeriksaanPengambilanSample: dataPemeriksaanPengambilanSample,
|
||||
},
|
||||
}
|
||||
|
||||
return kartuKontrol, nil
|
||||
}
|
||||
|
||||
@@ -1,287 +1,287 @@
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLandingPage(u LandingPage, uStore db.AppStore) *ServicesLandingPage {
|
||||
|
||||
return &ServicesLandingPage{
|
||||
LandingPage: u,
|
||||
LandingPageStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type LandingPage struct {
|
||||
ID int `json:"id"`
|
||||
LandingPagename string `json:"LandingPagename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ClientService struct {
|
||||
ClientServiceID int `json:"ClientServiceID"`
|
||||
ClientServiceName string `json:"ClientServiceName"`
|
||||
ClientServiceDescription string `json:"ClientServiceDescription"`
|
||||
ClientServiceIcon string `json:"ClientServiceIcon"`
|
||||
ClientServiceLink string `json:"ClientServiceLink"`
|
||||
}
|
||||
type AdvantageClient struct {
|
||||
AdvantageClientID int `json:"AdvantageClientID"`
|
||||
AdvantageClientName string `json:"AdvantageClientName"`
|
||||
AdvantageClientDesc string `json:"AdvantageClientDesc"`
|
||||
}
|
||||
|
||||
type Promotion struct {
|
||||
PromotionID int `json:"PromotionID"`
|
||||
PromotionAsset string `json:"PromotionAsset"`
|
||||
PromotionLink string `json:"PromotionLink"`
|
||||
}
|
||||
|
||||
type FooterSubNav struct {
|
||||
FootSubNavID int `json:"FootSubNavID"`
|
||||
FootSubNavTitle string `json:"FootSubNavTitle"`
|
||||
FootSubNavLink string `json:"FootSubNavLink"`
|
||||
}
|
||||
|
||||
type FooterNav struct {
|
||||
FooterNavID int `json:"FooterNavID"`
|
||||
FooterNavTitle string `json:"FooterNavTitle"`
|
||||
FooteSubNav []FooterSubNav `json:"FooterSubNav,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLandingPage struct {
|
||||
LandingPage LandingPage
|
||||
LandingPageStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetAllLandingPages() ([]LandingPage, error) {
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.LandingPageStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []LandingPage{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
LandingPages := []LandingPage{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
|
||||
LandingPages = append(LandingPages, su.LandingPage)
|
||||
}
|
||||
|
||||
return LandingPages, nil
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetLandingPageById(id int) (LandingPage, error) {
|
||||
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.LandingPageStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.LandingPage.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.LandingPage.ID,
|
||||
).Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
return su.LandingPage, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientService() ([]ClientService, error) {
|
||||
|
||||
data := []ClientService{
|
||||
{
|
||||
ClientServiceID: 1,
|
||||
ClientServiceName: "In House Clinic",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "uil:clinic-medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 2,
|
||||
ClientServiceName: "Laboratorium Test",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "healthicons:clinical-a-outline",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 3,
|
||||
ClientServiceName: "Medical Check Up",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 4,
|
||||
ClientServiceName: "Medical Check Up 2",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 5,
|
||||
ClientServiceName: "Medical Check Up 3",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientAdvantage() ([]AdvantageClient, error) {
|
||||
|
||||
data := []AdvantageClient{
|
||||
{
|
||||
AdvantageClientID: 1,
|
||||
AdvantageClientName: "ISO Certificate",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory has obtained ISO 15189:2009 (ISO 15189:2007) Accreditation from the National Accreditation Committee (KAN) and the Health Laboratory Accreditation Commission (KALK).",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 2,
|
||||
AdvantageClientName: "Modern Technology",
|
||||
AdvantageClientDesc: "Laboratory Information System (LIS) is an information system in which laboratory equipment and diagnostic support have been integrated automatically so that examination results can be immediately filled in in employee data. This eliminates the possibility of human error.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 3,
|
||||
AdvantageClientName: "Good Quality Facilities",
|
||||
AdvantageClientDesc: "The laboratory and medical support equipment used at the Westerindo Clinical Laboratory is international scale for precise, fast and accurate results. Lab and medical equipment certificates are periodically renewed according to standards.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 4,
|
||||
AdvantageClientName: "Professional Service",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is committed to providing professional and excellent service. Therefore, all staff and doctors at the Westerindo Clinical Laboratory have competency certification according to their field.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 5,
|
||||
AdvantageClientName: "Experienced",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is very experienced in carrying out Medical Check Ups both onsite and insite, in all corners of Indonesia. Serving various kinds of companies, from oil and gas companies, automotive, manufacturing, offices, and others.",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetPromotionList() ([]Promotion, error) {
|
||||
|
||||
data := []Promotion{
|
||||
{
|
||||
PromotionID: 1,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_1.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 2,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 3,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 4,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 5,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetFooterNavList() ([]FooterNav, error) {
|
||||
data := []FooterNav{
|
||||
{
|
||||
FooterNavID: 1,
|
||||
FooterNavTitle: "Dashboard",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Dashboard #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Dashboard #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 2,
|
||||
FooterNavTitle: "Benefit",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Benefit #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Benefit #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 3,
|
||||
FooterNavTitle: "Finance & Claims",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Finance & Claims #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Finance & Claims #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 4,
|
||||
FooterNavTitle: "Memberships",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Memberships #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Memberships #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cpone/db"
|
||||
)
|
||||
|
||||
func NewServicesLandingPage(u LandingPage, uStore db.AppStore) *ServicesLandingPage {
|
||||
|
||||
return &ServicesLandingPage{
|
||||
LandingPage: u,
|
||||
LandingPageStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type LandingPage struct {
|
||||
ID int `json:"id"`
|
||||
LandingPagename string `json:"LandingPagename"`
|
||||
Email string `json:"email"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
}
|
||||
|
||||
type ClientService struct {
|
||||
ClientServiceID int `json:"ClientServiceID"`
|
||||
ClientServiceName string `json:"ClientServiceName"`
|
||||
ClientServiceDescription string `json:"ClientServiceDescription"`
|
||||
ClientServiceIcon string `json:"ClientServiceIcon"`
|
||||
ClientServiceLink string `json:"ClientServiceLink"`
|
||||
}
|
||||
type AdvantageClient struct {
|
||||
AdvantageClientID int `json:"AdvantageClientID"`
|
||||
AdvantageClientName string `json:"AdvantageClientName"`
|
||||
AdvantageClientDesc string `json:"AdvantageClientDesc"`
|
||||
}
|
||||
|
||||
type Promotion struct {
|
||||
PromotionID int `json:"PromotionID"`
|
||||
PromotionAsset string `json:"PromotionAsset"`
|
||||
PromotionLink string `json:"PromotionLink"`
|
||||
}
|
||||
|
||||
type FooterSubNav struct {
|
||||
FootSubNavID int `json:"FootSubNavID"`
|
||||
FootSubNavTitle string `json:"FootSubNavTitle"`
|
||||
FootSubNavLink string `json:"FootSubNavLink"`
|
||||
}
|
||||
|
||||
type FooterNav struct {
|
||||
FooterNavID int `json:"FooterNavID"`
|
||||
FooterNavTitle string `json:"FooterNavTitle"`
|
||||
FooteSubNav []FooterSubNav `json:"FooterSubNav,omitempty"`
|
||||
}
|
||||
|
||||
type ServicesLandingPage struct {
|
||||
LandingPage LandingPage
|
||||
LandingPageStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetAllLandingPages() ([]LandingPage, error) {
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages ORDER BY created_at DESC`
|
||||
|
||||
rows, err := su.LandingPageStore.Db.Query(query)
|
||||
if err != nil {
|
||||
return []LandingPage{}, err
|
||||
}
|
||||
// We close the resource
|
||||
defer rows.Close()
|
||||
|
||||
LandingPages := []LandingPage{}
|
||||
for rows.Next() {
|
||||
rows.Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
|
||||
LandingPages = append(LandingPages, su.LandingPage)
|
||||
}
|
||||
|
||||
return LandingPages, nil
|
||||
}
|
||||
|
||||
func (su *ServicesLandingPage) GetLandingPageById(id int) (LandingPage, error) {
|
||||
|
||||
query := `SELECT id, LandingPagename, email, created_at FROM LandingPages
|
||||
WHERE id = ?`
|
||||
|
||||
stmt, err := su.LandingPageStore.Db.Prepare(query)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
defer stmt.Close()
|
||||
|
||||
su.LandingPage.ID = id
|
||||
err = stmt.QueryRow(
|
||||
su.LandingPage.ID,
|
||||
).Scan(
|
||||
&su.LandingPage.ID,
|
||||
&su.LandingPage.LandingPagename,
|
||||
&su.LandingPage.Email,
|
||||
&su.LandingPage.CreatedAt,
|
||||
)
|
||||
if err != nil {
|
||||
return LandingPage{}, err
|
||||
}
|
||||
|
||||
return su.LandingPage, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientService() ([]ClientService, error) {
|
||||
|
||||
data := []ClientService{
|
||||
{
|
||||
ClientServiceID: 1,
|
||||
ClientServiceName: "In House Clinic",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "uil:clinic-medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 2,
|
||||
ClientServiceName: "Laboratorium Test",
|
||||
ClientServiceDescription: "Maintaining health in the workplace by carrying out promotional, preventive, curative and rehabilitative programs.",
|
||||
ClientServiceIcon: "healthicons:clinical-a-outline",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 3,
|
||||
ClientServiceName: "Medical Check Up",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 4,
|
||||
ClientServiceName: "Medical Check Up 2",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
{
|
||||
ClientServiceID: 5,
|
||||
ClientServiceName: "Medical Check Up 3",
|
||||
ClientServiceDescription: "Supported by a professional medical, paramedical team, and as well as laboratory equipment ",
|
||||
ClientServiceIcon: "jam:medical",
|
||||
ClientServiceLink: "/",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetClientAdvantage() ([]AdvantageClient, error) {
|
||||
|
||||
data := []AdvantageClient{
|
||||
{
|
||||
AdvantageClientID: 1,
|
||||
AdvantageClientName: "ISO Certificate",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory has obtained ISO 15189:2009 (ISO 15189:2007) Accreditation from the National Accreditation Committee (KAN) and the Health Laboratory Accreditation Commission (KALK).",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 2,
|
||||
AdvantageClientName: "Modern Technology",
|
||||
AdvantageClientDesc: "Laboratory Information System (LIS) is an information system in which laboratory equipment and diagnostic support have been integrated automatically so that examination results can be immediately filled in in employee data. This eliminates the possibility of human error.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 3,
|
||||
AdvantageClientName: "Good Quality Facilities",
|
||||
AdvantageClientDesc: "The laboratory and medical support equipment used at the Westerindo Clinical Laboratory is international scale for precise, fast and accurate results. Lab and medical equipment certificates are periodically renewed according to standards.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 4,
|
||||
AdvantageClientName: "Professional Service",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is committed to providing professional and excellent service. Therefore, all staff and doctors at the Westerindo Clinical Laboratory have competency certification according to their field.",
|
||||
},
|
||||
{
|
||||
AdvantageClientID: 5,
|
||||
AdvantageClientName: "Experienced",
|
||||
AdvantageClientDesc: "Westerindo Clinical Laboratory is very experienced in carrying out Medical Check Ups both onsite and insite, in all corners of Indonesia. Serving various kinds of companies, from oil and gas companies, automotive, manufacturing, offices, and others.",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetPromotionList() ([]Promotion, error) {
|
||||
|
||||
data := []Promotion{
|
||||
{
|
||||
PromotionID: 1,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_1.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 2,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 3,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 4,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_2.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
{
|
||||
PromotionID: 5,
|
||||
PromotionAsset: "../../asset-corporate-portal/media/landingpage/promotion_3.png",
|
||||
PromotionLink: "",
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
func (su *ServicesLandingPage) GetFooterNavList() ([]FooterNav, error) {
|
||||
data := []FooterNav{
|
||||
{
|
||||
FooterNavID: 1,
|
||||
FooterNavTitle: "Dashboard",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Dashboard #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Dashboard #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 2,
|
||||
FooterNavTitle: "Benefit",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Benefit #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Benefit #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 3,
|
||||
FooterNavTitle: "Finance & Claims",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Finance & Claims #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Finance & Claims #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
FooterNavID: 4,
|
||||
FooterNavTitle: "Memberships",
|
||||
FooteSubNav: []FooterSubNav{
|
||||
{
|
||||
FootSubNavID: 1,
|
||||
FootSubNavTitle: "Memberships #1",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
{
|
||||
FootSubNavID: 2,
|
||||
FootSubNavTitle: "Memberships #2",
|
||||
FootSubNavLink: "/",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1,120 +1,120 @@
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesSurveyMcu(uStore db.AppStore) *SurveyMcuService {
|
||||
|
||||
return &SurveyMcuService{
|
||||
SurveyMcuStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type SurveyMcuService struct {
|
||||
SurveyMcuStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *SurveyMcuService) GetSurveyMcuByNoreg(nomorRegistrasi string) ([]models.SurveyMcu, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
logger.Info("QUERY SEARCH GET SURVEY MCU BY NOMOR REGISTRASI",
|
||||
zap.String("query search", ""),
|
||||
)
|
||||
|
||||
// radio button
|
||||
dataItemSurveyMcu := []models.ItemSurveyMcu{
|
||||
{
|
||||
IDItemSurvey: "1",
|
||||
Nomor: "1",
|
||||
Pertanyaan: "Bagaimana Penilaian Sikap & Keramahan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-1",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "2",
|
||||
Nomor: "2",
|
||||
Pertanyaan: "Bagaimana Penilaian Penampilan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-2",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "3",
|
||||
Nomor: "3",
|
||||
Pertanyaan: "Bagaimana Penilaian Ketrampilan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-3",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "4",
|
||||
Nomor: "4",
|
||||
Pertanyaan: "Bagaimana Penilaian Pemberian Informasi Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-4",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "5",
|
||||
Nomor: "5",
|
||||
Pertanyaan: "Bagaimana Penilaian Kelengkapan Alat?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-5",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "6",
|
||||
Nomor: "6",
|
||||
Pertanyaan: "Bagaimana Penilaian Kelayakan Alat?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-6",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "7",
|
||||
Nomor: "7",
|
||||
Pertanyaan: "Bagaimana Penilaian Kebersihan Ruangan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-7",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "8",
|
||||
Nomor: "8",
|
||||
Pertanyaan: "Bagaimana Penilaian Kebersihan Ruangan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-8",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "9",
|
||||
Nomor: "9",
|
||||
Pertanyaan: "Bagaimana Penilaian Alur Pelayanan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-9",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "10",
|
||||
Nomor: "10",
|
||||
Pertanyaan: "Bagaimana Penilaian Ketepatan Waktu?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-10",
|
||||
},
|
||||
}
|
||||
|
||||
// saran
|
||||
dataItemSurveyMcuSaran := []models.ItemSurveyMcuSaran{
|
||||
{
|
||||
IDItemSurveyMcuSaran: "11",
|
||||
NameSurveyMcuSaran: "saranmcu-11",
|
||||
ErrorMessageSurveyMcuSaran: "",
|
||||
},
|
||||
}
|
||||
|
||||
surveymcu := []models.SurveyMcu{
|
||||
{
|
||||
DataListItemSurveyMcu: dataItemSurveyMcu,
|
||||
DataListItemSurveyMcuSaran: dataItemSurveyMcuSaran,
|
||||
},
|
||||
}
|
||||
|
||||
return surveymcu, nil
|
||||
}
|
||||
package public_services
|
||||
|
||||
import (
|
||||
"cpone/db"
|
||||
"cpone/models"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func NewServicesSurveyMcu(uStore db.AppStore) *SurveyMcuService {
|
||||
|
||||
return &SurveyMcuService{
|
||||
SurveyMcuStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
type SurveyMcuService struct {
|
||||
SurveyMcuStore db.AppStore
|
||||
}
|
||||
|
||||
func (su *SurveyMcuService) GetSurveyMcuByNoreg(nomorRegistrasi string) ([]models.SurveyMcu, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
logger.Info("QUERY SEARCH GET SURVEY MCU BY NOMOR REGISTRASI",
|
||||
zap.String("query search", ""),
|
||||
)
|
||||
|
||||
// radio button
|
||||
dataItemSurveyMcu := []models.ItemSurveyMcu{
|
||||
{
|
||||
IDItemSurvey: "1",
|
||||
Nomor: "1",
|
||||
Pertanyaan: "Bagaimana Penilaian Sikap & Keramahan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-1",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "2",
|
||||
Nomor: "2",
|
||||
Pertanyaan: "Bagaimana Penilaian Penampilan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-2",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "3",
|
||||
Nomor: "3",
|
||||
Pertanyaan: "Bagaimana Penilaian Ketrampilan Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-3",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "4",
|
||||
Nomor: "4",
|
||||
Pertanyaan: "Bagaimana Penilaian Pemberian Informasi Petugas?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-4",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "5",
|
||||
Nomor: "5",
|
||||
Pertanyaan: "Bagaimana Penilaian Kelengkapan Alat?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-5",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "6",
|
||||
Nomor: "6",
|
||||
Pertanyaan: "Bagaimana Penilaian Kelayakan Alat?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-6",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "7",
|
||||
Nomor: "7",
|
||||
Pertanyaan: "Bagaimana Penilaian Kebersihan Ruangan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-7",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "8",
|
||||
Nomor: "8",
|
||||
Pertanyaan: "Bagaimana Penilaian Kebersihan Ruangan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-8",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "9",
|
||||
Nomor: "9",
|
||||
Pertanyaan: "Bagaimana Penilaian Alur Pelayanan?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-9",
|
||||
},
|
||||
{
|
||||
IDItemSurvey: "10",
|
||||
Nomor: "10",
|
||||
Pertanyaan: "Bagaimana Penilaian Ketepatan Waktu?",
|
||||
ErrorMessage: "",
|
||||
NameRadioButton: "radio-10",
|
||||
},
|
||||
}
|
||||
|
||||
// saran
|
||||
dataItemSurveyMcuSaran := []models.ItemSurveyMcuSaran{
|
||||
{
|
||||
IDItemSurveyMcuSaran: "11",
|
||||
NameSurveyMcuSaran: "saranmcu-11",
|
||||
ErrorMessageSurveyMcuSaran: "",
|
||||
},
|
||||
}
|
||||
|
||||
surveymcu := []models.SurveyMcu{
|
||||
{
|
||||
DataListItemSurveyMcu: dataItemSurveyMcu,
|
||||
DataListItemSurveyMcuSaran: dataItemSurveyMcuSaran,
|
||||
},
|
||||
}
|
||||
|
||||
return surveymcu, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user