394 lines
15 KiB
PHP
394 lines
15 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Http\Requests\EventImprovedHealthRequest;
|
||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
|
||
|
||
use App\Mail\EventNotifyMail;
|
||
use Illuminate\Support\Facades\Mail;
|
||
use Exception;
|
||
|
||
/**
|
||
* Class EventImprovedHealthCrudController
|
||
* @package App\Http\Controllers\Admin
|
||
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
|
||
*/
|
||
class EventImprovedHealthCrudController extends CrudController
|
||
{
|
||
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
|
||
//use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
|
||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
|
||
//use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
|
||
//use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
|
||
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation { update as traitUpdate; }
|
||
use \RedSquirrelStudio\LaravelBackpackExportOperation\ExportOperation;
|
||
|
||
/**
|
||
* Configure the CrudPanel object. Apply settings to all operations.
|
||
*
|
||
* @return void
|
||
*/
|
||
public function setup()
|
||
{
|
||
CRUD::setModel(\App\Models\EventImprovedHealth::class);
|
||
CRUD::setRoute(config('backpack.base.route_prefix') . '/event-improved-health');
|
||
CRUD::setEntityNameStrings('活動:健康達標GO', '活動:健康達標GO');
|
||
}
|
||
|
||
protected function setupExportOperation()
|
||
{
|
||
CRUD::addColumns([
|
||
[
|
||
'name' => 'id',
|
||
'label' => 'ID',
|
||
'type' => 'text',
|
||
'prefix' => 'A-'
|
||
],
|
||
[
|
||
'name' => 'check_state',
|
||
'label' => '審核狀態',
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
|
||
],
|
||
[
|
||
'name' => 'disease_type',
|
||
'label' => '疾病類別',
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
|
||
],
|
||
[
|
||
'name' => 'hospital_name',
|
||
'label' => '就醫院所',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'name',
|
||
'label' => '姓名',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'twid',
|
||
'label' => '身份證',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'phone',
|
||
'label' => '手機號碼',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'email',
|
||
'label' => 'Email',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'address',
|
||
'label' => '地址',
|
||
'type' => 'textarea',
|
||
],
|
||
]);
|
||
|
||
$this->setupListOperation();
|
||
$this->disableUserConfiguration();
|
||
}
|
||
|
||
/**
|
||
* Define what happens when the List operation is loaded.
|
||
*
|
||
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
|
||
* @return void
|
||
*/
|
||
protected function setupListOperation()
|
||
{
|
||
CRUD::filter('審核狀態')
|
||
->type('dropdown')
|
||
->values([
|
||
1 => '未審核',
|
||
2 => '通過 〇',
|
||
3 => '未通過 ✖'
|
||
])
|
||
->whenActive(function($value) {
|
||
CRUD::addClause('where', 'check_state', $value);
|
||
});
|
||
CRUD::filter('疾病類別')
|
||
->type('dropdown')
|
||
->values([
|
||
1 => '代謝症候群',
|
||
2 => '糖尿病',
|
||
3 => '初期慢性腎臟病',
|
||
4 => '糖尿病及初期慢性腎臟病'
|
||
])
|
||
->whenActive(function($value) {
|
||
CRUD::addClause('where', 'disease_type', $value);
|
||
});
|
||
CRUD::filter('ID')
|
||
->type('text')
|
||
->whenActive(function($value) {
|
||
CRUD::addClause('where', 'id', $value);
|
||
});
|
||
CRUD::filter('就醫院所')
|
||
->type('text')
|
||
->whenActive(function($value) {
|
||
CRUD::addClause('where', 'hospital_name', 'LIKE', "%$value%");
|
||
});
|
||
CRUD::filter('姓名')
|
||
->type('text')
|
||
->whenActive(function($value) {
|
||
CRUD::addClause('where', 'name', 'LIKE', "%$value%");
|
||
});
|
||
|
||
$this->crud->addColumns([
|
||
[
|
||
'name' => 'id',
|
||
'label' => '報名流水號',
|
||
'type' => 'text',
|
||
'value' => function($entry) {
|
||
return 'B-'. str_pad($entry->id, 6, '0', STR_PAD_LEFT);
|
||
}
|
||
],
|
||
[
|
||
'name' => 'created_at',
|
||
'label' => '登記時間',
|
||
'type' => 'datetime',
|
||
'format' => 'YYYY/MM/DD HH:mm:SS'
|
||
],
|
||
[
|
||
'name' => 'check_state',
|
||
'label' => '審核狀態',
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
|
||
],
|
||
[
|
||
'name' => 'twid',
|
||
'label' => '身份證',
|
||
'type' => 'text'
|
||
],
|
||
[
|
||
'name' => 'name',
|
||
'label' => '姓名',
|
||
'type' => 'text'
|
||
],
|
||
[
|
||
'name' => 'disease_type',
|
||
'label' => '疾病類別',
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
|
||
],
|
||
[
|
||
'name' => 'hospital_name',
|
||
'label' => '就醫院所',
|
||
'type' => 'text',
|
||
],
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* Define what happens when the Create operation is loaded.
|
||
*
|
||
* @see https://backpackforlaravel.com/docs/crud-operation-create
|
||
* @return void
|
||
*/
|
||
protected function setupCreateOperation()
|
||
{
|
||
CRUD::setValidation(EventImprovedHealthRequest::class);
|
||
$this->crud->addFields([
|
||
[
|
||
'name' => 'disease_type',
|
||
'label' => '疾病類別',
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
|
||
],
|
||
[
|
||
'name' => 'hospital_name',
|
||
'label' => '就醫院所',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'name',
|
||
'label' => '姓名',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'twid',
|
||
'label' => '身份證',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'phone',
|
||
'label' => '手機號碼',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'email',
|
||
'label' => 'Email',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'address',
|
||
'label' => '地址',
|
||
'type' => 'text',
|
||
],
|
||
[
|
||
'name' => 'check_state',
|
||
'label' => "審核狀態",
|
||
'type' => 'select_from_array',
|
||
'options' => ['1' => '未審核 ', '2' => '通過 〇', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
|
||
'allows_null' => false,
|
||
'default' => '1',
|
||
],
|
||
[
|
||
'name' => 'check_reson',
|
||
'label' => "審核回應(未通過原因)",
|
||
'type' => 'text',
|
||
],
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* Define what happens when the Update operation is loaded.
|
||
*
|
||
* @see https://backpackforlaravel.com/docs/crud-operation-update
|
||
* @return void
|
||
*/
|
||
protected function setupUpdateOperation()
|
||
{
|
||
$this->setupCreateOperation();
|
||
CRUD::iframe('record_card_img_src', '記錄小卡', [
|
||
'url' => function ($crud) {
|
||
$entry = $crud->getCurrentEntry();
|
||
$path = str_replace("uploads/", "", $entry->record_card_img_src);
|
||
return $path ? route('storage.serve', $path) : "";
|
||
},
|
||
'width' => '400px',
|
||
'height' => '300px',
|
||
'extra_attributes' => [
|
||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||
'allow' => 'fullscreen',
|
||
],
|
||
'hint' => '',
|
||
]);
|
||
|
||
CRUD::iframe('twid_front_img_src', '身份證正面', [
|
||
'url' => function ($crud) {
|
||
$entry = $crud->getCurrentEntry();
|
||
$path = str_replace("uploads/", "", $entry->twid_front_img_src);
|
||
return $path ? route('storage.serve', $path) : "";
|
||
},
|
||
'width' => '400px',
|
||
'height' => '300px',
|
||
'extra_attributes' => [
|
||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||
'allow' => 'fullscreen',
|
||
],
|
||
'hint' => '',
|
||
]);
|
||
|
||
CRUD::iframe('twid_back_img_src', '身份證反面', [
|
||
'url' => function ($crud) {
|
||
$entry = $crud->getCurrentEntry();
|
||
$path = str_replace("uploads/", "", $entry->twid_back_img_src);
|
||
return $path ? route('storage.serve', $path) : "";
|
||
},
|
||
'width' => '400px',
|
||
'height' => '300px',
|
||
'extra_attributes' => [
|
||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||
'allow' => 'fullscreen',
|
||
],
|
||
'hint' => '',
|
||
]);
|
||
|
||
CRUD::iframe('exam_img_src', '檢查報告', [
|
||
'url' => function ($crud) {
|
||
$entry = $crud->getCurrentEntry();
|
||
$path = str_replace("uploads/", "", $entry->exam_img_src);
|
||
return $path ? route('storage.serve', $path) : "";
|
||
},
|
||
'width' => '400px',
|
||
'height' => '300px',
|
||
'extra_attributes' => [
|
||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||
'allow' => 'fullscreen',
|
||
],
|
||
'hint' => '',
|
||
]);
|
||
|
||
CRUD::iframe('exam2_img_src', '檢查報告2', [
|
||
'url' => function ($crud) {
|
||
$entry = $crud->getCurrentEntry();
|
||
$path = str_replace("uploads/", "", $entry->exam2_img_src);
|
||
return $path ? route('storage.serve', $path) : "";
|
||
},
|
||
'width' => '400px',
|
||
'height' => '300px',
|
||
'extra_attributes' => [
|
||
'sandbox' => 'allow-same-origin allow-scripts allow-popups', // Security: Restrict iframe
|
||
'allow' => 'fullscreen',
|
||
],
|
||
'hint' => '',
|
||
]);
|
||
}
|
||
|
||
public function update()
|
||
{
|
||
$entry = $this->crud->getCurrentEntry();
|
||
$org_check_state = $entry->check_state;
|
||
// do something before validation, before save, before everything
|
||
$response = $this->traitUpdate();
|
||
// do something after save
|
||
$entry = $this->crud->getCurrentEntry();
|
||
|
||
$diseaseTypes = ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'];
|
||
|
||
if ($entry->check_state != $org_check_state) {
|
||
switch($entry->check_state) {
|
||
case '2': //過通
|
||
try {
|
||
Mail::to($entry->email)->send(new EventNotifyMail(
|
||
'桃園市政府衛生局114年桃園市健康管理計畫「健康達標GO,大獎汽車不是夢」審核通過信件。',
|
||
[
|
||
"title" => "健康達標GO,大獎汽車不是夢 審核通過!",
|
||
"body" => "登記資料:"
|
||
."\n流水號: A-".str_pad($entry->id, 6, '0', STR_PAD_LEFT)
|
||
."\n就醫院所:".$entry->hospital_name
|
||
."\n姓名:".(mb_strlen($entry->name) > 2 ? mb_substr($entry->name,0,1)."*".mb_substr($entry->name,-1) : mb_substr($entry->name,0,1)."*")
|
||
."\n身份證字號:".substr($entry->twid,0,2)."****".substr($entry->twid,-4)
|
||
."\n電話號碼:".substr($entry->phone,0,2)."****".substr($entry->phone,-4)
|
||
."\n\n抽獎說明:"
|
||
."\n本活動將於10月抽出得獎名單並公告於「<a href=\"". route('news') ."\" target=\"_blank\">活動網站/最新消息</a>」及「<a href=\"https://dph.tycg.gov.tw/News.aspx?n=4219&sms=10121\" target=\"_blank\">桃園市政府衛生局網站/訊息公告/最新消息</a>」。"
|
||
,
|
||
]));
|
||
|
||
} catch (Exception $ex) {
|
||
|
||
}
|
||
break;
|
||
case '3': //未通過
|
||
try {
|
||
Mail::to($entry->email)->send(new EventNotifyMail(
|
||
'桃園市政府衛生局114年桃園市健康管理計畫「健康達標GO,大獎汽車不是夢」審核未通過信件。',
|
||
[
|
||
"title" => "健康達標GO,大獎汽車不是夢 審核未通過!",
|
||
"body" => "抱歉,您的審核未通過!請依以下理由重新上活動網站登記。"
|
||
."\n理由:".$entry->check_reson
|
||
."\n\n登記資料:"
|
||
."\n流水號: A-".str_pad($entry->id, 6, '0', STR_PAD_LEFT)
|
||
."\n就醫院所:".$entry->hospital_name
|
||
."\n姓名:".(mb_strlen($entry->name) > 2 ? mb_substr($entry->name,0,1)."*".mb_substr($entry->name,-1) : mb_substr($entry->name,0,1)."*")
|
||
."\n身份證字號:".substr($entry->twid,0,2)."****".substr($entry->twid,-4)
|
||
."\n電話號碼:".substr($entry->phone,0,2)."****".substr($entry->phone,-4)
|
||
,
|
||
]));
|
||
|
||
} catch (Exception $ex) {
|
||
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
return $response;
|
||
}
|
||
}
|