วันพฤหัสบดีที่ 25 กรกฎาคม พ.ศ. 2562

yii2 ปรับแต่งGridView ข้อความที่ยาว

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'options' => [
                'style'=>'overflow: auto; word-wrap: break-word;'
        ],
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

....

            [
                'attribute'=>'pi_desc',
                'value'=>function ($model) { return $model->pi_desc; },
                'format'=>'raw',
                'label'=>'Desc',
                'contentOptions' => ['style'=>'max-width:300px;'],
            ],

yii2 modal popup

yii2 basicนะครับ index.php
1.<?php Modal::begin([
'id' => 'modal',
'header' => '<h4><a color-blue>CREATE PERMITS</a></h4>',
'size'=>'modal-lg',
'footer' => '<a href="#" class="btn btn-primary" data-dismiss="modal">ปิด</a>',
]);
echo "<div id='modalContent'></div>";
Modal::end();
?>

2.วาง Link:::
<p>
<?= Html::button('เพิ่มรางวัลดีเด่น', ['value'=>Url::to(['awarduload/create']), 'class' =>
'btn btn-danger','id'=>'modalButton']); ?>
</p>
3.ท้ายindex.php
<?php
$this->registerJsFile('@web/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
?>
4.controller
public function actionCreate()
{
$model = new Awarduload();

if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index', 'id' => $model->id]);
} else {
return $this->renderAjax('create', [
'model' => $model,
]);
}
}


https://alcaponpo.wordpress.com/2018/11/03/gridview-click-%E0%B9%81%E0%B8%A5%E0%B9%89%E0%B8%A7%E0%B9%81%E0%B8%AA%E0%B8%94%E0%B8%87-modal-popup/






















































































วันพุธที่ 24 กรกฎาคม พ.ศ. 2562

การใช้งาน BlameableBehavior และ TimestampBehavior ใน Yii2

แก้ปัญหาการจัดการ Timestamp และการบันทึก User ที่ทำการแก้ไขหรือเพิ่มข้อมูลบน Database ด้วย  Yii2 BlameableBehavior และ TimestampBehavior
ผมเชื่อว่าเมื่อก่อน หลาย ๆ คนคงเคยเจอกับความน่ารำคาญในการจัดการกับ Timestamp และการแทรคกิ้งคนที่เข้ามาแก้ไขข้อมูลในฐานข้อมูลผ่านระบบ ต้องมาคอยอัพเตดทุกครั้งมันไม่ใช่เรื่องสนุกแน่ ซึ่ง Framework ใหม่ ๆ ล้วนแต่มีโซลูชั่นในการแก้ปัญหานี้ โดยการทำการบันทึกให้แบบอัตโนมัติ ช่วยให้ Developer สามารถทำงานได้สะดวกขึ้นรวมไปถึง Yii2 ก็เช่นกันครับ
สิ่งที่ Yii2 นำมาช่วยคือ BlameableBehavior และ  TimestampBehavior นั่นเองโดยที่มันจะคอยเชคให้ว่าใครเป็นคนเข้าสู่ระบบเพื่อบันทึกว่าใครเป็นคนแก้ไขหรือเพิ่มข้อมูล และยังอัพเดต Timestamp ให้อัตโนมัติโดยที่เราไม่ต้องทำอะไรเลย

การใช้งาน BlameableBehavior และ TimestampBehavior


การใช้งาน BlameableBehavior และ TimestampBehavior นั้นจะถูกเซตค่าจากใน Model โดยจะต้องทำการ Use เจ้านี่ก่อนเป็นอย่างแรกครับ
อ้อ ในฐานข้อมูลเราจำเป็นต้องมีฟิลด์ที่เก็บข้อมูล Timestamp และผู้จัดการข้อมูลด้วยนะครับ ยกตัวอย่างเช่น
  • created_at ใช้สำหรับบันทึก Timestamp เมื่อมีการเพิ่ม Record ขึ้นมาใหม่
  • updated_at ใช้สำหรับบันทึก Timestamp เมื่อมีการแก้ไขหรือเปลี่ยนแปลงข้อมูล
  • created_by ใช้สำหรับบันทึก Id ข้อผู้ที่สร้าง Record นั้น
  • updated_by ช้สำหรับบันทึก Id ข้อผู้ที่แก้ไขหรือเปลี่ยนแปลงข้อมูลล่คนาสุด
