<?php
namespace App\Http\Controllers;
use Yajra\Datatables\Datatables as Datatables;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Facades\Excel;
use Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Input;
use App\Helper\MailHelper as MailHelper;
use Notification;
use Auth;
use App\Models\User;
use App\Models\Settings\Organisation;
use App\Models\Settings\Department;
use App\Models\Settings\Section;
use App\Models\Settings\MaterialType;
use App\Models\Settings\MaterialSubType;
use App\Models\Settings\Topic;
use App\Models\Settings\ContentType;
use App\Models\Settings\MimeType;
use App\Models\Settings\Roles;
use App\Models\Settings\Permissions;
use App\Models\Settings\RolePermission;
use App\Models\Settings\UserRoles;
use App\Models\Settings\MenuSettings;
use App\Models\Settings\MenuRolePermission;
use Jrean\UserVerification\Traits\VerifiesUsers;
use Jrean\UserVerification\Facades\UserVerification;
use Request as req;

class SettingsController extends Controller
{
    use VerifiesUsers;
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

    /////organisation /////
    public function organisation()
    {
        return view('Admin/Settings/organisation');
    }
    public function get_organisation_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=> 'organisation_name',
            2=> 'remarks',
            3=> 'action',
        );
        $totalData = Organisation::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {            
            $posts = Organisation::offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  Organisation::where('organisation_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = Organisation::where('organisation_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            foreach ($posts as $post)
            {   
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $post->organisation_name;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_organisation').'/'.$post->id.'" title="Update Role"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Organisation" onClick="confirmDeleteOrganisation('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function organisation_post(Request $request)
    {
        $messsages = array(
            'organisation_name.required'=>'Please enter organisation name',
            );
        $rules = array(
            'organisation_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_name=$request->organisation_name;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $organisation_count = Organisation::where('organisation_name',$organisation_name)->count();
        if($organisation_count==0)
        {
                $insert_id = Organisation::create([
                    'organisation_name' => $organisation_name,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('Organisation has been added');
        else
            smilify('Error', 'Organisation already exist');

        return redirect()->back();
    }
    public function show_organisation($id)
    {
        $organisations = Organisation::where('id',$id)->first();
        return view('Admin/Settings/show_organisation', compact('organisations'));
    }
    public function show_organisation_post(Request $request)
    {
        $messsages = array(
            'organisation_name.required'=>'Please enter organisation name',
            );
        $rules = array(
            'organisation_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_name=$request->organisation_name;
        $remarks = $request->remarks;
        $organisation_id = $request->organisation_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $organisations = Organisation::where('id',$organisation_id)->first();
        if(isset($organisations))
        {
            $organisations->organisation_name=$organisation_name;
            $organisations->remarks=$remarks;
            $organisations->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Organisation has been updated');
        else
            smilify('Error', '');

        return redirect('organisation');
    }
    public function delete_organisation(Request $request)
    {
        $orgid = $request->orgid;
        $section_count = Section::where('organisation_id',$orgid)->count();
        if($section_count==0)
        {
            $content_type_count = Department::where('organisation_id',$orgid)->count();
            if($department_count==0)
            {
                $organisations_delete=Organisation::where('id',$orgid)->delete();
                return 1;
            }
        }
        else
        {
            return 0;
        }
    }
    ///////////////////

    /////department /////
    public function department()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/department', compact('organisations'));
    }
    public function get_department_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=> 'organisation_name',
            2=> 'department_name',
            3=> 'remarks',
            4=> 'action',
        );
        $totalData = Department::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $order =  1;
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {            
            $posts = Department::offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  Department::where('department_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = Department::where('department_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {

            foreach ($posts as $post)
            {   
                $org_id = $post->organisation_id;
                $org_arr = Organisation::where('id',$org_id)->first();
                if(isset($org_arr))
                {
                    $organisation_name = $org_arr->organisation_name;
                }
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['department_name'] = $post->department_name;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_department').'/'.$post->id.'" title="Update Role"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Department" onClick="confirmDeleteDepartment('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function department_post(Request $request)
    {
        $messsages = array(
            'department_name.required'=>'Please enter department name',
            );
        $rules = array(
            'department_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $department_name=$request->department_name;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $department_count = Department::where('department_name',$department_name)->where('organisation_id',$organisation_id)->count();
        if($department_count==0)
        {
                $insert_id = Department::create([
                    'organisation_id' => $organisation_id,
                    'department_name' => $department_name,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('Department has been added');
        else
            smilify('Error', 'Department already exist in the selected organisation');

        return redirect()->back();
    }
    public function show_department($id)
    {
        $departments = Department::where('id',$id)->with('organisation')->first();
        return view('Admin/Settings/show_department', compact('departments'));
    }
    public function show_department_post(Request $request)
    {
        $messsages = array(
            'department_name.required'=>'Please enter department name',
            );
        $rules = array(
            'department_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $department_name=$request->department_name;
        $remarks = $request->remarks;
        $department_id = $request->department_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $departments = Department::where('id',$department_id)->first();
        if(isset($departments))
        {
            $departments->department_name=$department_name;
            $departments->remarks=$remarks;
            $departments->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Department has been updated');
        else
            smilify('Error', '');

        return redirect('department');
    }
    public function delete_department(Request $request)
    {
        $dept_id = $request->dept_id;
        $section_count = Section::where('department_id',$dept_id)->count();
        if($section_count==0)
        {
                $dept_delete=Department::where('id',$dept_id)->delete();
                return 1;
            
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////////////////////////////

    /////section /////
    public function section()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/section', compact('organisations'));
    }
    public function get_department($organisation_id)
    {
        $departments=Department::where('organisation_id',$organisation_id)->get();
        return $departments->pluck('department_name', 'id');
    }
    public function get_section_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=>'organisation_name',
            2=>'department_name',
            3=> 'section_name',
            4=> 'remarks',
            5=> 'action',
        );
        $totalData = Section::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {            
            $posts = Section::with('organisation','department')
                         ->offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  Section::with('organisation','department')
                            ->where('section_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = Section::with('organisation','department')
                            ->where('section_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            $organisation_name = "";
            $department_name = "";
            foreach ($posts as $post)
            {   
                $organisation_name = $post->organisation->organisation_name;
                $department_name = $post->department->department_name;
                
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['department_name'] = $department_name;
                $nestedData['section_name'] = $post->section_name;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_section').'/'.$post->id.'" title="Update Section"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Section" onClick="confirmDeleteSection('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function section_post(Request $request)
    {
        $messsages = array(
            'section_name.required'=>'Please enter section name',
            );
        $rules = array(
            'section_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $department_id = $request->department_id;
        $section_name=$request->section_name;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $section_count = Section::where('section_name',$section_name)->where('department_id',$department_id)->where('organisation_id',$organisation_id)->count();
        if($section_count==0)
        {
                $insert_id = Section::create([
                    'organisation_id' => $organisation_id,
                    'department_id' => $department_id,
                    'section_name' => $section_name,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('Section has been added');
        else
            smilify('Error', 'Section already exist in the selected department in the organisation');

        return redirect()->back();
    }
    public function show_section($id)
    {
        $sections = Section::where('id',$id)->with('organisation','department')->first();
        return view('Admin/Settings/show_section', compact('sections'));
    }
    public function show_section_post(Request $request)
    {
        $messsages = array(
            'section_name.required'=>'Please enter section name',
            );
        $rules = array(
            'section_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $section_name=$request->section_name;
        $remarks = $request->remarks;
        $section_id = $request->section_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $sections = Section::where('id',$section_id)->first();
        if(isset($sections))
        {
            $sections->section_name=$section_name;
            $sections->remarks=$remarks;
            $sections->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Section has been updated');
        else
            smilify('Error', '');

        return redirect('section');
    }
    public function delete_section(Request $request)
    {
        $section_id = $request->section_id;
        $dept_delete=Section::where('id',$section_id)->delete();
        if($dept_delete)
        {                
            return 1;
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////

    /////material_type /////
    public function material_type()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/material_type', compact('organisations'));
    }
    public function get_material_type_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=> 'organisation_name',
            2=> 'material_type_name',
            3=> 'material_type_name',
            4=> 'remarks',
            5=> 'action',
        );
        $totalData = MaterialType::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {            
            $posts = MaterialType::offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  MaterialType::where('material_type_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = MaterialType::where('material_type_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            foreach ($posts as $post)
            {   
                $org_id = $post->organisation_id;
                $org_arr = Organisation::where('id',$org_id)->first();
                if(isset($org_arr))
                {
                    $organisation_name = $org_arr->organisation_name;
                }
                $material_type_complexity = $post->material_type_complexity;
                if($material_type_complexity==1)
                {
                    $material_type_complexity = "Beginner";
                }
                if($material_type_complexity==2)
                {
                    $material_type_complexity = "Medium";
                }
                if($material_type_complexity==3)
                {
                    $material_type_complexity = "Expert";
                }

                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['material_type_name'] = $post->material_type_name;
                $nestedData['material_type_complexity'] = $material_type_complexity;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_material_type').'/'.$post->id.'" title="Update MaterialType"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete MaterialType" onClick="confirmDeleteMaterialType('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function material_type_post(Request $request)
    {
        $messsages = array(
            'material_type_name.required'=>'Please enter material_type name',
            );
        $rules = array(
            'material_type_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $material_type_name=$request->material_type_name;
        $material_type_complexity = $request->material_type_complexity;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $material_type_count = MaterialType::where('material_type_name',$material_type_name)->where('organisation_id',$organisation_id)->count();
        if($material_type_count==0)
        {
                $insert_id = MaterialType::create([
                    'organisation_id' => $organisation_id,
                    'material_type_name' => $material_type_name,
                    'material_type_complexity' => $material_type_complexity,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('MaterialType has been added');
        else
            smilify('Error', 'MaterialType already exist in the selected organisation');

        return redirect()->back();
    }
    public function show_material_type($id)
    {
        $material_types = MaterialType::where('id',$id)->with('organisation')->first();
        return view('Admin/Settings/show_material_type', compact('material_types'));
    }
    public function show_material_type_post(Request $request)
    {
        $messsages = array(
            'material_type_name.required'=>'Please enter material_type name',
            );
        $rules = array(
            'material_type_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $material_type_name=$request->material_type_name;
        $material_type_complexity = $request->material_type_complexity;
        $remarks = $request->remarks;
        $material_type_id = $request->material_type_id;
        
        $id = Auth::user()->id;
        $upd_flg = 0;
        $material_types = MaterialType::where('id',$material_type_id)->first();
        if(isset($material_types))
        {
            $material_types->material_type_name=$material_type_name;
            $material_types->remarks=$remarks;
            $material_types->material_type_complexity=$material_type_complexity;
            $material_types->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('MaterialType has been updated');
        else
            smilify('Error', '');

        return redirect('material_type');
    }
    public function delete_material_type(Request $request)
    {
        $material_type_id = $request->material_type_id;
        $material_sub_type_count = MaterialSubType::where('material_type_id',$material_type_id)->count();
        if($material_sub_type_count==0)
        {
                $material_type_delete=MaterialType::where('id',$material_type_id)->delete();
                return 1;
            
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////////////////////////////

    /////material_subtype /////
    public function material_subtype()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/material_subtype', compact('organisations'));
    }
    public function get_materialtype($organisation_id)
    {
        $material_types=MaterialType::where('organisation_id',$organisation_id)->get();
        return $material_types->pluck('material_type_name', 'id');
    }
    public function get_material_subtype_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=>'organisation_name',
            2=>'material_type_name',
            3=> 'material_subtype_name',
            4=> 'remarks',
            5=> 'action',
        );
        $totalData = MaterialSubType::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {       
            $posts = MaterialSubType::with('organisation','materialtype')
                         ->offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  MaterialSubType::with('organisation','materialtype')
                            ->where('material_subtype_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = MaterialSubType::with('organisation','materialtype')
                            ->where('material_subtype_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            $material_type_name = "";
            foreach ($posts as $post)
            {   
                $organisation_name = $post->organisation->organisation_name;
                if(isset($post->material_type_id))
                    $material_type_name = $post->materialtype->material_type_name;
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['material_type_name'] = $material_type_name;
                $nestedData['material_subtype_name'] = $post->material_subtype_name;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_material_subtype').'/'.$post->id.'" title="Update Section"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Material Sub Type" onClick="confirmDeleteMaterialSubType('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function material_subtype_post(Request $request)
    {
        $messsages = array(
            'material_subtype_name.required'=>'Please enter material_subtype name',
            );
        $rules = array(
            'material_subtype_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $material_type_id = $request->material_type_id;
        $material_subtype_name=$request->material_subtype_name;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $material_subtype_count = MaterialSubType::where('material_subtype_name',$material_subtype_name)->where('material_type_id',$material_type_id)->where('organisation_id',$organisation_id)->count();
        if($material_subtype_count==0)
        {
                $insert_id = MaterialSubType::create([
                    'organisation_id' => $organisation_id,
                    'material_type_id' => $material_type_id,
                    'material_subtype_name' => $material_subtype_name,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('MaterialSubType has been added');
        else
            smilify('Error', 'MaterialSubType already exist in the selected Material Type in the organisation');

        return redirect()->back();
    }
    public function show_material_subtype($id)
    {
        $material_subtypes = MaterialSubType::where('id',$id)->with('organisation','materialtype')->first();
        return view('Admin/Settings/show_material_subtype', compact('material_subtypes'));
    }
    public function show_material_subtype_post(Request $request)
    {
        $messsages = array(
            'material_subtype_name.required'=>'Please enter material_subtype name',
            );
        $rules = array(
            'material_subtype_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $material_subtype_name=$request->material_subtype_name;
        $remarks = $request->remarks;
        $material_subtype_id = $request->material_sub_type_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $material_subtypes = MaterialSubType::where('id',$material_subtype_id)->first();
        if(isset($material_subtypes))
        {
            $material_subtypes->material_subtype_name=$material_subtype_name;
            $material_subtypes->remarks=$remarks;
            $material_subtypes->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Material Sub Type has been updated');
        else
            smilify('Error', '');

        return redirect('material_subtype');
    }
    public function delete_material_subtype(Request $request)
    {
        $material_subtype_id = $request->material_subtype_id;
        $dept_delete=MaterialSubType::where('id',$material_subtype_id)->delete();
        if($dept_delete)
        {                
            return 1;
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////

    /////topic /////
    public function topic()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/topic', compact('organisations'));
    }
    public function get_materialsubtype($material_type_id)
    {
        $material_subtypes=MaterialSubType::where('material_type_id',$material_type_id)->get();
        return $material_subtypes->pluck('material_subtype_name', 'id');
    }
    public function get_topic_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=>'organisation_name',
            2=>'material_type_name',
            3=>'material_subtype_name',
            4=> 'topic_name',
            5=> 'remarks',
            6=> 'action',
        );
        $totalData = Topic::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {       
            $posts = Topic::with('organisation','materialtype','materialsubtype')
                         ->offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  Topic::with('organisation','materialtype','materialsubtype')
                            ->where('topic_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = Topic::with('organisation','materialtype','materialsubtype')
                            ->where('topic_name', 'LIKE',"%{$search}%")
                            ->orWhere('remarks', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            $material_type_name = "";
            $material_subtype_name = "";
            $organisation_name = "";
            foreach ($posts as $post)
            {   
                if(isset($post->organisation_id))
                    $organisation_name = $post->organisation->organisation_name;
                if(isset($post->material_type_id))
                    $material_type_name = $post->materialtype->material_type_name;
                if(isset($post->material_subtype_id))
                    $material_subtype_name = $post->materialsubtype->material_subtype_name;
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['material_type_name'] = $material_type_name;
                $nestedData['material_subtype_name'] = $material_subtype_name;
                $nestedData['topic_name'] = $post->topic_name;
                $nestedData['remarks'] = $post->remarks;
                $nestedData['action'] = '<a href="'.url('show_topic').'/'.$post->id.'" title="Update Topics"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Topics" onClick="confirmDeleteTopics('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function topic_post(Request $request)
    {
        $messsages = array(
            'topic_name.required'=>'Please enter topic name',
            );
        $rules = array(
            'topic_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $material_type_id = $request->material_type_id;
        $material_subtype_id = $request->material_subtype_id;
        $topic_name=$request->topic_name;
        $remarks = $request->remarks;
        $id = Auth::user()->id;
        $topic_count = Topic::where('topic_name',$topic_name)->where('material_subtype_id',$material_subtype_id)->where('organisation_id',$organisation_id)->count();
        if($topic_count==0)
        {
                $insert_id = Topic::create([
                    'organisation_id' => $organisation_id,
                    'material_type_id' => $material_type_id,
                    'material_subtype_id' => $material_subtype_id,
                    'topic_name' => $topic_name,
                    'remarks' => $remarks,
                ]);
        }
        if($insert_id)
            notify()->success('Topic has been added');
        else
            smilify('Error', 'Topic already exist in the selected Material Sub Type in the organisation');

        return redirect()->back();
    }
    public function show_topic($id)
    {
        $topics = Topic::where('id',$id)->with('organisation','materialtype','materialsubtype')->first();
        return view('Admin/Settings/show_topic', compact('topics'));
    }
    public function show_topic_post(Request $request)
    {
        $messsages = array(
            'topic_name.required'=>'Please enter topic name',
            );
        $rules = array(
            'topic_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $topic_name=$request->topic_name;
        $remarks = $request->remarks;
        $topic_id = $request->topic_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $topics = Topic::where('id',$topic_id)->first();
        if(isset($topics))
        {
            $topics->topic_name=$topic_name;
            $topics->remarks=$remarks;
            $topics->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Topic has been updated');
        else
            smilify('Error', '');

        return redirect('topic');
    }
    public function delete_topic(Request $request)
    {
        $topic_id = $request->topic_id;
        $dept_delete=Topic::where('id',$topic_id)->delete();
        if($dept_delete)
        {                
            return 1;
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////
    public function get_topic($material_subtype_id)
    {
        $topics=Topic::where('material_subtype_id',$material_subtype_id)->get();
        return $topics->pluck('topic_name', 'id');
    }
    /////mime_type /////
    public function mime_type()
    {
        return view('Admin/Settings/mime_type');
    }
    public function get_mime_type_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=>'mime_type',
            2=>'description',
            3=> 'action',
        );
        $totalData = MimeType::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {       
            $posts = MimeType::offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  MimeType::where('mime_type', 'LIKE',"%{$search}%")
                            ->orWhere('description', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = MimeType::where('mime_type', 'LIKE',"%{$search}%")
                            ->orWhere('description', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {
            foreach ($posts as $post)
            {   
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['mime_type'] = $post->mime_type;
                $nestedData['description'] = $post->description;
                $nestedData['action'] = '<a href="'.url('show_mime_type').'/'.$post->id.'" title="Update Mime Type"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Mime Type" onClick="confirmDeleteMimeType('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function mime_type_post(Request $request)
    {
        $messsages = array(
            'mime_type.required'=>'Please enter mime type name',
            );
        $rules = array(
            'mime_type'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $mime_type=$request->mime_type;
        $description = $request->description;
        $id = Auth::user()->id;
        $mime_type_count = MimeType::where('mime_type',$mime_type)->count();
        if($mime_type_count==0)
        {
                $insert_id = MimeType::create([
                    'mime_type' => $mime_type,
                    'description' => $description,
                ]);
        }
        if($insert_id)
            notify()->success('Mime Type has been added');
        else
            smilify('Error', 'Mime Type already exist ');

        return redirect()->back();
    }
    public function show_mime_type($id)
    {
        $mime_types = MimeType::where('id',$id)->first();
        return view('Admin/Settings/show_mime_type', compact('mime_types'));
    }
    public function show_mime_type_post(Request $request)
    {
        $messsages = array(
            'mime_type.required'=>'Please enter mime type name',
            );
        $rules = array(
            'mime_type'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $mime_type=$request->mime_type;
        $description = $request->description;
        $mime_type_id = $request->mime_type_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $mime_types = MimeType::where('id',$mime_type_id)->first();
        if(isset($mime_types))
        {
            $mime_types->mime_type=$mime_type;
            $mime_types->description=$description;
            $mime_types->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Mime Type has been updated');
        else
            smilify('Error', '');

        return redirect('mime_type');
    }
    public function delete_mime_type(Request $request)
    {
        $mime_type_id = $request->id;
        $dept_delete=MimeType::where('id',$mime_type_id)->delete();
        if($dept_delete)
        {                
            return 1;
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////
    /////content_type /////
    public function content_type()
    {
        $organisations = Organisation::all();
        return view('Admin/Settings/content_type', compact('organisations'));
    }
    public function get_content_type_details(Request $request)
    {
        $columns = array(
            0=> 'id',
            1=> 'organisation_name',
            2=> 'content_type_name',
            3=> 'action',
        );
        $totalData = ContentType::count();
        $totalFiltered = $totalData; 
        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $order =  1;
        $dir = $request->input('order.0.dir');
        if(empty($request->input('search.value')))
        {            
            $posts = ContentType::offset($start)
                         ->limit($limit)
                         ->orderBy('id','desc')
                         ->get();
        }
        else 
        {
            $search = $request->input('search.value'); 
            $posts =  ContentType::where('content_type_name', 'LIKE',"%{$search}%")
                            ->offset($start)
                            ->limit($limit)
                            ->orderBy($order,$dir)
                            ->get();
            $totalFiltered = ContentType::where('content_type_name', 'LIKE',"%{$search}%")
                            ->count();
        }
        $data = array();
        if(!empty($posts))
        {

            foreach ($posts as $post)
            {   
                $org_id = $post->organisation_id;
                $org_arr = Organisation::where('id',$org_id)->first();
                if(isset($org_arr))
                {
                    $organisation_name = $org_arr->organisation_name;
                }
                $nestedData['DT_RowIndex'] = $post->id;
                $nestedData['organisation_name'] = $organisation_name;
                $nestedData['content_type_name'] = $post->content_type_name;
                $nestedData['action'] = '<a href="'.url('show_content_type').'/'.$post->id.'" title="Update Content Type"><span style="color:blue;"><i class="fa fa-edit"></i></span></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="#"  title="Delete Content Type" onClick="confirmDeleteContentType('.$post->id.');"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a>';
                $data[] = $nestedData;
            }
        }
        $json_data = array(
                    "draw"            => intval($request->input('draw')),  
                    "recordsTotal"    => intval($totalData),  
                    "recordsFiltered" => intval($totalFiltered), 
                    "data"            => $data   
                    );
        echo json_encode($json_data); 
    }
    public function content_type_post(Request $request)
    {
        $messsages = array(
            'content_type_name.required'=>'Please enter content_type name',
            );
        $rules = array(
            'content_type_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $organisation_id = $request->organisation_id;
        $content_type_name=$request->content_type_name;
        $id = Auth::user()->id;
        $content_type_count = ContentType::where('content_type_name',$content_type_name)->where('organisation_id',$organisation_id)->count();
        if($content_type_count==0)
        {
                $insert_id = ContentType::create([
                    'organisation_id' => $organisation_id,
                    'content_type_name' => $content_type_name,
                ]);
        }
        if($insert_id)
            notify()->success('Content Type has been added');
        else
            smilify('Error', 'Content Type already exist in the selected organisation');

        return redirect()->back();
    }
    public function show_content_type($id)
    {
        $content_types = ContentType::where('id',$id)->with('organisation')->first();
        return view('Admin/Settings/show_content_type', compact('content_types'));
    }
    public function show_content_type_post(Request $request)
    {
        $messsages = array(
            'content_type_name.required'=>'Please enter content type name',
            );
        $rules = array(
            'content_type_name'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $content_type_name=$request->content_type_name;
        $content_type_id = $request->content_type_id;
        $id = Auth::user()->id;
        $upd_flg = 0;
        $content_types = ContentType::where('id',$content_type_id)->first();
        if(isset($content_types))
        {
            $content_types->content_type_name=$content_type_name;
            $content_types->save();
            $upd_flg = 1;
        }
        if($upd_flg)
            notify()->success('Content Type has been updated');
        else
            smilify('Error', '');

        return redirect('content_type');
    }
    public function delete_content_type(Request $request)
    {
        $content_type_id = $request->id;
        $dept_delete=ContentType::where('id',$content_type_id)->delete();
        if($dept_delete)
        {                
            return 1;
        }
        else
        {
            return 0;
        }
    }
    /////////////////////////////////////////////////////////

    ///menu role permission mapping/////////////////
    public function menu_role_permission()
    {
        $roles = Roles::where('status',1)->get();
        $menus = MenuSettings::where('menu_order_number','!=',NULL)->get();
        return view('Admin/Settings/menu_role_permission', compact('roles','menus'));
    }
    public function menu_role_permission_post(Request $request)
    {
        $insert_role_permission_id="";
        $role_id = $request->role_id;
        $id = Auth::user()->id;
        $menus = $request->menus;
        foreach($menus as $menu)
        {
            $menu_role_permission_count = MenuRolePermission::where('role_id',$role_id)->where('menu_id',$menu)->where('status',1)->count();
            if($menu_role_permission_count==0)
            {
                $insert_role_permission_id = MenuRolePermission::create([
                    'role_id' => $role_id,
                    'menu_id' => $menu,
                    'status' => 1,
                ]);
            }
        }
        
        if($insert_role_permission_id)  
            notify()->success('Menu has been added to Role');
        else
            smilify('Error','');
        return redirect()->back();
    }
    public function get_menu_role_permission_data(Request $request)
    {
        $role_id = $request->role_id;
        $div_value ='<table class="table table-hover table-bordered table-striped datatable" width="100%">
                    <thead>
                    <tr>
                      <th>Slno</th>
                      <th>Menu Name</th>
                      <th>Actions</th>
                    </tr>';
        $n=0;
        $menu_role_permissions = MenuRolePermission::where('role_id',$role_id)->with('menu')->get();
        foreach($menu_role_permissions as $menu_role_permission)
        {
            $n++;
            $menu_name = $menu_role_permission->menu->menu_name;
            $div_value.='<tr>
                              <td>'.$n.'</td>
                              <td>'.$menu_name.'</td>
                              <td><a href="#" onclick="confirmDeleteMenuRolePermissions('.$menu_role_permission->id.')"><span style="color:red;"><i class="fa fa-btn fa-minus-circle"></i></span></a> 
                              </td>
                        </tr>';
        }
        return $div_value;
    }
    public function delete_menu_role_permission(Request $request)
    {
        $menu_role_permission_id = $request->menu_role_permission_id;
        $menu_roles = MenuRolePermission::where('id',$menu_role_permission_id)->first();
        if(isset($menu_roles))
        {
            $menu_roles->status = 0;
            $menu_roles->save();
        }
        $menu_role_permission_delete=MenuRolePermission::where('id',$menu_role_permission_id)->delete();
        return 1;         
    }
    /////////////////////////////////////////
    ///certificate template////////////////
    public function certificate_template()
    {
        return view('Admin/Settings/certificate_template');
    }
    
}
