<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use App;

use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Hash;

use Illuminate\Http\File;

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

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function profile(Request $request)             //display relevant datas in blade
        {
          /*$office=App\Office::all();
          $department=App\Department::all();
          $section=App\Section::all();
          $role=App\Role::all();
          $permission=App\Permission::all();
          $seat=App\Seat::all();
          $user=App\User::all();*/

            $id = Auth::user()->id;
            $name = Auth::user()->name;

            $seatid=$request->session()->get('session_seat');
            $seatid_new=$seatid;

            $seatobj=\App\Seat::where('id',$seatid)->first();
            $seat= $seatobj->seat_name;
            $office=$seatobj->office_id;
            $department=$seatobj->department_id;
            $section=$seatobj->section_id;

            $offname=\App\Office::where('id',$office)->first();
            $officename=$offname->office_name;

           
            $deptname=\App\Department::where('id',$department)->first();
            $departmentname=$deptname->dept_name;

            $sectname=\App\Section::where('id',$section)->first();
            $sectionname=$sectname->section_name;


            $seatrole=\App\Seat_Role::where('seat_id',$seatid)->with('role')->get();

            $seatperm=\App\Seat_Permission::where('seat_id',$seatid)->with('permission')->get();

             return view('profile',compact('office','department','section','seat','id','seatid',
              'seatrole','seatperm','name','offname','officename','departmentname','deptname','sectionname'));
        }

      public function password_settings()             //display relevant datas in blade
        {
             return view('password_settings');//blade name
        }

    public function password_settings_post(Request $request)
        {
          if (!(Hash::check($request->get('current-password'), Auth::user()->password))) {
            // The passwords matches
            smilify('Error', 'Your current password does not matches with the password you provided. Please try again.'); 
            return redirect()->back();
        }
 
        if(strcmp($request->get('current-password'), $request->get('new-password')) == 0){
            //Current password and new password are same
          smilify('Error', 'New Password cannot be same as your current password. Please choose a different password.'); 
            return redirect()->back();
        }
 
        $validatedData = $request->validate([
            'current-password' => 'required',
            'new-password' => 'required|string|min:6|confirmed',
        ]);
 
        //Change Password
        $user = Auth::user();
        $user->password = bcrypt($request->get('new-password'));
        $user->save();
        notify()->success('Password changed successfully !');
        return redirect()->back();

        } 


    public function office()
    {
        $districts=App\District::all();
        $states=App\State::all();
        return view('office', compact('districts','states'));
        
    }


   

    public function section()
    {
        $officenames=App\Office::all();
        
        return view('section', compact('officenames'));
        
    }

   
    
    public function role()
    {
        
        $officenames=App\Office::all();
        return view('role', compact('officenames'));
        
    }

    public function permission()
    {
        
        $officenames=App\Office::all();
        return view('permission', compact('officenames'));
        
    }
  
    public function role_permission()
    {
        $office=App\Office::all();
        $roles=App\Role::all();
        $permissions=App\Permission::all();
        return view('role_permission', compact('office','roles','permissions'));
        
    }

    public function seat_permission()
    {
        $permissions=App\Permission::all();
        $officenames=App\Office::all();
        return view('seat_permission', compact('officenames','permissions'));
        
    }

    public function seat_role()
    {   
        $roles=App\Role::all();
        $seates=App\Seat::all();
        $officenames=App\Office::all();
        return view('seat_role', compact('roles','seates','officenames'));
        
    }

    public function user_seat()
    {   
        $users=App\User::all();
        $seates=App\Seat::all();
        $officenames=App\Office::all();
        return view('user_seat', compact('users','officenames'));
        
    }

    //user

    public function user()                //display relevant datas in blade
         {

             return view('user'); //blade name

        }

     public function userpost(Request $request)
    {

          //accepting data
          $this->validate($request,[
                         
            'name' => 'required|string|max:255', //name of field name
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            
                                   ]);

      //store it into variables
      //variable 1

        $name1=$request->name;
        $email1=$request->email;
        $pass1=$request->password;
       
        $id = Auth::user()->id;

        $insert_id = \App\User::create([  //store from variables into db

          //db field name
             
          'name' => $name1,  //variable 1
          'email' => $email1,
          'password' => Hash::make($pass1),

         ]);


      if($insert_id)
        notify()->success('User Created!');
      else
        smilify('Error', 'Error Occurred Pls recheck!'); 
      
      return redirect()->back();

       } 
       

    public function userpostdata()//displaying db info
    {       

        $users =\App\User::orderBy('id','desc')->get();  //display datas in datatable including usertype

            $data  = [];
            $i=0;

            foreach ($users as $user)
            {
               //variable 2

                $id=$user->id;
                $name2=$user->name;
                $email2=$user->email;
                $pass2=$user->password;
               
                $seates =\App\User_Seat::where('user_id',$id)->with('seat')->get();
                $seat_new='';
                $role_new='';
                foreach ($seates as $seat)
                 {
                  $seatid=$seat->seat->id;
                  $seatname=$seat->seat->seat_name;
                  if($seat_new == "")
                     {
                         $seat_new = $seatname;
                     }
                  else
                  {
                     $seat_new=$seat_new.",".$seatname;
                   
                  }
                 
                
                
                $roles =\App\Seat_Role::where('seat_id',$seatid)->with('role')->get();
               
                foreach ($roles as $role)
                 {
                  $rolename=$role->role->role_name;
                  if($role_new == "")
                     {
                         $role_new = $rolename;
                     }
                  else
                  {
                     $role_new=$role_new.",".$rolename;
                   
                  }
                 
                }
                //dd($seat_new);

               }
              //db field name//variable 2

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;   
                $obj->name = $name2;
                $obj->email = $email2;
                $obj->password = $pass2;
                $obj->seat_name = $seat_new;
                $obj->role_name = $role_new;

                $data[$i] = $obj;
                $i++;

            }

            $userpostdata = collect($data);
          
            return Datatables::of($userpostdata)

            ->addColumn('action', function ($userdata) {
                return '<a href="' . url('showuserdata') . '/' . $userdata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })

            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);


    }

    public function showuserdata($id)//show button
    {

      $user =\App\User::where('id',$id)->first();

      return view('showuserdata', compact('user'));

    }

    public function updateuserdata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'name' => 'required',//name of blade name
            'email' => 'required',

       ]);


       //variable name
        $name=$request->name;
        $email=$request->email;
        //$password=$request->password;
        
        $userid = Auth::user()->id;

         $updateobj = \App\User::find($request->user_id);
                // db name        //variable name
        $updateobj->name = $name;
        $updateobj->email = $email;
        //$updateobj->password = $password;
        $updateobj->save();

      
      
      return redirect('user');
    }


