<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Handlers\InterventoHandler as Ah;
use Carbon\Carbon;
use App\Intervento;

use Sentinel;
use Redirect;

use Datatables;

use Illuminate\Support\Facades\DB;

class InterventoController extends Controller
{
   /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
//        $data['listaIntervento'] = \App\Intervento::all();
//        //$data['listaIntervento'] = \App\Intervento::with('cliente')->get();
//        return view('admin.intervento.index', $data );


        
//        $data['listaInterventoTipo'] = \App\InterventoTipo::lists('nome', 'id');
//        $data['listaInterventoStato'] = \App\InterventoStato::lists('nome', 'id');
//        $data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
//        $data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');
        
        $listaInterventoTipo = \App\InterventoTipo::lists('nome', 'id');
        $listaInterventoStato = \App\InterventoStato::lists('nome', 'id');
        
        //$entityArray = Entity::lists('name', 'id');
        //$entityArray->prepend('Select', null);

        $listaInterventoTipo->prepend('', '');
        $listaInterventoStato->prepend('', '');
        
        $data['listaInterventoTipo'] = $listaInterventoTipo;
        $data['listaInterventoStato'] = $listaInterventoStato;
        
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();  
        
        //$listaIntervento = \App\Intervento::all();
        
        $queryBuilder = \App\Intervento::query();
        
        //---FILTRO IN BASE AL TIPO DI UTENTE---------------------------------------------
        if(Sentinel::inRole('admin')) {
            
        } else if(Sentinel::inRole('tecnico')) {
            //TECNICO
            $user = Sentinel::getUser();
            $queryBuilder
                 ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
                 ->where('intervento_tecnico.tecnico_id', $user->tecnico_id > 0 ? $user->tecnico_id : -1);
                
        } else if(Sentinel::inRole('cliente')) {
            $user = Sentinel::getUser();
            $queryBuilder->where('interventi.cliente_id', $user->cliente_id > 0 ? $user->cliente_id : -1);
        }  
        
         if ( $request->has('numero') && trim($request->get('numero')) !== '' )
        {
            $queryBuilder->where('interventi.numero', 'LIKE', trim($request->get('numero')) . '%' );
        }

//        if ($request->has('user_id')) {
//            $activities = $activities->where('user_id', '=', $request->get('user_id'));
//        }
        
        
//        echo "REQUEST intervento_stato_id=".$request['intervento_stato_id'] . "<br/>";    
   
        //---Intervento stato
        if($request->has('intervento_stato_id'))
        {
            
            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        } elseif( ! $request->isMethod('post')) {
            $request['intervento_stato_id'] = 1;    //Aperto
            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        }         
        
        //print_r($request);
//        echo "request->input('intervento_stato_id')=".$request->input('intervento_stato_id')."<br/>";
        
        $listaIntervento = $queryBuilder
                ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
                        'interventi.numero_ticket_cliente', 'interventi.numero_lettera_vettura', 'interventi.sede_intervento', 
                        'interventi.referente_nome', 'interventi.referente_telefono', 
                        
                        'interventi.intervento_descrizione_da_svolgere',
                        'interventi.intervento_descrizione_risoluzione',
                        'interventi.intervento_data',
                        'interventi.importo_ticket',
                        'interventi.spesa_tecnico',
                        'interventi.intervento_ora_inizio',
                        'interventi.intervento_ora_fine',
                        'interventi.intervento_durata',
                        
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id', 
                        'interventi_tipo.nome as intervento_tipo',
                        'interventi_stato.nome as intervento_stato'
                        )
                ->get();
        
