inital commit
This commit is contained in:
494
app/Http/Controllers/ReceiptController.php
Normal file
494
app/Http/Controllers/ReceiptController.php
Normal file
@@ -0,0 +1,494 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Province;
|
||||
use App\Models\City;
|
||||
use App\Models\Damage;
|
||||
use App\Models\Accident;
|
||||
use App\Models\DailyAccidentSettings;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Arr;
|
||||
use App\Facades\Sms\Sms;
|
||||
|
||||
class ReceiptController extends Controller
|
||||
{
|
||||
public function view(Request $request)
|
||||
{
|
||||
if (! auth()->user()->hasAnyPermission(['show-receipt', 'show-receipt-province'])) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
return view('version2.dashboard_pages.receipt.list');
|
||||
}
|
||||
|
||||
public function getDamages()
|
||||
{
|
||||
return response()->json(Damage::where('status', 1)->get(), 200);
|
||||
}
|
||||
|
||||
public function show(Request $request)
|
||||
{
|
||||
if (! auth()->user()->hasAnyPermission(['show-receipt', 'show-receipt-province'])) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$fields = ['id', 'province_fa','city_fa', 'axis_name', 'accident_type_fa', 'accident_date', 'id', 'damage_picture1', 'damage_picture2', 'plaque', 'created_at', 'sum', 'deposit_date', 'status','police_file_date','deposit_insurance_image','deposit_daghi_image','deposit_insurance_amount','deposit_daghi_amount','status_fa','final_amount','province_id','accident_time','accident_type','city_id','driver_name','driver_national_code','driver_phone_number','police_file','lat','lng','police_serial','report_base'];
|
||||
|
||||
$aliases = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '','','','','','','','','','','','','','','','','',''];
|
||||
|
||||
$selectRaw = makeSelectQuery($fields, $aliases);
|
||||
|
||||
if (auth()->user()->hasPermissionTo('show-receipt')) {
|
||||
$query = Accident::with('damages')->selectRaw($selectRaw);
|
||||
} else {
|
||||
if (is_null(auth()->user()->province_id)) {
|
||||
return response()->json([
|
||||
'message' => 'استانی برای شما در سامانه ثبت نشده است!'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$query = Accident::with('damages')->where('province_id', auth()->user()->province_id)
|
||||
->selectRaw($selectRaw);
|
||||
}
|
||||
|
||||
$accidents_list = processDataTable($request, '', $fields, $query);
|
||||
|
||||
if (Auth::check()) {
|
||||
auth()->user()->addActivityComplete(1122);
|
||||
}
|
||||
|
||||
return response()->json(
|
||||
$accidents_list,
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
DB::transaction(function () use ($request) {
|
||||
$new_accident = new Accident();
|
||||
|
||||
|
||||
$new_accident->province_fa = Province::where('id', $request->province_id)->first()->name_fa;
|
||||
$new_accident->province_id = $request->province_id;
|
||||
|
||||
$new_accident->city_fa = City::where('id', $request->city_id)->first()->name_fa;
|
||||
$new_accident->city_id = $request->city_id;
|
||||
|
||||
$new_accident->axis_name = $request->axis_name;
|
||||
$new_accident->driver_name = $request->driver_name;
|
||||
$new_accident->plaque = $request->plaque;
|
||||
$new_accident->driver_national_code = $request->national_code;
|
||||
$new_accident->driver_phone_number = $request->phone_number;
|
||||
|
||||
$new_accident->user_id = auth()->user()->id;
|
||||
|
||||
$new_accident->lat = $request->lat;
|
||||
$new_accident->lng = $request->lng;
|
||||
|
||||
$new_accident->accident_type = $request->accident_type;
|
||||
$new_accident->accident_type_fa = DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value;
|
||||
$new_accident->accident_date = $request->accident_date;
|
||||
$new_accident->accident_time = $request->accident_time;
|
||||
|
||||
$new_accident->way_id = get_way_id_from_nominatim($request->lat, $request->lng);
|
||||
|
||||
$new_accident->save();
|
||||
|
||||
if ($request->report_base) {
|
||||
$new_accident->report_base = 1;
|
||||
} else {
|
||||
$new_accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$new_accident->id, 'police_file_'.$new_accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public');
|
||||
$new_accident->police_serial = $request->police_serial;
|
||||
$new_accident->police_file_date = $request->police_file_date;
|
||||
$new_accident->report_base = 0;
|
||||
}
|
||||
|
||||
$new_accident->save();
|
||||
|
||||
if ($request->has('damage_picture1')) {
|
||||
$new_accident->damage_picture1 = $request->file('damage_picture1')->storeAs('receipts_files/'.$new_accident->id, 'damage_picture1_'.$new_accident->id.'_'.time().'.'.$request->file('damage_picture1')->extension(), 'public');
|
||||
}
|
||||
|
||||
if ($request->has('damage_picture2')) {
|
||||
$new_accident->damage_picture2 = $request->file('damage_picture2')->storeAs('receipts_files/'.$new_accident->id, 'damage_picture2_'.$new_accident->id.'_'.time().'.'.$request->file('damage_picture2')->extension(), 'public');
|
||||
}
|
||||
|
||||
$new_accident->save();
|
||||
$sum = 0;
|
||||
foreach (json_decode($request->items_damge) as $key => $item) {
|
||||
$damage = Damage::find($item->id);
|
||||
$new_accident->damages()->attach($item->id, [
|
||||
'value' => $item->value,
|
||||
'unit' => $damage->unit,
|
||||
'amount' => $item->amount,
|
||||
]);
|
||||
$sum += $item->amount;
|
||||
}
|
||||
|
||||
$ojrate_nasb = $sum/100*20;
|
||||
$new_accident->ojrate_nasb = $ojrate_nasb;
|
||||
|
||||
$sum += $ojrate_nasb;
|
||||
$new_accident->sum = $sum;
|
||||
$new_accident->withoutAction();
|
||||
$new_accident->save();
|
||||
$msg = "درخواست شما بابت پرداخت خسارت وارده به ابنیه فنی و تاسیسات راه با کد یکتا ".$new_accident->id." ثبت شد.\n".verta()->now()->format('Y/m/d H:i') ;
|
||||
Sms::sendSms($request->phone_number, $msg);
|
||||
auth()->user()->addActivityComplete(1123);
|
||||
});
|
||||
}
|
||||
|
||||
public function details(Accident $accident)
|
||||
{
|
||||
return response()->json(
|
||||
$accident->load('damages')->toArray(),
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
public function update(Accident $accident, Request $request)
|
||||
{
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
$accident->province_fa = Province::where('id', $request->province_id)->first()->name_fa;
|
||||
$accident->province_id = $request->province_id;
|
||||
|
||||
$accident->city_fa = City::where('id', $request->city_id)->first()->name_fa;
|
||||
$accident->city_id = $request->city_id;
|
||||
|
||||
$accident->axis_name = $request->axis_name;
|
||||
$accident->driver_name = $request->driver_name;
|
||||
$accident->plaque = $request->plaque;
|
||||
$accident->driver_national_code = $request->national_code;
|
||||
$accident->driver_phone_number = $request->phone_number;
|
||||
|
||||
$accident->lat = $request->lat;
|
||||
$accident->lng = $request->lng;
|
||||
|
||||
$accident->accident_type = $request->accident_type;
|
||||
$accident->accident_type_fa = DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value;
|
||||
$accident->accident_date = $request->accident_date;
|
||||
$accident->accident_time = $request->accident_time;
|
||||
|
||||
$accident->way_id = get_way_id_from_nominatim($request->lat, $request->lng);
|
||||
|
||||
$accident->save();
|
||||
|
||||
if ($request->report_base) {
|
||||
\File::delete('storage/'.$accident->police_file);
|
||||
$accident->police_file = null;
|
||||
$accident->police_serial = null;
|
||||
$accident->report_base = 1;
|
||||
} else {
|
||||
if ($accident->report_base) {
|
||||
if ($request->has('police_file')) {
|
||||
\File::delete('storage/'.$accident->police_file);
|
||||
$accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public');
|
||||
} else {
|
||||
abort(401, 'please send the file');
|
||||
}
|
||||
} else {
|
||||
if ($request->has('police_file')) {
|
||||
\File::delete('storage/'.$accident->police_file);
|
||||
$accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public');
|
||||
}
|
||||
}
|
||||
|
||||
$accident->police_file_date = $request->police_file_date;
|
||||
$accident->police_serial = $request->police_serial;
|
||||
$accident->report_base = 0;
|
||||
}
|
||||
|
||||
$accident->save();
|
||||
|
||||
if ($request->has('damage_picture1')) {
|
||||
\File::delete('storage/'.$accident->damage_picture1);
|
||||
$accident->damage_picture1 = $request->file('damage_picture1')->storeAs('receipts_files/'.$accident->id, 'damage_picture1_'.$accident->id.'_'.time().'.'.$request->file('damage_picture1')->extension(), 'public');
|
||||
} elseif ($request->has('damage_picture1_is_delete')) {
|
||||
\File::delete('storage/'.$accident->damage_picture1);
|
||||
$accident->damage_picture1 = null;
|
||||
}
|
||||
|
||||
if ($request->has('damage_picture2')) {
|
||||
\File::delete('storage/'.$accident->damage_picture2);
|
||||
$accident->damage_picture2 = $request->file('damage_picture2')->storeAs('receipts_files/'.$accident->id, 'damage_picture2_'.$accident->id.'_'.time().'.'.$request->file('damage_picture2')->extension(), 'public');
|
||||
} elseif ($request->has('damage_picture2_is_delete')) {
|
||||
\File::delete('storage/'.$accident->damage_picture2);
|
||||
$accident->damage_picture2 = null;
|
||||
}
|
||||
|
||||
$accident->save();
|
||||
$sum = 0;
|
||||
$accident->damages()->detach();
|
||||
foreach (json_decode($request->items_damge) as $key => $item) {
|
||||
$damage = Damage::find($item->id);
|
||||
$accident->damages()->attach($item->id, [
|
||||
'value' => $item->value,
|
||||
'unit' => $damage->unit,
|
||||
'amount' => $item->amount,
|
||||
]);
|
||||
$sum += $item->amount;
|
||||
}
|
||||
|
||||
|
||||
$ojrate_nasb = $sum/100*20;
|
||||
$accident->ojrate_nasb = $ojrate_nasb;
|
||||
|
||||
$sum += $ojrate_nasb;
|
||||
$accident->sum = $sum;
|
||||
|
||||
$accident->save();
|
||||
|
||||
auth()->user()->addActivityComplete(1124);
|
||||
});
|
||||
}
|
||||
|
||||
public function delete(Accident $accident)
|
||||
{
|
||||
\File::delete('storage/receipts_files/'.$accident->id);
|
||||
|
||||
$accident->damages()->detach();
|
||||
$accident->delete();
|
||||
auth()->user()->addActivityComplete(1125);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'item is deleted.'
|
||||
]);
|
||||
}
|
||||
|
||||
public function getAccidentDamages(Accident $accident)
|
||||
{
|
||||
return response()->json(
|
||||
$accident->damages,
|
||||
200
|
||||
);
|
||||
}
|
||||
|
||||
public function sendToInsurance(Request $request, Accident $accident)
|
||||
{
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
$accident->sendToInsurance();
|
||||
$accident->save();
|
||||
|
||||
auth()->user()->addActivityComplete(1126);
|
||||
});
|
||||
|
||||
$account_data = Province::where('id', $accident->province_id)->first();
|
||||
|
||||
return view('receipt.insurance_letter', [
|
||||
'account_data' => $account_data,
|
||||
'data' => $accident->load('damages')->toArray(),
|
||||
]);
|
||||
}
|
||||
|
||||
// public function receiveInsuranceBill(Request $request, Accident $accident)
|
||||
// {
|
||||
|
||||
// DB::transaction(function () use ($request, $accident) {
|
||||
// $accident->deposit_insurance_image = $request->file('deposit_insurance_image')->storeAs('receipts_files/'.$accident->id, 'deposit_insurance_image_'.$accident->id.'_'.time().'.'.$request->file('deposit_insurance_image')->extension(), 'public');
|
||||
|
||||
// $accident->deposit_insurance_amount = $request->deposit_insurance_amount;
|
||||
|
||||
// $accident->receiveInsuranceBill();
|
||||
// $accident->save();
|
||||
|
||||
// auth()->user()->addActivityComplete(1126);
|
||||
// });
|
||||
|
||||
// $account_data = Province::where('id', $accident->province_id)->first();
|
||||
|
||||
// return view('receipt.insurance_letter', [
|
||||
// 'account_data' => $account_data,
|
||||
// 'data' => $accident->load('damages')->toArray(),
|
||||
// ]);
|
||||
// }
|
||||
|
||||
public function uploadPaymentInfo(Request $request, Accident $accident)
|
||||
{
|
||||
$request->validate([
|
||||
'deposit_insurance_image' => 'file',
|
||||
'deposit_insurance_amount' => 'required_with:deposit_insurance_image',
|
||||
|
||||
'deposit_daghi_image' => 'file',
|
||||
'deposit_daghi_amount' => 'required_with:deposit_daghi_image',
|
||||
]);
|
||||
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
if ($request->has('deposit_insurance_status')) {
|
||||
if ($request->has('deposit_insurance_image')) {
|
||||
$accident->deposit_insurance_image = $request->file('deposit_insurance_image')->storeAs('receipts_files/'.$accident->id, 'deposit_insurance_image_'.$accident->id.'_'.time().'.'.$request->file('deposit_insurance_image')->extension(), 'public');
|
||||
}
|
||||
|
||||
$accident->deposit_insurance_amount = $request->deposit_insurance_amount;
|
||||
} else {
|
||||
$accident->deposit_insurance_image = null;
|
||||
$accident->deposit_insurance_amount = null;
|
||||
}
|
||||
|
||||
if ($request->has('deposit_daghi_status')) {
|
||||
if ($request->has('deposit_daghi_image')) {
|
||||
$accident->deposit_daghi_image = $request->file('deposit_daghi_image')->storeAs('receipts_files/'.$accident->id, 'deposit_daghi_image_'.$accident->id.'_'.time().'.'.$request->file('deposit_daghi_image')->extension(), 'public');
|
||||
}
|
||||
|
||||
$accident->deposit_daghi_amount = $request->deposit_daghi_amount;
|
||||
} else {
|
||||
$accident->deposit_daghi_image = null;
|
||||
$accident->deposit_daghi_amount = null;
|
||||
}
|
||||
|
||||
$accident->receiveInsuranceAndDaqiBill();
|
||||
|
||||
$accident->save();
|
||||
|
||||
auth()->user()->addActivityComplete(1132);
|
||||
return response()->json([], 200);
|
||||
});
|
||||
}
|
||||
|
||||
public function invoiceBill(Request $request, Accident $accident)
|
||||
{
|
||||
try {
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
|
||||
$final_amount = $accident->sum - ($accident->deposit_insurance_amount + $accident->deposit_daghi_amount);
|
||||
|
||||
if ($final_amount < 0) {
|
||||
return response()->json([], 422);
|
||||
}
|
||||
|
||||
$accident->final_amount = $final_amount;
|
||||
|
||||
$accident->bill_code = $this->invoiceBillApi($accident->driver_national_code, $final_amount);
|
||||
|
||||
$accident->invoiceBill();
|
||||
|
||||
$accident->save();
|
||||
|
||||
$msg = "فاکتور با شناسه پرداخت \n" . explode("/", $accident->bill_code)[0]. "\n در سامانه سازمان راهداری ثبت شد. برای پرداخت از لینک زیر اقدام نمایید.\n\n".env("PAYMENT_LINK")."/#/pay/".explode("/", $accident->bill_code)[0]."/$final_amount";
|
||||
|
||||
Sms::sendSms($accident->driver_phone_number, $msg);
|
||||
|
||||
auth()->user()->addActivityComplete(1129);
|
||||
});
|
||||
|
||||
return response()->json($accident, 200);
|
||||
} catch (\Throwable $th) {
|
||||
return response()->json([
|
||||
'message' => $th->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function sendSmsAgain(Request $request, Accident $accident)
|
||||
{
|
||||
$msg = "فاکتور با شناسه پرداخت \n" . explode("/", $accident->bill_code)[0]. "\n در سامانه سازمان راهداری ثبت شد. برای پرداخت از لینک زیر اقدام نمایید.\n\n".env("PAYMENT_LINK")."/#/pay/".explode("/", $accident->bill_code)[0]."/$accident->final_amount";
|
||||
|
||||
Sms::sendSms($accident->driver_phone_number, $msg);
|
||||
|
||||
return $msg;
|
||||
}
|
||||
|
||||
public function callPaymentStatus(Request $request, Accident $accident)
|
||||
{
|
||||
try {
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
if ($accident->final_amount > 0) {
|
||||
|
||||
$response = json_decode($this->callPaymentStatusBillApi(explode("/", $accident->bill_code)[0]));
|
||||
|
||||
if ($response->isPayed) {
|
||||
$accident->payBill();
|
||||
$accident->save();
|
||||
}
|
||||
}else{
|
||||
$accident->payBill();
|
||||
$accident->save();
|
||||
|
||||
}
|
||||
|
||||
auth()->user()->addActivityComplete(1130);
|
||||
});
|
||||
|
||||
return response()->json($accident, 200);
|
||||
} catch (\Throwable $th) {
|
||||
return response()->json([
|
||||
'message' => $th->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function documentRelease(Request $request, Accident $accident)
|
||||
{
|
||||
DB::transaction(function () use ($request, $accident) {
|
||||
$accident->documentRelease();
|
||||
$accident->save();
|
||||
|
||||
auth()->user()->addActivityComplete(1131);
|
||||
});
|
||||
|
||||
|
||||
return view('receipt.release_document', [
|
||||
'data' => $accident->toArray(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function invoiceBillApi($driver_national_code, $final_amount)
|
||||
{
|
||||
try {
|
||||
$post = array(
|
||||
'username' => env("PAYMENT_USERNAME"),
|
||||
'password' => env("PAYMENT_PASSWORD"),
|
||||
'amount' => $final_amount,
|
||||
'serial' => "12345",
|
||||
'type' => 1,
|
||||
'instanceid' => 123,
|
||||
'ownerid' => $driver_national_code,
|
||||
'calculationBox' => "{\"rows\":[{\"amount\":". $final_amount .",\"code\":\"7070021060000015\"}]}"
|
||||
);
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, "http://payment.rmto.ir/acc/rest/payid/gen");
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
|
||||
$response = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
return $response;
|
||||
} catch (\Throwable $th) {
|
||||
abort(500);
|
||||
}
|
||||
}
|
||||
|
||||
public function callPaymentStatusBillApi($bill_code)
|
||||
{
|
||||
try {
|
||||
$post = array(
|
||||
// 'username' => env("PAYMENT_USERNAME"),
|
||||
// 'password' => env("PAYMENT_PASSWORD"),
|
||||
// 'amount' => $final_amount,
|
||||
// 'serial' => "12345",
|
||||
// 'type' => 1,
|
||||
// 'instanceid' => 123,
|
||||
// 'ownerid' => $driver_national_code,
|
||||
// 'calculationBox' => "{\"rows\":[{\"amount\":". $final_amount .",\"code\":\"7070021060000015\"}]}"
|
||||
);
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, "http://payment.rmto.ir/acc/rest/payid/track2/".env("PAYMENT_USERNAME")."/".env("PAYMENT_PASSWORD")."/".$bill_code);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($ch, CURLOPT_POST, true);
|
||||
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
|
||||
$response = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
return $response;
|
||||
} catch (\Throwable $th) {
|
||||
abort(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user