//office
     public function officepost(Request $request)

    {

 $this->validate($request,[
            'officename' => 'required',//name of blade name
            'addr1' => 'required',
            'addr2' => 'required',
            'city' => 'required',
            'district' => 'required',
            'state' => 'required',
            'pincode' => 'required'
       ]);

        $office=$request->officename;
        $addres1=$request->addr1;
        $addres2=$request->addr2;
        $cityy=$request->city;
        $districtt=$request->district;
        $statee=$request->state;
        $pincodee=$request->pincode;
        $id = Auth::user()->id;

        $insert_id = \App\Office::create([//model name database field name
          'office_name' => $office,
          'address1' => $addres1,
          'address2' => $addres2,
          'city' => $cityy,
          'district' => $districtt,
          'state' => $statee,
          'pincode' => $pincodee,
          'updated_by'=>$id
           ]);


      if($insert_id)
       notify()->success('Office Added!');
      else
      smilify('Error', 'Error Occurred Pls recheck!'); 
      
      return redirect()->back();
    }

public function officepostdata()
{
     
     $offices =\App\Office::with('district','state')->get();
    // dd($offices);
            $data  = [];
            $i=0;

            foreach ($offices as $office)
            {
                $id=$office->id;//db name
                $officename=$office->office_name;
                $add1=$office->address1;
                $add2=$office->address2;
                $cty=$office->city;
                $dstrct=$office->district; 
                $ste=$office->state;
                $pcde=$office->pincode;
                $updated_at=$office->updated_at->format('d-M-Y');

                $distname=\App\District::where('id',$dstrct)->first();
              $dname=$distname->district_name;
               $statename=\App\State::where('id',$ste)->first();
              $sname=$statename->state_name;

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->office_name = $officename;
                $obj->address1 = $add1;
                $obj->address2 = $add2;
                $obj->city = $cty;
                $obj->district = $dname;
                $obj->state = $sname;
                $obj->pincode = $pcde;
               

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $officepostdata = collect($data);
          
            return Datatables::of($officepostdata)
            ->addColumn('action', function ($officedata) {
                return '<a href="' . url('showofficedata') . '/' . $officedata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}


public function showofficedata($id)//show button
    {

      $office =\App\Office::where('id',$id)->first();

      return view('showofficedata', compact('office'));

}

public function updateofficedata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'officename' => 'required',
            'addr1' => 'required',
            'addr2' => 'required',
            'city' => 'required',
            'pincode' => 'required'
       ]);


       //variable name
        $office=$request->officename;
        $addr1=$request->addr1;
        $addr2=$request->addr2;
        $city=$request->city;
        $pincode=$request->pincode;
        $userid = Auth::user()->id;

         $updateobj = \App\Office::find($request->office_id);
                // db name        //variable name
        $updateobj->office_name = $office;
        $updateobj->address1 = $addr1;
        $updateobj->address2 = $addr2;
        $updateobj->city = $city;
        $updateobj->pincode = $pincode;
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('office');
    }


