/home/dvjjulio/softtrash/app/Http/Controllers/UserController.php
<?php

namespace Trash\Http\Controllers;

use Illuminate\Http\Request;

use Trash\Http\Requests;
use Trash\Http\Controllers\Controller;
use Trash\User;
use Trash\Tipo;
use Trash\Clientes;
use Trash\UserCliente;
use Auth;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $tipo = Tipo::all();
        $clientes = Clientes::where('status_id','=',1)->get();
        return view('catalogo.user')->with(compact('tipo','clientes'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function saveUser()
    {
        //
        $data = \Input::all();
        $validator = $this->get_validate($data);
        if( $validator->fails() )
            return response()->json( array( 'status' => false, 'message' => $validator->errors()->all() ));
        return response()->json( $this->store($data));
    }

        public function get_validate( $data ){
          if($data['pass_check'] == "false"){
            $array_rules = array(
                    'usuario'  => 'required',
                    'pass'     => 'required',
                    'nombre'   => 'required',
                    'tipo'     => 'required' );
            $messages    =  array(
                    'usuario.required'  => 'Por favor ingrese el Usuario',
                    'pass.required'     => 'Por favor ingrese el Password',
                    'nombre.required'   => 'Por favor ingrese el Nombre',
                    'tipo.required'     => 'Por favor Seleccione el Tipo' );
          }else{
            $array_rules = array(
                    'usuario'  => 'required',
                    'nombre'   => 'required',
                    'tipo'     => 'required' );
            $messages    =  array(
                    'usuario.required'  => 'Por favor ingrese el Usuario',
                    'nombre.required'   => 'Por favor ingrese el Nombre',
                    'tipo.required'     => 'Por favor Seleccione el Tipo' );
          }


        return \Validator::make( $data, $array_rules, $messages );
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store($data, User $u = null)
    {
        try{
            \DB::beginTransaction();
            if(  $data[ 'id' ] != '' ){
                $user = User::find($data['id']);
                if($data['pass_check'] == "false"){
                  if($data['tipo'] == 2){
                    $user->password         = md5($data['pass']);
                  }else{
                    $user->password         = bcrypt($data['pass']);
                  }
                }
            }
            else {
                $user = new User();
                $existUser=$this->checkUser($data);
                if( $existUser==false )throw new \Exception('Ya existe usuario: '.$data['usuario']);
                if($data['tipo'] == 2){
                  $user->password         = md5($data['pass']);
                }else{
                  $user->password         = bcrypt($data['pass']);
                }
            }

            /*if($_COOKIE['id'] == null){ throw new \Exception('La sessión ha caducado vuelve a iniciar');
              URL:To('/');
            }*/

            $user->username         = $data['usuario'];
            $user->nombre           = $data['nombre'];
            $user->ape_pat          = $data['ape_pat'];
            $user->ape_mat          = $data['ape_mat'];
            $user->telefono         = $data['tel'];
            $user->tipo_usuario_id  = $data['tipo'];
            $user->status_id        = ( $data['status_id'] != 'undefined') ? $data['status_id'] : 1;
            $user->user_created     = Auth::user()->id;
            $user->save();

            if($user->tipo_usuario_id == 3){
               $clientes = $data['clientes'];
              if($clientes != 'null' and $clientes != 'undefined'){
              $clientes = explode(",",$clientes);
                foreach ($clientes as $key => $value) {
                  $userCli = new UserCliente();
                  $clientes = $userCli->ClienteUser($user->id,$value);
                  if(!isset($clientes)){
                    $cUser = new UserCliente();
                    $cUser->cliente_id = $value;
                    $cUser->user_id = $user->id;
                    $cUser->save();
                  }
                }
              }
            }

        } catch( \Exception $e ){
            \DB::rollback();
            return array( 'status' => false, 'message' => $e->getMessage() );
        }
        \DB::commit();
        return  array( 'status' => true , 'data' => $user );
    }

    public function checkUser($data){
         $exist = User::where('username','=',$data['usuario'])->get();
        if( count( $exist ) < 1){
             return true;
         }else{
            return false;
         }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function showUsers()
    {
        //
        $users =  new User();

        if(Auth::user()->tipo_usuario_id == 3){
          $user = $users->getUsers(Auth::user()->id);
        }else{
          $user = $users->getUsers();
        }

        $tipo = Tipo::all();
        $clientes = Clientes::where('status_id','=',1)->get();
        return view('catalogo.userAll')->with(compact('user','tipo','clientes'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function getUser()
    {
        //
        $data = \Input::all();
        $user = User::with('tipo')->where('id','=',$data['id'])->get();
        $userCliente = new User();
        $cliente = $userCliente->userCliente($user[0]->id);
        return response()->json(array('status'=> true, 'data'=>$user, 'cliente'=> $cliente));

    }

    public function eliminaUserC(Request $request){
       if(UserCliente::destroy($request->input("id"))){
         return response()->json(['status'=>true, 'message'=> 'Eliminado Correctamente']);
       }else{
         return response()->json(['status'=>false, 'message'=> 'Error al Eliminar']);
       }

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}