antrian per hari
This commit is contained in:
@@ -206,6 +206,47 @@ const docTemplate = `{
|
||||
}
|
||||
}
|
||||
},
|
||||
"/dashboard/antrian-per-hari/": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Dashboard"
|
||||
],
|
||||
"summary": "Get Antrian per Hari",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "tahun dalam int",
|
||||
"name": "year",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "bulan dalam int",
|
||||
"name": "month",
|
||||
"in": "query",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/dashboard.AntrianPerHari"
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/shared.BaseErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/dashboard/antrian-per-kategori/": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -960,6 +1001,26 @@ const docTemplate = `{
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard.AntrianPerHari": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"batal": {
|
||||
"type": "integer"
|
||||
},
|
||||
"belum": {
|
||||
"type": "integer"
|
||||
},
|
||||
"selesai": {
|
||||
"type": "integer"
|
||||
},
|
||||
"tanggalDaftar": {
|
||||
"type": "string"
|
||||
},
|
||||
"tunda": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard.AntrianPerKategori": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
@@ -200,6 +200,47 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/dashboard/antrian-per-hari/": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Dashboard"
|
||||
],
|
||||
"summary": "Get Antrian per Hari",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "tahun dalam int",
|
||||
"name": "year",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "bulan dalam int",
|
||||
"name": "month",
|
||||
"in": "query",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/dashboard.AntrianPerHari"
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "Internal Server Error",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/shared.BaseErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/dashboard/antrian-per-kategori/": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -954,6 +995,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard.AntrianPerHari": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"batal": {
|
||||
"type": "integer"
|
||||
},
|
||||
"belum": {
|
||||
"type": "integer"
|
||||
},
|
||||
"selesai": {
|
||||
"type": "integer"
|
||||
},
|
||||
"tanggalDaftar": {
|
||||
"type": "string"
|
||||
},
|
||||
"tunda": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard.AntrianPerKategori": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
@@ -195,6 +195,19 @@ definitions:
|
||||
- tindakan
|
||||
- tindakanTambahan
|
||||
type: object
|
||||
dashboard.AntrianPerHari:
|
||||
properties:
|
||||
batal:
|
||||
type: integer
|
||||
belum:
|
||||
type: integer
|
||||
selesai:
|
||||
type: integer
|
||||
tanggalDaftar:
|
||||
type: string
|
||||
tunda:
|
||||
type: integer
|
||||
type: object
|
||||
dashboard.AntrianPerKategori:
|
||||
properties:
|
||||
id_kategori:
|
||||
@@ -538,6 +551,33 @@ paths:
|
||||
summary: Update Status Antrian Operasi
|
||||
tags:
|
||||
- Antrian Operasi
|
||||
/dashboard/antrian-per-hari/:
|
||||
get:
|
||||
parameters:
|
||||
- description: tahun dalam int
|
||||
in: query
|
||||
name: year
|
||||
required: true
|
||||
type: integer
|
||||
- description: bulan dalam int
|
||||
in: query
|
||||
name: month
|
||||
required: true
|
||||
type: integer
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
items:
|
||||
$ref: '#/definitions/dashboard.AntrianPerHari'
|
||||
type: array
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
schema:
|
||||
$ref: '#/definitions/shared.BaseErrorResponse'
|
||||
summary: Get Antrian per Hari
|
||||
tags:
|
||||
- Dashboard
|
||||
/dashboard/antrian-per-kategori/:
|
||||
get:
|
||||
responses:
|
||||
|
||||
@@ -146,6 +146,47 @@ func (h DashboardHandler) GetPerbandinganKategoriAntrean(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// GetAntrianPerHari godoc
|
||||
// @Summary Get Antrian per Hari
|
||||
// @Tags Dashboard
|
||||
// @Param year query int true "tahun dalam int"
|
||||
// @Param month query int true "bulan dalam int"
|
||||
// @Success 200 {object} []AntrianPerHari
|
||||
// @Failure 500 {object} shared.BaseErrorResponse
|
||||
// @Router /dashboard/antrian-per-hari/ [get]
|
||||
func (h DashboardHandler) GetAntrianPerHari(c *gin.Context) {
|
||||
var req PeriodeDashboardRequest
|
||||
if err := c.ShouldBindQuery(&req); err != nil {
|
||||
c.JSON(400, shared.BaseErrorResponse{
|
||||
Success: false,
|
||||
Code: 400,
|
||||
Message: "error bind json",
|
||||
Errors: shared.ValidationError(err),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
data, err := h.repo.GetAntrianPerHari(c, req)
|
||||
|
||||
if err != nil {
|
||||
errorResponse := baseResponse.BaseErrorResponse{
|
||||
Success: false,
|
||||
Code: 500,
|
||||
Message: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusInternalServerError, errorResponse)
|
||||
return
|
||||
}
|
||||
|
||||
response := baseResponse.ToBaseResponse(
|
||||
data,
|
||||
true,
|
||||
200,
|
||||
"success get antrean per hari")
|
||||
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// GetTableAntrianPerSpesialis godoc
|
||||
// @Summary Get Table Antrian per Spesialis
|
||||
// @Tags Dashboard
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package dashboard
|
||||
|
||||
import "time"
|
||||
|
||||
type AntrianPerKategori struct {
|
||||
IdKategori int `db:"Kategori_operasi" json:"id_kategori"`
|
||||
Kategori string `db:"Kategori" json:"kategori"`
|
||||
@@ -44,6 +46,14 @@ type PerbandinganKategoriAntrean struct {
|
||||
Jumlah int `db:"jumlah" json:"jumlah"`
|
||||
}
|
||||
|
||||
type AntrianPerHari struct {
|
||||
TanggalDaftar time.Time `db:"tanggal_daftar"`
|
||||
Belum int `db:"belum"`
|
||||
Selesai int `db:"selesai"`
|
||||
Tunda int `db:"tunda"`
|
||||
Batal int `db:"batal"`
|
||||
}
|
||||
|
||||
type TableAntreanPerSpesialis struct {
|
||||
Spesialis string `db:"spesialis"`
|
||||
Total int `db:"total"`
|
||||
|
||||
@@ -17,6 +17,7 @@ type IDashboardRepository interface {
|
||||
GetAntrianPerSpesialis(c *gin.Context) (ListModelAntrianPerSpesialis, error)
|
||||
GetPerbandinganStatusAntrean(c *gin.Context, req PeriodeDashboardRequest) (ListPerbandinganStatusAntrean, error)
|
||||
GetPerbandinganKategoriAntrean(c *gin.Context, req PeriodeDashboardRequest) ([]PerbandinganKategoriAntrean, error)
|
||||
GetAntrianPerHari(c *gin.Context, req PeriodeDashboardRequest) ([]AntrianPerHari, error)
|
||||
GetTableAntrianPerSpesialis(c *gin.Context, req PeriodeDashboardRequest) ([]TableAntreanPerSpesialis, error)
|
||||
GetTableAntrianPerSubSpesialis(c *gin.Context, req PeriodeDashboardRequest) ([]TableAntreanPerSubSpesialis, error)
|
||||
}
|
||||
@@ -238,6 +239,48 @@ func (r dashboardRepo) GetPerbandinganKategoriAntrean(c *gin.Context, req Period
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (r dashboardRepo) GetAntrianPerHari(c *gin.Context, req PeriodeDashboardRequest) ([]AntrianPerHari, error) {
|
||||
var result []AntrianPerHari
|
||||
|
||||
startDate, endDate := GenerateStartEndDate(req)
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
From: TBL_NAME,
|
||||
Aliases: "dpo",
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "DATE(dpo.\"Tanggal_daftar\")", Alias: "tanggal_daftar"},
|
||||
{Expression: "count(dpo.id) filter (where dpo.\"Status_operasi\" = ('1')) as belum"},
|
||||
{Expression: "count(dpo.id) filter (where dpo.\"Status_operasi\" = ('2')) as selesai"},
|
||||
{Expression: "count(dpo.id) filter (where dpo.\"Status_operasi\" = ('3')) as tunda"},
|
||||
{Expression: "count(dpo.id) filter (where dpo.\"Status_operasi\" = ('4')) as batal"},
|
||||
},
|
||||
Filters: []queryUtils.FilterGroup{
|
||||
{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{Column: "dpo.Tanggal_daftar", Operator: queryUtils.OpBetween, Value: []string{startDate, endDate}},
|
||||
},
|
||||
},
|
||||
},
|
||||
GroupBy: []string{"DATE(dpo.\"Tanggal_daftar\")"},
|
||||
Sort: []queryUtils.SortField{
|
||||
{Column: "DATE(dpo.\"Tanggal_daftar\")", Order: "ASC"},
|
||||
},
|
||||
}
|
||||
|
||||
dbconn, err := r.db.GetSQLXDB(DB_NAME)
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, query, &result)
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (r dashboardRepo) GetTableAntrianPerSpesialis(c *gin.Context, req PeriodeDashboardRequest) ([]TableAntreanPerSpesialis, error) {
|
||||
var result []TableAntreanPerSpesialis
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
|
||||
r.GET("/antrian-per-spesialis", dashboardHandler.GetAntrianPerSpesialis)
|
||||
r.GET("/perbandingan-status-antrian", dashboardHandler.GetPerbandinganStatusAntrean)
|
||||
r.GET("/perbandingan-kategori-antrian", dashboardHandler.GetPerbandinganKategoriAntrean)
|
||||
r.GET("/antrian-per-hari", dashboardHandler.GetAntrianPerHari)
|
||||
r.GET("/table-antrian-per-spesialis", dashboardHandler.GetTableAntrianPerSpesialis)
|
||||
r.GET("/table-antrian-per-subspesialis", dashboardHandler.GetTableAntrianPerSubSpesialis)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user