//department
     public function department()
    {
        $officenames=App\Office::all();
        return view('department', compact('officenames'));
        
    }

public function departmentpost(Request $request)

    {

 $this->validate($request,[
            'officename' => 'required',//name of blade name
            'deptcode' => 'required',
            'deptname' => 'required',
            'remark' => 'required'
       ]);

        $officenme=$request->officename;
        $dptcode=$request->deptcode;
        $dptname=$request->deptname;
        $rmrk=$request->remark;
        $id = Auth::user()->id;

        $insert_id = \App\Department::create([//model name database field name
          'office_id' => $officenme,
          'dept_code' => $dptcode,
          'dept_name' => $dptname,
          'remarks' => $rmrk,
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Department Added!');
      else
         smilify('Error', 'Error Occurred Pls recheck!');
      
      return redirect()->back();
    }

public function departmentpostdata()
{
     
     $departments =\App\Department::with('office')->get();

            $data  = [];
            $i=0;

            foreach ($departments as $department)
            {
                $id=$department->id;//db name
                $officename=$department->office->office_name;
                $dptcde=$department->dept_code;
                $dptnme=$department->dept_name;
                $rmks=$department->remarks;
                $updated_at=$department->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->office_name = $officename;
                $obj->dept_code = $dptcde;
                $obj->dept_name = $dptnme;
                $obj->remarks = $rmks;
                
               

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $departmentpostdata = collect($data);
          
            return Datatables::of($departmentpostdata)
            ->addColumn('action', function ($departmentdata) {
                return '<a href="' . url('showdepartmentdata') . '/' . $departmentdata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}



public function showdepartmentdata($id)//show button
    {


      $office=\App\Office::all();

      $department =\App\Department::where('id',$id)->first();

      return view('showdepartmentdata', compact('department','office'));

}

public function updatedepartmentdata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'officename' => 'required',
            'deptcode' => 'required',
            'deptname' => 'required',
            'remark' => 'required'
            
       ]);


       //variable name
        $office=$request->officename;
        $deptcode=$request->deptcode;
        $deptname=$request->deptname;
        $remark=$request->remark;
        
        $userid = Auth::user()->id;

         $updateobj = \App\Department::find($request->department_id);
                // db name        //variable name
        $updateobj->office_id = $office;
        $updateobj->dept_code = $deptcode;
        $updateobj->dept_name = $deptname;
        $updateobj->remarks = $remark;
       
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('department');
    }

//section

    public function sectionpost(Request $request)

    {

 $this->validate($request,[
            'officename' => 'required',//name of blade name
            'deptname' => 'required',
            'seccode' => 'required',
            'secname' => 'required',
            'remark' => 'required'
            
       ]);

        $officenme=$request->officename;
        $dptname=$request->deptname;
        $sectcode=$request->seccode;
        $sectname=$request->secname;
        $rmrk=$request->remark;
        $id = Auth::user()->id;

        $insert_id = \App\Section::create([//model name database field name
          'office_id' => $officenme,
          'department_id' => $dptname,
          'section_code' => $sectcode,
          'section_name' => $sectname,
          'remarks' => $rmrk,
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Section Added!');
      else
        smilify('Error', 'Error Occurred Pls recheck!');
      
      return redirect()->back();
    }


public function sectionpostdata()
{
     
     $sections =\App\Section::with('office','department')->get();

            $data  = [];
            $i=0;

            foreach ($sections as $section)
            {
                $id=$section->id;//db name
                $officename=$section->office->office_name;
                $deptname=$section->department->dept_name;
                $sctcode=$section->section_code;
                $sctname=$section->section_name;
                $remks=$section->remarks;
                $updated_at=$section->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->office_name = $officename;
                $obj->dept_name = $deptname;
                $obj->section_code = $sctcode;
                $obj->section_name = $sctname;
                $obj->remarks = $remks;
                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $sectionpostdata = collect($data);
          
            return Datatables::of($sectionpostdata)
            ->addColumn('action', function ($sectiondata) {
                return '<a href="' . url('showsectiondata') . '/' . $sectiondata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}


public function showsectiondata($id)//show button
    {


      $office=\App\Office::all();
      $section=\App\Section::where('id',$id)->first();

      $office_id=$section->office_id;


      $department =\App\Department::where('office_id',$office_id)->get();

      

      return view('showsectiondata', compact('section','department','office'));

}

public function updatesectiondata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'officename' => 'required',//name of blade name
            'deptname' => 'required',
            'seccode' => 'required',
            'secname' => 'required',
            'remark' => 'required'
            
       ]);


       //variable name
        $office=$request->officename;
        $deptname=$request->deptname;
        $seccode=$request->seccode;
        $secname=$request->secname;
        $remark=$request->remark;
        
        $userid = Auth::user()->id;

         $updateobj = \App\Section::find($request->department_id);
                // db name        //variable name
        $updateobj->office_id = $office;
        $updateobj->department_id = $deptname;
        $updateobj->section_code = $seccode;
        $updateobj->section_name = $secname;
        $updateobj->remarks = $remark;
       
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('section');
    }

//seat

     public function seat()
    {
        $officenames=App\Office::all();
        $seates=App\Seat::all();
        
        return view('seat', compact('officenames','seates'));
        
    }

public function seatpost(Request $request)

    {

 $this->validate($request,[
            'officename' => 'required',//name of blade name
            'deptname' => 'required',
            'secname' => 'required',
            'seatcode' => 'required',
            'seatname' => 'required',
            'reportingseat' => 'required',
            'remark' => 'required'
            
       ]);

        $officenme=$request->officename;
        $dptname=$request->deptname;
        $sectname=$request->secname;
        $seatcode=$request->seatcode;
        $seatname=$request->seatname;
        $reportingseat=$request->reportingseat;
        $rmrk=$request->remark;
        $id = Auth::user()->id;

        
   

        $insert_id = \App\Seat::create([//model name database field name
          'office_id' => $officenme,
          'department_id' => $dptname,
          'section_id' => $sectname,
          'seat_code' => $seatcode,
          'seat_name' => $seatname,
          'reporting_seat' => $reportingseat,
          'remarks' => $rmrk,
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Seat Added!');
      else
        smilify('Error', 'Error Occurred Pls recheck!'); 
      
      return redirect()->back();
    }


public function seatpostdata()
{
     
     $seats =\App\Seat::with('office','department','section')->orderBy('id','desc')->get();

            $data  = [];
            $i=0;

            foreach ($seats as $seat)
            {
                $id=$seat->id;//db name
                $officename=$seat->office->office_name;
                $deptname=$seat->department->dept_name;
                $sctname=$seat->section->section_name;
                $setcode=$seat->seat_code;
                $setname=$seat->seat_name;
                $rprtngseat=$seat->reporting_seat;
                $reportseatname='';
                $reporting_seat_name_arr =\App\Seat::where('id',$rprtngseat)->get();
                foreach ($reporting_seat_name_arr as $rep_val) 
                {
                   $reportseatname=$rep_val->seat_name;
                }
                
                $remks=$seat->remarks;
                $updated_at=$seat->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->office_name = $officename;
                $obj->dept_name = $deptname;
                $obj->section_name = $sctname;
                $obj->seat_code = $setcode;
                $obj->seat_name = $setname;
                $obj->reporting_seat= $reportseatname;
                $obj->remarks = $remks;
                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $seatpostdata = collect($data);
          
            return Datatables::of($seatpostdata)
            ->addColumn('action', function ($seatdata) {
                return '<a href="' . url('showseatdata') . '/' . $seatdata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}

public function showseatdata($id)//show button
    {
      $seat=\App\Seat::where('id',$id)->first();
      $selectedOfficeid = $seat->office_id;
      $office=\App\Office::all();
      $department =\App\Department::where('office_id',$selectedOfficeid)->get();
      $section =\App\Section::where('office_id',$selectedOfficeid)->get();
      $reportseat =\App\Seat::where('office_id',$selectedOfficeid)->get();

      return view('showseatdata', compact('seat','section','department','office','reportseat','selectedOfficeid'));

}


public function updateseatdata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'officename' => 'required',//name of blade name
            'deptname' => 'required',
            'secname' => 'required',
            'seatcode' => 'required',
            'seatname' => 'required',
            'reportingseat' => 'required',
            'remark' => 'required'
            
       ]);


       //variable name
        $office=$request->officename;
        $deptname=$request->deptname;
        $secname=$request->secname;
        $satcode=$request->seatcode;
        $satname=$request->seatname;
        $reprtseat=$request->reportingseat;
        $remark=$request->remark;
        
        $userid = Auth::user()->id;

         $updateobj = \App\Seat::find($request->seat_id);
                // db name        //variable name
        $updateobj->office_id = $office;
        $updateobj->department_id = $deptname;
        $updateobj->section_id = $secname;
        $updateobj->seat_code = $satcode;
        $updateobj->seat_name = $satname;
        $updateobj->reporting_seat = $reprtseat;
        $updateobj->remarks = $remark;
       
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('seat');
    }

//role
    public function rolepost(Request $request)

    {

 $this->validate($request,[
            'rolename' => 'required',//name of blade name
            
            
       ]);

        $rolename=$request->rolename;
        
        $id = Auth::user()->id;

        $insert_id = \App\Role::create([//model name database field name
          'role_name' => $rolename,
          
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Role Added!');
      else
       smilify('Error', 'Error Occurred Pls recheck!'); 
      
      return redirect()->back();
    }

public function rolepostdata()
{
     
     
     $roles =\App\Role::all();

            $data  = [];
            $i=0;

            foreach ($roles as $role)
            {
                $id=$role->id;//db name
                $rlename=$role->role_name;
                
                $updated_at=$role->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->role_name = $rlename;
                
                
               

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $rolepostdata = collect($data);
          
            return Datatables::of($rolepostdata)
            ->addColumn('action', function ($roledata) {
                return '<a href="' . url('showroledata') . '/' . $roledata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}

public function showroledata($id)//show button
    {


      $office=\App\Office::all();

      $department =\App\Department::all();

      $section =\App\Section::all();

       $role=\App\Role::where('id',$id)->first();

      return view('showroledata', compact('role','section','department','office'));

}



public function updateroledata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'rolename' => 'required',
       ]);


       //variable name
        $rolname=$request->rolename;
        
        
        $userid = Auth::user()->id;

         $updateobj = \App\Role::find($request->role_id);
                // db name        //variable name
        $updateobj->role_name = $rolname;
        
       
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('role');
    }

//permission

    public function permissionpost(Request $request)

    {

 $this->validate($request,[
            'permission' => 'required',//name of blade name
            
            'description' => 'required'
            
       ]);

        $permiss=$request->permission;
        
        $desc=$request->description;
        
        $id = Auth::user()->id;

        $insert_id = \App\Permission::create([//model name database field name
          'permission' => $permiss,
        
          'description' => $desc,
          
          'updated_by'=>$id
           ]);


      if($insert_id)
       notify()->success('Permission Added!');
      else
       smilify('Error', 'Error Occurred Pls recheck!'); 
      
      return redirect()->back();
    }

public function permissionpostdata()
{
     
     
     $permissions =\App\Permission::all();

            $data  = [];
            $i=0;

            foreach ($permissions as $permission)
            {
                $id=$permission->id;//db name
                $perm=$permission->permission;
             
                $desc=$permission->description;
                
                $updated_at=$permission->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->permission = $perm;
              
                $obj->description = $desc;
                
                
               

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $permissionpostdata = collect($data);
          
            return Datatables::of($permissionpostdata)
            ->addColumn('action', function ($permissiondata) {
                return '<a href="' . url('showpermissiondata') . '/' . $permissiondata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}



public function showpermissiondata($id)//show button
    {


      //$office=\App\Office::all();

      $department =\App\Department::all();

      $section =\App\Section::all();

      $role =\App\Role::all();

       $permission=\App\Permission::where('id',$id)->first();

      return view('showpermissiondata', compact('permission','role','section','department'));

}


public function updatepermissiondata(Request $request)//update button
    {

        //validation of fields
        $this->validate($request,[
        //form field(blade name)
            'permission' => 'required',//name of blade name
           
            'description' => 'required'
       ]);


       //variable name
        $permi=$request->permission;
      
        $descrip=$request->description;
        
        
        $userid = Auth::user()->id;

         $updateobj = \App\Permission::find($request->permission_id);
                // db name        //variable name
        $updateobj->permission = $permi;
      
        $updateobj->description = $descrip;
       
        $updateobj->updated_by = $userid;

        $updateobj->save();

      
      
      return redirect('permission');
    }

//role_permissions
    public function role_permissionpost(Request $request)

    {

 $this->validate($request,[
             
            'rolename' => 'required',
            'permission' => 'required'//name of blade name
            
            
       ]);

        $role_id=$request->rolename;
        $permission_id=$request->permission;


    $count=\App\Role_Permission::where('role_id',$role_id)->where('permission_id',$permission_id)->count();

    if($count==1)
    {
        smilify('Error', 'Already assigned!'); 
        return redirect()->back();

    }
   
    
        
        
        $id = Auth::user()->id;

        $insert_id = \App\Role_Permission::create([//model name database field name

          'role_id' => $role_id,
          'permission_id' => $permission_id,
          
          
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Role Permission Added!');
      else
        smilify('Error', 'Error Occurred Pls recheck!'); 

    return redirect()->back();


    }

public function role_permissionpostdata()
{
     
     
    // $role_permissions =\App\Role_Permission::all();
     $role_permissions =\App\Role_Permission::with('role','permission')->get();

            $data  = [];
            $i=0;

            foreach ($role_permissions as $role_permission)
            {
                $id=$role_permission->id;//db name
                $rlenme=$role_permission->role->role_name;
                $permissio=$role_permission->permission->permission;
                
                
                $updated_at=$role_permission->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->role_name = $rlenme;
                $obj->permission = $permissio;

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $role_permissionpostdata = collect($data);
          
            return Datatables::of($role_permissionpostdata)
            ->addColumn('action', function ($role_permissiondata) {
                return '<a href="' . url('showrole_permissiondata') . '/' . $role_permissiondata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}


public function showrole_permissiondata($id)//show button
{
       $role_permission=\App\Role_Permission::where('id',$id)->with('role','permission')->first();

      return view('showrole_permissiondata', compact('role_permission'));

}

public function cancelrole_permissiondata(Request $request)//update button
    {

        $id=$request->role_permission_id;

      $delete=\App\Role_Permission::where('id',$id)->delete();

      return redirect('role_permission');
    }

//seat_permissions
    public function seat_permissionpost(Request $request)

    {

 $this->validate($request,[
             
            'seatname' => 'required',
            'permission' => 'required'//name of blade name
            
            
            
       ]);

        $seat_id=$request->seatname;
        $permission_id=$request->permission;
       


    $count=\App\Seat_Permission::where('seat_id',$seat_id)->where('permission_id',$permission_id)->count();

    if($count==1)
    {
        smilify('Error', 'Already assigned!'); 
        return redirect()->back();

    }
   
    
        
        
        $id = Auth::user()->id;

        $insert_id = \App\Seat_Permission::create([//model name database field name

          'seat_id' => $seat_id,
          'permission_id' => $permission_id,
         
          
          
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Seat Permission Added!');
      else
         smilify('Error', 'Error Occurred Pls recheck!'); 
 
    return redirect()->back();


    }

public function seat_permissionpostdata()
{
     
     
    // $role_permissions =\App\Role_Permission::all();
     $seat_permissions =\App\Seat_Permission::with('seat','permission')->get();

            $data  = [];
            $i=0;

            foreach ($seat_permissions as $seat_permission)
            {
                $id=$seat_permission->id;//db name
                $seatnme=$seat_permission->seat->seat_name;
                $permisio=$seat_permission->permission->permission;
                $seatid=$seat_permission->seat->id;
                $seatdetails=\App\Seat::where('id',$seatid)->with('office','department','section')->first();
                //dd($seatdetails);
                $office=$seatdetails->office->office_name;
                $department=$seatdetails->department->dept_name;
                $section=$seatdetails->section->section_name;
             
                $updated_at=$seat_permission->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->seat_name = $seatnme;
                $obj->permission = $permisio;
                $obj->office_name = $office;
                $obj->dept_name = $department;
                $obj->section_name = $section;

                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $seat_permissionpostdata = collect($data);
          
            return Datatables::of($seat_permissionpostdata)
            ->addColumn('action', function ($seat_permissiondata) {
                return '<a href="' . url('showseat_permissiondata') . '/' . $seat_permissiondata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}


public function showseat_permissiondata($id)//show button
{
       $seat_permission=\App\Seat_Permission::where('id',$id)->with('seat','permission')->first();

      return view('showseat_permissiondata', compact('seat_permission'));

}

public function cancelseat_permissiondata(Request $request)//update button
    {

        $id=$request->seat_permission_id;

      $delete=\App\Seat_Permission::where('id',$id)->delete();

      return redirect('seat_permission');
    }

//seat_role


public function seat_rolepost(Request $request)

    {

 $this->validate($request,[
             
            'rolename' => 'required',
            'seatname' => 'required'
            
            
       ]);
        
        $role_id=$request->rolename;
        $seat_id=$request->seatname;
    

    $count=\App\Seat_Role::where('role_id',$role_id)->where('seat_id',$seat_id)->count();

    if($count==1)
    {
        smilify('Error', 'Already assigned!');   
        return redirect()->back();

    }
   
    
        
        
        $id = Auth::user()->id;

        $insert_id = \App\Seat_Role::create([//model name database field name
           
          'role_id' => $role_id,
          'seat_id' => $seat_id,
          
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('Seat Role Added!');
      else
       smilify('Error', 'Error Occurred Pls recheck!'); 

    return redirect()->back();
    }

public function seat_rolepostdata()
{
     
     
    // $role_permissions =\App\Role_Permission::all();
     $seat_roles =\App\Seat_Role::with('role','seat')->get();

            $data  = [];
            $i=0;

            foreach ($seat_roles as $seat_role)
            {
                $id=$seat_role->id;//db name
                $rolenme=$seat_role->role->role_name;
                $seatnme=$seat_role->seat->seat_name;
                $seatid=$seat_role->seat->id;
                $seatdetails=\App\Seat::where('id',$seatid)->with('office','department','section')->first();
                //dd($seatdetails);
                $office=$seatdetails->office->office_name;
                $department=$seatdetails->department->dept_name;
                $section=$seatdetails->section->section_name;
                
                
                $updated_at=$seat_role->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->role_name = $rolenme;
                $obj->seat_name = $seatnme;
                $obj->office_name = $office;
                $obj->dept_name = $department;
                $obj->section_name = $section;
                $obj->updated_at = $updated_at;

                $data[$i] = $obj;
                $i++;

            }

            $seat_rolepostdata = collect($data);
          
            return Datatables::of($seat_rolepostdata)
            ->addColumn('action', function ($seat_roledata) {
                return '<a href="' . url('showseat_roledata') . '/' . $seat_roledata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    
    //return Datatables::of(\App\Office::query())->make(true);
}

public function showseat_roledata($id)//show button
    {


      $seat_role=\App\Seat_Role::where('id',$id)->with('seat','role')->first();

      return view('showseat_roledata', compact('seat_role'));

}

public function cancelseat_roledata(Request $request)//update button
    {

        $id=$request->seat_role_id;

      $delete=\App\Seat_Role::where('id',$id)->delete();

      return redirect('seat_role');
    }


//user_seat

public function user_seatpost(Request $request)

    {

 $this->validate($request,[
             
            'name' => 'required',
            'seatname' => 'required'
            
            
       ]);
        
        $user_id=$request->name;
        $seat_id=$request->seatname;
    

    $count=\App\User_Seat::where('user_id',$user_id)->where('seat_id',$seat_id)->count();

    if($count==1)
    {
        smilify('Error', 'Already assigned!'); 
        return redirect()->back();

    }


    $countseat=\App\User_Seat::where('seat_id',$seat_id)->count();

          if($countseat>0)
          {
            $userseat=\App\User_Seat::where('seat_id',$seat_id)->with('user')->first();
              //$sendmessage="This seat is already assigned to ".$userseat->user->name;
              smilify('Error', 'This seat is already assigned to '.$userseat->user->name);
              return redirect()->back();

          }
   
    
        $id = Auth::user()->id;

        $insert_id = \App\User_Seat::create([//model name database field name
           
          'user_id' => $user_id,
          'seat_id' => $seat_id,
          
          'updated_by'=>$id
           ]);


      if($insert_id)
        notify()->success('User Seat Added!');
      else
      smilify('Error', 'Error Occurred Pls recheck!'); 
      
    return redirect()->back();


    }

public function user_seatpostdata()
{
     
     
    // $role_permissions =\App\Role_Permission::all();
     $user_seates =\App\User_Seat::with('user','seat')->orderBy('id','desc')->get();

            $data  = [];
            $i=0;

            foreach ($user_seates as $user_seat)
            {
                $id=$user_seat->id;//db name
                $usernme=$user_seat->user->name;
                $seatnme=$user_seat->seat->seat_name;
                $seatid=$user_seat->seat_id;
                $seatdetails=\App\Seat::where('id',$seatid)->with('office','department','section')->first();
                //dd($seatdetails);
                $office=$seatdetails->office->office_name;
                $department=$seatdetails->department->dept_name;
                $section=$seatdetails->section->section_name;                
                $updated_at=$user_seat->updated_at->format('d-M-Y');
               

                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->name = $usernme;
                $obj->seat_name = $seatnme;
                $obj->office_name = $office;
                $obj->dept_name = $department;
                $obj->section_name = $section;
                $obj->updated_at = $updated_at;
                $data[$i] = $obj;
                $i++;

            }

            $user_seatpostdata = collect($data);
          
            return Datatables::of($user_seatpostdata)
            ->addColumn('action', function ($user_seatdata) {
                return '<a href="' . url('showuser_seatdata') . '/' . $user_seatdata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);

    //return Datatables::of(\App\Office::query())->make(true);
}


public function showuser_seatdata($id)//show button
{
      
      $user_seat=\App\User_Seat::where('id',$id)->with('user','seat')->first();
      $seatid=$user_seat->seat_id;
      $seatdetails=\App\Seat::where('id',$seatid)->with('office','department','section')->first();

      return view('showuser_seatdata', compact('user_seat','seatdetails'));

}

public function canceluser_seatdata(Request $request)//update button
    {

        $id=$request->user_seat_id;

      $delete=\App\User_Seat::where('id',$id)->delete();

      return redirect('user_seat');
    }



}