//        $listaIntervento = \App\Intervento::with('cliente','committente','tecnici')
//                ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
//                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
//                ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
//                ->select(
//                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
//                        'interventi.numero_ticket_cliente', 'interventi.sede_intervento', 
//                        'interventi_tipo.nome as intervento_tipo',
//                        'interventi_stato.nome as intervento_stato'
//                        )
//                ->get();
        

        $data['listaIntervento'] = $listaIntervento;
        
        $data['request'] = $request;
        
        if(Sentinel::inRole('admin')) {
            //---Statistiche
            //
            $stat = \App\Intervento::query()
                 ->select('interventi_stato.nome', DB::raw('count(*) as total'))
                 ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                 ->groupBy('nome')
                 ->lists('total','nome')
                    ->all();
            
            $data['stat'] = $stat;

        }
        
        //return view('admin.intervento.index', compact('listaIntervento'));
        
        //$user = \Cartalyst\Sentinel\Sentinel::getUser();
        
        if(Sentinel::inRole('admin')) {
            return view('admin.intervento.index', $data);
        } else if(Sentinel::inRole('tecnico')) {
            return view('tecnico.intervento.index', $data);
        } else if(Sentinel::inRole('cliente')) {
            return view('cliente.intervento.index', $data);
        }        
    }
    
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        if(!Sentinel::inRole('admin')) {
            return $this->redirect();
        }
        
        $intervento = new \App\Intervento();
        $intervento->SetAnnoNumero();
        $intervento->data_inserimento_ticket = date('d/m/Y');
        
        //$intervento->anno = date('Y');
        $data['datiRecuperati'] = $intervento;
        
        $data['listaInterventoTipo'] = \App\InterventoTipo::lists('nome', 'id');
        $data['listaInterventoStato'] = \App\InterventoStato::lists('nome', 'id');
        //$data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
        //$data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');  
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();        
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();
        return view('admin.intervento.create', $data);    //->with('anno', date('Y'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Ah $ah)
    {
        
        $esitoValidazioneDati = $ah->datiValidi();
        if ($esitoValidazioneDati === true) {
            $ah->inserisciDati();
            return redirect('admin/intervento')->with('ok_message', 'Intervento inserita');
        }
        return redirect('admin/intervento/create')->withErrors($esitoValidazioneDati)->withInput();
    }
    

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $intervento = \App\Intervento::find($id);
        
        if(!$intervento) {
            return $this->redirect();
        }
        
        $intervento->elaboraDati();
        //$intervento->data_inserimento_ticket = Carbon::createFromFormat('Y-m-d', $intervento->data_inserimento_ticket)->format('d/m/Y');
        $data['datiRecuperati'] = $intervento;
        
        $data['listaInterventoTipo'] = \App\InterventoTipo::lists('nome', 'id');
        $data['listaInterventoStato'] = \App\InterventoStato::lists('nome', 'id');
//        $data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
//        $data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();         
        //return view('admin.intervento.view', $data);

        $user = Sentinel::getUser();
        
        //print_r($user);
//        echo $user->id . "<br/>";
//        echo $user->tecnico_id . "<br/>";
//        $array_tecnici = $intervento->tecnici()->lists('tecnici.id')->all();
//        print_r($array_tecnici);
//        echo "<hr/>";
        
        
        if(Sentinel::inRole('admin')) {
            return view('admin.intervento.view', $data);
        } else if(Sentinel::inRole('tecnico')) {
            //---Controllo che possa accedervi
            $array_tecnici = $intervento->tecnici()->lists('tecnici.id')->all();
            
            if(!in_array($user->tecnico_id, $array_tecnici)) {
                //return redirect('tecnico/intervento/')->withErrors("Errore accesso negato");
                return $this->redirect();
            }
            return view('tecnico.intervento.view', $data);
        } else if(Sentinel::inRole('cliente')) {
            
            if(!$user->cliente_id == $intervento->cliente_id) {
                return $this->redirect();
            }
            return view('cliente.intervento.view', $data);
        }            
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $intervento = \App\Intervento::find($id);
        
        if(!$intervento) {
            return $this->redirect();
        }
        
        $intervento->elaboraDati();
        //$intervento->data_inserimento_ticket = Carbon::createFromFormat('Y-m-d', $intervento->data_inserimento_ticket)->format('d/m/Y');
        $data['datiRecuperati'] = $intervento;
        
        $data['listaInterventoTipo'] = \App\InterventoTipo::lists('nome', 'id');
        $data['listaInterventoStato'] = \App\InterventoStato::lists('nome', 'id');
