/home/dvjjulio/test.istyle.mx/app/Http/Controllers/ClienteController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Estado;
use App\Rol;
use App\Cliente;
use Validator;
use Uuid;
use Auth;
use App\Helper;
use App\Pais;

class ClienteController extends Controller
{
  //
  public function index($id = null, $limit = null)
  {
    $clientesI = new Cliente();
    $clientId = null;
    $pagination = null;
    $clientes_found = $clientesI->Clientes();
    if (Helper::getRol() == Auth::user()->rol_id) {
      $clientes = $clientesI->ClientesWithLimit($id, $clientId, $limit);
      $clientesCount = $clientesI->ClientesCount($id);
    } else if (Helper::getRolOp() == Auth::user()->rol_id) {
      $clientes = $clientesI->ClientesWithLimit($id, Auth::user()->id, $clientId, $limit);
      $clientesCount = $clientesI->ClientesCount($id, Auth::user()->id);
    } else {
      $clientes = $clientesI->ClientesWithLimit(Auth::user()->id, $clientId, $limit);
      $clientesCount = $clientesI->ClientesCount(Auth::user()->id);
    }
    if ($clientesCount && $clientesCount[0]->total > 100) {
      $pagination = ceil($clientesCount[0]->total / 100);
    }


    $estado = new Estado();
    $estados = $estado->estados();
    $roles = Rol::all();
    $paises = Pais::all();
    return view('Catalogos.Cliente')->with(compact('clientes', 'estados', 'roles', 'clientes_found', 'paises', 'pagination'));
  }

  public function clientes(Request $request)
  {
    $search = $request->input('search');
    $cliente = new Cliente();
    return $cliente->ClientsSearchBar($search);
    // return Cliente::where('nombre', 'like', '%'.$search.'%')
    // ->orWhere('ape_p', 'like', '%'.$search.'%')
    // ->orWhere('ape_m', 'like', '%'.$search.'%')
    // ->orWhere('registro', 'like', '%'.$search.'%')
    // ->take(100)
    // ->get();


  }

  public function guardar(Request $request)
  {
    $data = $request->all();

    $cliente = Cliente::where('registro', '=', $data['registro'])->where('status_id', 0)->first();
    if (isset($cliente)) {
      $data['id'] = $cliente->id;
    }

    if ($data['id'] == "0") {
      $validacion = Validator::make(
        $data,
        array(
          'registro' => 'required|unique:cliente',
          'pass' => 'required',
          'nombre' => 'required',
          'rol' => 'required'
        ),
        array(
          'registro.required' => 'El nombre de la categoria es obligatorio',
          'registro.unique' => 'El registro ya existe',
          'pass.required' => 'El Password es obligatorio',
          'nombre.required' => 'El Nombre es obligatorio',
          'rol.required' => 'El Rol es obligatorio',
        )

      );
    } else {
      if ($data['pass_check']) {
        $validacion = Validator::make(
          $data,
          array(
            'nombre' => 'required',
            'rol' => 'required'
          ),
          array(
            'nombre.required' => 'El Nombre es obligatorio',
            'rol.required' => 'El Rol es obligatorio',
          )

        );
      } else {
        $validacion = Validator::make(
          $data,
          array(
            'pass' => 'required',
            'nombre' => 'required',
            'rol' => 'required'
          ),
          array(
            'pass.required' => 'El Password es obligatorio',
            'nombre.required' => 'El Nombre es obligatorio',
            'rol.required' => 'El Rol es obligatorio',
          )

        );
      }
    }

    if ($validacion->fails()) {
      return response()->json(['status' => false, 'message' => $validacion->messages()]);
    }

    if ($data['id'] == "0") {
      $cliente = new Cliente();
      $cliente->id = Uuid::generate();
      $mesage = "El Cliente ha sido creado exitosamente";
      $cliente->password = bcrypt($data['pass']);
    } else {
      $cliente = Cliente::find($data['id']);
      $cliente->status_id = 1;
      $mesage = "El Cliente ha sido actualizada correctamente";
      if ($data['pass_check'] == "false") {
        $cliente->password = bcrypt($data['pass']);
      }
    }
    $cliente->registro = $data['registro'];
    $cliente->nombre = $data['nombre'];
    $cliente->patrocinador = (isset($data['patrocinador'])) ? $data['patrocinador'] : null;
    $cliente->ape_p = $data['ape_p'];
    $cliente->ape_m = $data['ape_m'];
    $cliente->ine = $data['ine'];
    $cliente->rfc = $data['rfc'];
    $cliente->sexo = $data['sexo'];
    $cliente->fecha_nac = $data['fecha_nac'];
    $cliente->edo_civil = $data['edo_civil'];
    $cliente->profesion = $data['profesion'];
    $cliente->calle = $data['calle'];
    $cliente->numero = $data['no_casa'];
    $cliente->num_interior = $data['noi_casa'];
    $cliente->colonia = $data['colonia'];
    $cliente->delegacion = $data['delegacion'];
    $cliente->cp = $data['cp'];
    $cliente->pais_id = $data['pais'];
    $cliente->estado_id = $data['edo'];
    $cliente->lada = $data['lada'];
    $cliente->tel = $data['tel'];
    $cliente->whatsapp = $data['whats'];
    $cliente->email = $data['email'];
    $cliente->rol_id = $data['rol'];
    $cliente->cliente_id = Auth::user()->id;

    if ($cliente->save()) {
      return response()->json(['status' => true, 'message' => $mesage, 'data' => $data]);
    } else {
      return response()->json(['status' => false, 'message' => 'Error al insertar los datos']);
    }
  }

