Files

161 lines
7.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Prize;
use App\Models\PrizeUser;
use DateTime;
use Auth;
use File;
class PrizeController extends Controller
{
public function index() {
$title = "Danh sách giải thưởng";
$route_name_update = 'admin/prize/update';
$data = Prize::leftJoin('prize_users as user', 'prizes.id', '=', 'user.prize_id')
->groupBy('prizes.id', 'prizes.prize_name', 'prizes.prize_image', 'prizes.prize_content', 'prizes.prize_status',
'prizes.prize_number', 'prizes.prize_order')
->selectRaw('prizes.id, prizes.prize_name, prizes.prize_image, prizes.prize_content, prizes.prize_status,
prizes.prize_number, prizes.prize_order, count(user.id) as prize_count')
->orderBy('prize_status', 'desc')->orderBy('prize_order', 'asc')->orderBy('prize_name')->get();
return view('backend.prize.index')->with('title', $title)
->with('route_name_update', $route_name_update)
->with('data', $data);
}
public function getPrize(Request $request) {
$title = 'Cập nhật giải thưởng';
if ($request->id == 0) {
$title = 'Thêm mới giải thưởng';
}
$data = Prize::find($request->id);
return view('backend.prize.detail')
->with('data', $data)
->with('title', $title);
}
public function updatePrize (Request $request) {
$request->validate([
'prize_name'=>'required|max:255',
'prize_image'=>'mimes:jpg,png,jpeg,webp,jfif|max:2048|nullable',
'prize_status' => 'required|numeric',
'prize_number' => 'nullable|numeric|min:0',
'prize_order' => 'required|numeric'
], [
'prize_name.required' => 'Nhập tên giải thưởng',
'prize_name.max' => 'Tên giải thưởng không được quá 255 kí tự',
'prize_image.mimes' => 'Định dạng file không đúng',
'prize_image.max' => 'File upload quá lớn',
'prize_status.required' => 'Vui lòng chọn trạng thái',
'prize_status.numeric' => 'Trạng thái không đúng định dạng',
'prize_number.numeric' => 'Số lượng giải phải là kiểu số',
'prize_number.min' => 'Số lượng giải thưởng không được âm',
'prize_order.required' => 'Nhập số thứ tự giải',
'prize_order.numeric' => 'Số thứ tự giải phải là số'
]);
if ($request->id == 0){
// thêm mới
$request_data = $request->except(['id', 'prize_image']);
$request_data['user_id'] = Auth::user()->id;
$prize_obj = Prize::create($request_data);
$id = $prize_obj->id;
$this->updatePrizeImage($request, $prize_obj);
return redirect()->route('admin/prize/update', array('id' => $id))->with('success', 'Thêm mới thành công');
} else {
// cap nhat
$id = $request->id;
$prize_obj = Prize::find($id);
$prize_obj->prize_name = $request->prize_name;
$prize_obj->prize_content = $request->prize_content;
$prize_obj->prize_status = $request->prize_status;
$prize_obj->prize_number = $request->prize_number;
$prize_obj->prize_order = $request->prize_order;
$prize_obj->save();
$this->updatePrizeImage($request, $prize_obj);
return redirect()->back()->with('success', 'Cập nhật thành công');
}
}
public function updatePrizeImage ($request, $prize_obj) {
if($request->prize_image) {
$imageName = time(). '_' . Auth::user()->id . '.'.$request->prize_image->extension();
$request->prize_image->move(public_path('images/prize'), $imageName);
$previous_img_path = $prize_obj->prize_image;
$prize_obj->prize_image = 'prize/' . $imageName;
$prize_obj->save();
if($previous_img_path != '' && File::exists(public_path('images') . '/' . $previous_img_path)) {
File::delete(public_path('images') . '/' . $previous_img_path);
}
}
}
public function deletePrize ($id) {
$prize_obj = Prize::find($id);
$previous_image_path = $prize_obj->prize_image;
if ($prize_obj->delete()) {
if($previous_image_path != '' && File::exists(public_path('images') . '/' . $previous_image_path)) {
File::delete(public_path('images') . '/' . $previous_image_path);
}
} else {
return redirect()->back()->with('error', 'Xóa giải thưởng thất bại');
}
return redirect()->back()->with('success', 'Xóa giải thưởng thành công');
}
public function prizeuser (Request $request) {
$title = "Danh sách người trúng giải";
$data_obj = PrizeUser::leftJoin('prizes as prize', 'prize_users.prize_id', '=', 'prize.id')
->leftJoin('users as user', 'prize_users.user_id', '=', 'user.id')
->select('user.id', 'user.name', 'user.phone', 'user.job', 'user.address', 'user.known_sis', 'prize.prize_name', 'prize_users.created_at');
$fromdate = $request->tungay ?? date('d/m/Y', strtotime('-30 days'));
$todate = $request->denngay ?? date('d/m/Y');
if ($fromdate != '') {
$fromdate_arr = explode('/', $fromdate);
$from_date = DateTime::createFromFormat('Y-m-d', $fromdate_arr[2] . '-' . $fromdate_arr[1] . '-' . $fromdate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '>=', $from_date);
}
if ($todate != '') {
$todate_arr = explode('/', $todate);
$to_date = DateTime::createFromFormat('Y-m-d', $todate_arr[2] . '-' . $todate_arr[1] . '-' . $todate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '<=', $to_date . ' 23:59:00');
}
$data = $data_obj->orderBy('created_at', 'desc')->get();
return view('backend.prizeuser.index')
->with('title', $title)->with('data', $data)
->with('fromdate', $fromdate)->with('todate', $todate);
}
public function exportPrizeUser (Request $request) {
$data_obj = PrizeUser::leftJoin('prizes as prize', 'prize_users.prize_id', '=', 'prize.id')
->leftJoin('users as user', 'prize_users.user_id', '=', 'user.id')
->select('user.id', 'user.name', 'user.phone', 'user.job', 'user.address', 'user.known_sis', 'prize.prize_name', 'prize_users.created_at');
$fromdate = $request->tungay;
$todate = $request->denngay;
if ($fromdate != '') {
$fromdate_arr = explode('/', $fromdate);
$from_date = DateTime::createFromFormat('Y-m-d', $fromdate_arr[2] . '-' . $fromdate_arr[1] . '-' . $fromdate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '>=', $from_date);
}
if ($todate != '') {
$todate_arr = explode('/', $todate);
$to_date = DateTime::createFromFormat('Y-m-d', $todate_arr[2] . '-' . $todate_arr[1] . '-' . $todate_arr[0])->format('Y-m-d');
$data_obj = $data_obj->where('prize_users.created_at', '<=', $to_date);
}
$data = $data_obj->orderBy('created_at', 'desc')->get();
return view('backend.prizeuser.excel')->with('data', $data);
}
}