浏览代码

subo funciones completas de registro administrativo

FREDY 3 月之前
父节点
当前提交
bf133c2565

+ 39 - 12
Front/src/app/modules/Administrador/pages/admin-form/admin-form.component.ts

@@ -5,6 +5,7 @@ import { FormService } from '../../services/FormService.service';
 import { ActivatedRoute, Router } from '@angular/router';
 import { FormArray, Validators } from '@angular/forms';
 import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
+import { ChangeDetectorRef } from '@angular/core';
 
 //aqui es para agregar popiedades a las celdas que se generan el el build grid
 interface GridCell {
@@ -13,10 +14,11 @@ interface GridCell {
   selected: boolean;
   element?: FormElement;
   //   rowspan?: number;
-  // colspan?: number;
+  // colspan?: number;  por ejemplo estas seria en caso de que se aplicara la funcion de unir celdas
   // merged?: boolean;
 }
 
+//Aqui es para agregar tipos de elementos o inputs al selector de campos del admin Form
 interface FormElement {
   type: 'text' | 'select' | 'radio' | 'checkbox' | 'textarea' | 'number' | 'email' | 'date';
   label: string;
@@ -194,7 +196,9 @@ constructor(
   private formService: FormService,
   private route: ActivatedRoute,
   private router: Router,
-  private fb: FormBuilder
+  private fb: FormBuilder,
+    private cdr: ChangeDetectorRef
+
 
 ) {}
 
@@ -402,8 +406,7 @@ getSafeControlName(cell: any, rowIndex: number, colIndex: number): string {
       return;
     }
 
-    // Nota: Necesitarás agregar la ruta DELETE en tu API Laravel
-    // Por ahora, solo actualizar la lista
+
     this.loadSavedForms();
   }
 
@@ -444,14 +447,38 @@ getSafeControlName(cell: any, rowIndex: number, colIndex: number): string {
     });
   }
 
-  switchToTab(tab: Tab) {
-    if (this.currentTab) this.currentTab.grid = [...this.grid];
-    this.tabs.forEach(t => t.active = false);
-    tab.active = true;
-    this.currentTab = tab;
-    this.grid = [...tab.grid];
-    this.clearSelection();
-  }
+switchToTab(tab: Tab) {
+  if (this.currentTab) this.currentTab.grid = [...this.grid];
+  this.tabs.forEach(t => t.active = false);
+  tab.active = true;
+  this.currentTab = tab;
+  this.grid = [...tab.grid];
+  this.clearSelection();
+  this.buildFormGroup();
+    this.cdr.detectChanges();
+}
+buildFormGroup() {
+  const group: any = {};
+  this.grid.forEach((row, i) => {
+    row.forEach((cell, j) => {
+      if (cell.element && cell.element.name) {
+        const controlName = this.getSafeControlName(cell, i, j);
+        group[controlName] = new FormControl('');
+      }
+    });
+  });
+  this.form = new FormGroup(group);
+}
+
+
+trackByRowIndex(index: number, row: GridCell[]): number {
+  return index;
+}
+
+trackByCellIndex(index: number, cell: GridCell): string {
+  return `${cell.row}_${cell.col}`;
+}
+
 
   updateTabName(tab: Tab, name: string) {
     tab.name = name;

+ 4 - 4
Front/src/app/modules/Padres/pages/Registro/registro.component.html

@@ -8,9 +8,9 @@
         </div>
     </div>
     <div style="background-color: white;" class="divRes">
-        <mat-tab-group mat-stretch-tabs="false" *ngIf="!isLoading" class="mat-elevation-z4" animationDuration="0ms"
-            (selectedIndexChange)="selected.setValue($event)" [selectedIndex]="selected.value">
-            <mat-tab label="Datos Generales">
+    <mat-tab-group mat-stretch-tabs="false" *ngIf="!isLoading" class="mat-elevation-z4"
+    (selectedIndexChange)="selected.setValue($event)" [selectedIndex]="selected.value">
+            <mat-tab label="Datos Generales" [disabled]="isTabDisabled[0]">
                 <mat-stepper [linear]="isLinear" #stepper [orientation]="(stepperOrientation | async)!">
                     <mat-step [stepControl]="form" label="Datos Generales Alumnos">
                         <div
@@ -152,7 +152,7 @@
                         </div>
                     </mat-step>
 
-                    <mat-step [stepControl]="form2">
+                    <mat-step [stepControl]="form2" >
                         <div
                             style="display: flex; justify-content: center; align-items: center; flex-direction: column;">
                             <div class="div-form">

+ 91 - 47
Front/src/app/modules/Padres/pages/Registro/registro.component.ts

@@ -59,6 +59,8 @@ export class registroComponent implements OnInit {
         motivoCambio: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
     });
 