  public function update(Request $request)
  {
    $id = $request->input('id');
    $clientes = new Cliente();
    return $clientes->Clientes($id); //Cliente::find($id);
  }

  public function delete(Request $request)
  {
    $cliente = Cliente::Find($request->input('id'));
    $cliente->status_id = 0;
    if ($cliente->save()) {
      return response()->json(['status' => true, 'message' => 'Registro eliminado correctamente']);
    } else {
      return response()->json(['status' => false, 'message' => 'Error al eliminar registro']);
    }
  }

  public function change_pass(Request $request)
  {
    $data = $request->all();

    $validacion = Validator::make(
      $data,
      array(
        'pass' => 'required'
      ),
      array(
        'pass.required' => 'El Password es obligatorio'
      )
    );
    if ($validacion->fails()) {
      return response()->json(['status' => false, 'message' => $validacion->messages()]);
    }

    $cliente = Cliente::find($data['id']);
    $cliente->password = bcrypt($data['pass']);
    $cliente->cliente_id = Auth::user()->id;
    if ($cliente->save()) {
      return response()->json(['status' => true, 'message' => "El cambio de contraseƱa fue exitoso", 'data' => $data]);
    } else {
      return response()->json(['status' => false, 'message' => 'Error al insertar los datos']);
    }
  }

  public function estados(Request $request)
  {
    $pais = $request->input('pais');
    $estado = new Estado();
    return $estado->estados($pais);
  }

  public function deactivateClientes()
  {
    $clientes = new Cliente();
    $deactivate = $clientes->clientesToDeactivate();
    $activate = $clientes->clientesToActivate();
    return response()->json(['status' => true]);
  }

  public function storeSignature(Request $request)
  {
    $client_id = $request->input('client_id');
    $contract_url = $request->input('contract_src');

    $cliente = Cliente::find($client_id);
    $cliente->contract_url = $contract_url;

    if ($cliente->save()) {
      return response()->json(['status' => true, 'message' => "Firma guardada correctamente"]);
    } else {
      return response()->json(['status' => false, 'message' => 'Error al guardar la firma']);
    }
  }

