/* Decoded by unphp.net */ 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 autorización para entrar a esta sección.']); } $editar = false; //editar el contenido y enviar a revisión $enviarRevisionAuditores = false; //Envia la revisión 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 revisión', '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, comuníquese con soporte técnico. ' . $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, comuníquese con soporte técnico. " . $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. Comuníquese con soporte técnico. ' . $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, comuníquese con soporte técnico. " . $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()->Antigüedad); $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 técnico.' . $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 técnico.' . $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 revisión, contacte con servicio técnico.' . $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 técnico.' . $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 técnico.' . $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 técnico.' . $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, comuníquese con soporte técnico. ' . $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 año 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 técnico.' . $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 año ' . $r->year . '. Puede verlo en el menú "' . LU::t_pr('m_captura_anexos') . '" - "' . LU::t_tr('v', 'adquisiciones_obras', 'P') . '" y seleccione un "Año 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 combinación 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 combinación 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 técnico.'; } } 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 técnico.'; } } catch (\Exception $e) { $mensajeDeErrorGlobal = 'Ocurrió un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio técnico.' . $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 técnico.' . $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 revisión', '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 EDICIÓN 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 información 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 */ /*******************************************************/ // SELECCIÓN DE MÓDULO 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); } // SELECCIÓN DEL TIPO DE REGISTRO DEL CONTRATO: Básico (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 CONTRATACIÓN (POR CONTRATO o POR ADMINISTRACIÓN 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, DENOMINACIÓN Y/O RAZÓN SOCIAL' => 'nombre_denominacion_yo_razon_social', 'NÚM. CONTRATO O ACUERDO DE OBRA' => 'num_contrato_o_acuerdo_de_obra', 'NÚM. CONTRATO' => 'num_contrato', 'NÚM. FACTURA O FOLIO FISCAL' => 'num_factura_o_folio_fiscal', 'NÚM. PÓLIZA' => '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 EJECUCIÓN FIN (dd/mm/yyyy)' => 'periodo_de_ejecucion_fin_ddmmyyyy', 'PERIODO DE EJECUCIÓN 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 número asociado al capítulo 2000, 3000 ó 5000.'; break; case 9: //partidas clasificadorias para obras 6k's, ej: 6057 $condicion = 'debe ser un número asociado al capítulo 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 año $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 fórmulas, 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 ADMINISTRACIÓN 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 según 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 inválido 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 automáticas al intentar guardar $error = $mensajeDeLaExcepcion; if (strpos($error, "Duplicate entry ") !== false && strpos($error, " for key 'contratos_unicos'") !== false) { //Num. contrato duplicado $this->mensajeException = 'El número 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 módulo correcto y que no haya sido alterada (nombres ni ubicación 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 inválida $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 inválido, debe ser alfanumérico. Ingrese uno por campo.' => 'rfc', 'El nombre, denominación y/o razon social es inválido, debe ser texto.' => 'nombre_d_r_social', 'La modalidad de contratación es inválida, debe ser alfanumérica.' => 'modalidad_contratacion', 'El tipo de procedimiento es inválido, debe ser alfanumérico.' => 'tipo_procedimiento', 'El RFC de empresas en sondeo de mercado son inválidos, deben ser alfanuméricos.' => 'rfc_empresas_sondeo', 'El RFC de empresas concursantes son inválidos, deben ser alfanuméricos.' => 'rfc_empresas_concursantes', 'El número de contrato es inválido, debe ser alfanumérico.' => 'numero_contrato', 'El nombre del proyecto es inválido, debe ser alfanumérico.' => 'nombre_proyecto', 'El periodo de ejecucion inicio es inválido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_inicio', 'El periodo de ejecucion fin es inválido, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'periodo_ejecucion_fin', 'El objeto del contrato es inválido, debe ser alfanumérico.' => 'objeto_contrato', 'La vigencia del contrato inicio es inválida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_inicio', 'La vigencia del contrato fin es inválida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'vigencia_contrato_fin', 'El monto del contrato es inválido, debe ser en pesos (número).' => 'monto_contrato', 'El número de fianza de anticipo es inválido, puede ser alfanumérico.' => 'de_anticipo', 'El número de fianza de cumplimiento es inválido, puede ser alfanumérico.' => 'de_cumplimiento', 'El número de fianza de vicios ocultos es inválido, puede ser alfanumérico.' => 'de_vicios_ocultos', 'El tipo de entregable es inválido, debe ser alfanumérico.' => 'tipo_entregable', 'La fecha del acta de finiquito es inválida, debe ser una fecha "dd/mm/yyyy" (sin comillas).' => 'fecha_acta_finiquito', 'El monto pagado con ' . LU::t_tr('i', 'fondo_programa', 's') . ' es inválido, debe ser en pesos (número).' => 'montoPagadoConPart', // 'La partida clasificador es inválida, verifíquela.' => 'partidaClasificador', //para no duplicar mensaje se omite 'El núm. factura es inválido, debe ser alfanumérico.' => 'num_factura', 'El núm. póliza es inválido, debe ser alfanumérico.' => 'num_poliza', 'El núm. factura es inválido, debe ser alfanumérico.' => 'nFactura', 'El monto es inválido, debe ser en pesos (número).' => '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 = 'Ubicación error. ' . $error; } } if ($exceptionExterno) { $this->mensajeException .= " Después de corregirlo inténtelo 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 válido, verifíquelo') === 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 autorización para entrar a esta sección.']); } } 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'] = 'Licitación pública'; break; case 'ir': $listaRegs['tipo_procedimiento'] = 'Invitación restringida'; break; case 'ad': $listaRegs['tipo_procedimiento'] = 'Adjudicación 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); } // Selección 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 según 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 fórmulas 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 análisis del documento, comuníquese con servicio técnico'; 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; //Validación dinámica $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 año y ' . LU::t_tr('d', 'dependencia', 's') . ' no coinciden, verifíquelos.'); } 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ó, verifíquelo.'); } } $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 inválido $this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $cmb['rfc'] . '" no es válido, verifíquelo.'); } $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 ADMINISTRACIÓN DIRECTA'; if ($puedeAsignarNoAplica) { //asignación automática de N/A en tipo de procedimiento // if ($puedeAsignarNoAplica && $tipoDeProcedimiento == 'n/a') {//condición 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 número contrato $numeroContrato = $modulo == 'O' ? $cmb['num_contrato_o_acuerdo_de_obra'] : $cmb['num_contrato']; if ($numeroContrato == "N/A") { $this->exceptionModoAdd1($this->mensajeException = 'El número de contrato no puede ser N/A. Use la nomenclatura SNCx (Sin número de contrato, donde x es un número) 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 contratación $arrayModalidadesContratacion = [ 'POR CONTRATO' => 'Por contrato', 'POR ADMINISTRACIÓN DIRECTA' => 'Por administración 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 CONTRATACIÓN sea: POR CONTRATO o POR ADMINISTRACIÓN 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 inválido $this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_en_sondeo_de_mercado'] . '" no es válido, verifíquelo.'); } //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 inválido $this->exceptionModoAdd1($this->mensajeException = 'El RFC "' . $resc['rfc_de_empresas_concursantes_en_caso_de_ser_lp_o_ir'] . '" no es válido, verifíquelo.'); } } } $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 número 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 número de contrato ' . $numContrato . ' (de la hoja 1) no está asociado a la hoja 2, verifíquelo.'); } if (!in_array($numContrato, $arrayNumContratos2unicos)) { $this->exceptionModoAdd1($this->mensajeException = 'El número de contrato ' . $numContrato . ' (de la hoja 1) no está asociado a la hoja 3, verifíquelo.'); } }*/ foreach ($arrayNumContratos1unicos as $n => $numContrato) { //numContratos de hoja1 en hoja0 if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") { $this->exceptionModoAdd1($this->mensajeException = 'El número de contrato ' . $numContrato . ' (de la hoja 2) no está asociado a la hoja 1, verifíquelo.'); } } foreach ($arrayNumContratos2unicos as $n => $numContrato) { //numContratos de hoja2 en hoja0 if (!in_array($numContrato, $arrayNumContratos0unicos) && $numContrato != "") { $this->exceptionModoAdd1($this->mensajeException = 'El número de contrato ' . $numContrato . ' (de la hoja 3) no está asociado a la hoja 1, verifíquelo.'); } } $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 electrónico 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 electrónico 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 número 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 técnico' . $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 relación 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(); // Creación de nuevos registros en tablas de relación 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 Públicas 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') . ' Nómina 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 técnico.'; } } } catch (\Exception $e) { $mensajeDeErrorGlobal = 'Ocurrió un error al intentar eliminar' . LU::t_tr('d', 'fondo', 's') . 'Contacte a servicio técnico.' . $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 técnico' . $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 = 'Aún 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 límites $query = $query->get(); break; case 4: //ejecutor case 8: //finanzas estatal case 9: //finanzas municipal case 10: // enlace AE // límite 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 // límite 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 //límite 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); } } ?>