<?php

namespace App\Http\Controllers;

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

use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use App\Mail\ResendMail;
use App\Helpers\MailHelper as MailHelper;
use App\Mail\VerifyMail;
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
    {
      $seat = "";
      $office="";
      $department="";
      $section="";
      $officename = "";
      $departmentname ="";
      $sectionname = "";
      $id = Auth::user()->id;
      $name = Auth::user()->name;
      $seatid=$request->session()->get('session_seat');
      $seatid_new=$seatid;
      $seatobj=\App\Seat::where('id',$seatid)->first();
      if(isset($seatobj))
      {
        $seat= $seatobj->seat_name;
        $office=$seatobj->office_id;
        $department=$seatobj->department_id;
        $section=$seatobj->section_id;
      }
      $offname=\App\Office::where('id',$office)->first();
      if(isset($offname))
      {
        $officename=$offname->office_name;
      }
      $deptname=\App\Department::where('id',$department)->first();
      if(isset($deptname))
      {
        $departmentname=$deptname->dept_name;
      }
      $sectname=\App\Section::where('id',$section)->first();
      if(isset($sectname))
      {
        $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();
    } 
    //////////////////////////////////////////////////////////////////////////////////
    ////////////user/////////////////////////////////////////////////////////////////////////////////
    public function user(Request $request)                //display relevant datas in blade
    {
      $office_id=$request->session()->get('session_office');
      return view('user', compact('office_id')); //blade name
    }
    public function userpost(Request $request)
    {
      //accepting data
      $office_id=$request->session()->get('session_office');
      $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;
      $confirm_password = $request->password_confirmation;
      $password = $request->password;
      $id = Auth::user()->id;
      $user_seat_arr = App\User_Seat::where('user_id',$id)->get();
      foreach($user_seat_arr as $user_seat_arr_val)
      {
          $seat_id = $user_seat_arr_val->seat_id;
          $seat_arr = App\Seat::where('id',$seat_id)->with('office')->first();
          if(isset($seat_arr))
          {
              $office_id = $seat_arr->office_id;
          }
      }
      $slugname=$request->session()->get('slugname');
      $frequency=$request->session()->get('frequency');
      $stripe_status=$request->session()->get('stripe_status');
      if($stripe_status=="active")
      {
        if($frequency=="year")
        {
            $payment_interval_val = "annual";
        }
        if($frequency=="month")
        {
            $payment_interval_val = "monthly";
        }
        if($plan_name)
        {
          $prd_det = App\PaymentLink::where('slugname','=', $plan_name)->where('frequency',$payment_interval_val)->first();  
          if(isset($prd_det))
          {
              $max_num_users = $prd_det->number_of_users;
          }
        }
        $user_count = App\User::where('office_id',$office_id)->count();

        $next_user_count = $user_count+1;
        if($next_tapal_count<=$max_num_tapals)
        {
          $newpassword ="";
          if($password && $confirm_password)
          {
              if(!(strcmp($password, $confirm_password)) == 0)
              {
                  return redirect()->back()->with('status',"Password and confirm should be same.");
              }
              else
              {
                  if($confirm_password)
                  {
                      $newpassword = bcrypt($confirm_password);
                  }
              }
          }
          $insert_id = \App\User::create([  //store from variables into db
              //db field name  
              'name' => $name1,  //variable 1
              'email' => $email1,
              'password' => $newpassword,
              'office_id' => $office_id,
          ]);
          $user_id = $insert_id->id;
          ////email verification///////////////////////////
          $verifyUser = \App\VerifyUser::create([
              'user_id' => $user_id,
              'token' => str_random(40)
          ]);
          /////////
          $userverify = \App\VerifyUser::where('user_id',$user_id)->first();
          if(isset($userverify))
          {
              $verify_token = $userverify->token; 
          }
          $formurl = "<a href=".url('verifyemail', $verify_token).">Verify Email</a>";
          $html="<div style='color: #343434; font-family: Open Sans; font-size: 20px; text-align: justify;'>
                   Hello ".$name1.",<br><br>Your registration for the DigiFile has been successfully processed.<br> Your registered email-id is ".$email1.".<br><br> Please click the below link to verify your email account. <br><br> ".$formurl."<br><br> Thanks,<br> Team DigiFile.";
          $data= ['message' => $html, 'mailto'=>$email1, 'name_data'=>'Verify Mail' ];
          //dd($data);
          //mailing to the registered email
          Mail::to($email1)->send(new VerifyMail($data));
          if($insert_id)
            notify()->success('User Created and verification mail send.!');
          else
            smilify('Error', 'Error Occurred Pls recheck!'); 
        }
        else
        {
            smilify('Error', 'Maximum User Exceeds for this Organization.'); 
        }
      }
      else
      {
        smilify('Error', 'Your Subscription is not active. Please contact Administrator'); 
      }
      return redirect()->back();
    }        
    ///////verify user///////////////////////////
    public function verifyemail($token)
    {
        $sts = 0;
        $status="";
        $verifyUser = \App\VerifyUser::where('token', $token)->first();
        if(isset($verifyUser))
        {
            $user = $verifyUser->user;
            $email = $verifyUser->user->email;
            $name = $verifyUser->user->name;
            if(!$user->verified) 
            {
                $verifyUser->user->verified = 1;
                $verifyUser->user->save();
                $status = "Your e-mail is verified. You can now Proceed to Login.";
            }
        }
        else
        {
            $sts = 1;
            $status = "Sorry your email cannot be identified.";
        }
        return view('user_msg' , compact('sts','status','email'));
    }
    public function userpostdata(Request $request)//displaying db info
    {      
      $office_id=$request->session()->get('session_office');
      $users =\App\User::where('office_id',$office_id)->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')->orderBy('id','desc')->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;
            } 
          }
        }
        //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++;
      }
      $userpostdatas = collect($data);
      return Datatables::of($userpostdatas)
                        ->addColumn('action', function ($userdata) {
                          return '<a href="' . url('showuserdata') . '/' . $userdata->id . '" class="btn btn-xs btn-primary"><i class="fa fa-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;
        $confirm_password = $request->password_confirmation;
        $password = $request->password;
        $userid = Auth::user()->id;
        $updateobj = \App\User::find($request->user_id);
        $updateobj->name = $name;
        $updateobj->email = $email;
        $updateobj->save();
        $newpassword ="";
        if($password && $confirm_password)
        {
            if(!(strcmp($password, $confirm_password)) == 0)
            {
                return redirect()->back()->with('status',"Password and confirm should be same.");
            }
            else
            {
                if($confirm_password)
                {
                    $newpwd = bcrypt($confirm_password);
                }
                $uploadpwd = User::where('id',$user_id)->update(['password' => $newpwd]);
            }
        }
        return redirect('user');
    }
    /////////////////office/////////////////////////////////////////////////////////////////////////
    public function office(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      $districts=App\District::all();
      $states=App\State::all();
      return view('office', compact('districts','states','office_id'));
    }
    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(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      $offices =\App\Office::where('id',$office_id)->with('district','state')->orderBy('id','desc')->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');
        $dname ="";
        if($dstrct)
        {
          $distname=\App\District::where('id',$dstrct)->first();
          if(isset($distname))
          {
            $dname=$distname->district_name;
          }
        }
        $sname= "";
        if($dstrct)
        {
          $statename=\App\State::where('id',$ste)->first();
          if(isset($statename))
          {
            $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="fa fa-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();
      $districts=App\District::all();
      $states=App\State::all();
      return view('showofficedata', compact('office','districts','states'));
    }
    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
      $districtt=$request->district;
      $statee=$request->state;
      $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->district = $districtt;
      $updateobj->state = $statee;
      $updateobj->save();
      return redirect('office');
    }
    ///////////////department///////////////////////////////////////////////////////////////////////
    public function department(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      $officenames=App\Office::where('id',$office_id)->get();
      return view('department', compact('officenames','office_id'));
    }
    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(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      $departments =\App\Department::where('office_id',$office_id)->with('office')->orderBy('id','desc')->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="fa fa-edit"></i> Show</a>';
                        })
                        ->editColumn('id', 'ID: {{$incid}}')
                        ->make(true);    
      //return Datatables::of(\App\Office::query())->make(true);
    }
    public function showdepartmentdata(Request $request,$id)//show button
    {
      $office_id=$request->session()->get('session_office');
      $office=\App\Office::where('id',$office_id)->get();
      $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 section(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        $officenames=App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        return view('section', compact('officenames','office_id','departments'));
    }
    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(Request $request)
    { 
        $office_id=$request->session()->get('session_office');
        $sections =\App\Section::where('office_id',$office_id)->with('office','department')->orderBy('id','desc')->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="fa fa-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(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        $officenames=App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        $seates=App\Seat::where('office_id',$office_id)->get();
        return view('seat', compact('officenames','seates','office_id','departments')); 
    }
    public function seatpost(Request $request)
    {
      $this->validate($request,[
          'officename' => 'required',//name of blade name
          'deptname' => 'required',
          'secname' => 'required',
          'seatcode' => 'required',
          'seatname' => '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(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      $seats =\App\Seat::where('office_id',$office_id)->with('office','department','section')->orderBy('id','desc')->get();
      $data  = [];
      $i=0;
      $deptname ="";
      $sctname = "";
      foreach ($seats as $seat)
      {
          $id=$seat->id;//db name
          $officename=$seat->office->office_name;
          if($seat->department_id)
          {
            $deptname=$seat->department->dept_name;
          }
          if($seat->section_id)
          {
            $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="fa fa-edit"></i> Show</a>';
                        })
                        ->editColumn('id', 'ID: {{$incid}}')
                        ->make(true);
      //return Datatables::of(\App\Office::query())->make(true);
    }
    public function showseatdata(Request $request,$id)//show button
    {
      $office_id=$request->session()->get('session_office');
      $seat=\App\Seat::where('id',$id)->first();
      $selectedOfficeid = $seat->office_id;
      $office=\App\Office::where('id',$office_id)->get();
      $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',
        ]);
      //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 role()
    { 
        $officenames=App\Office::all();
        return view('role', compact('officenames')); 
    }
    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::orderBy('id','desc')->get();
      $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="fa fa-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 permission()
    { 
        $officenames=App\Office::all();
        return view('permission', compact('officenames')); 
    }
    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::orderBy('id','desc')->get();
      $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="fa fa-edit"></i> Show</a>';
                        })
                        ->editColumn('id', 'ID: {{$incid}}')
                        ->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_permission()
    {
        $office=App\Office::all();
        $roles=App\Role::all();
        $permissions=App\Permission::all();
        return view('role_permission', compact('office','roles','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')->orderBy('id','desc')->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="fa fa-edit"></i> Show</a>';
                        })
                        ->editColumn('id', 'ID: {{$incid}}')
                        ->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_permission(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        $permissions=App\Permission::all();
        $officenames=App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        return view('seat_permission', compact('officenames','permissions','office_id','departments')); 
    }
    public function seat_permissionpost(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        $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,
          'office_id' => $office_id,
           ]);
        if($insert_id)
          notify()->success('Seat Permission Added!');
        else
           smilify('Error', 'Error Occurred Pls recheck!'); 
        return redirect()->back();
    }
    public function seat_permissionpostdata(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      // $role_permissions =\App\Role_Permission::all();
      $seat_permissions =\App\Seat_Permission::where('office_id',$office_id)->with('seat','permission')->orderBy('id','desc')->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="fa fa-edit"></i> Show</a>';
                      })
                      ->editColumn('id', 'ID: {{$incid}}')
                      ->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_role(Request $request)
    {   
        $office_id=$request->session()->get('session_office');
        $roles=App\Role::all();
        $seates=App\Seat::where('office_id',$office_id)->get();
        $officenames=App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        return view('seat_role', compact('roles','seates','officenames','departments','office_id'));  
    }
    public function seat_rolepost(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        //dd($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('office_id',$office_id)->count();
        if($count>0)
        {

            smilify('Error', 'Selected role is already assigned to another seat!');   
            return redirect()->back();
        }     
        $countseat=\App\Seat_Role::where('seat_id',$seat_id)->where('office_id',$office_id)->count();
        if($countseat>0)
        {

            smilify('Error', 'Selected seat is already assigned to another role!');   
            return redirect()->back();
        } 
        $id = Auth::user()->id;
        if($count==0 && $countseat==0)
        {
          $insert_id = \App\Seat_Role::create([//model name database field name
                'role_id' => $role_id,
                'seat_id' => $seat_id,
                'updated_by'=>$id,
                'office_id' => $office_id,
             ]);
          if($insert_id)
            notify()->success('Seat Role Added!');
          else
           smilify('Error', 'Error Occurred Pls recheck!'); 
          return redirect()->back();
        }
    }
    public function seat_rolepostdata(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      // $role_permissions =\App\Role_Permission::all();
      $seat_roles =\App\Seat_Role::where('office_id',$office_id)->with('role','seat')->orderBy('id','desc')->get();
      $data  = [];
      $deptname ="";
      $sctname = "";
      $i=0;
      foreach ($seat_roles as $seat_role)
      {
        $deptname ="";
        $sctname = "";
          $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();
          if(isset($seatdetails))
          {
            //dd($seatdetails);
            $office=$seatdetails->office->office_name;
            if($seatdetails->department_id)
            {
              $deptname=$seatdetails->department->dept_name;
            }
            if($seatdetails->section_id)
            {
              $sctname=$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 = $deptname;
          $obj->section_name = $sctname;
          $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="fa fa-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_seat(Request $request)
    {   
        $office_id=$request->session()->get('session_office');
        $users=App\User::where('office_id',$office_id)->get();
        $seates=App\Seat::where('office_id',$office_id)->get();
        $officenames=App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        return view('user_seat', compact('users','officenames','seates','departments','office_id'));
    }
    public function user_seatpost(Request $request)
    {
      $office_id=$request->session()->get('session_office');
      //dd($office_id);
      $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('office_id',$office_id)->count();
      if($count>0)
      {
        $userseat=\App\User_Seat::where('seat_id',$seat_id)->where('seat_id',$seat_id)->with('user')->first();
        if(isset($userseat))
        {
          $uname = $userseat->user->name;
          $email = $userseat->user->email;
          $name = $uname." (".$email.")";
        }
        smilify('Error', $name.' is already assigned to another seat!'); 
        return redirect()->back();
      }
      $countseat=\App\User_Seat::where('seat_id',$seat_id)->where('office_id',$office_id)->count();
      //dd($countseat);
      if($countseat>0)
      {
        $userseat=\App\User_Seat::where('seat_id',$seat_id)->where('seat_id',$seat_id)->with('user')->first();
        if(isset($userseat))
        {
          $uname = $userseat->user->name;
          $email = $userseat->user->email;
          $name = $uname." (".$email.")";
        }
        //$sendmessage="This seat is already assigned to ".$userseat->user->name;
        smilify('Error', 'This seat is already assigned to '.$name);
        return redirect()->back();
      }
      $id = Auth::user()->id;
      if($count==0 && $countseat==0)
      {
        $insert_id = \App\User_Seat::create([//model name database field name
          'user_id' => $user_id,
          'seat_id' => $seat_id,
          'updated_by'=>$id,
          'office_id' => $office_id,
          ]);
        if($insert_id)
          notify()->success('User Seat Added!');
        else
        smilify('Error', 'Error Occurred Pls recheck!'); 
      }
      return redirect()->back();
    }
    public function user_seatpostdata(Request $request)
    { 
        $office_id=$request->session()->get('session_office');
        // $role_permissions =\App\Role_Permission::all();
        $user_seates =\App\User_Seat::where('office_id',$office_id)->with('user','seat')->orderBy('id','desc')->get();
        $data  = [];
        $i=0;
        $deptname ="";
        $sctname = "";
        $seatnme ="";
        $usernme= "";
        $office = "";
        $updated_at ="";
        foreach ($user_seates as $user_seat)
        {
            $deptname ="";
            $sctname = "";
            $seatnme ="";
            $usernme= "";
            $office = "";
            $updated_at ="";
            $id=$user_seat->id;//db name
            $usernme=$user_seat->user->name;
            $email=$user_seat->user->email;
            $name = $usernme."-".$email;
            $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;
            if($seatdetails->department_id)
            {
              $deptname=$seatdetails->department->dept_name;
            }
            if($seatdetails->section_id)
            {
              $sctname=$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 = $name;
            $obj->seat_name = $seatnme;
            $obj->office_name = $office;
            $obj->dept_name = $deptname;
            $obj->section_name = $sctname;
            $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="fa fa-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);
    }
    public function showuser_seatdata(Request $request, $id)//show button
    {
      $office_id=$request->session()->get('session_office');
      $office=App\Office::where('id',$office_id)->get();
      $department =\App\Department::where('office_id',$office_id)->get();
      $seats=App\Seat::where('office_id',$office_id)->get();
      $section =\App\Section::where('office_id',$office_id)->get();
      $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();
      $users =\App\User::where('office_id',$office_id)->get();
      return view('showuser_seatdata', compact('user_seat','seatdetails','office','department','seats','users','office_id','section'));
    }
    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');
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////
}