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

353 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Proposal;
use App\Models\ProposalHistory;
use App\Http\Requests\Api\ProposalRequest;
use Illuminate\Support\Facades\Auth;
use Hekmatinasser\Verta\Verta;
use Illuminate\Support\Facades\Storage;
class ProposalController extends Controller
{
public function index()
{
if (auth()->user()) {
auth()->user()->addActivityComplete(1015);
}
/// [START] proposal_show_data_index
if (Auth::user()->can('show-proposal')) {
$data = Proposal::all();
} elseif (Auth::user()->can('show-proposal-province')) {
$data = Proposal::where('province_id', Auth::user()->province_id)->get();
} else {
return response()->json([
'message' => 'Forbidden'
], 403);
}
/// [END] proposal_show_data_index
$proposals = [];
foreach ($data as $key => $value) {
$proposals[$key] = $value;
/// [START] proposal_edit_data_index
if (Auth::user()->can('edit-proposal')) {
$proposals[$key]['canEdit'] = 1;
} elseif (Auth::user()->can('edit-proposal-province')) {
if ($value->province_id == Auth::user()->province_id) {
$proposals[$key]['canEdit'] = 1;
} else {
$proposals[$key]['canEdit'] = 0;
}
} else {
$proposals[$key]['canEdit'] = 0;
}
/// [END] proposal_edit_data_index
/// [START] proposal_delete_data_index
if (Auth::user()->can('delete-proposal')) {
$proposals[$key]['canDelete'] = 1;
} elseif (Auth::user()->can('delete-proposal-province')) {
if ($value->province_id == Auth::user()->province_id) {
$proposals[$key]['canDelete'] = 1;
} else {
$proposals[$key]['canDelete'] = 0;
}
} else {
$proposals[$key]['canDelete'] = 0;
}
/// [END] proposal_delete_data_index
}
return response()->json([
'message' => 'success',
'data' => $proposals,
], 200);
}
public function show($id)
{
return response()->json([
'message' => 'success',
'data' => Proposal::find($id)
], 200);
}
public function store(ProposalRequest $request)
{
/// [START] proposal_add_data_store
if (!(Auth::user()->can('add-proposal') || (Auth::user()->can('add-proposal-province') && $request->province_id == Auth::user()->province_id))) {
return response()->json([
'message' => 'Forbidden'
], 403);
}
/// [END] proposal_add_data_store
$request->validate([
'document_image' => 'required|file|max:2048|image',
'document_technical' => 'file|max:5120',
'document_video' => 'file|max:30720'
],
['حجم عکس حداکثر 3 مگابایت میباشد.',
'حجم مستند حداکثر 5 مگابایت میباشد.',
'حجم فیلم حداکثر 30 مگابایت میباشد.']
);
$proposal = new Proposal();
$proposal->project_title = $request->project_title;
$proposal->project_type_id = $request->project_type_id;
$proposal->project_type_fa = $request->project_type_fa;
$proposal->office_id = $request->office_id;
$proposal->office_fa = $request->office_fa;
$proposal->province_id = $request->province_id;
$proposal->province_fa = \App\Models\Province::where('id', $request->province_id)->first()->name_fa;
$proposal->axis_type_id = $request->axis_type_id;
$proposal->axis_type_fa = $request->axis_type_fa;
$proposal->axis_name = $request->axis_name;
$proposal->followup_priority_project_id = $request->followup_priority_project_id;
$proposal->followup_priority_project = $request->followup_priority_project;
$proposal->priority_project = $request->priority_project;
$proposal->priority_project_fa = $request->priority_project_fa;
$proposal->status_id = 0;
$proposal->status_fa = 'بررسی نشده';
$proposal->operation_type_id1 = $request->operation_type_id1 ?? null;
$proposal->operation_type_fa1 = $request->operation_type_fa1 ?? null;
$proposal->operation_type_unit1 = $request->operation_type_unit1 ?? null;
$proposal->operation_type_amount1 = $request->operation_type_amount1 ?? null;
$proposal->operation_type_id2 = $request->operation_type_id2 ?? null;
$proposal->operation_type_fa2 = $request->operation_type_fa2 ?? null;
$proposal->operation_type_unit2 = $request->operation_type_unit2 ?? null;
$proposal->operation_type_amount2 = $request->operation_type_amount2 ?? null;
$proposal->operation_type_id3 = $request->operation_type_id3 ?? null;
$proposal->operation_type_fa3 = $request->operation_type_fa3 ?? null;
$proposal->operation_type_unit3 = $request->operation_type_unit3 ?? null;
$proposal->operation_type_amount3 = $request->operation_type_amount3 ?? null;
$proposal->operation_type_id4 = $request->operation_type_id4 ?? null;
$proposal->operation_type_fa4 = $request->operation_type_fa4 ?? null;
$proposal->operation_type_unit4 = $request->operation_type_unit4 ?? null;
$proposal->operation_type_amount4 = $request->operation_type_amount4 ?? null;
$proposal->start_lat = $request->start_lat;
$proposal->end_lat = $request->end_lat;
$proposal->start_lng = $request->start_lng;
$proposal->end_lng = $request->end_lng;
$proposal->follower_person = $request->follower_person;
$proposal->follower_person_fa = $request->follower_person_fa;
$proposal->user_id = Auth::user()->id;
$proposal->user_description = $request->user_description;
$proposal->national_credit = $request->national_credit;
$proposal->province_credit = $request->province_credit;
$proposal->created_at_fa = Verta::instance(Verta::now());
$proposal->updated_at_fa = Verta::instance(Verta::now());
$proposal->save();
$proposal->document_image = $request->file('document_image')->storeAs('proposal_files/'.$proposal->id, 'document_image_'.$proposal->id.'.'.$request->file('document_image')->extension() ,'public');
if ($request->has('document_technical')) {
$proposal->document_technical = $request->file('document_technical')->storeAs('proposal_files/'.$proposal->id, 'document_technical_'.$proposal->id.'.'.$request->file('document_technical')->extension() ,'public');
}
if ($request->has('document_video')) {
$proposal->document_video = $request->file('document_video')->storeAs('proposal_files/'.$proposal->id, 'document_video_'.$proposal->id.'.'.$request->file('document_video')->extension() ,'public');
}
$proposal->unique_code = $proposal->id + 10000;
$proposal->save();
Auth::user()->addActivity("پروژه پیشنهادی با کد یکتا {$proposal->unique_code} ایجاد شد.");
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $proposal,
], 200);
}
public function update(Request $request, Proposal $proposal)
{
/// [START] proposal_edit_data_update
if (!(Auth::user()->can('edit-proposal') || (Auth::user()->can('edit-proposal-province') && $request->province_id == Auth::user()->province_id))) {
return response()->json([
'message' => 'Forbidden'
], 403);
}
/// [END] proposal_edit_data_update
$request->validate([
'document_image' => 'sometimes|file|max:2048|image',
'document_technical' => 'sometimes|file|max:5120',
'document_video' => 'sometimes|file|max:30720'
],
['حجم عکس حداکثر 3 مگابایت میباشد.',
'حجم مستند حداکثر 5 مگابایت میباشد.',
'حجم فیلم حداکثر 30 مگابایت میباشد.']
);
ProposalHistory::create([
'project_title' => $proposal->project_title ?? null,
'project_type_id' => $proposal->project_type_id ?? null,
'project_type_fa' => $proposal->project_type_fa ?? null,
'office_id' => $proposal->office_id ?? null,
'office_fa' => $proposal->office_fa ?? null,
'province_id' => $proposal->province_id ?? null,
'province_fa' => $proposal->province_fa ?? null,
'axis_type_id' => $proposal->axis_type_id ?? null,
'axis_type_fa' => $proposal->axis_type_fa ?? null,
'axis_name' => $proposal->axis_name ?? null,
'followup_priority_project_id' => $proposal->followup_priority_project_id ?? null,
'followup_priority_project' => $proposal->followup_priority_project ?? null,
'priority_project' => $proposal->priority_project ?? null,
'priority_project_fa' => $proposal->priority_project_fa ?? null,
'status_id' => $proposal->status_id ?? null,
'status_fa' => $proposal->status_fa ?? null,
'operation_type_id1' => $proposal->operation_type_id1 ?? null,
'operation_type_fa1' => $proposal->operation_type_fa1 ?? null,
'operation_type_unit1' => $proposal->operation_type_unit1 ?? null,
'operation_type_amount1' => $proposal->operation_type_amount1 ?? null,
'operation_type_id2' => $proposal->operation_type_id2 ?? null,
'operation_type_fa1' => $proposal->operation_type_fa1 ?? null,
'operation_type_unit1' => $proposal->operation_type_unit1 ?? null,
'operation_type_amount2' => $proposal->operation_type_amount2 ?? null,
'operation_type_id3' => $proposal->operation_type_id3 ?? null,
'operation_type_fa1' => $proposal->operation_type_fa1 ?? null,
'operation_type_unit1' => $proposal->operation_type_unit1 ?? null,
'operation_type_amount3' => $proposal->operation_type_amount3 ?? null,
'operation_type_id4' => $proposal->operation_type_id4 ?? null,
'operation_type_fa1' => $proposal->operation_type_fa1 ?? null,
'operation_type_unit1' => $proposal->operation_type_unit1 ?? null,
'operation_type_amount4' => $proposal->operation_type_amount4 ?? null,
'start_lat' => $proposal->start_lat ?? null,
'end_lat' => $proposal->end_lat ?? null,
'start_lng' => $proposal->start_lng ?? null,
'end_lng' => $proposal->end_lng ?? null,
'user_id' => $proposal->user_id ?? null,
'user_description' => $proposal->user_description ?? null,
'national_credit' => $proposal->national_credit ?? null,
'province_credit' => $proposal->province_credit ?? null,
'created_at_fa' => $proposal->created_at_fa ?? null,
'updated_at_fa' => $proposal->updated_at_fa ?? null,
'unique_code' => $proposal->unique_code ?? null,
'proposal_id' => $proposal->id,
]);
if ($request->has('document_image')) {
Storage::delete('public/'.$proposal->document_image);
$proposal->document_image = $request->file('document_image')->storeAs('proposal_files/'.$proposal->id,'document_image_'.$proposal->id.'.'.$request->file('document_image'), 'public');
}
if ($request->has('document_technical')) {
Storage::delete('public/'.$proposal->document_technical);
$proposal->document_technical = $request->file('document_technical')->storeAs('proposal_files/'.$proposal->id,'document_technical_'.$proposal->id.'.'.$request->file('document_technical')->extension(), 'public');
}
if ($request->has('document_video')) {
Storage::delete('public/'.$proposal->document_video);
$proposal->document_video = $request->file('document_video')->storeAs('proposal_files/'.$proposal->id,'document_video_'.$proposal->id.'.'.$request->file('document_video'), 'public');
}
$proposal->project_title = $request->project_title;
$proposal->project_type_id = $request->project_type_id;
$proposal->project_type_fa = $request->project_type_fa;
$proposal->office_id = $request->office_id;
$proposal->office_fa = $request->office_fa;
$proposal->province_id = $request->province_id;
$proposal->province_fa = \App\Models\Province::where('id', $request->province_id)->first()->name_fa;
$proposal->axis_type_id = $request->axis_type_id;
$proposal->axis_type_fa = $request->axis_type_fa;
$proposal->axis_name = $request->axis_name;
$proposal->followup_priority_project_id = $request->followup_priority_project_id;
$proposal->followup_priority_project = $request->followup_priority_project;
$proposal->priority_project = $request->priority_project;
$proposal->priority_project_fa = $request->priority_project_fa;
$proposal->status_id = $request->status_id;
$proposal->status_fa = $request->status_fa;
$proposal->operation_type_id1 = $request->operation_type_id1 ?? null;
$proposal->operation_type_fa1 = $request->operation_type_fa1 ?? null;
$proposal->operation_type_unit1 = $request->operation_type_unit1 ?? null;
$proposal->operation_type_amount1 = $request->operation_type_amount1 ?? null;
$proposal->operation_type_id2 = $request->operation_type_id2 ?? null;
$proposal->operation_type_fa2 = $request->operation_type_fa2 ?? null;
$proposal->operation_type_unit2 = $request->operation_type_unit2 ?? null;
$proposal->operation_type_amount2 = $request->operation_type_amount2 ?? null;
$proposal->operation_type_id3 = $request->operation_type_id3 ?? null;
$proposal->operation_type_fa3 = $request->operation_type_fa3 ?? null;
$proposal->operation_type_unit3 = $request->operation_type_unit3 ?? null;
$proposal->operation_type_amount3 = $request->operation_type_amount3 ?? null;
$proposal->operation_type_id4 = $request->operation_type_id4 ?? null;
$proposal->operation_type_fa4 = $request->operation_type_fa4 ?? null;
$proposal->operation_type_unit4 = $request->operation_type_unit4 ?? null;
$proposal->operation_type_amount4 = $request->operation_type_amount4 ?? null;
$proposal->start_lat = $request->start_lat;
$proposal->end_lat = $request->end_lat;
$proposal->start_lng = $request->start_lng;
$proposal->end_lng = $request->end_lng;
$proposal->user_description = $request->user_description;
$proposal->national_credit = $request->national_credit;
$proposal->province_credit = $request->province_credit;
$proposal->updated_at_fa = Verta::instance(Verta::now());
$proposal->save();
Auth::user()->addActivity(" پروژه پیشنهادی با کد یکتا {$proposal->unique_code} ویرایش شد.");
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $proposal,
], 200);
}
public function getHistory(Proposal $proposal)
{
return response()->json([
'message' => 'success',
'data' => ProposalHistory::where('proposal_id', $proposal->id)->get()
], 200);
}
public function delete(Proposal $proposal)
{
/// [START] proposal_delete_data_delete
if (!(Auth::user()->can('delete-proposal') || (Auth::user()->can('delete-proposal-province') && $proposal->province_id == Auth::user()->province_id))) {
return response()->json([
'message' => 'Forbidden'
], 403);
}
/// [END] proposal_delete_data_delete
Auth::user()->addActivity(" پروژه پیشنهادی با کد یکتا {$proposal->unique_code} حذف شد.");
Storage::deleteDirectory('public/'.'proposal_files/'.$proposal->id);
$proposal->delete();
return response()->json([
'message' => 'delete process is successfully'
]);
}
}