Merge pull request 'adjust UI, add send mail when delete note/update refuse ticket' (#129) from vi.ticket-email into dev
Reviewed-on: #129
This commit is contained in:
commit
af67644416
|
|
@ -397,6 +397,31 @@ class TicketController extends Controller
|
|||
// Delete related note, if status change to Refuse
|
||||
if ($request->status == "REFUSED") {
|
||||
$ticket->status = "REFUSED";
|
||||
|
||||
// Handle send mail
|
||||
$dataMasterStartPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $ticket->start_period);
|
||||
$dataMasterEndPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $ticket->end_period);
|
||||
$dataMasterType = CategoryController::getListMasterByCodeAndType("REASON", $ticket->type);
|
||||
$formattedStartDate = Carbon::createFromFormat('Y-m-d', $ticket->start_date)->format('d/m/Y');
|
||||
$formattedEndDate = Carbon::createFromFormat('Y-m-d', $ticket->end_date)->format('d/m/Y');
|
||||
|
||||
$user = Admin::find($ticket->user_id);
|
||||
|
||||
$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" => $ticket->admin_note,
|
||||
"link" => "/tickets", //link đến page admin
|
||||
"status" => "refused",
|
||||
"subject" => "[Ticket response] Ticket From " . $admin->name
|
||||
);
|
||||
Mail::to($user->email)->send(new TicketMail($data));
|
||||
|
||||
Notes::where('ticket_id', $ticket->id)->delete();
|
||||
}
|
||||
|
||||
|
|
@ -404,9 +429,10 @@ class TicketController extends Controller
|
|||
$ticket->admin_note = $request->admin_note;
|
||||
|
||||
// Clear Timekeeping cache
|
||||
$ticket->save();
|
||||
|
||||
$this->createOrUpdateRecordForCurrentMonth(Carbon::parse($ticket->start_date)->month, Carbon::parse($ticket->start_date)->year);
|
||||
$this->createOrUpdateRecordForCurrentMonth(Carbon::parse($ticket->end_date)->month, Carbon::parse($ticket->end_date)->year);
|
||||
$ticket->save();
|
||||
|
||||
return AbstractController::ResultSuccess($ticket, "Ticket updated successfully!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ use App\Traits\HasOrderByRequest;
|
|||
use App\Traits\HasSearchRequest;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Mail\TicketMail;
|
||||
use Modules\Admin\app\Models\Admin;
|
||||
use Modules\Admin\app\Models\MonthlyTimekeeping;
|
||||
use Modules\Admin\app\Models\Tracking;
|
||||
|
|
@ -184,10 +185,35 @@ class TimekeepingController extends Controller
|
|||
}
|
||||
|
||||
$admin = auth('admins')->user();
|
||||
|
||||
// Handle send mail
|
||||
$dataMasterStartPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $ticket->start_period);
|
||||
$dataMasterEndPeriod = CategoryController::getListMasterByCodeAndType("TIME_TYPE", $ticket->end_period);
|
||||
$dataMasterType = CategoryController::getListMasterByCodeAndType("REASON", $ticket->type);
|
||||
$formattedStartDate = Carbon::createFromFormat('Y-m-d', $ticket->start_date)->format('d/m/Y');
|
||||
$formattedEndDate = Carbon::createFromFormat('Y-m-d', $ticket->end_date)->format('d/m/Y');
|
||||
|
||||
$user = Admin::find($ticket->user_id);
|
||||
|
||||
$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" => $ticket->admin_note,
|
||||
"link" => "/tickets", //link đến page admin
|
||||
"status" => "refused",
|
||||
"subject" => "[Ticket response] Ticket From " . $admin->name
|
||||
);
|
||||
Mail::to($user->email)->send(new TicketMail($data));
|
||||
|
||||
// Update
|
||||
$ticket->updated_by = $admin->name;
|
||||
$ticket->status = "REFUSED";
|
||||
$ticket->save();
|
||||
|
||||
Notes::where('ticket_id', $ticket->id)->delete();
|
||||
|
||||
// Clear Timekeeping cache
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ class UserController extends Controller
|
|||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
$this->createOrUpdateRecordForCurrentMonth(Carbon::now()->month, Carbon::now()->year);
|
||||
|
||||
$user_res = [
|
||||
'name' => $user->name,
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
DB::table('categories')->insert([
|
||||
[
|
||||
'c_code' => 'PERMANENT',
|
||||
'c_name' => 'Phép cộng nhân viên chính thức',
|
||||
'c_type' => 'PERMANENT_ONLEAVE',
|
||||
'c_value' => 3,
|
||||
'c_active' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
DB::table('categories')->where('c_code', 'PERMANENT')->delete();
|
||||
}
|
||||
};
|
||||
|
|
@ -13,6 +13,15 @@ return new class extends Migration
|
|||
public function up(): void
|
||||
{
|
||||
DB::table('categories')->insert([
|
||||
[
|
||||
'c_code' => 'PERMANENT',
|
||||
'c_name' => 'Phép cộng nhân viên chính thức',
|
||||
'c_type' => 'PERMANENT_ONLEAVE',
|
||||
'c_value' => 1,
|
||||
'c_active' => 1,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
],
|
||||
[
|
||||
'c_code' => 'TEMPORARY_ONLEAVE',
|
||||
'c_name' => 'Nghỉ dự kiến',
|
||||
|
|
@ -30,6 +39,7 @@ return new class extends Migration
|
|||
*/
|
||||
public function down(): void
|
||||
{
|
||||
DB::table('categories')->where('c_code', 'TEMPORARY_ONLEAVE')->delete();
|
||||
DB::table('categories')->where('c_code', 'PERMANENT')->where('c_type', 'PERMANENT_ONLEAVE')->delete();
|
||||
DB::table('categories')->where('c_code', 'TEMPORARY_ONLEAVE')->where('c_type', 'REASON_NOTES')->delete();
|
||||
}
|
||||
};
|
||||
|
|
@ -711,7 +711,7 @@ const LeaveManagement = () => {
|
|||
return (
|
||||
<Table.Td
|
||||
bg={total > 0 ? '#ffb5b5' : ''}
|
||||
opacity={d.value > currentMonth ? 0.6 : 1}
|
||||
opacity={d.value > currentMonth ? 0.4 : 1}
|
||||
key={i}
|
||||
ta={'center'}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ const Timekeeping = () => {
|
|||
const [exportOption, setExportOption] = useState('default')
|
||||
|
||||
const [isDeleteConfirmOpen, setIsDeleteConfirmOpen] = useState(false)
|
||||
const [isDisableDeleteBtn, setIsDisableDeleteBtn] = useState(false)
|
||||
const [noteToDelete, setNoteToDelete] = useState<any>(null)
|
||||
|
||||
const getListMasterByType = async (type: string) => {
|
||||
|
|
@ -467,7 +468,9 @@ const Timekeeping = () => {
|
|||
|
||||
const handleConfirmDelete = async () => {
|
||||
if (noteToDelete) {
|
||||
setIsDisableDeleteBtn(true)
|
||||
await handleDelete(noteToDelete.id)
|
||||
setIsDisableDeleteBtn(false)
|
||||
setIsDeleteConfirmOpen(false)
|
||||
setNoteToDelete(null)
|
||||
}
|
||||
|
|
@ -506,10 +509,15 @@ const Timekeeping = () => {
|
|||
setIsDeleteConfirmOpen(false)
|
||||
setNoteToDelete(null)
|
||||
}}
|
||||
disabled={isDisableDeleteBtn}
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button className={classes.deleteButton} onClick={handleConfirmDelete}>
|
||||
<Button
|
||||
className={classes.deleteButton}
|
||||
onClick={handleConfirmDelete}
|
||||
disabled={isDisableDeleteBtn}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
</Box>
|
||||
|
|
|
|||
Loading…
Reference in New Issue