<?php

namespace App\Http\Controllers;

use Oriceon\PdfMerger\Facades\PdfMerger;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use stdClass;
use Route;
use DB;

class NewLEDDocsController extends Controller {
    

    public static function documentosBackendDetalleDocNueva() {
        $doc_id = Request::input('doc_id');
		$integ_carga = Request::input('integ_carga');
		$integ_verif = Request::input('integ_verif');
		$integ_rech = Request::input('integ_rech');
		$tipo_doc = Request::input('tipo_doc');
		$de_informe_tareas = isset($_POST['de_informe_tareas']) ? Request::input('de_informe_tareas') : null;
		$informe = isset($_POST['informe']) ? Request::input('informe') : null;
		$tarea = isset($_POST['tarea']) ? Request::input('tarea') : null;
		$doc = SQLConnection::backendStoreProcedure('LN_docs_backend', array('detalle',$doc_id), 'selectOne');
		$ruta = '/led/carga-documentacion-backend';
		$titulo_navbar = 'Carga de Documento LED';
		//
		$dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $doc_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
		if ( $tipo_doc == env('TIPO_DOC_CARGA_XLS') || $tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL') || $tipo_doc == env('DOC_ID_PERFIL_ACADEMICO_UNIVERSITARIO') || $tipo_doc == env('DOC_ID_PERFIL_ACADEMICO_POSGRADO') || $tipo_doc == env('DOC_ID_MATRICULAS_HABILITANTES') || $tipo_doc == env('TIPO_DOC_CODEM') || $tipo_doc == env('DOC_ID_DATOS_PERSONALES') || $tipo_doc == env('DOC_ID_MOVILIDAD') || $tipo_doc == env('DOC_ID_ZONA_RESIDENCIA') || $tipo_doc == env('DOC_ID_GRUPO_FAMILIAR') || $tipo_doc == env('DOC_ID_PERFIL_EDUCATIVO_INICIAL') || $tipo_doc == env('DOC_ID_CONTACTO_EMERGENCIA') || $tipo_doc == env('TIPO_DOC_ANTECEDENTES_PENALES') || $tipo_doc == env('TIPO_DOC_SOCIOAMBIENTES') || $tipo_doc == env('TIPO_DOC_APORTADO_CANDIDATO') || $tipo_doc == env('TIPO_DOC_CERTIFICACION_NEGATIVA') || $tipo_doc == env('TIPO_DOC_CV') || $tipo_doc == env('TIPO_DOC_AUTORIZACION_PERFIL_ACADEMICO') || $tipo_doc == env('TIPO_DOC_ANTECEDENTES_COMERCIALES') || $tipo_doc == env('TIPO_DOC_LICENCIA_CONDUCIR') || $tipo_doc == env('TIPO_DOC_DATOS_PERSONALES_CONFIDENCIALES') || $tipo_doc == env('TIPO_DOC_REFERENCIA_LABORAL') || $tipo_doc == env('TIPO_DOC_REFERENCIAS_ACADEMICAS') || $tipo_doc == env('TIPO_DOC_HISTORIAL_LABORAL') || $tipo_doc == env('DOC_ID_FOTO_PERFIL') || $tipo_doc == env('DOC_ID_DATOS_PERSONALES_AGRUPADOS') || $tipo_doc == env('DOC_ID_ZONA_DE_RESIDENCIA_AGRUPADO') || $tipo_doc == env('DOC_ID_PERFIL_EDUCATIVO_EXTENDIDO') || $tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL_AGRUPADO') ) {
			// $temp = SQLConnection::backendStoreProcedure('LN_actualizar_legajo', array($doc->contraparte, $doc->gestion, NULL), 'selectOne');
			$doc_group = 1;
			if ( $tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL') ){
				$seccion = 'experiencia-laboral';
			} elseif ( $tipo_doc == env('DOC_ID_DATOS_PERSONALES') ){
				$seccion = 'datos-personales';
			} elseif ( $tipo_doc == env('DOC_ID_GRUPO_FAMILIAR') ){
				$seccion = 'grupo-familiar';
			} elseif ( $tipo_doc == env('DOC_ID_PERFIL_EDUCATIVO_INICIAL') ){
				$seccion = 'perfil-academico';		
			} elseif ( $tipo_doc == env('TIPO_DOC_REFERENCIA_LABORAL') ){
				$seccion = 'referencia-laboral';		
			} elseif ( $tipo_doc == env('TIPO_DOC_CARGA_XLS') ){
				$seccion = 'carga-xls';
			} else if($tipo_doc == env('TIPO_DOC_REFERENCIAS_ACADEMICAS')){
				$seccion = 'referencias-academicas';
			} 
			else {
				// UNO DE LAS SECCIONES QUE NO TIENE EVENTOS EN EL JS
				$seccion = 'contacto-emergencia';
			}
			//
			if ( $tipo_doc != env('TIPO_DOC_DATOS_PERSONALES_CONFIDENCIALES') ){
				SQLConnection::backendStoreProcedure('LN_actualizar_legajo_2022',array($doc->contraparte));
			}
			//
			if ($de_informe_tareas != null){
				return view('informes-blue/actividades-tarea/carga_detalle_dagas_internas')->with(compact(['doc','integ_carga','integ_verif','integ_rech','doc_id','tipo_doc','doc_group','seccion','ruta','de_informe_tareas','informe','tarea']));
			}else {
				return view('/led/carga_documentacion/carga_documentacion_detalle_nueva')->with(compact(['doc','integ_carga','integ_verif','integ_rech','doc_id','tipo_doc','doc_group','seccion','ruta','titulo_navbar']));
			}
		} 
		if ($doc->es_balance == 1) {
			// Carga de documento Balance - Campos fijos
			$file_exists = false;
			$file_path = null;
			$file_url = null;
			if (!empty($doc->ruta_archivo) and !empty($doc->id_externo)) {
				$file_path = env('PATH_COMPARTIDOS') . $doc->ruta_archivo;
				//$file_url = env('RUTA_COMPARTIDOS') . $doc->ruta_archivo;;
				 $file_url = env('RUTA_COMPARTIDOS') . $doc->ruta_archivo;
				$file_exists = file_exists($file_path);
			}

			$monedas = SQLConnection::backendStoreProcedure('obtener_Monedas', array(), 'select');
			// Si viene desde una tarea de informe, renderizar dentro del modal de DAGAs internas
			    if ($de_informe_tareas != null) {
			        $seccion = 'balance';
			        $doc_group = 0;
			        return view('informes-blue/actividades-tarea/carga_detalle_dagas_internas')
			            ->with(compact(['doc', 'integ_carga', 'integ_verif', 'integ_rech', 'doc_id', 'tipo_doc', 'doc_group', 'seccion', 'de_informe_tareas', 'informe', 'tarea']));
			    }

//			return view('/led/carga_documentacion_balance')->with(compact(['doc', 'monedas', 'file_path','file_url','file_exists']));
			return view('/led/carga_documentacion_balance')->with(compact(['doc', 'monedas', 'file_path','file_url','file_exists','de_informe_tareas','informe','tarea']));
		}
		else {

			/* Información de los campos del documento */
			$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
			$secciones = [];

			$hay_campos = false;
			$hay_archivo = false;	
			foreach ($flds as $fld) {
				$hay_campos = !$hay_campos ? ( $fld->tipo_campo != 'F' ? true : $hay_campos ) : $hay_campos;
				$hay_archivo = !$hay_archivo ? ( $fld->tipo_campo == 'F' ? true : $hay_archivo ) : $hay_archivo;
			}	

			$data = [];
			foreach ($flds as $k => $fld) {

				if($fld->tipo_campo=='G') {
					/* encabezados de la tabla */
					$c1 = SQLConnection::backendStoreProcedure('LN_campos_col_', array('search', $fld->campo, null, null, NULL, NULL, NULL, NULL), 'select');
					$cols=[];
					foreach ($c1 as $clm) {
						$cols[] = $clm->etiqueta;
					}

					/* configuración de los campos y valores de la tabla */
					$c2 = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld->doc_id, $fld->seccion, $fld->campo), 'select');
					$valores = [];
					foreach ($c2 as $k1 => $valor) {
						$valores[$valor->fila][$valor->col]['valor_texto'] = $valor->valor_texto;
						$valores[$valor->fila][$valor->col]['valor_fecha'] = $valor->valor_fecha;
						$valores[$valor->fila][$valor->col]['valor_fecha_str'] = $valor->valor_fecha_str;
						$valores[$valor->fila][$valor->col]['valor_numerico'] = $valor->valor_numerico;
						$valores[$valor->fila][$valor->col]['tipo_campo'] = $valor->tipo_campo;
						$valores[$valor->fila][$valor->col]['longitud'] = $valor->longitud;
						$valores[$valor->fila][$valor->col]['decimales'] = $valor->decimales;
						$valores[$valor->fila][$valor->col]['tipo_archivo'] = $valor->tipo_archivo;
						$valores[$valor->fila][$valor->col]['multiple'] = $valor->multiple;


						//$valores[$valor->fila][$valor->col]['opciones'] = $valor->opciones;

						if($valor->tipo_campo == 'S' OR $valor->tipo_campo == 'R' OR $valor->tipo_campo == 'C') {
						
							if(strlen($valor->opciones) > 0) {						
								$r = explode("^", $valor->opciones);
								$txt = [];
								$val = [];
								if(sizeof($r) >= 2) {
									$txt = explode("|", $r[0]);
									$val = explode("|", $r[1]);
								}
								$valores[$valor->fila][$valor->col]['opciones']['txt'] = $txt;
								$valores[$valor->fila][$valor->col]['opciones']['val'] = $val;
							}

						}
					}

					$fld->headers = $cols;
					$fld->values = $valores;
				}

