<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
class CertificadoInsumosCtrl extends MY_Controller {
private $AuMaritimo = false;
function __construct() {

  header('Access-Control-Allow-Origin: *');
  header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Authorization, Access-Control-Request-Method");
  header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
  header("Allow: GET, POST, OPTIONS, PUT, DELETE");
  header('content-type: application/json; charset=utf-8');
  $method = $_SERVER['REQUEST_METHOD'];
  if($method == "OPTIONS") {
      die();
  }
parent::__construct(); 
// add library of Pdf 
$this->load->library('Pdf');
}


public function _remap($met,$parametros = array()){

  $method = $_SERVER['REQUEST_METHOD'];


 if($met ==="index"){

  switch ($method)  
  { case 'PUT':
     // $this->Edit(); 
    break;
    case 'POST': 
      //$this->Add();
    break;
    case 'GET': 
      $this->GestionCertificado($parametros);
    case 'HEAD': 
      // echo json_encode( $method );
    break; 
    case 'DELETE': 
     // $this->Delete($parametros); 
    break; 
    case 'OPTIONS': 
     // echo json_encode( $method );
   break; 
   default: 
   echo json_encode( "Error" );
   break; 
  }
}


 }



private function Verificar($Nombre,$DB = ""){
  $Dir = Raiz();
  if (Existe($Dir.'/CertificadoInsumos/'.$Nombre.'.pdf') === true){
     return $this->Verificar(Random($DB));
  }else{
    return $Nombre;
  }
 
}

private function GetPremisos(){
  $Token = obtnerToken();
  $Autho = "";
 if($Token != FALSE){
  $Autho =str_replace('Bearer ','', $Token);
 }
 if( $Autho !=""){
  $Autho =str_replace('Bearer ','', $Autho);
  $Token = ValidarToken($Autho);
}
        if ( $Token === FALSE ){
          $DatosGET= isset($_GET["x"]) ? $_GET["x"]: "" ;
        
         
          $DatosGET =  $DatosGET!=""?ValidarToken($DatosGET) :"";
          $Token  =$DatosGET!=''?$DatosGET: $Token ;
          
         }
    if(isset($this->session)){
          $ID =  $Token== FALSE ? $this->session->userdata("User") :  $Token ;
    }else{
          $ID =   $Token== FALSE ? null :  $Token ;
    }
  $User = $this->UserModels->getUser($ID);
  $Nivel =$User[0]->Nivel;
  $Permiso= $this->db->get_where('detalleniveles',array("Status"=>"Activo","Ruta"=>"Inspetor","Nivel"=>$Nivel))->result();
  $per =0;
  if(  count($Permiso)>0){
  return $Permiso[0]->Permiso;
}else{
  return 0;
}

}

public function GestionCertificado($parametros)
{
 // nueva funcionalidad activar o desabilitar firma del inspector 
 // autoridad matrituma comencemos
  $Nombre = "";
  $Dir = Raiz(); 
  $Token = obtnerToken();
  $Autho = "";
 if($Token != FALSE){
  $Autho =str_replace('Bearer ','', $Token);
 }
 if( $Autho !=""){
  $Autho =str_replace('Bearer ','', $Autho);
  $Token = ValidarToken($Autho);
}
 
  if ( $Token === FALSE ){
    $DatosGET= isset($_GET["x"]) ? $_GET["x"]: "" ;
  
   
    $DatosGET =  $DatosGET!=""?ValidarToken($DatosGET) :"";
    $Token  =$DatosGET!=''?$DatosGET: $Token ;
    
   }
if(isset($this->session)){
  $User =  $Token== FALSE ? $this->session->userdata("User") :  $Token ;
}else{
  $User =  $Token== FALSE ? null:  $Token ;
}
  if(count($parametros) ===0){ 
    echo "Debe enviar acta";
    return;
  } 
  if(DbMultiple== TRUE){ 
    $Nombre = $this->Verificar(Random($this->UserDB), $this->UserDB);
    
  }else{
    $Nombre = $this->Verificar(Random());
  }
  
  $Minuteses = $this->MinutesModels->getMinutes($parametros[0]);  
  $CodigoPlanilla =Digitos($parametros[0],4);
    if(  $Minuteses == null){
    $Minuteses = $this->MinutesFModels->getMinutesF($parametros[0]); 
    if($Minuteses != null){
      $Nombre =  $Minuteses->Certificado;
    }
     
    if( $Minuteses == null){
    
      echo(json_encode(array("Error"=>"Certificado no existe")));
      return;
     }else{
      if ($Minuteses->Tipo !=2){
        echo(json_encode(array("Error"=>"Envie Acta De Insumos")));
        return;
      } 
      header("Content-type: application/pdf");
      header("Content-Disposition: inline; filename=documento.pdf");
      readfile($Dir.'CertificadoInsumos/'.$Nombre.'.pdf');
      return;
     }
  } 
  
  if ($Minuteses->Tipo !=2){
    echo(json_encode(array("Error"=>"Envie Acta")));
    return;
  } 

  // Si recibimos 2 parametros es indicativo de que el usuario quiere firmar el documento
  $FirmanteInterno= "";
  $FirmanteMaritima = "";
  if(count($parametros) ===2){
    // modificamos la fecha de inspeccion a la fecha actual 
    $Fecha= date("Y-m-d");
    $Vence = AddFechaActual(365);
    $DatosEditar = '{"0":"'.$Minuteses->ID.'","7":"'.$Fecha.'","8":"'.$Vence.'" }';
    $Minuteses->FechaI = $Fecha;
    $Minuteses->FechaV = $Vence ;
    $DatosEditar =  json_decode($DatosEditar, true);
    $isn= $this->MinutesModels->Edit($DatosEditar);
   
    // Buscamos los datos del usuario
    $permiso= $this->GetPremisos();
  if( $permiso == 1){
    $FirmanteInterno =  random_int(1, 5);
    $FirmanteMaritima = "";
  }else{
    $FirmanteInterno = "";
    if($permiso == 2){
      $FirmanteMaritima =  $User;
    }else{
      echo(json_encode(array("Error"=>"No permitido")));
      return ;
    }
  }
  // si no hya firma cargada mandamos error de firma no existe
  if (Existe($Dir.'/Firmas/'.$FirmanteInterno.".png") === false){
    echo(json_encode(array("Error"=>"Firma no existe")));
    return ;
  }
// Verificamos quien firmara el documento segun su nivel 
  if( $permiso == 1){
    // inspector Empresa
    $DatosEditar = '{"0":"'.$Minuteses->ID.'","18":"'.$User.'"}';
    $DatosEditar =  json_decode($DatosEditar, true);

    if($Minuteses->InspectorInsuE == null){
      // si no existe firma del inspector y existe un documento lo eliminamos para crear uno de nuevo 
      $isn= $this->MinutesModels->Edit($DatosEditar);
      if(Existe($Dir.'CertificadoInsumos/'.$Minuteses->CertificadoInsu.'.pdf')=== true){
        unlink($Dir.'CertificadoInsumos/'.$Minuteses->CertificadoInsu.'.pdf');
      }
    }else{
      // de existir firma es por que ya el documento fue firmado por un inspector
      echo(json_encode(array("Error"=>"Documento Firmado")));
      return;
    }
    // verificamos si el documento ya tiene una firma de la autoridad maritima
    $FirmanteMaritima = $Minuteses->InspectorInsu == null ? 'Nada':$Minuteses->InspectorInsu;
  }else{
    if ($this->AuMaritimo === false)
     {
      echo(json_encode(array("Error"=>"Firma No Habilitada")));
     }
  // semejante pero con inspector de la autoridad maritima
    if($Minuteses->InspectorInsu == null){
      $DatosEditar = '{"0":"'.$Minuteses->ID.'","17":"'.$User.'"}';
      $DatosEditar =  json_decode($DatosEditar, true);
      $isn= $this->MinutesModels->Edit($DatosEditar);
      if(Existe($Dir.'CertificadoInsumos/'.$Minuteses->CertificadoInsu.'.pdf')=== true){
        unlink($Dir.'CertificadoInsumos/'.$Minuteses->CertificadoInsu.'.pdf');
      }
    }else{
      echo(json_encode(array("Error"=>"Documento Firmado")));
      return;
    }
    $FirmanteInterno = $Minuteses->InspectorInsuE == null ? 'Nada':$FirmanteInterno ;
  }
 

  }else{
    // si no desea firmar documento igual preguntamos las firmas
    $FirmanteMaritima = $Minuteses->InspectorInsu == null ? 'Nada':$Minuteses->InspectorInsu;
    $FirmanteInterno = $Minuteses->InspectorInsuE == null ? 'Nada':$FirmanteInterno ;
  }



  // verificamos si ya existe un documento creado y guardamos el nombre
  $Nombre = $Minuteses->CertificadoInsu != ""? $Minuteses->CertificadoInsu :$Nombre;
 if ($Minuteses->CertificadoInsu != "" and Existe($Dir.'CertificadoInsumos/'.$Nombre.'.pdf') ){
  // si existe el documento lo mandamos a mostrar
  // y como lo eliminamos previamente de querer crear la firma no hay problema
  header("Content-type: application/pdf");
  header("Content-Disposition: inline; filename=documento.pdf");
  readfile($Dir.'CertificadoInsumos/'.$Nombre.'.pdf');
  return;
 }
// buscamos la informacion que llevara el certificado
 $Orden = $this->ReporDetalleOrdenModels->getReporDetalleOrden($Minuteses->Detalle);

$Hola =json_decode((utf8_encode(json_encode($Orden[0]))),true);
$CodigoDetalle= $Hola[utf8_encode('Código')];
$CodigoOrden= $Hola[utf8_encode('Orden')];

 $DatosArmador  = $this->ClientModels->getClient($Orden[0]->Armador);
  $Embarcacion = $Orden[0]->Embarcacion;
  $Armador =  $Orden[0]->Armador.' '. $Orden[0]->Apellido;
  $Capacidad = $Orden[0]->Capacidad;
  $Serial = $Orden[0]->Balsa;
  $CerAnt = $Minuteses->CertificadoA;
  $Marca = $Orden[0]->Marca;
  $Email =  $Orden[0]->Email;
  $FechaI = $Minuteses->FechaI;
  $Fecha = $Minuteses->Fecha;
  $FechaV = $Minuteses->FechaV;
   $ArrayORden = array('Serial','Tara','CO2','N2','Peso','ULTIMOPH' );
  $BodyCilindros=  $this->BodyTabla($Minuteses->CILINDROS, $ArrayORden); 
  $ArrayProduc = array('Nombre','Cantidad','Vence','Observacion');
  $Observacion = $Minuteses->observacion;
  $Arreglo = [];

  foreach ( $Minuteses->ELEMENTOS as $val){
      if($val->Cantidad >= 0){
        array_push($Arreglo,$val );
      }
   
       
  }
  $BodyProduc =  $this->BodyTabla($Arreglo, $ArrayProduc); 


  if(count($parametros) ===2){
   for ($i = 0; $i < count($Minuteses->ELEMENTOS) ; $i++){
     // '{"Detalle":"15","Status":1,"Observacion":"Prueba","Cantidad":24,"CodigoMo":"2718","CodigoAux","Vence"}'
    if($Minuteses->ELEMENTOS[$i]->Cantidad > 0){
      $Datos = '{"Status":1,"Observacion":"Planilla De Insumos","Cantidad":"'.$Minuteses->ELEMENTOS[$i]->Cantidad.'","CodigoMo":"'.$Minuteses->ELEMENTOS[$i]->CodigoM.'","Vence": "'.$Minuteses->ELEMENTOS[$i]->Vence.'" }';
      $Datos= json_decode($Datos, true);
      $this->WarehouseModels->Edit($Datos);
    }
 
   } 
  }
  $Year = date("Y");


  
// coder for CodeIgniter TCPDF Integration
// make new advance pdf document
$tcpdf = new Pdf('P', 'mm', 'A4', true, 'UTF-8', false);
 
// set document information

$tcpdf->SetAuthor('segmarind');
$tcpdf->SetTitle('Certificado De Acta de Insumos');
$tcpdf->SetSubject('segmarind');
$tcpdf->SetKeywords('TCPDF, PDF, segmarind, test, guide');
 
//set default header information
 
$tcpdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, "", "", array(0,65,256), array(0,65,127));


$tcpdf->setFooterData(array(0,65,0), array(0,65,127));
 
//set header  textual styles
$tcpdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
//set footer textual styles
$tcpdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
 
//set default monospaced textual style
$tcpdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
 
// set default margins
$tcpdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// Set Header Margin
$tcpdf->SetHeaderMargin(PDF_MARGIN_HEADER);
// Set Footer Margin
$tcpdf->SetFooterMargin(PDF_MARGIN_FOOTER);
 
// set auto for page breaks
$tcpdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image for scale factor
$tcpdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// it is optional :: set some language-dependent strings
if (@file_exists(dirname(__FILE__).'/lang/eng.php'))
{
// optional
require_once(dirname(__FILE__).'/lang/eng.php');
// optional
$tcpdf->setLanguageArray($l);
}
 
// set default font for subsetting mode
$tcpdf->setFontSubsetting(true);



// Set textual style
// dejavusans is an UTF-8 Unicode textual style, on the off chance that you just need to
// print standard ASCII roasts, you can utilize center text styles like
// helvetica or times to lessen record estimate.
//$tcpdf->SetFont('dejavusans', '', 14, '', true);
 
// Add a new page
// This technique has a few choices, check the source code documentation for more data.
$tcpdf->AddPage();

if($FirmanteInterno != "Nada"){
  $tcpdf->Image( $Dir.'/Firmas/'.$FirmanteInterno.".png", 130, 190, 60);
}
if($FirmanteMaritima != "Nada"){
  $tcpdf->Image( $Dir.'/Firmas/'.$FirmanteMaritima.".png", 20, 190, 60);
}


$style = array(
  'border' => 0,
  'vpadding' => 'auto',
  'hpadding' => 'auto',
  'fgcolor' => array(0,0,0),
  'bgcolor' => array(255,255,255),
  'module_width' => 1, // width of a single module in points
  'module_height' => 1 // height of a single module in points
);
 
// set text shadow for effect
/*
$tcpdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,197,198), 'opacity'=>1, 'blend_mode'=>'Normal'));
 
//Set some substance to print
 */
$set_html = <<<EOD
 
 
<h3  style="text-align: center; text-decoration: underline;">ACTA DE INSUMOS DE BALSAS SALVAVIDAS</h3>
<h4  style="text-align: center;">SMI $CodigoPlanilla/$Year</h4>

<br/>
<span><FONT SIZE="9"><b>1.-          IDENTIFICACIÓN BALSA</b></FONT></span>
<br>

<table   border="1" >

<tr>
<th ><FONT SIZE="8"><b> Embarcación</b></FONT></th>
<th ><FONT SIZE="8"> $Embarcacion</FONT></th>
<th ><FONT SIZE="8"><b> PACK </b></FONT></th>
<th ><FONT SIZE="8"> $Minuteses->Pack </FONT></th>
</tr>
  <tr >
  <td ><FONT SIZE="8"><b>ARMADOR</b></FONT></td>
  <td ><FONT SIZE="8"> $Armador</FONT></td> 
  <td ><FONT SIZE="8"><b> CAPACIDAD</b></FONT></td>
  <td ><FONT SIZE="8"> $Capacidad </FONT></td>
  </tr>

