Files
dph-tycg-event/app/Http/Controllers/Admin/EventImprovedHealthCrudController.php
2025-06-26 19:20:25 +08:00

394 lines
15 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}
}