				else {

					/* campo no tabla */

					if($fld->tipo_campo == 'S' OR $fld->tipo_campo == 'R' OR $fld->tipo_campo == 'C') {

						$valores = [];

						if(strlen($fld->opciones) > 0) {						
							$r = explode("^", $fld->opciones);
							$txt = [];
							$val = [];
							if(sizeof($r) >= 2) {
								$txt = explode("|", $r[0]);
								$val = explode("|", $r[1]);
							}
							$valores[] = $txt;
							$valores[] = $val;
						}

						$fld->opciones = $valores;

					}


				}

				$data[$fld->titulo_seccion][] = $fld;

				if ($fld->titulo_seccion != '') {
					$secciones[$fld->titulo_seccion]['texto_bajada'] = $fld->texto_bajada;
					$secciones[$fld->titulo_seccion]['texto_pie'] = $fld->texto_pie;
				}
			}
			/* Fin información de los campos del documento */
			

			/* Archivo adjunto */
			if($doc->es_balance > 0) {
				$file_path = env('PATH_COMPARTIDOS') . $doc->ruta_archivo;
				$file_url = env('RUTA_COMPARTIDOS') . $doc->ruta_archivo;;
			}
			else {
				$file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
				$file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
			}
			$file_exists = file_exists($file_path);

