104 lines
2.8 KiB
Go
104 lines
2.8 KiB
Go
package dashboard
|
|
|
|
type AntrianPerKategori struct {
|
|
IdKategori int `db:"Kategori_operasi" json:"id_kategori"`
|
|
Kategori string `db:"Kategori" json:"kategori"`
|
|
JmlAntrian int `db:"jumlah_antrean" json:"jumlah_antrean"`
|
|
}
|
|
|
|
type AntrianPerSpesialisModel struct {
|
|
IdSpesialis int `db:"id_spesialis"`
|
|
Spesialis string `db:"Spesialis"`
|
|
IdSubSpesialis int `db:"id_subspesialis"`
|
|
SubSpesialis string `db:"Subspesialis"`
|
|
JmlAntrian int `db:"jml_antrian"`
|
|
}
|
|
|
|
type AntrianPerSpesialisResponse struct {
|
|
IdSpesialis int
|
|
Spesialis string
|
|
JmlAntrian int
|
|
SubSpesialis []AntrianPerSubSpesialisResponse
|
|
}
|
|
|
|
type AntrianPerSubSpesialisResponse struct {
|
|
IdSubSpesialis int
|
|
SubSpesialis string
|
|
JmlAntrian int
|
|
}
|
|
|
|
type PerbandinganStatusAntreanQueryResult struct {
|
|
IdStatus int `db:"status_operasi"`
|
|
Jumlah int `db:"jumlah"`
|
|
}
|
|
|
|
type PerbandinganStatusAntreanResponse struct {
|
|
IdStatus int `json:"id"`
|
|
Jumlah int `json:"jumlah"`
|
|
Status string `json:"statust"`
|
|
}
|
|
|
|
type PerbandinganKategoriAntrean struct {
|
|
IdKategori int `db:"id_kategori" json:"id_kategori"`
|
|
Kategori string `db:"kategori" json:"kategori"`
|
|
Jumlah int `db:"jumlah" json:"jumlah"`
|
|
}
|
|
|
|
type TableAntreanPerSpesialis struct {
|
|
Spesialis string `db:"spesialis"`
|
|
Total int `db:"total"`
|
|
Belum int `db:"belum"`
|
|
Selesai int `db:"selesai"`
|
|
Tunda int `db:"tunda"`
|
|
Batal int `db:"batal"`
|
|
}
|
|
|
|
type TableAntreanPerSubSpesialis struct {
|
|
Spesialis string `db:"spesialis"`
|
|
SubSpesialis string `db:"sub_spesialis"`
|
|
Total int `db:"total"`
|
|
Belum int `db:"belum"`
|
|
Selesai int `db:"selesai"`
|
|
Tunda int `db:"tunda"`
|
|
}
|
|
|
|
type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel
|
|
|
|
func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse {
|
|
resultMap := make(map[int]*AntrianPerSpesialisResponse)
|
|
|
|
for _, item := range list {
|
|
// check if spesialis already on resultMap
|
|
// if not exist, create antrian spesialis response
|
|
if _, ok := resultMap[item.IdSpesialis]; !ok {
|
|
resultMap[item.IdSpesialis] = &AntrianPerSpesialisResponse{
|
|
IdSpesialis: item.IdSpesialis,
|
|
Spesialis: item.Spesialis,
|
|
JmlAntrian: 0,
|
|
SubSpesialis: []AntrianPerSubSpesialisResponse{},
|
|
}
|
|
}
|
|
|
|
// add subspesialis item
|
|
resultMap[item.IdSpesialis].SubSpesialis = append(
|
|
resultMap[item.IdSpesialis].SubSpesialis,
|
|
AntrianPerSubSpesialisResponse{
|
|
IdSubSpesialis: item.IdSubSpesialis,
|
|
SubSpesialis: item.SubSpesialis,
|
|
JmlAntrian: item.JmlAntrian,
|
|
},
|
|
)
|
|
|
|
// accumulate jmlAntrian subspesialis -> total antrian spesialis
|
|
resultMap[item.IdSpesialis].JmlAntrian += item.JmlAntrian
|
|
}
|
|
|
|
// convert map -> slice
|
|
result := make([]AntrianPerSpesialisResponse, 0, len(resultMap))
|
|
for _, v := range resultMap {
|
|
result = append(result, *v)
|
|
}
|
|
|
|
return result
|
|
}
|