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();
|
$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);
|
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\Helper\Cache\CurrentMonthTimekeeping;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Mail\ContactMail;
|
||||||
|
use App\Mail\TicketMail;
|
||||||
use App\Models\Notes;
|
use App\Models\Notes;
|
||||||
use App\Traits\AnalyzeData;
|
use App\Traits\AnalyzeData;
|
||||||
use App\Traits\HasFilterRequest;
|
use App\Traits\HasFilterRequest;
|
||||||
|
|
@ -13,6 +15,7 @@ use Carbon\Carbon;
|
||||||
use Carbon\CarbonPeriod;
|
use Carbon\CarbonPeriod;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Modules\Admin\app\Models\Admin;
|
use Modules\Admin\app\Models\Admin;
|
||||||
use Modules\Admin\app\Models\Category;
|
use Modules\Admin\app\Models\Category;
|
||||||
use Modules\Admin\app\Models\Ticket;
|
use Modules\Admin\app\Models\Ticket;
|
||||||
|
|
@ -188,7 +191,6 @@ class TicketController extends Controller
|
||||||
|
|
||||||
public function createTicket(Request $request)
|
public function createTicket(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Define validation rules
|
// Define validation rules
|
||||||
$rules = [
|
$rules = [
|
||||||
'start_date' => 'required|date',
|
'start_date' => 'required|date',
|
||||||
|
|
@ -213,6 +215,15 @@ class TicketController extends Controller
|
||||||
|
|
||||||
// return $user;
|
// 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([
|
$ticket = Ticket::create([
|
||||||
'start_date' => Carbon::create($startDate)->setTimezone(env('TIME_ZONE')),
|
'start_date' => Carbon::create($startDate)->setTimezone(env('TIME_ZONE')),
|
||||||
'start_period' => $startPeriod,
|
'start_period' => $startPeriod,
|
||||||
|
|
@ -225,7 +236,22 @@ class TicketController extends Controller
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Send notification email to admin (list)
|
// 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]);
|
return response()->json(['data' => $ticket, 'status' => true]);
|
||||||
}
|
}
|
||||||
|
|
@ -288,9 +314,21 @@ class TicketController extends Controller
|
||||||
|
|
||||||
// Refuse
|
// Refuse
|
||||||
// Update updated_by and admin_note in tickets table
|
// 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);
|
$user = Admin::find($ticket->user_id);
|
||||||
|
|
||||||
if ($action == "confirm") {
|
if ($action == "confirm") {
|
||||||
foreach ($results as $result) {
|
foreach ($results as $result) {
|
||||||
list($year, $month, $day) = explode('-', $result['date']);
|
list($year, $month, $day) = explode('-', $result['date']);
|
||||||
|
|
@ -340,9 +378,32 @@ class TicketController extends Controller
|
||||||
$ticket['updated_by'] = $admin->name;
|
$ticket['updated_by'] = $admin->name;
|
||||||
$ticket['admin_note'] = $admin_note;
|
$ticket['admin_note'] = $admin_note;
|
||||||
$ticket['status'] = 'CONFIRMED';
|
$ticket['status'] = 'CONFIRMED';
|
||||||
|
|
||||||
$ticket->save();
|
$ticket->save();
|
||||||
|
|
||||||
$this->createOrUpdateRecordForCurrentMonth($month, $year);
|
$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]);
|
return response()->json(['message' => "confirmed", 'status' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -351,6 +412,20 @@ class TicketController extends Controller
|
||||||
$ticket['admin_note'] = $admin_note;
|
$ticket['admin_note'] = $admin_note;
|
||||||
$ticket['status'] = 'REFUSED';
|
$ticket['status'] = 'REFUSED';
|
||||||
$ticket->save();
|
$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]);
|
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