  <tr>
  <td ><FONT SIZE="8"><b>N° DE SERIE</b></FONT></td>
  <td ><FONT SIZE="8"> $Serial  </FONT></td>
  <td ><FONT SIZE="8"><b> CERTIFICADO ANTERIOR</b></FONT></td>
  <td ><FONT SIZE="8"> $CerAnt</FONT></td>
  </tr>
  <tr>
  <td ><FONT SIZE="8"><b>MARCA/MODELO</b></FONT></td>
  <td ><FONT SIZE="8"> $Marca</FONT></td>
  <td ><FONT SIZE="8"><b> FECHA DE INSPECCIÓN</b></FONT></td>
  <td ><FONT SIZE="8">  $FechaI</FONT></td>
  </tr>
  <tr>
  <td ><FONT SIZE="8"><b>FECHA DE FABRICACIÓN</b></FONT></td>
  <td ><FONT SIZE="8"> $Fecha </FONT></td>
  <td ><FONT SIZE="8"><b> FECHA DE VENCIMIENTO</b></FONT></td>
  <td ><FONT SIZE="8"> $FechaV </FONT></td>
  </tr>

</table>
<br/>
<span><FONT SIZE="9"><b>2.-          CILINDRO(S) DE INFLADO(S)</b></FONT></span>
<br>

<table   border="1" >

<tr>
<th ><FONT SIZE="8"><b> SERIE</b></FONT></th>
<th ><FONT SIZE="8"><b> TARA (Kg)</b></FONT></th>
<th ><FONT SIZE="8"><b> CO2 (Kg) </b></FONT></th>
<th ><FONT SIZE="8"><b> N2 (Kg)</b></FONT></th>
<th ><FONT SIZE="8"><b> PESO TOTAL (Kg)</b></FONT></th>
<th ><FONT SIZE="8"><b> ULTIMO PH</b></FONT></th>
</tr>
$BodyCilindros

</table>
<br/>
<span><FONT SIZE="9"><b>4.-          VENCIMIENTO DE EQUIPO</b></FONT></span>
<br>

<table   border="1" >

<tr>
<th ><FONT SIZE="8"><b> ELEMENTO</b></FONT></th>
<th ><FONT SIZE="8"><b> CANTIDAD</b></FONT></th>
<th ><FONT SIZE="8"><b> VENCIMIENTO</b></FONT></th>
<th ><FONT SIZE="8"><b> OBSERVACIONES</b></FONT></th>
</tr>
$BodyProduc


</table>
  Observaciones:   $Observacion
 
EOD;

//Print content utilizing writeHTMLCell()
$tcpdf->writeHTMLCell(0, 0, '', '', $set_html, 0, 1, 0, true, '', true);
$MI_HOST = $this->ConfigModels->Value('MI_HOST');
$tcpdf->write2DBarcode($MI_HOST.'CodeIgniter/CertificadoInsumos/'.$Nombre.'', 'QRCODE,Q', 90, 235, 30, 30, $style, 'C');
if ($this->AuMaritimo === true){

$tcpdf->SetFont("", 'B', 10);
$tcpdf->MultiCell(70,5, "____________________________
   Inspector Autoridad Marítima
  ", 0, 'C', 0, 0, '', 235, true, 0, false, false, 35, 'M', false);
}




  $tcpdf->MultiCell(70,5, "____________________________
  Inspector Empresa
  Resolución C.P.CHB.  N° 12625/228
 ", 0, 'C', 0, 1, 125, 235, true, 0, false, false, 40, 'M', false);

 $tcpdf->SetFont("", '', 8);
 $MI_HOST = $this->ConfigModels->Value('MI_HOST');
$tcpdf->MultiCell(175,5, "Puede verificar la valides de este documiento en: ".$MI_HOST."CodeIgniter/CertificadoInsumos/$Nombre ", 0, 'C', 0, 0, 10, 265, true, 0, false, false, 35, 'M', true);
$tcpdf->SetFont("", 'B', 10);

 switch (count($parametros)) { 
  
  case 0:
    break;
  case 1:
    $tcpdf->Output('Certificado.pdf', 'I');
  break;
  case 2:
   if (Existe($Dir.'/CertificadoInsumos/') === false){
    CrearCarpeta($Dir.'/CertificadoInsumos/');
   
    
   }
    $this->MinutesModels->GuardarActa($parametros[0],$Nombre);
    $tcpdf->Output($Dir.'/CertificadoInsumos/'.$Nombre.'.pdf', 'F');
    if($FirmanteMaritima != 'Nada' AND $FirmanteInterno != 'Nada' ){
      //$DatosArmador aqui enviamos los datos del certificado
      // actualizamos la fecha de vencimiento  a un ano
    }
   
    
    header("Content-type: application/pdf");
    header("Content-Disposition: inline; filename=documento.pdf");
    readfile($Dir.'CertificadoInsumos/'.$Nombre.'.pdf');
   
  
    return;
    
    break;
  }





//
// successfully created CodeIgniter TCPDF Integration
}

function BodyTabla($arr,$Titulos){
 
  $Fi = "";
  foreach ($arr as $Fila){
    $Fi=  $Fi.'<tr>';
    $Colum= '';
 
    
         for( $i=0; $i< count($Titulos); $i++  ){
          foreach (  $Fila as $key => $val){
          if( $Titulos[$i] ===$key){
            $Colum =  $Colum. '<td ><FONT SIZE="8"> '. $val.' </FONT></td>';
          }
        }
        }
    
    $Fi= $Fi.$Colum.'</tr>';
  }
return $Fi;
}

protected function middleware()
{
  return ['Sesion','Permisos'];
}
}
/* end CertificadoInsumosCtrl.php file for CodeIgniter TCPDF Integration */
?>