//			return view('/led/carga_documentacion_detalle')->with(compact(['doc','secciones', 'data', 'file_exists', 'file_path', 'file_url','integ_carga','integ_verif','integ_rech','ruta','titulo_navbar','tipo_doc']));
			 return view('/led/carga_documentacion_detalle')->with(compact(['doc','secciones', 'data', 'file_exists', 'file_path', 'file_url','integ_carga','integ_verif','integ_rech','ruta','titulo_navbar','tipo_doc','de_informe_tareas','informe','tarea']));
		}

    }

	public static function newDocumentosDescartarConfirm() {
		$doc_id = Request::input('doc_id');
		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
		// $doc = SQLConnection::backendStoreProcedure('LN_docs_backend', array('detalle',$doc_id), 'selectOne');
		// dd($doc);
		$integ_carga =  Request::input('integ_carga');
		$integ_verif = Request::input('integ_verif');
		$integ_rech = Request::input('integ_rech');
		$temp = Misc::integridadDocStore($doc,3,$integ_carga,$integ_verif,$integ_rech,1);
		return view('/led/carga_documentacion/carga_documentacion_descartar_confirm')->with(compact(['doc','integ_carga','integ_verif','integ_rech']));
	}

	// FUNCION ENCARGADA DE RECIBIR LOS DATOS DE LOS FORMULARIOS Y GUARDARLOS EN LA BASE DE DATOS ( ESTA FUNCION RECIBE ALGUNOS FORMULARIOS SECCIONADOS PARA GUARDARLOS EN LA BASE DE DATOS )
	public static function GuardarDatosDocumento() {
		$docid = Request::input('doc_id');
		$enviar = '0';
		//-------- SE HA AGREGADO NUEVAS TECNICAS PARA QUE CUANDO SE 
		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
		if ( $doc->estado_doc == 'V' ){
			return;
		}
		$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
		//--------
		foreach ($flds as $h => $fld) {
			//-----------
			if($fld->tipo_campo != 'G') {
				// Analizamos por separado campos texto, numérico, fecha y select de opciones de los radio y checkboxes o si/no
				if($fld->tipo_campo == 'N' || $fld->tipo_campo == 'T' || $fld->tipo_campo == 'D' || $fld->tipo_campo == 'M' || $fld->tipo_campo == 'S') {					
					//$vf = ($fld->tipo_campo == 'D') ? ( null != Request::input($fld->FORM_NAME) ? date_create_from_format('d/m/Y', Request::input($fld->FORM_NAME)) : null ) : null;
					if ( $fld->tipo_campo == 'D' ){
						if ( isset($_POST[$fld->FORM_NAME]) ){
							$vf = date_create_from_format('d/m/Y', Request::input($fld->FORM_NAME));
						} else {
							$vf = ( !is_null($fld->valor_fecha) ) ? $fld->valor_fecha : null;
						}
					} else {
						$vf = null;
					}
					if ( $fld->tipo_campo == 'T' || $fld->tipo_campo == 'M' || $fld->tipo_campo == 'S' ){
						if ( isset($_POST[$fld->FORM_NAME]) ){
							$vt = Request::input($fld->FORM_NAME);
						} else {
							$vt = ( !is_null($fld->valor_texto) ) ? $fld->valor_texto : null;
						}
					} else {
						$vt = null;
					}
					if ( $fld->tipo_campo == 'N' ){
						if ( isset($_POST[$fld->FORM_NAME]) ){
							$vn = str_replace(",", ".", Request::input($fld->FORM_NAME));
						} else {
							$vn = ( !is_null($fld->valor_numerico) ) ? $fld->valor_numerico : null;
						}
					} else {
						$vn = null;
					}
				}
				//-----------
				if ($fld->tipo_campo == 'B') {
					$vf = null;
					$vt = null;
					$vn = null;
					if( isset($_POST[$fld->FORM_NAME]) ){
						$vn = Request::input($fld->FORM_NAME);
					} elseif ( isset($_POST['radio-'.$fld->FORM_NAME]) ) {
						if ( Request::input('radio-'.$fld->FORM_NAME) != '2' && ( Request::input('radio-'.$fld->FORM_NAME) == '0' || Request::input('radio-'.$fld->FORM_NAME) == '1' ) ){
							$vn = Request::input('radio-'.$fld->FORM_NAME);
						}
					} else {
						$vn = ( !is_null($fld->valor_numerico) ) ? $fld->valor_numerico : null;
					}
				}
				//----------
				if ($fld->tipo_campo == 'R') {
					$vf = null;
					$vt = null;
					$vn = null;
					if( isset($_POST[$fld->FORM_NAME]) ){
						$vt = Request::input($fld->FORM_NAME);
					} else {
						$vt = ( !is_null($fld->valor_texto) ) ? $fld->valor_texto : null ;
					}
				}
				//----------
				if ($fld->tipo_campo == 'C') {
					$vf = null;
					$vt = null;
					$vn = null;
					if( isset($_POST[$fld->FORM_NAME]) ){
						$vt = implode(",", Request::input($fld->FORM_NAME));
					} else {
						$vt = null;
					}
				}
				if ($fld->tipo_campo != 'F' && $fld->tipo_campo != 'L') {
					$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $docid, $fld->seccion, $fld->campo, $vf, $vt, $vn, null, null, null), 'selectOne');
				}
			}
			else {
				$tiene_archivo = 0;
				/* tabla */
				for($c = 1; $c <= $fld->columnas; $c++) {
					//----------
					$espec = SQLConnection::backendStoreProcedure('LN_campos_col_', array('select', $fld->campo, $c, null, null, null, null, null), 'selectOne');					
					$valores_col = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld->doc_id, $fld->seccion, $fld->campo), 'select');
					//-----------
					for($f = 1; $f <= $fld->filas; $f++){
						$valor_col = '';
						//
						foreach( $valores_col as $clave => $val ){
							if ( $val->fila == $f && $val->col == $c ){
								$valor_col = $val;
								break;
							}
							continue;
						}
						//-------------
						$fname = 'campo_'.$fld->seccion.'_'.$fld->campo.'_'.$f.'_'.$c;
						if ( $espec->tipo_campo == 'F' ){
							// si el campo esta cargado
							if ( isset($_FILES[$fname]) ){
								$tiene_archivo++;
								//
								if ( !file_exists(env('PATH_DOCUMENTOS') . '/' . $doc->cliente) ){
									mkdir(env('PATH_DOCUMENTOS') . '/' . $doc->cliente);
								}
								//
								if ( !file_exists(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte) ){
									mkdir(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte);
								}
								//
								if ( !file_exists(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion) ){
									mkdir(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion);
								}
								//
								if ( !file_exists(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id) ){
									mkdir(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id);
								}
								//
								if ( !file_exists(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id .'/'. $fld->campo) ){
									mkdir(env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id .'/'. $fld->campo);
								}
								// las imagenes cargadas se unen en un PDF
								if ( $espec->multiple && is_array($_FILES[$fname]['size']) ){
									// si es una lista de archivos
									$path_file_row_pdf = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '/'. $fld->campo .'/'. $f .'.pdf';
									//$joinedpdf = new PdfManage;
                                    $joinedpdf = PdfMerger::init();                                    
									$files_uploaded = false;
									//
									$cant_archivos = count($_FILES[$fname]['size']);
									if ( $cant_archivos && !empty($_FILES[$fname]['tmp_name'][0]) ){
										$i = 0;
										while ( $i < $cant_archivos ){
											//
											$path_file_row_i = env('PATH_DOCUMENTOS') . DIRECTORY_SEPARATOR . $doc->cliente . DIRECTORY_SEPARATOR . $doc->contraparte . DIRECTORY_SEPARATOR . $doc->gestion . DIRECTORY_SEPARATOR . $doc->doc_id . DIRECTORY_SEPARATOR. $fld->campo .DIRECTORY_SEPARATOR. $f.'_'.$i .'.png';
											$path_file_row_pdf_i = env('PATH_DOCUMENTOS') . DIRECTORY_SEPARATOR . $doc->cliente . DIRECTORY_SEPARATOR . $doc->contraparte . DIRECTORY_SEPARATOR . $doc->gestion . DIRECTORY_SEPARATOR . $doc->doc_id . DIRECTORY_SEPARATOR. $fld->campo .DIRECTORY_SEPARATOR. $f.'_'.$i .'.pdf';
											$path_file_row_html_i = env('PATH_DOCUMENTOS') . DIRECTORY_SEPARATOR . $doc->cliente . DIRECTORY_SEPARATOR . $doc->contraparte . DIRECTORY_SEPARATOR . $doc->gestion . DIRECTORY_SEPARATOR . $doc->doc_id . DIRECTORY_SEPARATOR. $fld->campo .DIRECTORY_SEPARATOR. $f.'_'.$i .'.html';
											//
											if ( file_exists($path_file_row_i) ){
												unlink($path_file_row_i);
											}
											//
											if ( file_exists($path_file_row_pdf_i) ){
												unlink($path_file_row_pdf_i);
											}
											//
											if ( file_exists($path_file_row_html_i) ){
												unlink($path_file_row_html_i);
											}
											//
											if ( $_FILES[$fname]['size'][$i] != 0 && preg_match('/image/',$_FILES[$fname]['type'][$i]) ){
												if ( move_uploaded_file($_FILES[$fname]['tmp_name'][$i],$path_file_row_i) ){
													self::imgToPDF($path_file_row_i,$path_file_row_html_i,$path_file_row_pdf_i);
													//
													$joinedpdf->addPDF($path_file_row_pdf_i, 'all');
												}
											}
											//
											$i++;
										}
										//
										if ( file_exists($path_file_row_pdf) ){
											unlink($path_file_row_pdf);
										}
										// se hace el merge
										$joinedpdf->merge('file', $path_file_row_pdf, 'P');
                                        $joinedpdf->save($path);
										//
										$i--;
										while( $i >= 0 ){
											$path_file_row_pdf_i = env('PATH_DOCUMENTOS') . DIRECTORY_SEPARATOR . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '/'. $fld->campo .'/'. $f.'_'.$i .'.pdf';
											//
											if ( file_exists($path_file_row_pdf_i) ){
												unlink($path_file_row_pdf_i);
											}
											//
											$i--;
										}
									}
								} else {
									// si es un archivo nada mas
									$path_file_row = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '/'. $fld->campo .'/'. $f.'_'.$c .'.png';
									$path_file_row_pdf = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '/'. $fld->campo .'/'. $f.'_'.$c .'.pdf';
									$path_file_row_html = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '/'. $fld->campo .'/'. $f.'_'.$c .'.html';
									//
									if ( file_exists($path_file_row) ){
										unlink($path_file_row);
									}
									//								
									if ( $_FILES[$fname]['size'] != 0 && preg_match('/image/',$_FILES[$fname]['type'][0]) ){
										if ( move_uploaded_file($_FILES[$fname]['tmp_name'][0],$path_file_row) ){											
											if ( $espec->tipo_archivo == 'I' ){												
											} else {
												self::imgToPDF($path_file_row,$path_file_row_html,$path_file_row_pdf);
											}
										}
									} 
								}
							}
						}
						// Analizamos por separado campos texto, numérico, fecha y select de opciones de los radio y checkboxes o si/no
						if($espec->tipo_campo == 'N' || $espec->tipo_campo == 'T' || $espec->tipo_campo == 'D' || $espec->tipo_campo == 'M' || $espec->tipo_campo == 'S') {
							if ( $espec->tipo_campo == 'D' ){
								if ( isset($_POST[$fname]) ){
									$vf = (!empty($_POST[$fname])) ? date_create_from_format('Y-m-d', Request::input($fname)) : null;
								} else {
									$vf = ( !is_null($valor_col->valor_fecha) ) ? $valor_col->valor_fecha : null;
								}
							} else {
								$vf = null;
							}
							if ( $espec->tipo_campo == 'T' || $espec->tipo_campo == 'M' || $espec->tipo_campo == 'S' ){
								//
								if ( isset($_POST[$fname]) ){
									$vt = Request::input($fname);
								} else {
									$vt = ( !is_null($valor_col->valor_texto) ) ? $valor_col->valor_texto : null;
								}
							} else {
								$vt = null;
							}
							if ( $espec->tipo_campo == 'N' ){
								if ( isset($_POST[$fname]) ){
									$vn = str_replace(",", ".", Request::input($fname));
								} else {
									$vn = ( !is_null($valor_col->valor_numerico) ) ? $valor_col->valor_numerico : null;
								}
							} else {
								$vn = null;
							}
						}
						//----------
						if($espec->tipo_campo == 'B') {
							$vf = null;
							$vt = null;
							$vn = null;
							if( isset($_POST[$fname]) ){
								$vn = Request::input($fname);
							} elseif ( isset($_POST['radio-'.$fname]) ) {
								if ( Request::input('radio-'.$fname) != '2' && ( Request::input('radio-'.$fname) != '1' || Request::input('radio-'.$fname) != '0' ) ){
									$vn = Request::input('radio-'.$fname);
								}
							} else {
								$vn = ( !is_null($valor_col->valor_numerico) ) ? $valor_col->valor_numerico : null;
							}
						}
						//----------
						if ($espec->tipo_campo == 'R') {
							$vf = null;
							$vt = null;
							$vn = null;
							if( isset($_POST[$fname]) ) {
								$vt = Request::input($fname);
							} else {
								$vt = ( !is_null($valor_col->valor_texto) ) ? $valor_col->valor_texto : null;
							}
						}
						//----------
						if ($espec->tipo_campo == 'C') {
							$vf = null;
							$vt = null;
							$vn = null;
							if( isset($_POST[$fname]) ) {
								$vt = implode(",", Request::input($fname));
							} else {
								$vt = ( !is_null($valor_col->valor_texto) ) ? $valor_col->valor_texto : null;
								// $vt = null;
							}

						}
						//-----------
						$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $docid, $fld->seccion, $fld->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
					}
				}
				//
				if ( $tiene_archivo ){
					self::generarArchivoTabla($doc->cliente,$doc->contraparte,$doc->gestion,$doc->es_evidencia,$doc->doc_id,$fld->campo,$fld->filas);
				}
			}
		}

		return 0;
		// SECCION QUE ENVIA EL DOCUMENTO
		// if ( $enviar == 1 ){
		// 	$docs = SQLConnection::backendStoreProcedure('LN_docs_', array('ingresado', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'select');
        //     self::integridadDocStore($doc);
		// 	$temp = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('cumplimiento_documentos', null, null, null, Session::get('identificacion')['contraparte']), 'selectOne');
		// 	$temp = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('score_final_contraparte', null, null, null, Session::get('identificacion')['contraparte']), 'selectOne');
		// }
		// $doc_id = Request::input('doc_id');
		// $next_url = Request::input('next');
		//----------
		// return 0;
	}

	/**
	 * Funcion que se encarga
	 * de generar el archivo pdf de
	 * los archivos grabados para cada
	 * input de las filas de la tabla
	 * @access private
	 * @param object
	 * @param object
	 */
	private static function generarArchivoTablaOrg($cliente,$contraparte,$gestion,$es_evidencia,$doc_id,$campo,$filas){
		$path_pdf = env('PATH_DOCUMENTOS') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '/' . $doc_id . '/'. $campo .'.pdf';
		//
		if ( file_exists($path_pdf) ){
			unlink($path_pdf);
		}
		//
		$archivos_img = [];
		for($i=0;$i < $filas; $i++){
			$path_file_row = env('PATH_DOCUMENTOS') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '/' . $doc_id . '/'. $campo .'/'. $i;
			//
			if ( file_exists($path_file_row.'.png') ){
				$archivos_img[] = $path_file_row;
			}
		}
		//
		if ( !empty($archivos_img) ){
			foreach( $archivos_img as $img ){
				$html = '<html><head><title></title></head><body><div align="center"><img src="file://' . $img . '.png" border="0" width="1000" /></div></body></html>';
				$filehtml = $img .'.html';
				$path = $img .'.pdf';
				//
				file_put_contents($filehtml, utf8_decode($html));
				chmod($filehtml, 0777);
				// la imagen convertida a PDF queda en la misma carpeta con el mismo nombre pero convertida a PDF
				exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --viewport-size 1920x1080 --zoom 1 ". $filehtml . " " . $path);
				exec('exiftool -all= '.$path);
				//
				unlink($filehtml);
			}
			//
            $joinedpdf = PdfMerger::init();
            			
			foreach( $archivos_img as $img ){
				$path = $img .'.pdf';
                $joinedpdf->addPDF($path, 'all');
			}
			
			//$joinedpdf->merge('file', $path_pdf, 'P');
            $joinedpdf->merge('file');
            $joinedpdf->save($path);
			
			foreach( $archivos_img as $img ){
				unlink($img.'.pdf');
			}
		}
		//
		if ( $es_evidencia ){
			// Si es evidencia genera el pdf del archivo
			$evidencia_path = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.$doc_id.'.pdf';
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias') ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias');
			}
			//
			if ( file_exists($evidencia_path) ){
				unlink($evidencia_path);
			}
			//
			copy($path_pdf,$evidencia_path);
		}
		//
		return 1;
	}

	/**
	 * Funcion que se encarga
	 * de generar el archivo pdf de
	 * los archivos grabados para cada
	 * input de las filas de la tabla
	 * @access private
	 * @param object
	 * @param object
	 */
	private static function generarArchivoTabla($cliente,$contraparte,$gestion,$es_evidencia,$doc_id,$campo,$filas){
		$path_pdf = env('PATH_DOCUMENTOS') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '/' . $doc_id . '/'. $campo .'.pdf';
		//
		if ( $es_evidencia ){
			// Si es evidencia genera el pdf del archivo
			$path_pdf = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.$doc_id.'.pdf';
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion);
			}
			//
			if ( !file_exists(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias') ){
				mkdir(env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'evidencias');
			}
			//
		}
		//
		if ( file_exists($path_pdf) ){
			unlink($path_pdf);
		}
		//
		$archivos_img = [];
		for($i=0;$i < $filas; $i++){
			$path_file_row = env('PATH_DOCUMENTOS') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '/' . $doc_id . '/'. $campo .'/'. $i;
			//
			if ( file_exists($path_file_row.'.pdf') ){
				$archivos_img[] = $path_file_row;
			}
		}
		//
		if ( !empty($archivos_img) ){            
			//$joinedpdf = new PdfManage;
            $joinedpdf = PdfMerger::init();                       
			//
			foreach( $archivos_img as $img ){
				$path = $img .'.pdf';
				$joinedpdf->addPDF($path, 'all');
			}
			//
			//$joinedpdf->merge('file', $path_pdf, 'P');
            $joinedpdf->merge('file');
            $joinedpdf->save($path);
		}
		//
		return 1;
	}

	/**
	 * Funcion que transforma imagenes
	 * en pdf
	 * @access private
	 * @param string la direccion de la imagen
	 * @param string la direccion del archivo html
	 * @param string la direccion del archivo pdf
	 * @return void
	 */
	private static function imgToPDF($path_img,$path_html,$path_pdf){
		$html = '<html><head><title></title></head><body><div align="center"><img src="file://' . $path_img . '" border="0" width="1000" /></div></body></html>';
		file_put_contents($path_html, utf8_decode($html));
		chmod($path_html, 0777);
		// la imagen convertida a PDF queda en la misma carpeta con el mismo nombre pero convertida a PDF
		exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --viewport-size 1920x1080 --zoom 1 ". $path_html . " " . $path_pdf);
		exec('exiftool -all= '.$path_pdf);
		//
		unlink($path_html);
		unlink($path_img);
	}

	public static function borrarArchivoFila(){
		$cliente = Request::input('cliente');
		$contraparte = Request::input('contraparte');
		$gestion = Request::input('gestion');
		$tipo_doc = Request::input('tipo_doc');
		$doc_id = Request::input('doc_id');
		$campo = Request::input('campo');
		$fila = Request::input('fila');
		//
		$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'selectOne');
		//
		$path_file_row = env('PATH_DOCUMENTOS') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '/' . $doc_id . '/'. $campo .'/'. $fila.'.pdf';
		if ( file_exists($path_file_row) ){
			unlink($path_file_row);
		}
		//
		self::generarArchivoTabla($cliente,$contraparte,$gestion,$tipo_doc,$doc_id,$campo,$flds->filas);
		//
		return json_encode(['error' => 0,'mensaje' => 'OK']);
	}

	public static function estadoDoc() {
		$docs = SQLConnection::backendStoreProcedure('LN_docs_', array('ingresado', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'select');
		$integ_carga = Request::input('integ_carga');
		$integ_carga = Request::input('integ_carga');
		$integ_verif = Request::input('integ_verif');
		$integ_rech = Request::input('integ_rech');
		// Misc::integridadDocStore($doc,,$integ_carga,$integ_verif,$integ_rech);
		// $temp = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('cumplimiento_documentos', null, null, null, Session::get('identificacion')['contraparte']), 'selectOne');
		// $temp = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('score_final_contraparte', null, null, null, Session::get('identificacion')['contraparte']), 'selectOne');
	}

	// FUNCION QUE CAMBIA EL ESTADO DEL DOCUMENTO A APROBADO
    public static function grabaDocumentoVerificacion() {
		$docid = Request::input('doc_id');
        $integ_carga = Request::input('integ_carga');
        $integ_verif = Request::input('integ_verif');
        $integ_rech = Request::input('integ_rech');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        $dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $docid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        if ( empty($dependencias_docs) || (is_array($dependencias_docs) && count($dependencias_docs) == 1) ) {
			// ENTRA SI NO TIENE DOCUMENTOS HIJOS
		    $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('VERIFICA_BACKEND', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, Session::get('usuario')->user_id), 'selectOne');
			self::integridadDocStore($doc,1,$integ_carga,$integ_verif,$integ_rech);
			if ($doc->tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL') ){
				// self::cargarDocReferencia($doc->doc_id,$doc->doc_id_refe);  // LN_docs_ DEBERIA TRAER EL DOC DE REFE
			}
			
        } else {
			// ENTRA SI TIENE DOCUMENTOS HIJOS
            foreach ($dependencias_docs as $docs){
                if ($docs->estado_doc != 'V') {
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('VERIFICA_BACKEND', $docs->doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, Session::get('usuario')->user_id), 'selectOne');
                    self::integridadDocStore($doc,1,$integ_carga,$integ_verif,$integ_rech);
                }
				if ($docs->tipo_doc == env('DOC_ID_PERFIL_ACADEMICO_UNIVERSITARIO')){
					// self::cargarDocReferencia($dep->doc_id,$dep->doc_id_refe);  // LN_docs_ DEBERIA TRAER EL DOC DE REFE
				}
            }
        }
		$temp = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Documeno aprobado: ' . $doc->nombre_tipo_doc, $doc->cliente, 'APRUEBA_DOCUMENTO','BACK', $doc->contraparte,Session::get('usuario')->user_id,$docid,$doc->servicio_contratado), 'selectOne');
		$temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte), 'selectOne');

		/* Chequeo de finalización de carga en caso de existir un report activo en gestión en producción */
		$temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_docs_ok', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');	
	}

	// FUNCION QUE CAMBIA EL ESTADO DEL DOCUMENTO A RECHAZADO
    public static function grabaDocumentoRechazo() {
		$docid = Request::input('doc_id');
        $integ_carga = Request::input('integ_carga');
        $integ_verif = Request::input('integ_verif');
        $integ_rech = Request::input('integ_rech');
		//
		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
		$dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $docid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
		//
		if ( empty($dependencias_docs) || ( is_array($dependencias_docs) && count($dependencias_docs) == 1 ) ){
            self::integridadDocStore($doc,2,$integ_carga,$integ_verif,$integ_rech);
			$temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
		} else {
			foreach( $dependencias_docs as $docs ){
				if ( $doc->estado_doc != 'R' ){
                    self::integridadDocStore($doc,2,$integ_carga,$integ_verif,$integ_rech);
					$temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docs->doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
				}
			}
		}
		//
		//$temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
		$temp = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Documeno rechazado: ' . $doc->nombre_tipo_doc, $doc->cliente, 'RECHAZA_DOCUMENTO','BACK', $doc->contraparte,Session::get('usuario')->user_id,$docid,$doc->servicio_contratado), 'selectOne');
		$temp = EmailController::enviarMail('EMAIL-LED','DOCUMENTACION-RECHAZADA', 'DOCUMENTACION-RECHAZADA-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $docid);
		//
		$temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte),'selectOne');
		//
		if (Session::get('es_bbva') == '1'){
			return redirect('/verifica-documentos-bbva-nuevo');
		} else {
			return redirect('/verifica-documentos-nuevo');
		}	

	}

	// formulario para confirmar envío de documento a verificar o verificado
	public static function documentosBackendConfirm(Request $req) {

		$doc_id = Request::input('doc_id');
		$integ_carga =  Request::input('integ_carga');
		$integ_verif = Request::input('integ_verif');
		$integ_rech = Request::input('integ_rech');
		$de_informe_tareas = isset($_POST['de_informe_tareas']) ? Request::input('de_informe_tareas') : null;
		// próximo estado del documento : Ingresado o Verificado según el botón seleccionado
		$proximo_estado = Request::input('estado_doc');
		$doc = SQLConnection::backendStoreProcedure('LN_docs_backend', array('detalle',$doc_id), 'selectOne');	
		//
		$tipo_doc = $doc->tipo_doc;
		$result = 0;
		$message = ($proximo_estado == 'I') ? 'Por favor confirme que desea enviar el documento como pendiente de verificar.' : 'Por favor confirme que desea enviar el documento como verificado.';
		//
		if ($doc->es_balance == 0) {	
			/// Check de datos completos y archivo subido 
			$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
			//
			$incompletos = 0;
			$archivo_obligatorio = false;
			//
			$hay_archivo = false;	
			if($doc->es_balance > 0) {
				$hay_archivo = true;
				$archivo_obligatorio = true;
			}
			//
			foreach ($flds as $fld) {
				$hay_archivo = !$hay_archivo ? ( $fld->tipo_campo == 'F' ? true : $hay_archivo ) : $hay_archivo;
				$archivo_obligatorio = !$archivo_obligatorio ? ( $fld->tipo_campo == 'F' ? (($fld->obligatorio > 0) ? true : false) : $archivo_obligatorio ) : $archivo_obligatorio;
			}
			//
			$check = SQLConnection::backendStoreProcedure('LN_docs_verificar_carga', array($doc_id), 'selectOne');
			$incompletos = $check->faltantes;
			//
			$file_exists = false;
			$path = '';
			if($hay_archivo == true) {
				if($doc->es_balance > 0) {
					if($doc->ruta_archivo != '') {
						$path = env('PATH_COMPARTIDOS') . $doc->ruta_archivo;					
					}
				}
				else {
					$path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
				}
				
				if($path != '') {
					$file_exists = file_exists($path);
				}
			}
			//
			// if ($incompletos > 0) {
			// 	$result = 1;
			// 	$message = 'Por favor complete todos los datos obligatorios faltantes antes de enviar el documento (indicados con <span class="text-danger">*</span>).';
			// }
			// else {
			// 	if ($hay_archivo == true and $archivo_obligatorio == true) {
			// 		if ($file_exists == false) {
			// 			$result = 2;
			// 			$message = 'Antes de enviar el documento debe subir el archivo requerido.';		
			// 		}
			// 	}
			// }
		} else {
			// Check de documento Balance
			$hay_archivo = false;
			if ($doc->id_externo > 0 AND $doc->ruta_archivo != NULL) {
				$hay_archivo = file_exists(env('PATH_COMPARTIDO') . $doc->ruta_archivo);				
			}
			if ($hay_archivo == true) {
				// verifico los campos
				$datos_completos = ($doc->id_externo > 0 AND $doc->ruta_archivo != NULL AND $doc->inicio_ejercicio != NULL AND $doc->fin_ejercicio != NULL AND $doc->bal_manifestacion != NULL AND $doc->ejercicio > 0 AND $doc->periodo > 0 AND $doc->moneda != NULL);
				//
				if (!$datos_completos) {
					$result = 1;
					$message = 'Por favor complete todos los datos obligatorios faltantes antes de enviar el documento (indicados con <span class="text-danger">*</span>).';	
				}
			}
			else {
				$result = 2;
				$message = 'Antes de enviar el documento debe subir el archivo requerido.';
			}
		}
		//

		$temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte), 'selectOne');

		return view('/led/carga_documentacion/carga_documentacion_confirm')->with(compact(['doc','proximo_estado', 'result', 'message','integ_carga','integ_verif','integ_rech','tipo_doc','de_informe_tareas']));
	}

	// FUNCION QUE PRECARGA DATOS DE UN DOCUMENTO VERIFICADO A SU HOMÓNIMO DE REFERENCIA
	public static function cargarDocReferencia($docid,$docidrefe){
		$flds_doc_verificado = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
		$flds_doc_refe = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docidrefe, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');

		// dd($flds_doc_verificado);

		foreach($flds_doc_verificado as $fld_v){
			$valores_v = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld_v->doc_id, $fld_v->seccion, $fld_v->campo), 'select');  // array con todos los valores del documento ya verificado
			if( $fld_v->nombre_campo == 'ExperienciaLaboral' ){
				foreach ($flds_doc_refe as $fld_r) {
					for($f = 1; $f <= $fld_r->filas; $f++){ // FILAS DEL DOCUMENTO DE REFERENCIA
						for($c = 1; $c <= $fld_r->columnas; $c++) { // COLUMNAS DEL DOCUMENTO DE REFERENCIA
							$espec = SQLConnection::backendStoreProcedure('LN_campos_col_', array('select', $fld_r->campo, $c, null, null, null, null, null), 'selectOne');
							foreach ( $valores_v as $val){
								if ( $espec->etiqueta == 'Empresa' && $val->etiqueta == 'Empresa' && $f == $val->fila){
									// var_dump($val->valor_texto);
									$vt = $val->valor_texto;
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								} else if ( $espec->etiqueta == 'Último puesto ocupado' && $val->etiqueta == 'Ult. puesto ocupado' && $f == $val->fila){
									// var_dump($val->valor_texto);
									$vt = $val->valor_texto;
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								} else if ($espec->etiqueta == 'Motivo de desvinculacion' && $val->etiqueta == 'Motivo desvinculación' && $f == $val->fila){
									// var_dump($val->valor_texto);
									$vt = $val->valor_texto;
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								} else if ( $espec->etiqueta == 'Fecha de Ingreso' && $val->etiqueta == 'Fecha ingreso' && $f == $val->fila){
									// var_dump($val->valor_fecha_str);
									$vt = null;
									$vn = null;
									$vf = date_create_from_format('d/m/Y', $val->valor_fecha_str);
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');				
									break;								
								} else if ( $espec->etiqueta == 'Fecha de Egreso' && $val->etiqueta == 'Fecha egreso' && $f == $val->fila){
									// var_dump($val->valor_fecha_str);
									$vt = null;
									$vn = null;
									$vf = date_create_from_format('d/m/Y', $val->valor_fecha_str);
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');								
									break;				
								} else if ( $val->etiqueta == 'Contacto (nombre, teléfono, email)' && $espec->etiqueta == 'Contacto (nombre y apellido)'&& $f == $val->fila){
									// var_dump(!empty(explode(',',$val->valor_texto)[0]) ? explode(',',$val->valor_texto)[0] . ' ' . explode(',',$val->valor_texto)[1] : '');
									$vt = !empty(explode(',',$val->valor_texto)[0]) ? explode(',',$val->valor_texto)[0] . ' ' . explode(',',$val->valor_texto)[1] : '';
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								}
								if ($val->fila > $fld_v->filas){
									break;
								}
							}
							if ($espec->col == $fld_v->columnas){
								break;
							}
						}
					}
				}
			}
		}

		foreach($flds_doc_verificado as $fld_v){
			$valores_v = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld_v->doc_id, $fld_v->seccion, $fld_v->campo), 'select');  // array con todos los valores del documento ya verificado
			if( $fld_v->nombre_campo == 'PerfilAcademicoUniversitario' ){ // REVISA SOLAMENTE PERFIL UNIVERSITARIO
				foreach ($flds_doc_refe as $fld_r) {
					for($f = 1; $f <= $fld_r->filas; $f++){ // FILAS DEL DOCUMENTO DE REFERENCIA
						for($c = 1; $c <= $fld_r->columnas; $c++) { // COLUMNAS DEL DOCUMENTO DE REFERENCIA
							$espec = SQLConnection::backendStoreProcedure('LN_campos_col_', array('select', $fld_r->campo, $c, null, null, null, null, null), 'selectOne');
							foreach ( $valores_v as $val){
								if ( $espec->etiqueta == 'Entidad educativa' && $val->etiqueta == 'Universidad' && $f == $val->fila){
									// var_dump($val->valor_texto);
									$vt = $val->valor_texto;
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								} else if ($espec->etiqueta == 'Título obtenido' && $val->etiqueta == 'Título obtenido' && $f == $val->fila){
									// var_dump($val->valor_texto);
									$vt = $val->valor_texto;
									$vn = null;
									$vf = null;
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');
									break;
								
								} else if ( $espec->etiqueta == 'Fecha de ingreso' && $val->etiqueta == 'Fecha de ingreso' && $f == $val->fila){
									// var_dump($val->valor_fecha_str);
									$vt = null;
									$vn = null;
									$vf = date_create_from_format('d/m/Y', $val->valor_fecha_str);
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');				
									break;								
								} else if ( $espec->etiqueta == 'Fecha de egreso' && $val->etiqueta == 'Fecha de egreso' && $f == $val->fila){
									// var_dump($val->valor_fecha_str);
									$vt = null;
									$vn = null;
									$vf = date_create_from_format('d/m/Y', $val->valor_fecha_str);
									$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $fld_r->doc_id, $fld_r->seccion, $espec->campo, $vf, $vt, $vn, $f, $c, null), 'selectOne');								
									break;				
								} 
								if ($val->fila > $fld_v->filas){
									break;
								}
							}
							if ($espec->col == $fld_v->columnas){
								break;
							}
						}
					}
				}
			}

		}

		// dd('aca');
	}

	// enviar el documento a verificar o verificado
	public static function documentosBackendEnviar(Request $req) {
		$doc_id = $req->doc_id;
		$estado_doc = $req->estado_doc;
		//
		$integ_carga =  $req->integ_carga;
		$integ_verif = $req->integ_verif;
		$integ_rech = $req->integ_rech;

        $docs = SQLConnection::backendStoreProcedure('LN_docs_backend', array('enviar', $doc_id, $estado_doc, Session::get('usuario')->user_id), 'select');
		// 
		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
		// 
		SQLConnection::logTrazabilidad('Se verificó el documento '.$doc->nombre_tipo_doc,'DOC_VERIF',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado'],$doc->cliente,$doc->contraparte,$doc_id);
		// 
		if ($doc->tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL') ){
			// self::cargarDocReferencia($doc->doc_id,$doc->doc_id_refe);  // LN_docs_ DEBERIA TRAER EL DOC DE REFE
		}

		if ( $estado_doc == 'V' || $estado_doc == 'I' ){
			$temp = Misc::integridadDocStore($doc,3,$integ_carga,$integ_verif,$integ_rech,1);
		}
		$doc_siguiente = NULL;
		$docs_activos = SQLConnection::backendStoreProcedure('LN_contrapartes_',array('DOCUMENTOS_GESTION_ACTIVA', $doc->contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
		foreach($docs_activos as $doc ){
			if ( $doc->quien_carga == 'F' && $doc->estado_doc == 'N' && $doc->aplica == '1' && $doc->doc_id != $doc_id ){
				$doc_siguiente = $doc;
				break;
			}
		}
		//
		if ( is_null($doc_siguiente) ){
			return '0';
		} else {
			$data = ['tipo_doc' => $doc_siguiente->tipo_doc,'doc_id' => $doc_siguiente->doc_id,'integ_carga' => $doc_siguiente->integ_carga, 'integ_verif' => $doc_siguiente->integ_verif, 'integ_rech' => $doc_siguiente->integ_rech];
			return $data;
		}
	}

	public static function guardarDomiciliosColombia(){
		//
		if ( isset($_POST['cliente']) && isset($_POST['contraparte']) && isset($_POST['gestion']) && isset($_POST['country_name']) ){
			$country_name = strtoupper(Request::input('country_name'));
			//
			$id_dom_nacimiento = 0;
			$dep_nacimiento = Request::input('departamento_nacimiento');
			$ciudad_nacimiento = Request::input('ciudad_nacimiento');
			//
			$id_dom_id = 0;
			$dep_id = Request::input('departamento_id');
			$ciudad_id = Request::input('ciudad_id');
			//
			$id_dom_viviendo = 0;
			$dep_vivienda = Request::input('departamento_vivienda');
			$ciudad_vivienda = Request::input('ciudad_vivienda');
			$domicilio_vivienda = Request::input('domicilio_vivienda');
			//
			$identificacion = Request::input('identificacion');
			//
			$domicilios = SQLConnection::obtenerDomicilios($identificacion);
			if ( !empty($domicilios) ){
				foreach( $domicilios as $domicilio ){
					if ($domicilio->tipo_domicilio == 'N'){
						$id_dom_nacimiento = $domicilio->id_domicilio;
					} elseif ($domicilio->tipo_domicilio == 'I'){
						$id_dom_id = $domicilio->id_domicilio;
					} elseif ($domicilio->tipo_domicilio == 'V'){
						$id_dom_viviendo = $domicilio->id_domicilio;
					}
				}
			}
			
			//
			if ( !$id_dom_nacimiento ){
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('INSERTAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_nacimiento, $dep_nacimiento, NULL,NULL,NULL,Session::get('usuario')->user_id,null,$country_name,'N'), 'select');
			} else {
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('ACTUALIZAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_nacimiento, $dep_nacimiento, NULL,NULL,NULL,Session::get('usuario')->user_id,$id_dom_nacimiento,$country_name,'N'), 'select');
			}
			//
			if ( !$id_dom_id ){
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('INSERTAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_id, $dep_id, NULL,NULL,NULL,Session::get('usuario')->user_id,null,$country_name,'I'), 'select');
			} else {
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('ACTUALIZAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_id, $dep_id, NULL,NULL,NULL,Session::get('usuario')->user_id,$id_dom_id,$country_name,'I'), 'select');
			}
			//
			if ( !$id_dom_viviendo ){
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('INSERTAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_vivienda, $dep_vivienda, $domicilio_vivienda,NULL,NULL,Session::get('usuario')->user_id,null,$country_name,'V'), 'select');
			} else {
				$flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('ACTUALIZAR', $identificacion, NULL, NULL, NULL, NULL, NULL, $ciudad_vivienda, $dep_vivienda, $domicilio_vivienda,NULL,NULL,Session::get('usuario')->user_id,$id_dom_viviendo,$country_name,'V'), 'select');
			}
		}
	}
}
