Gửi email thông báo cho admin khi tạo đơn, trả email thông báo đơn được duyệt hoặc từ chối cho user
This commit is contained in:
parent
72b586e94a
commit
2fb2d44d6c
|
|
@ -19,4 +19,9 @@ class CategoryController extends Controller
|
|||
$data = Category::where('c_type', '=', $request->type)->where('c_active', '=', 1)->select('id', 'c_code', 'c_name', 'c_value', 'c_type')->get();
|
||||
return AbstractController::ResultSuccess($data);
|
||||
}
|
||||
public static function getListMasterByCodeAndType($type, $code)
|
||||
{
|
||||
$data = Category::where('c_type', '=', $type)->where('c_code', '=', $code)->where('c_active', '=', 1)->select('id', 'c_code', 'c_name', 'c_value', 'c_type')->first();
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ namespace Modules\Admin\app\Http\Controllers;
|
|||
|
||||
use App\Helper\Cache\CurrentMonthTimekeeping;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Mail\ContactMail;
|
||||
use App\Mail\TicketMail;
|
||||
use App\Models\Notes;
|
||||
use App\Traits\AnalyzeData;
|
||||
use App\Traits\HasFilterRequest;
|
||||
|
|
@ -13,6 +15,7 @@ use Carbon\Carbon;
|
|||
use Carbon\CarbonPeriod;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Admin\app\Models\Admin;
|
||||
use Modules\Admin\app\Models\Category;
|
||||
use Modules\Admin\app\Models\Ticket;
|
||||
|
|
@ -188,7 +191,6 @@ class TicketController extends Controller
|
|||
|
||||
public function createTicket(Request $request)
|
||||
{
|
||||
|
||||
// Define validation rules
|
||||
$rules = [
|
||||
'start_date' => 'required|date',
|
||||
|
|
@ -213,6 +215,15 @@ class TicketController extends Controller
|
|||
|
||||
// return $user;
|
||||
|
||||
$dataMasterStartPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $startPeriod);
|
||||
$dataMasterEndPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $endPeriod);
|
||||
$dataMasterType = CategoryController::getListMasterByCodeAndType("REASON", $type);
|
||||
|
||||
$formattedStartDate = Carbon::createFromFormat('d-m-Y', $startDate)->format('d/m/Y');
|
||||
$formattedEndDate = Carbon::createFromFormat('d-m-Y', $endDate)->format('d/m/Y');
|
||||
|
||||
$user = auth('admins')->user();
|
||||
|
||||
$ticket = Ticket::create([
|
||||
'start_date' => Carbon::create($startDate)->setTimezone(env('TIME_ZONE')),
|
||||
'start_period' => $startPeriod,
|
||||
|
|
@ -225,7 +236,22 @@ class TicketController extends Controller
|
|||
]);
|
||||
|
||||
// Send notification email to admin (list)
|
||||
|
||||
$admins = Admin::where('permission', 'admin')->get();
|
||||
foreach ($admins as $key => $value) {
|
||||
if ($value->email == "admin@apactech.io") {
|
||||
continue;
|
||||
}
|
||||
$data = array(
|
||||
"email_template" => "email.notification_tickets",
|
||||
"email" => $user->email,
|
||||
"name" => $user->name,
|
||||
"date" => $dataMasterStartPeriod->c_name . " (" . $formattedStartDate . ") - " . $dataMasterEndPeriod->c_name . " (" . $formattedEndDate . ")",
|
||||
"type" => $dataMasterType->c_name,
|
||||
"note" => $reason,
|
||||
"link" => "tickets-management" //link đến page admin
|
||||
);
|
||||
Mail::to($value->email)->send(new TicketMail($data));
|
||||
}
|
||||
|
||||
return response()->json(['data' => $ticket, 'status' => true]);
|
||||
}
|
||||
|
|
@ -288,9 +314,21 @@ class TicketController extends Controller
|
|||
|
||||
// Refuse
|
||||
// Update updated_by and admin_note in tickets table
|
||||
$startDate = $ticket->start_date; //Start day
|
||||
$startPeriod = $ticket->start_period; //The session begins
|
||||
$endDate = $ticket->end_date; //End date
|
||||
$endPeriod = $ticket->end_period; //Session ends
|
||||
$type = $ticket->type;
|
||||
|
||||
$dataMasterStartPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $startPeriod);
|
||||
$dataMasterEndPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $endPeriod);
|
||||
$dataMasterType = CategoryController::getListMasterByCodeAndType("REASON", $type);
|
||||
|
||||
$formattedStartDate = Carbon::createFromFormat('Y-m-d', $startDate)->format('d/m/Y');
|
||||
$formattedEndDate = Carbon::createFromFormat('Y-m-d', $endDate)->format('d/m/Y');
|
||||
|
||||
// Send notification email to users
|
||||
$user = Admin::find($ticket->user_id);
|
||||
|
||||
if ($action == "confirm") {
|
||||
foreach ($results as $result) {
|
||||
list($year, $month, $day) = explode('-', $result['date']);
|
||||
|
|
@ -340,9 +378,32 @@ class TicketController extends Controller
|
|||
$ticket['updated_by'] = $admin->name;
|
||||
$ticket['admin_note'] = $admin_note;
|
||||
$ticket['status'] = 'CONFIRMED';
|
||||
|
||||
$ticket->save();
|
||||
|
||||
$this->createOrUpdateRecordForCurrentMonth($month, $year);
|
||||
|
||||
// $admins = Admin::where('permission', 'admin')->get();
|
||||
// foreach ($admins as $key => $value) {
|
||||
// if ($value->email == "admin@apactech.io") {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// }
|
||||
// Send notification email to users
|
||||
$data = array(
|
||||
"email_template" => "email.notification_tickets_user",
|
||||
"user_name" => $user->name,
|
||||
"email" => $user->email,
|
||||
"name" => $admin->name, //name admin duyệt
|
||||
"date" => $dataMasterStartPeriod->c_name . " (" . $formattedStartDate . ") - " . $dataMasterEndPeriod->c_name . " (" . $formattedEndDate . ")",
|
||||
"type" => $dataMasterType->c_name,
|
||||
"note" => $ticket->reason,
|
||||
"admin_note" => $admin_note,
|
||||
"link" => "tickets", //link đến page admin
|
||||
"status" => "confirmed"
|
||||
);
|
||||
Mail::to($user->email)->send(new TicketMail($data));
|
||||
|
||||
return response()->json(['message' => "confirmed", 'status' => true]);
|
||||
}
|
||||
|
||||
|
|
@ -351,6 +412,20 @@ class TicketController extends Controller
|
|||
$ticket['admin_note'] = $admin_note;
|
||||
$ticket['status'] = 'REFUSED';
|
||||
$ticket->save();
|
||||
|
||||
$data = array(
|
||||
"email_template" => "email.notification_tickets_user",
|
||||
"user_name" => $user->name,
|
||||
"email" => $user->email,
|
||||
"name" => $admin->name, //name admin duyệt
|
||||
"date" => $dataMasterStartPeriod->c_name . " (" . $formattedStartDate . ") - " . $dataMasterEndPeriod->c_name . " (" . $formattedEndDate . ")",
|
||||
"type" => $dataMasterType->c_name,
|
||||
"note" => $ticket->reason,
|
||||
"admin_note" => $admin_note,
|
||||
"link" => "tickets", //link đến page admin
|
||||
"status" => "refused"
|
||||
);
|
||||
Mail::to($user->email)->send(new TicketMail($data));
|
||||
return response()->json(['message' => "refused", 'status' => true]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Mail\Mailables\Address;
|
||||
|
||||
class TicketMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
public $data;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct($data)
|
||||
{
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
// replyTo: [
|
||||
// new Address($this->data["email"], $this->data["name"]),
|
||||
// ],
|
||||
subject: '[Ticket] Ticket Mail',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
view: ($this->data["email_template"]),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
|
|
@ -0,0 +1,29 @@
|
|||
<img src="{{ asset(\App\Models\Setting::getByCache()->value('logo')) . 'logo.jpg' }}" alt="Logo" border="0"
|
||||
width="100" style="display: block; width: 100px; max-width: 100px; min-width: 48px;">
|
||||
<p>Dear Admin,</p>
|
||||
<p></p>
|
||||
<p>Employee {{ $data['name'] }} has sent a request ticket, the specific content is as follows:</p>
|
||||
<p></p>
|
||||
<p>Name: {{ $data['name'] }}</p>
|
||||
<p>Date: {{ $data['date'] }}</p>
|
||||
<p>Type: {{ $data['type'] }}</p>
|
||||
<p>Note: {{ $data['note'] }}</p>
|
||||
|
||||
<p style="margin:0 0 16px;padding:0">
|
||||
<a href='{{ asset(\App\Models\Setting::getByCache()->value('logo')) . $data['link'] }}'
|
||||
style="
|
||||
color: #fff;
|
||||
border-radius: 10px;
|
||||
background-color: rgba(68,115,196);
|
||||
background-image: linear-gradient(to top left,rgba(0,0,0,.2),rgba(0,0,0,.2) 30%,rgba(0,0,0,0));
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
line-height: 150%;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 10px 12px;
|
||||
">
|
||||
Check now</a>
|
||||
</p>
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<img src="{{ asset(\App\Models\Setting::getByCache()->value('logo')) . 'logo.jpg' }}" alt="Logo" border="0"
|
||||
width="100" style="display: block; width: 100px; max-width: 100px; min-width: 48px;">
|
||||
<p>Dear {{ $data['user_name'] }},</p>
|
||||
<p></p>
|
||||
<p>Admin {{ $data['name'] }} has {{ $data['status'] }} your request</p>
|
||||
<p></p>
|
||||
<p>Your ticket information:</p>
|
||||
<p>Name: {{ $data['user_name'] }}</p>
|
||||
<p>Date: {{ $data['date'] }}</p>
|
||||
<p>Type: {{ $data['type'] }}</p>
|
||||
<p>Note: {{ $data['note'] }}</p>
|
||||
<p>Content of admin's response:</p>
|
||||
<p>{{ $data['admin_note'] }}</p>
|
||||
|
||||
<p style="margin:0 0 16px;padding:0">
|
||||
<a href='{{ asset(\App\Models\Setting::getByCache()->value('logo')) . $data['link'] }}'
|
||||
style="
|
||||
color: #fff;
|
||||
border-radius: 10px;
|
||||
background-color: rgba(68,115,196);
|
||||
background-image: linear-gradient(to top left,rgba(0,0,0,.2),rgba(0,0,0,.2) 30%,rgba(0,0,0,0));
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
line-height: 150%;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 10px 12px;
|
||||
">
|
||||
Check now</a>
|
||||
</p>
|
||||
|
||||
<p>If you have any questions, please contact the administrator directly</p>
|
||||
<p>E-mail: admin@apactech.io</p>
|
||||
Loading…
Reference in New Issue