Viewing file: ProvidersController.php (7.11 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;
use App\Exports\ProvidersExport;
use App\Models\Provider;
use App\utils\helpers;
use Carbon\Carbon;
use DB;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class ProvidersController extends BaseController
{
//----------- Get ALL Suppliers-------\\
public function index(request $request)
{
$this->authorizeForUser($request->user('api'), 'view', Provider::class);
// How many items do you want to display.
$perPage = $request->limit;
$pageStart = \Request::get('page', 1);
// Start displaying items from this number;
$offSet = ($pageStart * $perPage) - $perPage;
$order = $request->SortField;
$dir = $request->SortType;
$helpers = new helpers();
// Filter fields With Params to retrieve
$columns = array(0 => 'name', 1 => 'code', 2 => 'phone', 3 => 'email');
$param = array(0 => 'like', 1 => 'like', 2 => 'like', 3 => 'like');
$data = array();
$providers = Provider::where('deleted_at', '=', null);
//Multiple Filter
$Filtred = $helpers->filter($providers, $columns, $param, $request)
// Search With Multiple Param
->where(function ($query) use ($request) {
return $query->when($request->filled('search'), function ($query) use ($request) {
return $query->where('name', 'LIKE', "%{$request->search}%")
->orWhere('code', 'LIKE', "%{$request->search}%")
->orWhere('phone', 'LIKE', "%{$request->search}%")
->orWhere('email', 'LIKE', "%{$request->search}%");
});
});
$totalRows = $Filtred->count();
if($perPage == "-1"){
$perPage = $totalRows;
}
$providers = $Filtred->offset($offSet)
->limit($perPage)
->orderBy($order, $dir)
->get();
return response()->json([
'providers' => $providers,
'totalRows' => $totalRows,
]);
}
//----------- Store new Supplier -------\\
public function store(Request $request)
{
$this->authorizeForUser($request->user('api'), 'create', Provider::class);
request()->validate([
'name' => 'required',
'email' => 'required',
]);
Provider::create([
'name' => $request['name'],
'code' => $this->getNumberOrder(),
'adresse' => $request['adresse'],
'phone' => $request['phone'],
'email' => $request['email'],
'country' => $request['country'],
'city' => $request['city'],
]);
return response()->json(['success' => true]);
}
//------------ function show -----------\\
public function show($id){
//
}
//----------- Update Supplier-------\\
public function update(Request $request, $id)
{
$this->authorizeForUser($request->user('api'), 'update', Provider::class);
request()->validate([
'name' => 'required',
'email' => 'required',
]);
Provider::whereId($id)->update([
'name' => $request['name'],
'adresse' => $request['adresse'],
'phone' => $request['phone'],
'email' => $request['email'],
'country' => $request['country'],
'city' => $request['city'],
]);
return response()->json(['success' => true]);
}
//----------- Remdeleteove Provider-------\\
public function destroy(Request $request, $id)
{
$this->authorizeForUser($request->user('api'), 'delete', Provider::class);
Provider::whereId($id)->update([
'deleted_at' => Carbon::now(),
]);
return response()->json(['success' => true]);
}
//-------------- Delete by selection ---------------\\
public function delete_by_selection(Request $request)
{
$this->authorizeForUser($request->user('api'), 'delete', Provider::class);
$selectedIds = $request->selectedIds;
foreach ($selectedIds as $Provider_id) {
Provider::whereId($Provider_id)->update([
'deleted_at' => Carbon::now(),
]);
}
return response()->json(['success' => true]);
}
//----------- Export Excel ALL Suppliers-------\\
public function exportExcel(Request $request)
{
$this->authorizeForUser($request->user('api'), 'view', Provider::class);
return Excel::download(new ProvidersExport, 'Providers.xlsx');
}
//----------- get Number Order Of Suppliers-------\\
public function getNumberOrder()
{
$last = DB::table('providers')->latest('id')->first();
if ($last) {
$code = $last->code + 1;
} else {
$code = 1;
}
return $code;
}
// import providers
public function import_providers(Request $request)
{
$file_upload = $request->file('providers');
$ext = pathinfo($file_upload->getClientOriginalName(), PATHINFO_EXTENSION);
if ($ext != 'csv') {
return response()->json([
'msg' => 'must be in csv format',
'status' => false,
]);
} else {
$data = array();
$rowcount = 0;
if (($handle = fopen($file_upload, "r")) !== false) {
$max_line_length = defined('MAX_LINE_LENGTH') ? MAX_LINE_LENGTH : 10000;
$header = fgetcsv($handle, $max_line_length);
$header_colcount = count($header);
while (($row = fgetcsv($handle, $max_line_length)) !== false) {
$row_colcount = count($row);
if ($row_colcount == $header_colcount) {
$entry = array_combine($header, $row);
$data[] = $entry;
} else {
return null;
}
$rowcount++;
}
fclose($handle);
} else {
return null;
}
//-- Create New Provider
foreach ($data as $key => $value) {
Provider::create([
'name' => $value['name'] == '' ? null : $value['name'],
'code' => $this->getNumberOrder(),
'adresse' => $value['adresse'] == '' ? null : $value['adresse'],
'phone' => $value['phone'] == '' ? null : $value['phone'],
'email' => $value['email'] == '' ? null : $value['email'],
'country' => $value['country'] == '' ? null : $value['country'],
'city' => $value['city'] == '' ? null : $value['city'],
]);
}
return response()->json([
'status' => true,
], 200);
}
}
}
|