Files
backend/app/Http/Controllers/NewRandDCtrl.php
2024-02-01 09:53:53 +00:00

460 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Province;
use App\Models\SetadProvince;
use App\Models\ResearchDev;
use Hekmatinasser\Verta\Facades\Verta;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Models\RandDMembers;
use App\Models\NewRandD;
use Illuminate\Support\Facades\DB;
use Webpatser\Uuid\Uuid;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Auth;
use App\Models\RandDVoting;
use App\Models\RandDVotingPaperAnswer;
class NewRandDCtrl extends Controller
{
public function homepage()
{
$allrecords = NewRandD::where('project_status', '1')->orderBy('created_at', 'DESC')->get();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $allrecords
], 200);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
if (auth()->user()) {
auth()->user()->addActivityComplete(1059);
}
$allrecords = NewRandD::all();
if (Auth::user()->can('member-RandD')) {
foreach ($allrecords as $item) {
$this->addItemPermissions(false, false, true, true, true, $item);
}
} else {
if (Auth::user()->can('staff-RandD')) {
foreach ($allrecords as $item) {
$this->addItemPermissions(true, true, false, true, true, $item);
}
} else {
// permission for ostani users
if (Auth::user()->province_id) {
foreach ($allrecords as $item) {
if ($item->province_id == Auth::user()->province_id) {
$this->addItemPermissions(true, true, false, true, false, $item);
} else {
$this->addItemPermissions(false, false, false, true, false, $item);
}
}
} else {
// permission for setadi users
foreach ($allrecords as $item) {
if ($item->province_id == Auth::user()->setad_id) {
$this->addItemPermissions(true, true, false, true, false, $item);
} else {
$this->addItemPermissions(false, false, false, true, false, $item);
}
}
}
}
}
//// status for voting project
foreach ($allrecords as $item) {
//// admin
if (Auth::check() && Auth::check() && Auth::user()->can('staff-RandD')) {
/// aya proje rad shode ya na
if ($item->project_status == 3) {
$item->setAttribute('canReject', false);
$item->setAttribute('startVote', false);
$item->setAttribute('isStartVote', false);
$item->setAttribute('resultVote', true);
}else {
///// check mikone ke betune start kone ya na
if (!RandDVoting::where('status', '2')->first() && !RandDVoting::where('project_id', $item->id)->first()) {
$item->setAttribute('startVote', true);
$item->setAttribute('canReject', true);
} else {
$item->setAttribute('startVote', false);
}
if (RandDVoting::where('project_id', $item->id)->where('status', '2')->first()) {
$item->setAttribute('isStartVote', true);
} else {
$item->setAttribute('isStartVote', false);
}
if (RandDVoting::where('project_id', $item->id)->where('status', '4')->first()) {
$item->setAttribute('resultVote', true);
} else {
$item->setAttribute('resultVote', false);
}
}
} elseif (Auth::check() && Auth::user()->can('member-RandD')) {
$item->setAttribute('isStartVote', false);
$item->setAttribute('startVote', false);
$item->setAttribute('canReject', false);
if (RandDVoting::where('project_id', $item->id)->where('status', '2')->first()) {
$item->setAttribute('Voting', true);
$getVote = RandDVoting::where('project_id', $item->id)->where('status', '2')->first();
if (! RandDVotingPaperAnswer::where('vote_id', $getVote->id)->where('user_id', Auth::user()->id)->first()) {
$url = 'https://rms.rmto.ir/randd/voting/' . $getVote->id;
$item->setAttribute('urlVoting', $url);
$item->setAttribute('allowVoting', true);
} else {
$item->setAttribute('allowVoting', false);
}
} else {
$item->setAttribute('Voting', false);
$item->setAttribute('allowVoting', false);
}
if (RandDVoting::where('project_id', $item->id)->where('status', '4')->first()) {
$item->setAttribute('resultVote', true);
} else {
$item->setAttribute('resultVote', false);
}
} else {
$item->setAttribute('canReject', false);
$item->setAttribute('Voting', false);
$item->setAttribute('allowVoting', false);
$item->setAttribute('isStartVote', false);
$item->setAttribute('startVote', false);
if (RandDVoting::where('project_id', $item->id)->where('status', '4')->first()) {
$item->setAttribute('resultVote', true);
} else {
$item->setAttribute('resultVote', false);
}
}
}
foreach ($allrecords as $item) {
switch ($item->project_status) {
case '1':
$item->setAttribute('project_status_fa', 'در حال بررسی');
break;
case '2':
$item->setAttribute('project_status_fa', 'خاتمه یافته');
break;
case '3':
$item->setAttribute('project_status_fa', 'رد شده');
break;
default:
break;
}
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $allrecords,
], 200);
}
//// add permission array to all rows in data
public function addItemPermissions($isCud, $reqFin, $isVoting, $votingResult, $votingUserResult, $item)
{
$item->perm = [
'isCUD' => $isCud,
'requestFinish' => $reqFin,
'isVoting' => $isVoting,
'votingResult' => $votingResult,
'votingUsersResult' => $votingUserResult,
];
}
public function store(Request $request)
{
// Set automatic province persian name in table
if ($request->province_id > 49) {
$prov_item = SetadProvince::find($request->province_id);
$province_fa = $prov_item->name_fa;
} else {
$prov_item = Province::find($request->province_id);
$province_fa = $prov_item->name_fa;
if ($request->province_id < 10) {
}
}
// Make Unique Code
$uuid = Uuid::generate();
// Upload Final report 1
if ($request->has('proj_rfp_file')) {
$file = $request->file('proj_rfp_file');
$destinationPath = 'storage/rand/rfp_file/' . now()->year . '/' . now()->month . '/';
$filename = $uuid . '-one.' . $file->getClientOriginalExtension();
$file->move($destinationPath, $filename);
}
switch ($request->domain_id) {
case "1":
$domain_fa = 'راهداری';
break;
case "2":
$domain_fa = 'حمل و نقل';
break;
case "3":
$domain_fa = 'فناوری و سیستم هوشمند';
break;
case "4":
$domain_fa = 'منابع انسانی';
break;
case "5":
$domain_fa = 'روستایی';
break;
}
// Store Data
$create = NewRandD::create([
'title' => $request->title,
'province_id' => $request->province_id,
'province_fa' => $province_fa,
'domain_id' => $request->domain_id,
'domain_fa' => $domain_fa,
'project_amount' => $request->project_amount,
'credit_status' => $request->credit_status,
'rfp_file' => $destinationPath . $filename,
'unique_code' => $uuid,
'fname_creator' => $request->fname_creator,
'lname_creator' => $request->lname_creator,
'phone_creator' => $request->phone_creator,
'proj_credit_resourse' => $request->proj_credit_resourse ?? null
]);
// TODO: upload to server and add unique_id table in database new randd
$year = Verta::now()->format('y');
$temp = ($request->province_id < 10) ?"0".$request->province_id:$request->province_id ;
$unique_id = '1' . $request->domain_id .$temp. $year . $create->id;
$create->update(['unique_id' => $unique_id]);
$getRandD = NewRandD::where('id', $create->id)->get();
Auth::user()->addActivity("پروژه با کد یکتا {$create->id} در بخش تحقیق و توسعه ایجاد شد.");
return response()->json([
'message' => 'success',
'data' => $getRandD
], 200);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy(Request $request, $id)
{
$d = NewRandD::find($id);
$msg = ' پروژه‌ پیشنهادی کمیته، با کد یکتا ' . $d->unique_id . '(' .$d->title.')، توسط ' . Auth::user()->first_name . ' ' . Auth::user()->last_name . ' حذف شد.';
Auth::user()->activityLogs()->create([
'description' => $msg
]);
$d->delete();
return response()->json([
'message' => 'با موفقیت حذف شد'
], 200);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit(NewRandD $newRandD, Request $request)
{
// Set automatic province persian name in table
if ($request->province_id > 49) {
$prov_item = SetadProvince::find($request->province_id);
$province_fa = $prov_item->name_fa;
} else {
$prov_item = Province::find($request->province_id);
$province_fa = $prov_item->name_fa;
}
// Make Unique Code
$uuid = Uuid::generate();
// Upload Final report 1
$rfp_file = $newRandD->rfp_file;
if ($request->has('proj_rfp_file')) {
$file = $request->file('proj_rfp_file');
$destinationPath = 'storage/rand/rfp_file/' . now()->year . '/' . now()->month . '/';
$filename = $uuid . '-one.' . $file->getClientOriginalExtension();
$file->move($destinationPath, $filename);
$rfp_file = $destinationPath . $filename;
}
switch ($request->domain_id) {
case "1":
$domain_fa = 'راهداری';
break;
case "2":
$domain_fa = 'حمل و نقل';
break;
case "3":
$domain_fa = 'فناوری و سیستم هوشمند';
break;
case "4":
$domain_fa = 'منابع انسانی';
break;
case "5":
$domain_fa = 'روستایی';
break;
}
// Store Data
$newRandD->update([
'title' => $request->title,
'province_id' => $request->province_id,
'province_fa' => $province_fa,
'domain_id' => $request->domain_id,
'domain_fa' => $domain_fa,
'project_amount' => $request->project_amount,
'credit_status' => $request->credit_status,
'unique_code' => $uuid,
'fname_creator' => $request->fname_creator,
'lname_creator' => $request->lname_creator,
'phone_creator' => $request->phone_creator,
'proj_credit_resourse' => $request->proj_credit_resourse ?? null,
'rfp_file' => $rfp_file
]);
// TODO: upload to server and add unique_id table in database new randd
$year = Verta::now()->format('y');
$temp = ($request->province_id < 10) ?"0".$request->province_id:$request->province_id ;
$unique_id = '1' . $request->domain_id .$temp. $year . $newRandD->id;
$newRandD->update(['unique_id' => $unique_id]);
$getRandD = NewRandD::whereId($newRandD->id)->first();
$msg = ' پروژه‌ پیشنهادی کمیته، با کد یکتا ' . $getRandD->unique_id . '(' .$getRandD->title.')، توسط ' . Auth::user()->first_name . ' ' . Auth::user()->last_name . ' ویرایش شد.';
Auth::user()->activityLogs()->create([
'description' => $msg
]);
return response()->json([
'message' => 'success',
'data' => $getRandD,
]);
}
public function reject(NewRandD $newRandD, Request $request)
{
if (auth()->user()) {
auth()->user()->addActivityComplete(1065);
}
// Update Data
$newRandD->reject_description = $request->reject_description;
$newRandD->project_status = 3;
$newRandD->save();
$msg = ' پروژه‌ پیشنهادی کمیته، با کد یکتا ' . $newRandD->unique_id . '(' .$newRandD->title.')، توسط ' . Auth::user()->first_name . ' ' . Auth::user()->last_name . 'رد شد.';
Auth::user()->activityLogs()->create([
'description' => $msg
]);
return response()->json([
'message' => 'success',
'data' => $newRandD,
]);
}
public function operationStatus($id)
{
$new = NewRandD::find($id);
$new->update([
'operation_status' => 1
]);
return response()->json([
'message' => 'ثبت فرایند با موفقیت انجام شد.',
'data' => $new
]);
}
public function search(Request $request)
{
switch ($request->type) {
case "1":
$research = new ResearchDev();
$data = $research->where("contract_status", 1)->where('project_title', 'like', '%'.$request->search.'%')->orderByDesc('id')->get();
break;
case "2":
$research = new ResearchDev();
$data = $research->where("contract_status", 2)->where('project_title', 'like', '%'.$request->search.'%')->orderByDesc('id')->get();
break;
case "3":
$research = new NewRandD();
$data = $research->where('title', 'like', '%'.$request->search.'%')->orderByDesc('id')->get();
break;
}
return response()->json([
'status' => 'succeed',
'message' => 'yes',
'status_bool' => 1,
'data' => $data,
], 200);
}
public function statics(Request $request)
{
$comite = NewRandD::all()->count();
$ejra = ResearchDev::where('contract_status', 1)->get()->count();
$end = ResearchDev::where('contract_status', 2)->get()->count();
// $members = RandDMembers::all();
return response()->json([
'message' => 'success',
'statics' => [
'comite' => $comite,
'ejra' => $ejra,
'end' => $end
],
'data' => [
// 'aazaye_comite' => $members,
]
]);
}
}