reksec

Problema al actualizar fila excel con registro MYSQL duplicados

Oct 31st, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.75 KB | Source Code | 0 0
  1. <?php
  2. include("conexion.php");
  3. $objCon = new Conexion();
  4. $id_reporte = 1; //lo pongo asi para probar
  5. $tipo_actividad2 = 2; //lo pongo asi para probar
  6. require __DIR__ . "/vendor/autoload.php";
  7.  
  8. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  9. use PhpOffice\PhpSpreadsheet\IOFactory;
  10. use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  11.  
  12. //consultando los detalles del reporte a descargar segun el ID que se obtuvo por POST
  13. $sqlDetalleReporte = "SELECT I.doc_identidad AS 'DOCUMENTO_IDENTIDAD',
  14.                            I.ape_nombres AS 'APELLIDOS_NOMBRES_paciente',
  15.                            I.fecha_ingreso AS 'FECHA_INGRESO',
  16.                            I.fecha_nacimiento AS 'FECHA_NACIMIENTO',
  17.                            I.discapacidad AS 'vulnerabilidad_especifica',
  18.  
  19.                            DET.planificacion_intervencion AS 'PLANIFICACION_INTERVENCION',
  20.                            DET.tipo_intervencion AS 'TIPO_INTERVENCION',
  21.                            GRUP.nombre_grupo_especifico AS 'GRUPO_ESPECIFICO',
  22.                            DET.otros_relevantes AS 'OTROS_RELEVANTES',
  23.                            REG.nombre_regimen AS 'REGIMEN',
  24.                            ETP.nombre_etapa AS 'ETAPA',
  25.                            I.pab_celda_etapa AS 'PABELLON',
  26.                            DESCRIP.nombre_descripciones AS 'DESCRIPCION',
  27.                            DET.dia_actividades AS 'DIA',
  28.                            SES.nombre_sesiones AS 'SESIONES_NAME',
  29.                            CONCAT(U.ape_paterno,' ',U.ape_materno,' ',U.nombres) AS 'DATOS_PROFESIONAL',
  30.                            DET.observaciones AS 'OBSERVACIONES',
  31.                            DET.cambio_PTIP_PTIS AS 'PTI_P_PTI_S'
  32.                        FROM reportes_mensuales REP
  33.                        INNER JOIN detalle_reporte_mensual DET ON REP.id_reporte_mensual=DET.id_reporte_mensual
  34.                        INNER JOIN grupo_especifico GRUP ON DET.id_grupo_especifico=GRUP.id_grupo_especifico
  35.                        INNER JOIN pacientes I ON DET.id_paciente=I.id_paciente
  36.                        INNER JOIN usuarios U ON REP.id_usuario=U.id_usuario
  37.                        INNER JOIN regimen REG ON DET.id_regimen=REG.id_regimen
  38.                        INNER JOIN etapa ETP ON DET.id_etapa=ETP.id_etapa
  39.                        INNER JOIN descripciones DESCRIP ON DET.id_descripciones=DESCRIP.id_descripciones
  40.                        INNER JOIN sessiones SES ON DET.id_sesiones=SES.id_sesiones
  41.  
  42.                        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;
  43. $rsDetalleReporte = $objCon->getConexion()->prepare($sqlDetalleReporte);
  44. $rsDetalleReporte->bindParam(':id_reporte', $id_reporte, PDO::PARAM_INT);
  45. $contador = 1; // pongo 1 porque el formato comienza en la linea 2
  46. if ($rsDetalleReporte->execute()) {
  47.     $rutaArchivo = "reportes/FORMATO_SOCIAL.xlsx";
  48.     $inputFileType = IOFactory::identify($rutaArchivo);
  49.     $reader = IOFactory::createReader($inputFileType);
  50.     $spreadsheet = $reader->load($rutaArchivo);
  51.     $spreadsheet->setActiveSheetIndex(0);
  52.     $sheet = $spreadsheet->getActiveSheet();
  53.  
  54.  
  55.     //leyendo el archivo Reporte_mensual_social
  56.     $rutaReporte = "reportes/Reporte_mensual_social.xlsx";
  57.     $arrayDnisRepetidos = array();
  58.     $arrayDnisExcel = array();
  59.     if (file_exists($rutaReporte)) {
  60.  
  61.         //crear consulta donde hay registros MYSQL repetidos
  62.         $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'
  63.                        FROM detalle_reporte_mensual DET
  64.                        INNER JOIN pacientes I ON DET.id_paciente=I.id_paciente
  65.                        INNER JOIN sessiones SES ON DET.id_sesiones=SES.id_sesiones
  66.                        WHERE DET.id_reporte_mensual=:id_reporte
  67.                        GROUP BY I.doc_identidad HAVING COUNT(*) > 1;
  68.                        ";
  69.         $rsRegistroRepetido = $objCon->getConexion()->prepare($sqlRepetido);
  70.         $rsRegistroRepetido->bindParam(':id_reporte', $id_reporte, PDO::PARAM_INT);
  71.         if ($rsRegistroRepetido->execute()) {
  72.             while ($filaRegistroRepetido = $rsRegistroRepetido->fetch(PDO::FETCH_OBJ)) {
  73.  
  74.                 //   $arrayDnisRepetidos[$filaRegistroRepetido->id_paciente]=$filaRegistroRepetido->total;
  75.                 array_push($arrayDnisRepetidos, array(
  76.                     'id_paciente' => $filaRegistroRepetido->id_paciente,
  77.                     'dni_paciente' => $filaRegistroRepetido->documento_identidad,
  78.                     'valor' => $filaRegistroRepetido->nombre_sesiones,
  79.                     'dia' => $filaRegistroRepetido->dia,
  80.                     'total_repetidos' => $filaRegistroRepetido->total
  81.                 ));
  82.                 //($arrayDnis, $filaRegistroRepetido->documento_identidad);
  83.  
  84.             }
  85.         }
  86.  
  87.         //  var_dump(json_encode($arrayDnisRepetidos));
  88.  
  89.         //abriendo el archivo para leerlo para llenar arrayDnisExcel
  90.         $inputFileType2 = IOFactory::identify($rutaReporte, [IOFactory::READER_XLSX]);
  91.         $reader2 = IOFactory::createReader($inputFileType2);
  92.         $spreadsheet2 = $reader2->load($rutaReporte);
  93.         $spreadsheet2->setActiveSheetIndex(0);
  94.         $sheet = $spreadsheet2->getActiveSheet();
  95.         //numero de filas que tiene la hoja
  96.         $nFilas = $sheet->getHighestDataRow();
  97.         for ($i = 2; $i <= $nFilas; $i++) {
  98.  
  99.             $arrayDnisExcel[$i] = $sheet->getCell('C' . $i)->getValue();
  100.         }
  101.  
  102.         // var_dump(json_encode($arrayDnisExcel));
  103.         // echo "<br><hr></br>";
  104.  
  105.     }
  106.  
  107.  
  108.  
  109.  
  110.  
  111.     while ($filaDetalleReporte = $rsDetalleReporte->fetch(PDO::FETCH_OBJ)) {
  112.         $contador++;
  113.  
  114.         //planificacion d ela intervencion
  115.         if ($filaDetalleReporte->planificacion_intervencion == 1) {
  116.             $planificacion_intervencion = "PTI_EN_PROCESO";
  117.         }
  118.  
  119.         if ($filaDetalleReporte->planificacion_intervencion == 2) {
  120.             $planificacion_intervencion = "PTI_P";
  121.         }
  122.  
  123.         if ($filaDetalleReporte->planificacion_intervencion == 3) {
  124.             $planificacion_intervencion = "PTI_S";
  125.         }
  126.         if ($filaDetalleReporte->planificacion_intervencion == 4) {
  127.             $planificacion_intervencion = "POPE_ANTIGUA";
  128.         }
  129.  
  130.         //tipo de intervencion
  131.         if ($filaDetalleReporte->tipo_intervencion == 1) {
  132.             $tipo_intervencion = "INDUCCION_Y_ADAPTACION_AL_REGIMEN_PENITENCIARIO";
  133.         }
  134.         if ($filaDetalleReporte->tipo_intervencion == 2) {
  135.             $tipo_intervencion = "INTERVENCION_GENERAL";
  136.         }
  137.         if ($filaDetalleReporte->tipo_intervencion == 3) {
  138.             $tipo_intervencion = "INTERVENCION_ESPECIALIZADA";
  139.         }
  140.         if ($filaDetalleReporte->tipo_intervencion == 4) {
  141.             $tipo_intervencion = "PROGRAMACIÓN_SOBRE_NECESIDADES_DE_INTERVENCIÓN_COMPLEMENTARIA";
  142.         }
  143.  
  144.  
  145.         // echo "<a href='$rutaReporte'>Descargar Reporte</a>"; //--> OK
  146.         if (file_exists($rutaReporte)) {
  147.             // Rango de columnas dependiendo del tipo de actividad
  148.             $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'];
  149.  
  150.             foreach ($arrayDnisRepetidos as $dniRepetidos) {
  151.                 if ($filaDetalleReporte->documento_identidad == $dniRepetidos['dni_paciente']) {
  152.                     $dni_paciente = $filaDetalleReporte->documento_identidad;
  153.                     $nRepeticiones = $dniRepetidos['total_repetidos'];
  154.  
  155.                     for ($nfila = 2; $nfila <= count($arrayDnisExcel); $nfila++) {
  156.                         if ($arrayDnisExcel[$nfila] == $dni_paciente) {
  157.                             $FilaActual = $nfila;
  158.                             $columnaActual = $rangoColumnas[$nRepeticiones];
  159.                             $valor = mb_convert_encoding($dniRepetidos['valor'], "UTF8");
  160.                             $dia = $dniRepetidos['dia'];
  161.                             echo "FILA ACTUAL: $FilaActual <br>
  162.                              COLUMNA ACTUAL: $columnaActual <br>
  163.                                Registro a Actualziar: " . $arrayDnisExcel[$nfila] . "<br>
  164.                                VAlor a Agregar: $valor <br><hr>";
  165.  
  166.                             $sheet->setCellValue($columnaActual . $FilaActual, $valor); // Descripción en columna actual
  167.                             $siguienteColumna = Coordinate::stringFromColumnIndex(Coordinate::columnIndexFromString($columnaActual) + 1);
  168.                             $sheet->setCellValue($siguienteColumna . $FilaActual, $dia); // Día en siguiente columna
  169.  
  170.                             // echo "Se registro el registro Repetido en las celdas especificas";
  171.                             // Guardar el archivo Excel modificado
  172.                             $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
  173.                             $writer->save('reportes/Reporte_mensual_social.xlsx');
  174.                             echo "Archivo guardado exitosamente en reportes/Reporte_mensual_social.xlsx <br>";
  175.  
  176.  
  177.                             break;
  178.                         }
  179.                     }
  180.                 }else{
  181.                     echo "<script>alert('FilaDetalleReporte NO es igual a $dniRepetidos, Por ende se agregar una fila mas...');</script>";
  182.             //llenando registro nuevo en EXCEL
  183.             try {
  184.                 $spreadsheet->getActiveSheet()->setCellValue('C' . $contador, $filaDetalleReporte->documento_identidad);
  185.                 $spreadsheet->getActiveSheet()->setCellValue('D' . $contador, $filaDetalleReporte->apellidos_nombres_paciente);
  186.                 $spreadsheet->getActiveSheet()->setCellValue('E' . $contador, 'MASCULINO');
  187.                 $spreadsheet->getActiveSheet()->setCellValue('F' . $contador, $filaDetalleReporte->fecha_ingreso);
  188.                 $spreadsheet->getActiveSheet()->setCellValue('G' . $contador, $filaDetalleReporte->fecha_nacimiento);
  189.  
  190.                 $formulaActual = "=((NOW()-G" . $contador . ")/365)-0.5";
  191.                 $spreadsheet->getActiveSheet()
  192.                     ->getStyle("H" . $contador)
  193.                     ->getNumberFormat()
  194.                     ->setFormatCode('0');
  195.                 $spreadsheet->getActiveSheet()->setCellValue("H" . $contador, $formulaActual); //formula de la edad
  196.  
  197.                 //$spreadsheet->getActiveSheet()->setCellValue('H2','');
  198.                 $spreadsheet->getActiveSheet()->setCellValue('I' . $contador, $filaDetalleReporte->vulnerabilidad_especifica);
  199.                 $spreadsheet->getActiveSheet()->setCellValue('J' . $contador, $planificacion_intervencion);
  200.                 $spreadsheet->getActiveSheet()->setCellValue('K' . $contador, $tipo_intervencion);
  201.                 $spreadsheet->getActiveSheet()->setCellValue('L' . $contador, $filaDetalleReporte->grupo_especifico);
  202.                 $spreadsheet->getActiveSheet()->setCellValue('M' . $contador, $filaDetalleReporte->otros_relevantes);
  203.                 $spreadsheet->getActiveSheet()->setCellValue('N' . $contador, $filaDetalleReporte->regimen);
  204.                 $spreadsheet->getActiveSheet()->setCellValue('O' . $contador, $filaDetalleReporte->etapa);
  205.                 $spreadsheet->getActiveSheet()->setCellValue('P' . $contador, $filaDetalleReporte->pabellon);
  206.  
  207.                 //Verifica si el Tratamiento es Individual o Grupal
  208.                 if ($tipo_actividad2 == 1) { // SI ES INDIVIDUAL
  209.                     $spreadsheet->getActiveSheet()->setCellValue('Q' . $contador, $filaDetalleReporte->descripcion);
  210.                     $spreadsheet->getActiveSheet()->setCellValue('R' . $contador, $filaDetalleReporte->dia);
  211.                 } else {
  212.                     $spreadsheet->getActiveSheet()->setCellValue('AE' . $contador, $filaDetalleReporte->sesiones_name);
  213.                     $spreadsheet->getActiveSheet()->setCellValue('AF' . $contador, $filaDetalleReporte->dia);
  214.                 }
  215.  
  216.  
  217.                 $spreadsheet->getActiveSheet()->setCellValue('AO' . $contador, $filaDetalleReporte->datos_profesional);
  218.                 $spreadsheet->getActiveSheet()->setCellValue('AP' . $contador, $filaDetalleReporte->observaciones);
  219.                 $spreadsheet->getActiveSheet()->setCellValue('AQ' . $contador, $filaDetalleReporte->pti_p_pti_s);
  220.  
  221.  
  222.  
  223.  
  224.                 $objEscribe = IOFactory::createWriter($spreadsheet, 'Xlsx');
  225.                 $objEscribe->save("reportes/Reporte_mensual_social.xlsx");
  226.             } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
  227.                 // File isn't actually an Xls file, even though it has an xls extension
  228.                 echo "Error al cargar el Archivo: " . $e;
  229.             }
  230.                 }
  231.             }
  232.         } else {
  233.             //si el archivo no existe, hay que crearlo.
  234.             echo "<script>alert('Archivo No Existe, Se esta Creando');</script>";
  235.             //llenando registro nuevo en EXCEL
  236.             try {
  237.                 $spreadsheet->getActiveSheet()->setCellValue('C' . $contador, $filaDetalleReporte->documento_identidad);
  238.                 $spreadsheet->getActiveSheet()->setCellValue('D' . $contador, $filaDetalleReporte->apellidos_nombres_paciente);
  239.                 $spreadsheet->getActiveSheet()->setCellValue('E' . $contador, 'MASCULINO');
  240.                 $spreadsheet->getActiveSheet()->setCellValue('F' . $contador, $filaDetalleReporte->fecha_ingreso);
  241.                 $spreadsheet->getActiveSheet()->setCellValue('G' . $contador, $filaDetalleReporte->fecha_nacimiento);
  242.  
  243.                 $formulaActual = "=((NOW()-G" . $contador . ")/365)-0.5";
  244.                 $spreadsheet->getActiveSheet()
  245.                     ->getStyle("H" . $contador)
  246.                     ->getNumberFormat()
  247.                     ->setFormatCode('0');
  248.                 $spreadsheet->getActiveSheet()->setCellValue("H" . $contador, $formulaActual); //formula de la edad
  249.  
  250.                 //$spreadsheet->getActiveSheet()->setCellValue('H2','');
  251.                 $spreadsheet->getActiveSheet()->setCellValue('I' . $contador, $filaDetalleReporte->vulnerabilidad_especifica);
  252.                 $spreadsheet->getActiveSheet()->setCellValue('J' . $contador, $planificacion_intervencion);
  253.                 $spreadsheet->getActiveSheet()->setCellValue('K' . $contador, $tipo_intervencion);
  254.                 $spreadsheet->getActiveSheet()->setCellValue('L' . $contador, $filaDetalleReporte->grupo_especifico);
  255.                 $spreadsheet->getActiveSheet()->setCellValue('M' . $contador, $filaDetalleReporte->otros_relevantes);
  256.                 $spreadsheet->getActiveSheet()->setCellValue('N' . $contador, $filaDetalleReporte->regimen);
  257.                 $spreadsheet->getActiveSheet()->setCellValue('O' . $contador, $filaDetalleReporte->etapa);
  258.                 $spreadsheet->getActiveSheet()->setCellValue('P' . $contador, $filaDetalleReporte->pabellon);
  259.  
  260.                 //Verifica si el Tratamiento es Individual o Grupal
  261.                 if ($tipo_actividad2 == 1) { // SI ES INDIVIDUAL
  262.                     $spreadsheet->getActiveSheet()->setCellValue('Q' . $contador, $filaDetalleReporte->descripcion);
  263.                     $spreadsheet->getActiveSheet()->setCellValue('R' . $contador, $filaDetalleReporte->dia);
  264.                 } else {
  265.                     $spreadsheet->getActiveSheet()->setCellValue('AE' . $contador, $filaDetalleReporte->sesiones_name);
  266.                     $spreadsheet->getActiveSheet()->setCellValue('AF' . $contador, $filaDetalleReporte->dia);
  267.                 }
  268.  
  269.  
  270.                 $spreadsheet->getActiveSheet()->setCellValue('AO' . $contador, $filaDetalleReporte->datos_profesional);
  271.                 $spreadsheet->getActiveSheet()->setCellValue('AP' . $contador, $filaDetalleReporte->observaciones);
  272.                 $spreadsheet->getActiveSheet()->setCellValue('AQ' . $contador, $filaDetalleReporte->pti_p_pti_s);
  273.  
  274.  
  275.  
  276.  
  277.                 $objEscribe = IOFactory::createWriter($spreadsheet, 'Xlsx');
  278.                 $objEscribe->save("reportes/Reporte_mensual_social.xlsx");
  279.             } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
  280.                 // File isn't actually an Xls file, even though it has an xls extension
  281.                 echo "Error al cargar el Archivo: " . $e;
  282.             }
  283.         }
  284.  
  285.  
  286.         // salir_for: //Aqui no hace nada
  287.  
  288.  
  289.  
  290.  
  291.  
  292.     }
  293.  
  294.     /*  // Guardar el archivo Excel modificado
  295.     $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
  296.     $writer->save('reportes/Reporte_mensual_social.xlsx');
  297.     echo "Archivo guardado exitosamente en reportes/Reporte_mensual_social.xlsx";
  298.  
  299.  
  300.  */
  301. } else {
  302.     echo "Ups!, ha habido un Error.";
  303. }
  304. ?>
Advertisement
Add Comment
Please, Sign In to add comment