+
+
     validateFechaNacimiento(control: AbstractControl): ValidationErrors | null {
         const fechaNacimiento = new Date(control.value);
         const fechaMaxima = new Date();
@@ -734,14 +736,14 @@ isPersonaAutorizadaInvalid(index: number, campo: string): boolean {
             return;
         }
     }
-
-    siguiente4() {
+ siguiente4() {
         if (this.form5.invalid) {
             this.form5.markAllAsTouched();
             return;
         }
     }
 
+
     siguiente5() {
         if (this.form6.invalid) {
             this.form6.markAllAsTouched();
@@ -979,58 +981,100 @@ formulario() {
         }
     }
 
-  cargarFormulario() {
-        this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
-            this.isLoading = false;
-            this.datos = data.registro[0];
-            if (this.datos != undefined) {
-                this.form.get('gradoCursar')?.setValue(this.datos.RegA_GradoCursar);
-                this.form.get('mesInscripcion')?.setValue(this.datos.RegA_MesInscripcion);
-                this.form.get('planPago')?.setValue(this.datos.RegA_PlanPagos);
-                this.form.get('becaCurso')?.setValue(this.datos.RegA_BecaCurso);
-                this.form.get('becaPorcentaje')?.setValue(this.datos.RegA_BecaPorcentaje);
-                this.form2.get('factura')?.setValue(this.datos.RegA_RequiereFactura);
-                this.form2.get('metedoPago')?.setValue(this.datos.RegA_MetodoPago);
-                this.form2.get('RFCFactura')?.setValue(this.datos.RegA_RfcFactura);
-                this.form2.get('razonSocial')?.setValue(this.datos.RegA_NombreFactura);
-                this.form2.get('domicilioFactura')?.setValue(this.datos.RegA_DireccionFactura);
-                this.form2.get('correoFactura')?.setValue(this.datos.RegA_CorreoFactura);
-                this.form2.get('cuentaPago')?.setValue(this.datos.RegA_CuentaPago);
-                // Mostrar nombre del archivo si existe
+cargarFormulario() {
+    this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
+        this.isLoading = false;
+        this.datos = data.registro[0];
+        if (this.datos != undefined) {
+            this.form.get('gradoCursar')?.setValue(this.datos.RegA_GradoCursar);
+            this.form.get('mesInscripcion')?.setValue(this.datos.RegA_MesInscripcion);
+            this.form.get('planPago')?.setValue(this.datos.RegA_PlanPagos);
+            this.form.get('becaCurso')?.setValue(this.datos.RegA_BecaCurso);
+            this.form.get('becaPorcentaje')?.setValue(this.datos.RegA_BecaPorcentaje);
+
+            this.form2.get('factura')?.setValue(this.datos.RegA_RequiereFactura);
+
+            // Actualiza controles según valor de factura
+            this.factura({ value: this.datos.RegA_RequiereFactura });
+
+            this.form2.get('metedoPago')?.setValue(this.datos.RegA_MetodoPago);
+            this.form2.get('RFCFactura')?.setValue(this.datos.RegA_RfcFactura);
+            this.form2.get('razonSocial')?.setValue(this.datos.RegA_NombreFactura);
+            this.form2.get('domicilioFactura')?.setValue(this.datos.RegA_DireccionFactura);
+            this.form2.get('correoFactura')?.setValue(this.datos.RegA_CorreoFactura);
+            this.form2.get('cuentaPago')?.setValue(this.datos.RegA_CuentaPago);
+
+            if (this.datos.RegA_RequiereFactura === 'No') {
+                // Borra archivo porque ya no requiere factura
+                this.selectedFile = null;
+                this.form2.get('constanciaFiscal')?.setValue(null);
+            } else {
+                // Mostrar archivo si existe
                 if (this.datos.RegA_ConstanciaFiscal) {
                     this.form2.get('constanciaFiscal')?.setValue(this.datos.RegA_ConstanciaFiscal);
                 }
             }
-        });
-    }
-   factura(event: any) {
-        if (event.value === 'No') {
-            this.form2.get('metedoPago')?.setValue('EF');
-            this.form2.get('RFCFactura')?.setValue('XAXX010101000');
-            this.form2.get('razonSocial')?.setValue('PUBLICO EN GENERAL');
-            this.form2.get('correoFactura')?.setValue('NA');
-            this.form2.get('domicilioFactura')?.setValue('NA');
-            this.form2.get('cuentaPago')?.setValue('00');
-            this.form2.get('domicilioFactura')?.disable();
-            this.form2.get('correoFactura')?.disable();
-            this.form2.get('razonSocial')?.disable();
-            this.form2.get('RFCFactura')?.disable();
-            this.form2.get('metedoPago')?.disable();
-        } else {
-            this.form2.get('metedoPago')?.setValue('');
-            this.form2.get('RFCFactura')?.setValue('');
-            this.form2.get('razonSocial')?.setValue('');
-            this.form2.get('domicilioFactura')?.setValue('');
-            this.form2.get('correoFactura')?.setValue('');
-            this.form2.get('cuentaPago')?.setValue('01');
-            this.form2.get('domicilioFactura')?.enable();
-            this.form2.get('correoFactura')?.enable();
-            this.form2.get('razonSocial')?.enable();
-            this.form2.get('RFCFactura')?.enable();
-            this.form2.get('metedoPago')?.enable();
         }
+    });
+}
+
+  factura(event: any) {
+    if (event.value === 'No') {
+        this.form2.get('metedoPago')?.setValue('EF');
+        this.form2.get('RFCFactura')?.setValue('XAXX010101000');
+        this.form2.get('razonSocial')?.setValue('PUBLICO EN GENERAL');
+        this.form2.get('correoFactura')?.setValue('NA');
+        this.form2.get('domicilioFactura')?.setValue('NA');
+        this.form2.get('cuentaPago')?.setValue('00');
+        this.form2.get('domicilioFactura')?.clearValidators();
+        this.form2.get('correoFactura')?.clearValidators();
+        this.form2.get('razonSocial')?.clearValidators();
+        this.form2.get('RFCFactura')?.clearValidators();
+        this.form2.get('metedoPago')?.clearValidators();
+
+        this.form2.get('domicilioFactura')?.disable();
+        this.form2.get('correoFactura')?.disable();
+        this.form2.get('razonSocial')?.disable();
+        this.form2.get('RFCFactura')?.disable();
+        this.form2.get('metedoPago')?.disable();
+this.form2.get('constanciaFiscal')?.disable();
+this.selectedFile = null;
+this.form2.get('constanciaFiscal')?.setValue(null);
+
+
+
+    } else {
+        this.form2.get('metedoPago')?.setValue('');
+        this.form2.get('RFCFactura')?.setValue('');
+        this.form2.get('razonSocial')?.setValue('');
+        this.form2.get('domicilioFactura')?.setValue('');
+        this.form2.get('correoFactura')?.setValue('');
+        this.form2.get('cuentaPago')?.setValue('01');
+
+        this.form2.get('domicilioFactura')?.setValidators([Validators.required]);
+        this.form2.get('correoFactura')?.setValidators([Validators.required, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$')]);
+        this.form2.get('razonSocial')?.setValidators([Validators.required]);
+        this.form2.get('RFCFactura')?.setValidators([Validators.required]);
+        this.form2.get('metedoPago')?.setValidators([Validators.required]);
+
+        this.form2.get('domicilioFactura')?.enable();
+        this.form2.get('correoFactura')?.enable();
+        this.form2.get('razonSocial')?.enable();
+        this.form2.get('RFCFactura')?.enable();
+        this.form2.get('metedoPago')?.enable();
+this.form2.get('constanciaFiscal')?.enable();
     }
 
+    this.form2.get('domicilioFactura')?.updateValueAndValidity();
+    this.form2.get('correoFactura')?.updateValueAndValidity();
+    this.form2.get('razonSocial')?.updateValueAndValidity();
+    this.form2.get('RFCFactura')?.updateValueAndValidity();
+    this.form2.get('metedoPago')?.updateValueAndValidity();
+    this.form2.get('constanciaFiscal')?.updateValueAndValidity();
+
+}
+
+
 
 
 

+ 39 - 35
Front/src/app/modules/Padres/pages/Registro/registroAd.component.html

@@ -127,12 +127,16 @@
 
                             <mat-form-field class="FormularioFicha1 M-L" style="margin-left: 4%;">
                                 <mat-label class="label f-z">Domicilio para Facturación:</mat-label>
-                                <input type="text" maxlength="0" matInput class="input-Form"
-                                    formControlName="domicilioFactura" readonly>
-                                <mat-hint
-                                    *ngIf="!isValidField1('domicilioFactura','required') && this.form2.value.factura ==  'Si' "
-                                    style="color: blue; cursor: pointer;" (click)="Asistente()">Haga click aqui para
-                                    abrir el Asistente de Captura</mat-hint>
+                               <input type="text" maxlength="0" matInput class="input-Form"
+       formControlName="domicilioFactura" readonly>
+
+                              <mat-hint
+  *ngIf="this.form2.value.factura === 'Si'"
+  style="color: blue; cursor: pointer;"
+  (click)="Asistente()">
+  Haga click aquí para abrir el Asistente de Captura
+</mat-hint>
+
                                 <mat-hint *ngIf="isValidField1('domicilioFactura','required')" style="color: red;">El
                                     campo es obligatorio</mat-hint>
                             </mat-form-field>
@@ -150,17 +154,23 @@
 <!-- Reemplazar el input de archivo existente con este código mejorado -->
 
 <div class="file-upload-container" style="margin-top: 20px; width: 100%;">
-    <mat-form-field class="FormularioFicha1" style="width: 100%;">
-        <mat-label class="label f-z">Constancia Fiscal</mat-label>
-        <input
-            matInput
-            readonly
-            [value]="form2.get('constanciaFiscal')?.value || 'Ningún archivo seleccionado'"
-            class="input-Form">
-        <mat-hint style="color: gray;">
-            Adjuntar Constancia Fiscal (Solo archivos PDF, máximo 5MB)
-        </mat-hint>
-    </mat-form-field>
+ <mat-form-field
+  class="FormularioFicha1"
+  style="width: 100%;"
+  *ngIf="form2.get('constanciaFiscal')?.enabled"
+>
+  <mat-label class="label f-z">Constancia Fiscal</mat-label>
+  <input
+    matInput
+    readonly
+    [value]="form2.get('constanciaFiscal')?.value || 'Ningún archivo seleccionado'"
+    class="input-Form"
+  >
+  <mat-hint style="color: gray;">
+    Adjuntar Constancia Fiscal (Solo archivos PDF, máximo 5MB)
+  </mat-hint>
+</mat-form-field>
+
 
     <div style="display: flex; gap: 10px; margin-top: 10px; align-items: center;">
         <input
@@ -169,25 +179,19 @@
             accept=".pdf"
             (change)="onFileSelected($event)"
             style="display: none;">
+<button
+  *ngIf="form2.get('constanciaFiscal')?.enabled"
+  type="button"
+  class="btn1 borderNone"
+  style="background-color: #2196F3; color: white; padding: 8px 16px;"
+  (click)="fileInput.click()"
+>
+  <mat-icon>upload_file</mat-icon>
+  Seleccionar Archivo
+</button>
+
+
 
-        <button
-            type="button"
-            class="btn1 borderNone"
-            style="background-color: #2196F3; color: white; padding: 8px 16px;"
-            (click)="fileInput.click()">
-            <mat-icon>upload_file</mat-icon>
-            Seleccionar Archivo
-        </button>
-
-        <button
-            type="button"
-            class="btn1 borderNone"
-            style="background-color: #4CAF50; color: white; padding: 8px 16px;"
-            *ngIf="datos && datos.RegA_ConstanciaFiscal"
-            >
-            <mat-icon>download</mat-icon>
-            Descargar
-        </button>
     </div>
 
     <!-- Mostrar información del archivo seleccionado -->

+ 96 - 81
Front/src/app/modules/Padres/pages/registroAlumno/registroAlumno.component.ts

@@ -141,7 +141,7 @@ descargarPDF(id: string) {
   }).subscribe(({ dataAc, dataAd }: any) => {
     const data = dataAc.registro[0];
     const data1 = dataAd.registro[0];
-let segundoNombre = data.FiDI_Nombre2 || '';
+    let segundoNombre = data.FiDI_Nombre2 || '';
 
     const doc = new jsPDF();
     var pageHeight = doc.internal.pageSize.height || doc.internal.pageSize.getHeight();
@@ -149,15 +149,15 @@ let segundoNombre = data.FiDI_Nombre2 || '';
 
     doc.addImage("assets/img/Encabezado-PDF.jpg", "JPEG", 6, 10, pageWidth - 8, 27);
 
-    //TITULO DE LADO
+    // TITULO
     doc.setFont("helvetica", "italic");
     doc.setFontSize(10);
     doc.text(`DATOS GENERALES: ALUMNO`, 10, 43);
 
-    //LADO IZQUIERDO
-    //IZQUIERDO NEGRITAS
+    // ENCABEZADOS EN NEGRITA
     doc.setFont("helvetica", "bold");
     doc.setFontSize(8);
+    // Lado izquierdo
     doc.text(`Nombre del Alumno:`, 10, 50);
     doc.text(`C.U.R.P.:`, 10, 55);
     doc.text(`Lugar de Nacimiento:`, 10, 60);
@@ -165,18 +165,44 @@ let segundoNombre = data.FiDI_Nombre2 || '';
     doc.text(`Teléfono:`, 10, 70);
     doc.text(`Institución de Procedencia:`, 10, 75);
     doc.text(`Motivo de Cambio:`, 10, 80);
+    // Lado derecho
+    doc.text(`Edad:`, 135, 50);
+    doc.text(`Sexo:`, 162, 50);
+    doc.text(`Fecha de Nacimiento:`, 135, 55);
+    doc.text(`Padre de Familia puede recoger al alumno(a):`, 135, 97);
     doc.text(`Madre de Familia puede recoger al alumno (a):`, 135, 105);
+    doc.text(`Autorizo al alumno(a) a retirarse solo(a):`, 135, 112);
+
+    // VALORES EN TEXTO NORMAL
+    doc.setFont("helvetica", "normal");
+    doc.setFontSize(8);
+    // Lado izquierdo
+    doc.text(`${data.FiDI_Nombre1} ${segundoNombre} ${data.FiDI_ApellidoPaterno} ${data.FiDI_ApellidoMaterno}`, 39, 50);
+    doc.text(`${data.FiDI_CURP}`, 23, 55);
+    doc.text(`${data.FiDI_NacCiudad}, ${data.FiDI_NacEstado}`, 41, 60);
+    doc.text(`${data.FiDI_Domicilio}`, 25, 65);
+    doc.text(`${data.FiDI_Telefono}`, 24, 70);
+    doc.text(`${data.FiDI_InstProce}`, 48, 75);
+    doc.text(`${data.FiDI_MotivoCambio}`, 37, 80);
+    // Lado derecho
+    doc.text(`${data.FiDI_Edad} AÑOS`, 145, 50);
+    doc.text(`${data.FiDI_Sexo === 'F' ? 'FEMENINO' : 'MASCULINO'}`, 172, 50);
+    doc.text(`${data.FiDI_NacFechaDia.padStart(2, '0')}/${data.FiDI_NacFechaMes.padStart(2, '0')}/${data.FiDI_NacFechaAnio}`, 166, 55);
+    doc.text(`${data.FiDI_RecogerPadre}`, 198, 97);
+    doc.text(`${data.FiDI_RecogerMadre}`, 198, 105);
+    doc.text(`${data.FiDI_RetirarseSolo}`, 198, 112);
 
-    // Sección dinámica de personas autorizadas
+    // PERSONAS AUTORIZADAS (TÍTULO EN NEGRITA)
+    doc.setFont("helvetica", "bold");
     doc.setFontSize(9);
-    doc.setTextColor(0);
     doc.text("Personas autorizadas para recoger al alumno(a):", 10, 90);
+    doc.setFont("helvetica", "normal");
 
+    // Lista de personas autorizadas
     doc.setFontSize(8);
-    let y = 95; // Posición inicial para personas autorizadas
+    let y = 95;
     let personas: any[] = [];
 
-    // Parseo de datos
     if (typeof data.personasAutorizadas === 'string') {
       try {
         personas = JSON.parse(data.personasAutorizadas);
@@ -189,7 +215,6 @@ let segundoNombre = data.FiDI_Nombre2 || '';
       personas = data.personasAutorizadas;
     }
 
-    // Impresión de personas autorizadas
     if (Array.isArray(personas) && personas.length > 0) {
       personas.forEach((p: any) => {
         const nombre = p.nombre || 'N/A';
@@ -210,16 +235,13 @@ let segundoNombre = data.FiDI_Nombre2 || '';
       y += 5;
     }
 
-    // Calcular nueva posición para las secciones siguientes
+    // Ajustar posiciones para secciones siguientes
     const nuevaPosicionBase = Math.max(85, y + 7);
-
-    // Ajustar posiciones de las siguientes secciones
     const sectionPadreY = nuevaPosicionBase;
     const sectionMadreY = sectionPadreY + 40;
-    const footerY = Math.max(230, sectionMadreY +20);
 
-    // Resto del contenido con posiciones ajustadas
-    doc.text(`Autorizo al alumno(a) a retirarse solo(a):`, 135, 112);
+    // SECCIÓN PADRE (ENCABEZADOS EN NEGRITA)
+    doc.setFont("helvetica", "bold");
     doc.text(`Nombre del Padre:`, 10, sectionPadreY + 7);
     doc.text(`Nacionalidad:`, 10, sectionPadreY + 12);
     doc.text(`Estado Civil:`, 55, sectionPadreY + 12);
@@ -232,6 +254,22 @@ let segundoNombre = data.FiDI_Nombre2 || '';
     doc.text(`Celular:`, 63, sectionPadreY + 32);
     doc.text(`Correo Electrónico:`, 100, sectionPadreY + 32);
 
+    // VALORES PADRE
+    doc.setFont("helvetica", "normal");
+    doc.text(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno}`, 37, sectionPadreY + 7);
+    doc.text(`${data.FiDI_PadNacionalidad === 'M' ? 'MEXICANO' : 'EXTRANJERO'}`, 30, sectionPadreY + 12);
+    doc.text(`${data.FiDI_PadEstadoCivil === 'C' ? 'CASADO' : data.FiDI_PadEstadoCivil === 'D' ? 'DIVORCIADO' : data.FiDI_PadEstadoCivil === 'S' ? 'SOLTERO' : data.FiDI_PadEstadoCivil === 'O' ? 'OTRO' : 'SEPARADO'}`, 74, sectionPadreY + 12);
+    doc.text(`${data.FiDI_PadNacFechaDia.padStart(2, '0')}/${data.FiDI_PadNacFechaMes.padStart(2, '0')}/${data.FiDI_PadNacFechaAnio}`, 126, sectionPadreY + 12);
+    doc.text(`${data.FiDI_PadEscolaridad === 'S' ? 'SIN ESTUDIOS' : data.FiDI_PadEscolaridad === 'B' ? 'BACHILLERATO' : data.FiDI_PadEscolaridad === 'L' ? 'LICENCIATURA' : data.FiDI_PadEscolaridad === 'M' ? 'MAESTRÍA' : 'DOCTORADO'}`, 164, sectionPadreY + 12);
+    doc.text(`${data.FiDI_PadDomicilio} (C.P. ${data.FiDI_PadCP})`, 25, sectionPadreY + 17);
+    doc.text(`${data.FiDI_PadOcupacion}`, 27, sectionPadreY + 22);
+    doc.text(`${data.FiDI_PadLugTrabajo}`, 36, sectionPadreY + 27);
+    doc.text(`${data.FiDI_PadTelTrabajo}`, 39, sectionPadreY + 32);
+    doc.text(`${data.FiDI_PadCelular}`, 75, sectionPadreY + 32);
+    doc.text(`${data.FiDI_PadCorreo}`, 129, sectionPadreY + 32);
+
+    // SECCIÓN MADRE (ENCABEZADOS EN NEGRITA)
+    doc.setFont("helvetica", "bold");
     doc.text(`Nombre del Madre:`, 10, sectionMadreY + 7);
     doc.text(`Nacionalidad:`, 10, sectionMadreY + 12);
     doc.text(`Estado Civil:`, 55, sectionMadreY + 12);
@@ -244,37 +282,12 @@ let segundoNombre = data.FiDI_Nombre2 || '';
     doc.text(`Celular:`, 63, sectionMadreY + 32);
     doc.text(`Correo Electrónico:`, 100, sectionMadreY + 32);
 
-    //IZQUIERDO NORMALES
+    // VALORES MADRE
     doc.setFont("helvetica", "normal");
-    doc.setFontSize(8);
-    doc.text(`${data.FiDI_Nombre1} ${data.FiDI_Nombre2} ${data.FiDI_ApellidoPaterno} ${data.FiDI_ApellidoMaterno}`, 39, 50);
-    doc.text(`${data.FiDI_CURP}`, 23, 55);
-    doc.text(`${data.FiDI_NacCiudad}, ${data.FiDI_NacEstado}`, 41, 60);
-    doc.text(`${data.FiDI_Domicilio}`, 25, 65);
-    doc.text(`${data.FiDI_Telefono}`, 24, 70);
-    doc.text(`${data.FiDI_InstProce}`, 48, 75);
-    doc.text(`${data.FiDI_MotivoCambio}`, 37, 80);
-    doc.text(`${data.FiDI_RecogerMadre}`, 198, 105);
-    doc.text(`${data.FiDI_RetirarseSolo}`, 198, 112);
-
-    // Datos del padre
-    doc.text(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno}`, 37, sectionPadreY + 7);
-    doc.text(`${data.FiDI_PadNacionalidad === 'M' ? 'MEXICANO' : 'EXTRANJERO'}`, 30, sectionPadreY + 12);
-    doc.text(`${data.FiDI_PadEstadoCivil === 'C' ? 'CASADO' : data.FiDI_PadEstadoCivil === 'D' ? 'DIVORCIADO' : data.FiDI_PadEstadoCivil === 'S' ? 'SOLTERO' : data.FiDI_PadEstadoCivil === 'O' ? 'OTRO' : 'SEPARADO'}`, 74, sectionPadreY + 12);
-    doc.text(`${data.FiDI_PadNacFechaDia.padStart(2, '0')}/${data.FiDI_PadNacFechaMes.padStart(2, '0')}/${data.FiDI_PadNacFechaAnio} `, 126, sectionPadreY + 12);
-    doc.text(`${data.FiDI_PadEscolaridad === 'S' ? 'SIN ESTUDIOS' : data.FiDI_PadEscolaridad === 'B' ? 'BACHILLERATO' : data.FiDI_PadEscolaridad === 'L' ? 'LICENCIATURA' : data.FiDI_PadEscolaridad === 'M' ? 'MAESTRÍA' : 'DOCTORADO'}`, 164, sectionPadreY + 12);
-    doc.text(`${data.FiDI_PadDomicilio} (C.P. ${data.FiDI_PadCP})`, 25, sectionPadreY + 17);
-    doc.text(`${data.FiDI_PadOcupacion}`, 27, sectionPadreY + 22);
-    doc.text(`${data.FiDI_PadLugTrabajo}`, 36, sectionPadreY + 27);
-    doc.text(`${data.FiDI_PadTelTrabajo}`, 39, sectionPadreY + 32);
-    doc.text(`${data.FiDI_PadCelular}`, 75, sectionPadreY + 32);
-    doc.text(`${data.FiDI_PadCorreo}`, 129, sectionPadreY + 32);
-
-    // Datos de la madre
     doc.text(`${data.FiDI_MadNombre1} ${data.FiDI_MadNombre2} ${data.FiDI_MadApellidoPaterno} ${data.FiDI_MadApellidoMaterno}`, 37, sectionMadreY + 7);
     doc.text(`${data.FiDI_MadNacionalidad === 'M' ? 'MEXICANO' : 'EXTRANJERO'}`, 30, sectionMadreY + 12);
     doc.text(`${data.FiDI_MadEstadoCivil === 'C' ? 'CASADO' : data.FiDI_MadEstadoCivil === 'D' ? 'DIVORCIADO' : data.FiDI_MadEstadoCivil === 'S' ? 'SOLTERO' : data.FiDI_MadEstadoCivil === 'O' ? 'OTRO' : 'SEPARADO'}`, 74, sectionMadreY + 12);
-    doc.text(`${data.FiDI_MadNacFechaDia.padStart(2, '0')}/${data.FiDI_MadNacFechaMes.padStart(2, '0')}/${data.FiDI_MadNacFechaAnio} `, 126, sectionMadreY + 12);
+    doc.text(`${data.FiDI_MadNacFechaDia.padStart(2, '0')}/${data.FiDI_MadNacFechaMes.padStart(2, '0')}/${data.FiDI_MadNacFechaAnio}`, 126, sectionMadreY + 12);
     doc.text(`${data.FiDI_MadEscolaridad === 'S' ? 'SIN ESTUDIOS' : data.FiDI_MadEscolaridad === 'B' ? 'BACHILLERATO' : data.FiDI_MadEscolaridad === 'L' ? 'LICENCIATURA' : data.FiDI_MadEscolaridad === 'M' ? 'MAESTRÍA' : 'DOCTORADO'}`, 164, sectionMadreY + 12);
     doc.text(`${data.FiDI_MadDomicilio} (C.P. ${data.FiDI_PadCP})`, 25, sectionMadreY + 17);
     doc.text(`${data.FiDI_MadOcupacion}`, 27, sectionMadreY + 22);
@@ -283,46 +296,48 @@ let segundoNombre = data.FiDI_Nombre2 || '';
     doc.text(`${data.FiDI_MadCelular}`, 75, sectionMadreY + 32);
     doc.text(`${data.FiDI_MadCorreo}`, 129, sectionMadreY + 32);
 
-  // Update the addText helper function to support alignment
-const addText = (text: string, x: number, y: number, font: string = 'normal', size: number = 8, align?: 'left' | 'center' | 'right') => {
-  doc.setFont("helvetica", font);
-  doc.setFontSize(size);
-  if (align) {
-    doc.text(text, x, y, { align });
-  } else {
-    doc.text(text, x, y);
-  }
-  return y + innerHeight;
-};
-
-// Then update the footer section to match your original implementation:
-// Pie de página
-addText(`La información que contiene esta hoja es verídica y estoy de acuerdo y enterado de los lineamientos y ofrecimientos del CEN.D.I SONRISAS Y COLEGIO`, 10, footerY);
-addText(`ABC, así como del convenio de ley del mismo en cuanto a mis pagos de inscripción y colegiaturas.`, 10, footerY + 5);
-addText(`__________________________________________________`, pageWidth / 2, footerY + 25, 'normal', 9, 'center');
-addText('ACEPTO', pageWidth / 2, footerY + 30, 'normal', 9, 'center');
-addText(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno} Y/0 ${data.FiDI_MadNombre1} ${data.FiDI_MadNombre2} ${data.FiDI_MadApellidoPaterno} ${data.FiDI_MadApellidoMaterno}`, pageWidth / 2, footerY + 35, 'normal', 9, 'center');
-addText('Manifestamos que las firmas aquí mostradas son las autorizadas para firmar la documentación y las boletas del alumno(a).', pageWidth / 2, footerY + 45, 'normal', 9, 'center');
-addText(`____________________________________`, (pageWidth / 5) - 10, footerY + 55);
-addText(`____________________________________`, (pageWidth / 5) * 3, footerY + 55);
-addText(`${data.FiDI_MadNombre1} ${data.FiDI_MadNombre2} ${data.FiDI_MadApellidoPaterno} ${data.FiDI_MadApellidoMaterno}`, ((pageWidth / 5) * 2) - 24, footerY + 60, 'normal', 9, 'center');
-addText(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno}`, ((pageWidth / 5) * 4) - 14, footerY + 60, 'normal', 9, 'center');
-addText(`Página 1 de 5`, pageWidth - 30, pageHeight - 10);
-    //LADO DERECHO
+    doc.text(`Página 1 de 1`, pageWidth - 30, pageHeight - 10);
+
+
+    // Añadir nueva página para firmas y leyendas
+    doc.addPage();
+    doc.addImage("assets/img/Encabezado-PDF.jpg", "JPEG", 6, 10, pageWidth - 8, 27);
+
+    // Posiciones iniciales para la nueva página
+    const startY = 50;
+
+    // Pie de página en nueva página
+    doc.setFont("helvetica", "normal");
+    doc.setFontSize(9);
+    doc.text(`La información que contiene esta hoja es verídica y estoy de acuerdo y enterado de los lineamientos y ofrecimientos del CEN.D.I SONRISAS Y COLEGIO`,
+             10, startY, { maxWidth: pageWidth - 20, align: 'left' });
+    doc.text(`ABC, así como del convenio de ley del mismo en cuanto a mis pagos de inscripción y colegiaturas.`,
+             10, startY + 10, { maxWidth: pageWidth - 20, align: 'left' });
+
+    // Firma y nombre del padre/madre
+    doc.text(`__________________________________________________`, pageWidth / 2, startY + 40, { align: 'center' });
+    doc.text('ACEPTO', pageWidth / 2, startY + 45, { align: 'center' });
+    doc.text(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno} Y/0 ${data.FiDI_MadNombre1} ${data.FiDI_MadNombre2} ${data.FiDI_MadApellidoPaterno} ${data.FiDI_MadApellidoMaterno}`,
+             pageWidth / 2, startY + 50, { align: 'center' });
+
+    // Nota sobre firmas
+    doc.text('Manifestamos que las firmas aquí mostradas son las autorizadas para firmar la documentación y las boletas del alumno(a).',
+             pageWidth / 2, startY + 60, { align: 'center' });
+
+    // Firmas individuales
+    doc.text(`____________________________________`, (pageWidth / 5) - 10, startY + 80);
+    doc.text(`____________________________________`, (pageWidth / 5) * 3, startY + 80);
+    doc.text(`${data.FiDI_MadNombre1} ${data.FiDI_MadNombre2} ${data.FiDI_MadApellidoPaterno} ${data.FiDI_MadApellidoMaterno}`,
+             ((pageWidth / 5) * 2) - 24, startY + 85, { align: 'center' });
+    doc.text(`${data.FiDI_PadNombre1} ${data.FiDI_PadNombre2} ${data.FiDI_PadApellidoPaterno} ${data.FiDI_PadApellidoMaterno}`,
+             ((pageWidth / 5) * 4) - 14, startY + 85, { align: 'center' });
+
+    // Número de página
+    doc.text(`Página 2 de 2`, pageWidth - 30, pageHeight - 10);
     //DERECHO NEGRITAS
-    doc.setFont("helvetica", "bold");
-    doc.setFontSize(8);
-    doc.text(`Edad:`, 135, 50);
-    doc.text(`Sexo:`, 162, 50);
-    doc.text(`Fecha de Nacimiento:`, 135, 55);
-    doc.text(`Padre de Familia puede recoger al alumno(a):`, 135, 97);
+
     //DERECHO NORMALES
-    doc.setFont("helvetica", "normal");
-    doc.setFontSize(8);
-    doc.text(`${data.FiDI_Edad} AÑOS`, 145, 50);
-    doc.text(`${data.FiDI_Sexo === 'F' ? 'FEMENINO' : 'MASCULINO'}`, 172, 50);
-    doc.text(`${data.FiDI_NacFechaDia.padStart(2, '0')}/${data.FiDI_NacFechaMes.padStart(2, '0')}/${data.FiDI_NacFechaAnio} `, 166, 55);
-    doc.text(`${data.FiDI_RecogerPadre}`, 198, 97);
+
       // -----------------------------------------------------------------------------------------------------------------------------------------------------------
       //segunda página
       doc.addPage();
@@ -574,7 +589,7 @@ addText(`Página 1 de 5`, pageWidth - 30, pageHeight - 10);
       doc.text(`${data1.RegA_BecaCurso.toUpperCase()}`, 135, 108);
       doc.text(`${data1.RegA_BecaCurso.toUpperCase()}`, 179, 108);
       doc.text(`${data1.RegA_RequiereFactura.toUpperCase()}`, 54, 128);
-
+      doc.text(`${data1.RegA_MetodoPago}`,56, 133);
       doc.text(`${data1.RegA_RfcFactura}`, 46, 138);
       doc.text(`${data1.RegA_NombreFactura}`, 68, 143);
       const direccionFactura = data1.RegA_DireccionFactura === 'NA' ? 'No Aplica' : data1.RegA_DireccionFactura;