Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- include("conexion.php");
- $objCon = new Conexion();
- $id_reporte = 1; //lo pongo asi para probar
- $tipo_actividad2 = 2; //lo pongo asi para probar
- require __DIR__ . "/vendor/autoload.php";
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\IOFactory;
- use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
- //consultando los detalles del reporte a descargar segun el ID que se obtuvo por POST
- $sqlDetalleReporte = "SELECT I.doc_identidad AS 'DOCUMENTO_IDENTIDAD',
- I.ape_nombres AS 'APELLIDOS_NOMBRES_PACIENTE',
- I.fecha_ingreso AS 'FECHA_INGRESO',
- I.fecha_nacimiento AS 'FECHA_NACIMIENTO',
- I.discapacidad AS 'DISCAPACIDAD',
- DET.planificacion_intervencion AS 'PLANIFICACION_INTERVENCION',
- DET.tipo_intervencion AS 'TIPO_INTERVENCION',
- GRUP.nombre_grupo_especifico AS 'GRUPO_ESPECIFICO',
- DET.otros_relevantes AS 'OTROS_RELEVANTES',
- REG.nombre_regimen AS 'REGIMEN',
- ETP.nombre_etapa AS 'ETAPA',
- I.pab_celda_etapa AS 'PABELLON',
- DESCRIP.nombre_descripciones AS 'DESCRIPCION',
- DET.dia_actividades AS 'DIA',
- SES.nombre_sesiones AS 'SESIONES_NAME',
- CONCAT(U.ape_paterno,' ',U.ape_materno,' ',U.nombres) AS 'DATOS_PROFESIONAL',
- DET.observaciones AS 'OBSERVACIONES',
- DET.cambio_PTIP_PTIS 'PTI_P_PTI_S'
- FROM reportes_mensuales REP
- INNER JOIN detalle_reporte_mensual DET ON REP.id_reporte_mensual=DET.id_reporte_mensual
- INNER JOIN grupo_especifico GRUP ON DET.id_grupo_especifico=GRUP.id_grupo_especifico
- INNER JOIN pacientes I ON DET.id_paciente=I.id_paciente
- INNER JOIN usuarios U ON REP.id_usuario=U.id_usuario
- INNER JOIN regimen REG ON DET.id_regimen=REG.id_regimen
- INNER JOIN etapa ETP ON DET.id_etapa=ETP.id_etapa
- INNER JOIN descripciones DESCRIP ON DET.id_descripciones=DESCRIP.id_descripciones
- INNER JOIN sessiones SES ON DET.id_sesiones=SES.id_sesiones
- WHERE REP.id_reporte_mensual=:id_reporte";
- $rsDetalleReporte = $objCon->getConexion()->prepare($sqlDetalleReporte);
- $rsDetalleReporte->bindParam(':id_reporte', $id_reporte, PDO::PARAM_INT);
- $contador=1; // pongo 1 porque el formato comienza en la linea 2
- if ($rsDetalleReporte->execute()) {
- $rutaArchivo = "reportes/FORMATO_SOCIAL.xlsx";
- $inputFileType = IOFactory::identify($rutaArchivo);
- $reader = IOFactory::createReader($inputFileType);
- $spreadsheet = $reader->load($rutaArchivo);
- $spreadsheet->setActiveSheetIndex(0);
- $sheet = $spreadsheet->getActiveSheet();
- while ($filaDetalleReporte = $rsDetalleReporte->fetch(PDO::FETCH_OBJ)) {
- $contador++;
- $rutaReporte = "./reportes/Reporte_mensual_social.xlsx";
- if (file_exists($rutaReporte)) {
- //abriendo el archivo para leerlo
- $inputFileType2 = IOFactory::identify($rutaReporte, [IOFactory::READER_XLSX]);
- $reader2 = IOFactory::createReader($inputFileType2);
- $spreadsheet2 = $reader2->load($rutaReporte);
- $spreadsheet2->setActiveSheetIndex(0);
- $sheet = $spreadsheet2->getActiveSheet();
- //vamos ha hallar el valor Buscado con una consulta SQL de todos los registros repetidos en ese reprote.
- $SqlPacientesRepetidos = "SELECT I.doc_identidad AS 'DOCUMENTO_IDENTIDAD',
- I.ape_nombres AS 'APELLIDOS_NOMBRES_PACIENTE',
- I.fecha_ingreso AS 'FECHA_INGRESO',
- I.fecha_nacimiento AS 'FECHA_NACIMIENTO',
- I.discapacidad AS 'vulnerabilidad_especifica',
- DET.planificacion_intervencion AS 'PLANIFICACION_INTERVENCION',
- DET.tipo_intervencion AS 'TIPO_INTERVENCION',
- GRUP.nombre_grupo_especifico AS 'GRUPO_ESPECIFICO',
- DET.otros_relevantes AS 'OTROS_RELEVANTES',
- REG.nombre_regimen AS 'REGIMEN',
- ETP.nombre_etapa AS 'ETAPA',
- I.pab_celda_etapa AS 'PABELLON',
- DESCRIP.nombre_descripciones AS 'DESCRIPCION',
- DET.dia_actividades AS 'DIA',
- SES.nombre_sesiones AS 'SESIONES_NAME',
- CONCAT(U.ape_paterno,' ',U.ape_materno,' ',U.nombres) AS 'DATOS_PROFESIONAL',
- DET.observaciones AS 'OBSERVACIONES',
- DET.cambio_PTIP_PTIS 'PTI_P_PTI_S'
- FROM reportes_mensuales REP
- INNER JOIN detalle_reporte_mensual DET ON REP.id_reporte_mensual=DET.id_reporte_mensual
- INNER JOIN grupo_especifico GRUP ON DET.id_grupo_especifico=GRUP.id_grupo_especifico
- INNER JOIN pacientes I ON DET.id_paciente=I.id_paciente
- INNER JOIN usuarios U ON REP.id_usuario=U.id_usuario
- INNER JOIN regimen REG ON DET.id_regimen=REG.id_regimen
- INNER JOIN etapa ETP ON DET.id_etapa=ETP.id_etapa
- INNER JOIN descripciones DESCRIP ON DET.id_descripciones=DESCRIP.id_descripciones
- INNER JOIN sessiones SES ON DET.id_sesiones=SES.id_sesiones
- WHERE REP.id_reporte_mensual=:id_reporte AND DET.id_paciente IN (SELECT id_paciente FROM detalle_reporte_mensual GROUP BY id_paciente HAVING count(id_paciente)>1) AND SES.nombre_sesiones!='NULL' ORDER BY `DIA` DESC LIMIT 1;";
- $rsPacientesRepetidos = $objCon->getConexion()->prepare($SqlPacientesRepetidos);
- $rsPacientesRepetidos->bindParam(':id_reporte', $id_reporte, PDO::PARAM_INT);
- if ($rsPacientesRepetidos->execute()) {
- while ($filaPacientesRepetidos = $rsPacientesRepetidos->fetch(PDO::FETCH_OBJ)) {
- if($filaPacientesRepetidos->documento_identidad==$filaDetalleReporte->documento_identidad){
- $valorBuscado = $filaPacientesRepetidos->documento_identidad;
- // Rango de columnas dependiendo del tipo de actividad
- $rangoColumnas = ($tipo_actividad2 == 1) ? ['Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD']: ['AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN'];
- // Recorre las filas buscando el DOCUMENTO_IDENTIDAD
- foreach ($sheet->getRowIterator() as $fila) {
- $cellIterator = $fila->getCellIterator();
- $cellIterator->setIterateOnlyExistingCells(false);
- foreach ($cellIterator as $cell) {
- if ($cell->getValue() == $valorBuscado) {
- echo "<script>alert('valor Buscado: $valorBuscado == valor de Celda: ".$cell->getValue()."');</script>";
- $filaActual = $cell->getRow();
- $insertado = false;
- // Busca la primera celda vacía en el rango especificado
- foreach ($rangoColumnas as $columna) {
- if ($sheet->getCell($columna . $filaActual)->getValue() === null) {
- if ($tipo_actividad2 == 1) {
- // Para tipo_actividad = 1 (Individual)
- $sheet->setCellValue($columna . $filaActual, $filaDetalleReporte->descripcion); // Descripción en columna actual
- $siguienteColumna = Coordinate::stringFromColumnIndex(Coordinate::columnIndexFromString($columna) + 1);
- $sheet->setCellValue($siguienteColumna . $filaActual, $filaDetalleReporte->dia); // Día en siguiente columna
- } else {
- // Para tipo_actividad = 2 (Grupal)
- echo "<script>alert('Nombre Sesion: $filaDetalleReporte->sesiones_name DIA:$filaDetalleReporte->dia ');</script>";
- $sheet->setCellValue($columna . $filaActual, $filaDetalleReporte->sesiones_name); // Sesión en columna actual
- $siguienteColumna = Coordinate::stringFromColumnIndex(Coordinate::columnIndexFromString($columna) + 1);
- $sheet->setCellValue($siguienteColumna . $filaActual, $filaDetalleReporte->dia); // Día en siguiente columna
- }
- $insertado = true;
- break; // Salir del bucle al insertar
- }
- }
- if ($insertado) goto salir_for;//break 2; // Salir de ambos bucles al insertar
- }
- }
- }
- }
- }
- }
- //recorrio todas las filas, pero no encontró registros iguales en excel con Mysql,
- //entonces debe registrar el nuevo registro. porque si NO e sigual entonces es un nuevo registro.
- //llenando registro nuevo en EXCEL
- $spreadsheet->getActiveSheet()->setCellValue('C' . $contador, $filaDetalleReporte->documento_identidad);
- $spreadsheet->getActiveSheet()->setCellValue('D' . $contador, $filaDetalleReporte->apellidos_nombres_paciente);
- $spreadsheet->getActiveSheet()->setCellValue('E' . $contador, 'MASCULINO');
- $spreadsheet->getActiveSheet()->setCellValue('F' . $contador, $filaDetalleReporte->fecha_ingreso);
- $spreadsheet->getActiveSheet()->setCellValue('G' . $contador, $filaDetalleReporte->fecha_nacimiento);
- $formulaActual = "=((NOW()-G" . $contador . ")/365)-0.5";
- $spreadsheet->getActiveSheet()
- ->getStyle("H" . $contador)
- ->getNumberFormat()
- ->setFormatCode('0');
- $spreadsheet->getActiveSheet()->setCellValue("H" . $contador, $formulaActual); //formula de la edad
- //$spreadsheet->getActiveSheet()->setCellValue('H2','');
- $spreadsheet->getActiveSheet()->setCellValue('I' . $contador, $filaDetalleReporte->vulnerabilidad_especifica);
- $spreadsheet->getActiveSheet()->setCellValue('J' . $contador, $planificacion_intervencion);
- $spreadsheet->getActiveSheet()->setCellValue('K' . $contador, $tipo_intervencion);
- $spreadsheet->getActiveSheet()->setCellValue('L' . $contador, $filaDetalleReporte->grupo_especifico);
- $spreadsheet->getActiveSheet()->setCellValue('M' . $contador, $filaDetalleReporte->otros_relevantes);
- $spreadsheet->getActiveSheet()->setCellValue('N' . $contador, $filaDetalleReporte->regimen);
- $spreadsheet->getActiveSheet()->setCellValue('O' . $contador, $filaDetalleReporte->etapa);
- $spreadsheet->getActiveSheet()->setCellValue('P' . $contador, $filaDetalleReporte->pabellon);
- //Verifica si el Tratamiento es Individual o Grupal
- if($tipo_actividad2==1){ // SI ES INDIVIDUAL
- $spreadsheet->getActiveSheet()->setCellValue('Q'.$contador, $filaDetalleReporte->descripcion);
- $spreadsheet->getActiveSheet()->setCellValue('R'.$contador, $filaDetalleReporte->dia);
- }else{
- $spreadsheet->getActiveSheet()->setCellValue('AE'.$contador, $filaDetalleReporte->sesiones_name);
- $spreadsheet->getActiveSheet()->setCellValue('AF'.$contador, $filaDetalleReporte->dia);
- }
- $spreadsheet->getActiveSheet()->setCellValue('AO' . $contador, $filaDetalleReporte->datos_profesional);
- $spreadsheet->getActiveSheet()->setCellValue('AP' . $contador, $filaDetalleReporte->observaciones);
- $spreadsheet->getActiveSheet()->setCellValue('AQ' . $contador, $filaDetalleReporte->pti_p_pti_s);
- }else{
- //si el archivo no existe, hay que crearlo.
- //llenando registro nuevo en EXCEL
- $spreadsheet->getActiveSheet()->setCellValue('C' . $contador, $filaDetalleReporte->documento_identidad);
- $spreadsheet->getActiveSheet()->setCellValue('D' . $contador, $filaDetalleReporte->apellidos_nombres_paciente);
- $spreadsheet->getActiveSheet()->setCellValue('E' . $contador, 'MASCULINO');
- $spreadsheet->getActiveSheet()->setCellValue('F' . $contador, $filaDetalleReporte->fecha_ingreso);
- $spreadsheet->getActiveSheet()->setCellValue('G' . $contador, $filaDetalleReporte->fecha_nacimiento);
- $formulaActual = "=((NOW()-G" . $contador . ")/365)-0.5";
- $spreadsheet->getActiveSheet()
- ->getStyle("H" . $contador)
- ->getNumberFormat()
- ->setFormatCode('0');
- $spreadsheet->getActiveSheet()->setCellValue("H" . $contador, $formulaActual); //formula de la edad
- //$spreadsheet->getActiveSheet()->setCellValue('H2','');
- $spreadsheet->getActiveSheet()->setCellValue('I' . $contador, $filaDetalleReporte->vulnerabilidad_especifica);
- $spreadsheet->getActiveSheet()->setCellValue('J' . $contador, $planificacion_intervencion);
- $spreadsheet->getActiveSheet()->setCellValue('K' . $contador, $tipo_intervencion);
- $spreadsheet->getActiveSheet()->setCellValue('L' . $contador, $filaDetalleReporte->grupo_especifico);
- $spreadsheet->getActiveSheet()->setCellValue('M' . $contador, $filaDetalleReporte->otros_relevantes);
- $spreadsheet->getActiveSheet()->setCellValue('N' . $contador, $filaDetalleReporte->regimen);
- $spreadsheet->getActiveSheet()->setCellValue('O' . $contador, $filaDetalleReporte->etapa);
- $spreadsheet->getActiveSheet()->setCellValue('P' . $contador, $filaDetalleReporte->pabellon);
- //Verifica si el Tratamiento es Individual o Grupal
- if($tipo_actividad2==1){ // SI ES INDIVIDUAL
- $spreadsheet->getActiveSheet()->setCellValue('Q'.$contador, $filaDetalleReporte->descripcion);
- $spreadsheet->getActiveSheet()->setCellValue('R'.$contador, $filaDetalleReporte->dia);
- }else{
- $spreadsheet->getActiveSheet()->setCellValue('AE'.$contador, $filaDetalleReporte->sesiones_name);
- $spreadsheet->getActiveSheet()->setCellValue('AF'.$contador, $filaDetalleReporte->dia);
- }
- $spreadsheet->getActiveSheet()->setCellValue('AO' . $contador, $filaDetalleReporte->datos_profesional);
- $spreadsheet->getActiveSheet()->setCellValue('AP' . $contador, $filaDetalleReporte->observaciones);
- $spreadsheet->getActiveSheet()->setCellValue('AQ' . $contador, $filaDetalleReporte->pti_p_pti_s);
- }
- salir_for: //Aqui no hace nada
- }
- // Guardar el archivo Excel modificado
- $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
- $writer->save('reportes/Reporte_mensual_social.xlsx');
- echo "Archivo guardado exitosamente en reportes/Reporte_mensual_social.xlsx";
- } else {
- echo "Ups!, ha habido un Error.";
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment