You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

195 lines
7.1 KiB

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\AddOn;
use App\Models\Restaurant;
use App\Models\Translation;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Http\Request;
use Rap2hpoutre\FastExcel\FastExcel;
use Illuminate\Support\Facades\DB;
use App\Scopes\RestaurantScope;
use App\CentralLogics\ProductLogic;
class AddOnController extends Controller
{
public function index(Request $request)
{
$restaurant_id = $request->query('restaurant_id', 'all');
$addons = AddOn::withoutGlobalScope(RestaurantScope::class)
->when(is_numeric($restaurant_id), function($query)use($restaurant_id){
return $query->where('restaurant_id', $restaurant_id);
})
->orderBy('name')->paginate(config('default_pagination'));
$restaurant =$restaurant_id !='all'? Restaurant::findOrFail($restaurant_id):null;
return view('admin-views.addon.index', compact('addons', 'restaurant'));
}
public function store(Request $request)
{
$request->validate([
'name.*' => 'max:191',
'name'=>'array|required',
'restaurant_id' => 'required',
'price' => 'required|numeric|between:0,999999999999.99',
], [
'name.required' => translate('messages.Name is required!'),
'restaurant_id.required' => translate('messages.please_select_restaurant'),
]);
$addon = new AddOn();
$addon->name = $request->name[array_search('en', $request->lang)];
$addon->price = $request->price;
$addon->restaurant_id = $request->restaurant_id;
$addon->save();
$data = [];
foreach($request->lang as $index=>$key)
{
if($request->name[$index] && $key != 'en')
{
array_push($data, Array(
'translationable_type' => 'App\Models\AddOn',
'translationable_id' => $addon->id,
'locale' => $key,
'key' => 'name',
'value' => $request->name[$index],
));
}
}
if(count($data))
{
Translation::insert($data);
}
Toastr::success(translate('messages.addon_added_successfully'));
return back();
}
public function edit($id)
{
$addon = AddOn::withoutGlobalScope(RestaurantScope::class)->withoutGlobalScope('translate')->findOrFail($id);
return view('admin-views.addon.edit', compact('addon'));
}
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required|max:191',
'restaurant_id' => 'required',
'price' => 'required|numeric|between:0,999999999999.99',
], [
'name.required' => translate('messages.Name is required!'),
'restaurant_id.required' => translate('messages.please_select_restaurant'),
]);
$addon = AddOn::withoutGlobalScope(RestaurantScope::class)->find($id);
$addon->name = $request->name[array_search('en', $request->lang)];
$addon->price = $request->price;
$addon->restaurant_id = $request->restaurant_id;
$addon->save();
foreach($request->lang as $index=>$key)
{
if($request->name[$index] && $key != 'en')
{
Translation::updateOrInsert(
['translationable_type' => 'App\Models\AddOn',
'translationable_id' => $addon->id,
'locale' => $key,
'key' => 'name'],
['value' => $request->name[$index]]
);
}
}
Toastr::success(translate('messages.addon_updated_successfully'));
return redirect(route('admin.addon.add-new'));
}
public function delete(Request $request)
{
$addon = AddOn::withoutGlobalScope(RestaurantScope::class)->find($request->id);
$addon->delete();
Toastr::success(translate('messages.addon_deleted_successfully'));
return back();
}
public function status($addon, Request $request)
{
$addon_data = AddOn::withoutGlobalScope(RestaurantScope::class)->find($addon);
$addon_data->status = $request->status;
$addon_data->save();
Toastr::success(translate('messages.addon_status_updated'));
return back();
}
public function search(Request $request){
$key = explode(' ', $request['search']);
$addons=AddOn::where(function ($q) use ($key) {
foreach ($key as $value) {
$q->orWhere('name', 'like', "%{$value}%");
}
})->limit(50)->get();
return response()->json([
'view'=>view('admin-views.addon.partials._table',compact('addons'))->render()
]);
}
public function bulk_import_index()
{
return view('admin-views.addon.bulk-import');
}
public function bulk_import_data(Request $request)
{
try {
$collections = (new FastExcel)->import($request->file('products_file'));
} catch (\Exception $exception) {
Toastr::error(translate('messages.you_have_uploaded_a_wrong_format_file'));
return back();
}
$data = [];
foreach ($collections as $collection) {
if ($collection['name'] === "" && $collection['restaurant_id'] === "") {
Toastr::error(translate('messages.please_fill_all_required_fields'));
return back();
}
array_push($data, [
'name' => $collection['name'],
'price' => $collection['price'],
'restaurant_id' => $collection['restaurant_id'],
'created_at'=>now(),
'updated_at'=>now()
]);
}
DB::table('add_ons')->insert($data);
Toastr::success(translate('messages.addon_imported_successfully', ['count'=>count($data)]));
return back();
}
public function bulk_export_index()
{
return view('admin-views.addon.bulk-export');
}
public function bulk_export_data(Request $request)
{
$request->validate([
'type'=>'required',
'start_id'=>'required_if:type,id_wise',
'end_id'=>'required_if:type,id_wise',
'from_date'=>'required_if:type,date_wise',
'to_date'=>'required_if:type,date_wise'
]);
$addons = AddOn::when($request['type']=='date_wise', function($query)use($request){
$query->whereBetween('created_at', [$request['from_date'].' 00:00:00', $request['to_date'].' 23:59:59']);
})
->when($request['type']=='id_wise', function($query)use($request){
$query->whereBetween('id', [$request['start_id'], $request['end_id']]);
})
->withoutGlobalScope(RestaurantScope::class)->get();
return (new FastExcel(ProductLogic::format_export_addons($addons)))->download('Addons.xlsx');
}
}