2024-12-25 03:04:59 +00:00
< ? php
namespace frontend\modules\cyto\controllers ;
use Yii ;
use yii\web\Controller ;
use common\models\CasePap ;
use common\models\CaseNonGyn ;
use common\models\SearchDate ;
use yii\data\ActiveDataProvider ;
use common\models\CytoPapDiagnosis ;
use common\models\StatCytoDateDiff ;
use frontend\modules\cyto\models\CasePapForm ;
use frontend\modules\cyto\models\DateForm ;
use frontend\modules\cyto\models\PatientCaseSearch ;
use yii\data\ArrayDataProvider ;
class StatisticController extends Controller
{
public function actionCytotech ()
{
$search_date = new SearchDate ;
$pap = [];
$sum_pap = 1 ;
$fn = [];
$sum_fn = 1 ;
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$pap = CasePap :: find ()
-> select ([ 'MIN(cytotech1_id) as cytotech1_id' , 'MIN(cytotech2_id) as cytotech2_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_pap.id_case) as cnt' ])
//->leftJoin('cyto_operate', 'case_pap.id_case = cyto_operate.id_case')
-> leftJoin ( 'user_table' , 'case_pap.cytotech1_id = user_table.id' )
-> leftJoin ( 'user_table' , 'case_pap.cytotech2_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ( 'cytotech1_id' , 'cytotech2_id' )
-> asArray ()
-> all ();
foreach ( $pap as $item ) {
$sum_pap += $item [ 'cnt' ];
}
$fn = CaseNonGyn :: find ()
-> select ([ 'MIN(cytotech1_id) as cytotech1_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_non_gyn.id_case) as cnt' ])
//->leftJoin('cyto_operate', 'case_non_gyn.id_case = cyto_operate.id_case')
-> leftJoin ( 'user_table' , 'case_non_gyn.cytotech1_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ( 'cytotech1_id' )
-> asArray ()
-> all ();
foreach ( $fn as $item ) {
$sum_fn += $item [ 'cnt' ];
}
}
return $this -> render ( 'cytotech' , [
'search_date' => $search_date ,
'pap' => $pap ,
'sum_pap' => $sum_pap ,
'fn' => $fn ,
'sum_fn' => $sum_fn ,
]);
}
public function actionType ()
{
$pap = [];
$fn = [];
$search_date = new SearchDate ();
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$pap = CasePap :: find ()
-> select ([ 'MIN(cyto_collect_method.name) AS name' , 'COUNT(case_pap.id_case) AS cnt' ])
-> leftJoin ( 'cyto_collect_method' , 'cyto_collect_method.id = case_pap.collect_method' )
//->leftJoin('cyto_operate', 'case_pap.id_case = cyto_operate.id_case')
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ([ 'name' ])
-> asArray ()
-> all ();
$fn = CaseNonGyn :: find ()
-> select ([ 'MIN(cyto_specimen_type.name) AS name' , 'COUNT(case_non_gyn.id_case) AS cnt' ])
-> leftJoin ( 'cyto_specimen_type' , 'case_non_gyn.specimen_type_id = cyto_specimen_type.id' )
//->leftJoin('cyto_operate', 'case_non_gyn.id_case = cyto_operate.id_case')
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ([ 'name' ])
-> asArray ()
-> all ();
}
return $this -> render ( 'type' , [
'pap' => $pap ,
'fn' => $fn ,
'search_date' => $search_date
]);
}
public function actionUnsatisfactory ()
{
return $this -> render ( 'unsatisfactory' , []);
}
public function actionTurnaroundtime ()
{
$search_date = new SearchDate ();
$sumPap = 0 ;
$statPap = [];
$dataProviderPap = [];
$sumFn = 0 ;
$statFn = [];
$dataProviderFn = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$statPap = StatCytoDateDiff :: find ()
-> select ([ 'day_register' , 'COUNT(id_case) as cnt' ,])
//->count('summary_time')
//->where('center_out_at IS NOT NULL')
-> andFilterWhere ([ 'like' , 'id_case' , 'PN' ])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
//->andFilterWhere(['between', 'center_out_at', Yii::$app->pathology->searchDateStart($search_date->date_start), Yii::$app->pathology->searchDateEnd($search_date->date_end)])
-> groupBy ([ 'day_register' ])
//->limit(20)
-> orderBy ([ 'day_register' => SORT_ASC ])
-> asArray ()
-> all ();
foreach ( $statPap as $item ) {
$sumPap += $item [ 'cnt' ];
}
$dataProviderPap = new ActiveDataProvider ([
'query' => StatCytoDateDiff :: find ()
//->where('center_out_at IS NOT NULL')
-> andFilterWhere ([ 'like' , 'id_case' , 'PN' ])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
]);
$statFn = StatCytoDateDiff :: find ()
-> select ([ 'day_register' , 'COUNT(id_case) as cnt' ,])
//->count('summary_time')
//->where('center_out_at IS NOT NULL')
-> andFilterWhere ([ 'like' , 'id_case' , 'FN' ])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
//->andFilterWhere(['between', 'center_out_at', Yii::$app->pathology->searchDateStart($search_date->date_start), Yii::$app->pathology->searchDateEnd($search_date->date_end)])
-> groupBy ([ 'day_register' ])
//->limit(20)
-> orderBy ([ 'day_register' => SORT_ASC ])
-> asArray ()
-> all ();
foreach ( $statFn as $item ) {
$sumFn += $item [ 'cnt' ];
}
$dataProviderFn = new ActiveDataProvider ([
'query' => StatCytoDateDiff :: find ()
//->where('center_out_at IS NOT NULL')
-> andFilterWhere ([ 'like' , 'id_case' , 'FN' ])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
]);
}
return $this -> render ( 'turnaroundtime' , [
'search_date' => $search_date ,
'sumPap' => $sumPap ,
'statPap' => $statPap ,
'dataProviderPap' => $dataProviderPap ,
'sumFn' => $sumFn ,
'statFn' => $statFn ,
'dataProviderFn' => $dataProviderFn
]);
}
/**
* @ return string
*/
public function actionCytotechnologist ()
{
$model = new CasePapForm ();
$dataProvider = [];
if ( $model -> load ( Yii :: $app -> request -> post ())) {
$dataProvider = new ActiveDataProvider ([
'query' => CytoPapDiagnosis :: find ()
-> joinWith ([ 'pap' ])
-> andFilterWhere ([ 'between' , 'case_pap.register_at' , $model -> date_start . ' 00:00:00' , $model -> date_end . ' 23:59:59' ]),
//->andFilterWhere(['between', 'case_pap.register_at', Yii::$app->pathology->searchDateStart($model->date_start), Yii::$app->pathology->searchDateEnd($model->date_end)]),
'sort' => [
'defaultOrder' => [
'id_case' => SORT_ASC
]
],
'pagination' => false ,
]);
}
return $this -> render ( 'cytotechnologist' , [
'model' => $model ,
'dataProvider' => $dataProvider ,
]);
}
public function actionConsult ()
{
$search_date = new SearchDate ();
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
}
return $this -> render ( 'consult' , [
'search_date' => $search_date
]);
}
public function actionStatUser ()
{
$search_date = new SearchDate ;
$pap = [];
$sum_pap = 1 ;
$fn = [];
$sum_fn = 1 ;
$qa = '' ;
$sum_qa = '' ;
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$pap = CasePap :: find ()
-> select ([ 'MIN(cytotech1_id) as cytotech1_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_pap.id_case) as cnt' ])
//->leftJoin('cyto_operate', 'case_pap.id_case = cyto_operate.id_case')
-> leftJoin ( 'user_table' , 'case_pap.cytotech1_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'case_pap.register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ( 'cytotech1_id' )
-> asArray ()
-> all ();
foreach ( $pap as $item ) {
$sum_pap += $item [ 'cnt' ];
}
$fn = CaseNonGyn :: find ()
-> select ([ 'MIN(cytotech1_id) as cytotech1_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_non_gyn.id_case) as cnt' ])
//->leftJoin('cyto_operate', 'case_non_gyn.id_case = cyto_operate.id_case')
-> leftJoin ( 'user_table' , 'case_non_gyn.cytotech1_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'case_non_gyn.register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ( 'cytotech1_id' )
-> asArray ()
-> all ();
foreach ( $fn as $item ) {
$sum_fn += $item [ 'cnt' ];
}
$qa_send = CasePap :: find ()
-> select ([ 'MIN(cytotech1_id) as cytotech1_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_pap.id_case) as cnt' ])
//->leftJoin('cyto_operate', 'case_pap.id_case = cyto_operate.id_case')
-> leftJoin ( 'user_table' , 'case_pap.cytotech1_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'case_pap.register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> andWhere ( " case_pap.qa_list_id != '' " )
-> groupBy ( 'cytotech1_id' )
-> asArray ()
-> all ();
$sum_qa_send = 0 ;
foreach ( $qa_send as $item ) {
$sum_qa_send += $item [ 'cnt' ];
}
$qa = CasePap :: find ()
-> select ([ 'MIN(screener_qa_id) as screener_qa_id' , 'MIN(user_table.realname) as realname' , 'COUNT(case_pap.id_case) as cnt' ])
-> leftJoin ( 'cyto_operate' , 'case_pap.id_case = cyto_operate.id_case' )
-> leftJoin ( 'user_table' , 'case_pap.screener_qa_id = user_table.id' )
-> andFilterWhere ([ 'between' , 'case_pap.register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> andWhere ( " case_pap.qa_list_id != '' " )
-> groupBy ( 'screener_qa_id' )
-> asArray ()
-> all ();
$sum_qa = 0 ;
foreach ( $qa as $item ) {
$sum_qa += $item [ 'cnt' ];
}
}
return $this -> render ( 'stat-user' , [
'search_date' => $search_date ,
'pap' => $pap ,
'sum_pap' => $sum_pap ,
'fn' => $fn ,
'sum_fn' => $sum_fn ,
'qa_send' => isset ( $qa_send ) ? $qa_send : [],
'sum_qa_send' => isset ( $sum_qa_send ) ? $sum_qa_send : [],
'qa' => isset ( $qa ) ? $qa : [],
'sum_qa' => isset ( $sum_qa ) ? $sum_qa : [],
]);
}
public function actionConsultGyn ()
{
$search_date = new SearchDate ();
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
}
return $this -> render ( 'consult-gyn' , [
'search_date' => $search_date
]);
}
public function actionConsultNonGyn ()
{
$search_date = new SearchDate ();
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
}
return $this -> render ( 'consult-non-gyn' , [
'search_date' => $search_date
]);
}
public function actionStatPapAll ()
{
$sum_pap = 0 ;
$sum_non_gyn = 0 ;
$sum_fna = 0 ;
$search_date = new SearchDate ();
$stat_pap = [];
$stat_non_gyn = [];
$stat_fna = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
//var_dump($search_date);
$stat_pap = CasePap :: find ()
-> select ([ 'pathologist_id' , 'COUNT(id_case) as cnt' ,])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ([ 'pathologist_id' ])
-> asArray ()
-> all ();
foreach ( $stat_pap as $item ) {
$sum_pap += $item [ 'cnt' ];
}
$stat_non_gyn = CaseNonGyn :: find ()
-> select ([ 'pathologist_id' , 'COUNT(id_case) as cnt' ,])
-> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )])
-> groupBy ([ 'pathologist_id' ])
-> asArray ()
-> all ();
foreach ( $stat_non_gyn as $item ) {
$sum_non_gyn += $item [ 'cnt' ];
}
$stat_fna = CaseNonGyn :: find ()
-> select ([ 'pathologist_id' , 'COUNT(id_case) as cnt' ,])
-> andFilterWhere ([ 'specimen_type_id' => 5 ])
-> groupBy ([ 'pathologist_id' ])
-> asArray ()
-> all ();
foreach ( $stat_fna as $item ) {
$sum_fna += $item [ 'cnt' ];
}
}
return $this -> render ( 'stat-pap-all' , [
'stat_pap' => $stat_pap ,
'stat_non_gyn' => $stat_non_gyn ,
'stat_fna' => $stat_fna ,
'sum_pap' => $sum_pap ,
'sum_non_gyn' => $sum_non_gyn ,
'sum_fna' => $sum_fna ,
'search_date' => $search_date ,
]);
}
public function actionStatCytoScreener ()
{
$sum_pap = 0 ;
$search_date = new SearchDate ();
$stat_pap = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
//var_dump($search_date);
$stat_pap = CasePap :: find ()
-> select ([ 'pathologist_id' , 'COUNT(*) as cnt' ])
-> andFilterWhere ([
'between' , 'register_at' ,
Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ),
Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )
])
-> andWhere ([ 'NOT' , [ 'pathologist_id' => null ]]) // Exclude null pathologist_id
-> groupBy ([ 'pathologist_id' ])
-> asArray ()
-> all ();
$sum_pap = 0 ;
foreach ( $stat_pap as $item ) {
$sum_pap += $item [ 'cnt' ];
}
}
return $this -> render ( 'stat-cyto-screener' , [
'stat_pap' => $stat_pap ,
'sum_pap' => $sum_pap ,
'search_date' => $search_date ,
]);
}
public function actionReportNonGynAll ()
{
$search_date = new SearchDate ();
$dataProvider = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$searchModel = new PatientCaseSearch ();
$dataProvider = $searchModel -> search ( Yii :: $app -> request -> queryParams );
$dataProvider -> query -> andFilterWhere ([ 'like' , 'id_case' , 'C%' , false ]);
$dataProvider -> query -> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )]);
$dataProvider -> query -> orderBy ([ 'id_case' => SORT_DESC ]);
}
return $this -> render ( 'report-non-gyn-all' , [
'search_date' => $search_date ,
'dataProvider' => $dataProvider ,
]);
}
public function actionReportGynAll ()
{
$search_date = new SearchDate ();
$dataProvider = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$searchModel = new PatientCaseSearch ();
$dataProvider = $searchModel -> search ( Yii :: $app -> request -> queryParams );
$dataProvider -> query -> andFilterWhere ([ 'like' , 'id_case' , 'P%' , false ]);
$dataProvider -> query -> andFilterWhere ([ 'between' , 'register_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )]);
$dataProvider -> query -> orderBy ([ 'id_case' => SORT_DESC ]);
}
return $this -> render ( 'report-gyn-all' , [
'search_date' => $search_date ,
'dataProvider' => $dataProvider ,
]);
}
public function actionCytoIncident ()
{
$search_date = new SearchDate ;
$inciden = [];
$sum_inciden = 1 ;
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
}
return $this -> render ( 'cyto-incident' , [
'search_date' => $search_date ,
'inciden' => $inciden ,
'sum_inciden' => $sum_inciden ,
]);
}
public function actionStatQaSlide ()
{
$dataProvider = false ;
$data = false ;
$total = 0 ;
$total_diff = 0 ;
$total_minor = 0 ;
$total_major = 0 ;
$model = new DateForm ();
if ( $model -> load ( Yii :: $app -> request -> get ())) {
$sql = "
SELECT
DATE_FORMAT ( cytotech1_at , '%d/%m/%Y' ) as month ,
COUNT ( cyto_pap_diagnosis . is_same ) as same ,
COUNT ( cyto_pap_diagnosis . is_difference ) as diff ,
SUM ( cyto_pap_diagnosis . is_difference = 1 ) as minor ,
SUM ( cyto_pap_diagnosis . is_difference = 2 ) as major
FROM
cyto_pap_diagnosis
WHERE
cytotech1_at BETWEEN '" . Yii::$app->pathology->searchDateStart($model->date_start) . " 00:00:00'
AND '" . Yii::$app->pathology->searchDateEnd($model->date_end) . " 23:59:59'
-- AND LEFT ( id_case , 1 ) = 'S'
GROUP BY
DATE_FORMAT ( cytotech1_at , '%d/%m/%Y' )
" ;
$data = Yii :: $app -> db -> createCommand ( $sql ) -> queryAll ();
$dataProvider = new ArrayDataProvider ([
'allModels' => $data ,
'pagination' => false ,
]);
foreach ( $data as $t ) {
$total += $t [ 'same' ];
$total_diff += $t [ 'diff' ];
$total_minor += $t [ 'minor' ];
$total_major += $t [ 'major' ];
}
}
return $this -> render ( 'stat-qa-slide' , [
'dataProvider' => $dataProvider ,
'data' => $data ,
'total' => $total ,
'total_diff' => $total_diff ,
'total_minor' => $total_minor ,
'total_major' => $total_major ,
'model' => $model
]);
}
2025-05-07 04:30:40 +00:00
public function actionStatCytotech ()
{
$search_date = new SearchDate ();
$dataProvider = [];
if ( $search_date -> load ( Yii :: $app -> request -> get ())) {
$searchModel = new PatientCaseSearch ();
$dataProvider = $searchModel -> search ( Yii :: $app -> request -> queryParams );
$dataProvider -> query -> andFilterWhere ([ 'between' , 'receive_at' , Yii :: $app -> pathology -> searchDateStart ( $search_date -> date_start ), Yii :: $app -> pathology -> searchDateEnd ( $search_date -> date_end )]);
}
return $this -> render ( 'stat-cytotech' , [
'search_date' => $search_date ,
'dataProvider' => $dataProvider ,
]);
}
2024-12-25 03:04:59 +00:00
}