//        $data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
//        $data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();        
        //return view('admin.intervento.edit', $data);
        
        $user = Sentinel::getUser();
        
        //---Controllo se utente ha i permessi per aggiornare
        if(!$intervento->canUpdate()) {
            return $this->redirect();
        }
            
        if(Sentinel::inRole('admin')) {
            return view('admin.intervento.edit', $data);
        } else if(Sentinel::inRole('tecnico')) {
            //---Controllo che possa accedervi
            $array_tecnici = $intervento->tecnici()->lists('tecnici.id')->all();
            
            if(!in_array($user->tecnico_id, $array_tecnici)) {
                //return redirect('tecnico/intervento/')->withErrors("Errore accesso negato");
                return $this->redirect();
            }

            return view('tecnico.intervento.edit', $data);
        } else if(Sentinel::inRole('cliente')) {
            if(!$user->cliente_id == $intervento->cliente_id) {
                return $this->redirect();
            }            
            return view('cliente.intervento.edit', $data);
        }            
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Ah $ah, $id)
    {
        if(Sentinel::inRole('admin') || Sentinel::inRole('tecnico') ) {
            
            $intervento = \App\Intervento::find($id);
            if(!$intervento->canUpdate()) {
                return $this->redirect();
            }
            
            $esitoValidazioneDati = $ah->datiValidi();
            if ($esitoValidazioneDati === true) {
                $ah->aggiornaDati($id);
                //return redirect('admin/intervento')->with('ok_message', 'Intervento aggiornata');
                
                if(Sentinel::inRole('admin')) {
                    //return view('admin.intervento.edit', $data);
                    return redirect('admin/intervento')->with('ok_message', 'Intervento aggiornata');
                } else if(Sentinel::inRole('tecnico')) {
                    //return view('tecnico.intervento.edit', $data);
                    return redirect('tecnico/intervento')->with('ok_message', 'Intervento aggiornata');
                }                
            }
            
            //---ERRORI
            
            //return redirect('admin/intervento/'.$id.'/edit')->withErrors($esitoValidazioneDati)->withInput();
            if(Sentinel::inRole('admin')) {
                //return view('admin.intervento.edit', $data);
                return redirect('admin/intervento/'.$id.'/edit')->withErrors($esitoValidazioneDati)->withInput();
            } else if(Sentinel::inRole('tecnico')) {
                //return view('tecnico.intervento.edit', $data);
                return redirect('tecnico/intervento/'.$id.'/edit')->withErrors($esitoValidazioneDati)->withInput();
            }
            
        } else if(Sentinel::inRole('cliente')) {
            
        
        //---ERRORI
            
            //return view('cliente.intervento.edit', $data);
            return redirect('cliente/intervento/'.$id.'')->withErrors($esitoValidazioneDati);
        }         
    } 
        
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if(!Sentinel::inRole('admin')) {
            return $this->redirect();
        }        
        \App\Intervento::destroy($id);
        return redirect('admin/intervento')->with('ok_message', 'Intervento eliminata');
    }   
    

    public function datatables(){
        return view('admin.intervento.datatables');
    }
    
    // Restituisce JSON per popolare Datatables via Server
    public function data(){
//        $interventi = Intervento::all(
//                    ['id', 'anno', 'numero', 'data_inserimento_ticket', 'numero_ticket_cliente', 'sede_intervento', 'cliente_id', 'intervento_tipo_id', 'intervento_stato_id']
//            );
        
        
        $interventi = Intervento::join('anagrafica', 'interventi.cliente_id', '=', 'anagrafica.id')
                ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                    ['interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 'interventi.numero_ticket_cliente', 'interventi.sede_intervento', 
                        'anagrafica.ragione_sociale',
                        'interventi_tipo.nome',
                        'interventi_stato.nome',
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id']
            );

                      

        
        return Datatables::of($interventi)
            ->add_column('actions','<a href="{{ route(\'intervento.show\', $id) }}"><i class="livicon" data-name="info" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="Visualizza"></i></a>
                                    <a href="{{ route(\'intervento.edit\', $id) }}"><i class="livicon" data-name="edit" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="Modifica"></i></a>
                				   ')
            ->make(true);           
    }
    
    
   /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function search(Request $request)
    {
//        $data['listaIntervento'] = \App\Intervento::all();
//        //$data['listaIntervento'] = \App\Intervento::with('cliente')->get();
//        return view('admin.intervento.index', $data );

        $queryBuilder = \App\Intervento::query();
        
        //print_r($request);
        
        //---FILTRO IN BASE AL TIPO DI UTENTE---------------------------------------------
        if(Sentinel::inRole('admin')) {
            
        } else if(Sentinel::inRole('tecnico')) {
            //TECNICO
            $user = Sentinel::getUser();
            $queryBuilder
                 ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
                 ->where('intervento_tecnico.tecnico_id', $user->tecnico_id);
                
        } else if(Sentinel::inRole('cliente')) {
            $user = Sentinel::getUser();
            $queryBuilder->where('interventi.cliente_id', $user->cliente_id);
        } 
        
        //---Numero
        if($request->has('numero'))
        {
            
            $queryBuilder->where('interventi.numero', $request->input('numero'));
        }
        
        //---Anno
        if($request->has('anno'))
        {
            
            $queryBuilder->where('interventi.anno', $request->input('anno'));
        }   
        
        //---Numero Ticket Cliente
        if($request->has('numero_ticket_cliente'))
        {
            
            $queryBuilder->where('interventi.numero_ticket_cliente', 'like', '%' . $request->input('numero_ticket_cliente') . '%');
        }        
        
        //---DATA DA
        if($request->has('data_da')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $data_da =  $request->input('data_da') ? Carbon::createFromFormat('d/m/Y', $request->input('data_da'))->format('Y-m-d') : '';
            
            if($data_da) {
                $queryBuilder->where('interventi.data_inserimento_ticket', '>=', $data_da);
                
            }
        }
    
        //---DATA A
        if($request->has('data_a')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $data_a =  $request->input('data_a') ? Carbon::createFromFormat('d/m/Y', $request->input('data_a'))->format('Y-m-d') : '';
            
            if($data_a) {
                $queryBuilder->where('interventi.data_inserimento_ticket', '<=', $data_a);
            }
        }        

        //---CHIUSURA INTERVENTO DATA - DATA DA
        if($request->has('intervento_data_da')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $intervento_data_da =  $request->input('intervento_data_da') ? Carbon::createFromFormat('d/m/Y', $request->input('intervento_data_da'))->format('Y-m-d') : '';
            
            if($intervento_data_da) {
                $queryBuilder->where('interventi.intervento_data', '>=', $intervento_data_da);
                
            }
        } 

        //---CHIUSURA INTERVENTO DATA - DATA A
        if($request->has('intervento_data_a')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $intervento_data_a =  $request->input('intervento_data_a') ? Carbon::createFromFormat('d/m/Y', $request->input('intervento_data_a'))->format('Y-m-d') : '';
            
            if($intervento_data_a) {
                $queryBuilder->where('interventi.intervento_data', '<=', $intervento_data_a);
                
            }
        }
        
        //---Cliente id
        if($request->has('cliente_id'))
        {
            
            $queryBuilder->where('interventi.cliente_id', $request->input('cliente_id'));
        }
        
        //---Committente id
        if($request->has('committente_id'))
        {
            
            $queryBuilder->where('interventi.committente_id', $request->input('committente_id'));
        }        
        
        //---Tecnici
        if($request->has('tecnici'))
        {
            //print_r($request->input('tecnici'));
            if($request->input('tecnici')) {
                $queryBuilder
                 ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
                 ->whereIn('intervento_tecnico.tecnico_id', $request->input('tecnici'));
                
                //TODO QUERY IN AND dei tecnici (per ora è in OR)
//                foreach($request->input('tecnici') as $tecnico_id) {
//                    $queryBuilder
//                        ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
//                        ->where('intervento_tecnico.tecnico_id', $tecnico_id);
//                }
            }
        }
        
        //---Prodotti
        if($request->has('prodotti'))
        {
            //print_r($request->input('tecnici'));
            if($request->input('prodoti')) {
                $queryBuilder
                 ->leftJoin('intervento_prodotto', 'interventi.id', '=', 'intervento_prodotto.ntervento_id')
                 ->whereIn('intervento_prodotto.prodotto_id', $request->input('prodotti'));
                
                //TODO QUERY IN AND dei tecnici (per ora è in OR)
//                foreach($request->input('tecnici') as $tecnico_id) {
//                    $queryBuilder
//                        ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
//                        ->where('intervento_tecnico.tecnico_id', $tecnico_id);
//                }
            }  
        }
        
        
        //---Intervento tipo
        if($request->has('intervento_tipo_id'))
        {
            
            $queryBuilder->where('interventi.intervento_tipo_id', $request->input('intervento_tipo_id'));
        }
        
        //---Intervento stato
        if($request->has('intervento_stato_id'))
        {
            
            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        } elseif( ! $request->isMethod('post')) {
            $request['intervento_stato_id'] = 1;
            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        }        
        
        $listaIntervento = $queryBuilder
        ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
                        'interventi.numero_ticket_cliente', 'interventi.sede_intervento', 
                        
                        'interventi.intervento_descrizione_risoluzione',
                        'interventi.intervento_data',
                        'interventi.importo_ticket',
                        'interventi.spesa_tecnico',
                        'interventi.intervento_ora_inizio',
                        'interventi.intervento_ora_fine',
                        
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id', 
                        'interventi_tipo.nome as intervento_tipo',
                        'interventi_stato.nome as intervento_stato'
                        )
                ->get();
        
        $listaInterventoTipo = \App\InterventoTipo::lists('nome', 'id');
        $listaInterventoStato = \App\InterventoStato::lists('nome', 'id');
        
        //$entityArray = Entity::lists('name', 'id');
        //$entityArray->prepend('Select', null);

        $listaInterventoTipo->prepend('', '');
        $listaInterventoStato->prepend('', '');
        
        $data['listaInterventoTipo'] = $listaInterventoTipo;
        $data['listaInterventoStato'] = $listaInterventoStato;
        
//        $data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
//        $data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();  
 
        /*
        //$listaIntervento = \App\Intervento::all();
        $listaIntervento = \App\Intervento::with('cliente','committente');

        if($request->has('numero'))
        {
            $listaIntervento->where('interventi.numero', $request->input('numero'));
        }
        
        $listaIntervento
                ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
                        'interventi.numero_ticket_cliente', 'interventi.sede_intervento', 
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id', 
                        'interventi_tipo.nome as intervento_tipo',
                        'interventi_stato.nome as intervento_stato'
                        )
                ->get();
        */
        
        
        //echo "GHERRY<hr/>";
        //echo $queryBuilder->get()->count()."<br/>";
        //print_r($listaIntervento);
        //die();
        $data['listaIntervento'] = $listaIntervento;
        //$data['listaIntervento'] = $queryBuilder;
        
        $data['request'] = $request;
        
        //return view('admin.intervento.index', compact('listaIntervento'));
        //return view('admin.intervento.index', $data);
        
        if(Sentinel::inRole('admin')) {
            //---Statistiche
            //
            $stat = \App\Intervento::query()
                 ->select('interventi_stato.nome', DB::raw('count(*) as total'))
                 ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                 ->groupBy('nome')
                 ->lists('total','nome')
                    ->all();
            
            $data['stat'] = $stat;

        }
        
        if(Sentinel::inRole('admin')) {
            return view('admin.intervento.index', $data);
        } else if(Sentinel::inRole('tecnico')) {
            return view('tecnico.intervento.index', $data);
        } else if(Sentinel::inRole('cliente')) {
            return view('cliente.intervento.index', $data);
        }            
    }
    
    
   /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function export(Request $request)
    {
//        $data['listaIntervento'] = \App\Intervento::all();
//        //$data['listaIntervento'] = \App\Intervento::with('cliente')->get();
//        return view('admin.intervento.index', $data );

        $queryBuilder = \App\Intervento::query();
        
        //print_r($request);
        
        //---FILTRO IN BASE AL TIPO DI UTENTE---------------------------------------------
        if(Sentinel::inRole('admin')) {
            
        } else if(Sentinel::inRole('tecnico')) {
            //TECNICO
            $user = Sentinel::getUser();
            $queryBuilder
                 ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
                 ->where('intervento_tecnico.tecnico_id', $user->tecnico_id);
                
        } else if(Sentinel::inRole('cliente')) {
            $user = Sentinel::getUser();
            $queryBuilder->where('interventi.cliente_id', $user->cliente_id);
        } 
        
        //---Numero
        if($request->has('numero'))
        {
            
            $queryBuilder->where('interventi.numero', $request->input('numero'));
        } 
        
        //---Anno
        if($request->has('anno'))
        {
            
            $queryBuilder->where('interventi.anno', $request->input('anno'));
        } else {
            $request['anno'] = date('Y');
            $queryBuilder->where('interventi.anno', date('Y'));
        }  
        
        //---Numero Ticket Cliente
        if($request->has('numero_ticket_cliente'))
        {
            
            $queryBuilder->where('interventi.numero_ticket_cliente', 'like', '%' . $request->input('numero_ticket_cliente') . '%');
        }        
        
        //---DATA DA
        if($request->has('data_da')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $data_da =  $request->input('data_da') ? Carbon::createFromFormat('d/m/Y', $request->input('data_da'))->format('Y-m-d') : '';

            if($data_da) {
                $queryBuilder->where('interventi.data_inserimento_ticket', '>=', $data_da);
            }
        } else {
            //---Primo del mese (per ottimizzare il filtro)
            $data_da = date('Y-m') . '-01';
            $request['data_da'] = '01/' . date('m/Y');
            $queryBuilder->where('interventi.data_inserimento_ticket', '>=', $data_da);
        } 
        
        //---DATA A
        if($request->has('data_a')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $data_a =  $request->input('data_a') ? Carbon::createFromFormat('d/m/Y', $request->input('data_a'))->format('Y-m-d') : '';
            
            if($data_a) {
                $queryBuilder->where('interventi.data_inserimento_ticket', '<=', $data_a);
            }
        }        
        
        //---CHIUSURA INTERVENTO DATA - DATA DA
        if($request->has('intervento_data_da')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $intervento_data_da =  $request->input('intervento_data_da') ? Carbon::createFromFormat('d/m/Y', $request->input('intervento_data_da'))->format('Y-m-d') : '';
            
            if($intervento_data_da) {
                $queryBuilder->where('interventi.intervento_data', '>=', $intervento_data_da);
                
            }
        } 

        //---CHIUSURA INTERVENTO DATA - DATA A
        if($request->has('intervento_data_a')) {
            //echo "data_da=".$request->input('data_da')."<br/>";
            $intervento_data_a =  $request->input('intervento_data_a') ? Carbon::createFromFormat('d/m/Y', $request->input('intervento_data_a'))->format('Y-m-d') : '';
            
            if($intervento_data_a) {
                $queryBuilder->where('interventi.intervento_data', '<=', $intervento_data_a);
                
            }
        }
        
        //---Cliente id
        if($request->has('cliente_id'))
        {
            
            $queryBuilder->where('interventi.cliente_id', $request->input('cliente_id'));
        }
        
        //---Committente id
        if($request->has('committente_id'))
        {
            
            $queryBuilder->where('interventi.committente_id', $request->input('committente_id'));
        }        
        
        //---Tecnici
        if($request->has('tecnici'))
        {
            //print_r($request->input('tecnici'));
            if($request->input('tecnici')) {
                $queryBuilder
                 ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
                 ->whereIn('intervento_tecnico.tecnico_id', $request->input('tecnici'));
                
                //TODO QUERY IN AND dei tecnici (per ora è in OR)
//                foreach($request->input('tecnici') as $tecnico_id) {
//                    $queryBuilder
//                        ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
//                        ->where('intervento_tecnico.tecnico_id', $tecnico_id);
//                }
            }
        }
        
        //---Prodotti
        if($request->has('prodotti'))
        {
            //print_r($request->input('tecnici'));
            if($request->input('prodoti')) {
                $queryBuilder
                 ->leftJoin('intervento_prodotto', 'interventi.id', '=', 'intervento_prodotto.ntervento_id')
                 ->whereIn('intervento_prodotto.prodotto_id', $request->input('prodotti'));
                
                //TODO QUERY IN AND dei tecnici (per ora è in OR)
//                foreach($request->input('tecnici') as $tecnico_id) {
//                    $queryBuilder
//                        ->leftJoin('intervento_tecnico', 'interventi.id', '=', 'intervento_tecnico.intervento_id')
//                        ->where('intervento_tecnico.tecnico_id', $tecnico_id);
//                }
            }  
        }
        
        
        //---Intervento tipo
        if($request->has('intervento_tipo_id'))
        {
            
            $queryBuilder->where('interventi.intervento_tipo_id', $request->input('intervento_tipo_id'));
        }
        
        //---Intervento stato
        if($request->has('intervento_stato_id'))
        {
            
            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        } elseif( ! $request->isMethod('post')) {
//            $request['intervento_stato_id'] = 1;
//            $queryBuilder->where('interventi.intervento_stato_id', $request->input('intervento_stato_id'));
        } 
        
        $listaIntervento = $queryBuilder
        ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
                        'interventi.numero_ticket_cliente', 'interventi.numero_lettera_vettura', 'interventi.sede_intervento', 
                        'interventi.referente_nome', 'interventi.referente_telefono', 
                        
                        'interventi.intervento_descrizione_da_svolgere',
                        'interventi.intervento_descrizione_risoluzione',
                        'interventi.intervento_data',
                        'interventi.importo_ticket',
                        'interventi.spesa_tecnico',
                        'interventi.intervento_ora_inizio',
                        'interventi.intervento_ora_fine',
                        'interventi.intervento_durata',
                        
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id', 
                        'interventi_tipo.nome as intervento_tipo',
                        'interventi_stato.nome as intervento_stato'
                        )
                ->get();
        
        $listaInterventoTipo = \App\InterventoTipo::lists('nome', 'id');
        $listaInterventoStato = \App\InterventoStato::lists('nome', 'id');
        
        //$entityArray = Entity::lists('name', 'id');
        //$entityArray->prepend('Select', null);

        $listaInterventoTipo->prepend('', '');
        $listaInterventoStato->prepend('', '');
        
        $data['listaInterventoTipo'] = $listaInterventoTipo;
        $data['listaInterventoStato'] = $listaInterventoStato;
        
