diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index 0b9a32d..967d4ca 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -403,22 +403,25 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c context.Context, q An }, } - var resultDiagnosa []DiagnosaOperasiModel - err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDiagnosa, &resultDiagnosa) - if err != nil { - log.Printf("Unable to execute query diagnosa : %s", err) - return result, err - } + // if query id specified, no need to attach support data + if q.Id == "" { + var resultDiagnosa []DiagnosaOperasiModel + err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDiagnosa, &resultDiagnosa) + if err != nil { + log.Printf("Unable to execute query diagnosa : %s", err) + return result, err + } - // attach support data to parent - shared.MapChildToParent( - result.Data, resultDiagnosa, - func(o *PasienOperasi) string { return o.ID }, - func(d DiagnosaOperasiModel) string { return d.AntrianId }, - func(o *PasienOperasi, d DiagnosaOperasiModel) { - o.Diagnosa = append(o.Diagnosa, d.Diagnosa.String) - }, - ) + // attach support data to parent + shared.MapChildToParent( + result.Data, resultDiagnosa, + func(o *PasienOperasi) string { return o.ID }, + func(d DiagnosaOperasiModel) string { return d.AntrianId }, + func(o *PasienOperasi, d DiagnosaOperasiModel) { + o.Diagnosa = append(o.Diagnosa, d.Diagnosa.String) + }, + ) + } return result, nil } @@ -723,6 +726,14 @@ func (r antrianOperasiRepo) UpdateAntrianOperasi(c context.Context, id string, r } func (r antrianOperasiRepo) UpdateStatusAntrianOperasi(c context.Context, id string, req StatusPasienRequest) (StatusPasienRequest, error) { + // get nomor antrian by antrian id + q := AntrianQuery{Id: id} + resultAntrian, err := r.SearchableListAntrianOperasi(c, q) + if err != nil { + return req, err + } + selectedAntrian := resultAntrian.Data[0] + // Update main table updateMainQuery := queryUtils.UpdateData{ Columns: []string{ @@ -734,8 +745,11 @@ func (r antrianOperasiRepo) UpdateStatusAntrianOperasi(c context.Context, id str } if req.StatusOperasi == "2" { - updateMainQuery.Columns = append(updateMainQuery.Columns, "\"Tanggal_selesai_operasi\"") - updateMainQuery.Values = append(updateMainQuery.Values, req.TglSelesai) + addedColumns := []string{"\"Tanggal_selesai_operasi\"", "\"Nomor\"", "\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\""} + addedValues := []interface{}{req.TglSelesai, selectedAntrian.NoUrutKategori, selectedAntrian.NoUrutSpesialis, selectedAntrian.NoUrutSubSpesialis} + + updateMainQuery.Columns = append(updateMainQuery.Columns, addedColumns...) + updateMainQuery.Values = append(updateMainQuery.Values, addedValues...) } filters := []queryUtils.FilterGroup{ @@ -1153,25 +1167,36 @@ func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB selectFilterCount = append(selectFilterCount, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status}) } + // search by id antrian. removing all filters + if q.Id != "" { + selectFilter = []queryUtils.DynamicFilter{} // reset select filter + selectFilterCount = []queryUtils.DynamicFilter{} // reset select filter count + + selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "id", Operator: queryUtils.OpEqual, Value: q.Id}) + } + // wiring all select filter query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"}) queryCount.Filters = append(queryCount.Filters, queryUtils.FilterGroup{Filters: selectFilterCount, LogicOp: "AND"}) - countData, err := r.queryBuilder.ExecuteCount(c, dbconn, queryCount) - if err != nil { - log.Printf("Unable to execute query count : %s ", err) - return result, err + // skipping count data if query id specified + if q.Id == "" { + countData, err := r.queryBuilder.ExecuteCount(c, dbconn, queryCount) + if err != nil { + log.Printf("Unable to execute query count : %s ", err) + return result, err + } + result.Paging.Limit = q.Limit + result.Paging.Offset = q.Offset + result.Paging.Total = int(countData) + result.Paging.CalculatePagingInfo() } - result.Paging.Limit = q.Limit - result.Paging.Offset = q.Offset - result.Paging.Total = int(countData) - result.Paging.CalculatePagingInfo() // query data queryData := query queryData.Limit = q.Limit queryData.Offset = q.Offset - err = r.queryBuilder.ExecuteQuery( + err := r.queryBuilder.ExecuteQuery( c, dbconn, queryData, &result.Data) if err != nil { log.Printf("Unable to execute query data : %s", err) diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go index e5c9c81..2c262c4 100644 --- a/internal/domain/antrian_operasi/request.go +++ b/internal/domain/antrian_operasi/request.go @@ -62,6 +62,7 @@ type CreatePasienOperasiRequest struct { } type AntrianQuery struct { + Id string `form:"id"` Search string `form:"search"` Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"` TypeID int `form:"type_id,default=0"`