Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php namespace App\Http\Controllers; // DEPENDENCIASS use Illuminate\Http\Request; ..
Decoded Output download
<?php
namespace App\Http\Controllers;
// DEPENDENCIASS
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use Illuminate\Support\Facades\Mail;
use Carbon\Carbon;
use Excel;
use Auth;
use DB;
use App\Models\Fondo_dependencia as FD;
use Illuminate\Support\Facades\Storage;
use Exception;
use Illuminate\Support\Str;
// IMPORTS
use App\Imports\ExcelImport;
use App\Imports\AnexoAdq;
use App\Imports\AnexoObras;
use App\Libraries\libUtilities;
use App\Libraries\libUtilities as LU;
// MODELOS
use App\Models\Claves;
use App\Models\Historial_cambios_fondo as hcf;
use App\Models\Dependencias;
use App\Models\Contratos_modo_basico as cmb;
use App\Models\Anexo_gastos_diversos_operacion as AGDO;
use App\Models\Fondo_dependencia;
use App\Models\TipoClave;
use App\Models\Estados_cuentas_mes as DECM;
use App\Models\TipoUsuario;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Redirect;
use \App\Models\Usuarios as U;
use \App\Models\Num_auditorias_de_usuario as NAU;
use App\Models\Rfc_empresas_sondeo as RES;
use App\Models\Rfc_empresas_concursantes as REC;
use App\Models\Num_factura as NF;
use App\Models\Polizas as P;
use App\Models\Clave_ff_finanzas as CFFFINANZAS;
use App\Models\Catalogo_numeros_auditoria as CNA;
use App\Models\Documentos_fondo as DOCF;
// MAILS
use App\Mail\MailContratosModoBasico_E as ME;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
// XML
use App\Models\Cfdi_xml_comprobante;
use App\Models\Cfdi_xml_emisor_cfdi;
use App\Models\Cfdi_xml_receptor_cfdi;
use App\Models\Cfdi_xml_concepto_cfdi;
use App\Models\Cfdi_xml_nomina;
use App\Models\Cfdi_xml_emisor_nomina;
use App\Models\Cfdi_xml_receptor_nomina;
use App\Models\Cfdi_xml_percepciones;
use App\Models\Cfdi_xml_percepciones_nom;
use App\Models\Cfdi_xml_deducciones;
use App\Models\Cfdi_xml_deducciones_nom;
use App\Models\Cfdi_xml_nom_otro_pago;
use App\Models\Cfdi_xml_timbre_fiscal_digital;
use Imtigger\LaravelJobStatus\JobStatus;
use SimpleXMLIterator;
class ltController extends Controller
{
/*************************************/
/* VARIABLES */
/*************************************/
public $lista_contratos_modo_basico;
public $lista_rfc_empresas_sondeo_y_concursantes;
public $lista_num_factura;
/*************************************/
/* METODOS */
/*************************************/
/*********************************************/
/* VISTA PRINCIPAL */
/*********************************************/
// PETICIONES JSON PARA FUNCIONALIDAD
public function datosClavesFF(Request $r, $year)
{
$id_clave_ff = [];
$monto_utilizado = 0;
$monto_anexo_gd = 0;
$monto_cap1k = 0;
$monto_cap4k = 0;
$total_reintegro_tesofe = 0;
$q = Claves::Where('id_dependencia', Auth::user()->id_dependencia)->where('year', $year);
$x = Claves::Where('id_dependencia', Auth::user()->id_dependencia)->where('year', $year);
$data['resumen']['monto_recibido'] = ($q->count() == 0) ? 0.00 : $x->sum('monto_recibido');
$fondos = $q->get();
$listaGD = [];
foreach ($fondos as $i) {
$id_clave_ff[] = $i->id_ff;
$totalAnexoGD = self::totalAnexoGD($i);
$listaGD[$i->id_ff] = $totalAnexoGD;
$monto_anexo_gd += (float) $totalAnexoGD->total;
$monto_cap1k += (float) $i->cap1k;
$monto_cap4k += (float) $i->cap4k;
$total_reintegro_tesofe += (float) $i->reintegro_tesofe;
}
foreach ($id_clave_ff as $i) {
$monto_utilizado += cmb::where('id_ff', $i)->sum('montoPagadoConPart');
}
$data['gastos_diversos'] = $listaGD;
$data['total_reintegro_tesofe'] = $total_reintegro_tesofe;
$data['resumen']['monto_utilizado'] = $monto_utilizado + $monto_anexo_gd + $monto_cap1k + $monto_cap4k + $total_reintegro_tesofe;
$data['resumen']['monto_restante'] = $data['resumen']['monto_recibido'] - $data['resumen']['monto_utilizado'];
$claves = DB::table('clave_ff as ff')
->join('catalogo_numeros_auditoria as cna', 'ff.id_nauditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->join('catalogo_claves_presupuestales as tcff', 'ff.clave_ff', '=', 'tcff.id')
->join('dependencias as d', 'ff.id_dependencia', '=', 'd.id_dependencia')
->join('estados as e', 'e.id', '=', 'd.id_estado')
->join('municipios as m', 'm.id', '=', 'd.id_municipio')
->leftJoin('anexo_cap_4k as ac4k', 'ac4k.id_clave_ff', '=', 'ff.id_ff')
->where('ff.year', $year);
//paraEstatusAnexos
switch (Auth::user()->type) {
// 1 - ROOT
// 5 - Auditor
case 1:
case 5:
$data['cff'] = $claves
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
DB::Raw('YEAR(ff.fecha) as fecha'),
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.cap1k as capitulomil',
'ff.cap4k as capitulo4mil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.id as id_cna',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
'ff.estatus_archivo',
'ff.estatus_anexo_adq',
'ff.estatus_anexo_obras',
'ff.estatus_anexo_egresos',
'ff.estatus_anexo_nomina',
'ff.estatus_anexo_c4k',
'ff.url_anexo_gd',
'ac4k.total_pagado_fondo as ac4k_total_pagado_fondo',
'ac4k.url_archivo as ac4k_url_archivo',
'ac4k.id as ac4k_id',
'd.id_estado',
'd.id_municipio',
'e.estado as sEstado',
'm.municipio as sMunicipio',
'cna.numeroAuditoria as sNumAuditoria',
)
->orderBy('fecha', 'DESC')
->get();
break;
// 2 - Administrador de dependencia
// 4 - Ejecutor de dependencia
case 2:
case 4:
case 11:
$data['cff'] = $claves
->where('ff.id_dependencia', Auth::user()->id_dependencia)
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
'ff.year as fecha',
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.ramo as ramo',
'ff.cap1k as capitulomil',
'ff.cap4k as capitulo4mil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.id as id_cna',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
'ff.estatus_archivo',
'ff.estatus_anexo_adq',
'ff.estatus_anexo_obras',
'ff.estatus_anexo_egresos',
'ff.estatus_anexo_nomina',
'ff.estatus_anexo_c4k',
'ff.url_anexo_gd',
'ac4k.total_pagado_fondo as ac4k_total_pagado_fondo',
'ac4k.url_archivo as ac4k_url_archivo',
'ac4k.id as ac4k_id',
'd.id_estado',
'd.id_municipio',
'e.estado as sEstado',
'm.municipio as sMunicipio',
'cna.numeroAuditoria as sNumAuditoria',
)
->orderBy('fecha', 'DESC')
->get();
$data['claveAnual'] = DB::table('clave_ff as ff')
->whereRaw('YEAR(fecha)=' . date('Y'))
->where('ff.id_dependencia', Auth::user()->id_dependencia)
->count();
break;
case 3:
break;
}
return response()->json($data, 200);
}
public function indexDocumentos($idFondo = 0)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $idFondo)->first();
if ($idFondo != 0 && $clave_ff->id_dependencia != Auth::user()->id_dependencia) {
return \Redirect::to('/api/conexion/vistaRdfs')->with('verificacion', ['No tiene autorizacin para entrar a esta seccin.']);
}
$editar = false; //editar el contenido y enviar a revisin
$enviarRevisionAuditores = false; //Envia la revisin de los auditores
$regresarDesdeRevisionEnlace = false; //Regresa el estatus de los documentos al ejecutor
$regresarDesdeRevisionAuditores = false; //Regresa el estatus de los documentos al ejecutor
switch (Auth::user()->type) {
case '1': //root
$regresarDesdeRevisionEnlace = true;
$regresarDesdeRevisionAuditores = true;
break;
case '3': //enlace estatal
case '7': //enlace municipal
case '10': //enlace rea ejecutora
if (Auth::user()->sub_type != 'ES') {
$regresarDesdeRevisionEnlace = true;
$enviarRevisionAuditores = true;
}
break;
case '5': //auditor
// case '6': //financiero
if (@config('tema.ms.auditor_btn_estatus_anexo_regresar')) {
$regresarDesdeRevisionEnlace = true;
}
break;
case '4': //ejecutor
$editar = true;
break;
}
return view('asf_layout.indexDocumentos', compact(['idFondo', 'editar', 'regresarDesdeRevisionEnlace', 'regresarDesdeRevisionAuditores', 'enviarRevisionAuditores']));
}
public function getDataDocumentos($idFondo = 0)
{
$datos['errores'] = [];
set_time_limit(0);
try {
$query = DB::table('clave_ff as cff')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'cff.clave_ff')
->join('fondo_dependencia as fd', 'fd.id', '=', 'cff.id_fondo_dependencia')
->leftjoin('catalogo_numeros_auditoria as cna', 'cna.id', '=', 'cff.id_nauditoria')
->leftJoin('estados as es', 'es.id', '=', 'cff.id_estado')
->leftJoin('municipios as mun', 'mun.id', '=', 'cff.id_municipio')
->leftJoin('dependencias as dep', 'dep.id_dependencia', '=', 'cff.id_dependencia')
->leftJoin('documentos_fondo as docf', 'docf.id_clave_ff', '=', 'cff.id_ff');
switch (Auth::user()->type) {
case '1': //root
break;
case '3': //enlace estatal
case '7': //enlace municipal
// case '8': //finanzas estatal
// case '9': //finanzas municipal
$query->where(['es.id' => Auth::user()->id_estado, 'mun.id' => Auth::user()->id_municipio]);
break;
case '4': //ejecutor
case '10': //enlace rea ejecutora
if ($idFondo != 0) {
$query->where('cff.id_ff', $idFondo);
}
$query->where('cff.id_dependencia', Auth::user()->id_dependencia);
break;
case '5': //auditor
case '6': //financiero
$lNAU = Auth::user()->u_nau;
$aCNA = [];
foreach ($lNAU as $knau => $nau) {
$aCNA[] = $nau->id_num_auditoria;
}
$query->whereIn('cff.id_nauditoria', $aCNA);
break;
default:
paraProgramacionPreventiva(); //para el desarrollo
break;
}
$query->select(
//paraEstatusDocumentos
'docf.id',
'docf.actas_cabildo',
'docf.contratos_cuentas_bancarias',
'docf.edos_cuentas_01',
'docf.edos_cuentas_02',
'docf.edos_cuentas_03',
'docf.edos_cuentas_04',
'docf.edos_cuentas_05',
'docf.edos_cuentas_06',
'docf.edos_cuentas_07',
'docf.edos_cuentas_08',
'docf.edos_cuentas_09',
'docf.edos_cuentas_10',
'docf.edos_cuentas_11',
'docf.edos_cuentas_12',
'docf.formato_3',
'docf.formato_3A',
'docf.formato_3B',
'docf.formato_4',
'ccp.ramo as ramo',
'ccp.nombre_clave as fondo',
'cff.year as year',
'cna.numeroAuditoria as nAuditoria',
'cna.fecha_cierre',
'dep.sDependencia',
'es.estado',
'mun.municipio',
'docf.updated_at',
'cff.id_ff'
);
$datos['docsFondo'] = $query->get();
$hoy = Carbon::now()->startOfDay();
$datos['fechaHoy'] = $hoy->format('Y-m-d H:i:s');
$datos['listaEstatus'] = ['Sin cargar', 'Cargado sin enviar a revisin', 'Enviado ' . LU::t_tr('a_d', 'enlace', 's'), 'Enviado ' . LU::t_tr('a_d', 'asf', 'S'), 'Regresado ' . LU::t_tr('a_d', 'ejecutor', 's'), 'No aplica'];
} catch (\Throwable $th) {
$datos['errores'][] = 'Error al obtener datos de la tabla, comunquese con soporte tcnico. ' . $th->getMessage();
}
return response()->json($datos);
}
public function cargarDocumentos(Request $r)
{
$data['errores'] = [];
set_time_limit(0);
DB::Begintransaction();
try {
$url_doc_fondo = '';
$url_doc_fondo_borrar = '';
$extension = '';
$nombreArchivo = '';
$docsFondo = DOCF::findOrFail($r->idD);
$contieneArchivo = false;
switch ($r->tipoDocActual) {
case 'dAC':
$extension = '.pdf';
$nombreArchivo = LU::t_tr('v', 'actas_cabildo', 's') . '_';
$docBD = 1;
break;
case 'dCCB':
$extension = '.pdf';
$nombreArchivo = 'Contratos_cuentas_';
$docBD = 2;
break;
case 'dF3':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3_';
$docBD = 4;
break;
case 'dF3A':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3A_';
$docBD = 5;
break;
case 'dF3B':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3B_';
$docBD = 6;
break;
case 'dF4':
$extension = '.xlsx';
$nombreArchivo = 'Formato_4_';
$docBD = 7;
break;
}
if ($r->has('url_fondo') && $r->url_fondo != null) {
try {
$dataF = explode(',', $r->url_fondo);
$b64Data = base64_decode($dataF[1]);
$name = $nombreArchivo . $r->idF . "_" . date('Ymd_His') . $extension;
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
$contieneArchivo = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo, debe cargarlo.';
}
}
if ($contieneArchivo) {
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
}
if ($url_doc_fondo_borrar != null) {
unlink(public_path() . $url_doc_fondo_borrar);
}
switch ($docBD) {
case 1:
$url_doc_fondo_borrar = ($docsFondo->url_actas_cabildo ? $docsFondo->url_actas_cabildo : null);
$docsFondo->url_actas_cabildo = $url_doc_fondo;
$docsFondo->hash_actas_cabildo = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->actas_cabildo = 1;
$docsFondo->save();
break;
case 2:
$url_doc_fondo_borrar = (isset($docsFondo->url_contratos_cuentas_bancarias) ? $docsFondo->url_contratos_cuentas_bancarias : null);
$docsFondo->url_contratos_cuentas_bancarias = $url_doc_fondo;
$docsFondo->hash_contratos_cuentas_bancarias = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->contratos_cuentas_bancarias = 1;
$docsFondo->save();
break;
case 4:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3) ? $docsFondo->url_formato_3 : null);
$docsFondo->url_formato_3 = $url_doc_fondo;
$docsFondo->hash_formato_3 = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3 = 1;
$docsFondo->save();
break;
case 5:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3A) ? $docsFondo->url_formato_3A : null);
$docsFondo->url_formato_3A = $url_doc_fondo;
$docsFondo->hash_formato_3A = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3A = 1;
$docsFondo->save();
break;
case 6:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3B) ? $docsFondo->url_formato_3B : null);
$docsFondo->url_formato_3B = $url_doc_fondo;
$docsFondo->hash_formato_3B = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3B = 1;
$docsFondo->save();
break;
case 7:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_4) ? $docsFondo->url_formato_4 : null);
$docsFondo->url_formato_4 = $url_doc_fondo;
$docsFondo->hash_formato_4 = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_4 = 1;
$docsFondo->save();
break;
}
} else {
$data['errores'][] = 'No se encontr el archivo, debe cargarlo.';
}
} catch (\Throwable $th) {
$data['errores'][] = "No pudo guardarse el archivo, comunquese con soporte tcnico. " . $th->getLine() . ', ' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data, 200);
}
public function cargarDocumentosMes(Request $r)
{
$analizarXml = false; //quitarc Sirve para intercambiar entre versiones de lectura masiva de xml, posteriormente quitar
$data['errores'] = [];
set_time_limit(0);
DB::Begintransaction();
try {
$url_doc_fondo = null;
$url_doc_fondo_xml = null;
$hash_doc_fondo = null;
$hash_doc_fondo_xml = null;
$docsFondo = DOCF::findOrFail($r->idD);
$contieneArchivo = false;
$contieneArchivoXML = false;
if ($r->has('url_fondo') && $r->url_fondo != null) {
try {
$dataF = explode(',', $r->url_fondo);
$b64Data = base64_decode($dataF[1]);
$name = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".pdf";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
$contieneArchivo = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo PDF, debe cargarlo.';
}
}
if ($r->has('url_fondo_cfdi')) {
try {
$datax = explode(',', $r->url_fondo_cfdi);
$b64DataX = base64_decode($datax[1]);
$nameD = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".xml";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$pathXML = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo_xml = $pathXML . $nameD;
$contieneArchivoXML = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo XML, debe cargarlo. ' . $th->getMessage();
}
}
$estados_cuentas_mes = new DECM;
$estados_cuentas_mes->id_documentos_fondo = $docsFondo->id;
$estados_cuentas_mes->mes = $r->mes;
$estados_cuentas_mes->url_estados_cuentas_pdf = $url_doc_fondo;
$estados_cuentas_mes->url_estados_cuentas_xml = $url_doc_fondo_xml;
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = 1;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = 1;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = 1;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = 1;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = 1;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = 1;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = 1;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = 1;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = 1;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = 1;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = 1;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = 1;
break;
}
if ($contieneArchivo) {
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
$hash_doc_fondo = hash_file('sha256', public_path() . $url_doc_fondo);
$estados_cuentas_mes->hash_estados_cuentas_pdf = $hash_doc_fondo;
}
}
if ($contieneArchivoXML) {
if ($url_doc_fondo_xml) {
try {
$dirname = dirname(public_path() . $url_doc_fondo_xml);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$fileXML = fopen(public_path() . $url_doc_fondo_xml, 'wb');
fwrite($fileXML, $b64DataX);
fclose($fileXML);
if ($analizarXml) {
$cfdi_reader = new SimpleXMLIterator(public_path() . $url_doc_fondo_xml, 0, TRUE);
$ns = $cfdi_reader->getDocNamespaces(true);
$nsNomina = null;
foreach ($ns as $kllave => $valorNs) {
if (Str::startsWith($kllave, "nomina")) {
$nsNomina = $kllave;
}
}
if (!$nsNomina) {
//Error: No se encontro el NameSpace "Nomina"
$data['errores'][] = 'Error de validacion de xml. No se encuentra el NameSpace "nomina"';
}
if ($cfdi_reader->getName() == 'comprobantes') {
foreach ($cfdi_reader->children($ns['cfdi']) as $comprobante) {
self::lecturaComprobanteXML($comprobante, $ns, $nsNomina, $estados_cuentas_mes);
}
} else {
self::lecturaComprobanteXML($cfdi_reader, $ns, $nsNomina, $estados_cuentas_mes);
}
}
} catch (\Throwable $e) {
$data['errores'][] = 'Error de validacion de xml. Comunquese con soporte tcnico. ' . $e->getLine() . '. ' . $e->getMessage();
}
}
$docsFondo->save();
$hash_doc_fondo_xml = hash_file('sha256', public_path() . $url_doc_fondo_xml);
$estados_cuentas_mes->hash_estados_cuentas_xml = $hash_doc_fondo_xml;
$estados_cuentas_mes->save();
} else {
$data['errores'][] = 'No se encontr el archivo XML, debe cargarlo.';
}
} catch (\Throwable $th) {
$data['errores'][] = "No pudo guardarse el archivo, comunquese con soporte tcnico. " . $th->getMessage() . ' linea: ' . $th->getLine();
}
if (sizeof($data['errores'])) {
DB::rollback();
try {
if ($url_doc_fondo_xml) {
unlink(public_path() . $url_doc_fondo_xml);
}
if ($url_doc_fondo) {
unlink(public_path() . $url_doc_fondo);
}
} catch (\Throwable $th) {
}
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function lecturaComprobanteXML($cfdi_reader, $ns, $nsNomina, $estados_cuentas_mes) //A partir del nodo 'Comprobante'
{
$comp = new Cfdi_xml_comprobante();
$comp->version_comprobante = strval($cfdi_reader->attributes()->Version);
$comp->serie = strval($cfdi_reader->attributes()->Serie);
$comp->folio = strval($cfdi_reader->attributes()->Folio);
$comp->fecha = date('Y-m-d', strtotime(strval($cfdi_reader->attributes()->Fecha)));
$comp->no_certificado = strval($cfdi_reader->attributes()->NoCertificado);
$comp->subtotal = strval($cfdi_reader->attributes()->SubTotal);
$comp->descuento = strval($cfdi_reader->attributes()->Descuento);
$comp->moneda = strval($cfdi_reader->attributes()->Moneda);
$comp->total = strval($cfdi_reader->attributes()->Total);
$comp->tipo_comprobante = strval($cfdi_reader->attributes()->TipoDeComprobante);
$comp->exportacion = strval($cfdi_reader->attributes()->Exportacion);
$comp->metodo_pago = strval($cfdi_reader->attributes()->MetodoPago);
$comp->lugar_expedicion = strval($cfdi_reader->attributes()->LugarExpedicion);
$comp->certificado = strval($cfdi_reader->attributes()->Certificado);
$comp->sello = strval($cfdi_reader->attributes()->Sello);
$estados_cuentas_mes->com()->save($comp);
foreach ($cfdi_reader->children($ns['cfdi']) as $complemento) {
switch ($complemento->getName()) {
case 'Emisor':
$em = new Cfdi_xml_emisor_cfdi();
$em->rfc_em = strval($complemento->attributes()->Rfc);
$em->nombre_em = strval($complemento->attributes()->Nombre);
$em->regimen_fiscal_em = strval($complemento->attributes()->RegimenFiscal);
$comp->emi()->save($em);
break;
case 'Receptor':
$rec = new Cfdi_xml_receptor_cfdi();
$rec->rfc_rec = strval($complemento->attributes()->Rfc);
$rec->nombre_rec = strval($complemento->attributes()->Nombre);
$rec->uso_cfdi = strval($complemento->attributes()->UsoCFDI);
//$rec->domicilio_fiscal_rec = strval($complemento->attributes()->DomicilioFiscalReceptor);
//$rec->regimen_fiscal_rec = strval($complemento->attributes()->RegimenFiscalReceptor);
$comp->rec()->save($rec);
break;
case 'Conceptos':
$aConceptos = array();
foreach ($complemento->children($ns['cfdi']) as $concepto) {
$concepto_cfdi = array(
'clave_prod_serv' => strval($concepto->attributes()->ClaveProdServ),
'cantidad' => strval($concepto->attributes()->Cantidad),
'clave_unidad' => strval($concepto->attributes()->ClaveUnidad),
'descripcion' => strval($concepto->attributes()->Descripcion),
'valor_unitario' => strval($concepto->attributes()->ValorUnitario),
'importe' => strval($concepto->attributes()->Importe),
//'objeto_imp' => strval($concepto->attributes()->ObjetoImp),
'descuento' => strval($concepto->attributes()->Descuento),
);
$conc = new Cfdi_xml_concepto_cfdi($concepto_cfdi);
$aConceptos[] = $conc;
}
$comp->conc()->saveMany($aConceptos);
$aConceptos = null;
break;
case 'Complemento':
foreach ($complemento->children($ns[$nsNomina]) as $nom) {
$nomina_nomina = array(
'version' => strval($nom->attributes()->Version),
'tipo_nomina' => strval($nom->attributes()->TipoNomina),
'fecha_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaPago))),
'fecha_inicial_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaInicialPago))),
'fecha_final_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaFinalPago))),
'dias_pagados' => strval($nom->attributes()->NumDiasPagados),
'total_percepciones' => strval($nom->attributes()->TotalPercepciones),
'total_deducciones' => strval($nom->attributes()->TotalDeducciones),
'total_otros_pagos' => strval($nom->attributes()->TotalOtrosPagos),
);
$nomina = new Cfdi_xml_nomina($nomina_nomina);
$comp->nom()->save($nomina);
foreach ($nom->children($ns[$nsNomina]) as $nomdet) {
switch ($nomdet->getName()) {
case 'Emisor':
$nomina_emisor = new Cfdi_xml_emisor_nomina();
//$nomina_emisor->registro_patronal = strval($nomdet->attributes()->RfcPatronOrigen);
$nomina_emisor->rfc_patron_origen = strval($nomdet->attributes()->RegistroPatronal);
$nomina->emi_nom()->save($nomina_emisor);
break;
case 'Receptor':
$nomina_receptor = new Cfdi_xml_receptor_nomina();
$nomina_receptor->curp_receptor = strval($nomdet->attributes()->Curp);
$nomina_receptor->tipo_contrato = strval($nomdet->attributes()->TipoContrato);
$nomina_receptor->tipo_regimen = strval($nomdet->attributes()->TipoRegimen);
$nomina_receptor->num_empleado = strval($nomdet->attributes()->NumEmpleado);
$nomina_receptor->tipo_jornada = strval($nomdet->attributes()->TipoJornada);
$nomina_receptor->periodicidad_pago = strval($nomdet->attributes()->PeriodicidadPago);
$nomina_receptor->cuenta_bancaria = strval($nomdet->attributes()->CuentaBancaria);
$nomina_receptor->clave_ent_fed = strval($nomdet->attributes()->ClaveEntFed);
$nomina_receptor->nss = strval($nomdet->attributes()->NumSeguridadSocial);
$nomina_receptor->inicio_rel_laboral = date('Y-m-d', strtotime(strval($nomdet->attributes()->FechaInicioRelLaboral)));
$nomina_receptor->antiguedad = strval($nomdet->attributes()->Antigedad);
$nomina_receptor->riesgo_puesto = strval($nomdet->attributes()->RiesgoPuesto);
$nomina_receptor->salario_diario_integrado = strval($nomdet->attributes()->SalarioDiarioIntegrado);
$nomina->rec_nom()->save($nomina_receptor);
break;
case 'Percepciones':
$nomina_percepciones = new Cfdi_xml_percepciones_nom();
$nomina_percepciones->total_sueldos = strval($nomdet->attributes()->TotalSueldos);
$nomina_percepciones->total_gravado = strval($nomdet->attributes()->TotalGravado);
$nomina_percepciones->total_exento = strval($nomdet->attributes()->TotalExento);
$nomina->perc()->save($nomina_percepciones);
$aPercepciones = array();
foreach ($nomdet->children($ns[$nsNomina]) as $percepcion) {
$nomina_percepcion = array(
'tipo_p' => strval($percepcion->attributes()->TipoPercepcion),
'clave_p' => strval($percepcion->attributes()->Clave),
'concepto_p' => strval($percepcion->attributes()->Concepto),
'importe_gravado' => strval($percepcion->attributes()->ImporteGravado),
'importe_exento' => strval($percepcion->attributes()->ImporteExento),
);
$oPercepcion = new Cfdi_xml_percepciones($nomina_percepcion);
$aPercepciones[] = $oPercepcion;
}
$nomina_percepciones->perc()->saveMany($aPercepciones);
$aPercepciones = null;
break;
case 'Deducciones':
$nomina_deducciones = new Cfdi_xml_deducciones_nom();
$nomina_deducciones->total_deducciones = strval($nomdet->attributes()->TotalOtrasDeducciones);
$nomina_deducciones->total_imp_retenidos = strval($nomdet->attributes()->TotalImpuestosRetenidos);
$nomina->ded()->save($nomina_deducciones);
$aDeducciones = array();
foreach ($nomdet->children($ns[$nsNomina]) as $deducion) {
$nomina_deduccion = array(
'tipo_d' => strval($deducion->attributes()->TipoDeduccion),
'clave_d' => strval($deducion->attributes()->Clave),
'concepto_d' => strval($deducion->attributes()->Concepto),
'importe_d' => strval($deducion->attributes()->Importe),
);
$oDeduccion = new Cfdi_xml_deducciones($nomina_deduccion);
$aDeducciones[] = $oDeduccion;
}
$nomina_deducciones->ded()->saveMany($aDeducciones);
$aDeducciones = null;
break;
case 'OtrosPagos':
foreach ($nomdet->children($ns[$nsNomina]) as $otropago) {
$nomina_otropago = new Cfdi_xml_nom_otro_pago();
$nomina_otropago->tipo_op = strval($otropago->attributes()->TipoOtroPago);
$nomina_otropago->clave_op = strval($otropago->attributes()->Clave);
$nomina_otropago->concepto_op = strval($otropago->attributes()->Concepto);
$nomina_otropago->importe_op = strval($otropago->attributes()->Importe);
foreach ($otropago->children($ns[$nsNomina]) as $subsidio) {
$nomina_otropago->subsidio_causado = strval($subsidio->attributes()->SubsidioCausado);
}
$nomina->op()->save($nomina_otropago);
}
break;
}
}
}
foreach ($complemento->children($ns['tfd']) as $tfd) {
$tfd_data = new Cfdi_xml_timbre_fiscal_digital();
$tfd_data->version_tfd = strval($tfd->attributes()->Version);
$tfd_data->uuid = strval($tfd->attributes()->UUID);
$tfd_data->fecha_timbrado = date('Y-m-d', strtotime(strval($tfd->attributes()->FechaTimbrado)));
$tfd_data->rfc_prov_certif = strval($tfd->attributes()->RfcProvCertif);
$tfd_data->sello_cfd = strval($tfd->attributes()->SelloCFD);
$tfd_data->no_cert = strval($tfd->attributes()->NoCertificadoSAT);
$tfd_data->sello_sat = strval($tfd->attributes()->SelloSAT);
$comp->tim()->save($tfd_data);
}
break;
case 'Addenda':
$comp->no_cheque = strval($complemento->children($ns['advans'])->attributes()->_10);
$estados_cuentas_mes->com()->save($comp);
break;
}
}
}
public function ecmPdf(Request $r)
{
set_time_limit(0);
$data['errores'] = [];
DB::Begintransaction();
try {
$dataF = explode(',', $r->url_pdf);
$b64Data = base64_decode($dataF[1]);
$name = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".pdf";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
$updEcm = DECM::where("id", $r->idEcm)->update(["url_estados_cuentas_pdf" => $url_doc_fondo, "hash_estados_cuentas_pdf" => hash_file('sha256', public_path() . $url_doc_fondo)]);
}
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo PDF, debe cargarlo.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
unlink(public_path() . $url_doc_fondo);
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function downloadDocumentos(Request $r)
{
set_time_limit(0);
$docsFondo = DOCF::findOrFail($r->idD);
$headers = ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
$urlFondo = null;
switch ($r->tipoDocActual) {
//paraEstatusDocumentos
case 'dAC':
$urlFondo = $docsFondo->url_actas_cabildo;
break;
case 'dCCB':
$urlFondo = $docsFondo->url_contratos_cuentas_bancarias;
break;
case 'dF3':
$urlFondo = $docsFondo->url_formato_3;
break;
case 'dF3A':
$urlFondo = $docsFondo->url_formato_3A;
break;
case 'dF3B':
$urlFondo = $docsFondo->url_formato_3B;
break;
case 'dF4':
$urlFondo = $docsFondo->url_formato_4;
break;
}
$nombreArchivo = LU::getRutaAndName($urlFondo)[1];
$urlArchivo = LU::getDirname($urlFondo);
return response()->download($urlArchivo, $nombreArchivo, $headers);
}
public function downloadEdosCuentas(Request $r)
{
set_time_limit(0);
$headers = ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
$urlEstadoCuenta = null;
$estados_cuentas_mes = DECM::findOrFail($r->idEdoCuenta);
switch ($r->tipoDocActual) {
case 'pdf':
$urlEstadoCuenta = $estados_cuentas_mes->url_estados_cuentas_pdf;
break;
case 'xml':
$urlEstadoCuenta = $estados_cuentas_mes->url_estados_cuentas_xml;
break;
}
$nombreArchivo = LU::getRutaAndName($urlEstadoCuenta)[1];
$urlArchivo = LU::getDirname($urlEstadoCuenta);
return response()->download($urlArchivo, $nombreArchivo, $headers);
}
public function eliminarDocumentos(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$url_doc_fondo_borrar = null;
$data['errores'] = [];
try {
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->tipoDocActual) {
case 'dAC':
$url_doc_fondo_borrar = $docsFondo->url_actas_cabildo;
$docsFondo->url_actas_cabildo = null;
$docsFondo->actas_cabildo = 0;
break;
case 'dCCB':
$url_doc_fondo_borrar = $docsFondo->url_contratos_cuentas_bancarias;
$docsFondo->url_contratos_cuentas_bancarias = null;
$docsFondo->contratos_cuentas_bancarias = 0;
break;
case 'dF3':
$url_doc_fondo_borrar = $docsFondo->url_formato_3;
$docsFondo->url_formato_3 = null;
$docsFondo->formato_3 = 0;
break;
case 'dF3A':
$url_doc_fondo_borrar = $docsFondo->url_formato_3A;
$docsFondo->url_formato_3A = null;
$docsFondo->formato_3A = 0;
break;
case 'dF3B':
$url_doc_fondo_borrar = $docsFondo->url_formato_3B;
$docsFondo->url_formato_3B = null;
$docsFondo->formato_3B = 0;
break;
case 'dF4':
$url_doc_fondo_borrar = $docsFondo->url_formato_4;
$docsFondo->url_formato_4 = null;
$docsFondo->formato_4 = 0;
break;
}
if ($url_doc_fondo_borrar != null) {
unlink(public_path() . $url_doc_fondo_borrar);
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al eliminar el archivo, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function eliminarEdoCuenta(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
try {
$data['errores'] = [];
$docsFondo = DOCF::where('id', $r->idD)->first();
$oDecm = DECM::where('id', $r->idEdoCuenta)->first();
$mes = $oDecm->mes;
$url_edo_cuentas_borrar_pdf = $oDecm->url_estados_cuentas_pdf;
$url_edo_cuentas_borrar_xml = $oDecm->url_estados_cuentas_xml;
$oDecm->delete();
$edos_cuentas_count = DECM::where(['id_documentos_fondo' => $r->idD, 'mes' => $mes])->count();
if ($edos_cuentas_count === 0) {
switch ($mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = 0;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = 0;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = 0;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = 0;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = 0;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = 0;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = 0;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = 0;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = 0;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = 0;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = 0;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = 0;
break;
}
$docsFondo->save();
}
} catch (\Throwable $th) {
$data['errores'][] = 'Error al eliminar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
try {
if ($url_edo_cuentas_borrar_pdf != null) {
unlink(public_path() . $url_edo_cuentas_borrar_pdf);
}
unlink(public_path() . $url_edo_cuentas_borrar_xml);
} catch (\Throwable $th) {
}
}
return response()->json($data);
}
public function enviarDocumentosRevison(Request $r)
{
$docsFondo = DOCF::findOrFail($r->idD);
$estatus = 2;
if ($r->enviarRevisionAuditores == 'Si' || @config('tema.ms.revision_directo_auditores')) {
$estatus = 3;
}
$data['errores'] = [];
try {
switch ($r->tipoDocActual) {
case 'dAC':
$docsFondo->actas_cabildo = $estatus;
break;
case 'dCCB':
$docsFondo->contratos_cuentas_bancarias = $estatus;
break;
case 'dF3':
$docsFondo->formato_3 = $estatus;
break;
case 'dF3A':
$docsFondo->formato_3A = $estatus;
break;
case 'dF3B':
$docsFondo->formato_3B = $estatus;
break;
case 'dF4':
$docsFondo->formato_4 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al enviar el archivo a revisin, contacte con servicio tcnico.' . $th->getMessage();
}
return response()->json($data);
}
public function enviarRevisionEdosCuentas(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$estatus = 2;
if ($r->enviarRevisionAuditores == 'Si' || @config('tema.ms.revision_directo_auditores')) {
$estatus = 3;
}
try {
$data['errores'] = [];
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = $estatus;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = $estatus;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = $estatus;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = $estatus;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = $estatus;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = $estatus;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = $estatus;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = $estatus;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = $estatus;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = $estatus;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = $estatus;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al enviar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function regresarDocumentosRevison(Request $r)
{
$data['errores'] = [];
try {
$docsFondo = DOCF::findOrFail($r->idD);
$estatus = 4;
switch ($r->tipoDocActual) {
case 'dAC':
$docsFondo->actas_cabildo = $estatus;
break;
case 'dCCB':
$docsFondo->contratos_cuentas_bancarias = $estatus;
break;
case 'dF3':
$docsFondo->formato_3 = $estatus;
break;
case 'dF3A':
$docsFondo->formato_3A = $estatus;
break;
case 'dF3B':
$docsFondo->formato_3B = $estatus;
break;
case 'dF4':
$docsFondo->formato_4 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al regresar el archivo, contacte con servicio tcnico.' . $th->getMessage();
}
return response()->json($data);
}
public function regresarRevisionEdosCuentas(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$estatus = 4;
try {
$data['errores'] = [];
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = $estatus;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = $estatus;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = $estatus;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = $estatus;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = $estatus;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = $estatus;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = $estatus;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = $estatus;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = $estatus;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = $estatus;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = $estatus;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al regresar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function getEstadosCuentaMes(Request $r)
{
$datos['errores'] = [];
try {
$datos['edos_cuentas'] = DB::table('estados_cuentas_mes')->where(['id_documentos_fondo' => $r->idD, 'mes' => $r->mes])->get();
} catch (\Throwable $th) {
$datos['errores'][] = 'Error al obtener datos de la tabla, comunquese con soporte tcnico. ' . $th->getMessage();
}
return response()->json($datos);
}
public function datosClavesFFMain(Request $r, $dependencia, $year)
{
$id_clave_ff = [];
$monto_utilizado = 0;
$monto_anexo_gd = 0;
$monto_cap1k = 0;
$q = Claves::Where('id_dependencia', $dependencia)->where('year', $year);
$x = Claves::Where('id_dependencia', $dependencia)->where('year', $year);
$data['resumen']['monto_recibido'] = ($q->count() == 0) ? 0.00 : $x->sum('monto_recibido');
$fondos = $q->get();
$listaGD = [];
foreach ($fondos as $i) {
$id_clave_ff[] = $i->id_ff;
$totalAnexoGD = self::totalAnexoGD($i);
$listaGD[$i->id_ff] = $totalAnexoGD;
$monto_anexo_gd += (float) $totalAnexoGD->total;
$monto_cap1k += (float) $i->cap1k;
}
foreach ($id_clave_ff as $i) {
$monto_utilizado += cmb::where('id_ff', $i)->sum('montoPagadoConPart');
}
$data['gastos_diversos'] = $listaGD;
$data['resumen']['monto_utilizado'] = $monto_utilizado + $monto_anexo_gd + $monto_cap1k;
$data['resumen']['monto_restante'] = $data['resumen']['monto_recibido'] - $data['resumen']['monto_utilizado'];
$claves = DB::table('clave_ff as ff')
->join('catalogo_numeros_auditoria as cna', 'ff.id_nauditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->join('catalogo_claves_presupuestales as tcff', 'ff.clave_ff', '=', 'tcff.id')
->join('dependencias as d', 'ff.id_dependencia', '=', 'd.id_dependencia')
->where('ff.year', $year);
$data['cff'] = $claves
->where('ff.id_dependencia', $dependencia)
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
'ff.year as fecha',
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.ramo as ramo',
'ff.cap1k as capitulomil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
)
->orderBy('fecha', 'DESC')
->get();
$data['claveAnual'] = DB::table('clave_ff as ff')
->whereRaw('YEAR(fecha)=' . date('Y'))
->where('ff.id_dependencia', $dependencia)
->count();
return response()->json($data, 200);
}
// CLAVES DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function index()
{
$d = Dependencias::with(['d_e', 'd_m'])->where('id_dependencia', Auth::user()->id_dependencia)->first();
// $fondo_dependencia = Fondo_dependencia::where('year', now()->year)->where('id_dependencia', Auth::user()->id_dependencia);
$data['datos_generales'] = (object) [
'dependencia' => $d->sDependencia,
'siglas' => $d->sSiglas,
'municipio' => ($d->d_m == NULL) ? 'No aplica' : $d->d_m->municipio,
'estado' => $d->d_e->estado,
];
return view('asf_layout.index', $data);
}
// CLAVES DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA PARA MAIN) (PARA CERRAR FONDOS)
public function layouts_main()
{
$data['usuarioActual'] = U::with('u_d')->where('id', Auth::user()->id)->get()->first();
$lNAU = NAU::with('nau_cna')->where('id_usuario', Auth::user()->id)->get();
$data['CNAusuario'] = [];
foreach ($lNAU as $knau => $nau) {
$data['CNAusuario'][] = $nau->nau_cna;
}
return view('asf_layout.main', $data);
}
public function cerrar(Request $r)
{
$row = Claves::where('id_ff', $r->id)->first();
$row->estatus = '1';
DB::beginTransaction();
try {
$row->save();
DB::commit();
return response()->json('OK', 200);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
return response()->json('NO', 200);
}
}
/*******************************************************/
/* FUENTE DE FINANCIAMIENTO */
/*******************************************************/
// PETICIONES JSON PARA FUNCIONALIDAD
// Pintar las fuentes de financiamiento por ao
public function datosFuenteFinanciamiento(Request $r, $dependencia, $year)
{
$q = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'fd.clave_ff', '=', 'ccp.id')
->where('fd.year', $year)
->where('fd.id_dependencia', $dependencia)
->join('catalogo_auditorias as ca', 'ca.id', '=', 'fd.id_auditoria')
->join('catalogo_numeros_auditoria as cna', 'cna.id', '=', 'fd.nAuditoria')
->select(
'fd.id as id_fondo',
'ccp.id as id',
'ccp.nombre_clave as clave',
'ca.auditoria as uaa',
'cna.numeroAuditoria as nAuditoria',
)
->orderBy('clave', 'ASC')
->orderBy('uaa', 'ASC')
->get();
return response()->json($q, 200);
}
// Datos del monto de la dependencia y el ramo al que pertenece
public function datosClaveFFDependencia(Request $r, $id_clave, $year, $dependencia, $idnAuditoria)
{
$datos['monto'] = DB::table('fondo_dependencia')
->where('id_dependencia', $dependencia)
->where('year', $year)
->where('clave_ff', $id_clave)
->where('nAuditoria', $idnAuditoria)
->first()->monto;
$datos['ramo'] = DB::table('catalogo_claves_presupuestales')->where('id', $id_clave)->first()->ramo;
return response()->json($datos, 200);
}
// AGREGAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function addClave()
{
$data = [];
$dependencias = DB::table('dependencias as d')
->where('id_estado', Auth::user()->id_estado);
switch (Auth::user()->type) {
// 1 - Root
case 1:
$data['dependencias'] = $dependencias->where('id_municipio', Auth::user()->id_municipio)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->get();
break;
// 3 - Enlace estatal
case 3:
$data['dependencias'] = $dependencias->get();
break;
// 2 - Administrador de dependencia
// 4 - ejecutor
case 2:
case 4:
$v = DB::table('fondo_dependencia')
->where('id_dependencia', Auth::user()->id_dependencia)
->where('year', now()->year)
->count();
$data['dependencias'] = $dependencias->where('id_dependencia', Auth::user()->id_dependencia)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->first();
$data['fondo'] = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'fd.clave_ff')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->select(
'fd.id',
'ccp.id as id_clave',
'ccp.nombre_clave as clave',
'ccp.ramo',
'fd.monto as monto'
)
->first();
$con_cff = DB::table('clave_ff as cff')
->select('cff.id_fondo_dependencia')
->where('cff.id_dependencia', Auth::user()->id_dependencia)
->WhereNotNull('cff.id_fondo_dependencia')
->get();
$a_con_cff = [];
foreach ($con_cff as $kIdFondo => $id_fondo) {
$a_con_cff[] = $id_fondo->id_fondo_dependencia;
}
$years = DB::table('fondo_dependencia as fd')
->select('fd.year')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->whereNotIn('fd.id', $a_con_cff)
->groupBy('fd.year')
->orderBy('fd.year', 'asc')
->get();
$data['yearsRegistrados'] = [];
foreach ($years as $kYear => $year) {
$data['yearsRegistrados'][] = $year->year;
}
break;
}
if ($data['fondo'] == NULL) {
return \Redirect::back()->withErrors([LU::t_tr('D', 'dependencia', 's') . ' no tiene ' . LU::t_tr('v', 'fondo', 'p') . ' asignados']);
}
$data['claves'] = TipoClave::all();
return view('asf_layout.addClave', $data);
}
// AGREGAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA) Finanzas
public function addClaveFinanzas()
{
$data = [];
$dependencias = DB::table('dependencias as d')
->where('id_estado', Auth::user()->id_estado);
switch (Auth::user()->type) {
case 8: //finanzas estatal
case 9: //finanzas municipal
$data['dependencias'] = $dependencias->where('id_dependencia', Auth::user()->id_dependencia)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->first();
$data['fondo'] = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'fd.clave_ff')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->select(
'fd.id',
'ccp.id as id_clave',
'ccp.nombre_clave as clave',
'ccp.ramo',
'fd.monto as monto'
)
->first();
break;
}
if ($data['fondo'] == NULL) {
return \Redirect::back()->withErrors([LU::t_tr('D', 'dependencia', 's') . ' no tiene ' . LU::t_tr('v', 'fondo', 'p') . ' asignados']);
}
$data['claves'] = TipoClave::all();
return view('asf_layout.addClaveFinanzas', $data);
}
//OBTIENE LOS DATOS DE fondo_dependencia Y LOS CONTRASTA CON clave_ff PARA OBTENER UNA LISTA DE FONDOS NO REGISTRADOS
public function getClavesFFNotInTable($dependencia, $year)
{
$data = DB::table('fondo_dependencia as fd')
->leftJoin('clave_ff as cf', 'fd.id', '=', 'cf.id_fondo_dependencia')
->join('catalogo_claves_presupuestales as ccp', 'fd.clave_ff', '=', 'ccp.id')
->join('catalogo_numeros_auditoria as cna', 'fd.nAuditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->select('fd.id as id_fondo', 'fd.clave_ff as id', 'ccp.nombre_clave as clave', 'cna.numeroAuditoria as nAuditoria', 'ca.auditoria as uaa', 'cna.id as id_nAuditoria')
->where('fd.year', $year)
->where('fd.id_dependencia', $dependencia)
->whereNull('cf.id_ff')
->get();
return response()->json($data);
}
// GUARDAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (INSERTAR)
public function saveClave(Request $r)
{
$errorEncontrado = '';
$id_clave_ff = 0;
$claveRegistrada = null;
DB::Begintransaction();
try {
// Insertar
$datos = $r->except([
'_token',
'excel_url_archivo',
'excel_lista_anexo_GD1',
'excel_lista_anexo_GD2',
//paraEstatusAnexos
'cb_anexo_gd',
'cb_anexo_adq',
'cb_anexo_obras',
'cb_anexo_egresos',
'cb_anexo_nomina',
'cb_anexo_c4k',
'cb_anexo_OyAdq',
//paraEstatusDocumentos
'cb_actas_cabildo',
'cb_contratos_cuentas_bancarias',
'cb_edos_cuentas01',
'cb_edos_cuentas02',
'cb_edos_cuentas03',
'cb_edos_cuentas04',
'cb_edos_cuentas05',
'cb_edos_cuentas06',
'cb_edos_cuentas07',
'cb_edos_cuentas08',
'cb_edos_cuentas09',
'cb_edos_cuentas10',
'cb_edos_cuentas11',
'cb_edos_cuentas12',
'cb_formato_3',
'cb_formato_3A',
'cb_formato_3B',
'cb_formato_4'
]);
$datos['cap1k'] = $r->cap1k ? $r->cap1k : 0;
$datos['cap4k'] = $r->cap4k ? $r->cap4k : 0;
$datos['monto_nomina'] = $r->monto_nomina != NULL ? $r->monto_nomina : 0;
$datos['fecha'] = date('Y-m-d');
$datos['id_estado'] = Auth::user()->id_estado;
$datos['id_municipio'] = Auth::user()->id_municipio;
$datos['fondo_revolvente'] = 0;
$datos['estatus'] = 0;
$datos['created_at'] = date('Y-m-d H:i:s');
//paraEstatusAnexos
$datos['estatus_archivo'] = isset($r->cb_anexo_gd) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_adq'] = isset($r->cb_anexo_adq) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_obras'] = isset($r->cb_anexo_obras) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_egresos'] = isset($r->cb_anexo_egresos) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_nomina'] = isset($r->cb_anexo_nomina) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_c4k'] = isset($r->cb_anexo_c4k) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_obras_y_adq'] = isset($r->cb_anexo_OyAdq) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['obras'] = isset($r->cb_anexo_obras) ? '1' : '0'; //indica si hay o no obras
// Guardar y obtener el ID del registro insertado
$id_clave_ff = DB::table('clave_ff')->insertGetId($datos);
$claveRegistrada = Claves::with(['c_ccp', 'c_cna'])->Where('id_ff', $id_clave_ff)->first();
//paraEstatusDocumentos
$documentosFondo = new DOCF;
$documentosFondo->id_clave_ff = $id_clave_ff;
$documentosFondo->actas_cabildo = isset($r->cb_actas_cabildo) ? '0' : '5';
$documentosFondo->contratos_cuentas_bancarias = isset($r->cb_contratos_cuentas_bancarias) ? '0' : '5';
$documentosFondo->edos_cuentas_01 = isset($r->cb_edos_cuentas01) ? '0' : '5';
$documentosFondo->edos_cuentas_02 = isset($r->cb_edos_cuentas02) ? '0' : '5';
$documentosFondo->edos_cuentas_03 = isset($r->cb_edos_cuentas03) ? '0' : '5';
$documentosFondo->edos_cuentas_04 = isset($r->cb_edos_cuentas04) ? '0' : '5';
$documentosFondo->edos_cuentas_05 = isset($r->cb_edos_cuentas05) ? '0' : '5';
$documentosFondo->edos_cuentas_06 = isset($r->cb_edos_cuentas06) ? '0' : '5';
$documentosFondo->edos_cuentas_07 = isset($r->cb_edos_cuentas07) ? '0' : '5';
$documentosFondo->edos_cuentas_08 = isset($r->cb_edos_cuentas08) ? '0' : '5';
$documentosFondo->edos_cuentas_09 = isset($r->cb_edos_cuentas09) ? '0' : '5';
$documentosFondo->edos_cuentas_10 = isset($r->cb_edos_cuentas10) ? '0' : '5';
$documentosFondo->edos_cuentas_11 = isset($r->cb_edos_cuentas11) ? '0' : '5';
$documentosFondo->edos_cuentas_12 = isset($r->cb_edos_cuentas12) ? '0' : '5';
$documentosFondo->formato_3 = isset($r->cb_formato_3) ? '0' : '5';
$documentosFondo->formato_3A = isset($r->cb_formato_3A) ? '0' : '5';
$documentosFondo->formato_3B = isset($r->cb_formato_3B) ? '0' : '5';
$documentosFondo->formato_4 = isset($r->cb_formato_4) ? '0' : '5';
$documentosFondo->save();
if ($r->excel_url_archivo != null) { //cuando no se registr numero del anexo gd, por lo que se registr el excel
//guardar anexo gastos diversos y de operaciones
$json_lista_anexo_GD1 = json_decode($r->excel_lista_anexo_GD1);
$json_lista_anexo_GD2 = json_decode($r->excel_lista_anexo_GD2);
foreach ($json_lista_anexo_GD1 as $kranexo => $ranexo) {
$reg = new AGDO;
$reg->rfc = $ranexo->rfc;
$reg->nombre = $ranexo->nombre;
$reg->descripcion = $ranexo->descripcion;
$reg->fecha_adq_gasto = $ranexo->fecha_adq_gasto;
$reg->monto_pagado = $ranexo->monto_pagado;
$reg->entregable = $ranexo->entregable;
$reg->monto_pagado_fondo = $ranexo->monto_pagado_fondo;
$reg->partida_clasificatoria = $ranexo->partida_clasificatoria;
$reg->num_factura = $ranexo->num_factura;
$reg->num_poliza = $ranexo->num_poliza;
$reg->num_poliza = $ranexo->num_poliza;
$reg->es_gasto_diverso = '1';
$reg->id_clave_ff = $id_clave_ff;
$reg->save();
}
foreach ($json_lista_anexo_GD2 as $kranexo => $ranexo) {
$reg = new AGDO;
$reg->rfc = $ranexo->rfc;
$reg->nombre = $ranexo->nombre;
$reg->descripcion = $ranexo->descripcion;
$reg->fecha_adq_gasto = $ranexo->fecha_adq_gasto;
$reg->monto_pagado = $ranexo->monto_pagado;
$reg->entregable = $ranexo->entregable;
$reg->monto_pagado_fondo = $ranexo->monto_pagado_fondo;
$reg->partida_clasificatoria = $ranexo->partida_clasificatoria;
$reg->num_factura = $ranexo->num_factura;
$reg->num_poliza = $ranexo->num_poliza;
$reg->num_poliza = $ranexo->num_poliza;
$reg->es_gasto_diverso = '0';
$reg->id_clave_ff = $id_clave_ff;
$reg->save();
}
Claves::where('id_ff', $id_clave_ff)->update(['estatus_archivo' => 1]);
//guardar excel del anexo
$json_url_archivo = json_decode($r->excel_url_archivo);
$url = '/' . 'uploads/' . $r->year . '/' . 'anexoGD/' . $r->id_dependencia . '/' . $r->clave_ff . '/' . $r->year . '/' . $r->id_nauditoria . '/anexoGD_' . date('Ymd_His') . '.xlsx';
$dirname = dirname(public_path() . $url);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url, 'wb');
$data = explode(',', $json_url_archivo);
fwrite($file, base64_decode($data[1]));
fclose($file);
$claveRegistrada = Claves::Where('id_ff', $id_clave_ff)->first();
$claveRegistrada->url_anexo_gd = $url;
$claveRegistrada->save();
}
} catch (\Exception $e) {
$errorEncontrado = 'Error al registrar' . LU::t_tr('d', 'fondo', 's') . ', por favor contacte con servicio tcnico.' . $e->getMessage();
}
if ($errorEncontrado != '') {
DB::rollback();
return redirect()->back()->withErrors([$errorEncontrado]);
} else {
DB::commit();
return redirect()->back()->with('success', 'Se guardaron correctamente los datos: ' . LU::t_tr('v', 'fondo', 's') . ' ' . ($claveRegistrada ? '"' . $claveRegistrada->c_ccp->nombre_clave . '"' : '') . ', ' . LU::t_tr('v', 'num_auditoria', 's') . ' "' . $claveRegistrada->c_cna->numeroAuditoria . '" del ao ' . $r->year . '. Puede verlo en el men "' . LU::t_pr('m_captura_anexos') . '" - "' . LU::t_tr('v', 'adquisiciones_obras', 'P') . '" y seleccione un "Ao a mostrar".');
}
}
//AGREGAR FONDO FINANZAS
public function saveClaveFinanzas(Request $r)
{
$data['errores'] = null;
$newClave = null;
$exist = CFFFINANZAS::where(['id_dependencia' => $r->id_dependencia, 'id_catalogo_numeros_auditoria' => $r->id_catalogo_numeros_auditoria, 'id_catalogo_claves_presupuestales' => $r->id_catalogo_claves_presupuestales])->first();
if ($exist != null) { //caso en que la combinacin ya se encuentra en la BD
if ($exist->id != $r->id) { //Caso en que no coinciden los Id ya que son registros diferentes
$data['errores'][] = LU::t_tr('D', 'fondo', 's') . ' ya se encuentra registrado, verifique la tabla inferior.';
} //else en caso en que el id coincide por lo que se trata del mismo registro, por lo que si se deberia guardar
} //else caso en que la combinacin no se encuentra en la bd, por lo que si se deberia guardar
if ($data['errores'] == null) { //guardar en caso que no haya errores
try {
$newClave = CFFFINANZAS::findOrFail($r->id);
} catch (\Throwable $th) {
$newClave = new CFFFINANZAS();
}
try {
$newClave->id_dependencia = $r->id_dependencia;
$newClave->id_catalogo_numeros_auditoria = $r->id_catalogo_numeros_auditoria;
$newClave->id_catalogo_claves_presupuestales = $r->id_catalogo_claves_presupuestales;
$newClave->nombre_responsable = $r->firma_responsable;
$newClave->cargo_responsable = $r->cargo_responsable;
//paraEstatusAnexos Finanzas
$newClave->estatus_anexo_egresos = $this->obtenerEstatusModificado($newClave->estatus_anexo_egresos, $r->estatus_anexo_egresos);
$newClave->estatus_anexo_transf = $this->obtenerEstatusModificado($newClave->estatus_anexo_transf, $r->estatus_anexo_transf);
$newClave->updated_at = Carbon::now();
$newClave->save();
} catch (\Exception $e) {
$data['errores'][] = 'Ocurri un error al intentar editar ' . LU::t_tr('d', 'fondo', 's') . '. Contacte a servicio tcnico.';
}
}
return $data;
}
//ELIMINAR FONDO FINANZAS
public function deleteClaveFinanzas(Request $r)
{
$data = [];
$mensajeDeErrorGlobal = '';
$oCffFinanzas = CFFFINANZAS::find($r->id_clave_ff_finanzas);
if ($oCffFinanzas == null) {
$mensajeDeErrorGlobal = 'No se puede eliminar ' . LU::t_tr('d', 'fondo', 's') . ', ya que no existe en el sistema.';
} else {
$estatusExistentes = '';
try {
//paraEstatusAnexos Finanzas
$estatusAnexoEgresos = $oCffFinanzas->estatus_anexo_egresos;
if (!in_array($estatusAnexoEgresos, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Egresos es: ' . $this->estatusAnexoArchivo($estatusAnexoEgresos, 8) . "\n";
}
$estatusAnexoTransfEjec = $oCffFinanzas->estatus_anexo_transf;
if (!in_array($estatusAnexoTransfEjec, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Transferencia a ejecutores es: ' . $this->estatusAnexoArchivo($estatusAnexoTransfEjec, 8) . "\n";
}
if ($estatusExistentes == '') {
try {
if ($oCffFinanzas->delete()) {
DB::commit();
} else {
DB::rollback();
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . ' Contacte a soporte tcnico.';
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio tcnico.' . $e->getMessage();
}
} else {
$mensajeDeErrorGlobal = "Solo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " si sus " . LU::t_tr('v', 'anexo', 'p') . " se encuentran en estatus 'Sin cargar' o 'No aplica'.\n\nNo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " debido a que: \n" . $estatusExistentes;
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . ' solicitado. Contacte a servicio tcnico.' . $e->getMessage();
}
}
$data['errores'] = $mensajeDeErrorGlobal == '' ? null : $mensajeDeErrorGlobal;
return $data;
}
// EDITAR UNA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function editClave(Request $r, $idFondo)
{
$data = [];
$data['cff'] = Claves::With(['c_d', 'c_tc', 'c_cna'])->Where('id_ff', $idFondo)->first();
$data['docf'] = [];
$documentos_fondo = DOCF::Where('id_clave_ff', $idFondo)->first();
if ($documentos_fondo != null) {
$data['docf'] = $documentos_fondo;
}
$data['cff']->c_cna->cna_ca;
$data['h_cff'] = hcf::With(['h_u'])->Where('id_clave_ff', $idFondo)->orderBy('created_at', 'desc')->get();
$data['listaEstatus'] = ['Sin cargar', 'Cargado sin enviar a revisin', 'Enviado ' . LU::t_tr('a_d', 'enlace', 's'), 'Enviado ' . LU::t_tr('a_d', 'asf', 's'), 'Regresado ' . LU::t_tr('a_d', 'ejecutor', 's'), 'No aplica'];
return view('asf_layout.editClave', $data);
}
// GUARDAR LA EDICIN DE UNA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA EXISTENTE
public function updateClave(Request $r, $idFondo)
{
DB::Begintransaction();
try {
$clave = Claves::find($idFondo);
$tieneObrasNew = ($r->obras == 'SI' ? 1 : ($r->obras == 'NO' ? 0 : NULL));
HCF::create([
'id_clave_ff' => $idFondo,
'monto_recibido' => $r->monto_recibido == $clave->monto_recibido ? NULL : $r->monto_recibido,
'cap1k' => $r->cap1k == $clave->cap1k ? NULL : $r->cap1k,
'cap4k' => $r->cap4k == $clave->cap4k ? NULL : $r->cap4k,
'nombre_responsable' => $r->nombre_responsable == $clave->firma_responsable ? NULL : $r->nombre_responsable,
'cargo_responsable' => $r->cargo_responsable == $clave->cargo_responsable ? NULL : $r->cargo_responsable,
'obras' => $tieneObrasNew == $clave->obras ? NULL : $tieneObrasNew,
'id_usuario' => Auth::user()->id,
]);
$documentos_fondo = DOCF::Where('id_clave_ff', $idFondo)->first();
if ($documentos_fondo == null) {
$documentos_fondo = new DOCF();
$documentos_fondo->id_clave_ff = $idFondo;
}
$clave->monto_recibido = ($r->monto_recibido == NULL || $r->monto_recibido == '') ? 0 : $r->monto_recibido;
$clave->cap1k = ($r->cap1k == NULL || $r->cap1k == '') ? 0 : $r->cap1k;
$clave->cap4k = ($r->cap4k == NULL || $r->cap4k == '') ? 0 : $r->cap4k;
$clave->monto_nomina = ($r->monto_nomina == NULL || $r->monto_nomina == '') ? 0 : $r->monto_nomina;
$clave->firma_responsable = ($r->nombre_responsable == NULL || $r->nombre_responsable == '') ? $clave->firma_responsable : $r->nombre_responsable;
$clave->cargo_responsable = ($r->cargo_responsable == NULL || $r->cargo_responsable == '') ? $clave->cargo_responsable : $r->cargo_responsable;
// $clave->obras = $r->obras == 'SI' ? 1 : ($r->obras == 'NO' ? 0 : NULL);
//paraEstatusAnexos
$clave->estatus_archivo = $this->obtenerEstatusModificado($clave->estatus_archivo, isset($r->cb_anexo_gd));
$clave->estatus_anexo_adq = $this->obtenerEstatusModificado($clave->estatus_anexo_adq, isset($r->cb_anexo_adq));
$clave->estatus_anexo_obras = $this->obtenerEstatusModificado($clave->estatus_anexo_obras, isset($r->cb_anexo_obras));
$clave->estatus_anexo_egresos = $this->obtenerEstatusModificado($clave->estatus_anexo_egresos, isset($r->cb_anexo_egresos));
$clave->estatus_anexo_nomina = $this->obtenerEstatusModificado($clave->estatus_anexo_nomina, isset($r->cb_anexo_nomina));
$clave->estatus_anexo_c4k = $this->obtenerEstatusModificado($clave->estatus_anexo_c4k, isset($r->cb_anexo_c4k));
$clave->estatus_anexo_obras_y_adq = $this->obtenerEstatusModificado($clave->estatus_anexo_obras_y_adq, isset($r->cb_anexo_OyAdq));
$clave->obras = isset($r->cb_anexo_obras) ? '1' : '0'; //indica si hay o no obras
//paraEstatusDocumentos
$documentos_fondo->actas_cabildo = $this->obtenerEstatusModificado($documentos_fondo->actas_cabildo, isset($r->cb_actas_cabildo));
$documentos_fondo->contratos_cuentas_bancarias = $this->obtenerEstatusModificado($documentos_fondo->contratos_cuentas_bancarias, isset($r->cb_contratos_cuentas_bancarias));
$documentos_fondo->edos_cuentas_01 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_01, isset($r->cb_edos_cuentas01));
$documentos_fondo->edos_cuentas_02 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_02, isset($r->cb_edos_cuentas02));
$documentos_fondo->edos_cuentas_03 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_03, isset($r->cb_edos_cuentas03));
$documentos_fondo->edos_cuentas_04 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_04, isset($r->cb_edos_cuentas04));
$documentos_fondo->edos_cuentas_05 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_05, isset($r->cb_edos_cuentas05));
$documentos_fondo->edos_cuentas_06 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_06, isset($r->cb_edos_cuentas06));
$documentos_fondo->edos_cuentas_07 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_07, isset($r->cb_edos_cuentas07));
$documentos_fondo->edos_cuentas_08 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_08, isset($r->cb_edos_cuentas08));
$documentos_fondo->edos_cuentas_09 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_09, isset($r->cb_edos_cuentas09));
$documentos_fondo->edos_cuentas_10 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_10, isset($r->cb_edos_cuentas10));
$documentos_fondo->edos_cuentas_11 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_11, isset($r->cb_edos_cuentas11));
$documentos_fondo->edos_cuentas_12 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_12, isset($r->cb_edos_cuentas12));
$documentos_fondo->formato_3 = $this->obtenerEstatusModificado($documentos_fondo->formato_3, isset($r->cb_formato_3));
$documentos_fondo->formato_3A = $this->obtenerEstatusModificado($documentos_fondo->formato_3A, isset($r->cb_formato_3A));
$documentos_fondo->formato_3B = $this->obtenerEstatusModificado($documentos_fondo->formato_3B, isset($r->cb_formato_3B));
$documentos_fondo->formato_4 = $this->obtenerEstatusModificado($documentos_fondo->formato_4, isset($r->cb_formato_4));
$documentos_fondo->save();
$clave->save();
DB::commit();
return \Redirect::to('/layouts');
} catch (\Except $e) {
DB::rollback();
return \Redirect::to("/layouts")->withErrors(['No se pudo guardar la informacin proporcionada al sistema']);
}
}
public function obtenerEstatusModificado($estatus, $estaMarcado)
{
$estatusNuevo = $estatus != null ? intval($estatus) : intval('5');
if ($estatusNuevo == 5) { //si en la bd es "no aplica"
$estatusNuevo = $estaMarcado ? 0 : $estatusNuevo;
} else { //casos donde el estatus es diferente de 5
$estatusNuevo = $estaMarcado ? $estatusNuevo : 5;
}
return $estatusNuevo;
}
/*******************************************************/
/* HELPERS CAMBIOS DE VISTAS */
/*******************************************************/
// SELECCIN DE MDULO DE OBRAS/ADQUISICIONES
public function seleccionModulo(Request $r, $id)
{
$resp['clave_ff'] = $id;
$resp['clave'] = DB::table('clave_ff')->where('id_ff', $id)->first();
return view('asf_layout.helpers.obrasomateriales', $resp);
}
// SELECCIN DEL TIPO DE REGISTRO DEL CONTRATO: Bsico (Modo1 y 2) o intermedio (Modo3)
public function tipoRegistro(Request $r, $modulo, $id, $year)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['modulo'] = $modulo;
$datos['clave'] = $id;
$datos['year'] = $year;
$datos['cff'] = DB::table('clave_ff')->where('id_ff', $id)->first();
return view('asf_layout.helpers.tipoRegistro', $datos);
}
/******************************************************/
/* CONTRATOS */
/******************************************************/
//Variables globales para modoAdd1:
private $modulo = "";
private $c_ff = "";
private $guardado_correcto = true;
private $abrirExcelCorrecto = true;
private $hojaActual = 0;
private $contadorRegistro = 0;
private $mensajeException = '';
private $soloMensajeException = false;
private $arrayNombresExcel = [ //el cambio de nombres se debe hacer en todo este archivo y en el rea de las excepciones de la BD de este archivo
'DE ANTICIPO' => 'de_anticipo',
'DE CUMPLIMIENTO' => 'de_cumplimiento',
'DE VICIOS OCULTOS' => 'de_vicios_ocultos',
'FECHA DE ACTA FINIQUITO (dd/mm/yyyy)' => 'fecha_de_acta_finiquito_ddmmyyyy',
'MODALIDAD DE CONTRATACIN (POR CONTRATO o POR ADMINISTRACIN DIRECTA)' => 'modalidad_de_contratacion_por_contrato_o_por_administracion_directa',
'MONTO DEL CONTRATO C/IVA (en pesos)' => 'monto_del_contrato_civa_en_pesos',
'MONTO FACTURA C/IVA (en pesos)' => 'monto_factura_civa_en_pesos',
'MONTO PAGADO CON FAFEF' => 'monto_pagado_con_fafef',
'MONTO PAGADO CON FAIS' => 'monto_pagado_con_fais',
'MONTO PAGADO CON FEIEF' => 'monto_pagado_con_feief',
'MONTO PAGADO CON PARTICIPACIONES' => 'monto_pagado_con_participaciones',
'MONTO PAGADO CON PARTICIPACIONES A MUN.' => 'monto_pagado_con_participaciones_a_mun',
'MONTO PAGADO CON FORTAMUN' => 'monto_pagado_con_fortamun',
'NOMBRE, DENOMINACIN Y/O RAZN SOCIAL' => 'nombre_denominacion_yo_razon_social',
'NM. CONTRATO O ACUERDO DE OBRA' => 'num_contrato_o_acuerdo_de_obra',
'NM. CONTRATO' => 'num_contrato',
'NM. FACTURA O FOLIO FISCAL' => 'num_factura_o_folio_fiscal',
'NM. PLIZA' => 'num_poliza',
'OBJETO DEL CONTRATO O NOMBRE DEL PROYECTO' => 'objeto_del_contrato_o_nombre_del_proyecto',
'OBJETO DEL CONTRATO' => 'objeto_del_contrato',
'PARTIDA CLASIFICADOR' => 'partida_clasificador',
'PERIODO DE EJECUCIN FIN (dd/mm/yyyy)' => 'periodo_de_ejecucion_fin_ddmmyyyy',
'PERIODO DE EJECUCIN INICIO (dd/mm/yyyy)' => 'periodo_de_ejecucion_inicio_ddmmyyyy',
'RFC DE EMPRESAS CONCURSANTES (en caso de ser LP o IR)' => 'rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir',
'RFC DE EMPRESAS EN SONDEO DE MERCADO' => 'rfc_de_empresas_en_sondeo_de_mercado',
'RFC' => 'rfc',
'TIPO DE ENTREGABLE (documento que acredite la entrega)' => 'tipo_de_entregable_documento_que_acredite_la_entrega',
'TIPO DE PROCEDIMIENTO (LP o IR o AD)' => 'tipo_de_procedimiento_lp_o_ir_o_ad',
'VIGENCIA DEL CONTRATO FIN (dd/mm/yyyy)' => 'vigencia_del_contrato_fin_ddmmyyyy',
'VIGENCIA DEL CONTRATO INICIO (dd/mm/yyyy)' => 'vigencia_del_contrato_inicio_ddmmyyyy',
];
// validacion de cada celda
private function validarCampoAdd1($campos, $nombreColumnaExcel, $permiteNoAplica, $idValidacion = 0, $obligatorio = true)
{
$mensajeValidacion = "";
$texto = $campos[$nombreColumnaExcel];
$nombreMostrar = str_contains($nombreColumnaExcel, 'monto_pagado_con') ? 'MONTO PAGADO CON ' . mb_strtoupper(LU::t_tr('v', 'fondo_programa', 'S')) : array_search($nombreColumnaExcel, $this->arrayNombresExcel);
if ($obligatorio && ($texto == null || $texto == "") && $nombreColumnaExcel != 'tipo_de_procedimiento_lp_o_ir_o_ad') { //campos vacios
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" debe llenarse. Recuerde no combinar celdas.';
if ($permiteNoAplica) {
$mensajeValidacion .= ' Es posible utilizar N/A';
}
}
if (!$permiteNoAplica && mb_strtoupper($texto) == "N/A" && $nombreColumnaExcel != 'tipo_de_procedimiento_lp_o_ir_o_ad') { //campos con N/A
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" no debe llenarse con N/A';
}
$pattern = LU::get_regex($idValidacion, true);
$condicion = "";
switch ($idValidacion) {
case 1: //"De dd/mm/yyyy a dd/mm/yyyy"
$condicion = 'debe contener un rango de fechas "De dd/mm/yyyy a dd/mm/yyyy" (sin comillas).';
break;
case 4: //fecha dd/mm/yyyy
$condicion = 'debe ser una fecha en formato "dd/mm/yyyy" (sin comillas).';
break;
case 8: //partidas clasificadorias para adquisiciones 2k's, 3k's o 5k's, ej: 5057
$condicion = 'debe ser un nmero asociado al captulo 2000, 3000 5000.';
break;
case 9: //partidas clasificadorias para obras 6k's, ej: 6057
$condicion = 'debe ser un nmero asociado al captulo 6000.';
break;
}
if ($condicion != "") {
if ($idValidacion == 4) { //cuando son fechas
$fechaDT = NULL;
try { //cuando recibe un numero y lo pasa a datetime
$fechaDT = Date::excelToDateTimeObject($texto);
} catch (\Exception $e) {
}
if ($fechaDT == NULL) { //valida si fallo la conversion de numero a datetime
try { //cuando recibe un string y lo pasa a datetime
$fechaDT = date_create_from_format('d/m/Y', $texto);
} catch (\Exception $e) {
}
}
if ($fechaDT == NULL) { //cuando no se pudo obtener datetime con numero ni string
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" ' . $condicion;
} else { //caso en el que se obtuvo datetime correctamente
$campos[$nombreColumnaExcel] = $fechaDT->format('Y-m-d');
$fechaMostrar = $fechaDT->format('d/m/Y');
$yearReg = intval($fechaDT->format('Y'));
if ($yearReg < 100) { //caso en que usaron formato de dos digitos para el ao
$fechaFormat2y = date_create_from_format('d/m/y', $texto);
$fechaMostrar = $fechaFormat2y->format('d/m/Y');
$yearReg = intval($fechaFormat2y->format('Y'));
}
$yearMin = intval($this->yearDeclarado);
$yearMax = intval($this->yearDeclarado + 1);
if ($yearReg < $yearMin || $yearReg > $yearMax) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '"' . ': "' . $fechaMostrar . '", debe ser una fecha entre ' . $yearMin . ' y ' . $yearMax . '.';
} else {
$campos[$nombreColumnaExcel] = $fechaDT->format('Y-m-d');
if (in_array($nombreColumnaExcel, ['periodo_de_ejecucion_inicio_ddmmyyyy', 'vigencia_del_contrato_inicio_ddmmyyyy'])) {
$this->fechaInicio = $campos[$nombreColumnaExcel];
} elseif (in_array($nombreColumnaExcel, ['periodo_de_ejecucion_fin_ddmmyyyy', 'vigencia_del_contrato_fin_ddmmyyyy'])) {
$this->fechaFin = $campos[$nombreColumnaExcel];
if ($this->fechaInicio != null && $this->fechaInicio > $this->fechaFin) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '"' . ': "' . $fechaMostrar . '", debe ser una fecha igual o posterior a la fecha de inicio.';
}
}
}
}
} elseif (!preg_match($pattern, $texto)) { //Validar texto cuando no son fechas
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" ' . $condicion;
}
}
if (Str::startsWith($texto, "=")) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" no debe contener frmulas, ingrese el valor real en la celda.';
}
if ($mensajeValidacion != "") { //Casos con errores
$this->exceptionModoAdd1($this->mensajeException = $mensajeValidacion);
}
}
// validacion de todos los campos en las hojas
public $fechaInicio = null;
public $fechaFin = null;
private function validacionCamposModoAdd1($campos, $modulo, $tituloCabeceraFondo, $modalidadContratacion)
{
$this->fechaInicio = null;
$this->fechaFin = null;
$modalidadAD = mb_strtoupper($modalidadContratacion) == 'POR ADMINISTRACIN DIRECTA';
switch ($this->hojaActual) {
case 0:
$this->validarCampoAdd1($campos, $tituloCabeceraFondo, false);
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "rfc", $modalidadAD);
$this->validarCampoAdd1($campos, "nombre_denominacion_yo_razon_social", $modalidadAD);
$this->validarCampoAdd1($campos, "modalidad_de_contratacion_por_contrato_o_por_administracion_directa", false);
$this->validarCampoAdd1($campos, "tipo_de_procedimiento_lp_o_ir_o_ad", $modalidadAD);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "objeto_del_contrato_o_nombre_del_proyecto", false);
$this->validarCampoAdd1($campos, "periodo_de_ejecucion_inicio_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "periodo_de_ejecucion_fin_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "monto_del_contrato_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "de_anticipo", !$modalidadAD);
$this->validarCampoAdd1($campos, "de_cumplimiento", !$modalidadAD);
$this->validarCampoAdd1($campos, "de_vicios_ocultos", !$modalidadAD);
$this->validarCampoAdd1($campos, "fecha_de_acta_finiquito_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "partida_clasificador", false, 9);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", true);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "rfc", false);
$this->validarCampoAdd1($campos, "nombre_denominacion_yo_razon_social", false);
$this->validarCampoAdd1($campos, "tipo_de_procedimiento_lp_o_ir_o_ad", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "objeto_del_contrato", false);
$this->validarCampoAdd1($campos, "vigencia_del_contrato_inicio_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "vigencia_del_contrato_fin_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "monto_del_contrato_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "de_anticipo", true);
$this->validarCampoAdd1($campos, "de_cumplimiento", true);
$this->validarCampoAdd1($campos, "de_vicios_ocultos", true);
$this->validarCampoAdd1($campos, "tipo_de_entregable_documento_que_acredite_la_entrega", false);
$this->validarCampoAdd1($campos, "partida_clasificador", false, 8);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", true);
}
break;
case 1:
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
}
break;
case 2:
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", false);
$this->validarCampoAdd1($campos, "monto_factura_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "num_poliza", false);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", false);
$this->validarCampoAdd1($campos, "monto_factura_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "num_poliza", false);
}
break;
}
}
// Insertar contratos segn modo
private function exceptionModoAdd1($mensajeDeLaExcepcion, $exceptionExterno = false)
{
$this->guardado_correcto = false;
$errorPlantilla = false;
$mensajeError = "";
$numeroFilasAumentar = 0;
if (!$this->abrirExcelCorrecto) { //verifica que todas las hojas tengan datos
$mensajeError = "Verifique que los " . LU::t_tr('v', 'anexo', 'p') . " (hojas de Excel) tengan datos asociados.";
} else {
$mensajeError = "Existe un dato invlido en la hoja ";
switch ($this->hojaActual) {
case 0:
$mensajeError .= '1';
$numeroFilasAumentar = 16;
break;
case 1:
$mensajeError .= '2';
$numeroFilasAumentar = 7;
break;
case 2:
$mensajeError .= '3';
$numeroFilasAumentar = 8;
break;
}
//Errores en de excepciones automticas al intentar guardar
$error = $mensajeDeLaExcepcion;
if (strpos($error, "Duplicate entry ") !== false && strpos($error, " for key 'contratos_unicos'") !== false) { //Num. contrato duplicado
$this->mensajeException = 'El nmero de contrato est duplicado.';
} elseif (Str::startsWith($error, "Undefined index")) { //Caso que no encontr una cabecera
$errorPlantilla = true;
$this->todosErroresExcelImport = []; //limpia la lista de errores pues es error de la plantilla
$campoEncontrado = true;
$nombreCampoExcel = str_replace('Undefined index: ', '', $error);
$nombreMostrar = array_search($nombreCampoExcel, $this->arrayNombresExcel);
if ($nombreMostrar === false) { //Verifica si existe el valor en el array
$nombreMostrar = $nombreCampoExcel; //Asigna la clave
$campoEncontrado = false;
}
$linkPlantillaCorrecta = '';
$this->mensajeException = $campoEncontrado ? 'No se encontr la columna: '
: 'Se ha detectado una columna indefinida:'; //caso de nuevos campos que se agreguen
$this->mensajeException .= $nombreMostrar . ' (de la hoja ' . ($this->hojaActual + 1) . '). ' .
'Verifique que la plantilla utilizada sea del mdulo correcto y que no haya sido alterada
(nombres ni ubicacin de las cabeceras y las hojas). ' . $linkPlantillaCorrecta;
} else {
$finSubcadena = strpos($error, " at row ");
if (strpos($error, " for column ") !== false && $finSubcadena !== false) { //Caso que no pudo registrar una celda invlida
$subcadena = substr($error, 0, $finSubcadena); //cadena con caracter de columna ' ` de la bd
$caracterColumna = substr($subcadena, -1); //obtiene el ltimo caracter
$subcadena = substr($subcadena, 0, -1); //cadena sin caracter de columna ' ` de la bd
$inicioSubcadena = strripos($subcadena, $caracterColumna); //ultima concurrencia
$columnaBD = substr($subcadena, $inicioSubcadena + 1);
$arrayColumnasBD = [ //debe ser conforme a la base de datos
'El RFC es invlido, debe ser alfanumrico. Ingrese uno por campo.' => 'rfc',
'El nombre, denominacin y/o razon social es invlido, debe ser texto.' => 'nombre_d_r_social',
'La modalidad de contratacin es invlida, debe ser alfanumrica.' => 'modalidad_contratacion',
'El tipo de procedimiento es invlido, debe ser alfanumrico.' => 'tipo_procedimiento',
'El RFC de empresas en sondeo de mercado son invlidos, deben ser alfanumricos.' => 'rfc_empresas_sondeo',
'El RFC de empresas concursantes son invlidos, deben ser alfanumricos.' => 'rfc_empresas_concursantes',
'El nmero de contrato es invlido, debe ser alfanumrico.' => 'numero_contrato',
'El nombre del proyecto es invlido, debe ser alfanumrico.' => 'nombre_proyecto',
'El periodo de ejecucion inicio es invlido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_inicio',
'El periodo de ejecucion fin es invlido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_fin',
'El objeto del contrato es invlido, debe ser alfanumrico.' => 'objeto_contrato',
'La vigencia del contrato inicio es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_inicio',
'La vigencia del contrato fin es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_fin',
'El monto del contrato es invlido, debe ser en pesos (nmero).' => 'monto_contrato',
'El nmero de fianza de anticipo es invlido, puede ser alfanumrico.' => 'de_anticipo',
'El nmero de fianza de cumplimiento es invlido, puede ser alfanumrico.' => 'de_cumplimiento',
'El nmero de fianza de vicios ocultos es invlido, puede ser alfanumrico.' => 'de_vicios_ocultos',
'El tipo de entregable es invlido, debe ser alfanumrico.' => 'tipo_entregable',
'La fecha del acta de finiquito es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'fecha_acta_finiquito',
'El monto pagado con ' . LU::t_tr('i', 'fondo_programa', 's') . ' es invlido, debe ser en pesos (nmero).' => 'montoPagadoConPart',
// 'La partida clasificador es invlida, verifquela.' => 'partidaClasificador', //para no duplicar mensaje se omite
'El nm. factura es invlido, debe ser alfanumrico.' => 'num_factura',
'El nm. pliza es invlido, debe ser alfanumrico.' => 'num_poliza',
'El nm. factura es invlido, debe ser alfanumrico.' => 'nFactura',
'El monto es invlido, debe ser en pesos (nmero).' => 'nMonto',
];
$errorEnCampoBD = array_search($columnaBD, $arrayColumnasBD);
if ($errorEnCampoBD !== false) { //Verifica si existe el valor en el array
$this->mensajeException = $errorEnCampoBD;
}
} else { //descomentar para caso error en el nombre de la columna
// $this->mensajeException = 'Ubicacin error. ' . $error;
}
}
if ($exceptionExterno) {
$this->mensajeException .= " Despus de corregirlo intntelo de nuevo por favor.";
}
$mensajeError .= " en la fila " . ($this->contadorRegistro + $numeroFilasAumentar) . ". " . $this->mensajeException;
if ($this->soloMensajeException || $errorPlantilla) {
$mensajeError = $this->mensajeException;
}
if (strpos($mensajeError, 'El RFC "" no es vlido, verifquelo') === false) { //verifica si el mensaje no es de un rfc est vacio
array_push($this->todosErroresExcelImport, $mensajeError);
}
sort($this->todosErroresExcelImport);
}
}
// CONTRATOS
public function contratosClave(Request $r, $modulo, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
if ($clave_ff->id_dependencia == Auth::user()->id_dependencia) {
$d = Dependencias::with(['d_e', 'd_m'])->where('id_dependencia', Auth::user()->id_dependencia)->first();
$datos['claveAnual'] = (DB::table('clave_ff as ff')->where('id_ff', $id)->select(DB::Raw('YEAR(fecha) as fecha'))->first()->fecha < date('Y')) ? 1 : 0;
$datos['id_ff'] = $id;
$datos['modulo'] = $modulo;
$contratos_o = DB::table('contratos_modo_basico')->where('id_ff', $id);
$contratos_a = DB::table('contratos_modo_basico')->where('id_ff', $id);
// DATOS PARA RESUMEN
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['monto'] = $clave_ff->monto_recibido;
$datos['gastos_diversos'] = self::totalAnexoGD($clave_ff);
$datos['ramo'] = $clave_ff->ramo;
$datos['monto_ramo28'] = $clave_ff->cap1k;
$datos['obras'] = $clave_ff->obras == 1 ? 'Si' : 'No';
$datos['monto_obras'] = $contratos_o->where('modulo', 'O')->where('id_ff', $id)->sum('montoPagadoConPart');
$datos['monto_adquisiciones'] = $contratos_a->where('modulo', 'A')->where('id_ff', $id)->sum('montoPagadoConPart');
$datos['total_reintegro_tesofe'] = Claves::Where(['id_ff' => $id, 'id_dependencia' => $d->id_dependencia])->where('year', $clave_ff->year)->sum('reintegro_tesofe');
// Montos por participaciones se suman ya que no tocan el dinero de la fuente de financiamiento/programa
$datos['utilizado'] = $datos['monto_obras'] + $datos['monto_adquisiciones'] + $datos['monto_ramo28'] + $clave_ff->cap4k + $datos['gastos_diversos']->total + $datos['total_reintegro_tesofe'];
$datos['disponible'] = $datos['monto'] - $datos['utilizado'];
$datos['cff'] = $clave_ff;
//Anexo cap. 4k
$datos['anexo_cap_4k'] = null;
if (in_array($clave_ff->estatus_anexo_c4k, [1, 2, 3, 4])) {
$datos['anexo_cap_4k'] = DB::table('anexo_cap_4k as ac4k')->where('ac4k.id_clave_ff', $id)->first();
}
//num auditoria
$objCNA = DB::table('catalogo_numeros_auditoria')->where('id', $clave_ff->id_nauditoria)->first();
// DATOS GENERALES
$datos['datos_generales'] = (object) [
'year' => $clave_ff->year,
'dependencia' => $d->sDependencia,
'siglas' => $d->sSiglas,
'municipio' => ($d->d_m == NULL) ? 'No aplica' : $d->d_m->municipio,
'estado' => $d->d_e->estado,
'id_dependencia' => $d->id_dependencia,
'id_fondo' => $clave_ff->clave_ff,
'id_nauditoria' => $clave_ff->id_nauditoria,
's_num_auditoria' => $objCNA->numeroAuditoria,
'fecha_cierre' => date('d/m/Y', strtotime($objCNA->fecha_cierre)),
'monto_asignado' => $clave_ff->monto_recibido,
'monto_utilizado' => $datos['utilizado'],
'monto_restante' => $datos['disponible'],
'url_4000' => $d->d_e->id . '/' . $d->d_m->id . '/' . $d->id_dependencia . '/' . $clave_ff->year . '/' . $clave_ff->id_nauditoria . '/' . $clave_ff->clave_ff,
];
$datos['isNumAuditoriaCerrado'] = $objCNA->fecha_cierre < Carbon::today()->startOfDay();
// DATOS PARA TABLA
// $datos['contratos'] = cmb::from('contratos_modo_basico as cmb')
// ->with(['stepper'])
// ->join('catalogo_claves_presupuestales as tcff', 'cmb.clave_ff', '=', 'tcff.id')
// ->where('cmb.id_ff', $id)
// ->where('cmb.modulo', $modulo)
// ->select('cmb.*', 'tcff.nombre_clave')
// ->get();
$datos['contratos'] = CMB::with(['stepper', 'c_ccp', 'c_s', 'c_ec', 'c_nf' => function ($q) {
$q->with(['f_p']);
},])
->where('id_ff', $id)
->where('modulo', $modulo)
->get();
return view('asf_layout.contratos', $datos);
} else {
return \Redirect::to('/api/conexion/vistaRdfs')->with('verificacion', ['No tiene autorizacin para entrar a esta seccin.']);
}
}
public static function obtenerDatosContrato(Request $r)
{
$data = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as ccp', 'cmb.clave_ff', '=', 'ccp.id')
->leftjoin('control_modo_intermedio as cmi', 'cmb.id', '=', 'cmi.id_contrato')
->leftjoin('job_statuses as js', 'js.id', '=', 'cmi.j_descarga_zip_inter')
->where('cmb.id_ff', $r->id_cff)
->where('cmb.modulo', $r->modulo)
->select(
'cmb.id',
'ccp.nombre_clave',
'cmb.nombre_d_r_social',
'cmb.tipo_procedimiento',
'cmb.tipo_registro',
'cmb.numero_contrato',
'cmb.monto_contrato',
'js.status',
'js.output',
'js.operacion_exitosa',
'cmi.id_contrato',
)
->selectRaw('DATEDIFF(NOW(), js.finished_at) as dias_transcurridos')
->get();
return response()->json($data);
}
public static function contarContratos(Request $r)
{
$data = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as ccp', 'cmb.clave_ff', '=', 'ccp.id')
->where('cmb.id_ff', $r->id_cff)
->where('cmb.modulo', $r->modulo)
->count();
return response()->json($data);
}
public static function obtenerPasoContrato(Request $r)
{
$consulta = DB::table('contratos_modo_basico as cmb')
->join('control_modo_intermedio as cmi', 'cmi.id_contrato', '=', 'cmb.id')
->where('cmb.id', $r->id_contrato)
->select(
'cmi.status',
'cmi.step7',
'cmi.step6',
'cmi.step5',
'cmi.step4',
'cmi.step3',
'cmi.step2',
'cmi.step1',
'cmi.step0',
)->first();
$step = 0;
// redireccion de step
if ($step == 0) {
if (!Auth::user()->u_ptu->c_intermedio_datos_iniciales || $consulta->step0) {
$step++;
}
}
if ($step == 1) {
if (!Auth::user()->u_ptu->c_intermedio_suficiencia_presupuestal || $consulta->step1) {
$step++;
}
}
if ($step == 2) {
if (!Auth::user()->u_ptu->c_intermedio_proceso_de_adjudicacion || $consulta->step2) {
$step++;
}
}
if ($step == 3) {
if (!Auth::user()->u_ptu->c_intermedio_proceso_de_contratacion || $consulta->step3) {
$step++;
}
}
if ($step == 4) {
if (!Auth::user()->u_ptu->c_intermedio_entrega || $consulta->step4) {
$step++;
}
}
if ($step == 5) {
if (!Auth::user()->u_ptu->c_intermedio_facturas || $consulta->step5) {
$step++;
}
}
if ($step == 6) {
if (!Auth::user()->u_ptu->c_intermedio_pago_y_polizas || $consulta->step6) {
$step++;
}
}
if (
Auth::user()->u_ptu->c_intermedio_datos_iniciales &&
Auth::user()->u_ptu->c_intermedio_suficiencia_presupuestal &&
Auth::user()->u_ptu->c_intermedio_proceso_de_adjudicacion &&
Auth::user()->u_ptu->c_intermedio_proceso_de_contratacion &&
Auth::user()->u_ptu->c_intermedio_entrega &&
Auth::user()->u_ptu->c_intermedio_facturas &&
Auth::user()->u_ptu->c_intermedio_pago_y_polizas
) {
if ($step == 7 && $consulta->step7) {
$step++;
}
}
$url = '/layouts/contratos/intermedio/' . $step . '/' . $r->id_contrato . '/' . $r->modulo . '/' . $r->id_cff;
return response()->json($url);
}
public static function verInformacionContrato(Request $r)
{
$datos['contrato'] = CMB::with(['stepper', 'c_ccp', 'c_s', 'c_ec', 'c_nf' => function ($q) {
$q->with(['f_p']);
},])
->where('id', $r->id_contrato)
->get();
$listaRegs = [];
$listaRegs['id'] = $datos['contrato'][0]->id;
$listaRegs['clave_ff'] = $datos['contrato'][0]->c_ccp->nombre_clave;
$listaRegs['rfc'] = $datos['contrato'][0]->rfc;
$listaRegs['nombre_d_r_social'] = $datos['contrato'][0]->nombre_d_r_social;
$listaRegs['rfc_empresas_sondeo'] = $datos['contrato'][0]->c_s;
$listaRegs['rfc_empresas_concursantes'] = $datos['contrato'][0]->c_ec;
$listaRegs['numero_contrato'] = $datos['contrato'][0]->numero_contrato;
$listaRegs['monto_contrato'] = $datos['contrato'][0]->monto_contrato;
$listaRegs['de_anticipo'] = $datos['contrato'][0]->de_anticipo;
$listaRegs['de_cumplimiento'] = $datos['contrato'][0]->de_cumplimiento;
$listaRegs['de_vicios_ocultos'] = $datos['contrato'][0]->de_vicios_ocultos;
$listaRegs['monto_pagado_con_part'] = $datos['contrato'][0]->montoPagadoConPart;
$listaRegs['partida_clasificador'] = $datos['contrato'][0]->partidaClasificador;
$listaRegs['num_factura'] = $datos['contrato'][0]->c_nf;
$listaRegs['tipo_registro'] = $datos['contrato'][0]->tipo_registro;
switch ($datos['contrato'][0]->nombre_d_r_social) {
case 'lp':
$listaRegs['tipo_procedimiento'] = 'Licitacin pblica';
break;
case 'ir':
$listaRegs['tipo_procedimiento'] = 'Invitacin restringida';
break;
case 'ad':
$listaRegs['tipo_procedimiento'] = 'Adjudicacin directa';
break;
default:
$listaRegs['tipo_procedimiento'] = 'No aplica';
break;
}
if ($r->modulo == 'O') {
$listaRegs['modalidad-contratacion'] = $datos['contrato'][0]->modalidad_contratacion;
$listaRegs['nombre_proyecto'] = $datos['contrato'][0]->nombre_proyecto;
$listaRegs['periodo_ejecucion_inicio'] = $datos['contrato'][0]->periodo_ejecucion_inicio;
$listaRegs['periodo_ejecucion_fin'] = $datos['contrato'][0]->periodo_ejecucion_fin;
$listaRegs['fecha_acta_finiquito'] = $datos['contrato'][0]->fecha_acta_finiquito;
} else if ($r->modulo == 'A') {
$listaRegs['objeto_contrato'] = $datos['contrato'][0]->objeto_contrato;
$listaRegs['vigencia_contrato_inicio'] = $datos['contrato'][0]->vigencia_contrato_inicio;
$listaRegs['vigencia_contrato_fin'] = $datos['contrato'][0]->vigencia_contrato_fin;
$listaRegs['tipo_entregable'] = $datos['contrato'][0]->tipo_entregable;
}
return response()->json($listaRegs);
}
//calculo del total del anexo GD de un fondo al que pertenece un contrato
public static function totalAnexoGD($objCFF)
{
$tieneAnexoGD = !in_array($objCFF->estatus_archivo, [0, 5]);
$totalAGDO = $objCFF->fondo_revolvente;
return (object)['tieneAnexo' => $tieneAnexoGD, 'total' => $totalAGDO];
}
// EDITAR CONTRATO
public function editarContrato(Request $r, $modulo, $clave, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $clave)->first();
$datos['cff'] = DB::table('clave_ff')->where('id_ff', $clave)->first();
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['clave'] = $clave;
$datos['modulo'] = $modulo;
$datos['id_contrato'] = $id;
$datos['contratos'] = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as tcff', 'cmb.clave_ff', '=', 'tcff.id')
->where('cmb.id', $id)
->select('cmb.*', 'tcff.nombre_clave')
->get();
return View('asf_layout.editar_contrato', $datos);
}
// Seleccin de modo de carga de contratos
public function modoClave(Request $r, $modulo, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
$ccp = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first();
$datos['n_ff'] = $ccp->nombre_clave;
$datos['ccp_id'] = $ccp->id;
$datos['c_ff'] = $clave_ff->clave_ff;
$datos['cff'] = DB::table('clave_ff as c')
->join('catalogo_claves_presupuestales as tcff', 'c.clave_ff', '=', 'tcff.id')
->where('c.id_ff', $id)
->select('c.*', 'tcff.nombre_clave')
->first();
$datos['clave'] = $id;
$datos['modulo'] = $modulo;
$datos['year'] = $r->year;
$datos['nAuditoria'] = $clave_ff->id_nauditoria;
switch ($r->modo) {
case 1:
$datos['contratos'] = DB::table('contratos_excel_files as c')
->join('usuarios as u', 'u.id', '=', 'c.id_usuario')
->join('clave_ff as cff', 'c.id_ff', '=', 'cff.id_ff')
->join('catalogo_claves_presupuestales as ccp', 'cff.clave_ff', '=', 'ccp.id')
->where('c.id_ff', $id)
->where('c.modulo', $modulo)
->select(
'c.*',
'ccp.nombre_clave as fondo_programa',
DB::raw("CONCAT(u.firstname,' ',u.lastname) as username")
)
->get();
return view('asf_layout.modo.modo1', $datos);
break;
case 2:
$datos['contratos'] = DB::table('contratos_modo_basico as c')
->join('catalogo_claves_presupuestales as tcff', 'c.clave_ff', '=', 'tcff.id')
->join('usuarios as u', 'u.id', '=', 'c.id_usuario')
->where('c.id_ff', $id)
->where('c.modulo', $modulo)
->wherein('c.tipo_registro', ['1', '2'])
->select(
'c.*',
'tcff.nombre_clave as nombre_clave',
DB::raw("CONCAT(u.firstname,' ',u.lastname) as username")
)
->get();
$datos['id_contrato'] = $r->has('id_contrato') ? $r->id_contrato : "void";
return View('asf_layout.modo.modo2', $datos);
break;
case 3:
$id_contrato = DB::table('contratos_modo_basico')
->insertGetId([
'id_ff' => $id,
'id_usuario' => Auth::user()->id,
'clave_ff' => $datos['c_ff'],
'tipo_registro' => 3,
'modulo' => $modulo
]);
DB::table('control_modo_intermedio')->insert(['id_ff' => $id, 'modulo' => $modulo, 'id_contrato' => $id_contrato]);
DB::table('files_contratos_modo_basico')->insert(['id_ff' => $id, 'modulo' => $modulo, 'id_contrato' => $id_contrato]);
return \Redirect::to('/layouts/contratos/intermedio/0/' . $id_contrato . '/' . $modulo . '/' . $id);
break;
}
}
//variables
public $lista_anexo_regs = [];
public $todosErroresExcelImport = [];
public $yearDeclarado = 0;
public $userAnexo;
public $hojasAnexo;
public $idNumAuditoriaAnexo;
public $idCcpAnexo;
public $tipoVistaAnexo;
public $archivoExcelAnexo;
// Insertar contratos segn modo
public function modoAdd(Request $r, $modo, $modulo, $id)
{
set_time_limit(0);
$url = '';
$patternRFC = LU::get_regex(0, true);
switch ($modo) {
case 1:
set_time_limit(0);
$mensajeError = '';
$contieneArchivo = false;
try {
if ($r->has('archivo_excel')) {
$data = explode(',', $r->archivo_excel);
$b64Data = base64_decode($data[1]);
$contieneArchivo = true;
}
} catch (\Exception $ex) {
}
if ($contieneArchivo) {
$path = '/' . 'uploads/' . $r->year . '/' . 'basico/' . $modulo . '/';
$name = ($modulo == 'O' ? 'anexoObras_' : 'anexoAdq_') . $id . '-' . Auth::user()->id . '-' . date('Ymd_His') . '.xlsx';
$url = $path . $name;
$dirname = dirname(public_path() . $url);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url, 'wb');
fwrite($file, $b64Data);
fclose($file);
try {
$this->yearDeclarado = $r->year;
$this->idCcpAnexo = $r->ccp_id;
$this->userAnexo = Auth::user();
try {
$ExcelImport = $modulo == 'O' ? new AnexoObras($this->yearDeclarado, $this->userAnexo, $id, $modulo) : new AnexoAdq($this->yearDeclarado, $this->userAnexo, $id, $modulo);
Excel::import($ExcelImport, public_path($url));
} catch (\Throwable $e) {
$ExcelImport->todosErroresExcelImport['Hoja ' . $ExcelImport->hojaActualAnalizada . '. ']['No se pudo analizar, verifique la plantilla y que no haya frmulas que involucren diferentes hojas'] = [];
}
$this->lista_anexo_regs = $ExcelImport->lista_anexo_regs;
$this->todosErroresExcelImport = $ExcelImport->todosErroresExcelImport;
$hayProblemaEmail = false;
if (!sizeof($this->todosErroresExcelImport)) { //si no hay errores se guarda
$hayProblemaEmail = $this->guardarAdqObras($modulo, $id, $r->correo_contacto, $url);
}
if (!sizeof($this->todosErroresExcelImport)) {
$datos = [
'hayProblemaEmail' => $hayProblemaEmail,
];
}
} catch (\Exception $e) {
$error = $e->getMessage();
switch (true) {
case strpos($error, 'Your requested sheet name [') !== false:
$inicioNombre = substr($error, strpos($error, '[') + 1);
$finalNombre = strpos($inicioNombre, ']');
$nombreHoja = substr($inicioNombre, 0, $finalNombre);
$mensajeError = 'No se encontr la hoja "' . $nombreHoja . '", use la plantilla correcta';
break;
default:
$mensajeError = 'Error durante el anlisis del documento, comunquese con servicio tcnico';
break;
}
}
} else {
$mensajeError = 'No se encontr el archivo de Excel';
}
if ($mensajeError != '') {
$this->todosErroresExcelImport['No pudo analizarse. '][$mensajeError] = [];
}
if (sizeof($this->todosErroresExcelImport)) {
$datos = ['errores' => $this->todosErroresExcelImport];
if ($url != '') {
unlink(public_path() . $url);
}
}
return response()->json($datos);
//Codigo viejo:
$numContratos = 0;
DB::beginTransaction();
$this->guardado_correcto = true;
$this->modulo = $modulo;
$datos['modulo'] = $modulo;
$datos['id_ff'] = $id;
$clave_ff = DB::table('clave_ff')->where('id_ff', $id)->first()->clave_ff;
$this->c_ff = $clave_ff;
// $this->year = $r->year;
$this->yearDeclarado = $r->year;
$datos['id_usuario'] = Auth::user()->id;
$datos['correo_contacto'] = $r->correo_contacto;
$datos['created_at'] = date('Y-m-d H:i:s');
$query = DB::table('contratos_excel_files')->where('id_ff', $id);
if ($query->count() < 1) {
$id_cef = DB::table('contratos_excel_files')->insertGetId($datos);
} else if ($query->count() >= 1) {
$query_2 = $query->whereNull('url_archivo');
if ($query_2->count() < 1) {
$id_cef = DB::table('contratos_excel_files')->insertGetId($datos);
} else {
$id_cef = $query->whereNull('url_archivo')->first()->id;
}
}
$name = "";
$path = "";
if (Input::hasFile('archivo_excel')) {
$name = ($modulo == 'O' ? 'AnexoObrasPublicas_' : 'AnexoAdquisiciones_') . $clave_ff . '_' . $id_cef . '.' . Input::file('archivo_excel')->getClientOriginalExtension();
$path = '/' . 'uploads/' . $r->year . '/' . 'basico/' . $id . '/';
$datos['url_archivo'] = $path . $name;
$datos['updated_at'] = Carbon::now();
Input::file('archivo_excel')->move(public_path() . '/' . $path, $name);
$this->todosErroresExcelImport = [];
$this->mensajeException = '';
try {
$this->abrirExcelCorrecto = false;
$ExcelImport = new ExcelImport($this);
Excel::import($ExcelImport, public_path($path . $name));
$this->abrirExcelCorrecto = true;
// Data processing
$this->hojaActual = 0;
$this->contadorRegistro = 0;
//Validacin dinmica
$idFFClaveFF = 0;
$nombreFondoPrograma = "";
$yearCompare = 0;
$query = DB::table('clave_ff')->where('id_ff', $id);
if ($query->count() >= 1) {
$yearCompare = $query->first()->year;
$idDependenciaCompare = Auth::user()->id_dependencia;
$claveFFCompare = $clave_ff;
$query = DB::table('fondo_dependencia')->where([
'id_dependencia' => $idDependenciaCompare,
'year' => $yearCompare,
'clave_ff' => $claveFFCompare
]);
if ($query->count() >= 1) {
$idFondoDependenciaCompare = $query->first()->id;
$query = DB::table('clave_ff')->where(['id_fondo_dependencia' => $idFondoDependenciaCompare]);
if ($query->count() >= 1) {
$idFFClaveFF = $query->first()->id_ff;
}
}
}
$idFFClaveFF = $id; //asignacion manual de idff
if ($idFFClaveFF == 0) {
throw new Exception($this->mensajeException = LU::t_tr('D', 'fondo_programa', 's') . ', el ao y ' . LU::t_tr('d', 'dependencia', 's') . ' no coinciden, verifquelos.');
} else {
$query = DB::table('catalogo_claves_presupuestales')->where(['id' => $clave_ff]);
if ($query->count() >= 1) {
$nombreFondoPrograma = $query->first()->nombre_clave;
} else {
throw new Exception($this->mensajeException = LU::t_tr('D', 'fondo_programa', 's') . ' no se encontr, verifquelo.');
}
}
$arrayNumContratosAnexo0 = [];
$arrayNumContratosAnexo1 = [];
$arrayNumContratosAnexo2 = [];
$tituloCabeceraFondo = 'monto_pagado_con_' . strtolower(LU::limpiarSimplificarString($nombreFondoPrograma));
$modContratacion = "";
$this->soloMensajeException = false;
foreach ($this->lista_contratos_modo_basico as $i => $cmb) {
echo var_dump(" ");
$this->hojaActual = 0;
$this->contadorRegistro = $i;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($cmb as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$modContratacion = $cmb['modalidad_de_contratacion_por_contrato_o_por_administracion_directa'];
$this->validacionCamposModoAdd1($cmb, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($cmb, $modulo, $tituloCabeceraFondo, "");
}
//Objeto
$arr_row_cmb = [];
//Campos tabla
$arr_row_cmb['id_ff'] = $idFFClaveFF;
$arr_row_cmb['id_usuario'] = Auth::user()->id;
$arr_row_cmb['tipo_registro'] = 1;
$arr_row_cmb['modulo'] = $modulo;
//Campos tanto en obras como en adquisiciones
$arr_row_cmb['clave_ff'] = $clave_ff;
//RFC
if ($cmb['rfc'] == "N/A") { //valida si hay "N/A"
$arr_row_cmb['rfc'] = null;
} elseif (preg_match($patternRFC, $cmb['rfc'])) { //Validar RFC
$arr_row_cmb['rfc'] = $cmb['rfc'];
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $cmb['rfc'] . '" no es vlido, verifquelo.');
}
$arr_row_cmb['rfc'] = $cmb['rfc'] == "N/A" ? null : $cmb['rfc'];
$arr_row_cmb['nombre_d_r_social'] = $cmb['nombre_denominacion_yo_razon_social'] == "N/A" ? null : $cmb['nombre_denominacion_yo_razon_social'];
$arr_row_cmb['monto_contrato'] = $cmb['monto_del_contrato_civa_en_pesos'] == "N/A" ? null : $cmb['monto_del_contrato_civa_en_pesos'];
$arr_row_cmb['de_anticipo'] = $cmb['de_anticipo'] == "N/A" ? null : $cmb['de_anticipo'];
$arr_row_cmb['de_cumplimiento'] = $cmb['de_cumplimiento'] == "N/A" ? null : $cmb['de_cumplimiento'];
$arr_row_cmb['de_vicios_ocultos'] = $cmb['de_vicios_ocultos'] == "N/A" ? null : $cmb['de_vicios_ocultos'];
$arr_row_cmb['partidaClasificador'] = $cmb['partida_clasificador'] == "N/A" ? null : $cmb['partida_clasificador'];
//opcionesMontoPagado
$arr_row_cmb['montoPagadoConPart'] = $cmb[$tituloCabeceraFondo] == "N/A" ? null : $cmb[$tituloCabeceraFondo];
//opciones tipo de procedimiento
$arrayTiposProcedimientos = [
'lp' => 'lp',
'ir' => 'ir',
'ad' => 'ad',
];
$tipoDeProcedimiento = strtolower($cmb['tipo_de_procedimiento_lp_o_ir_o_ad']);
$puedeAsignarNoAplica = $modulo == 'O' && mb_strtoupper($modContratacion) == 'POR ADMINISTRACIN DIRECTA';
if ($puedeAsignarNoAplica) { //asignacin automtica de N/A en tipo de procedimiento
// if ($puedeAsignarNoAplica && $tipoDeProcedimiento == 'n/a') {//condicin antigua
$arr_row_cmb['tipo_procedimiento'] = null;
} elseif (!array_key_exists($tipoDeProcedimiento, $arrayTiposProcedimientos)) { //Verifica si no existe la clave en el array
//caso en que no se puede utilizar n/a ni ningun otra respuesta pues se debe ingresar el tipo de procedimiento
$mensaje = 'Verifique que el TIPO DE PROCEDIMIENTO sea: LP o IR o AD.';
// if ($puedeAsignarNoAplica) {
// $mensaje .= ' Es posible utilizar N/A';
// }
$this->exceptionModoAdd1($this->mensajeException = $mensaje);
} else { //Si encontr el valor en el array, por lo que asigna el valor
$arr_row_cmb['tipo_procedimiento'] = $arrayTiposProcedimientos[$tipoDeProcedimiento];
}
//Calcular nmero contrato
$numeroContrato = $modulo == 'O' ? $cmb['num_contrato_o_acuerdo_de_obra'] : $cmb['num_contrato'];
if ($numeroContrato == "N/A") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato no puede ser N/A. Use la nomenclatura SNCx (Sin nmero de contrato, donde x es un nmero) en los ' . LU::t_tr('v', 'anexo', 'p') . ' para asociar los datos.');
} else {
$arr_row_cmb['numero_contrato'] = strpos($numeroContrato, "SNC") === 0 ? libUtilities::consecutivos($arr_row_cmb['id_ff'], $yearCompare) : $numeroContrato;
}
if ($modulo == 'O') { //Campos en Obras
//opciones modalidad de contratacin
$arrayModalidadesContratacion = [
'POR CONTRATO' => 'Por contrato',
'POR ADMINISTRACIN DIRECTA' => 'Por administracin directa',
];
$modalidadDeContratacion = mb_strtoupper($cmb['modalidad_de_contratacion_por_contrato_o_por_administracion_directa']);
if (!array_key_exists($modalidadDeContratacion, $arrayModalidadesContratacion)) { //Verifica si no existe la clave en el array
$this->exceptionModoAdd1($this->mensajeException = 'Verifique que la MODALIDAD DE CONTRATACIN sea:
POR CONTRATO o POR ADMINISTRACIN DIRECTA');
} else { //Si encontr el valor en el array, por lo que asigna el valor
$arr_row_cmb['modalidad_contratacion'] = $arrayModalidadesContratacion[$modalidadDeContratacion];
}
$arr_row_cmb['nombre_proyecto'] = $cmb['objeto_del_contrato_o_nombre_del_proyecto'] == "N/A" ? null : $cmb['objeto_del_contrato_o_nombre_del_proyecto'];
$arr_row_cmb['periodo_ejecucion_inicio'] = $cmb['periodo_de_ejecucion_inicio_ddmmyyyy'] == "N/A" ? null : $cmb['periodo_de_ejecucion_inicio_ddmmyyyy'];
$arr_row_cmb['periodo_ejecucion_fin'] = $cmb['periodo_de_ejecucion_fin_ddmmyyyy'] == "N/A" ? null : $cmb['periodo_de_ejecucion_fin_ddmmyyyy'];
$arr_row_cmb['fecha_acta_finiquito'] = $cmb['fecha_de_acta_finiquito_ddmmyyyy'] == "N/A" ? null : $cmb['fecha_de_acta_finiquito_ddmmyyyy'];
} else { //Campos en Adquisiciones
$arr_row_cmb['objeto_contrato'] = $cmb['objeto_del_contrato'] == "N/A" ? null : $cmb['objeto_del_contrato'];
$arr_row_cmb['vigencia_contrato_inicio'] = $cmb['vigencia_del_contrato_inicio_ddmmyyyy'] == "N/A" ? null : $cmb['vigencia_del_contrato_inicio_ddmmyyyy'];
$arr_row_cmb['vigencia_contrato_fin'] = $cmb['vigencia_del_contrato_fin_ddmmyyyy'] == "N/A" ? null : $cmb['vigencia_del_contrato_fin_ddmmyyyy'];
$arr_row_cmb['tipo_entregable'] = $cmb['tipo_de_entregable_documento_que_acredite_la_entrega'] == "N/A" ? null : $cmb['tipo_de_entregable_documento_que_acredite_la_entrega'];
}
$id_cmb = 0;
try {
$id_cmb = DB::table('contratos_modo_basico')->insertGetId($arr_row_cmb);
$numContratos += 1;
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
array_push($arrayNumContratosAnexo0, $numeroContrato);
$array_rfc_sondeo = [];
$array_rfc_concursantes = [];
$this->hojaActual = 1;
foreach ($this->lista_rfc_empresas_sondeo_y_concursantes as $j => $resc) {
$this->contadorRegistro = $j;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($resc as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$this->validacionCamposModoAdd1($resc, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($resc, $modulo, $tituloCabeceraFondo, "");
}
$numContratoHoja = $modulo == 'O' ? $resc['num_contrato_o_acuerdo_de_obra'] : $resc['num_contrato'];
array_push($arrayNumContratosAnexo1, $numContratoHoja);
if ($numeroContrato == $numContratoHoja) {
//Para rfc_de_empresas_en_sondeo_de_mercado
//Objeto
$arr_row_res = [];
$arr_row_res['id_contrato'] = $id_cmb;
if ($resc['rfc_de_empresas_en_sondeo_de_mercado'] == "N/A") { //valida si hay "N/A"
//en este caso no se guarda pues el rfc no aplica
} elseif (preg_match($patternRFC, $resc['rfc_de_empresas_en_sondeo_de_mercado'])) { //Validar RFC
$arr_row_res['rfc'] = $resc['rfc_de_empresas_en_sondeo_de_mercado'];
$rfc_sondeo['srfcsondeo'] = $arr_row_res['rfc'];
array_push($array_rfc_sondeo, $rfc_sondeo);
try {
$id_res = DB::table('rfc_empresas_sondeo')->insertGetId($arr_row_res);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_en_sondeo_de_mercado'] . '" no es vlido, verifquelo.');
}
//Para rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir
//Objeto
$arr_row_rec = [];
$arr_row_rec['id_contrato'] = $id_cmb;
if ($resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'] == "N/A") { //valida si hay "N/A"
//en este caso no se guarda pues el rfc no aplica
} elseif (preg_match($patternRFC, $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'])) { //Validar RFC
$arr_row_rec['rfc'] = $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'];
$rfc_concursante['srfc'] = $arr_row_rec['rfc'];
array_push($array_rfc_concursantes, $rfc_concursante);
try {
$id_rec = DB::table('rfc_empresas_concursantes')->insertGetId($arr_row_rec);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'] . '" no es vlido, verifquelo.');
}
}
}
$json_res = sizeof($array_rfc_sondeo) == 0 ? null : json_encode($array_rfc_sondeo);
try {
$valorCorrecto = $json_res == '[]' ? null : $json_res;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['rfc_empresas_sondeo' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
$json_rec = sizeof($array_rfc_concursantes) == 0 ? null : json_encode($array_rfc_concursantes);
try {
$valorCorrecto = $json_rec == '[]' ? null : $json_rec;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['rfc_empresas_concursantes' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
$array_num_factura = [];
$array_polizas = [];
$this->hojaActual = 2;
foreach ($this->lista_num_factura as $l => $nf) {
$this->contadorRegistro = $l;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($nf as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$this->validacionCamposModoAdd1($nf, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($nf, $modulo, $tituloCabeceraFondo, "");
}
$numContratoHoja = $modulo == 'O' ? $nf['num_contrato_o_acuerdo_de_obra'] : $nf['num_contrato'];
array_push($arrayNumContratosAnexo2, $numContratoHoja);
if ($numeroContrato == $numContratoHoja) {
//Objeto poliza
$arr_row_p = [];
$arr_row_p['id_contrato'] = $id_cmb;
$arr_row_p['num_poliza'] = $nf['num_poliza'];
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $arr_row_p['id_contrato'], 'num_poliza' => $arr_row_p['num_poliza']])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
//Objeto factura
$arr_row_nf = [];
$arr_row_nf['id_contrato'] = $id_cmb;
$arr_row_nf['nFactura'] = $nf['num_factura_o_folio_fiscal'] == "N/A" ? null : $nf['num_factura_o_folio_fiscal'];
$arr_row_nf['nMonto'] = $nf['monto_factura_civa_en_pesos'] == "N/A" ? null : $nf['monto_factura_civa_en_pesos'];
$arr_row_nf['idPoliza'] = $idPoliza;
$num_factura_cmb['nFactura'] = '' . $arr_row_nf['nFactura'];
$num_factura_cmb['nMonto'] = '' . $arr_row_nf['nMonto'];
$num_factura_cmb['num_poliza'] = '' . $arr_row_p['num_poliza'];
array_push($array_num_factura, $num_factura_cmb);
try {
$id_nf = DB::table('num_factura')->insertGetId($arr_row_nf);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
}
}
$json_nf = sizeof($array_num_factura) == 0 ? null : json_encode($array_num_factura);
try {
$valorCorrecto = $json_nf == '[]' ? null : $json_nf;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['num_factura' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
}
//validar si los contratos de las hojas anexas estan asociados
$this->soloMensajeException = true;
$arrayNumContratos0unicos = array_unique($arrayNumContratosAnexo0); //hoja0
$arrayNumContratos1unicos = array_unique($arrayNumContratosAnexo1); //hoja1
$arrayNumContratos2unicos = array_unique($arrayNumContratosAnexo2); //hoja2
/*Valida si existen datos asociados entre hojas de la 0 a la 1 y 2 mediante el nmero de contrato
foreach ($arrayNumContratos0unicos as $n => $numContrato) { //numContratos de hoja0 en hoja1 y en hoja2
if (!in_array($numContrato, $arrayNumContratos1unicos)) {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 1) no est asociado a la hoja 2, verifquelo.');
}
if (!in_array($numContrato, $arrayNumContratos2unicos)) {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 1) no est asociado a la hoja 3, verifquelo.');
}
}*/
foreach ($arrayNumContratos1unicos as $n => $numContrato) { //numContratos de hoja1 en hoja0
if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 2) no est asociado a la hoja 1, verifquelo.');
}
}
foreach ($arrayNumContratos2unicos as $n => $numContrato) { //numContratos de hoja2 en hoja0
if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 3) no est asociado a la hoja 1, verifquelo.');
}
}
$this->soloMensajeException = false;
try {
DB::table('contratos_excel_files')->where('id', $id_cef)->update($datos);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage(), true); //exception externo (tiene try-catch internos)
}
} else {
$this->guardado_correcto = false;
}
if ($numContratos == 0) {
$linkPlantillaCorrecta = '';
array_push($this->todosErroresExcelImport, "No se encontraron contratos en el archivo, revise si la plantilla es la correcta. " . $linkPlantillaCorrecta);
$this->guardado_correcto = false;
}
if ($this->guardado_correcto) {
DB::commit();
try {
Mail::send(new ME($id, date('Y-m-d H:i:s'), $modo, $numContratos, $modulo));
} catch (\Throwable $th) {
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['Se guardaron correctamente los contratos, pero el correo electrnico no pudo enviarse.'])->withInput();
}
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id);
} else {
DB::rollback();
try {
unlink($path . $name);
} catch (\Exception $e) {
}
$cantidadErrores = 0;
foreach ($this->todosErroresExcelImport as $key => $value) {
$cantidadErrores += 1;
if (strpos($value, "No se encontraron contratos en el archivo") !== false) {
if (count($this->todosErroresExcelImport) != 1) {
unset($this->todosErroresExcelImport[$key]);
}
}
}
// return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id . '/' . $this->year . '/tipoRegistro')
// ->withErrors([$this->todosErroresExcelImport]);
}
break;
case 2:
DB::beginTransaction();
try {
$datos = $r->except(['_token', 'none']);
$numContratos = sizeof($r->clave_ff);
$keys = array_keys($datos);
for ($i = 0; $i < count($datos[$keys[0]]); $i++) {
$arr_row = [];
$arr_row['created_at'] = date('Y-m-d H:i:s');
$arr_row['id_usuario'] = Auth::user()->id;
$arr_row['tipo_registro'] = 2;
$arr_row['modulo'] = $modulo;
if (!in_array('numero_contrato', $keys)) {
$year = Claves::where('id_ff', $id)->first()->year;
$arr_row['numero_contrato'] = libUtilities::consecutivos($id, $year);
}
$empr_conc = "[]";
$empr_sondeo = "[]";
$num_fac = "[]";
foreach ($keys as $k) {
$arr_row[$k] = $datos[$k][$i];
if ($k == 'numero_contrato')
if ($arr_row['numero_contrato'] == NULL || $arr_row['numero_contrato'] == '')
$arr_row['numero_contrato'] = libUtilities::consecutivos($id, Claves::where('id_ff', $id)->first()->year);
if ($k == 'rfc_empresas_concursantes' && $datos[$k][$i] != NULL)
$empr_conc = $datos[$k][$i];
if ($k == 'rfc_empresas_sondeo' && $datos[$k][$i] != NULL)
$empr_sondeo = $datos[$k][$i];
if ($k == 'num_factura' && $datos[$k][$i] != NULL)
$num_fac = $datos[$k][$i];
}
$contrato_id = DB::table('contratos_modo_basico')->insertGetId($arr_row);
foreach (json_decode($empr_conc) as $x)
DB::table('rfc_empresas_concursantes')->insert(['id_contrato' => $contrato_id, 'rfc' => $x->srfc]);
foreach (json_decode($empr_sondeo) as $y)
DB::table('rfc_empresas_sondeo')->insert(['id_contrato' => $contrato_id, 'rfc' => $y->srfcsondeo]);
foreach (json_decode($num_fac) as $z) {
$arr_row_p = [];
$arr_row_p['id_contrato'] = $contrato_id;
$arr_row_p['num_poliza'] = $z->num_poliza;
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $contrato_id, 'num_poliza' => $z->num_poliza])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
DB::table('num_factura')->insert(['id_contrato' => $contrato_id, 'nFactura' => $z->nFactura, 'nMonto' => $z->nMonto, 'idPoliza' => $idPoliza]);
}
}
DB::commit();
try {
Mail::send(new ME($id, date('Y-m-d H:i:s'), $modo, $numContratos, $modulo));
} catch (\Throwable $th) {
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['Se guard correctamente, pero el correo electrnico no pudo enviarse.'])->withInput();
}
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
if (strpos($error, "Duplicate entry ") !== false && strpos($error, " for key 'numero_contrato'") !== false) { //Num. contrato duplicado
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['El nmero de contrato est duplicado.'])->withInput();
}
}
break;
}
}
public function guardarAdqObras($modulo, $id_ff, $correo_contacto, $url_archivo)
{
$mensajeError = '';
$hayProblemaEmail = false;
DB::Begintransaction();
try {
foreach ($this->lista_anexo_regs[1] as $kreg => $reg) {
$arrayc_s = [];
$arrayc_ec = [];
$arrayHoja3 = [];
$obj = new cmb();
foreach ($reg as $kattr => $attr) {
switch ($kattr) { //['regsH2', 'regsH3'] son registros de hojas asociadas
case 'regsH2': //regs de la hoja 2
if (array_key_exists("rfc_empresas_sondeo", $attr)) {
$aRFC = [];
foreach ($attr['rfc_empresas_sondeo'] as $res => $celdasrfc) {
$vRfc = $celdasrfc[0]; // para acceder al unico array de valores del RFC
$aRFC[] = ['srfcsondeo' => $res];
$arrayc_s[] = new RES(['rfc' => $res, 'empresa' => $vRfc['nombre']]);
}
$obj['rfc_empresas_sondeo'] = json_encode($aRFC);
}
if (array_key_exists("rfc_empresas_concursantes", $attr)) {
$aRFC = [];
foreach ($attr['rfc_empresas_concursantes'] as $rec => $celdasrfc) {
$vRfc = $celdasrfc[0]; // para acceder al unico array de valores del RFC
$aRFC[] = ['srfc' => $rec];
$arrayc_ec[] = new REC(['rfc' => $rec, 'empresa' => $vRfc['nombre']]);
}
$obj['rfc_empresas_concursantes'] = json_encode($aRFC);
}
break;
case 'regsH3': // regs de la hoja 3
$aFacturas = [];
foreach ($attr as $krh3 => $rh3) { //registro de la hoja 3
$oFactura = [];
$oFactura['nFactura'] = $rh3['nFactura'];
$oFactura['nMonto'] = $rh3['nMonto'];
if (array_key_exists("num_poliza", $rh3)) {
$oFactura['num_poliza'] = $rh3['num_poliza'];
}
$aFacturas[] = $oFactura;
$arrayHoja3[] = $oFactura;
}
$obj['num_factura'] = json_encode($aFacturas);
break;
default: //regs de la hoja 1
$obj[$kattr] = $attr;
break;
}
} //posteriormente attrs extras de la tabla bd
$obj['id_ff'] = $id_ff;
$obj['id_usuario'] = Auth::user()->id;
$obj['clave_ff'] = $this->idCcpAnexo;
$obj['tipo_registro'] = 1;
$obj['modulo'] = $modulo;
$obj['status'] = 1;
$obj->save();
if (sizeof($arrayc_s)) {
$obj->c_s()->saveMany($arrayc_s);
}
if (sizeof($arrayc_ec)) {
$obj->c_ec()->saveMany($arrayc_ec);
}
foreach ($arrayHoja3 as $krh3 => $rh3) { //registro hoja 3
if (array_key_exists('num_poliza', $rh3)) {
$oPoliza = new P(['num_poliza' => $rh3['num_poliza']]);
$obj->c_polizas()->save($oPoliza);
$oNumFactura = new NF(['nFactura' => $rh3['nFactura'], 'nMonto' => $rh3['nMonto'], 'idPoliza' => $oPoliza['id']]);
} else {
$oNumFactura = new NF(['nFactura' => $rh3['nFactura'], 'nMonto' => $rh3['nMonto']]);
}
$obj->c_nf()->save($oNumFactura);
}
}
DB::table('contratos_excel_files')->insert([
'modulo' => $modulo,
'url_archivo' => $url_archivo,
'hash_archivo' => hash_file('sha256', public_path() . $url_archivo),
'correo_contacto' => $correo_contacto,
'id_ff' => $id_ff,
'id_usuario' => Auth::user()->id,
]);
Claves::where('id_ff', $id_ff)->update([($modulo == 'O' ? 'estatus_anexo_obras' : 'estatus_anexo_adq') => 1]);
//try {
// Mail::send(new ME($id_ff, date('Y-m-d H:i:s'), 1, sizeof($this->lista_anexo_regs[1]), $modulo));
//} catch (\Throwable $th) {
// $hayProblemaEmail = true;
//}
$hayProblemaEmail = false;
} catch (\Exception $e) {
$mensajeError = 'No se pudo guardar ' . LU::t_tr('d', 'anexo', 's') . ', contacte con soporte tcnico' . $e->getMessage();
}
if ($mensajeError != '') { //caso con errores
DB::rollback();
$this->todosErroresExcelImport['Analizado. '][$mensajeError] = [];
} else { //caso correcto
DB::commit();
}
return $hayProblemaEmail;
}
// Actualizar contratos
public function modoUpdate(Request $r, $modo, $modulo, $id)
{
$editar = $r->editar;
$data = $r->except(['_token', '_method', 'editar', 'none']);
$data['modulo'] = $modulo;
$data['tipo_registro'] = $modo;
$data['id_usuario'] = Auth::user()->id;
$clave = DB::table('contratos_modo_basico')->where('id', $id)->first()->id_ff;
$update = DB::table('contratos_modo_basico')->where('id', $id)->update($data);
// Limpieza de tablas de relacin
DB::table('num_factura')->where('id_contrato', $id)->delete();
DB::table('polizas')->where('id_contrato', $id)->delete();
DB::table('rfc_empresas_concursantes')->where('id_contrato', $id)->delete();
DB::table('rfc_empresas_sondeo')->where('id_contrato', $id)->delete();
// Creacin de nuevos registros en tablas de relacin
if ($r->rfc_empresas_concursantes != '')
foreach (json_decode($r->rfc_empresas_concursantes) as $x)
DB::table('rfc_empresas_concursantes')->insert(['id_contrato' => $id, 'rfc' => $x->srfc]);
if ($r->rfc_empresas_sondeo != '')
foreach (json_decode($r->rfc_empresas_sondeo) as $y)
DB::table('rfc_empresas_sondeo')->insert(['id_contrato' => $id, 'rfc' => $y->srfcsondeo]);
if ($r->num_factura != '')
foreach (json_decode($r->num_factura) as $z) {
$arr_row_p = [];
$arr_row_p['id_contrato'] = $id;
$arr_row_p['num_poliza'] = $z->num_poliza;
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $id, 'num_poliza' => $z->num_poliza])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
DB::table('num_factura')->insert(['id_contrato' => $id, 'nFactura' => $z->nFactura, 'nMonto' => $z->nMonto, 'idPoliza' => $idPoliza]);
}
if ($update) {
if ($editar == 'si')
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $clave);
else
return response()->json('OK', 200);
} else {
if ($editar == 'si')
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $clave);
else
return response()->json('NO', 200);
}
}
// Eliminar contratos
public function modoDelete(Request $r, $modo, $modulo, $id)
{
$delete = DB::table('contratos_modo_basico')->where('id', $id)->delete();
DB::table('num_factura')->where('id_contrato', '$id')->delete();
DB::table('rfc_empresas_concursantes')->where('id_contrato', '$id')->delete();
DB::table('rfc_empresas_sondeo')->where('id_contrato', '$id')->delete();
if ($delete) {
return response()->json('OK', 200);
} else {
return response()->json('NO', 200);
}
}
/******************************************************/
/* DESCARGA DE PLANTILLAS PARA LAYOUTS */
/******************************************************/
public function downloadTemplate(Request $r, $modulo)
{
$ruta = '';
$nombre = '';
switch ($modulo) {
case 'A':
$ruta = '/templates/template_adquisiciones.xlsx';
$nombre = 'plantilla_adquisiciones.xlsx';
break;
case 'O':
$ruta = '/templates/template_obras.xlsx';
$nombre = 'plantilla_obras.xlsx';
break;
}
return Storage::disk('downloads')->download($ruta, $nombre);
}
public function saveTesofe(Request $r)
{
$row = Claves::where('id_ff', $r->id)->first();
$row->reintegro_tesofe = $r->tesofe;
DB::beginTransaction();
try {
$row->save();
DB::commit();
return response()->json('OK', 200);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
return response()->json('NO', 200);
}
}
// Eliminar clave FF - fondo
public function eliminarFondo(Request $r, $idClaveFF)
{
$data = [];
$mensajeDeErrorGlobal = '';
$claveFF = Claves::find($idClaveFF);
if ($claveFF == null) {
$mensajeDeErrorGlobal = 'No se puede eliminar ' . LU::t_tr('d', 'fondo', 's') . ', ya que no existe en el sistema.';
} else {
$estatusExistentes = '';
DB::beginTransaction();
try {
//paraEstatusAnexos
$archivoEstatus = $claveFF->estatus_archivo;
$estatusAnexoAdq = $claveFF->estatus_anexo_adq;
$estatusAnexoObras = $claveFF->estatus_anexo_obras;
$estatusAnexoEgresos = $claveFF->estatus_anexo_egresos;
$estatusAnexoNomina = $claveFF->estatus_anexo_nomina;
$estatusAnexoC4K = $claveFF->estatus_anexo_c4k;
//paraEstatusAnexos
if (!in_array($archivoEstatus, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' GD (Gastos Diversos) es: ' . $this->estatusAnexoArchivo($archivoEstatus) . "\n";
}
if (!in_array($estatusAnexoAdq, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Adquisiciones es: ' . $this->estatusAnexoArchivo($estatusAnexoAdq) . "\n";
}
if (!in_array($estatusAnexoObras, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Obras Pblicas es: ' . $this->estatusAnexoArchivo($estatusAnexoObras) . "\n";
}
if (!in_array($estatusAnexoEgresos, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Egresos es: ' . $this->estatusAnexoArchivo($estatusAnexoEgresos) . "\n";
}
if (!in_array($estatusAnexoNomina, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Nmina es: ' . $this->estatusAnexoArchivo($estatusAnexoNomina) . "\n";
}
if (!in_array($estatusAnexoC4K, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Cap. 4000 es: ' . $this->estatusAnexoArchivo($estatusAnexoC4K) . "\n";
}
if ($estatusExistentes == '') {
try {
$claveFF->delete();
if (isset($r->id_fondo_dependencia)) {
$fondoDependencia = FD::find($r->id_fondo_dependencia);
try {
$fondoDependencia->delete();
} catch (\Throwable $th) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . '. Contacte a soporte tcnico.';
}
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio tcnico.' . $e->getMessage();
}
} else {
$mensajeDeErrorGlobal = "Solo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " si sus " . LU::t_tr('v', 'anexo', 'p') . " se encuentran en estatus 'Sin cargar' o 'No aplica'.\n\nNo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " debido a que: \n" . $estatusExistentes;
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . ' solicitado. Contacte a servicio tcnico' . $e->getMessage();
}
}
if ($mensajeDeErrorGlobal != '') {
DB::rollback();
} else {
DB::commit();
}
$data['errores'] = $mensajeDeErrorGlobal;
return $data;
}
//ejecutores
public function estatusAnexoArchivo($estatus, $tipoUsuario = 4) //tipo de usuario que solicita, por ejemplo el 4 (por defecto) es ejecutor, el 8 y 9 son de finanzas
{
$estatusReal = '';
switch ($estatus) {
case 0:
$estatusReal = 'An sin cargar';
break;
case 1:
$estatusReal = 'Cargado sin enviar';
break;
case 2:
$estatusReal = 'Enviado ' . LU::t_tr('a_d', 'enlace', 's');
break;
case 3:
$estatusReal = 'Enviado a ' . LU::t_tr('d', 'asf', 's');
break;
case 4:
switch ($tipoUsuario) {
case 4:
$estatusReal = 'Regresado al ' . LU::t_tr('v', 'ejecutor', 's');
break;
case 8:
case 9:
$estatusReal = 'Regresado a finanzas';
break;
default:
alertaErrorIndefinido(); //para el desarrollo
break;
}
break;
case 5:
$estatusReal = 'No aplica';
break;
default:
$estatusReal = '';
break;
}
return $estatusReal;
}
public function getAlertas(Request $request)
{
$fechaActual = carbon::now()->startOfDay();
$query = DB::table('catalogo_numeros_auditoria as cna')
->join('estados as e', 'e.id', '=', 'cna.id_estado')
->join('municipios as m', 'm.id', '=', 'cna.id_municipio')
->select(
'cna.numeroAuditoria',
'cna.year',
'cna.fecha_cierre',
'e.estado',
'm.municipio',
'm.id as id_municipio'
)->orderBy('cna.fecha_cierre', 'asc');
switch ($request->type) {
case 1: //main tiene todas las alertas
case 11:
//sin lmites
$query = $query->get();
break;
case 4: //ejecutor
case 8: //finanzas estatal
case 9: //finanzas municipal
case 10: // enlace AE
// lmite el rea ejecutora
$query = $query->where('cna.id_estado', Auth::user()->u_d->id_estado)
->where('cna.id_municipio', Auth::user()->u_d->id_municipio)
->get();
break;
case 3: //enlace estatal ,
case 7: //enlace miunicipal
// lmite su propio estado y municipio
$query = $query->where('cna.id_estado', Auth::user()->id_estado)
->where('cna.id_municipio', Auth::user()->id_municipio)
->get();
break;
case 5: // auditor
case 6: //Auditor financiero
//lmite son los numeros de auditoria asociados al usuario
$query = $query->join('num_auditorias_de_usuario as nau', 'nau.id_num_auditoria', '=', 'cna.id')
->where('nau.id_usuario', Auth::user()->id)->get();
break;
default:
paraProgramacionPreventiva(); //para el desarrollo
break;
}
$alerts['active'] = $query->where('fecha_cierre', '>=', $fechaActual);
$alerts['noDate'] = $query->where('fecha_cierre', null);
$alerts['close'] = $query->where('fecha_cierre', '<', $fechaActual);
return response()->json($alerts);
}
}
?>
Did this file decode correctly?
Original Code
<?php
namespace App\Http\Controllers;
// DEPENDENCIASS
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use Illuminate\Support\Facades\Mail;
use Carbon\Carbon;
use Excel;
use Auth;
use DB;
use App\Models\Fondo_dependencia as FD;
use Illuminate\Support\Facades\Storage;
use Exception;
use Illuminate\Support\Str;
// IMPORTS
use App\Imports\ExcelImport;
use App\Imports\AnexoAdq;
use App\Imports\AnexoObras;
use App\Libraries\libUtilities;
use App\Libraries\libUtilities as LU;
// MODELOS
use App\Models\Claves;
use App\Models\Historial_cambios_fondo as hcf;
use App\Models\Dependencias;
use App\Models\Contratos_modo_basico as cmb;
use App\Models\Anexo_gastos_diversos_operacion as AGDO;
use App\Models\Fondo_dependencia;
use App\Models\TipoClave;
use App\Models\Estados_cuentas_mes as DECM;
use App\Models\TipoUsuario;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Redirect;
use \App\Models\Usuarios as U;
use \App\Models\Num_auditorias_de_usuario as NAU;
use App\Models\Rfc_empresas_sondeo as RES;
use App\Models\Rfc_empresas_concursantes as REC;
use App\Models\Num_factura as NF;
use App\Models\Polizas as P;
use App\Models\Clave_ff_finanzas as CFFFINANZAS;
use App\Models\Catalogo_numeros_auditoria as CNA;
use App\Models\Documentos_fondo as DOCF;
// MAILS
use App\Mail\MailContratosModoBasico_E as ME;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
// XML
use App\Models\Cfdi_xml_comprobante;
use App\Models\Cfdi_xml_emisor_cfdi;
use App\Models\Cfdi_xml_receptor_cfdi;
use App\Models\Cfdi_xml_concepto_cfdi;
use App\Models\Cfdi_xml_nomina;
use App\Models\Cfdi_xml_emisor_nomina;
use App\Models\Cfdi_xml_receptor_nomina;
use App\Models\Cfdi_xml_percepciones;
use App\Models\Cfdi_xml_percepciones_nom;
use App\Models\Cfdi_xml_deducciones;
use App\Models\Cfdi_xml_deducciones_nom;
use App\Models\Cfdi_xml_nom_otro_pago;
use App\Models\Cfdi_xml_timbre_fiscal_digital;
use Imtigger\LaravelJobStatus\JobStatus;
use SimpleXMLIterator;
class ltController extends Controller
{
/*************************************/
/* VARIABLES */
/*************************************/
public $lista_contratos_modo_basico;
public $lista_rfc_empresas_sondeo_y_concursantes;
public $lista_num_factura;
/*************************************/
/* METODOS */
/*************************************/
/*********************************************/
/* VISTA PRINCIPAL */
/*********************************************/
// PETICIONES JSON PARA FUNCIONALIDAD
public function datosClavesFF(Request $r, $year)
{
$id_clave_ff = [];
$monto_utilizado = 0;
$monto_anexo_gd = 0;
$monto_cap1k = 0;
$monto_cap4k = 0;
$total_reintegro_tesofe = 0;
$q = Claves::Where('id_dependencia', Auth::user()->id_dependencia)->where('year', $year);
$x = Claves::Where('id_dependencia', Auth::user()->id_dependencia)->where('year', $year);
$data['resumen']['monto_recibido'] = ($q->count() == 0) ? 0.00 : $x->sum('monto_recibido');
$fondos = $q->get();
$listaGD = [];
foreach ($fondos as $i) {
$id_clave_ff[] = $i->id_ff;
$totalAnexoGD = self::totalAnexoGD($i);
$listaGD[$i->id_ff] = $totalAnexoGD;
$monto_anexo_gd += (float) $totalAnexoGD->total;
$monto_cap1k += (float) $i->cap1k;
$monto_cap4k += (float) $i->cap4k;
$total_reintegro_tesofe += (float) $i->reintegro_tesofe;
}
foreach ($id_clave_ff as $i) {
$monto_utilizado += cmb::where('id_ff', $i)->sum('montoPagadoConPart');
}
$data['gastos_diversos'] = $listaGD;
$data['total_reintegro_tesofe'] = $total_reintegro_tesofe;
$data['resumen']['monto_utilizado'] = $monto_utilizado + $monto_anexo_gd + $monto_cap1k + $monto_cap4k + $total_reintegro_tesofe;
$data['resumen']['monto_restante'] = $data['resumen']['monto_recibido'] - $data['resumen']['monto_utilizado'];
$claves = DB::table('clave_ff as ff')
->join('catalogo_numeros_auditoria as cna', 'ff.id_nauditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->join('catalogo_claves_presupuestales as tcff', 'ff.clave_ff', '=', 'tcff.id')
->join('dependencias as d', 'ff.id_dependencia', '=', 'd.id_dependencia')
->join('estados as e', 'e.id', '=', 'd.id_estado')
->join('municipios as m', 'm.id', '=', 'd.id_municipio')
->leftJoin('anexo_cap_4k as ac4k', 'ac4k.id_clave_ff', '=', 'ff.id_ff')
->where('ff.year', $year);
//paraEstatusAnexos
switch (Auth::user()->type) {
// 1 - ROOT
// 5 - Auditor
case 1:
case 5:
$data['cff'] = $claves
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
DB::Raw('YEAR(ff.fecha) as fecha'),
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.cap1k as capitulomil',
'ff.cap4k as capitulo4mil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.id as id_cna',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
'ff.estatus_archivo',
'ff.estatus_anexo_adq',
'ff.estatus_anexo_obras',
'ff.estatus_anexo_egresos',
'ff.estatus_anexo_nomina',
'ff.estatus_anexo_c4k',
'ff.url_anexo_gd',
'ac4k.total_pagado_fondo as ac4k_total_pagado_fondo',
'ac4k.url_archivo as ac4k_url_archivo',
'ac4k.id as ac4k_id',
'd.id_estado',
'd.id_municipio',
'e.estado as sEstado',
'm.municipio as sMunicipio',
'cna.numeroAuditoria as sNumAuditoria',
)
->orderBy('fecha', 'DESC')
->get();
break;
// 2 - Administrador de dependencia
// 4 - Ejecutor de dependencia
case 2:
case 4:
case 11:
$data['cff'] = $claves
->where('ff.id_dependencia', Auth::user()->id_dependencia)
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
'ff.year as fecha',
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.ramo as ramo',
'ff.cap1k as capitulomil',
'ff.cap4k as capitulo4mil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.id as id_cna',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
'ff.estatus_archivo',
'ff.estatus_anexo_adq',
'ff.estatus_anexo_obras',
'ff.estatus_anexo_egresos',
'ff.estatus_anexo_nomina',
'ff.estatus_anexo_c4k',
'ff.url_anexo_gd',
'ac4k.total_pagado_fondo as ac4k_total_pagado_fondo',
'ac4k.url_archivo as ac4k_url_archivo',
'ac4k.id as ac4k_id',
'd.id_estado',
'd.id_municipio',
'e.estado as sEstado',
'm.municipio as sMunicipio',
'cna.numeroAuditoria as sNumAuditoria',
)
->orderBy('fecha', 'DESC')
->get();
$data['claveAnual'] = DB::table('clave_ff as ff')
->whereRaw('YEAR(fecha)=' . date('Y'))
->where('ff.id_dependencia', Auth::user()->id_dependencia)
->count();
break;
case 3:
break;
}
return response()->json($data, 200);
}
public function indexDocumentos($idFondo = 0)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $idFondo)->first();
if ($idFondo != 0 && $clave_ff->id_dependencia != Auth::user()->id_dependencia) {
return \Redirect::to('/api/conexion/vistaRdfs')->with('verificacion', ['No tiene autorizacin para entrar a esta seccin.']);
}
$editar = false; //editar el contenido y enviar a revisin
$enviarRevisionAuditores = false; //Envia la revisin de los auditores
$regresarDesdeRevisionEnlace = false; //Regresa el estatus de los documentos al ejecutor
$regresarDesdeRevisionAuditores = false; //Regresa el estatus de los documentos al ejecutor
switch (Auth::user()->type) {
case '1': //root
$regresarDesdeRevisionEnlace = true;
$regresarDesdeRevisionAuditores = true;
break;
case '3': //enlace estatal
case '7': //enlace municipal
case '10': //enlace rea ejecutora
if (Auth::user()->sub_type != 'ES') {
$regresarDesdeRevisionEnlace = true;
$enviarRevisionAuditores = true;
}
break;
case '5': //auditor
// case '6': //financiero
if (@config('tema.ms.auditor_btn_estatus_anexo_regresar')) {
$regresarDesdeRevisionEnlace = true;
}
break;
case '4': //ejecutor
$editar = true;
break;
}
return view('asf_layout.indexDocumentos', compact(['idFondo', 'editar', 'regresarDesdeRevisionEnlace', 'regresarDesdeRevisionAuditores', 'enviarRevisionAuditores']));
}
public function getDataDocumentos($idFondo = 0)
{
$datos['errores'] = [];
set_time_limit(0);
try {
$query = DB::table('clave_ff as cff')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'cff.clave_ff')
->join('fondo_dependencia as fd', 'fd.id', '=', 'cff.id_fondo_dependencia')
->leftjoin('catalogo_numeros_auditoria as cna', 'cna.id', '=', 'cff.id_nauditoria')
->leftJoin('estados as es', 'es.id', '=', 'cff.id_estado')
->leftJoin('municipios as mun', 'mun.id', '=', 'cff.id_municipio')
->leftJoin('dependencias as dep', 'dep.id_dependencia', '=', 'cff.id_dependencia')
->leftJoin('documentos_fondo as docf', 'docf.id_clave_ff', '=', 'cff.id_ff');
switch (Auth::user()->type) {
case '1': //root
break;
case '3': //enlace estatal
case '7': //enlace municipal
// case '8': //finanzas estatal
// case '9': //finanzas municipal
$query->where(['es.id' => Auth::user()->id_estado, 'mun.id' => Auth::user()->id_municipio]);
break;
case '4': //ejecutor
case '10': //enlace rea ejecutora
if ($idFondo != 0) {
$query->where('cff.id_ff', $idFondo);
}
$query->where('cff.id_dependencia', Auth::user()->id_dependencia);
break;
case '5': //auditor
case '6': //financiero
$lNAU = Auth::user()->u_nau;
$aCNA = [];
foreach ($lNAU as $knau => $nau) {
$aCNA[] = $nau->id_num_auditoria;
}
$query->whereIn('cff.id_nauditoria', $aCNA);
break;
default:
paraProgramacionPreventiva(); //para el desarrollo
break;
}
$query->select(
//paraEstatusDocumentos
'docf.id',
'docf.actas_cabildo',
'docf.contratos_cuentas_bancarias',
'docf.edos_cuentas_01',
'docf.edos_cuentas_02',
'docf.edos_cuentas_03',
'docf.edos_cuentas_04',
'docf.edos_cuentas_05',
'docf.edos_cuentas_06',
'docf.edos_cuentas_07',
'docf.edos_cuentas_08',
'docf.edos_cuentas_09',
'docf.edos_cuentas_10',
'docf.edos_cuentas_11',
'docf.edos_cuentas_12',
'docf.formato_3',
'docf.formato_3A',
'docf.formato_3B',
'docf.formato_4',
'ccp.ramo as ramo',
'ccp.nombre_clave as fondo',
'cff.year as year',
'cna.numeroAuditoria as nAuditoria',
'cna.fecha_cierre',
'dep.sDependencia',
'es.estado',
'mun.municipio',
'docf.updated_at',
'cff.id_ff'
);
$datos['docsFondo'] = $query->get();
$hoy = Carbon::now()->startOfDay();
$datos['fechaHoy'] = $hoy->format('Y-m-d H:i:s');
$datos['listaEstatus'] = ['Sin cargar', 'Cargado sin enviar a revisin', 'Enviado ' . LU::t_tr('a_d', 'enlace', 's'), 'Enviado ' . LU::t_tr('a_d', 'asf', 'S'), 'Regresado ' . LU::t_tr('a_d', 'ejecutor', 's'), 'No aplica'];
} catch (\Throwable $th) {
$datos['errores'][] = 'Error al obtener datos de la tabla, comunquese con soporte tcnico. ' . $th->getMessage();
}
return response()->json($datos);
}
public function cargarDocumentos(Request $r)
{
$data['errores'] = [];
set_time_limit(0);
DB::Begintransaction();
try {
$url_doc_fondo = '';
$url_doc_fondo_borrar = '';
$extension = '';
$nombreArchivo = '';
$docsFondo = DOCF::findOrFail($r->idD);
$contieneArchivo = false;
switch ($r->tipoDocActual) {
case 'dAC':
$extension = '.pdf';
$nombreArchivo = LU::t_tr('v', 'actas_cabildo', 's') . '_';
$docBD = 1;
break;
case 'dCCB':
$extension = '.pdf';
$nombreArchivo = 'Contratos_cuentas_';
$docBD = 2;
break;
case 'dF3':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3_';
$docBD = 4;
break;
case 'dF3A':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3A_';
$docBD = 5;
break;
case 'dF3B':
$extension = '.xlsx';
$nombreArchivo = 'Formato_3B_';
$docBD = 6;
break;
case 'dF4':
$extension = '.xlsx';
$nombreArchivo = 'Formato_4_';
$docBD = 7;
break;
}
if ($r->has('url_fondo') && $r->url_fondo != null) {
try {
$dataF = explode(',', $r->url_fondo);
$b64Data = base64_decode($dataF[1]);
$name = $nombreArchivo . $r->idF . "_" . date('Ymd_His') . $extension;
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
$contieneArchivo = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo, debe cargarlo.';
}
}
if ($contieneArchivo) {
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
}
if ($url_doc_fondo_borrar != null) {
unlink(public_path() . $url_doc_fondo_borrar);
}
switch ($docBD) {
case 1:
$url_doc_fondo_borrar = ($docsFondo->url_actas_cabildo ? $docsFondo->url_actas_cabildo : null);
$docsFondo->url_actas_cabildo = $url_doc_fondo;
$docsFondo->hash_actas_cabildo = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->actas_cabildo = 1;
$docsFondo->save();
break;
case 2:
$url_doc_fondo_borrar = (isset($docsFondo->url_contratos_cuentas_bancarias) ? $docsFondo->url_contratos_cuentas_bancarias : null);
$docsFondo->url_contratos_cuentas_bancarias = $url_doc_fondo;
$docsFondo->hash_contratos_cuentas_bancarias = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->contratos_cuentas_bancarias = 1;
$docsFondo->save();
break;
case 4:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3) ? $docsFondo->url_formato_3 : null);
$docsFondo->url_formato_3 = $url_doc_fondo;
$docsFondo->hash_formato_3 = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3 = 1;
$docsFondo->save();
break;
case 5:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3A) ? $docsFondo->url_formato_3A : null);
$docsFondo->url_formato_3A = $url_doc_fondo;
$docsFondo->hash_formato_3A = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3A = 1;
$docsFondo->save();
break;
case 6:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_3B) ? $docsFondo->url_formato_3B : null);
$docsFondo->url_formato_3B = $url_doc_fondo;
$docsFondo->hash_formato_3B = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_3B = 1;
$docsFondo->save();
break;
case 7:
$url_doc_fondo_borrar = (isset($docsFondo->url_formato_4) ? $docsFondo->url_formato_4 : null);
$docsFondo->url_formato_4 = $url_doc_fondo;
$docsFondo->hash_formato_4 = hash_file('sha256', public_path() . $url_doc_fondo);
$docsFondo->formato_4 = 1;
$docsFondo->save();
break;
}
} else {
$data['errores'][] = 'No se encontr el archivo, debe cargarlo.';
}
} catch (\Throwable $th) {
$data['errores'][] = "No pudo guardarse el archivo, comunquese con soporte tcnico. " . $th->getLine() . ', ' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data, 200);
}
public function cargarDocumentosMes(Request $r)
{
$analizarXml = false; //quitarc Sirve para intercambiar entre versiones de lectura masiva de xml, posteriormente quitar
$data['errores'] = [];
set_time_limit(0);
DB::Begintransaction();
try {
$url_doc_fondo = null;
$url_doc_fondo_xml = null;
$hash_doc_fondo = null;
$hash_doc_fondo_xml = null;
$docsFondo = DOCF::findOrFail($r->idD);
$contieneArchivo = false;
$contieneArchivoXML = false;
if ($r->has('url_fondo') && $r->url_fondo != null) {
try {
$dataF = explode(',', $r->url_fondo);
$b64Data = base64_decode($dataF[1]);
$name = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".pdf";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
$contieneArchivo = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo PDF, debe cargarlo.';
}
}
if ($r->has('url_fondo_cfdi')) {
try {
$datax = explode(',', $r->url_fondo_cfdi);
$b64DataX = base64_decode($datax[1]);
$nameD = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".xml";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$pathXML = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo_xml = $pathXML . $nameD;
$contieneArchivoXML = true;
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo XML, debe cargarlo. ' . $th->getMessage();
}
}
$estados_cuentas_mes = new DECM;
$estados_cuentas_mes->id_documentos_fondo = $docsFondo->id;
$estados_cuentas_mes->mes = $r->mes;
$estados_cuentas_mes->url_estados_cuentas_pdf = $url_doc_fondo;
$estados_cuentas_mes->url_estados_cuentas_xml = $url_doc_fondo_xml;
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = 1;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = 1;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = 1;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = 1;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = 1;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = 1;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = 1;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = 1;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = 1;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = 1;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = 1;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = 1;
break;
}
if ($contieneArchivo) {
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
$hash_doc_fondo = hash_file('sha256', public_path() . $url_doc_fondo);
$estados_cuentas_mes->hash_estados_cuentas_pdf = $hash_doc_fondo;
}
}
if ($contieneArchivoXML) {
if ($url_doc_fondo_xml) {
try {
$dirname = dirname(public_path() . $url_doc_fondo_xml);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$fileXML = fopen(public_path() . $url_doc_fondo_xml, 'wb');
fwrite($fileXML, $b64DataX);
fclose($fileXML);
if ($analizarXml) {
$cfdi_reader = new SimpleXMLIterator(public_path() . $url_doc_fondo_xml, 0, TRUE);
$ns = $cfdi_reader->getDocNamespaces(true);
$nsNomina = null;
foreach ($ns as $kllave => $valorNs) {
if (Str::startsWith($kllave, "nomina")) {
$nsNomina = $kllave;
}
}
if (!$nsNomina) {
//Error: No se encontro el NameSpace "Nomina"
$data['errores'][] = 'Error de validacion de xml. No se encuentra el NameSpace "nomina"';
}
if ($cfdi_reader->getName() == 'comprobantes') {
foreach ($cfdi_reader->children($ns['cfdi']) as $comprobante) {
self::lecturaComprobanteXML($comprobante, $ns, $nsNomina, $estados_cuentas_mes);
}
} else {
self::lecturaComprobanteXML($cfdi_reader, $ns, $nsNomina, $estados_cuentas_mes);
}
}
} catch (\Throwable $e) {
$data['errores'][] = 'Error de validacion de xml. Comunquese con soporte tcnico. ' . $e->getLine() . '. ' . $e->getMessage();
}
}
$docsFondo->save();
$hash_doc_fondo_xml = hash_file('sha256', public_path() . $url_doc_fondo_xml);
$estados_cuentas_mes->hash_estados_cuentas_xml = $hash_doc_fondo_xml;
$estados_cuentas_mes->save();
} else {
$data['errores'][] = 'No se encontr el archivo XML, debe cargarlo.';
}
} catch (\Throwable $th) {
$data['errores'][] = "No pudo guardarse el archivo, comunquese con soporte tcnico. " . $th->getMessage() . ' linea: ' . $th->getLine();
}
if (sizeof($data['errores'])) {
DB::rollback();
try {
if ($url_doc_fondo_xml) {
unlink(public_path() . $url_doc_fondo_xml);
}
if ($url_doc_fondo) {
unlink(public_path() . $url_doc_fondo);
}
} catch (\Throwable $th) {
}
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function lecturaComprobanteXML($cfdi_reader, $ns, $nsNomina, $estados_cuentas_mes) //A partir del nodo 'Comprobante'
{
$comp = new Cfdi_xml_comprobante();
$comp->version_comprobante = strval($cfdi_reader->attributes()->Version);
$comp->serie = strval($cfdi_reader->attributes()->Serie);
$comp->folio = strval($cfdi_reader->attributes()->Folio);
$comp->fecha = date('Y-m-d', strtotime(strval($cfdi_reader->attributes()->Fecha)));
$comp->no_certificado = strval($cfdi_reader->attributes()->NoCertificado);
$comp->subtotal = strval($cfdi_reader->attributes()->SubTotal);
$comp->descuento = strval($cfdi_reader->attributes()->Descuento);
$comp->moneda = strval($cfdi_reader->attributes()->Moneda);
$comp->total = strval($cfdi_reader->attributes()->Total);
$comp->tipo_comprobante = strval($cfdi_reader->attributes()->TipoDeComprobante);
$comp->exportacion = strval($cfdi_reader->attributes()->Exportacion);
$comp->metodo_pago = strval($cfdi_reader->attributes()->MetodoPago);
$comp->lugar_expedicion = strval($cfdi_reader->attributes()->LugarExpedicion);
$comp->certificado = strval($cfdi_reader->attributes()->Certificado);
$comp->sello = strval($cfdi_reader->attributes()->Sello);
$estados_cuentas_mes->com()->save($comp);
foreach ($cfdi_reader->children($ns['cfdi']) as $complemento) {
switch ($complemento->getName()) {
case 'Emisor':
$em = new Cfdi_xml_emisor_cfdi();
$em->rfc_em = strval($complemento->attributes()->Rfc);
$em->nombre_em = strval($complemento->attributes()->Nombre);
$em->regimen_fiscal_em = strval($complemento->attributes()->RegimenFiscal);
$comp->emi()->save($em);
break;
case 'Receptor':
$rec = new Cfdi_xml_receptor_cfdi();
$rec->rfc_rec = strval($complemento->attributes()->Rfc);
$rec->nombre_rec = strval($complemento->attributes()->Nombre);
$rec->uso_cfdi = strval($complemento->attributes()->UsoCFDI);
//$rec->domicilio_fiscal_rec = strval($complemento->attributes()->DomicilioFiscalReceptor);
//$rec->regimen_fiscal_rec = strval($complemento->attributes()->RegimenFiscalReceptor);
$comp->rec()->save($rec);
break;
case 'Conceptos':
$aConceptos = array();
foreach ($complemento->children($ns['cfdi']) as $concepto) {
$concepto_cfdi = array(
'clave_prod_serv' => strval($concepto->attributes()->ClaveProdServ),
'cantidad' => strval($concepto->attributes()->Cantidad),
'clave_unidad' => strval($concepto->attributes()->ClaveUnidad),
'descripcion' => strval($concepto->attributes()->Descripcion),
'valor_unitario' => strval($concepto->attributes()->ValorUnitario),
'importe' => strval($concepto->attributes()->Importe),
//'objeto_imp' => strval($concepto->attributes()->ObjetoImp),
'descuento' => strval($concepto->attributes()->Descuento),
);
$conc = new Cfdi_xml_concepto_cfdi($concepto_cfdi);
$aConceptos[] = $conc;
}
$comp->conc()->saveMany($aConceptos);
$aConceptos = null;
break;
case 'Complemento':
foreach ($complemento->children($ns[$nsNomina]) as $nom) {
$nomina_nomina = array(
'version' => strval($nom->attributes()->Version),
'tipo_nomina' => strval($nom->attributes()->TipoNomina),
'fecha_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaPago))),
'fecha_inicial_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaInicialPago))),
'fecha_final_pago' => date('Y-m-d', strtotime(strval($nom->attributes()->FechaFinalPago))),
'dias_pagados' => strval($nom->attributes()->NumDiasPagados),
'total_percepciones' => strval($nom->attributes()->TotalPercepciones),
'total_deducciones' => strval($nom->attributes()->TotalDeducciones),
'total_otros_pagos' => strval($nom->attributes()->TotalOtrosPagos),
);
$nomina = new Cfdi_xml_nomina($nomina_nomina);
$comp->nom()->save($nomina);
foreach ($nom->children($ns[$nsNomina]) as $nomdet) {
switch ($nomdet->getName()) {
case 'Emisor':
$nomina_emisor = new Cfdi_xml_emisor_nomina();
//$nomina_emisor->registro_patronal = strval($nomdet->attributes()->RfcPatronOrigen);
$nomina_emisor->rfc_patron_origen = strval($nomdet->attributes()->RegistroPatronal);
$nomina->emi_nom()->save($nomina_emisor);
break;
case 'Receptor':
$nomina_receptor = new Cfdi_xml_receptor_nomina();
$nomina_receptor->curp_receptor = strval($nomdet->attributes()->Curp);
$nomina_receptor->tipo_contrato = strval($nomdet->attributes()->TipoContrato);
$nomina_receptor->tipo_regimen = strval($nomdet->attributes()->TipoRegimen);
$nomina_receptor->num_empleado = strval($nomdet->attributes()->NumEmpleado);
$nomina_receptor->tipo_jornada = strval($nomdet->attributes()->TipoJornada);
$nomina_receptor->periodicidad_pago = strval($nomdet->attributes()->PeriodicidadPago);
$nomina_receptor->cuenta_bancaria = strval($nomdet->attributes()->CuentaBancaria);
$nomina_receptor->clave_ent_fed = strval($nomdet->attributes()->ClaveEntFed);
$nomina_receptor->nss = strval($nomdet->attributes()->NumSeguridadSocial);
$nomina_receptor->inicio_rel_laboral = date('Y-m-d', strtotime(strval($nomdet->attributes()->FechaInicioRelLaboral)));
$nomina_receptor->antiguedad = strval($nomdet->attributes()->Antigedad);
$nomina_receptor->riesgo_puesto = strval($nomdet->attributes()->RiesgoPuesto);
$nomina_receptor->salario_diario_integrado = strval($nomdet->attributes()->SalarioDiarioIntegrado);
$nomina->rec_nom()->save($nomina_receptor);
break;
case 'Percepciones':
$nomina_percepciones = new Cfdi_xml_percepciones_nom();
$nomina_percepciones->total_sueldos = strval($nomdet->attributes()->TotalSueldos);
$nomina_percepciones->total_gravado = strval($nomdet->attributes()->TotalGravado);
$nomina_percepciones->total_exento = strval($nomdet->attributes()->TotalExento);
$nomina->perc()->save($nomina_percepciones);
$aPercepciones = array();
foreach ($nomdet->children($ns[$nsNomina]) as $percepcion) {
$nomina_percepcion = array(
'tipo_p' => strval($percepcion->attributes()->TipoPercepcion),
'clave_p' => strval($percepcion->attributes()->Clave),
'concepto_p' => strval($percepcion->attributes()->Concepto),
'importe_gravado' => strval($percepcion->attributes()->ImporteGravado),
'importe_exento' => strval($percepcion->attributes()->ImporteExento),
);
$oPercepcion = new Cfdi_xml_percepciones($nomina_percepcion);
$aPercepciones[] = $oPercepcion;
}
$nomina_percepciones->perc()->saveMany($aPercepciones);
$aPercepciones = null;
break;
case 'Deducciones':
$nomina_deducciones = new Cfdi_xml_deducciones_nom();
$nomina_deducciones->total_deducciones = strval($nomdet->attributes()->TotalOtrasDeducciones);
$nomina_deducciones->total_imp_retenidos = strval($nomdet->attributes()->TotalImpuestosRetenidos);
$nomina->ded()->save($nomina_deducciones);
$aDeducciones = array();
foreach ($nomdet->children($ns[$nsNomina]) as $deducion) {
$nomina_deduccion = array(
'tipo_d' => strval($deducion->attributes()->TipoDeduccion),
'clave_d' => strval($deducion->attributes()->Clave),
'concepto_d' => strval($deducion->attributes()->Concepto),
'importe_d' => strval($deducion->attributes()->Importe),
);
$oDeduccion = new Cfdi_xml_deducciones($nomina_deduccion);
$aDeducciones[] = $oDeduccion;
}
$nomina_deducciones->ded()->saveMany($aDeducciones);
$aDeducciones = null;
break;
case 'OtrosPagos':
foreach ($nomdet->children($ns[$nsNomina]) as $otropago) {
$nomina_otropago = new Cfdi_xml_nom_otro_pago();
$nomina_otropago->tipo_op = strval($otropago->attributes()->TipoOtroPago);
$nomina_otropago->clave_op = strval($otropago->attributes()->Clave);
$nomina_otropago->concepto_op = strval($otropago->attributes()->Concepto);
$nomina_otropago->importe_op = strval($otropago->attributes()->Importe);
foreach ($otropago->children($ns[$nsNomina]) as $subsidio) {
$nomina_otropago->subsidio_causado = strval($subsidio->attributes()->SubsidioCausado);
}
$nomina->op()->save($nomina_otropago);
}
break;
}
}
}
foreach ($complemento->children($ns['tfd']) as $tfd) {
$tfd_data = new Cfdi_xml_timbre_fiscal_digital();
$tfd_data->version_tfd = strval($tfd->attributes()->Version);
$tfd_data->uuid = strval($tfd->attributes()->UUID);
$tfd_data->fecha_timbrado = date('Y-m-d', strtotime(strval($tfd->attributes()->FechaTimbrado)));
$tfd_data->rfc_prov_certif = strval($tfd->attributes()->RfcProvCertif);
$tfd_data->sello_cfd = strval($tfd->attributes()->SelloCFD);
$tfd_data->no_cert = strval($tfd->attributes()->NoCertificadoSAT);
$tfd_data->sello_sat = strval($tfd->attributes()->SelloSAT);
$comp->tim()->save($tfd_data);
}
break;
case 'Addenda':
$comp->no_cheque = strval($complemento->children($ns['advans'])->attributes()->_10);
$estados_cuentas_mes->com()->save($comp);
break;
}
}
}
public function ecmPdf(Request $r)
{
set_time_limit(0);
$data['errores'] = [];
DB::Begintransaction();
try {
$dataF = explode(',', $r->url_pdf);
$b64Data = base64_decode($dataF[1]);
$name = "Estados_cuentas_" . $r->mes . "_" . $r->idF . "_" . date('Ymd_His') . ".pdf";
$year = DB::table('clave_ff')->where('id_ff', $r->idF)->select('year')->first();
$path = "/" . "uploads/" . $year->year . "/" . "documentosFondo/" . $r->idF . "/";
$url_doc_fondo = $path . $name;
if ($url_doc_fondo) {
$dirname = dirname(public_path() . $url_doc_fondo);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url_doc_fondo, 'wb');
fwrite($file, $b64Data);
fclose($file);
$updEcm = DECM::where("id", $r->idEcm)->update(["url_estados_cuentas_pdf" => $url_doc_fondo, "hash_estados_cuentas_pdf" => hash_file('sha256', public_path() . $url_doc_fondo)]);
}
} catch (\Throwable $th) {
$data['errores'][] = 'No se encontr el archivo PDF, debe cargarlo.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
unlink(public_path() . $url_doc_fondo);
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function downloadDocumentos(Request $r)
{
set_time_limit(0);
$docsFondo = DOCF::findOrFail($r->idD);
$headers = ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
$urlFondo = null;
switch ($r->tipoDocActual) {
//paraEstatusDocumentos
case 'dAC':
$urlFondo = $docsFondo->url_actas_cabildo;
break;
case 'dCCB':
$urlFondo = $docsFondo->url_contratos_cuentas_bancarias;
break;
case 'dF3':
$urlFondo = $docsFondo->url_formato_3;
break;
case 'dF3A':
$urlFondo = $docsFondo->url_formato_3A;
break;
case 'dF3B':
$urlFondo = $docsFondo->url_formato_3B;
break;
case 'dF4':
$urlFondo = $docsFondo->url_formato_4;
break;
}
$nombreArchivo = LU::getRutaAndName($urlFondo)[1];
$urlArchivo = LU::getDirname($urlFondo);
return response()->download($urlArchivo, $nombreArchivo, $headers);
}
public function downloadEdosCuentas(Request $r)
{
set_time_limit(0);
$headers = ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
$urlEstadoCuenta = null;
$estados_cuentas_mes = DECM::findOrFail($r->idEdoCuenta);
switch ($r->tipoDocActual) {
case 'pdf':
$urlEstadoCuenta = $estados_cuentas_mes->url_estados_cuentas_pdf;
break;
case 'xml':
$urlEstadoCuenta = $estados_cuentas_mes->url_estados_cuentas_xml;
break;
}
$nombreArchivo = LU::getRutaAndName($urlEstadoCuenta)[1];
$urlArchivo = LU::getDirname($urlEstadoCuenta);
return response()->download($urlArchivo, $nombreArchivo, $headers);
}
public function eliminarDocumentos(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$url_doc_fondo_borrar = null;
$data['errores'] = [];
try {
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->tipoDocActual) {
case 'dAC':
$url_doc_fondo_borrar = $docsFondo->url_actas_cabildo;
$docsFondo->url_actas_cabildo = null;
$docsFondo->actas_cabildo = 0;
break;
case 'dCCB':
$url_doc_fondo_borrar = $docsFondo->url_contratos_cuentas_bancarias;
$docsFondo->url_contratos_cuentas_bancarias = null;
$docsFondo->contratos_cuentas_bancarias = 0;
break;
case 'dF3':
$url_doc_fondo_borrar = $docsFondo->url_formato_3;
$docsFondo->url_formato_3 = null;
$docsFondo->formato_3 = 0;
break;
case 'dF3A':
$url_doc_fondo_borrar = $docsFondo->url_formato_3A;
$docsFondo->url_formato_3A = null;
$docsFondo->formato_3A = 0;
break;
case 'dF3B':
$url_doc_fondo_borrar = $docsFondo->url_formato_3B;
$docsFondo->url_formato_3B = null;
$docsFondo->formato_3B = 0;
break;
case 'dF4':
$url_doc_fondo_borrar = $docsFondo->url_formato_4;
$docsFondo->url_formato_4 = null;
$docsFondo->formato_4 = 0;
break;
}
if ($url_doc_fondo_borrar != null) {
unlink(public_path() . $url_doc_fondo_borrar);
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al eliminar el archivo, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function eliminarEdoCuenta(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
try {
$data['errores'] = [];
$docsFondo = DOCF::where('id', $r->idD)->first();
$oDecm = DECM::where('id', $r->idEdoCuenta)->first();
$mes = $oDecm->mes;
$url_edo_cuentas_borrar_pdf = $oDecm->url_estados_cuentas_pdf;
$url_edo_cuentas_borrar_xml = $oDecm->url_estados_cuentas_xml;
$oDecm->delete();
$edos_cuentas_count = DECM::where(['id_documentos_fondo' => $r->idD, 'mes' => $mes])->count();
if ($edos_cuentas_count === 0) {
switch ($mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = 0;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = 0;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = 0;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = 0;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = 0;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = 0;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = 0;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = 0;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = 0;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = 0;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = 0;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = 0;
break;
}
$docsFondo->save();
}
} catch (\Throwable $th) {
$data['errores'][] = 'Error al eliminar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
try {
if ($url_edo_cuentas_borrar_pdf != null) {
unlink(public_path() . $url_edo_cuentas_borrar_pdf);
}
unlink(public_path() . $url_edo_cuentas_borrar_xml);
} catch (\Throwable $th) {
}
}
return response()->json($data);
}
public function enviarDocumentosRevison(Request $r)
{
$docsFondo = DOCF::findOrFail($r->idD);
$estatus = 2;
if ($r->enviarRevisionAuditores == 'Si' || @config('tema.ms.revision_directo_auditores')) {
$estatus = 3;
}
$data['errores'] = [];
try {
switch ($r->tipoDocActual) {
case 'dAC':
$docsFondo->actas_cabildo = $estatus;
break;
case 'dCCB':
$docsFondo->contratos_cuentas_bancarias = $estatus;
break;
case 'dF3':
$docsFondo->formato_3 = $estatus;
break;
case 'dF3A':
$docsFondo->formato_3A = $estatus;
break;
case 'dF3B':
$docsFondo->formato_3B = $estatus;
break;
case 'dF4':
$docsFondo->formato_4 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al enviar el archivo a revisin, contacte con servicio tcnico.' . $th->getMessage();
}
return response()->json($data);
}
public function enviarRevisionEdosCuentas(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$estatus = 2;
if ($r->enviarRevisionAuditores == 'Si' || @config('tema.ms.revision_directo_auditores')) {
$estatus = 3;
}
try {
$data['errores'] = [];
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = $estatus;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = $estatus;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = $estatus;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = $estatus;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = $estatus;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = $estatus;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = $estatus;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = $estatus;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = $estatus;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = $estatus;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = $estatus;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al enviar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function regresarDocumentosRevison(Request $r)
{
$data['errores'] = [];
try {
$docsFondo = DOCF::findOrFail($r->idD);
$estatus = 4;
switch ($r->tipoDocActual) {
case 'dAC':
$docsFondo->actas_cabildo = $estatus;
break;
case 'dCCB':
$docsFondo->contratos_cuentas_bancarias = $estatus;
break;
case 'dF3':
$docsFondo->formato_3 = $estatus;
break;
case 'dF3A':
$docsFondo->formato_3A = $estatus;
break;
case 'dF3B':
$docsFondo->formato_3B = $estatus;
break;
case 'dF4':
$docsFondo->formato_4 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al regresar el archivo, contacte con servicio tcnico.' . $th->getMessage();
}
return response()->json($data);
}
public function regresarRevisionEdosCuentas(Request $r)
{
set_time_limit(0);
DB::Begintransaction();
$estatus = 4;
try {
$data['errores'] = [];
$docsFondo = DOCF::findOrFail($r->idD);
switch ($r->mes) {
case 'enero':
$docsFondo->edos_cuentas_01 = $estatus;
break;
case 'febrero':
$docsFondo->edos_cuentas_02 = $estatus;
break;
case 'marzo':
$docsFondo->edos_cuentas_03 = $estatus;
break;
case 'abril':
$docsFondo->edos_cuentas_04 = $estatus;
break;
case 'mayo':
$docsFondo->edos_cuentas_05 = $estatus;
break;
case 'junio':
$docsFondo->edos_cuentas_06 = $estatus;
break;
case 'julio':
$docsFondo->edos_cuentas_07 = $estatus;
break;
case 'agosto':
$docsFondo->edos_cuentas_08 = $estatus;
break;
case 'septiembre':
$docsFondo->edos_cuentas_09 = $estatus;
break;
case 'octubre':
$docsFondo->edos_cuentas_10 = $estatus;
break;
case 'noviembre':
$docsFondo->edos_cuentas_11 = $estatus;
break;
case 'diciembre':
$docsFondo->edos_cuentas_12 = $estatus;
break;
}
$docsFondo->save();
} catch (\Throwable $th) {
$data['errores'][] = 'Error al regresar los archivos, contacte con servicio tcnico.' . $th->getMessage();
}
if (sizeof($data['errores'])) {
DB::rollback();
} else { //caso sin errores
DB::commit();
}
return response()->json($data);
}
public function getEstadosCuentaMes(Request $r)
{
$datos['errores'] = [];
try {
$datos['edos_cuentas'] = DB::table('estados_cuentas_mes')->where(['id_documentos_fondo' => $r->idD, 'mes' => $r->mes])->get();
} catch (\Throwable $th) {
$datos['errores'][] = 'Error al obtener datos de la tabla, comunquese con soporte tcnico. ' . $th->getMessage();
}
return response()->json($datos);
}
public function datosClavesFFMain(Request $r, $dependencia, $year)
{
$id_clave_ff = [];
$monto_utilizado = 0;
$monto_anexo_gd = 0;
$monto_cap1k = 0;
$q = Claves::Where('id_dependencia', $dependencia)->where('year', $year);
$x = Claves::Where('id_dependencia', $dependencia)->where('year', $year);
$data['resumen']['monto_recibido'] = ($q->count() == 0) ? 0.00 : $x->sum('monto_recibido');
$fondos = $q->get();
$listaGD = [];
foreach ($fondos as $i) {
$id_clave_ff[] = $i->id_ff;
$totalAnexoGD = self::totalAnexoGD($i);
$listaGD[$i->id_ff] = $totalAnexoGD;
$monto_anexo_gd += (float) $totalAnexoGD->total;
$monto_cap1k += (float) $i->cap1k;
}
foreach ($id_clave_ff as $i) {
$monto_utilizado += cmb::where('id_ff', $i)->sum('montoPagadoConPart');
}
$data['gastos_diversos'] = $listaGD;
$data['resumen']['monto_utilizado'] = $monto_utilizado + $monto_anexo_gd + $monto_cap1k;
$data['resumen']['monto_restante'] = $data['resumen']['monto_recibido'] - $data['resumen']['monto_utilizado'];
$claves = DB::table('clave_ff as ff')
->join('catalogo_numeros_auditoria as cna', 'ff.id_nauditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->join('catalogo_claves_presupuestales as tcff', 'ff.clave_ff', '=', 'tcff.id')
->join('dependencias as d', 'ff.id_dependencia', '=', 'd.id_dependencia')
->where('ff.year', $year);
$data['cff'] = $claves
->where('ff.id_dependencia', $dependencia)
->select(
'ff.id_ff as id_pp',
'ff.clave_ff as pp',
'tcff.nombre_clave as n_pp',
'ff.monto_recibido as monto_recibido',
'ff.year as fecha',
'ff.estatus as estatus',
'ff.id_dependencia as id_d',
'd.sDependencia as dependencia',
'd.sSiglas as siglas',
'ff.obras as obras',
'ff.ramo as ramo',
'ff.cap1k as capitulomil',
'ff.monto_nomina as monto_nomina',
'ff.reintegro_tesofe as reintegro_tesofe',
'cna.numeroAuditoria as auditoria',
'ca.auditoria as uaa',
)
->orderBy('fecha', 'DESC')
->get();
$data['claveAnual'] = DB::table('clave_ff as ff')
->whereRaw('YEAR(fecha)=' . date('Y'))
->where('ff.id_dependencia', $dependencia)
->count();
return response()->json($data, 200);
}
// CLAVES DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function index()
{
$d = Dependencias::with(['d_e', 'd_m'])->where('id_dependencia', Auth::user()->id_dependencia)->first();
// $fondo_dependencia = Fondo_dependencia::where('year', now()->year)->where('id_dependencia', Auth::user()->id_dependencia);
$data['datos_generales'] = (object) [
'dependencia' => $d->sDependencia,
'siglas' => $d->sSiglas,
'municipio' => ($d->d_m == NULL) ? 'No aplica' : $d->d_m->municipio,
'estado' => $d->d_e->estado,
];
return view('asf_layout.index', $data);
}
// CLAVES DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA PARA MAIN) (PARA CERRAR FONDOS)
public function layouts_main()
{
$data['usuarioActual'] = U::with('u_d')->where('id', Auth::user()->id)->get()->first();
$lNAU = NAU::with('nau_cna')->where('id_usuario', Auth::user()->id)->get();
$data['CNAusuario'] = [];
foreach ($lNAU as $knau => $nau) {
$data['CNAusuario'][] = $nau->nau_cna;
}
return view('asf_layout.main', $data);
}
public function cerrar(Request $r)
{
$row = Claves::where('id_ff', $r->id)->first();
$row->estatus = '1';
DB::beginTransaction();
try {
$row->save();
DB::commit();
return response()->json('OK', 200);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
return response()->json('NO', 200);
}
}
/*******************************************************/
/* FUENTE DE FINANCIAMIENTO */
/*******************************************************/
// PETICIONES JSON PARA FUNCIONALIDAD
// Pintar las fuentes de financiamiento por ao
public function datosFuenteFinanciamiento(Request $r, $dependencia, $year)
{
$q = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'fd.clave_ff', '=', 'ccp.id')
->where('fd.year', $year)
->where('fd.id_dependencia', $dependencia)
->join('catalogo_auditorias as ca', 'ca.id', '=', 'fd.id_auditoria')
->join('catalogo_numeros_auditoria as cna', 'cna.id', '=', 'fd.nAuditoria')
->select(
'fd.id as id_fondo',
'ccp.id as id',
'ccp.nombre_clave as clave',
'ca.auditoria as uaa',
'cna.numeroAuditoria as nAuditoria',
)
->orderBy('clave', 'ASC')
->orderBy('uaa', 'ASC')
->get();
return response()->json($q, 200);
}
// Datos del monto de la dependencia y el ramo al que pertenece
public function datosClaveFFDependencia(Request $r, $id_clave, $year, $dependencia, $idnAuditoria)
{
$datos['monto'] = DB::table('fondo_dependencia')
->where('id_dependencia', $dependencia)
->where('year', $year)
->where('clave_ff', $id_clave)
->where('nAuditoria', $idnAuditoria)
->first()->monto;
$datos['ramo'] = DB::table('catalogo_claves_presupuestales')->where('id', $id_clave)->first()->ramo;
return response()->json($datos, 200);
}
// AGREGAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function addClave()
{
$data = [];
$dependencias = DB::table('dependencias as d')
->where('id_estado', Auth::user()->id_estado);
switch (Auth::user()->type) {
// 1 - Root
case 1:
$data['dependencias'] = $dependencias->where('id_municipio', Auth::user()->id_municipio)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->get();
break;
// 3 - Enlace estatal
case 3:
$data['dependencias'] = $dependencias->get();
break;
// 2 - Administrador de dependencia
// 4 - ejecutor
case 2:
case 4:
$v = DB::table('fondo_dependencia')
->where('id_dependencia', Auth::user()->id_dependencia)
->where('year', now()->year)
->count();
$data['dependencias'] = $dependencias->where('id_dependencia', Auth::user()->id_dependencia)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->first();
$data['fondo'] = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'fd.clave_ff')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->select(
'fd.id',
'ccp.id as id_clave',
'ccp.nombre_clave as clave',
'ccp.ramo',
'fd.monto as monto'
)
->first();
$con_cff = DB::table('clave_ff as cff')
->select('cff.id_fondo_dependencia')
->where('cff.id_dependencia', Auth::user()->id_dependencia)
->WhereNotNull('cff.id_fondo_dependencia')
->get();
$a_con_cff = [];
foreach ($con_cff as $kIdFondo => $id_fondo) {
$a_con_cff[] = $id_fondo->id_fondo_dependencia;
}
$years = DB::table('fondo_dependencia as fd')
->select('fd.year')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->whereNotIn('fd.id', $a_con_cff)
->groupBy('fd.year')
->orderBy('fd.year', 'asc')
->get();
$data['yearsRegistrados'] = [];
foreach ($years as $kYear => $year) {
$data['yearsRegistrados'][] = $year->year;
}
break;
}
if ($data['fondo'] == NULL) {
return \Redirect::back()->withErrors([LU::t_tr('D', 'dependencia', 's') . ' no tiene ' . LU::t_tr('v', 'fondo', 'p') . ' asignados']);
}
$data['claves'] = TipoClave::all();
return view('asf_layout.addClave', $data);
}
// AGREGAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA) Finanzas
public function addClaveFinanzas()
{
$data = [];
$dependencias = DB::table('dependencias as d')
->where('id_estado', Auth::user()->id_estado);
switch (Auth::user()->type) {
case 8: //finanzas estatal
case 9: //finanzas municipal
$data['dependencias'] = $dependencias->where('id_dependencia', Auth::user()->id_dependencia)
->select(
'id_dependencia as id',
'sDependencia as nombre',
'sSiglas as siglas'
)
->first();
$data['fondo'] = DB::table('fondo_dependencia as fd')
->join('catalogo_claves_presupuestales as ccp', 'ccp.id', '=', 'fd.clave_ff')
->where('fd.id_dependencia', Auth::user()->id_dependencia)
->select(
'fd.id',
'ccp.id as id_clave',
'ccp.nombre_clave as clave',
'ccp.ramo',
'fd.monto as monto'
)
->first();
break;
}
if ($data['fondo'] == NULL) {
return \Redirect::back()->withErrors([LU::t_tr('D', 'dependencia', 's') . ' no tiene ' . LU::t_tr('v', 'fondo', 'p') . ' asignados']);
}
$data['claves'] = TipoClave::all();
return view('asf_layout.addClaveFinanzas', $data);
}
//OBTIENE LOS DATOS DE fondo_dependencia Y LOS CONTRASTA CON clave_ff PARA OBTENER UNA LISTA DE FONDOS NO REGISTRADOS
public function getClavesFFNotInTable($dependencia, $year)
{
$data = DB::table('fondo_dependencia as fd')
->leftJoin('clave_ff as cf', 'fd.id', '=', 'cf.id_fondo_dependencia')
->join('catalogo_claves_presupuestales as ccp', 'fd.clave_ff', '=', 'ccp.id')
->join('catalogo_numeros_auditoria as cna', 'fd.nAuditoria', '=', 'cna.id')
->join('catalogo_auditorias as ca', 'cna.id_auditoria', '=', 'ca.id')
->select('fd.id as id_fondo', 'fd.clave_ff as id', 'ccp.nombre_clave as clave', 'cna.numeroAuditoria as nAuditoria', 'ca.auditoria as uaa', 'cna.id as id_nAuditoria')
->where('fd.year', $year)
->where('fd.id_dependencia', $dependencia)
->whereNull('cf.id_ff')
->get();
return response()->json($data);
}
// GUARDAR NUEVA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (INSERTAR)
public function saveClave(Request $r)
{
$errorEncontrado = '';
$id_clave_ff = 0;
$claveRegistrada = null;
DB::Begintransaction();
try {
// Insertar
$datos = $r->except([
'_token',
'excel_url_archivo',
'excel_lista_anexo_GD1',
'excel_lista_anexo_GD2',
//paraEstatusAnexos
'cb_anexo_gd',
'cb_anexo_adq',
'cb_anexo_obras',
'cb_anexo_egresos',
'cb_anexo_nomina',
'cb_anexo_c4k',
'cb_anexo_OyAdq',
//paraEstatusDocumentos
'cb_actas_cabildo',
'cb_contratos_cuentas_bancarias',
'cb_edos_cuentas01',
'cb_edos_cuentas02',
'cb_edos_cuentas03',
'cb_edos_cuentas04',
'cb_edos_cuentas05',
'cb_edos_cuentas06',
'cb_edos_cuentas07',
'cb_edos_cuentas08',
'cb_edos_cuentas09',
'cb_edos_cuentas10',
'cb_edos_cuentas11',
'cb_edos_cuentas12',
'cb_formato_3',
'cb_formato_3A',
'cb_formato_3B',
'cb_formato_4'
]);
$datos['cap1k'] = $r->cap1k ? $r->cap1k : 0;
$datos['cap4k'] = $r->cap4k ? $r->cap4k : 0;
$datos['monto_nomina'] = $r->monto_nomina != NULL ? $r->monto_nomina : 0;
$datos['fecha'] = date('Y-m-d');
$datos['id_estado'] = Auth::user()->id_estado;
$datos['id_municipio'] = Auth::user()->id_municipio;
$datos['fondo_revolvente'] = 0;
$datos['estatus'] = 0;
$datos['created_at'] = date('Y-m-d H:i:s');
//paraEstatusAnexos
$datos['estatus_archivo'] = isset($r->cb_anexo_gd) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_adq'] = isset($r->cb_anexo_adq) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_obras'] = isset($r->cb_anexo_obras) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_egresos'] = isset($r->cb_anexo_egresos) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_nomina'] = isset($r->cb_anexo_nomina) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_c4k'] = isset($r->cb_anexo_c4k) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['estatus_anexo_obras_y_adq'] = isset($r->cb_anexo_OyAdq) ? '0' : '5'; //coloca "Sin cargar" o "No aplica"
$datos['obras'] = isset($r->cb_anexo_obras) ? '1' : '0'; //indica si hay o no obras
// Guardar y obtener el ID del registro insertado
$id_clave_ff = DB::table('clave_ff')->insertGetId($datos);
$claveRegistrada = Claves::with(['c_ccp', 'c_cna'])->Where('id_ff', $id_clave_ff)->first();
//paraEstatusDocumentos
$documentosFondo = new DOCF;
$documentosFondo->id_clave_ff = $id_clave_ff;
$documentosFondo->actas_cabildo = isset($r->cb_actas_cabildo) ? '0' : '5';
$documentosFondo->contratos_cuentas_bancarias = isset($r->cb_contratos_cuentas_bancarias) ? '0' : '5';
$documentosFondo->edos_cuentas_01 = isset($r->cb_edos_cuentas01) ? '0' : '5';
$documentosFondo->edos_cuentas_02 = isset($r->cb_edos_cuentas02) ? '0' : '5';
$documentosFondo->edos_cuentas_03 = isset($r->cb_edos_cuentas03) ? '0' : '5';
$documentosFondo->edos_cuentas_04 = isset($r->cb_edos_cuentas04) ? '0' : '5';
$documentosFondo->edos_cuentas_05 = isset($r->cb_edos_cuentas05) ? '0' : '5';
$documentosFondo->edos_cuentas_06 = isset($r->cb_edos_cuentas06) ? '0' : '5';
$documentosFondo->edos_cuentas_07 = isset($r->cb_edos_cuentas07) ? '0' : '5';
$documentosFondo->edos_cuentas_08 = isset($r->cb_edos_cuentas08) ? '0' : '5';
$documentosFondo->edos_cuentas_09 = isset($r->cb_edos_cuentas09) ? '0' : '5';
$documentosFondo->edos_cuentas_10 = isset($r->cb_edos_cuentas10) ? '0' : '5';
$documentosFondo->edos_cuentas_11 = isset($r->cb_edos_cuentas11) ? '0' : '5';
$documentosFondo->edos_cuentas_12 = isset($r->cb_edos_cuentas12) ? '0' : '5';
$documentosFondo->formato_3 = isset($r->cb_formato_3) ? '0' : '5';
$documentosFondo->formato_3A = isset($r->cb_formato_3A) ? '0' : '5';
$documentosFondo->formato_3B = isset($r->cb_formato_3B) ? '0' : '5';
$documentosFondo->formato_4 = isset($r->cb_formato_4) ? '0' : '5';
$documentosFondo->save();
if ($r->excel_url_archivo != null) { //cuando no se registr numero del anexo gd, por lo que se registr el excel
//guardar anexo gastos diversos y de operaciones
$json_lista_anexo_GD1 = json_decode($r->excel_lista_anexo_GD1);
$json_lista_anexo_GD2 = json_decode($r->excel_lista_anexo_GD2);
foreach ($json_lista_anexo_GD1 as $kranexo => $ranexo) {
$reg = new AGDO;
$reg->rfc = $ranexo->rfc;
$reg->nombre = $ranexo->nombre;
$reg->descripcion = $ranexo->descripcion;
$reg->fecha_adq_gasto = $ranexo->fecha_adq_gasto;
$reg->monto_pagado = $ranexo->monto_pagado;
$reg->entregable = $ranexo->entregable;
$reg->monto_pagado_fondo = $ranexo->monto_pagado_fondo;
$reg->partida_clasificatoria = $ranexo->partida_clasificatoria;
$reg->num_factura = $ranexo->num_factura;
$reg->num_poliza = $ranexo->num_poliza;
$reg->num_poliza = $ranexo->num_poliza;
$reg->es_gasto_diverso = '1';
$reg->id_clave_ff = $id_clave_ff;
$reg->save();
}
foreach ($json_lista_anexo_GD2 as $kranexo => $ranexo) {
$reg = new AGDO;
$reg->rfc = $ranexo->rfc;
$reg->nombre = $ranexo->nombre;
$reg->descripcion = $ranexo->descripcion;
$reg->fecha_adq_gasto = $ranexo->fecha_adq_gasto;
$reg->monto_pagado = $ranexo->monto_pagado;
$reg->entregable = $ranexo->entregable;
$reg->monto_pagado_fondo = $ranexo->monto_pagado_fondo;
$reg->partida_clasificatoria = $ranexo->partida_clasificatoria;
$reg->num_factura = $ranexo->num_factura;
$reg->num_poliza = $ranexo->num_poliza;
$reg->num_poliza = $ranexo->num_poliza;
$reg->es_gasto_diverso = '0';
$reg->id_clave_ff = $id_clave_ff;
$reg->save();
}
Claves::where('id_ff', $id_clave_ff)->update(['estatus_archivo' => 1]);
//guardar excel del anexo
$json_url_archivo = json_decode($r->excel_url_archivo);
$url = '/' . 'uploads/' . $r->year . '/' . 'anexoGD/' . $r->id_dependencia . '/' . $r->clave_ff . '/' . $r->year . '/' . $r->id_nauditoria . '/anexoGD_' . date('Ymd_His') . '.xlsx';
$dirname = dirname(public_path() . $url);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url, 'wb');
$data = explode(',', $json_url_archivo);
fwrite($file, base64_decode($data[1]));
fclose($file);
$claveRegistrada = Claves::Where('id_ff', $id_clave_ff)->first();
$claveRegistrada->url_anexo_gd = $url;
$claveRegistrada->save();
}
} catch (\Exception $e) {
$errorEncontrado = 'Error al registrar' . LU::t_tr('d', 'fondo', 's') . ', por favor contacte con servicio tcnico.' . $e->getMessage();
}
if ($errorEncontrado != '') {
DB::rollback();
return redirect()->back()->withErrors([$errorEncontrado]);
} else {
DB::commit();
return redirect()->back()->with('success', 'Se guardaron correctamente los datos: ' . LU::t_tr('v', 'fondo', 's') . ' ' . ($claveRegistrada ? '"' . $claveRegistrada->c_ccp->nombre_clave . '"' : '') . ', ' . LU::t_tr('v', 'num_auditoria', 's') . ' "' . $claveRegistrada->c_cna->numeroAuditoria . '" del ao ' . $r->year . '. Puede verlo en el men "' . LU::t_pr('m_captura_anexos') . '" - "' . LU::t_tr('v', 'adquisiciones_obras', 'P') . '" y seleccione un "Ao a mostrar".');
}
}
//AGREGAR FONDO FINANZAS
public function saveClaveFinanzas(Request $r)
{
$data['errores'] = null;
$newClave = null;
$exist = CFFFINANZAS::where(['id_dependencia' => $r->id_dependencia, 'id_catalogo_numeros_auditoria' => $r->id_catalogo_numeros_auditoria, 'id_catalogo_claves_presupuestales' => $r->id_catalogo_claves_presupuestales])->first();
if ($exist != null) { //caso en que la combinacin ya se encuentra en la BD
if ($exist->id != $r->id) { //Caso en que no coinciden los Id ya que son registros diferentes
$data['errores'][] = LU::t_tr('D', 'fondo', 's') . ' ya se encuentra registrado, verifique la tabla inferior.';
} //else en caso en que el id coincide por lo que se trata del mismo registro, por lo que si se deberia guardar
} //else caso en que la combinacin no se encuentra en la bd, por lo que si se deberia guardar
if ($data['errores'] == null) { //guardar en caso que no haya errores
try {
$newClave = CFFFINANZAS::findOrFail($r->id);
} catch (\Throwable $th) {
$newClave = new CFFFINANZAS();
}
try {
$newClave->id_dependencia = $r->id_dependencia;
$newClave->id_catalogo_numeros_auditoria = $r->id_catalogo_numeros_auditoria;
$newClave->id_catalogo_claves_presupuestales = $r->id_catalogo_claves_presupuestales;
$newClave->nombre_responsable = $r->firma_responsable;
$newClave->cargo_responsable = $r->cargo_responsable;
//paraEstatusAnexos Finanzas
$newClave->estatus_anexo_egresos = $this->obtenerEstatusModificado($newClave->estatus_anexo_egresos, $r->estatus_anexo_egresos);
$newClave->estatus_anexo_transf = $this->obtenerEstatusModificado($newClave->estatus_anexo_transf, $r->estatus_anexo_transf);
$newClave->updated_at = Carbon::now();
$newClave->save();
} catch (\Exception $e) {
$data['errores'][] = 'Ocurri un error al intentar editar ' . LU::t_tr('d', 'fondo', 's') . '. Contacte a servicio tcnico.';
}
}
return $data;
}
//ELIMINAR FONDO FINANZAS
public function deleteClaveFinanzas(Request $r)
{
$data = [];
$mensajeDeErrorGlobal = '';
$oCffFinanzas = CFFFINANZAS::find($r->id_clave_ff_finanzas);
if ($oCffFinanzas == null) {
$mensajeDeErrorGlobal = 'No se puede eliminar ' . LU::t_tr('d', 'fondo', 's') . ', ya que no existe en el sistema.';
} else {
$estatusExistentes = '';
try {
//paraEstatusAnexos Finanzas
$estatusAnexoEgresos = $oCffFinanzas->estatus_anexo_egresos;
if (!in_array($estatusAnexoEgresos, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Egresos es: ' . $this->estatusAnexoArchivo($estatusAnexoEgresos, 8) . "\n";
}
$estatusAnexoTransfEjec = $oCffFinanzas->estatus_anexo_transf;
if (!in_array($estatusAnexoTransfEjec, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Transferencia a ejecutores es: ' . $this->estatusAnexoArchivo($estatusAnexoTransfEjec, 8) . "\n";
}
if ($estatusExistentes == '') {
try {
if ($oCffFinanzas->delete()) {
DB::commit();
} else {
DB::rollback();
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . ' Contacte a soporte tcnico.';
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio tcnico.' . $e->getMessage();
}
} else {
$mensajeDeErrorGlobal = "Solo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " si sus " . LU::t_tr('v', 'anexo', 'p') . " se encuentran en estatus 'Sin cargar' o 'No aplica'.\n\nNo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " debido a que: \n" . $estatusExistentes;
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . ' solicitado. Contacte a servicio tcnico.' . $e->getMessage();
}
}
$data['errores'] = $mensajeDeErrorGlobal == '' ? null : $mensajeDeErrorGlobal;
return $data;
}
// EDITAR UNA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA (VISTA)
public function editClave(Request $r, $idFondo)
{
$data = [];
$data['cff'] = Claves::With(['c_d', 'c_tc', 'c_cna'])->Where('id_ff', $idFondo)->first();
$data['docf'] = [];
$documentos_fondo = DOCF::Where('id_clave_ff', $idFondo)->first();
if ($documentos_fondo != null) {
$data['docf'] = $documentos_fondo;
}
$data['cff']->c_cna->cna_ca;
$data['h_cff'] = hcf::With(['h_u'])->Where('id_clave_ff', $idFondo)->orderBy('created_at', 'desc')->get();
$data['listaEstatus'] = ['Sin cargar', 'Cargado sin enviar a revisin', 'Enviado ' . LU::t_tr('a_d', 'enlace', 's'), 'Enviado ' . LU::t_tr('a_d', 'asf', 's'), 'Regresado ' . LU::t_tr('a_d', 'ejecutor', 's'), 'No aplica'];
return view('asf_layout.editClave', $data);
}
// GUARDAR LA EDICIN DE UNA CLAVE DE FUENTE DE FINANCIAMIENTO-PROGRAMA EXISTENTE
public function updateClave(Request $r, $idFondo)
{
DB::Begintransaction();
try {
$clave = Claves::find($idFondo);
$tieneObrasNew = ($r->obras == 'SI' ? 1 : ($r->obras == 'NO' ? 0 : NULL));
HCF::create([
'id_clave_ff' => $idFondo,
'monto_recibido' => $r->monto_recibido == $clave->monto_recibido ? NULL : $r->monto_recibido,
'cap1k' => $r->cap1k == $clave->cap1k ? NULL : $r->cap1k,
'cap4k' => $r->cap4k == $clave->cap4k ? NULL : $r->cap4k,
'nombre_responsable' => $r->nombre_responsable == $clave->firma_responsable ? NULL : $r->nombre_responsable,
'cargo_responsable' => $r->cargo_responsable == $clave->cargo_responsable ? NULL : $r->cargo_responsable,
'obras' => $tieneObrasNew == $clave->obras ? NULL : $tieneObrasNew,
'id_usuario' => Auth::user()->id,
]);
$documentos_fondo = DOCF::Where('id_clave_ff', $idFondo)->first();
if ($documentos_fondo == null) {
$documentos_fondo = new DOCF();
$documentos_fondo->id_clave_ff = $idFondo;
}
$clave->monto_recibido = ($r->monto_recibido == NULL || $r->monto_recibido == '') ? 0 : $r->monto_recibido;
$clave->cap1k = ($r->cap1k == NULL || $r->cap1k == '') ? 0 : $r->cap1k;
$clave->cap4k = ($r->cap4k == NULL || $r->cap4k == '') ? 0 : $r->cap4k;
$clave->monto_nomina = ($r->monto_nomina == NULL || $r->monto_nomina == '') ? 0 : $r->monto_nomina;
$clave->firma_responsable = ($r->nombre_responsable == NULL || $r->nombre_responsable == '') ? $clave->firma_responsable : $r->nombre_responsable;
$clave->cargo_responsable = ($r->cargo_responsable == NULL || $r->cargo_responsable == '') ? $clave->cargo_responsable : $r->cargo_responsable;
// $clave->obras = $r->obras == 'SI' ? 1 : ($r->obras == 'NO' ? 0 : NULL);
//paraEstatusAnexos
$clave->estatus_archivo = $this->obtenerEstatusModificado($clave->estatus_archivo, isset($r->cb_anexo_gd));
$clave->estatus_anexo_adq = $this->obtenerEstatusModificado($clave->estatus_anexo_adq, isset($r->cb_anexo_adq));
$clave->estatus_anexo_obras = $this->obtenerEstatusModificado($clave->estatus_anexo_obras, isset($r->cb_anexo_obras));
$clave->estatus_anexo_egresos = $this->obtenerEstatusModificado($clave->estatus_anexo_egresos, isset($r->cb_anexo_egresos));
$clave->estatus_anexo_nomina = $this->obtenerEstatusModificado($clave->estatus_anexo_nomina, isset($r->cb_anexo_nomina));
$clave->estatus_anexo_c4k = $this->obtenerEstatusModificado($clave->estatus_anexo_c4k, isset($r->cb_anexo_c4k));
$clave->estatus_anexo_obras_y_adq = $this->obtenerEstatusModificado($clave->estatus_anexo_obras_y_adq, isset($r->cb_anexo_OyAdq));
$clave->obras = isset($r->cb_anexo_obras) ? '1' : '0'; //indica si hay o no obras
//paraEstatusDocumentos
$documentos_fondo->actas_cabildo = $this->obtenerEstatusModificado($documentos_fondo->actas_cabildo, isset($r->cb_actas_cabildo));
$documentos_fondo->contratos_cuentas_bancarias = $this->obtenerEstatusModificado($documentos_fondo->contratos_cuentas_bancarias, isset($r->cb_contratos_cuentas_bancarias));
$documentos_fondo->edos_cuentas_01 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_01, isset($r->cb_edos_cuentas01));
$documentos_fondo->edos_cuentas_02 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_02, isset($r->cb_edos_cuentas02));
$documentos_fondo->edos_cuentas_03 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_03, isset($r->cb_edos_cuentas03));
$documentos_fondo->edos_cuentas_04 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_04, isset($r->cb_edos_cuentas04));
$documentos_fondo->edos_cuentas_05 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_05, isset($r->cb_edos_cuentas05));
$documentos_fondo->edos_cuentas_06 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_06, isset($r->cb_edos_cuentas06));
$documentos_fondo->edos_cuentas_07 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_07, isset($r->cb_edos_cuentas07));
$documentos_fondo->edos_cuentas_08 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_08, isset($r->cb_edos_cuentas08));
$documentos_fondo->edos_cuentas_09 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_09, isset($r->cb_edos_cuentas09));
$documentos_fondo->edos_cuentas_10 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_10, isset($r->cb_edos_cuentas10));
$documentos_fondo->edos_cuentas_11 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_11, isset($r->cb_edos_cuentas11));
$documentos_fondo->edos_cuentas_12 = $this->obtenerEstatusModificado($documentos_fondo->edos_cuentas_12, isset($r->cb_edos_cuentas12));
$documentos_fondo->formato_3 = $this->obtenerEstatusModificado($documentos_fondo->formato_3, isset($r->cb_formato_3));
$documentos_fondo->formato_3A = $this->obtenerEstatusModificado($documentos_fondo->formato_3A, isset($r->cb_formato_3A));
$documentos_fondo->formato_3B = $this->obtenerEstatusModificado($documentos_fondo->formato_3B, isset($r->cb_formato_3B));
$documentos_fondo->formato_4 = $this->obtenerEstatusModificado($documentos_fondo->formato_4, isset($r->cb_formato_4));
$documentos_fondo->save();
$clave->save();
DB::commit();
return \Redirect::to('/layouts');
} catch (\Except $e) {
DB::rollback();
return \Redirect::to("/layouts")->withErrors(['No se pudo guardar la informacin proporcionada al sistema']);
}
}
public function obtenerEstatusModificado($estatus, $estaMarcado)
{
$estatusNuevo = $estatus != null ? intval($estatus) : intval('5');
if ($estatusNuevo == 5) { //si en la bd es "no aplica"
$estatusNuevo = $estaMarcado ? 0 : $estatusNuevo;
} else { //casos donde el estatus es diferente de 5
$estatusNuevo = $estaMarcado ? $estatusNuevo : 5;
}
return $estatusNuevo;
}
/*******************************************************/
/* HELPERS CAMBIOS DE VISTAS */
/*******************************************************/
// SELECCIN DE MDULO DE OBRAS/ADQUISICIONES
public function seleccionModulo(Request $r, $id)
{
$resp['clave_ff'] = $id;
$resp['clave'] = DB::table('clave_ff')->where('id_ff', $id)->first();
return view('asf_layout.helpers.obrasomateriales', $resp);
}
// SELECCIN DEL TIPO DE REGISTRO DEL CONTRATO: Bsico (Modo1 y 2) o intermedio (Modo3)
public function tipoRegistro(Request $r, $modulo, $id, $year)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['modulo'] = $modulo;
$datos['clave'] = $id;
$datos['year'] = $year;
$datos['cff'] = DB::table('clave_ff')->where('id_ff', $id)->first();
return view('asf_layout.helpers.tipoRegistro', $datos);
}
/******************************************************/
/* CONTRATOS */
/******************************************************/
//Variables globales para modoAdd1:
private $modulo = "";
private $c_ff = "";
private $guardado_correcto = true;
private $abrirExcelCorrecto = true;
private $hojaActual = 0;
private $contadorRegistro = 0;
private $mensajeException = '';
private $soloMensajeException = false;
private $arrayNombresExcel = [ //el cambio de nombres se debe hacer en todo este archivo y en el rea de las excepciones de la BD de este archivo
'DE ANTICIPO' => 'de_anticipo',
'DE CUMPLIMIENTO' => 'de_cumplimiento',
'DE VICIOS OCULTOS' => 'de_vicios_ocultos',
'FECHA DE ACTA FINIQUITO (dd/mm/yyyy)' => 'fecha_de_acta_finiquito_ddmmyyyy',
'MODALIDAD DE CONTRATACIN (POR CONTRATO o POR ADMINISTRACIN DIRECTA)' => 'modalidad_de_contratacion_por_contrato_o_por_administracion_directa',
'MONTO DEL CONTRATO C/IVA (en pesos)' => 'monto_del_contrato_civa_en_pesos',
'MONTO FACTURA C/IVA (en pesos)' => 'monto_factura_civa_en_pesos',
'MONTO PAGADO CON FAFEF' => 'monto_pagado_con_fafef',
'MONTO PAGADO CON FAIS' => 'monto_pagado_con_fais',
'MONTO PAGADO CON FEIEF' => 'monto_pagado_con_feief',
'MONTO PAGADO CON PARTICIPACIONES' => 'monto_pagado_con_participaciones',
'MONTO PAGADO CON PARTICIPACIONES A MUN.' => 'monto_pagado_con_participaciones_a_mun',
'MONTO PAGADO CON FORTAMUN' => 'monto_pagado_con_fortamun',
'NOMBRE, DENOMINACIN Y/O RAZN SOCIAL' => 'nombre_denominacion_yo_razon_social',
'NM. CONTRATO O ACUERDO DE OBRA' => 'num_contrato_o_acuerdo_de_obra',
'NM. CONTRATO' => 'num_contrato',
'NM. FACTURA O FOLIO FISCAL' => 'num_factura_o_folio_fiscal',
'NM. PLIZA' => 'num_poliza',
'OBJETO DEL CONTRATO O NOMBRE DEL PROYECTO' => 'objeto_del_contrato_o_nombre_del_proyecto',
'OBJETO DEL CONTRATO' => 'objeto_del_contrato',
'PARTIDA CLASIFICADOR' => 'partida_clasificador',
'PERIODO DE EJECUCIN FIN (dd/mm/yyyy)' => 'periodo_de_ejecucion_fin_ddmmyyyy',
'PERIODO DE EJECUCIN INICIO (dd/mm/yyyy)' => 'periodo_de_ejecucion_inicio_ddmmyyyy',
'RFC DE EMPRESAS CONCURSANTES (en caso de ser LP o IR)' => 'rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir',
'RFC DE EMPRESAS EN SONDEO DE MERCADO' => 'rfc_de_empresas_en_sondeo_de_mercado',
'RFC' => 'rfc',
'TIPO DE ENTREGABLE (documento que acredite la entrega)' => 'tipo_de_entregable_documento_que_acredite_la_entrega',
'TIPO DE PROCEDIMIENTO (LP o IR o AD)' => 'tipo_de_procedimiento_lp_o_ir_o_ad',
'VIGENCIA DEL CONTRATO FIN (dd/mm/yyyy)' => 'vigencia_del_contrato_fin_ddmmyyyy',
'VIGENCIA DEL CONTRATO INICIO (dd/mm/yyyy)' => 'vigencia_del_contrato_inicio_ddmmyyyy',
];
// validacion de cada celda
private function validarCampoAdd1($campos, $nombreColumnaExcel, $permiteNoAplica, $idValidacion = 0, $obligatorio = true)
{
$mensajeValidacion = "";
$texto = $campos[$nombreColumnaExcel];
$nombreMostrar = str_contains($nombreColumnaExcel, 'monto_pagado_con') ? 'MONTO PAGADO CON ' . mb_strtoupper(LU::t_tr('v', 'fondo_programa', 'S')) : array_search($nombreColumnaExcel, $this->arrayNombresExcel);
if ($obligatorio && ($texto == null || $texto == "") && $nombreColumnaExcel != 'tipo_de_procedimiento_lp_o_ir_o_ad') { //campos vacios
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" debe llenarse. Recuerde no combinar celdas.';
if ($permiteNoAplica) {
$mensajeValidacion .= ' Es posible utilizar N/A';
}
}
if (!$permiteNoAplica && mb_strtoupper($texto) == "N/A" && $nombreColumnaExcel != 'tipo_de_procedimiento_lp_o_ir_o_ad') { //campos con N/A
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" no debe llenarse con N/A';
}
$pattern = LU::get_regex($idValidacion, true);
$condicion = "";
switch ($idValidacion) {
case 1: //"De dd/mm/yyyy a dd/mm/yyyy"
$condicion = 'debe contener un rango de fechas "De dd/mm/yyyy a dd/mm/yyyy" (sin comillas).';
break;
case 4: //fecha dd/mm/yyyy
$condicion = 'debe ser una fecha en formato "dd/mm/yyyy" (sin comillas).';
break;
case 8: //partidas clasificadorias para adquisiciones 2k's, 3k's o 5k's, ej: 5057
$condicion = 'debe ser un nmero asociado al captulo 2000, 3000 5000.';
break;
case 9: //partidas clasificadorias para obras 6k's, ej: 6057
$condicion = 'debe ser un nmero asociado al captulo 6000.';
break;
}
if ($condicion != "") {
if ($idValidacion == 4) { //cuando son fechas
$fechaDT = NULL;
try { //cuando recibe un numero y lo pasa a datetime
$fechaDT = Date::excelToDateTimeObject($texto);
} catch (\Exception $e) {
}
if ($fechaDT == NULL) { //valida si fallo la conversion de numero a datetime
try { //cuando recibe un string y lo pasa a datetime
$fechaDT = date_create_from_format('d/m/Y', $texto);
} catch (\Exception $e) {
}
}
if ($fechaDT == NULL) { //cuando no se pudo obtener datetime con numero ni string
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" ' . $condicion;
} else { //caso en el que se obtuvo datetime correctamente
$campos[$nombreColumnaExcel] = $fechaDT->format('Y-m-d');
$fechaMostrar = $fechaDT->format('d/m/Y');
$yearReg = intval($fechaDT->format('Y'));
if ($yearReg < 100) { //caso en que usaron formato de dos digitos para el ao
$fechaFormat2y = date_create_from_format('d/m/y', $texto);
$fechaMostrar = $fechaFormat2y->format('d/m/Y');
$yearReg = intval($fechaFormat2y->format('Y'));
}
$yearMin = intval($this->yearDeclarado);
$yearMax = intval($this->yearDeclarado + 1);
if ($yearReg < $yearMin || $yearReg > $yearMax) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '"' . ': "' . $fechaMostrar . '", debe ser una fecha entre ' . $yearMin . ' y ' . $yearMax . '.';
} else {
$campos[$nombreColumnaExcel] = $fechaDT->format('Y-m-d');
if (in_array($nombreColumnaExcel, ['periodo_de_ejecucion_inicio_ddmmyyyy', 'vigencia_del_contrato_inicio_ddmmyyyy'])) {
$this->fechaInicio = $campos[$nombreColumnaExcel];
} elseif (in_array($nombreColumnaExcel, ['periodo_de_ejecucion_fin_ddmmyyyy', 'vigencia_del_contrato_fin_ddmmyyyy'])) {
$this->fechaFin = $campos[$nombreColumnaExcel];
if ($this->fechaInicio != null && $this->fechaInicio > $this->fechaFin) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '"' . ': "' . $fechaMostrar . '", debe ser una fecha igual o posterior a la fecha de inicio.';
}
}
}
}
} elseif (!preg_match($pattern, $texto)) { //Validar texto cuando no son fechas
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" ' . $condicion;
}
}
if (Str::startsWith($texto, "=")) {
$mensajeValidacion = 'La columna "' . $nombreMostrar . '" no debe contener frmulas, ingrese el valor real en la celda.';
}
if ($mensajeValidacion != "") { //Casos con errores
$this->exceptionModoAdd1($this->mensajeException = $mensajeValidacion);
}
}
// validacion de todos los campos en las hojas
public $fechaInicio = null;
public $fechaFin = null;
private function validacionCamposModoAdd1($campos, $modulo, $tituloCabeceraFondo, $modalidadContratacion)
{
$this->fechaInicio = null;
$this->fechaFin = null;
$modalidadAD = mb_strtoupper($modalidadContratacion) == 'POR ADMINISTRACIN DIRECTA';
switch ($this->hojaActual) {
case 0:
$this->validarCampoAdd1($campos, $tituloCabeceraFondo, false);
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "rfc", $modalidadAD);
$this->validarCampoAdd1($campos, "nombre_denominacion_yo_razon_social", $modalidadAD);
$this->validarCampoAdd1($campos, "modalidad_de_contratacion_por_contrato_o_por_administracion_directa", false);
$this->validarCampoAdd1($campos, "tipo_de_procedimiento_lp_o_ir_o_ad", $modalidadAD);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "objeto_del_contrato_o_nombre_del_proyecto", false);
$this->validarCampoAdd1($campos, "periodo_de_ejecucion_inicio_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "periodo_de_ejecucion_fin_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "monto_del_contrato_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "de_anticipo", !$modalidadAD);
$this->validarCampoAdd1($campos, "de_cumplimiento", !$modalidadAD);
$this->validarCampoAdd1($campos, "de_vicios_ocultos", !$modalidadAD);
$this->validarCampoAdd1($campos, "fecha_de_acta_finiquito_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "partida_clasificador", false, 9);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", true);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "rfc", false);
$this->validarCampoAdd1($campos, "nombre_denominacion_yo_razon_social", false);
$this->validarCampoAdd1($campos, "tipo_de_procedimiento_lp_o_ir_o_ad", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "objeto_del_contrato", false);
$this->validarCampoAdd1($campos, "vigencia_del_contrato_inicio_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "vigencia_del_contrato_fin_ddmmyyyy", false, 4);
$this->validarCampoAdd1($campos, "monto_del_contrato_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "de_anticipo", true);
$this->validarCampoAdd1($campos, "de_cumplimiento", true);
$this->validarCampoAdd1($campos, "de_vicios_ocultos", true);
$this->validarCampoAdd1($campos, "tipo_de_entregable_documento_que_acredite_la_entrega", false);
$this->validarCampoAdd1($campos, "partida_clasificador", false, 8);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", true);
}
break;
case 1:
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "rfc_de_empresas_en_sondeo_de_mercado", true);
$this->validarCampoAdd1($campos, "rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir", true);
}
break;
case 2:
if ($modulo == 'O') { //Obras
$this->validarCampoAdd1($campos, "num_contrato_o_acuerdo_de_obra", false);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", false);
$this->validarCampoAdd1($campos, "monto_factura_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "num_poliza", false);
} else { ////Adquisiciones
$this->validarCampoAdd1($campos, "num_contrato", false);
$this->validarCampoAdd1($campos, "num_factura_o_folio_fiscal", false);
$this->validarCampoAdd1($campos, "monto_factura_civa_en_pesos", false);
$this->validarCampoAdd1($campos, "num_poliza", false);
}
break;
}
}
// Insertar contratos segn modo
private function exceptionModoAdd1($mensajeDeLaExcepcion, $exceptionExterno = false)
{
$this->guardado_correcto = false;
$errorPlantilla = false;
$mensajeError = "";
$numeroFilasAumentar = 0;
if (!$this->abrirExcelCorrecto) { //verifica que todas las hojas tengan datos
$mensajeError = "Verifique que los " . LU::t_tr('v', 'anexo', 'p') . " (hojas de Excel) tengan datos asociados.";
} else {
$mensajeError = "Existe un dato invlido en la hoja ";
switch ($this->hojaActual) {
case 0:
$mensajeError .= '1';
$numeroFilasAumentar = 16;
break;
case 1:
$mensajeError .= '2';
$numeroFilasAumentar = 7;
break;
case 2:
$mensajeError .= '3';
$numeroFilasAumentar = 8;
break;
}
//Errores en de excepciones automticas al intentar guardar
$error = $mensajeDeLaExcepcion;
if (strpos($error, "Duplicate entry ") !== false && strpos($error, " for key 'contratos_unicos'") !== false) { //Num. contrato duplicado
$this->mensajeException = 'El nmero de contrato est duplicado.';
} elseif (Str::startsWith($error, "Undefined index")) { //Caso que no encontr una cabecera
$errorPlantilla = true;
$this->todosErroresExcelImport = []; //limpia la lista de errores pues es error de la plantilla
$campoEncontrado = true;
$nombreCampoExcel = str_replace('Undefined index: ', '', $error);
$nombreMostrar = array_search($nombreCampoExcel, $this->arrayNombresExcel);
if ($nombreMostrar === false) { //Verifica si existe el valor en el array
$nombreMostrar = $nombreCampoExcel; //Asigna la clave
$campoEncontrado = false;
}
$linkPlantillaCorrecta = '';
$this->mensajeException = $campoEncontrado ? 'No se encontr la columna: '
: 'Se ha detectado una columna indefinida:'; //caso de nuevos campos que se agreguen
$this->mensajeException .= $nombreMostrar . ' (de la hoja ' . ($this->hojaActual + 1) . '). ' .
'Verifique que la plantilla utilizada sea del mdulo correcto y que no haya sido alterada
(nombres ni ubicacin de las cabeceras y las hojas). ' . $linkPlantillaCorrecta;
} else {
$finSubcadena = strpos($error, " at row ");
if (strpos($error, " for column ") !== false && $finSubcadena !== false) { //Caso que no pudo registrar una celda invlida
$subcadena = substr($error, 0, $finSubcadena); //cadena con caracter de columna ' ` de la bd
$caracterColumna = substr($subcadena, -1); //obtiene el ltimo caracter
$subcadena = substr($subcadena, 0, -1); //cadena sin caracter de columna ' ` de la bd
$inicioSubcadena = strripos($subcadena, $caracterColumna); //ultima concurrencia
$columnaBD = substr($subcadena, $inicioSubcadena + 1);
$arrayColumnasBD = [ //debe ser conforme a la base de datos
'El RFC es invlido, debe ser alfanumrico. Ingrese uno por campo.' => 'rfc',
'El nombre, denominacin y/o razon social es invlido, debe ser texto.' => 'nombre_d_r_social',
'La modalidad de contratacin es invlida, debe ser alfanumrica.' => 'modalidad_contratacion',
'El tipo de procedimiento es invlido, debe ser alfanumrico.' => 'tipo_procedimiento',
'El RFC de empresas en sondeo de mercado son invlidos, deben ser alfanumricos.' => 'rfc_empresas_sondeo',
'El RFC de empresas concursantes son invlidos, deben ser alfanumricos.' => 'rfc_empresas_concursantes',
'El nmero de contrato es invlido, debe ser alfanumrico.' => 'numero_contrato',
'El nombre del proyecto es invlido, debe ser alfanumrico.' => 'nombre_proyecto',
'El periodo de ejecucion inicio es invlido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_inicio',
'El periodo de ejecucion fin es invlido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_fin',
'El objeto del contrato es invlido, debe ser alfanumrico.' => 'objeto_contrato',
'La vigencia del contrato inicio es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_inicio',
'La vigencia del contrato fin es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_fin',
'El monto del contrato es invlido, debe ser en pesos (nmero).' => 'monto_contrato',
'El nmero de fianza de anticipo es invlido, puede ser alfanumrico.' => 'de_anticipo',
'El nmero de fianza de cumplimiento es invlido, puede ser alfanumrico.' => 'de_cumplimiento',
'El nmero de fianza de vicios ocultos es invlido, puede ser alfanumrico.' => 'de_vicios_ocultos',
'El tipo de entregable es invlido, debe ser alfanumrico.' => 'tipo_entregable',
'La fecha del acta de finiquito es invlida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'fecha_acta_finiquito',
'El monto pagado con ' . LU::t_tr('i', 'fondo_programa', 's') . ' es invlido, debe ser en pesos (nmero).' => 'montoPagadoConPart',
// 'La partida clasificador es invlida, verifquela.' => 'partidaClasificador', //para no duplicar mensaje se omite
'El nm. factura es invlido, debe ser alfanumrico.' => 'num_factura',
'El nm. pliza es invlido, debe ser alfanumrico.' => 'num_poliza',
'El nm. factura es invlido, debe ser alfanumrico.' => 'nFactura',
'El monto es invlido, debe ser en pesos (nmero).' => 'nMonto',
];
$errorEnCampoBD = array_search($columnaBD, $arrayColumnasBD);
if ($errorEnCampoBD !== false) { //Verifica si existe el valor en el array
$this->mensajeException = $errorEnCampoBD;
}
} else { //descomentar para caso error en el nombre de la columna
// $this->mensajeException = 'Ubicacin error. ' . $error;
}
}
if ($exceptionExterno) {
$this->mensajeException .= " Despus de corregirlo intntelo de nuevo por favor.";
}
$mensajeError .= " en la fila " . ($this->contadorRegistro + $numeroFilasAumentar) . ". " . $this->mensajeException;
if ($this->soloMensajeException || $errorPlantilla) {
$mensajeError = $this->mensajeException;
}
if (strpos($mensajeError, 'El RFC "" no es vlido, verifquelo') === false) { //verifica si el mensaje no es de un rfc est vacio
array_push($this->todosErroresExcelImport, $mensajeError);
}
sort($this->todosErroresExcelImport);
}
}
// CONTRATOS
public function contratosClave(Request $r, $modulo, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
if ($clave_ff->id_dependencia == Auth::user()->id_dependencia) {
$d = Dependencias::with(['d_e', 'd_m'])->where('id_dependencia', Auth::user()->id_dependencia)->first();
$datos['claveAnual'] = (DB::table('clave_ff as ff')->where('id_ff', $id)->select(DB::Raw('YEAR(fecha) as fecha'))->first()->fecha < date('Y')) ? 1 : 0;
$datos['id_ff'] = $id;
$datos['modulo'] = $modulo;
$contratos_o = DB::table('contratos_modo_basico')->where('id_ff', $id);
$contratos_a = DB::table('contratos_modo_basico')->where('id_ff', $id);
// DATOS PARA RESUMEN
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['monto'] = $clave_ff->monto_recibido;
$datos['gastos_diversos'] = self::totalAnexoGD($clave_ff);
$datos['ramo'] = $clave_ff->ramo;
$datos['monto_ramo28'] = $clave_ff->cap1k;
$datos['obras'] = $clave_ff->obras == 1 ? 'Si' : 'No';
$datos['monto_obras'] = $contratos_o->where('modulo', 'O')->where('id_ff', $id)->sum('montoPagadoConPart');
$datos['monto_adquisiciones'] = $contratos_a->where('modulo', 'A')->where('id_ff', $id)->sum('montoPagadoConPart');
$datos['total_reintegro_tesofe'] = Claves::Where(['id_ff' => $id, 'id_dependencia' => $d->id_dependencia])->where('year', $clave_ff->year)->sum('reintegro_tesofe');
// Montos por participaciones se suman ya que no tocan el dinero de la fuente de financiamiento/programa
$datos['utilizado'] = $datos['monto_obras'] + $datos['monto_adquisiciones'] + $datos['monto_ramo28'] + $clave_ff->cap4k + $datos['gastos_diversos']->total + $datos['total_reintegro_tesofe'];
$datos['disponible'] = $datos['monto'] - $datos['utilizado'];
$datos['cff'] = $clave_ff;
//Anexo cap. 4k
$datos['anexo_cap_4k'] = null;
if (in_array($clave_ff->estatus_anexo_c4k, [1, 2, 3, 4])) {
$datos['anexo_cap_4k'] = DB::table('anexo_cap_4k as ac4k')->where('ac4k.id_clave_ff', $id)->first();
}
//num auditoria
$objCNA = DB::table('catalogo_numeros_auditoria')->where('id', $clave_ff->id_nauditoria)->first();
// DATOS GENERALES
$datos['datos_generales'] = (object) [
'year' => $clave_ff->year,
'dependencia' => $d->sDependencia,
'siglas' => $d->sSiglas,
'municipio' => ($d->d_m == NULL) ? 'No aplica' : $d->d_m->municipio,
'estado' => $d->d_e->estado,
'id_dependencia' => $d->id_dependencia,
'id_fondo' => $clave_ff->clave_ff,
'id_nauditoria' => $clave_ff->id_nauditoria,
's_num_auditoria' => $objCNA->numeroAuditoria,
'fecha_cierre' => date('d/m/Y', strtotime($objCNA->fecha_cierre)),
'monto_asignado' => $clave_ff->monto_recibido,
'monto_utilizado' => $datos['utilizado'],
'monto_restante' => $datos['disponible'],
'url_4000' => $d->d_e->id . '/' . $d->d_m->id . '/' . $d->id_dependencia . '/' . $clave_ff->year . '/' . $clave_ff->id_nauditoria . '/' . $clave_ff->clave_ff,
];
$datos['isNumAuditoriaCerrado'] = $objCNA->fecha_cierre < Carbon::today()->startOfDay();
// DATOS PARA TABLA
// $datos['contratos'] = cmb::from('contratos_modo_basico as cmb')
// ->with(['stepper'])
// ->join('catalogo_claves_presupuestales as tcff', 'cmb.clave_ff', '=', 'tcff.id')
// ->where('cmb.id_ff', $id)
// ->where('cmb.modulo', $modulo)
// ->select('cmb.*', 'tcff.nombre_clave')
// ->get();
$datos['contratos'] = CMB::with(['stepper', 'c_ccp', 'c_s', 'c_ec', 'c_nf' => function ($q) {
$q->with(['f_p']);
},])
->where('id_ff', $id)
->where('modulo', $modulo)
->get();
return view('asf_layout.contratos', $datos);
} else {
return \Redirect::to('/api/conexion/vistaRdfs')->with('verificacion', ['No tiene autorizacin para entrar a esta seccin.']);
}
}
public static function obtenerDatosContrato(Request $r)
{
$data = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as ccp', 'cmb.clave_ff', '=', 'ccp.id')
->leftjoin('control_modo_intermedio as cmi', 'cmb.id', '=', 'cmi.id_contrato')
->leftjoin('job_statuses as js', 'js.id', '=', 'cmi.j_descarga_zip_inter')
->where('cmb.id_ff', $r->id_cff)
->where('cmb.modulo', $r->modulo)
->select(
'cmb.id',
'ccp.nombre_clave',
'cmb.nombre_d_r_social',
'cmb.tipo_procedimiento',
'cmb.tipo_registro',
'cmb.numero_contrato',
'cmb.monto_contrato',
'js.status',
'js.output',
'js.operacion_exitosa',
'cmi.id_contrato',
)
->selectRaw('DATEDIFF(NOW(), js.finished_at) as dias_transcurridos')
->get();
return response()->json($data);
}
public static function contarContratos(Request $r)
{
$data = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as ccp', 'cmb.clave_ff', '=', 'ccp.id')
->where('cmb.id_ff', $r->id_cff)
->where('cmb.modulo', $r->modulo)
->count();
return response()->json($data);
}
public static function obtenerPasoContrato(Request $r)
{
$consulta = DB::table('contratos_modo_basico as cmb')
->join('control_modo_intermedio as cmi', 'cmi.id_contrato', '=', 'cmb.id')
->where('cmb.id', $r->id_contrato)
->select(
'cmi.status',
'cmi.step7',
'cmi.step6',
'cmi.step5',
'cmi.step4',
'cmi.step3',
'cmi.step2',
'cmi.step1',
'cmi.step0',
)->first();
$step = 0;
// redireccion de step
if ($step == 0) {
if (!Auth::user()->u_ptu->c_intermedio_datos_iniciales || $consulta->step0) {
$step++;
}
}
if ($step == 1) {
if (!Auth::user()->u_ptu->c_intermedio_suficiencia_presupuestal || $consulta->step1) {
$step++;
}
}
if ($step == 2) {
if (!Auth::user()->u_ptu->c_intermedio_proceso_de_adjudicacion || $consulta->step2) {
$step++;
}
}
if ($step == 3) {
if (!Auth::user()->u_ptu->c_intermedio_proceso_de_contratacion || $consulta->step3) {
$step++;
}
}
if ($step == 4) {
if (!Auth::user()->u_ptu->c_intermedio_entrega || $consulta->step4) {
$step++;
}
}
if ($step == 5) {
if (!Auth::user()->u_ptu->c_intermedio_facturas || $consulta->step5) {
$step++;
}
}
if ($step == 6) {
if (!Auth::user()->u_ptu->c_intermedio_pago_y_polizas || $consulta->step6) {
$step++;
}
}
if (
Auth::user()->u_ptu->c_intermedio_datos_iniciales &&
Auth::user()->u_ptu->c_intermedio_suficiencia_presupuestal &&
Auth::user()->u_ptu->c_intermedio_proceso_de_adjudicacion &&
Auth::user()->u_ptu->c_intermedio_proceso_de_contratacion &&
Auth::user()->u_ptu->c_intermedio_entrega &&
Auth::user()->u_ptu->c_intermedio_facturas &&
Auth::user()->u_ptu->c_intermedio_pago_y_polizas
) {
if ($step == 7 && $consulta->step7) {
$step++;
}
}
$url = '/layouts/contratos/intermedio/' . $step . '/' . $r->id_contrato . '/' . $r->modulo . '/' . $r->id_cff;
return response()->json($url);
}
public static function verInformacionContrato(Request $r)
{
$datos['contrato'] = CMB::with(['stepper', 'c_ccp', 'c_s', 'c_ec', 'c_nf' => function ($q) {
$q->with(['f_p']);
},])
->where('id', $r->id_contrato)
->get();
$listaRegs = [];
$listaRegs['id'] = $datos['contrato'][0]->id;
$listaRegs['clave_ff'] = $datos['contrato'][0]->c_ccp->nombre_clave;
$listaRegs['rfc'] = $datos['contrato'][0]->rfc;
$listaRegs['nombre_d_r_social'] = $datos['contrato'][0]->nombre_d_r_social;
$listaRegs['rfc_empresas_sondeo'] = $datos['contrato'][0]->c_s;
$listaRegs['rfc_empresas_concursantes'] = $datos['contrato'][0]->c_ec;
$listaRegs['numero_contrato'] = $datos['contrato'][0]->numero_contrato;
$listaRegs['monto_contrato'] = $datos['contrato'][0]->monto_contrato;
$listaRegs['de_anticipo'] = $datos['contrato'][0]->de_anticipo;
$listaRegs['de_cumplimiento'] = $datos['contrato'][0]->de_cumplimiento;
$listaRegs['de_vicios_ocultos'] = $datos['contrato'][0]->de_vicios_ocultos;
$listaRegs['monto_pagado_con_part'] = $datos['contrato'][0]->montoPagadoConPart;
$listaRegs['partida_clasificador'] = $datos['contrato'][0]->partidaClasificador;
$listaRegs['num_factura'] = $datos['contrato'][0]->c_nf;
$listaRegs['tipo_registro'] = $datos['contrato'][0]->tipo_registro;
switch ($datos['contrato'][0]->nombre_d_r_social) {
case 'lp':
$listaRegs['tipo_procedimiento'] = 'Licitacin pblica';
break;
case 'ir':
$listaRegs['tipo_procedimiento'] = 'Invitacin restringida';
break;
case 'ad':
$listaRegs['tipo_procedimiento'] = 'Adjudicacin directa';
break;
default:
$listaRegs['tipo_procedimiento'] = 'No aplica';
break;
}
if ($r->modulo == 'O') {
$listaRegs['modalidad-contratacion'] = $datos['contrato'][0]->modalidad_contratacion;
$listaRegs['nombre_proyecto'] = $datos['contrato'][0]->nombre_proyecto;
$listaRegs['periodo_ejecucion_inicio'] = $datos['contrato'][0]->periodo_ejecucion_inicio;
$listaRegs['periodo_ejecucion_fin'] = $datos['contrato'][0]->periodo_ejecucion_fin;
$listaRegs['fecha_acta_finiquito'] = $datos['contrato'][0]->fecha_acta_finiquito;
} else if ($r->modulo == 'A') {
$listaRegs['objeto_contrato'] = $datos['contrato'][0]->objeto_contrato;
$listaRegs['vigencia_contrato_inicio'] = $datos['contrato'][0]->vigencia_contrato_inicio;
$listaRegs['vigencia_contrato_fin'] = $datos['contrato'][0]->vigencia_contrato_fin;
$listaRegs['tipo_entregable'] = $datos['contrato'][0]->tipo_entregable;
}
return response()->json($listaRegs);
}
//calculo del total del anexo GD de un fondo al que pertenece un contrato
public static function totalAnexoGD($objCFF)
{
$tieneAnexoGD = !in_array($objCFF->estatus_archivo, [0, 5]);
$totalAGDO = $objCFF->fondo_revolvente;
return (object)['tieneAnexo' => $tieneAnexoGD, 'total' => $totalAGDO];
}
// EDITAR CONTRATO
public function editarContrato(Request $r, $modulo, $clave, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $clave)->first();
$datos['cff'] = DB::table('clave_ff')->where('id_ff', $clave)->first();
$datos['n_ff'] = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first()->nombre_clave;
$datos['clave'] = $clave;
$datos['modulo'] = $modulo;
$datos['id_contrato'] = $id;
$datos['contratos'] = DB::table('contratos_modo_basico as cmb')
->join('catalogo_claves_presupuestales as tcff', 'cmb.clave_ff', '=', 'tcff.id')
->where('cmb.id', $id)
->select('cmb.*', 'tcff.nombre_clave')
->get();
return View('asf_layout.editar_contrato', $datos);
}
// Seleccin de modo de carga de contratos
public function modoClave(Request $r, $modulo, $id)
{
$clave_ff = DB::table('clave_ff as ff')->where('ff.id_ff', $id)->first();
$ccp = DB::table('catalogo_claves_presupuestales')->where('id', $clave_ff->clave_ff)->first();
$datos['n_ff'] = $ccp->nombre_clave;
$datos['ccp_id'] = $ccp->id;
$datos['c_ff'] = $clave_ff->clave_ff;
$datos['cff'] = DB::table('clave_ff as c')
->join('catalogo_claves_presupuestales as tcff', 'c.clave_ff', '=', 'tcff.id')
->where('c.id_ff', $id)
->select('c.*', 'tcff.nombre_clave')
->first();
$datos['clave'] = $id;
$datos['modulo'] = $modulo;
$datos['year'] = $r->year;
$datos['nAuditoria'] = $clave_ff->id_nauditoria;
switch ($r->modo) {
case 1:
$datos['contratos'] = DB::table('contratos_excel_files as c')
->join('usuarios as u', 'u.id', '=', 'c.id_usuario')
->join('clave_ff as cff', 'c.id_ff', '=', 'cff.id_ff')
->join('catalogo_claves_presupuestales as ccp', 'cff.clave_ff', '=', 'ccp.id')
->where('c.id_ff', $id)
->where('c.modulo', $modulo)
->select(
'c.*',
'ccp.nombre_clave as fondo_programa',
DB::raw("CONCAT(u.firstname,' ',u.lastname) as username")
)
->get();
return view('asf_layout.modo.modo1', $datos);
break;
case 2:
$datos['contratos'] = DB::table('contratos_modo_basico as c')
->join('catalogo_claves_presupuestales as tcff', 'c.clave_ff', '=', 'tcff.id')
->join('usuarios as u', 'u.id', '=', 'c.id_usuario')
->where('c.id_ff', $id)
->where('c.modulo', $modulo)
->wherein('c.tipo_registro', ['1', '2'])
->select(
'c.*',
'tcff.nombre_clave as nombre_clave',
DB::raw("CONCAT(u.firstname,' ',u.lastname) as username")
)
->get();
$datos['id_contrato'] = $r->has('id_contrato') ? $r->id_contrato : "void";
return View('asf_layout.modo.modo2', $datos);
break;
case 3:
$id_contrato = DB::table('contratos_modo_basico')
->insertGetId([
'id_ff' => $id,
'id_usuario' => Auth::user()->id,
'clave_ff' => $datos['c_ff'],
'tipo_registro' => 3,
'modulo' => $modulo
]);
DB::table('control_modo_intermedio')->insert(['id_ff' => $id, 'modulo' => $modulo, 'id_contrato' => $id_contrato]);
DB::table('files_contratos_modo_basico')->insert(['id_ff' => $id, 'modulo' => $modulo, 'id_contrato' => $id_contrato]);
return \Redirect::to('/layouts/contratos/intermedio/0/' . $id_contrato . '/' . $modulo . '/' . $id);
break;
}
}
//variables
public $lista_anexo_regs = [];
public $todosErroresExcelImport = [];
public $yearDeclarado = 0;
public $userAnexo;
public $hojasAnexo;
public $idNumAuditoriaAnexo;
public $idCcpAnexo;
public $tipoVistaAnexo;
public $archivoExcelAnexo;
// Insertar contratos segn modo
public function modoAdd(Request $r, $modo, $modulo, $id)
{
set_time_limit(0);
$url = '';
$patternRFC = LU::get_regex(0, true);
switch ($modo) {
case 1:
set_time_limit(0);
$mensajeError = '';
$contieneArchivo = false;
try {
if ($r->has('archivo_excel')) {
$data = explode(',', $r->archivo_excel);
$b64Data = base64_decode($data[1]);
$contieneArchivo = true;
}
} catch (\Exception $ex) {
}
if ($contieneArchivo) {
$path = '/' . 'uploads/' . $r->year . '/' . 'basico/' . $modulo . '/';
$name = ($modulo == 'O' ? 'anexoObras_' : 'anexoAdq_') . $id . '-' . Auth::user()->id . '-' . date('Ymd_His') . '.xlsx';
$url = $path . $name;
$dirname = dirname(public_path() . $url);
if (!is_dir($dirname)) {
mkdir($dirname, 0755, true);
}
$file = fopen(public_path() . $url, 'wb');
fwrite($file, $b64Data);
fclose($file);
try {
$this->yearDeclarado = $r->year;
$this->idCcpAnexo = $r->ccp_id;
$this->userAnexo = Auth::user();
try {
$ExcelImport = $modulo == 'O' ? new AnexoObras($this->yearDeclarado, $this->userAnexo, $id, $modulo) : new AnexoAdq($this->yearDeclarado, $this->userAnexo, $id, $modulo);
Excel::import($ExcelImport, public_path($url));
} catch (\Throwable $e) {
$ExcelImport->todosErroresExcelImport['Hoja ' . $ExcelImport->hojaActualAnalizada . '. ']['No se pudo analizar, verifique la plantilla y que no haya frmulas que involucren diferentes hojas'] = [];
}
$this->lista_anexo_regs = $ExcelImport->lista_anexo_regs;
$this->todosErroresExcelImport = $ExcelImport->todosErroresExcelImport;
$hayProblemaEmail = false;
if (!sizeof($this->todosErroresExcelImport)) { //si no hay errores se guarda
$hayProblemaEmail = $this->guardarAdqObras($modulo, $id, $r->correo_contacto, $url);
}
if (!sizeof($this->todosErroresExcelImport)) {
$datos = [
'hayProblemaEmail' => $hayProblemaEmail,
];
}
} catch (\Exception $e) {
$error = $e->getMessage();
switch (true) {
case strpos($error, 'Your requested sheet name [') !== false:
$inicioNombre = substr($error, strpos($error, '[') + 1);
$finalNombre = strpos($inicioNombre, ']');
$nombreHoja = substr($inicioNombre, 0, $finalNombre);
$mensajeError = 'No se encontr la hoja "' . $nombreHoja . '", use la plantilla correcta';
break;
default:
$mensajeError = 'Error durante el anlisis del documento, comunquese con servicio tcnico';
break;
}
}
} else {
$mensajeError = 'No se encontr el archivo de Excel';
}
if ($mensajeError != '') {
$this->todosErroresExcelImport['No pudo analizarse. '][$mensajeError] = [];
}
if (sizeof($this->todosErroresExcelImport)) {
$datos = ['errores' => $this->todosErroresExcelImport];
if ($url != '') {
unlink(public_path() . $url);
}
}
return response()->json($datos);
//Codigo viejo:
$numContratos = 0;
DB::beginTransaction();
$this->guardado_correcto = true;
$this->modulo = $modulo;
$datos['modulo'] = $modulo;
$datos['id_ff'] = $id;
$clave_ff = DB::table('clave_ff')->where('id_ff', $id)->first()->clave_ff;
$this->c_ff = $clave_ff;
// $this->year = $r->year;
$this->yearDeclarado = $r->year;
$datos['id_usuario'] = Auth::user()->id;
$datos['correo_contacto'] = $r->correo_contacto;
$datos['created_at'] = date('Y-m-d H:i:s');
$query = DB::table('contratos_excel_files')->where('id_ff', $id);
if ($query->count() < 1) {
$id_cef = DB::table('contratos_excel_files')->insertGetId($datos);
} else if ($query->count() >= 1) {
$query_2 = $query->whereNull('url_archivo');
if ($query_2->count() < 1) {
$id_cef = DB::table('contratos_excel_files')->insertGetId($datos);
} else {
$id_cef = $query->whereNull('url_archivo')->first()->id;
}
}
$name = "";
$path = "";
if (Input::hasFile('archivo_excel')) {
$name = ($modulo == 'O' ? 'AnexoObrasPublicas_' : 'AnexoAdquisiciones_') . $clave_ff . '_' . $id_cef . '.' . Input::file('archivo_excel')->getClientOriginalExtension();
$path = '/' . 'uploads/' . $r->year . '/' . 'basico/' . $id . '/';
$datos['url_archivo'] = $path . $name;
$datos['updated_at'] = Carbon::now();
Input::file('archivo_excel')->move(public_path() . '/' . $path, $name);
$this->todosErroresExcelImport = [];
$this->mensajeException = '';
try {
$this->abrirExcelCorrecto = false;
$ExcelImport = new ExcelImport($this);
Excel::import($ExcelImport, public_path($path . $name));
$this->abrirExcelCorrecto = true;
// Data processing
$this->hojaActual = 0;
$this->contadorRegistro = 0;
//Validacin dinmica
$idFFClaveFF = 0;
$nombreFondoPrograma = "";
$yearCompare = 0;
$query = DB::table('clave_ff')->where('id_ff', $id);
if ($query->count() >= 1) {
$yearCompare = $query->first()->year;
$idDependenciaCompare = Auth::user()->id_dependencia;
$claveFFCompare = $clave_ff;
$query = DB::table('fondo_dependencia')->where([
'id_dependencia' => $idDependenciaCompare,
'year' => $yearCompare,
'clave_ff' => $claveFFCompare
]);
if ($query->count() >= 1) {
$idFondoDependenciaCompare = $query->first()->id;
$query = DB::table('clave_ff')->where(['id_fondo_dependencia' => $idFondoDependenciaCompare]);
if ($query->count() >= 1) {
$idFFClaveFF = $query->first()->id_ff;
}
}
}
$idFFClaveFF = $id; //asignacion manual de idff
if ($idFFClaveFF == 0) {
throw new Exception($this->mensajeException = LU::t_tr('D', 'fondo_programa', 's') . ', el ao y ' . LU::t_tr('d', 'dependencia', 's') . ' no coinciden, verifquelos.');
} else {
$query = DB::table('catalogo_claves_presupuestales')->where(['id' => $clave_ff]);
if ($query->count() >= 1) {
$nombreFondoPrograma = $query->first()->nombre_clave;
} else {
throw new Exception($this->mensajeException = LU::t_tr('D', 'fondo_programa', 's') . ' no se encontr, verifquelo.');
}
}
$arrayNumContratosAnexo0 = [];
$arrayNumContratosAnexo1 = [];
$arrayNumContratosAnexo2 = [];
$tituloCabeceraFondo = 'monto_pagado_con_' . strtolower(LU::limpiarSimplificarString($nombreFondoPrograma));
$modContratacion = "";
$this->soloMensajeException = false;
foreach ($this->lista_contratos_modo_basico as $i => $cmb) {
echo var_dump(" ");
$this->hojaActual = 0;
$this->contadorRegistro = $i;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($cmb as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$modContratacion = $cmb['modalidad_de_contratacion_por_contrato_o_por_administracion_directa'];
$this->validacionCamposModoAdd1($cmb, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($cmb, $modulo, $tituloCabeceraFondo, "");
}
//Objeto
$arr_row_cmb = [];
//Campos tabla
$arr_row_cmb['id_ff'] = $idFFClaveFF;
$arr_row_cmb['id_usuario'] = Auth::user()->id;
$arr_row_cmb['tipo_registro'] = 1;
$arr_row_cmb['modulo'] = $modulo;
//Campos tanto en obras como en adquisiciones
$arr_row_cmb['clave_ff'] = $clave_ff;
//RFC
if ($cmb['rfc'] == "N/A") { //valida si hay "N/A"
$arr_row_cmb['rfc'] = null;
} elseif (preg_match($patternRFC, $cmb['rfc'])) { //Validar RFC
$arr_row_cmb['rfc'] = $cmb['rfc'];
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $cmb['rfc'] . '" no es vlido, verifquelo.');
}
$arr_row_cmb['rfc'] = $cmb['rfc'] == "N/A" ? null : $cmb['rfc'];
$arr_row_cmb['nombre_d_r_social'] = $cmb['nombre_denominacion_yo_razon_social'] == "N/A" ? null : $cmb['nombre_denominacion_yo_razon_social'];
$arr_row_cmb['monto_contrato'] = $cmb['monto_del_contrato_civa_en_pesos'] == "N/A" ? null : $cmb['monto_del_contrato_civa_en_pesos'];
$arr_row_cmb['de_anticipo'] = $cmb['de_anticipo'] == "N/A" ? null : $cmb['de_anticipo'];
$arr_row_cmb['de_cumplimiento'] = $cmb['de_cumplimiento'] == "N/A" ? null : $cmb['de_cumplimiento'];
$arr_row_cmb['de_vicios_ocultos'] = $cmb['de_vicios_ocultos'] == "N/A" ? null : $cmb['de_vicios_ocultos'];
$arr_row_cmb['partidaClasificador'] = $cmb['partida_clasificador'] == "N/A" ? null : $cmb['partida_clasificador'];
//opcionesMontoPagado
$arr_row_cmb['montoPagadoConPart'] = $cmb[$tituloCabeceraFondo] == "N/A" ? null : $cmb[$tituloCabeceraFondo];
//opciones tipo de procedimiento
$arrayTiposProcedimientos = [
'lp' => 'lp',
'ir' => 'ir',
'ad' => 'ad',
];
$tipoDeProcedimiento = strtolower($cmb['tipo_de_procedimiento_lp_o_ir_o_ad']);
$puedeAsignarNoAplica = $modulo == 'O' && mb_strtoupper($modContratacion) == 'POR ADMINISTRACIN DIRECTA';
if ($puedeAsignarNoAplica) { //asignacin automtica de N/A en tipo de procedimiento
// if ($puedeAsignarNoAplica && $tipoDeProcedimiento == 'n/a') {//condicin antigua
$arr_row_cmb['tipo_procedimiento'] = null;
} elseif (!array_key_exists($tipoDeProcedimiento, $arrayTiposProcedimientos)) { //Verifica si no existe la clave en el array
//caso en que no se puede utilizar n/a ni ningun otra respuesta pues se debe ingresar el tipo de procedimiento
$mensaje = 'Verifique que el TIPO DE PROCEDIMIENTO sea: LP o IR o AD.';
// if ($puedeAsignarNoAplica) {
// $mensaje .= ' Es posible utilizar N/A';
// }
$this->exceptionModoAdd1($this->mensajeException = $mensaje);
} else { //Si encontr el valor en el array, por lo que asigna el valor
$arr_row_cmb['tipo_procedimiento'] = $arrayTiposProcedimientos[$tipoDeProcedimiento];
}
//Calcular nmero contrato
$numeroContrato = $modulo == 'O' ? $cmb['num_contrato_o_acuerdo_de_obra'] : $cmb['num_contrato'];
if ($numeroContrato == "N/A") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato no puede ser N/A. Use la nomenclatura SNCx (Sin nmero de contrato, donde x es un nmero) en los ' . LU::t_tr('v', 'anexo', 'p') . ' para asociar los datos.');
} else {
$arr_row_cmb['numero_contrato'] = strpos($numeroContrato, "SNC") === 0 ? libUtilities::consecutivos($arr_row_cmb['id_ff'], $yearCompare) : $numeroContrato;
}
if ($modulo == 'O') { //Campos en Obras
//opciones modalidad de contratacin
$arrayModalidadesContratacion = [
'POR CONTRATO' => 'Por contrato',
'POR ADMINISTRACIN DIRECTA' => 'Por administracin directa',
];
$modalidadDeContratacion = mb_strtoupper($cmb['modalidad_de_contratacion_por_contrato_o_por_administracion_directa']);
if (!array_key_exists($modalidadDeContratacion, $arrayModalidadesContratacion)) { //Verifica si no existe la clave en el array
$this->exceptionModoAdd1($this->mensajeException = 'Verifique que la MODALIDAD DE CONTRATACIN sea:
POR CONTRATO o POR ADMINISTRACIN DIRECTA');
} else { //Si encontr el valor en el array, por lo que asigna el valor
$arr_row_cmb['modalidad_contratacion'] = $arrayModalidadesContratacion[$modalidadDeContratacion];
}
$arr_row_cmb['nombre_proyecto'] = $cmb['objeto_del_contrato_o_nombre_del_proyecto'] == "N/A" ? null : $cmb['objeto_del_contrato_o_nombre_del_proyecto'];
$arr_row_cmb['periodo_ejecucion_inicio'] = $cmb['periodo_de_ejecucion_inicio_ddmmyyyy'] == "N/A" ? null : $cmb['periodo_de_ejecucion_inicio_ddmmyyyy'];
$arr_row_cmb['periodo_ejecucion_fin'] = $cmb['periodo_de_ejecucion_fin_ddmmyyyy'] == "N/A" ? null : $cmb['periodo_de_ejecucion_fin_ddmmyyyy'];
$arr_row_cmb['fecha_acta_finiquito'] = $cmb['fecha_de_acta_finiquito_ddmmyyyy'] == "N/A" ? null : $cmb['fecha_de_acta_finiquito_ddmmyyyy'];
} else { //Campos en Adquisiciones
$arr_row_cmb['objeto_contrato'] = $cmb['objeto_del_contrato'] == "N/A" ? null : $cmb['objeto_del_contrato'];
$arr_row_cmb['vigencia_contrato_inicio'] = $cmb['vigencia_del_contrato_inicio_ddmmyyyy'] == "N/A" ? null : $cmb['vigencia_del_contrato_inicio_ddmmyyyy'];
$arr_row_cmb['vigencia_contrato_fin'] = $cmb['vigencia_del_contrato_fin_ddmmyyyy'] == "N/A" ? null : $cmb['vigencia_del_contrato_fin_ddmmyyyy'];
$arr_row_cmb['tipo_entregable'] = $cmb['tipo_de_entregable_documento_que_acredite_la_entrega'] == "N/A" ? null : $cmb['tipo_de_entregable_documento_que_acredite_la_entrega'];
}
$id_cmb = 0;
try {
$id_cmb = DB::table('contratos_modo_basico')->insertGetId($arr_row_cmb);
$numContratos += 1;
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
array_push($arrayNumContratosAnexo0, $numeroContrato);
$array_rfc_sondeo = [];
$array_rfc_concursantes = [];
$this->hojaActual = 1;
foreach ($this->lista_rfc_empresas_sondeo_y_concursantes as $j => $resc) {
$this->contadorRegistro = $j;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($resc as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$this->validacionCamposModoAdd1($resc, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($resc, $modulo, $tituloCabeceraFondo, "");
}
$numContratoHoja = $modulo == 'O' ? $resc['num_contrato_o_acuerdo_de_obra'] : $resc['num_contrato'];
array_push($arrayNumContratosAnexo1, $numContratoHoja);
if ($numeroContrato == $numContratoHoja) {
//Para rfc_de_empresas_en_sondeo_de_mercado
//Objeto
$arr_row_res = [];
$arr_row_res['id_contrato'] = $id_cmb;
if ($resc['rfc_de_empresas_en_sondeo_de_mercado'] == "N/A") { //valida si hay "N/A"
//en este caso no se guarda pues el rfc no aplica
} elseif (preg_match($patternRFC, $resc['rfc_de_empresas_en_sondeo_de_mercado'])) { //Validar RFC
$arr_row_res['rfc'] = $resc['rfc_de_empresas_en_sondeo_de_mercado'];
$rfc_sondeo['srfcsondeo'] = $arr_row_res['rfc'];
array_push($array_rfc_sondeo, $rfc_sondeo);
try {
$id_res = DB::table('rfc_empresas_sondeo')->insertGetId($arr_row_res);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_en_sondeo_de_mercado'] . '" no es vlido, verifquelo.');
}
//Para rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir
//Objeto
$arr_row_rec = [];
$arr_row_rec['id_contrato'] = $id_cmb;
if ($resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'] == "N/A") { //valida si hay "N/A"
//en este caso no se guarda pues el rfc no aplica
} elseif (preg_match($patternRFC, $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'])) { //Validar RFC
$arr_row_rec['rfc'] = $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'];
$rfc_concursante['srfc'] = $arr_row_rec['rfc'];
array_push($array_rfc_concursantes, $rfc_concursante);
try {
$id_rec = DB::table('rfc_empresas_concursantes')->insertGetId($arr_row_rec);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} else { //RFC invlido
$this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'] . '" no es vlido, verifquelo.');
}
}
}
$json_res = sizeof($array_rfc_sondeo) == 0 ? null : json_encode($array_rfc_sondeo);
try {
$valorCorrecto = $json_res == '[]' ? null : $json_res;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['rfc_empresas_sondeo' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
$json_rec = sizeof($array_rfc_concursantes) == 0 ? null : json_encode($array_rfc_concursantes);
try {
$valorCorrecto = $json_rec == '[]' ? null : $json_rec;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['rfc_empresas_concursantes' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
$array_num_factura = [];
$array_polizas = [];
$this->hojaActual = 2;
foreach ($this->lista_num_factura as $l => $nf) {
$this->contadorRegistro = $l;
//Verificar si existen campos vacios
$todosCamposVacios = true;
$almenosUnVacio = false;
$saltar = true; //evita el primero, pues est vacia la cabecera
foreach ($nf as $c => $atributo) { //verificar vacios
if ($saltar) {
$saltar = false;
} else {
if ($atributo) {
$todosCamposVacios = false;
} else {
$almenosUnVacio = true;
}
}
}
if ($todosCamposVacios) { //saltar registros completamente vacios
continue;
}
//Validacion de campos
if ($modulo == 'O') {
$this->validacionCamposModoAdd1($nf, $modulo, $tituloCabeceraFondo, $modContratacion);
} else {
$this->validacionCamposModoAdd1($nf, $modulo, $tituloCabeceraFondo, "");
}
$numContratoHoja = $modulo == 'O' ? $nf['num_contrato_o_acuerdo_de_obra'] : $nf['num_contrato'];
array_push($arrayNumContratosAnexo2, $numContratoHoja);
if ($numeroContrato == $numContratoHoja) {
//Objeto poliza
$arr_row_p = [];
$arr_row_p['id_contrato'] = $id_cmb;
$arr_row_p['num_poliza'] = $nf['num_poliza'];
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $arr_row_p['id_contrato'], 'num_poliza' => $arr_row_p['num_poliza']])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
//Objeto factura
$arr_row_nf = [];
$arr_row_nf['id_contrato'] = $id_cmb;
$arr_row_nf['nFactura'] = $nf['num_factura_o_folio_fiscal'] == "N/A" ? null : $nf['num_factura_o_folio_fiscal'];
$arr_row_nf['nMonto'] = $nf['monto_factura_civa_en_pesos'] == "N/A" ? null : $nf['monto_factura_civa_en_pesos'];
$arr_row_nf['idPoliza'] = $idPoliza;
$num_factura_cmb['nFactura'] = '' . $arr_row_nf['nFactura'];
$num_factura_cmb['nMonto'] = '' . $arr_row_nf['nMonto'];
$num_factura_cmb['num_poliza'] = '' . $arr_row_p['num_poliza'];
array_push($array_num_factura, $num_factura_cmb);
try {
$id_nf = DB::table('num_factura')->insertGetId($arr_row_nf);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
}
}
$json_nf = sizeof($array_num_factura) == 0 ? null : json_encode($array_num_factura);
try {
$valorCorrecto = $json_nf == '[]' ? null : $json_nf;
DB::table('contratos_modo_basico')->where('id', $id_cmb)->update(['num_factura' => $valorCorrecto]);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
}
//validar si los contratos de las hojas anexas estan asociados
$this->soloMensajeException = true;
$arrayNumContratos0unicos = array_unique($arrayNumContratosAnexo0); //hoja0
$arrayNumContratos1unicos = array_unique($arrayNumContratosAnexo1); //hoja1
$arrayNumContratos2unicos = array_unique($arrayNumContratosAnexo2); //hoja2
/*Valida si existen datos asociados entre hojas de la 0 a la 1 y 2 mediante el nmero de contrato
foreach ($arrayNumContratos0unicos as $n => $numContrato) { //numContratos de hoja0 en hoja1 y en hoja2
if (!in_array($numContrato, $arrayNumContratos1unicos)) {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 1) no est asociado a la hoja 2, verifquelo.');
}
if (!in_array($numContrato, $arrayNumContratos2unicos)) {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 1) no est asociado a la hoja 3, verifquelo.');
}
}*/
foreach ($arrayNumContratos1unicos as $n => $numContrato) { //numContratos de hoja1 en hoja0
if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 2) no est asociado a la hoja 1, verifquelo.');
}
}
foreach ($arrayNumContratos2unicos as $n => $numContrato) { //numContratos de hoja2 en hoja0
if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") {
$this->exceptionModoAdd1($this->mensajeException = 'El nmero de contrato ' . $numContrato . ' (de la hoja 3) no est asociado a la hoja 1, verifquelo.');
}
}
$this->soloMensajeException = false;
try {
DB::table('contratos_excel_files')->where('id', $id_cef)->update($datos);
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage());
}
} catch (\Exception $e) {
$this->exceptionModoAdd1($e->getMessage(), true); //exception externo (tiene try-catch internos)
}
} else {
$this->guardado_correcto = false;
}
if ($numContratos == 0) {
$linkPlantillaCorrecta = '';
array_push($this->todosErroresExcelImport, "No se encontraron contratos en el archivo, revise si la plantilla es la correcta. " . $linkPlantillaCorrecta);
$this->guardado_correcto = false;
}
if ($this->guardado_correcto) {
DB::commit();
try {
Mail::send(new ME($id, date('Y-m-d H:i:s'), $modo, $numContratos, $modulo));
} catch (\Throwable $th) {
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['Se guardaron correctamente los contratos, pero el correo electrnico no pudo enviarse.'])->withInput();
}
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id);
} else {
DB::rollback();
try {
unlink($path . $name);
} catch (\Exception $e) {
}
$cantidadErrores = 0;
foreach ($this->todosErroresExcelImport as $key => $value) {
$cantidadErrores += 1;
if (strpos($value, "No se encontraron contratos en el archivo") !== false) {
if (count($this->todosErroresExcelImport) != 1) {
unset($this->todosErroresExcelImport[$key]);
}
}
}
// return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id . '/' . $this->year . '/tipoRegistro')
// ->withErrors([$this->todosErroresExcelImport]);
}
break;
case 2:
DB::beginTransaction();
try {
$datos = $r->except(['_token', 'none']);
$numContratos = sizeof($r->clave_ff);
$keys = array_keys($datos);
for ($i = 0; $i < count($datos[$keys[0]]); $i++) {
$arr_row = [];
$arr_row['created_at'] = date('Y-m-d H:i:s');
$arr_row['id_usuario'] = Auth::user()->id;
$arr_row['tipo_registro'] = 2;
$arr_row['modulo'] = $modulo;
if (!in_array('numero_contrato', $keys)) {
$year = Claves::where('id_ff', $id)->first()->year;
$arr_row['numero_contrato'] = libUtilities::consecutivos($id, $year);
}
$empr_conc = "[]";
$empr_sondeo = "[]";
$num_fac = "[]";
foreach ($keys as $k) {
$arr_row[$k] = $datos[$k][$i];
if ($k == 'numero_contrato')
if ($arr_row['numero_contrato'] == NULL || $arr_row['numero_contrato'] == '')
$arr_row['numero_contrato'] = libUtilities::consecutivos($id, Claves::where('id_ff', $id)->first()->year);
if ($k == 'rfc_empresas_concursantes' && $datos[$k][$i] != NULL)
$empr_conc = $datos[$k][$i];
if ($k == 'rfc_empresas_sondeo' && $datos[$k][$i] != NULL)
$empr_sondeo = $datos[$k][$i];
if ($k == 'num_factura' && $datos[$k][$i] != NULL)
$num_fac = $datos[$k][$i];
}
$contrato_id = DB::table('contratos_modo_basico')->insertGetId($arr_row);
foreach (json_decode($empr_conc) as $x)
DB::table('rfc_empresas_concursantes')->insert(['id_contrato' => $contrato_id, 'rfc' => $x->srfc]);
foreach (json_decode($empr_sondeo) as $y)
DB::table('rfc_empresas_sondeo')->insert(['id_contrato' => $contrato_id, 'rfc' => $y->srfcsondeo]);
foreach (json_decode($num_fac) as $z) {
$arr_row_p = [];
$arr_row_p['id_contrato'] = $contrato_id;
$arr_row_p['num_poliza'] = $z->num_poliza;
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $contrato_id, 'num_poliza' => $z->num_poliza])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
DB::table('num_factura')->insert(['id_contrato' => $contrato_id, 'nFactura' => $z->nFactura, 'nMonto' => $z->nMonto, 'idPoliza' => $idPoliza]);
}
}
DB::commit();
try {
Mail::send(new ME($id, date('Y-m-d H:i:s'), $modo, $numContratos, $modulo));
} catch (\Throwable $th) {
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['Se guard correctamente, pero el correo electrnico no pudo enviarse.'])->withInput();
}
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
if (strpos($error, "Duplicate entry ") !== false && strpos($error, " for key 'numero_contrato'") !== false) { //Num. contrato duplicado
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $id)->withErrors(['El nmero de contrato est duplicado.'])->withInput();
}
}
break;
}
}
public function guardarAdqObras($modulo, $id_ff, $correo_contacto, $url_archivo)
{
$mensajeError = '';
$hayProblemaEmail = false;
DB::Begintransaction();
try {
foreach ($this->lista_anexo_regs[1] as $kreg => $reg) {
$arrayc_s = [];
$arrayc_ec = [];
$arrayHoja3 = [];
$obj = new cmb();
foreach ($reg as $kattr => $attr) {
switch ($kattr) { //['regsH2', 'regsH3'] son registros de hojas asociadas
case 'regsH2': //regs de la hoja 2
if (array_key_exists("rfc_empresas_sondeo", $attr)) {
$aRFC = [];
foreach ($attr['rfc_empresas_sondeo'] as $res => $celdasrfc) {
$vRfc = $celdasrfc[0]; // para acceder al unico array de valores del RFC
$aRFC[] = ['srfcsondeo' => $res];
$arrayc_s[] = new RES(['rfc' => $res, 'empresa' => $vRfc['nombre']]);
}
$obj['rfc_empresas_sondeo'] = json_encode($aRFC);
}
if (array_key_exists("rfc_empresas_concursantes", $attr)) {
$aRFC = [];
foreach ($attr['rfc_empresas_concursantes'] as $rec => $celdasrfc) {
$vRfc = $celdasrfc[0]; // para acceder al unico array de valores del RFC
$aRFC[] = ['srfc' => $rec];
$arrayc_ec[] = new REC(['rfc' => $rec, 'empresa' => $vRfc['nombre']]);
}
$obj['rfc_empresas_concursantes'] = json_encode($aRFC);
}
break;
case 'regsH3': // regs de la hoja 3
$aFacturas = [];
foreach ($attr as $krh3 => $rh3) { //registro de la hoja 3
$oFactura = [];
$oFactura['nFactura'] = $rh3['nFactura'];
$oFactura['nMonto'] = $rh3['nMonto'];
if (array_key_exists("num_poliza", $rh3)) {
$oFactura['num_poliza'] = $rh3['num_poliza'];
}
$aFacturas[] = $oFactura;
$arrayHoja3[] = $oFactura;
}
$obj['num_factura'] = json_encode($aFacturas);
break;
default: //regs de la hoja 1
$obj[$kattr] = $attr;
break;
}
} //posteriormente attrs extras de la tabla bd
$obj['id_ff'] = $id_ff;
$obj['id_usuario'] = Auth::user()->id;
$obj['clave_ff'] = $this->idCcpAnexo;
$obj['tipo_registro'] = 1;
$obj['modulo'] = $modulo;
$obj['status'] = 1;
$obj->save();
if (sizeof($arrayc_s)) {
$obj->c_s()->saveMany($arrayc_s);
}
if (sizeof($arrayc_ec)) {
$obj->c_ec()->saveMany($arrayc_ec);
}
foreach ($arrayHoja3 as $krh3 => $rh3) { //registro hoja 3
if (array_key_exists('num_poliza', $rh3)) {
$oPoliza = new P(['num_poliza' => $rh3['num_poliza']]);
$obj->c_polizas()->save($oPoliza);
$oNumFactura = new NF(['nFactura' => $rh3['nFactura'], 'nMonto' => $rh3['nMonto'], 'idPoliza' => $oPoliza['id']]);
} else {
$oNumFactura = new NF(['nFactura' => $rh3['nFactura'], 'nMonto' => $rh3['nMonto']]);
}
$obj->c_nf()->save($oNumFactura);
}
}
DB::table('contratos_excel_files')->insert([
'modulo' => $modulo,
'url_archivo' => $url_archivo,
'hash_archivo' => hash_file('sha256', public_path() . $url_archivo),
'correo_contacto' => $correo_contacto,
'id_ff' => $id_ff,
'id_usuario' => Auth::user()->id,
]);
Claves::where('id_ff', $id_ff)->update([($modulo == 'O' ? 'estatus_anexo_obras' : 'estatus_anexo_adq') => 1]);
//try {
// Mail::send(new ME($id_ff, date('Y-m-d H:i:s'), 1, sizeof($this->lista_anexo_regs[1]), $modulo));
//} catch (\Throwable $th) {
// $hayProblemaEmail = true;
//}
$hayProblemaEmail = false;
} catch (\Exception $e) {
$mensajeError = 'No se pudo guardar ' . LU::t_tr('d', 'anexo', 's') . ', contacte con soporte tcnico' . $e->getMessage();
}
if ($mensajeError != '') { //caso con errores
DB::rollback();
$this->todosErroresExcelImport['Analizado. '][$mensajeError] = [];
} else { //caso correcto
DB::commit();
}
return $hayProblemaEmail;
}
// Actualizar contratos
public function modoUpdate(Request $r, $modo, $modulo, $id)
{
$editar = $r->editar;
$data = $r->except(['_token', '_method', 'editar', 'none']);
$data['modulo'] = $modulo;
$data['tipo_registro'] = $modo;
$data['id_usuario'] = Auth::user()->id;
$clave = DB::table('contratos_modo_basico')->where('id', $id)->first()->id_ff;
$update = DB::table('contratos_modo_basico')->where('id', $id)->update($data);
// Limpieza de tablas de relacin
DB::table('num_factura')->where('id_contrato', $id)->delete();
DB::table('polizas')->where('id_contrato', $id)->delete();
DB::table('rfc_empresas_concursantes')->where('id_contrato', $id)->delete();
DB::table('rfc_empresas_sondeo')->where('id_contrato', $id)->delete();
// Creacin de nuevos registros en tablas de relacin
if ($r->rfc_empresas_concursantes != '')
foreach (json_decode($r->rfc_empresas_concursantes) as $x)
DB::table('rfc_empresas_concursantes')->insert(['id_contrato' => $id, 'rfc' => $x->srfc]);
if ($r->rfc_empresas_sondeo != '')
foreach (json_decode($r->rfc_empresas_sondeo) as $y)
DB::table('rfc_empresas_sondeo')->insert(['id_contrato' => $id, 'rfc' => $y->srfcsondeo]);
if ($r->num_factura != '')
foreach (json_decode($r->num_factura) as $z) {
$arr_row_p = [];
$arr_row_p['id_contrato'] = $id;
$arr_row_p['num_poliza'] = $z->num_poliza;
$idPoliza = 0;
$poliza = DB::table('polizas')->where(['id_contrato' => $id, 'num_poliza' => $z->num_poliza])->get();
$idPoliza = (count($poliza) > 0 ? $poliza[0]->id : DB::table('polizas')->insertGetId($arr_row_p));
DB::table('num_factura')->insert(['id_contrato' => $id, 'nFactura' => $z->nFactura, 'nMonto' => $z->nMonto, 'idPoliza' => $idPoliza]);
}
if ($update) {
if ($editar == 'si')
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $clave);
else
return response()->json('OK', 200);
} else {
if ($editar == 'si')
return \Redirect::to('/layouts/contratos/' . $modulo . '/' . $clave);
else
return response()->json('NO', 200);
}
}
// Eliminar contratos
public function modoDelete(Request $r, $modo, $modulo, $id)
{
$delete = DB::table('contratos_modo_basico')->where('id', $id)->delete();
DB::table('num_factura')->where('id_contrato', '$id')->delete();
DB::table('rfc_empresas_concursantes')->where('id_contrato', '$id')->delete();
DB::table('rfc_empresas_sondeo')->where('id_contrato', '$id')->delete();
if ($delete) {
return response()->json('OK', 200);
} else {
return response()->json('NO', 200);
}
}
/******************************************************/
/* DESCARGA DE PLANTILLAS PARA LAYOUTS */
/******************************************************/
public function downloadTemplate(Request $r, $modulo)
{
$ruta = '';
$nombre = '';
switch ($modulo) {
case 'A':
$ruta = '/templates/template_adquisiciones.xlsx';
$nombre = 'plantilla_adquisiciones.xlsx';
break;
case 'O':
$ruta = '/templates/template_obras.xlsx';
$nombre = 'plantilla_obras.xlsx';
break;
}
return Storage::disk('downloads')->download($ruta, $nombre);
}
public function saveTesofe(Request $r)
{
$row = Claves::where('id_ff', $r->id)->first();
$row->reintegro_tesofe = $r->tesofe;
DB::beginTransaction();
try {
$row->save();
DB::commit();
return response()->json('OK', 200);
} catch (\Exception $e) {
DB::rollback();
$error = $e->getMessage();
return response()->json('NO', 200);
}
}
// Eliminar clave FF - fondo
public function eliminarFondo(Request $r, $idClaveFF)
{
$data = [];
$mensajeDeErrorGlobal = '';
$claveFF = Claves::find($idClaveFF);
if ($claveFF == null) {
$mensajeDeErrorGlobal = 'No se puede eliminar ' . LU::t_tr('d', 'fondo', 's') . ', ya que no existe en el sistema.';
} else {
$estatusExistentes = '';
DB::beginTransaction();
try {
//paraEstatusAnexos
$archivoEstatus = $claveFF->estatus_archivo;
$estatusAnexoAdq = $claveFF->estatus_anexo_adq;
$estatusAnexoObras = $claveFF->estatus_anexo_obras;
$estatusAnexoEgresos = $claveFF->estatus_anexo_egresos;
$estatusAnexoNomina = $claveFF->estatus_anexo_nomina;
$estatusAnexoC4K = $claveFF->estatus_anexo_c4k;
//paraEstatusAnexos
if (!in_array($archivoEstatus, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' GD (Gastos Diversos) es: ' . $this->estatusAnexoArchivo($archivoEstatus) . "\n";
}
if (!in_array($estatusAnexoAdq, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Adquisiciones es: ' . $this->estatusAnexoArchivo($estatusAnexoAdq) . "\n";
}
if (!in_array($estatusAnexoObras, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Obras Pblicas es: ' . $this->estatusAnexoArchivo($estatusAnexoObras) . "\n";
}
if (!in_array($estatusAnexoEgresos, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Egresos es: ' . $this->estatusAnexoArchivo($estatusAnexoEgresos) . "\n";
}
if (!in_array($estatusAnexoNomina, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Nmina es: ' . $this->estatusAnexoArchivo($estatusAnexoNomina) . "\n";
}
if (!in_array($estatusAnexoC4K, [0, 5])) {
$estatusExistentes .= '-El estatus de ' . LU::t_tr('d', 'anexo', 's') . ' Cap. 4000 es: ' . $this->estatusAnexoArchivo($estatusAnexoC4K) . "\n";
}
if ($estatusExistentes == '') {
try {
$claveFF->delete();
if (isset($r->id_fondo_dependencia)) {
$fondoDependencia = FD::find($r->id_fondo_dependencia);
try {
$fondoDependencia->delete();
} catch (\Throwable $th) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . '. Contacte a soporte tcnico.';
}
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio tcnico.' . $e->getMessage();
}
} else {
$mensajeDeErrorGlobal = "Solo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " si sus " . LU::t_tr('v', 'anexo', 'p') . " se encuentran en estatus 'Sin cargar' o 'No aplica'.\n\nNo se puede eliminar " . LU::t_tr('d', 'fondo', 's') . " debido a que: \n" . $estatusExistentes;
}
} catch (\Exception $e) {
$mensajeDeErrorGlobal = 'Ocurri un error al intentar eliminar ' . LU::t_tr('d', 'fondo', 's') . ' solicitado. Contacte a servicio tcnico' . $e->getMessage();
}
}
if ($mensajeDeErrorGlobal != '') {
DB::rollback();
} else {
DB::commit();
}
$data['errores'] = $mensajeDeErrorGlobal;
return $data;
}
//ejecutores
public function estatusAnexoArchivo($estatus, $tipoUsuario = 4) //tipo de usuario que solicita, por ejemplo el 4 (por defecto) es ejecutor, el 8 y 9 son de finanzas
{
$estatusReal = '';
switch ($estatus) {
case 0:
$estatusReal = 'An sin cargar';
break;
case 1:
$estatusReal = 'Cargado sin enviar';
break;
case 2:
$estatusReal = 'Enviado ' . LU::t_tr('a_d', 'enlace', 's');
break;
case 3:
$estatusReal = 'Enviado a ' . LU::t_tr('d', 'asf', 's');
break;
case 4:
switch ($tipoUsuario) {
case 4:
$estatusReal = 'Regresado al ' . LU::t_tr('v', 'ejecutor', 's');
break;
case 8:
case 9:
$estatusReal = 'Regresado a finanzas';
break;
default:
alertaErrorIndefinido(); //para el desarrollo
break;
}
break;
case 5:
$estatusReal = 'No aplica';
break;
default:
$estatusReal = '';
break;
}
return $estatusReal;
}
public function getAlertas(Request $request)
{
$fechaActual = carbon::now()->startOfDay();
$query = DB::table('catalogo_numeros_auditoria as cna')
->join('estados as e', 'e.id', '=', 'cna.id_estado')
->join('municipios as m', 'm.id', '=', 'cna.id_municipio')
->select(
'cna.numeroAuditoria',
'cna.year',
'cna.fecha_cierre',
'e.estado',
'm.municipio',
'm.id as id_municipio'
)->orderBy('cna.fecha_cierre', 'asc');
switch ($request->type) {
case 1: //main tiene todas las alertas
case 11:
//sin lmites
$query = $query->get();
break;
case 4: //ejecutor
case 8: //finanzas estatal
case 9: //finanzas municipal
case 10: // enlace AE
// lmite el rea ejecutora
$query = $query->where('cna.id_estado', Auth::user()->u_d->id_estado)
->where('cna.id_municipio', Auth::user()->u_d->id_municipio)
->get();
break;
case 3: //enlace estatal ,
case 7: //enlace miunicipal
// lmite su propio estado y municipio
$query = $query->where('cna.id_estado', Auth::user()->id_estado)
->where('cna.id_municipio', Auth::user()->id_municipio)
->get();
break;
case 5: // auditor
case 6: //Auditor financiero
//lmite son los numeros de auditoria asociados al usuario
$query = $query->join('num_auditorias_de_usuario as nau', 'nau.id_num_auditoria', '=', 'cna.id')
->where('nau.id_usuario', Auth::user()->id)->get();
break;
default:
paraProgramacionPreventiva(); //para el desarrollo
break;
}
$alerts['active'] = $query->where('fecha_cierre', '>=', $fechaActual);
$alerts['noDate'] = $query->where('fecha_cierre', null);
$alerts['close'] = $query->where('fecha_cierre', '<', $fechaActual);
return response()->json($alerts);
}
}
Function Calls
None |
Stats
MD5 | 58c8af5896cb1f97fbd43165dfc792d8 |
Eval Count | 0 |
Decode Time | 454 ms |