//        $data['listaTecnici'] = \App\Tecnico::lists('nome', 'id');
//        $data['listaProdotti'] = \App\Prodotto::lists('descrizione', 'id');
        $data['Clienti'] = \App\Anagrafica::clienti()->order()->get();
        $data['Committenti'] = \App\Anagrafica::committenti()->order()->get();
        $data['Tecnici'] = \App\Tecnico::order()->get();
        $data['Prodotti'] = \App\Prodotto::order()->get();  
 
        /*
        //$listaIntervento = \App\Intervento::all();
        $listaIntervento = \App\Intervento::with('cliente','committente');

        if($request->has('numero'))
        {
            $listaIntervento->where('interventi.numero', $request->input('numero'));
        }
        
        $listaIntervento
                ->leftJoin('interventi_tipo', 'interventi.intervento_tipo_id', '=', 'interventi_tipo.id')
                ->leftJoin('interventi_stato', 'interventi.intervento_stato_id', '=', 'interventi_stato.id')
                ->select(
                        'interventi.id', 'interventi.anno', 'interventi.numero', 'interventi.data_inserimento_ticket', 
                        'interventi.numero_ticket_cliente', 'interventi.sede_intervento', 
                        'interventi.cliente_id', 'interventi.intervento_tipo_id', 'interventi.intervento_stato_id', 
                        'interventi_tipo.nome as intervento_tipo',
                        'interventi_stato.nome as intervento_stato'
                        )
                ->get();
        */
        
        
        //echo "GHERRY<hr/>";
        //echo $queryBuilder->get()->count()."<br/>";
        //print_r($listaIntervento);
        //die();
        $data['listaIntervento'] = $listaIntervento;
        //$data['listaIntervento'] = $queryBuilder;
        
        $data['request'] = $request;
        
        //return view('admin.intervento.index', compact('listaIntervento'));
        //return view('admin.intervento.index', $data);
        
        if(Sentinel::inRole('admin')) {
            return view('admin.intervento.export', $data);
        } else if(Sentinel::inRole('tecnico')) {
            return view('tecnico.intervento.index', $data);
        } else if(Sentinel::inRole('cliente')) {
            return view('cliente.intervento.index', $data);
        }            
    }
        
    protected function redirect() {
        if(Sentinel::inRole('admin')) {
            return redirect('admin/intervento/')->withErrors("Errore accesso negato");
        } else if(Sentinel::inRole('tecnico')) {
            return redirect('tecnico/intervento/')->withErrors("Errore accesso negato");
        } else if(Sentinel::inRole('cliente')) {
            return redirect('cliente/intervento/')->withErrors("Errore accesso negato");
        }        
    }
}