โดยจะต้องทำการเพิ่มฟังก์ชัน behaviors ขึ้นมาก่อนครับ
ในตัวนี้แปะไว้ใน Model ครับ
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'send_at',
'updatedAtAttribute' => 'updated_at',
'value' => new Expression( 'NOW()' ),
],
[
'class' => BlameableBehavior::className(),
//'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'repair_by',
],

];
}

วันพฤหัสบดีที่ 18 กรกฎาคม พ.ศ. 2562

วันจันทร์ที่ 24 มิถุนายน พ.ศ. 2562

SQL หาจำนวนวันนอน Mbase_data

SELECT DISTINCT a.VISIT_ID, b.HN, a.ADM_DT, a.ADM_ID ,a.DSC_DT, a.RW, a.DRG, a.ADJRW , b.INSCL, u.DATE_ABORT,u.HOSPMAIN,
((to_days(a.DSC_DT)*24)- (to_days(a.ADM_DT)*24))/24 AS DAYS, abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600)) as Times,
CASE
WHEN abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600))>= 6  THEN '1'
WHEN abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600))< 6  THEN '0'
END AS HOUR
FROM ipd_reg a
INNER JOIN opd_visits b on a.VISIT_ID = b.VISIT_ID AND b.IS_CANCEL = 0 AND b.INSCL BETWEEN '03' AND '04'
INNER JOIN cid_hn c ON b.HN = c.HN
INNER JOIN population p ON c.CID = p.CID 
INNER JOIN uc_inscl u ON p.CID = u.CID
INNER JOIN hosp_nhso_new n ON u.HOSPMAIN = n.HOSP_ID
INNER JOIN hosp3400 h ON u.HOSPMAIN = h.HOSP_ID AND u.HOSPMAIN = '10953'
WHERE a.ADM_DT BETWEEN @date1 AND @date2
AND a.IS_CANCEL = 0
AND (u.date_abort >= date(b.REG_DATETIME) or day(u.date_abort)=0)
AND a.rw < 1.6
AND a.DSC_DT <> 0 GROUP BY a.VISIT_ID

SQL mbase การคำนวนวันนอนและค่าRW

SET @date1='2017.10.01 00:01';
SET @date2='2017.12.30 23:59';

SELECT 'ผู้ป่วยในRW1.2-1.8' as 'สิทธิ์UCนอกอำเภอในจังหวัด' ,COUNT(s.HN) as visits,SUM(s.DAYS+s.HOUR)
FROM
(SELECT DISTINCT a.VISIT_ID, b.HN, a.ADM_DT, a.ADM_ID ,a.DSC_DT, a.RW, a.DRG, a.ADJRW , b.INSCL, u.DATE_ABORT,u.HOSPMAIN,
((to_days(a.DSC_DT)*24)- (to_days(a.ADM_DT)*24))/24 AS DAYS, abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600)) as Times,
CASE
WHEN abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600))>= 6  THEN '1'
WHEN abs((time_to_sec(a.DSC_DT)/3600) - (time_to_sec(a.ADM_DT)/3600))< 6  THEN '0'
END AS HOUR
FROM ipd_reg a
INNER JOIN opd_visits b on a.VISIT_ID = b.VISIT_ID AND b.IS_CANCEL = 0 AND b.INSCL BETWEEN '03' AND '04'
INNER JOIN cid_hn c ON b.HN = c.HN
INNER JOIN population p ON c.CID = p.CID 
INNER JOIN uc_inscl u ON p.CID = u.CID
INNER JOIN hosp_nhso_new n ON u.HOSPMAIN = n.HOSP_ID
INNER JOIN hosp3400 h ON u.HOSPMAIN = h.HOSP_ID AND u.HOSPMAIN = '10953'
WHERE a.ADM_DT BETWEEN @date1 AND @date2
AND a.IS_CANCEL = 0
AND (u.date_abort >= date(b.REG_DATETIME) or day(u.date_abort)=0)
AND a.rw < 1.6
AND a.DSC_DT <> 0 GROUP BY a.VISIT_ID) as s