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 '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 AS '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;
- $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();
- //leyendo el archivo Reporte_mensual_social
- $rutaReporte = "reportes/Reporte_mensual_social.xlsx";
- $arrayDnisRepetidos = array();
- $arrayDnisExcel = array();
- if (file_exists($rutaReporte)) {
- //crear consulta donde hay registros MYSQL repetidos
- $sqlRepetido = "SELECT I.id_paciente AS 'id_paciente',I.doc_identidad AS 'documento_identidad', MAX(DET.dia_actividades) AS dia,SES.nombre_sesiones AS 'nombre_sesiones', COUNT(*) AS 'TOTAL'
- FROM detalle_reporte_mensual DET
- INNER JOIN pacientes I ON DET.id_paciente=I.id_paciente
- INNER JOIN sessiones SES ON DET.id_sesiones=SES.id_sesiones
- WHERE DET.id_reporte_mensual=:id_reporte
- GROUP BY I.doc_identidad HAVING COUNT(*) > 1;
- ";
- $rsRegistroRepetido = $objCon->getConexion()->prepare($sqlRepetido);
- $rsRegistroRepetido->bindParam(':id_reporte', $id_reporte, PDO::PARAM_INT);
- if ($rsRegistroRepetido->execute()) {
- while ($filaRegistroRepetido = $rsRegistroRepetido->fetch(PDO::FETCH_OBJ)) {
- // $arrayDnisRepetidos[$filaRegistroRepetido->id_paciente]=$filaRegistroRepetido->total;
- array_push($arrayDnisRepetidos, array(
- 'id_paciente' => $filaRegistroRepetido->id_paciente,
- 'dni_paciente' => $filaRegistroRepetido->documento_identidad,
- 'valor' => $filaRegistroRepetido->nombre_sesiones,
- 'dia' => $filaRegistroRepetido->dia,
- 'total_repetidos' => $filaRegistroRepetido->total
- ));
- //($arrayDnis, $filaRegistroRepetido->documento_identidad);
- }
- }
- // var_dump(json_encode($arrayDnisRepetidos));
- //abriendo el archivo para leerlo para llenar arrayDnisExcel
- $inputFileType2 = IOFactory::identify($rutaReporte, [IOFactory::READER_XLSX]);
- $reader2 = IOFactory::createReader($inputFileType2);
- $spreadsheet2 = $reader2->load($rutaReporte);
- $spreadsheet2->setActiveSheetIndex(0);
- $sheet = $spreadsheet2->getActiveSheet();
- //numero de filas que tiene la hoja
- $nFilas = $sheet->getHighestDataRow();
- for ($i = 2; $i <= $nFilas; $i++) {
- $arrayDnisExcel[$i] = $sheet->getCell('C' . $i)->getValue();
- }
- // var_dump(json_encode($arrayDnisExcel));
- // echo "<br><hr></br>";
- }
- while ($filaDetalleReporte = $rsDetalleReporte->fetch(PDO::FETCH_OBJ)) {
- $contador++;
- //planificacion d ela intervencion
- if ($filaDetalleReporte->planificacion_intervencion == 1) {
- $planificacion_intervencion = "PTI_EN_PROCESO";
- }
- if ($filaDetalleReporte->planificacion_intervencion == 2) {
- $planificacion_intervencion = "PTI_P";
- }
- if ($filaDetalleReporte->planificacion_intervencion == 3) {
- $planificacion_intervencion = "PTI_S";
- }
- if ($filaDetalleReporte->planificacion_intervencion == 4) {
- $planificacion_intervencion = "POPE_ANTIGUA";
- }
- //tipo de intervencion
- if ($filaDetalleReporte->tipo_intervencion == 1) {
- $tipo_intervencion = "INDUCCION_Y_ADAPTACION_AL_REGIMEN_PENITENCIARIO";
- }
- if ($filaDetalleReporte->tipo_intervencion == 2) {
- $tipo_intervencion = "INTERVENCION_GENERAL";
- }
- if ($filaDetalleReporte->tipo_intervencion == 3) {
- $tipo_intervencion = "INTERVENCION_ESPECIALIZADA";
- }
- if ($filaDetalleReporte->tipo_intervencion == 4) {
- $tipo_intervencion = "PROGRAMACIÓN_SOBRE_NECESIDADES_DE_INTERVENCIÓN_COMPLEMENTARIA";
- }
- // echo "<a href='$rutaReporte'>Descargar Reporte</a>"; //--> OK
- if (file_exists($rutaReporte)) {
- // 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'];
- foreach ($arrayDnisRepetidos as $dniRepetidos) {
- if ($filaDetalleReporte->documento_identidad == $dniRepetidos['dni_paciente']) {
- $dni_paciente = $filaDetalleReporte->documento_identidad;
- $nRepeticiones = $dniRepetidos['total_repetidos'];
- for ($nfila = 2; $nfila <= count($arrayDnisExcel); $nfila++) {
- if ($arrayDnisExcel[$nfila] == $dni_paciente) {
- $FilaActual = $nfila;
- $columnaActual = $rangoColumnas[$nRepeticiones];
- $valor = mb_convert_encoding($dniRepetidos['valor'], "UTF8");
- $dia = $dniRepetidos['dia'];
- echo "FILA ACTUAL: $FilaActual <br>
- COLUMNA ACTUAL: $columnaActual <br>
- Registro a Actualziar: " . $arrayDnisExcel[$nfila] . "<br>
- VAlor a Agregar: $valor <br><hr>";
- $sheet->setCellValue($columnaActual . $FilaActual, $valor); // Descripción en columna actual
- $siguienteColumna = Coordinate::stringFromColumnIndex(Coordinate::columnIndexFromString($columnaActual) + 1);
- $sheet->setCellValue($siguienteColumna . $FilaActual, $dia); // Día en siguiente columna
- // echo "Se registro el registro Repetido en las celdas especificas";
- // 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 <br>";
- break;
- }
- }
- }else{
- echo "<script>alert('FilaDetalleReporte NO es igual a $dniRepetidos, Por ende se agregar una fila mas...');</script>";
- //llenando registro nuevo en EXCEL
- try {
- $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);
- $objEscribe = IOFactory::createWriter($spreadsheet, 'Xlsx');
- $objEscribe->save("reportes/Reporte_mensual_social.xlsx");
- } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
- // File isn't actually an Xls file, even though it has an xls extension
- echo "Error al cargar el Archivo: " . $e;
- }
- }
- }
- } else {
- //si el archivo no existe, hay que crearlo.
- echo "<script>alert('Archivo No Existe, Se esta Creando');</script>";
- //llenando registro nuevo en EXCEL
- try {
- $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);
- $objEscribe = IOFactory::createWriter($spreadsheet, 'Xlsx');
- $objEscribe->save("reportes/Reporte_mensual_social.xlsx");
- } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
- // File isn't actually an Xls file, even though it has an xls extension
- echo "Error al cargar el Archivo: " . $e;
- }
- }
- // 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