<?php
//Creado por Adrian Fabian Sanchez Galicia 2017
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Libraries\ejLib;
use SimpleXMLElement;
use Excel;
use mikehaertl\pdftk\Pdf;
use mikehaertl\pdftk\XfdfFile;

class AdmisionController extends Controller
{

    private $ejLibInstance;
    private $soapclient;
    private $wsClave;

    public function __construct()
    {
        if (!isset($_SESSION)) session_start();
        $this->ejLibInstance = ejLib::getInstance();
        $this->soapclient = $this->ejLibInstance->getWs();
        $this->wsClave = $this->ejLibInstance->get_wsClave();
    }

    /**
     * POST:Admision_CancelarReservacionCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_CancelarReservacionCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_CancelarReservacionCama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_AltaCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_AltaCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_AltaCama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $request->MotivoEgre,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_IngresarCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_IngresarCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_IngresarCama(
            $request->Centro_Sal,
            $request->CLAVE_PAC,
            $request->NoCama,
            $request->idEspecialidad,
            $request->idTipoServicio,
            $request->DiagnosticoMedico,
            $request->idUsuario,
            $request->idSexo,
            $request->reingreso,
            '', // 17 Dic 2018 . folio_urgencia 
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_ReservarCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_ReservarCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_ReservarCama(
            $request->Centro_Sal,
            $request->CLAVE_PAC,
            $request->NoCama,
            $request->idEspecialidad,
            $request->idTipoServicio,
            $request->FechaIng,
            $request->DiagnosticoMedico,
            $request->idUsuario,
            $request->idSexo,
            $request->reingreso,
            '', // 17 Dic 2018 . folio_urgencia 
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_ModificarFechaIngDeCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_ModificarFechaIngDeCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_ModificarFechaIngDeCama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $request->FechaIng,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_CambiarReservaCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_CambiarReservaCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_CambiarReservaCama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $request->NoCama,
            $request->idEspecialidad,
            $request->idTipoServicio,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_PaseACama
     * Fabian Sanchez, 16/08/2017
     */
    public function Admision_PaseACama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_PaseACama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $request->NoCama,
            $request->idEspecialidad,
            $request->idTipoServicio,
            $request->MotivoPase,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_AsignarReservaCama
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_AsignarReservaCama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_AsignarReservaCama(
            $request->Centro_Sal,
            $request->IDADMISION,
            $request->DiagnosticoMedico,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        return response()->json((array)$respuesta->respuesta);
    }

    /**
     * POST:Admision_AsignarReservaCama
     * Fabian Sanchez, 28/07/2017
     */
    public function ingreso()
    {
        $usuario = $this->desencriptar($_SESSION['usuario']);
        $usuario->centro_sal = 1111;
        return view('admision/ingreso')->withUsuario($usuario);
    }

    /**
     * POST:modificar_cama
     * Fabian Sanchez, 28/07/2017
     */
    public function modificar_cama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_get_Admision(
            $request->Centro_Sal,
            $request->IDADMISION,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $informacion = (array)$respuesta->respuesta;
        return view('admision/modificar_cama')->withInformacion($informacion);
    }

    /**
     * POST:alta_cama
     * Fabian Sanchez, 28/07/2017
     */
    public function alta_cama(Request $request)
    {
        $respuesta = $this->soapclient->Admision_get_Admision(
            $request->Centro_Sal,
            $request->IDADMISION,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $informacion = (array)$respuesta->respuesta;
        return view('admision/alta_cama')->withInformacion($informacion);
    }

    /**
     * POST:mostrarDetalleAdmision
     * Fabian Sanchez, 23/10/2017
     */
    public function mostrarDetalle(Request $request)
    {
        $respuesta = $this->soapclient->Admision_get_Admision(
            $request->Centro_Sal,
            $request->IDADMISION,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $informacion = (array)$respuesta->respuesta;
        return view('admision/detalle')->withInformacion($informacion);
    }

    /**
     * POST:pasea_cama
     * Fabian Sanchez, 28/07/2017
     */
    public function pasea_cama(Request $request)
    {
        $usuario = $_SESSION['operador'];
        $id_doc = $this->ejLibInstance->desencriptar_AES($usuario['id_doc'], $usuario['x']);
        $id_doc = trim($id_doc);

        $respuesta = $this->soapclient->Admision_get_Admision(
            $request->Centro_Sal,
            $request->IDADMISION,
            $this->wsClave
        );
        $servicios = $this->soapclient->Admision_listaServicios($id_doc, $request->Centro_Sal, $this->wsClave);
        $servicios = new SimpleXMLElement(utf8_encode($servicios));
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $informacion = (array)$respuesta->respuesta;
        return view('admision/pasea_cama')->withInformacion($informacion)->withServicios($servicios);
    }

    /**
     * POST:Admision_PacienteExistente
     * Fabian Sanchez, 20/10/2017
     */
    public function Admision_PacienteExistente(Request $request)
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $Centro_Sal = trim($Centro_Sal);

        $respuesta = $this->soapclient->Admision_PacienteExistente(
            $Centro_Sal,
            $request->CLAVE_PAC,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $respuesta = $respuesta->respuesta;
        $respuesta->expac = utf8_decode($respuesta->expac);
        return response()->json((array)$respuesta);
    }


    /**
     * GET:admision_tablero
     * Fabian Sanchez, 28/07/2017
     */
    public function indexAsignarCamas()
    {
        if (!isset($_SESSION)) session_start();
        //if(  (!$this->esCuentaRoot()==null && $this->esCuentaRoot()>0))
        return view('admision.tablero');
        /*if(!$this->hayCuentaActiva() || $this->esCuentaRoot()==0 )
          $response_error = "No dispone de suficientes privilegios de acceso para realizar esta acción";
          return view('login.index',compact('response_error'));*/
    }

    /**
     * POST:admision_fecha
     * Fabian Sanchez, 28/07/2017
     */
    public function admision_fecha()
    {
        return view('admision.admision_fecha');
    }

    /**
     * POST:admision_cama
     * Fabian Sanchez, 28/07/2017
     */
    public function admision_cama()
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $Centro_Sal = trim($Centro_Sal);
        $id_doc = $this->ejLibInstance->desencriptar_AES($usuario['id_doc'], $usuario['x']);
        $id_doc = trim($id_doc);

        $servicios = $this->soapclient->Admision_listaServicios($id_doc, $Centro_Sal, $this->wsClave);
        $servicios = new SimpleXMLElement(utf8_encode($servicios));
        return view('admision.admision_cama')->withServicios($servicios);
    }

    /**
     * POST:Admision_ListaCamas
     * Fabian Sanchez, 28/07/2017
     */
    public function Admision_ListaCamas(Request $request)
    {
        //$camas = $this->soapclient->Admision_listaCamasServicio($request->idservicio, $request->Centro_Sal, $this->wsClave);
        $camas = $this->soapclient->Admision_listaCamasDisponibles($request->idservicio, $request->Centro_Sal, $this->wsClave);
        $camas = new SimpleXMLElement(utf8_encode($camas));
        return response()->json($camas);
    }

    /**
     * Funcion para desencriptar el objeto usuario.
     * Fabian Sanchez, 26/06/2017
     */
    public function desencriptar($usuario)
    {
        $objeto = [];
        foreach ($usuario as $clave => $valor) {
            $objeto[$clave] = $this->ejLibInstance->desencriptar_AES($usuario[$clave], $usuario['x']);
        }
        return (object)$objeto;
    }

    /**
     * Funcion para obtener el pdf del ingreso.
     * Fabian Sanchez, 4/09/2017
     */
    public function ingreso_pdf($idadmision)
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $nom_centrosal = trim($this->ejLibInstance->desencriptar_AES($usuario['nom_centrosal'], $usuario['x']));
        $Centro_Sal = trim($Centro_Sal);

        $respuesta = $this->soapclient->Admision_get_Admision(
            $Centro_Sal,
            $idadmision,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        $data = (array)$respuesta->respuesta;

        $folioUsuario='';
        if($data['consecutivo'] =='')$folioUsuario=$data['folio_afil'];
        else $folioUsuario=$data['folio_afil'].'-'. $data['consecutivo'];
        //utilizamos la libreria pdftk para php para lleanr el formualrio del pdf
        //para ver la documentacion ir a https://github.com/mikehaertl/php-pdftk
        $xfdf = new XfdfFile([
            'UnidadMedica' => utf8_decode($nom_centrosal),
            'nombre' => utf8_decode($data['nombre']),
            'paterno' => utf8_decode($data['primer_ap']),
            'materno' => utf8_decode($data['segundo_ap']),
            'expediente' => $data['numero_expe'],
            'EDAD' => substr(utf8_decode($data['edad']), 0, 2),
            'SEXO' => substr(utf8_decode($data['sexo']), 0, 1),
            'dianac' => substr(utf8_decode($data['fecha_nacimiento']), 0, 2),
            'mesnac' => substr(utf8_decode($data['fecha_nacimiento']), 3, 2),
            'anionac' => substr(utf8_decode($data['fecha_nacimiento']), 6, 4),
            'SERVICIO' => utf8_decode($data['servicio']),
            'nocama' => utf8_decode(trim($data['tiposervicio'])) . ' ' . utf8_decode($data['descripcion_cama']),
            'diaing' => substr(utf8_decode($data['fechaing']), 0, 2),
            'mesing' => substr(utf8_decode($data['fechaing']), 3, 2),
            'anioing' => substr(utf8_decode($data['fechaing']), 6, 4),
            'horaingreso' => ''.$data['horaing'].'',
            'noseguropop' => ''.$folioUsuario.'',
            'diag' => utf8_decode($data['diagnosticomedico']),
        ]);

        $xfdf->saveAs('data.xfdf');

        $pdf = new Pdf(public_path() . '\form.pdf', [
            'command' => 'C:\pdf\pdftk.exe',
            'useExec' => true,
        ]);
        $pdf->fillForm(public_path() . '\data.xfdf')
            ->flatten()
            ->send('ingreso.pdf', true);
        if (!$pdf->send('ingreso.pdf')) {
            $error = $pdf->getError();
            return $error;
        }
        //forma antigua generando el pdf manualmente
        //$pdf = PDF::loadView('admision.ingreso_pdf', array('data' => $data));
        //return $pdf->stream('ingreso.pdf');
    }

    /**
     * GET:Admision_UrgenciasBitacoraDiaria
     * Fabian Sanchez, 10/08/2017
     */
    public function Admision_UrgenciasBitacoraDiaria()
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $Centro_Sal = trim($Centro_Sal);

        $respuesta = $this->soapclient->Admision_UrgenciasBitacoraDiaria(
            $Centro_Sal,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        //return response()->json((array)$respuesta->respuesta);
        $registros = $respuesta->respuesta;
        return view('admision.bitacora')->withRegistros($registros);
    }

    /**
     * GET:bitacora_excel
     * Fabian Sanchez, 10/08/2017
     */
    public function bitacora_excel()
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $Centro_Sal = trim($Centro_Sal);

        $respuesta = $this->soapclient->Admision_UrgenciasBitacoraDiaria(
            $Centro_Sal,
            $this->wsClave
        );
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));

        $data = array();

        foreach($respuesta->respuesta AS $row){            
            array_push($data, array(utf8_decode(utf8_decode($row->servicio)), utf8_decode(utf8_decode($row->descripcion_cama)), utf8_decode(utf8_decode($row->nombre)), utf8_decode(utf8_decode($row->edad)), " ".$row->he, utf8_decode(utf8_decode($row->diagnosticomedico))));
        }
        
        $header_args = array( 'SERVICIO', 'CAMA', 'NOMBRE', 'EDAD', 'E/H', utf8_decode('DIAGNÓSTICO') );
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename=bitacora-diaria.csv');

        $output = fopen( 'php://output', 'w' );

        ob_end_clean();

        fputcsv($output, $header_args);


        foreach($data AS $data_item){
            fputcsv($output, $data_item);
        }
        exit;
        /*
        Excel::create('bitacora-diaria', function ($excel) use ($respuesta) {

            $excel->sheet('Hoja 1', function ($sheet) use ($respuesta) {

                $sheet->loadView('admision.excel', array('registros' => $respuesta));

            });

        })->download('xlsx');
        */
      
    

    }

    public function rpt_admisionOcupacionHosp()
    {
        $usuario = $_SESSION['operador'];
        $Centro_Sal = $this->ejLibInstance->desencriptar_AES($usuario['centro_sal'], $usuario['x']);
        $Centro_Sal = trim($Centro_Sal);

        $respuesta = $this->soapclient->Admision_rptOcupacionHospitalaria(
            $Centro_Sal,'null', '1','','','','', 'null',$this->wsClave);
        $respuesta = new SimpleXMLElement(utf8_encode($respuesta));
        //return response()->json((array)$respuesta->respuesta);
        $registros = $respuesta->respuesta;
    
        return view('admision.admision_rpt_ocupacionHosp')->withRegistros($registros);
    }




}
