Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/CountryController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Helpers\Helper;

use DB, Exception, Setting, CountryState, Excel;

use App\Models\{ Country };

use App\Http\Requests\Admin\Country\{ CountryPostRequest, CountryGetRequest };

use App\Exports\{ CountriesExport };

use App\Imports\{ CountriesImport };

class CountryController extends Controller 
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(Request $request)
    {
        $this->middleware('auth:admin');

        $this->skip = $request->skip ?: 0;
       
        $this->take = $request->take ?: (Setting::get('admin_take_count') ?: TAKE_COUNT);
    }

    /**
     * @method countries_index()
     *
     * @uses to list the countries
     *
     * @created Karthick
     *
     * @updated  
     *
     * @param
     *
     * @return to countries index page
     */

    public function countries_index(Request $request) {

        $base_query = Country::orderBy('created_at', 'DESC');

        if($request->filled('search_key')) {

            $base_query = $base_query->where(function ($query) use ($request) {
                                $query->where('state', "LIKE", "%" . $request->search_key . "%");
                                $query->orWhere('country', "LIKE", "%" . $request->search_key . "%");
                                $query->orWhere('country_code', "LIKE", "%" . $request->search_key . "%");
                            });
        }

        if($request->filled('status')) {

            $base_query = $base_query->where('status', $request->status);
            
        } 

        $countries = $base_query->paginate($this->take);
        
        return view('admin.countries.index')
                    ->with('page', 'countries')
                    ->with('sub_page', 'countries-view')
                    ->with('countries', $countries);
    
    }

    /**
     * @method countries_create()
     *
     * @uses To create a new country
     *
     * @created  Karthick
     *
     * @updated 
     *
     * @param create a new object
     * 
     * @return to create country page
     *
     */
    public function countries_create() {

        try {

        $country = new Country;

        $countries = CountryState::getCountries();

        $states = [];

        return view('admin.countries.create')
                    ->with('page', 'countries')
                    ->with('sub_page', 'countries-create')
                    ->with(compact(['country', 'countries', 'states']));     

        } catch(Exception $e) {

            return redirect()->route('admin.countries.index')->with('flash_error', $e->getMessage());
        }
    }

    /**
     * @method countries_edit()
     *
     * @uses to edit country details based on the country_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - country_id
     * 
     * @return to edit country page 
     *
     */
    public function countries_edit(CountryGetRequest $request) {

        try {

            $country = Country::find($request->country_id);

            $countries = CountryState::getCountries();

            return view('admin.countries.edit')
                    ->with('page' , 'countries')
                    ->with('sub_page','countries-create')
                    ->with(compact(['country', 'countries'])); 
            
        } catch(Exception $e) {

            return redirect()->route('admin.countries.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method countries_save()
     *
     * @uses to save the country details of new/existing object based on country_id
     *
     * @created Karthick
     *
     * @updated
     *
     * @param object $request - country_id
     *
     * @return view country page
     *
     */
    public function countries_save(CountryPostRequest $request) {
            
        try {

            $country_check = Country::when(request('country_id'), function($query){
                                $query->where('id', '!=', request('country_id'));
                            })->where(['state' => request('state'), 'country' => request('country')])
                            ->exists();

            if($country_check) {

                throw new Exception(tr('country_state_already_exists', (request('country').' - '.request('state'))));
            }

            DB::begintransaction();

            $country = Country::updateOrCreate(['id' => $request->country_id], $request->validated());

            if($country) {

                DB::commit();

                $message = $request->country_id ? tr('country_updated_success') : tr('country_created_success');

                return redirect(route('admin.countries.view', ['country_id' => $country->id ]))->with('flash_success', $message);

            }

            throw new Exception(tr('country_save_failed'));
            
        } catch(Exception $e){ 

            DB::rollback();

            return back()->withInput()->with('flash_error', $e->getMessage());

        } 

    }

    /**
     * @method countries_view()
     *
     * @uses to view the country details based on country_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - country_id
     * 
     * @return View page
     *
     */
    public function countries_view(CountryGetRequest $request) {
       
        try {
      
            $country = Country::find($request->country_id);  

            return view('admin.countries.view')
                        ->with('page', 'countries')
                        ->with('sub_page', 'countries-view')
                        ->with('country',$country);
            
        } catch (Exception $e) {

            return redirect()->route('admin.countries.index')->with('flash_error', $e->getMessage());
        }
    
    }


    /**
     * @method countries_status
     *
     * @uses to change country status as DECLINED/APPROVED based on country_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - country_id
     * 
     * @return response success/failure message
     *
     **/
    public function countries_status(CountryGetRequest $request) {

        try {

            DB::beginTransaction();

            $country = Country::find($request->country_id);

            $result = $country->update(['status' => $country->status ? DECLINED : APPROVED]);

            if($result) {

                DB::commit();

                $message = $country->status ? tr('country_approve_success') : tr('country_decline_success');

                return back()->with('flash_success', $message);
            }
            
            throw new Exception(tr('country_status_change_failed'));

        } catch(Exception $e) {

            DB::rollback();

            return redirect()->route('admin.countries.index')->with('flash_error', $e->getMessage());

        }

    }

    /**
     * @method countries_delete()
     *
     * @uses to delete the country details based on country_id
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param object $request - country_id
     * 
     * @return response of success/failure details with view page
     *
     */
    public function countries_delete(CountryGetRequest $request) {

        try {

            DB::begintransaction();

            $country = Country::find($request->country_id);

            if($country->delete()) {

                DB::commit();

                return redirect()->route('admin.countries.index')->with('flash_success',tr('country_deleted_success'));   

            } 
            
            throw new Exception(tr('country_delete_failed'));
            
        } catch(Exception $e){

            DB::rollback();

            return back()->with('flash_error', $e->getMessage());

        }       
         
    }

    /**
     * @method countries_export()
     *
     * @uses to export countries in excel format
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param
     * 
     * @return
     *
     */
    public function countries_export(Request $request) {

        try {

            $file_format = $request->file_format ? : '.xlsx';

            $filename = routefreestring(Setting::get('site_name'))."-".now()."-".uniqid().$file_format;

            return Excel::download(new CountriesExport($request), $filename);

        } catch(\Exception $e) {

            return redirect()->route('admin.countries.index')->with('flash_error' , $e->getMessage());

        }
    }

    /**
     * @method countries_import()
     *
     * @uses to import countries from excel
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param
     * 
     * @return
     *
     */
    public function countries_import(Request $request) {

        try {

            return view('admin.countries.import')
                    ->with('page', 'countries')
                    ->with('sub_page', 'countries-import');

        } catch(\Exception $e) {

            return redirect()->route('admin.countries.index')->with('flash_error' , $e->getMessage());

        }
    }

    /**
     * @method countries_import_save()
     *
     * @uses to import countries from excel
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param
     * 
     * @return
     *
     */
    public function countries_import_save(Request $request) {

        try {

            $rules = ['excel' => ['required', 'mimes:xlsx']];

            Helper::custom_validator($request->all(), $rules, []);

            Excel::import(new CountriesImport, request('excel'));

            return redirect()->route('admin.countries.index');

        } catch(\Exception $e) {

            return redirect()->back()->with('flash_error' , $e->getMessage());
        }
    }

    /**
     * @method get_states()
     *
     * @uses to get all states from a country.
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param 
     * 
     * @return return data
     *
     */
    public function get_states() {

        $states = CountryState::getStates(request('country_code'));

        $view_page = view('admin.countries.states_list')->with('states' , $states)->render();

        $response_array = ['success' =>  true , 'view' => $view_page];

        return response()->json($response_array);  
    }
}
Back to Directory File Manager