  public function getContract($id)
  {

    $cliente = Cliente::find($id);

    if (!$cliente) return 'Error al cargar el contrato';

    // $report = new ReportController();
    $pdf = new \Fpdf();
    $pdf::AddPage('P',"Letter");

    $pdf::Image(__DIR__ . '/../../../public/img/reporte/contract.jpg', 0, 0, 216, 'JPEG');

    $pdf::SetFont('Arial', '', 13);
    $pdf::SetXY(170, 55);
    $pdf::Cell(130, 4, $cliente->registro, 0, 0);
    $pdf::SetXY(30, 63);
    $pdf::Cell(130, 4, mb_convert_encoding($cliente->ape_p ." , " . $cliente->ape_m . ", " . $cliente->nombre, 'ISO-8859-1', 'UTF-8'), 0, 0);
    $pdf::SetXY(30, 73);
    $pdf::Cell(130, 4, $cliente->ine, 0, 0);
    $pdf::SetXY(100, 73);
    $pdf::Cell(130, 4, $cliente->rfc, 0, 0);
    $pdf::SetXY($cliente->sexo == 'M' ? 175 : 187, 73);
    $pdf::Cell(130, 4, 'X', 0, 0);

    $pdf::SetXY(20, 83);
    $pdf::Cell(130, 4, $cliente->fecha_nac, 0, 0);

    $edo_civil = 103;
    if ($cliente->edo_civil == "S") $edo_civil = 78;
    if ($cliente->edo_civil == "C") $edo_civil = 90;

    $pdf::SetXY($edo_civil, 83);
    $pdf::Cell(130, 4, "X", 0, 0);

    $pdf::SetXY(20, 95);
    $pdf::Cell(130, 4, mb_convert_encoding($cliente->calle, 'ISO-8859-1', 'UTF-8'). " ". $cliente->numero, 0, 0);

    $pdf::SetXY(20, 105);
    $pdf::Cell(130, 4, mb_convert_encoding($cliente->colonia, 'ISO-8859-1', 'UTF-8'), 0, 0);

    $pdf::SetXY(105, 105);
    $pdf::Cell(130, 4, $cliente->delegacion, 0, 0);

    $pdf::SetXY(20, 117);
    $pdf::Cell(130, 4, $cliente->cp, 0, 0);

    $pdf::SetXY(44, 117);
    $pdf::Cell(130, 4, mb_convert_encoding(Estado::find($cliente->estado_id)->estado, 'ISO-8859-1', 'UTF-8'), 0, 0);

    $pdf::SetXY(95, 117);
    $pdf::Cell(130, 4, $cliente->lada, 0, 0);
    $pdf::SetXY(110, 117);
    $pdf::Cell(130, 4, $cliente->tel, 0, 0);

    $pdf::SetXY(20, 128);
    $pdf::Cell(130, 4, $cliente->email, 0, 0);

    $pdf::SetXY(125, 128);
    $pdf::Cell(130, 4, $cliente->whatsapp, 0, 0);

    $patrocinador = Cliente::find($cliente->patrocinador);

    $pdf::SetXY(167, 142);
    $pdf::Cell(130, 4, $patrocinador->registro, 0, 0);

    $pdf::SetXY(20, 152);
    $pdf::Cell(130, 4, mb_convert_encoding($patrocinador->ape_p ." , " . $patrocinador->ape_m . ", " . $patrocinador->nombre, 'ISO-8859-1', 'UTF-8'), 0, 0);

    $pdf::SetXY(58, 253);
    $pdf::Cell(130, 4, date('d', strtotime($cliente->created_at)), 0, 0);
    $pdf::SetXY(69, 253);
    $pdf::Cell(130, 4, date('m', strtotime($cliente->created_at)), 0, 0);
    $pdf::SetXY(82, 253);
    $pdf::Cell(130, 4, date('Y', strtotime($cliente->created_at)), 0, 0);

    if ($cliente->contract_url) {

      $contract_url = str_replace('"', '', $cliente->contract_url);

      $image_url = __DIR__ . '/../../../public/img/signature.jpeg';

      $ifp = fopen($image_url, 'wb' );

      // split the string on commas
      // $data[ 0 ] == "data:image/png;base64"
      // $data[ 1 ] == <actual base64 string>
      $data = explode( ',', $contract_url );

      // we could add validation here with ensuring count( $data ) > 1
      fwrite( $ifp, base64_decode( $data[ 1 ] ) );

      // clean up the file resource
      fclose( $ifp );

      $pdf::Image($image_url, 150, 246, 20, 'JPEG');
    }

    $pdf::AddPage('P', 'Legal');

    $pdf::Image(__DIR__ . '/../../../public/img/reporte/contract2.jpg', 0, 0, 216, 'JPEG');

    $pdf::Output('I', 'Contract.pdf');
  }
}