unit DATOS;

interface

uses
  Data.DB,bde.dbtables,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls,
  Vcl.Grids, Vcl.DBGrids, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, Vcl.Tabs, Vcl.ComCtrls, Vcl.Mask, Vcl.DBCtrls, ZAbstractConnection,
  ZConnection, ZAbstractTable, Vcl.ExtDlgs, Vcl.Imaging.jpeg, frxClass, frxDBSet,
  frxExportPDF, frxBarcode, Vcl.Buttons;

type
  TDM = class(TDataModule)
    recibos: TZQuery;
    dsrecibos: TDataSource;
    pagos: TZQuery;
    pagosid: TIntegerField;
    pagoside: TIntegerField;
    pagosidemp: TIntegerField;
    pagosfecha: TDateField;
    pagosnomina: TFloatField;
    pagosbanco: TFloatField;
    pagosefectivo: TFloatField;
    pagosobservaciones: TWideStringField;
    pagospagado: TSmallintField;
    dspagos: TDataSource;
    libros: TZQuery;
    librosid: TWideStringField;
    libroside: TIntegerField;
    librostipo: TWideStringField;
    librosfecha_alta: TDateField;
    librosfecha_baja: TDateField;
    librostitulo: TWideStringField;
    libroseditorial: TWideStringField;
    librosautor: TWideStringField;
    librosnivel: TWideStringField;
    libroscds: TSmallintField;
    librosnum_cds: TIntegerField;
    librosprestado: TSmallintField;
    librosmp3: TSmallintField;
    librosarchivomp3: TWideStringField;
    librostipo_libro: TWideStringField;
    librosgramatica_otros: TSmallintField;
    dslibros: TDataSource;
    alquilar: TZQuery;
    alquilarid: TIntegerField;
    alquilaride: TIntegerField;
    alquilaridl: TWideStringField;
    alquilarida: TIntegerField;
    alquilarfecha: TDateField;
    alquilarfecha_limite: TDateField;
    alquilarfecha_devolucion: TDateField;
    alquilarimporte_devuelto: TFloatField;
    alquilarseloqueda: TSmallintField;
    alquilardevuelto: TSmallintField;
    dsalquilar: TDataSource;
    dbjolly: TZConnection;
    empresa: TZQuery;
    dsempresa: TDataSource;
    dsclientes: TDataSource;
    clientes: TZQuery;
    alumnos: TZQuery;
    alumnosid: TIntegerField;
    alumnoside: TIntegerField;
    alumnosidc: TIntegerField;
    alumnosnombre: TWideStringField;
    alumnosapellidos: TWideStringField;
    alumnosnombre_completo: TWideStringField;
    alumnosfecha_nacimiento: TDateField;
    alumnosob_medicas: TWideStringField;
    alumnosob_varias: TWideStringField;
    alumnosdireccion: TWideStringField;
    alumnospoblacion: TWideStringField;
    alumnoscod_post: TWideStringField;
    alumnosprovincia: TWideStringField;
    alumnoscentroescolar: TWideStringField;
    alumnosfecha_alta: TDateField;
    alumnosprueba_nivel: TWideStringField;
    alumnostelefono1: TWideStringField;
    alumnosob_telefono1: TWideStringField;
    alumnostelefono2: TWideStringField;
    alumnosob_telefono2: TWideStringField;
    alumnosnombre_padre_madre: TWideStringField;
    alumnospersona_autorizada: TWideStringField;
    alumnosdescuento: TFloatField;
    alumnosactivo: TIntegerField;
    alumnosetiqueta: TIntegerField;
    dsalumnos: TDataSource;
    dscursos: TDataSource;
    cursos: TZQuery;
    cursosid: TIntegerField;
    cursoside: TIntegerField;
    cursosnombre: TWideStringField;
    cursosfechainicio: TDateField;
    cursosfechafin: TDateField;
    cursosprecio_material: TFloatField;
    cursosactivo: TIntegerField;
    aulas: TZQuery;
    dsaulas: TDataSource;
    dsgrupos: TDataSource;
    grupos: TZQuery;
    gruposid: TIntegerField;
    gruposide: TIntegerField;
    gruposidcurso: TIntegerField;
    gruposidaula: TIntegerField;
    gruposcurso: TWideStringField;
    gruposnombre: TWideStringField;
    gruposfechainicio: TDateField;
    gruposfechafin: TDateField;
    grupospreciototal: TFloatField;
    grupospreciomensual: TFloatField;
    gruposnum_dias: TIntegerField;
    gruposdias: TWideStringField;
    gruposhorainicio: TTimeField;
    gruposhorafin: TTimeField;
    gruposhorassemanales: TIntegerField;
    gruposmasdias: TWideStringField;
    gruposhorainicio2: TTimeField;
    gruposhorafin2: TTimeField;
    gruposplazas: TIntegerField;
    gruposactivo: TIntegerField;
    gruposfechabaja: TDateField;
    gruposmotivobaja: TWideStringField;
    asistir: TZQuery;
    asistirid: TIntegerField;
    asistiride: TIntegerField;
    asistirida: TIntegerField;
    asistiridg: TIntegerField;
    asistirfechainicio: TDateField;
    asistirfechafin: TDateField;
    asistirfechabaja: TDateField;
    asistirmotivo_baja: TWideStringField;
    asistirdevoluciones: TSmallintField;
    asistirimporte_abono: TFloatField;
    asistirfecha_abono: TDateField;
    dsasistir: TDataSource;
    empleados: TZQuery;
    impartir: TZQuery;
    impartiride: TIntegerField;
    impartiridp: TIntegerField;
    impartiridg: TIntegerField;
    impartirfechainicio: TDateField;
    impartirfechafin: TDateField;
    lista_espera: TZQuery;
    lista_esperaid: TIntegerField;
    lista_esperaide: TIntegerField;
    lista_esperafecha: TDateField;
    lista_esperanombre: TWideStringField;
    lista_esperaapellidos: TWideStringField;
    lista_esperanombre_completo: TWideStringField;
    lista_esperafecha_nac: TDateField;
    lista_esperatelefono: TWideStringField;
    lista_esperanivel: TWideStringField;
    lista_esperagrupo: TWideStringField;
    lista_esperaobservaciones: TWideStringField;
    facturas: TZQuery;
    facturasid: TIntegerField;
    facturaside: TIntegerField;
    facturasidc: TIntegerField;
    facturasfecha: TDateField;
    facturasbase: TFloatField;
    facturastipo_iva: TFloatField;
    facturasimporte_iva: TFloatField;
    facturastotal: TFloatField;
    notas: TZQuery;
    notasid: TIntegerField;
    notaside: TIntegerField;
    notasida: TIntegerField;
    notasidg: TIntegerField;
    notasfechaeval1: TDateField;
    notaslistening1: TFloatField;
    notasspeaking1: TFloatField;
    notasreading1: TFloatField;
    notaswriting1: TFloatField;
    notasvocabulary1: TFloatField;
    notasdesarrollo1: TFloatField;
    notasfechaeval2: TDateField;
    notaslistenig2: TFloatField;
    notasspeaking2: TFloatField;
    notasreading2: TFloatField;
    notaswriting2: TFloatField;
    notasvocabulary2: TFloatField;
    notasdesarrollo2: TFloatField;
    notaspromocionar_a: TWideStringField;
    dsnotas: TDataSource;
    linfacturas: TZQuery;
    linfacturaside: TIntegerField;
    linfacturasidf: TIntegerField;
    linfacturaslinea: TIntegerField;
    linfacturasconcepto: TWideStringField;
    linfacturascantidad: TFloatField;
    linfacturasimporte: TFloatField;
    dsfacturas: TDataSource;
    dslinfacturas: TDataSource;
    dslista_espera: TDataSource;
    dsimpartir: TDataSource;
    dsempleados: TDataSource;
    qalumnos: TZReadOnlyQuery;
    dsqalumnos: TDataSource;
    qalumnosid: TIntegerField;
    qalumnosnombre_completo: TWideStringField;
    qalumnoside: TIntegerField;
    qclientealumno: TZReadOnlyQuery;
    qclientealumnoid: TIntegerField;
    qclientealumnoide: TIntegerField;
    qclientealumnonombre_completo: TWideStringField;
    qclientealumnonif: TWideStringField;
    qclientealumnonombre: TWideStringField;
    qclientealumnoapellidos: TWideStringField;
    qclientealumnodireccion: TWideStringField;
    qclientealumnopoblacion: TWideStringField;
    qclientealumnocodpost: TWideStringField;
    qclientealumnoprovincia: TWideStringField;
    qclientealumnotelefono1: TWideStringField;
    qclientealumnotelefono2: TWideStringField;
    qclientealumnoemail: TWideStringField;
    qclientealumnoformapago: TWideStringField;
    qclientealumnoentidad: TWideStringField;
    qclientealumnoiban: TWideStringField;
    qclientealumnocuenta: TWideStringField;
    qclientealumnoswift: TWideStringField;
    qclientealumnoactivo: TIntegerField;
    qclientealumnodescuento: TIntegerField;
    qclientes: TZReadOnlyQuery;
    dsqclientes: TDataSource;
    dsqclientesalumnos: TDataSource;
    imagenes_empleados: TZQuery;
    dsimg_empleados: TDataSource;
    imagenes_libros: TZQuery;
    IntegerField7: TIntegerField;
    IntegerField8: TIntegerField;
    IntegerField9: TIntegerField;
    IntegerField10: TIntegerField;
    WideStringField3: TWideStringField;
    BlobField2: TBlobField;
    dsimg_libros: TDataSource;
    alumnospromociona: TWideStringField;
    alumnostelefono_alumno: TWideStringField;
    alumnoscorreo_alumno: TWideStringField;
    img: TZTable;
    imgid: TIntegerField;
    imgide: TIntegerField;
    imgidalumno: TIntegerField;
    imgidempleado: TIntegerField;
    imgidlibro: TWideStringField;
    imgimagen: TBlobField;
    imgtipo: TWideStringField;
    imagenes_librostipo: TWideStringField;
    dsqrecibosalumno: TDataSource;
    qasistiralumno: TZReadOnlyQuery;
    dsqasistiralumno: TDataSource;
    qasistiralumnoid: TIntegerField;
    qasistiralumnoide: TIntegerField;
    qasistiralumnoida: TIntegerField;
    qasistiralumnoidg: TIntegerField;
    qasistiralumnofechainicio: TDateField;
    qasistiralumnofechafin: TDateField;
    qasistiralumnofechabaja: TDateField;
    qasistiralumnomotivo_baja: TWideStringField;
    qasistiralumnodevoluciones: TSmallintField;
    qasistiralumnoimporte_abono: TFloatField;
    qasistiralumnofecha_abono: TDateField;
    qasistiralumnocurso: TWideStringField;
    qasistiralumnonombre: TWideStringField;
    qempleados: TZReadOnlyQuery;
    dsqempleados: TDataSource;
    qempleadosid: TIntegerField;
    qempleadoside: TIntegerField;
    qempleadosnombre_completo: TWideStringField;
    imagenes_empleadosid: TIntegerField;
    imagenes_empleadoside: TIntegerField;
    imagenes_empleadosidalumno: TIntegerField;
    imagenes_empleadosidempleado: TIntegerField;
    imagenes_empleadosidlibro: TWideStringField;
    imagenes_empleadosimagen: TBlobField;
    imagenes_empleadostipo: TWideStringField;
    imagenes_empleadosarchivo: TWideStringField;
    empleadosid: TIntegerField;
    empleadoside: TIntegerField;
    empleadosnif: TWideStringField;
    empleadosnombre: TWideStringField;
    empleadosapellidos: TWideStringField;
    empleadosnombre_completo: TWideStringField;
    empleadospoblacion: TWideStringField;
    empleadosdireccion: TWideStringField;
    empleadoscp: TWideStringField;
    empleadosprovincia: TWideStringField;
    empleadostelefono1: TWideStringField;
    empleadostelefono2: TWideStringField;
    empleadosemail: TWideStringField;
    empleadosentidad: TWideStringField;
    empleadoscc: TWideStringField;
    empleadossalario: TFloatField;
    empleadosprecio_km: TFloatField;
    empleadosprecio_hx: TFloatField;
    empleadosusuario: TWideStringField;
    empleadospassword: TWideStringField;
    empleadosactivo: TIntegerField;
    empleadostipo_acceso: TIntegerField;
    dsqrecibosempleados: TDataSource;
    qimpartirgrupo: TZReadOnlyQuery;
    dsqimpartir: TDataSource;
    qcursos: TZReadOnlyQuery;
    dsqcursos: TDataSource;
    qcursosid: TIntegerField;
    qcursoside: TIntegerField;
    qcursosnombre: TWideStringField;
    qcursosanyo_escolar: TWideStringField;
    cursosprecio_curso: TFloatField;
    cursosprecio_mes: TFloatField;
    cursosanyo_escolar: TWideStringField;
    qgrupocurso: TZReadOnlyQuery;
    dsqgrupocurso: TDataSource;
    qgrupoalumnos: TZReadOnlyQuery;
    dsqgrupoalumnos: TDataSource;
    qgrupocursoid: TIntegerField;
    qgrupocursoide: TIntegerField;
    qgrupocursoidcurso: TIntegerField;
    qgrupocursoidaula: TIntegerField;
    qgrupocursocurso: TWideStringField;
    qgrupocursonombre: TWideStringField;
    qgrupocursonombre_1: TWideStringField;
    qimpartirgrupoide: TIntegerField;
    qimpartirgrupoidp: TIntegerField;
    qimpartirgrupoidg: TIntegerField;
    qimpartirgrupofechainicio: TDateField;
    qimpartirgrupofechafin: TDateField;
    qimpartirgrupocurso: TWideStringField;
    qimpartirgruponombre: TWideStringField;
    qgrupocursofechainicio: TDateField;
    qgrupocursofechafin: TDateField;
    qgrupocursopreciototal: TFloatField;
    qgrupocursopreciomensual: TFloatField;
    qgrupocursonum_dias: TIntegerField;
    qgrupocursodias: TWideStringField;
    qgrupocursohorainicio: TTimeField;
    qgrupocursohorafin: TTimeField;
    qgrupocursohorassemanales: TIntegerField;
    qgrupocursomasdias: TWideStringField;
    qgrupocursohorainicio2: TTimeField;
    qgrupocursohorafin2: TTimeField;
    qgrupocursoplazas: TIntegerField;
    qgrupocursoactivo: TIntegerField;
    qgrupocursofechabaja: TDateField;
    qgrupocursomotivobaja: TWideStringField;
    qgrupocursodocumentacion: TBlobField;
    qgrupocursoplazas_ocupadas: TIntegerField;
    qgrupocursoplazas_libres: TIntegerField;
    sesiones: TZQuery;
    dssesiones: TDataSource;
    sesiones_alumnos: TZQuery;
    dssesiones_alumnos: TDataSource;
    sesioneside: TIntegerField;
    sesionesfecha: TDateField;
    sesiones_alumnoside: TIntegerField;
    sesiones_alumnosidp: TIntegerField;
    sesiones_alumnosidg: TIntegerField;
    sesiones_alumnosfecha: TDateField;
    sesiones_alumnosida: TIntegerField;
    sesiones_alumnosnombre: TWideStringField;
    sesiones_alumnosasiste: TIntegerField;
    dsimpartiractivo: TDataSource;
    qimpartiractivo: TZReadOnlyQuery;
    qimpartiractivoide: TIntegerField;
    qimpartiractivoidp: TIntegerField;
    qimpartiractivoidg: TIntegerField;
    qimpartiractivofechainicio: TDateField;
    qimpartiractivofechafin: TDateField;
    qimpartiractivocurso: TWideStringField;
    qimpartiractivonombre: TWideStringField;
    sesionesobservaciones: TWideStringField;
    sesiones_alumnosobservaciones: TWideStringField;
    sesioneshora_inicio: TTimeField;
    sesioneshora_fin: TTimeField;
    sesiones_alumnosf_justificada: TIntegerField;
    qcontrol_asistencia: TZReadOnlyQuery;
    dsqcontrol_asistencia: TDataSource;
    qcontrol_asistenciaide: TIntegerField;
    qcontrol_asistenciaidp: TIntegerField;
    qcontrol_asistenciaidg: TIntegerField;
    qcontrol_asistenciafecha: TDateField;
    qcontrol_asistenciaida: TIntegerField;
    qcontrol_asistencianombre: TWideStringField;
    qcontrol_asistenciaasiste: TIntegerField;
    qcontrol_asistenciaf_justificada: TIntegerField;
    qcontrol_asistenciaobservaciones: TWideStringField;
    qcontrol_asistenciagrupo: TWideStringField;
    qcontrol_asistenciaprofesor: TWideStringField;
    qgrupocursoprofesor: TWideStringField;
    qrecibosalumno: TZQuery;
    qrecibosalumnoid: TIntegerField;
    qrecibosalumnoide: TIntegerField;
    qrecibosalumnoidc: TIntegerField;
    qrecibosalumnoida: TIntegerField;
    qrecibosalumnoidg: TIntegerField;
    qrecibosalumnofecharecibo: TDateField;
    qrecibosalumnofechacobro: TDateField;
    qrecibosalumnoconcepto: TWideStringField;
    qrecibosalumnoimporte: TFloatField;
    qrecibosalumnoentrega: TFloatField;
    qrecibosalumnopagado: TIntegerField;
    qrecibosalumnodomiciliado: TIntegerField;
    qrecibosalumnomaterial: TIntegerField;
    qrecibosempleados: TZQuery;
    qrecibosempleadosid: TIntegerField;
    qrecibosempleadoside: TIntegerField;
    qrecibosempleadosidemp: TIntegerField;
    qrecibosempleadosfecha: TDateField;
    qrecibosempleadosnomina: TFloatField;
    qrecibosempleadosbanco: TFloatField;
    qrecibosempleadosefectivo: TFloatField;
    qrecibosempleadosobservaciones: TWideStringField;
    qrecibosempleadospagado: TSmallintField;
    qaux: TZReadOnlyQuery;
    tavisos: TZQuery;
    tavisoside: TIntegerField;
    tavisosidp: TIntegerField;
    tavisosidg: TIntegerField;
    tavisosfecha: TDateField;
    tavisoscomentario: TWideStringField;
    dsavisos: TDataSource;
    gruposdocumentacion: TBlobField;
    gruposplazas_ocupadas: TIntegerField;
    gruposplazas_libres: TIntegerField;
    qasistiralumnoidp: TIntegerField;
    qasistiralumnonomprofesor: TWideStringField;
    formaspago: TZQuery;
    dsformaspago: TDataSource;
    formaspagoid: TIntegerField;
    formaspagoide: TIntegerField;
    formaspagoids: TWideStringField;
    formaspagodescripcion: TWideStringField;
    formaspagoactivo: TIntegerField;
    qclientesid: TIntegerField;
    qclienteside: TIntegerField;
    qclientesnombre_completo: TWideStringField;
    clientesid: TIntegerField;
    clienteside: TIntegerField;
    clientesnif: TWideStringField;
    clientesnombre: TWideStringField;
    clientesapellidos: TWideStringField;
    clientesnombre_completo: TWideStringField;
    clientesdireccion: TWideStringField;
    clientespoblacion: TWideStringField;
    clientescodpost: TWideStringField;
    clientesprovincia: TWideStringField;
    clientestelefono1: TWideStringField;
    clientestelefono2: TWideStringField;
    clientesemail: TWideStringField;
    clientesformapago: TWideStringField;
    clientesentidad: TWideStringField;
    clientesiban: TWideStringField;
    clientescuenta: TWideStringField;
    clientesswift: TWideStringField;
    clientesactivo: TIntegerField;
    clientesdescuento: TIntegerField;
    descuentos: TZQuery;
    dsdescuentos: TDataSource;
    descuentosid: TIntegerField;
    descuentoside: TIntegerField;
    descuentosdescuento: TFloatField;
    descuentosnum_hijos: TIntegerField;
    qalumnosclientes: TZQuery;
    dsqalumnosclientes: TDataSource;
    qalumnosclientesid: TIntegerField;
    qalumnosclienteside: TIntegerField;
    qalumnosclientesidc: TIntegerField;
    qalumnosclientesnombre_completo: TWideStringField;
    qalumnosclientesdescuento: TFloatField;
    qalumnosclientesactivo: TIntegerField;
    qgruposclientes: TZQuery;
    qgruposclienteside: TIntegerField;
    qgruposclientesidc: TIntegerField;
    qgruposclientesnomalumno: TWideStringField;
    qgruposclientesida: TIntegerField;
    qgruposclientesidg: TIntegerField;
    qgruposclientesnomgrupo: TWideStringField;
    qgruposclientespreciomensual: TFloatField;
    qgruposclientesnomprofesor: TWideStringField;
    dsqgruposclientes: TDataSource;
    dsqreciboscliente: TDataSource;
    qreciboscliente: TZQuery;
    qrecibosclienteid: TIntegerField;
    qrecibosclienteide: TIntegerField;
    qrecibosclienteidc: TIntegerField;
    qrecibosclienteida: TIntegerField;
    qrecibosclienteidg: TIntegerField;
    qrecibosclientefecharecibo: TDateField;
    qrecibosclientefechacobro: TDateField;
    qrecibosclienteconcepto: TWideStringField;
    qrecibosclienteimporte: TFloatField;
    qrecibosclienteentrega: TFloatField;
    qrecibosclientepagado: TIntegerField;
    qrecibosclientedomiciliado: TIntegerField;
    qrecibosclientematerial: TIntegerField;
    qgrupos: TZReadOnlyQuery;
    dsqgrupos: TDataSource;
    qaulas: TZReadOnlyQuery;
    dsqaulas: TDataSource;
    qaulasid: TIntegerField;
    qaulaside: TIntegerField;
    qaulasnombre: TWideStringField;
    qaulasmetros: TFloatField;
    qaulasidp: TIntegerField;
    qaulascolor: TWideStringField;
    DIAS: TZReadOnlyQuery;
    DIASDIA: TWideStringField;
    dsdias: TDataSource;
    qgruposid: TIntegerField;
    qgruposide: TIntegerField;
    qgruposidcurso: TIntegerField;
    qgruposidaula: TIntegerField;
    qgruposcurso: TWideStringField;
    qgruposnombre: TWideStringField;
    qgruposfechainicio: TDateField;
    qgruposfechafin: TDateField;
    qgrupospreciototal: TFloatField;
    qgrupospreciomensual: TFloatField;
    qgruposnum_dias: TIntegerField;
    qgruposdias: TWideStringField;
    qgruposhorainicio: TTimeField;
    qgruposhorafin: TTimeField;
    qgruposhorassemanales: TIntegerField;
    qgruposmasdias: TWideStringField;
    qgruposhorainicio2: TTimeField;
    qgruposhorafin2: TTimeField;
    qgruposplazas: TIntegerField;
    qgruposactivo: TIntegerField;
    qgruposfechabaja: TDateField;
    qgruposmotivobaja: TWideStringField;
    qgruposdocumentacion: TBlobField;
    qgruposplazas_ocupadas: TIntegerField;
    qgruposplazas_libres: TIntegerField;
    qgruposaula: TWideStringField;
    qgruposprofesor: TWideStringField;
    qgrupoalumnos2: TZReadOnlyQuery;
    dsqgrupoalumnos2: TDataSource;
    clientesidfp: TIntegerField;
    formaspagodomiciliado: TIntegerField;
    qrecibosclienteforma_pago: TIntegerField;
    qrecibosclientedoc_pago: TWideStringField;
    qrecibosclientedescuento: TIntegerField;
    qrecibosclienteimportefinal: TFloatField;
    qrecibosclienteseleccionado: TIntegerField;
    dsqreciboscliente2: TDataSource;
    qreciboscliente2: TZQuery;
    qgrupoalumnos2id: TIntegerField;
    qgrupoalumnos2ide: TIntegerField;
    qgrupoalumnos2idc: TIntegerField;
    qgrupoalumnos2nombre: TWideStringField;
    qgrupoalumnos2apellidos: TWideStringField;
    qgrupoalumnos2nombre_completo: TWideStringField;
    qgrupoalumnos2fecha_nacimiento: TDateField;
    qgrupoalumnos2ob_medicas: TWideStringField;
    qgrupoalumnos2ob_varias: TWideStringField;
    qgrupoalumnos2direccion: TWideStringField;
    qgrupoalumnos2poblacion: TWideStringField;
    qgrupoalumnos2cod_post: TWideStringField;
    qgrupoalumnos2provincia: TWideStringField;
    qgrupoalumnos2centroescolar: TWideStringField;
    qgrupoalumnos2fecha_alta: TDateField;
    qgrupoalumnos2prueba_nivel: TWideStringField;
    qgrupoalumnos2telefono1: TWideStringField;
    qgrupoalumnos2ob_telefono1: TWideStringField;
    qgrupoalumnos2telefono2: TWideStringField;
    qgrupoalumnos2ob_telefono2: TWideStringField;
    qgrupoalumnos2nombre_padre_madre: TWideStringField;
    qgrupoalumnos2persona_autorizada: TWideStringField;
    qgrupoalumnos2descuento: TFloatField;
    qgrupoalumnos2activo: TIntegerField;
    qgrupoalumnos2etiqueta: TIntegerField;
    qgrupoalumnos2promociona: TWideStringField;
    qgrupoalumnos2telefono_alumno: TWideStringField;
    qgrupoalumnos2correo_alumno: TWideStringField;
    qgrupoalumnos2id_1: TIntegerField;
    qgrupoalumnos2ide_1: TIntegerField;
    qgrupoalumnos2ida: TIntegerField;
    qgrupoalumnos2idg: TIntegerField;
    qgrupoalumnos2fechainicio: TDateField;
    qgrupoalumnos2fechafin: TDateField;
    qgrupoalumnos2fechabaja: TDateField;
    qgrupoalumnos2motivo_baja: TWideStringField;
    qgrupoalumnos2devoluciones: TSmallintField;
    qgrupoalumnos2importe_abono: TFloatField;
    qgrupoalumnos2fecha_abono: TDateField;
    qgrupoalumnos2curso: TWideStringField;
    qgrupoalumnos2nombre_1: TWideStringField;
    qgrupoalumnos2edad: TIntegerField;
    gruposnota_minima: TFloatField;
    alumnosautomatico: TIntegerField;
    qclientesnif: TWideStringField;
    qreciboscliente2id: TIntegerField;
    qreciboscliente2ide: TIntegerField;
    qreciboscliente2idc: TIntegerField;
    qreciboscliente2ida: TIntegerField;
    qreciboscliente2idg: TIntegerField;
    qreciboscliente2fecharecibo: TDateField;
    qreciboscliente2fechacobro: TDateField;
    qreciboscliente2concepto: TWideStringField;
    qreciboscliente2importe: TFloatField;
    qreciboscliente2entrega: TFloatField;
    qreciboscliente2pagado: TIntegerField;
    qreciboscliente2domiciliado: TIntegerField;
    qreciboscliente2material: TIntegerField;
    qreciboscliente2forma_pago: TIntegerField;
    qreciboscliente2doc_pago: TWideStringField;
    qreciboscliente2descuento: TIntegerField;
    qreciboscliente2importefinal: TFloatField;
    qreciboscliente2seleccionado: TIntegerField;
    qnotasgrupo: TZReadOnlyQuery;
    qnotasgrupoid: TIntegerField;
    qnotasgrupoide: TIntegerField;
    qnotasgrupoida: TIntegerField;
    qnotasgrupoidg: TIntegerField;
    qnotasgrupofechaeval1: TDateField;
    qnotasgrupolistening1: TFloatField;
    qnotasgrupospeaking1: TFloatField;
    qnotasgruporeading1: TFloatField;
    qnotasgrupowriting1: TFloatField;
    qnotasgrupovocabulary1: TFloatField;
    qnotasgrupodesarrollo1: TFloatField;
    qnotasgrupofechaeval2: TDateField;
    qnotasgrupolistenig2: TFloatField;
    qnotasgrupospeaking2: TFloatField;
    qnotasgruporeading2: TFloatField;
    qnotasgrupowriting2: TFloatField;
    qnotasgrupovocabulary2: TFloatField;
    qnotasgrupodesarrollo2: TFloatField;
    qnotasgrupoobservaciones: TWideStringField;
    qnotasgrupopromocionar_a: TWideStringField;
    qnotasgruponotafinal: TFloatField;
    dsqnotasgrupo: TDataSource;
    qnotasalumno: TZReadOnlyQuery;
    IntegerField1: TIntegerField;
    IntegerField2: TIntegerField;
    IntegerField3: TIntegerField;
    IntegerField4: TIntegerField;
    DateField1: TDateField;
    FloatField1: TFloatField;
    FloatField2: TFloatField;
    FloatField3: TFloatField;
    FloatField4: TFloatField;
    FloatField5: TFloatField;
    FloatField6: TFloatField;
    DateField2: TDateField;
    FloatField7: TFloatField;
    FloatField8: TFloatField;
    FloatField9: TFloatField;
    FloatField10: TFloatField;
    FloatField11: TFloatField;
    FloatField12: TFloatField;
    WideStringField1: TWideStringField;
    WideStringField2: TWideStringField;
    FloatField13: TFloatField;
    dsqnotasalumno: TDataSource;
    qnotasgrupoalumno: TWideStringField;
    qnotasgrupoprofesor: TWideStringField;
    qnotasgrupogrupo: TWideStringField;
    notasnotafinal: TFloatField;
    notasobservaciones: TWideMemoField;
    notasnota1eval: TFloatField;
    notasnota2eval: TFloatField;
    notaslistening3: TFloatField;
    notasreading3: TFloatField;
    notaswriting3: TFloatField;
    notasspeaking3: TFloatField;
    notasvocabulary3: TFloatField;
    notasdesarrollo3: TFloatField;
    notasobservaciones2: TWideMemoField;
    qgruposp: TZReadOnlyQuery;
    dsqgruposp: TDataSource;
    qgrupospid: TIntegerField;
    qgrupospide: TIntegerField;
    qgrupospidcurso: TIntegerField;
    qgrupospidaula: TIntegerField;
    qgrupospcurso: TWideStringField;
    qgrupospnombre: TWideStringField;
    qgrupospplazas: TIntegerField;
    qgrupospplazas_ocupadas: TIntegerField;
    qgrupospplazas_libres: TIntegerField;
    qgrupoalumnosid: TIntegerField;
    qgrupoalumnoside: TIntegerField;
    qgrupoalumnosidc: TIntegerField;
    qgrupoalumnosnombre: TWideStringField;
    qgrupoalumnosapellidos: TWideStringField;
    qgrupoalumnosnombre_completo: TWideStringField;
    qgrupoalumnosfecha_nacimiento: TDateField;
    qgrupoalumnosob_medicas: TWideStringField;
    qgrupoalumnosob_varias: TWideStringField;
    qgrupoalumnosdireccion: TWideStringField;
    qgrupoalumnospoblacion: TWideStringField;
    qgrupoalumnoscod_post: TWideStringField;
    qgrupoalumnosprovincia: TWideStringField;
    qgrupoalumnoscentroescolar: TWideStringField;
    qgrupoalumnosfecha_alta: TDateField;
    qgrupoalumnosprueba_nivel: TWideStringField;
    qgrupoalumnostelefono1: TWideStringField;
    qgrupoalumnosob_telefono1: TWideStringField;
    qgrupoalumnostelefono2: TWideStringField;
    qgrupoalumnosob_telefono2: TWideStringField;
    qgrupoalumnosnombre_padre_madre: TWideStringField;
    qgrupoalumnospersona_autorizada: TWideStringField;
    qgrupoalumnosdescuento: TFloatField;
    qgrupoalumnosactivo: TIntegerField;
    qgrupoalumnosetiqueta: TIntegerField;
    qgrupoalumnospromociona: TWideStringField;
    qgrupoalumnostelefono_alumno: TWideStringField;
    qgrupoalumnoscorreo_alumno: TWideStringField;
    qgrupoalumnosautomatico: TIntegerField;
    qgrupoalumnosid_1: TIntegerField;
    qgrupoalumnoside_1: TIntegerField;
    qgrupoalumnosida: TIntegerField;
    qgrupoalumnosidg: TIntegerField;
    qgrupoalumnosfechainicio: TDateField;
    qgrupoalumnosfechafin: TDateField;
    qgrupoalumnosfechabaja: TDateField;
    qgrupoalumnosmotivo_baja: TWideStringField;
    qgrupoalumnosdevoluciones: TSmallintField;
    qgrupoalumnosimporte_abono: TFloatField;
    qgrupoalumnosfecha_abono: TDateField;
    qgrupoalumnoscurso: TWideStringField;
    qgrupoalumnosnombre_1: TWideStringField;
    qgrupoalumnosedad: TFloatField;
    qreciboscliente2alumno: TWideStringField;
    qreciboscliente2cliente: TWideStringField;
    qrecibosclientealumno: TWideStringField;
    qrecibosclientecliente: TWideStringField;
    qclienteslista: TZReadOnlyQuery;
    dsqclienteslista: TDataSource;
    qclienteslistaid: TIntegerField;
    qclienteslistaide: TIntegerField;
    qclienteslistanif: TWideStringField;
    qclienteslistanombre_completo: TWideStringField;
    sesiones_alumnosEDAD: TIntegerField;
    notasobservaciones3: TWideMemoField;
    qgrupospfechainicio: TDateField;
    qgrupospfechafin: TDateField;
    qgruposppreciototal: TFloatField;
    qgruposppreciomensual: TFloatField;
    qgrupospnum_dias: TIntegerField;
    qgrupospdias: TWideStringField;
    qgruposphorainicio: TTimeField;
    qgruposphorafin: TTimeField;
    qgruposphorassemanales: TIntegerField;
    qgrupospmasdias: TWideStringField;
    qgruposphorainicio2: TTimeField;
    qgruposphorafin2: TTimeField;
    qgrupospactivo: TIntegerField;
    qgrupospfechabaja: TDateField;
    qgrupospmotivobaja: TWideStringField;
    qgrupospdocumentacion: TBlobField;
    qgrupospnota_minima: TFloatField;
    qgrupospseleccionado: TIntegerField;
    empresaid: TIntegerField;
    empresacif: TWideStringField;
    empresanombre: TWideStringField;
    empresadireccion: TWideStringField;
    empresacodpost: TWideStringField;
    empresapoblacion: TWideStringField;
    empresaprovincia: TWideStringField;
    empresaemail: TWideStringField;
    empresatelefono1: TWideStringField;
    empresatelefono2: TWideStringField;
    empresacontacto: TWideStringField;
    empresabanco: TWideStringField;
    empresacciban: TWideStringField;
    empresaccentidad: TWideStringField;
    empresaccoficina: TWideStringField;
    empresaccdc: TWideStringField;
    empresacccc: TWideStringField;
    empresaactiva: TIntegerField;
    empresatipo_iva: TFloatField;
    empresalogo: TBlobField;
    imagenes_alumnos: TZQuery;
    imagenes_alumnosid: TIntegerField;
    imagenes_alumnoside: TIntegerField;
    imagenes_alumnosidalumno: TIntegerField;
    imagenes_alumnosidempleado: TIntegerField;
    imagenes_alumnosidlibro: TWideStringField;
    imagenes_alumnosimagen: TBlobField;
    imagenes_alumnostipo: TWideStringField;
    dsimg_alumnos: TDataSource;
    documentos: TZQuery;
    documentos_tmp: TZQuery;
    documentosfecha: TDateField;
    documentosdescripcion: TWideStringField;
    documentosnomarchivo: TWideStringField;
    documentos_tmpid: TIntegerField;
    documentos_tmpide: TIntegerField;
    documentos_tmpfecha: TDateField;
    documentos_tmpdescripcion: TWideStringField;
    documentos_tmparchivo: TBlobField;
    documentos_tmpnomarchivo: TWideStringField;
    documentos_tmpextension: TWideStringField;
    documentos_tmpida: TIntegerField;
    documentos_tmpidc: TIntegerField;
    documentos_tmpidp: TIntegerField;
    documentos_tmpidplan: TIntegerField;
    documentos_tmpidcurso: TIntegerField;
    dsdocumentos: TDataSource;
    doc_tmp: TZQuery;
    dsdoc_tmp: TDataSource;
    doc_tmpid: TIntegerField;
    doc_tmpide: TIntegerField;
    doc_tmpfecha: TDateField;
    doc_tmpdescripcion: TWideStringField;
    doc_tmparchivo: TBlobField;
    doc_tmpnomarchivo: TWideStringField;
    doc_tmpextension: TWideStringField;
    doc_tmpida: TIntegerField;
    doc_tmpidc: TIntegerField;
    doc_tmpidp: TIntegerField;
    doc_tmpidplan: TIntegerField;
    doc_tmpidcurso: TIntegerField;
    documentosid: TIntegerField;
    documentoside: TIntegerField;
    qgruposclientesidcurso: TIntegerField;
    recibosid: TIntegerField;
    reciboside: TIntegerField;
    recibosidc: TIntegerField;
    recibosida: TIntegerField;
    recibosidg: TIntegerField;
    recibosfecharecibo: TDateField;
    recibosfechacobro: TDateField;
    recibosconcepto: TWideStringField;
    recibosimporte: TFloatField;
    recibosentrega: TFloatField;
    recibospagado: TIntegerField;
    recibosdomiciliado: TIntegerField;
    recibosmaterial: TIntegerField;
    recibosforma_pago: TIntegerField;
    recibosdoc_pago: TWideStringField;
    recibosdescuento: TIntegerField;
    recibosimportefinal: TFloatField;
    recibosseleccionado: TIntegerField;
    recibosids: TWideStringField;
    recibosidf: TIntegerField;
    qnum_alumnos: TZReadOnlyQuery;
    LargeintField1: TLargeintField;
    dsqnum_alumnos: TDataSource;
    gruposseleccionado: TIntegerField;
    gruposidtutor: TIntegerField;
    empleadosseleccionado: TIntegerField;
    qimpartiractivotutor: TWideStringField;
    gruponotas: TZReadOnlyQuery;
    dsgruponotas: TDataSource;
    gruponotasgrupo: TWideStringField;
    gruponotasaula: TWideStringField;
    gruponotasnombre: TWideStringField;
    gruponotasapellidos: TWideStringField;
    gruponotasasiste: TWideStringField;
    gruponotasreading1: TWideStringField;
    gruponotasreading2: TWideStringField;
    gruponotasasiste_1: TWideStringField;
    gruponotasvocabulary1: TWideStringField;
    gruponotasvocabulary2: TWideStringField;
    gruponotasasiste_2: TWideStringField;
    gruponotaswriting1: TWideStringField;
    gruponotaswriting2: TWideStringField;
    gruponotasasister: TWideStringField;
    gruponotaslistening1: TWideStringField;
    gruponotaslistening2: TWideStringField;
    gruponotasasister_1: TWideStringField;
    gruponotasspeaking1: TWideStringField;
    gruponotasspeaking2: TWideStringField;
    gruponotaspromociona: TWideStringField;
    qrecursos: TZQuery;
    qrecursosid: TIntegerField;
    qrecursoside: TIntegerField;
    qrecursosidc: TIntegerField;
    qrecursosdescripcion: TWideStringField;
    qrecursosubicacion: TWideStringField;
    qrecursosarchivo: TWideStringField;
    dsqrecursos: TDataSource;
    qidrecursos: TZReadOnlyQuery;
    qidrecursosid: TLargeintField;
    qimpartiractivoidcurso: TIntegerField;
    dsqprogresos: TDataSource;
    qprogresos: TZQuery;
    qprogresoside: TIntegerField;
    qprogresosidc: TIntegerField;
    qprogresosidg: TIntegerField;
    qprogresosids: TIntegerField;
    qprogresosfecha: TDateField;
    qprogresosobservaciones: TWideStringField;
    qprogresosrealizado: TIntegerField;
    qplanes: TZReadOnlyQuery;
    qplaneside: TIntegerField;
    qplanesidc: TIntegerField;
    qplanessesion: TIntegerField;
    qplanesactividad: TWideStringField;
    qplanespaginas: TWideStringField;
    qplanesrecursos: TWideMemoField;
    qplanestrabajos: TWideMemoField;
    qplanesnotas_profesor: TWideMemoField;
    qplanesguia_profesor: TWideMemoField;
    dsqplanes: TDataSource;
    clientesautorizalpd: TIntegerField;
    qactualizarfechabajaalumnos: TZReadOnlyQuery;
    qempleadossesiones: TZReadOnlyQuery;
    qempleadossesionesid: TIntegerField;
    qempleadossesioneside: TIntegerField;
    qempleadossesionesnombre_completo: TWideStringField;
    empleadoscolor: TWideStringField;
    qidreciboemp: TZReadOnlyQuery;
    qidreciboempid: TLargeintField;
    qdesactivaralumnos: TZReadOnlyQuery;
    qdesactivarclientes: TZReadOnlyQuery;
    qgruposdesactivar: TZQuery;
    qgruposdesactivarid: TIntegerField;
    qgruposdesactivaride: TIntegerField;
    qgruposdesactivaridcurso: TIntegerField;
    qgruposdesactivaridaula: TIntegerField;
    qgruposdesactivarcurso: TWideStringField;
    qgruposdesactivarnombre: TWideStringField;
    qgruposdesactivarfechainicio: TDateField;
    qgruposdesactivarfechafin: TDateField;
    qgruposdesactivarpreciototal: TFloatField;
    qgruposdesactivarpreciomensual: TFloatField;
    qgruposdesactivarnum_dias: TIntegerField;
    qgruposdesactivardias: TWideStringField;
    qgruposdesactivarhorainicio: TTimeField;
    qgruposdesactivarhorafin: TTimeField;
    qgruposdesactivarhorassemanales: TIntegerField;
    qgruposdesactivarmasdias: TWideStringField;
    qgruposdesactivarhorainicio2: TTimeField;
    qgruposdesactivarhorafin2: TTimeField;
    qgruposdesactivarplazas: TIntegerField;
    qgruposdesactivaractivo: TIntegerField;
    qgruposdesactivarfechabaja: TDateField;
    qgruposdesactivarmotivobaja: TWideStringField;
    qgruposdesactivardocumentacion: TBlobField;
    qgruposdesactivarplazas_ocupadas: TIntegerField;
    qgruposdesactivarplazas_libres: TIntegerField;
    qgruposdesactivarnota_minima: TFloatField;
    qgruposdesactivarseleccionado: TIntegerField;
    qgruposdesactivaridtutor: TIntegerField;
    sesionesasiste: TIntegerField;
    sesiones_alumnosfecha_nacimiento: TDateField;
    JollyZas: TZConnection;
    qalumnosclientesnombre: TWideStringField;
    qalumnosclientesapellidos: TWideStringField;
    qalumnosclientesfecha_nacimiento: TDateField;
    qalumnosclientesob_medicas: TWideStringField;
    qalumnosclientesob_varias: TWideStringField;
    qalumnosclientesdireccion: TWideStringField;
    qalumnosclientespoblacion: TWideStringField;
    qalumnosclientescod_post: TWideStringField;
    qalumnosclientesprovincia: TWideStringField;
    qalumnosclientescentroescolar: TWideStringField;
    qalumnosclientesfecha_alta: TDateField;
    qalumnosclientesprueba_nivel: TWideStringField;
    qalumnosclientestelefono1: TWideStringField;
    qalumnosclientesob_telefono1: TWideStringField;
    qalumnosclientestelefono2: TWideStringField;
    qalumnosclientesob_telefono2: TWideStringField;
    qalumnosclientesnombre_padre_madre: TWideStringField;
    qalumnosclientespersona_autorizada: TWideStringField;
    qalumnosclientesetiqueta: TIntegerField;
    qalumnosclientespromociona: TWideStringField;
    qalumnosclientestelefono_alumno: TWideStringField;
    qalumnosclientescorreo_alumno: TWideStringField;
    qalumnosclientesautomatico: TIntegerField;
    qalumnosclientesseleccionado: TIntegerField;
    qalumnosclientesgrupo: TWideStringField;
    qcursosplataforma: TZReadOnlyQuery;
    dsqcursosplataforma: TDataSource;
    gruposidcursoplataforma: TIntegerField;
    qcursosplataformaid: TLargeintField;
    qcursosplataformapost_title: TWideStringField;
    qfaltasempleados: TZQuery;
    qfaltasempleadosid: TIntegerField;
    qfaltasempleadoside: TIntegerField;
    qfaltasempleadosidp: TIntegerField;
    qfaltasempleadosfecha: TDateField;
    qfaltasempleadosjustificada: TIntegerField;
    qfaltasempleadosmotivo: TWideStringField;
    qfaltasempleadossustituto: TWideStringField;
    qrecibosempleadosfechapago: TDateField;
    empleadoshorasdia: TFloatField;
    qprogresosfechaplan: TDateField;
    dsqplansesiones: TDataSource;
    qplansesiones: TZReadOnlyQuery;
    qplansesioneside: TIntegerField;
    qplansesionesidc: TIntegerField;
    qplansesionessesion: TIntegerField;
    qplansesionesactividad: TWideStringField;
    qplansesionespaginas: TWideStringField;
    qplansesionesrecursos: TWideMemoField;
    qplansesionestrabajos: TWideMemoField;
    qplansesionesnotas_profesor: TWideMemoField;
    qplansesionesguia_profesor: TWideMemoField;
    qplansesionesfechaplan: TDateField;
    qrecursossesion: TIntegerField;
    sesiones_alumnosidc: TIntegerField;
    sesiones_alumnosprotecciondatos: TIntegerField;
    sesionesidp: TIntegerField;
    sesionesidg: TIntegerField;
    sesioneshoras: TFloatField;
    insertarsesion: TZReadOnlyQuery;
    sesionesprofesor: TWideStringField;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
    procedure qalumnosAfterClose(DataSet: TDataSet);
    procedure dsalumnosDataChange(Sender: TObject; Field: TField);
    procedure dsalumnosStateChange(Sender: TObject);
    procedure empresaBeforeOpen(DataSet: TDataSet);
    procedure alumnosAfterPost(DataSet: TDataSet);
    procedure alumnosAfterDelete(DataSet: TDataSet);
    procedure dsimg_alumnosDataChange(Sender: TObject; Field: TField);
    procedure dsasistirStateChange(Sender: TObject);
    procedure qasistiralumnoAfterClose(DataSet: TDataSet);
    procedure dsempleadosDataChange(Sender: TObject; Field: TField);
    procedure dsempleadosStateChange(Sender: TObject);
    procedure dsimg_empleadosDataChange(Sender: TObject; Field: TField);
    procedure qempleadosAfterClose(DataSet: TDataSet);
    procedure dscursosStateChange(Sender: TObject);
    procedure dscursosDataChange(Sender: TObject; Field: TField);
    procedure dsqgrupocursoDataChange(Sender: TObject; Field: TField);
    procedure cursosAfterPost(DataSet: TDataSet);
    procedure cursosAfterDelete(DataSet: TDataSet);
    procedure empleadosAfterPost(DataSet: TDataSet);
    procedure empleadosAfterDelete(DataSet: TDataSet);
    procedure impartirAfterPost(DataSet: TDataSet);
    procedure impartirAfterDelete(DataSet: TDataSet);
    procedure dsnotasStateChange(Sender: TObject);
    procedure dssesionesStateChange(Sender: TObject);
    procedure dssesionesDataChange(Sender: TObject; Field: TField);
    procedure dsqimpartirDataChange(Sender: TObject; Field: TField);
    procedure qgrupoalumnosCalcFields(DataSet: TDataSet);
    procedure dsclientesStateChange(Sender: TObject);
    procedure dsgruposStateChange(Sender: TObject);
    procedure dsgruposDataChange(Sender: TObject; Field: TField);
    procedure dsrecibosStateChange(Sender: TObject);
    procedure qgrupoalumnos2CalcFields(DataSet: TDataSet);
    procedure dsimpartirStateChange(Sender: TObject);
    procedure dsqalumnosDataChange(Sender: TObject; Field: TField);
    procedure dsimpartiractivoDataChange(Sender: TObject; Field: TField);
    procedure dsqclientesDataChange(Sender: TObject; Field: TField);
    procedure qcursosBeforeOpen(DataSet: TDataSet);
    procedure qgrupospBeforeOpen(DataSet: TDataSet);
    procedure qclientesBeforeOpen(DataSet: TDataSet);
    procedure dsqreciboscliente2DataChange(Sender: TObject; Field: TField);
    procedure asistirfechabajaValidate(Sender: TField);
    procedure asistirfecha_abonoValidate(Sender: TField);
    procedure asistirfechainicioValidate(Sender: TField);
    procedure asistirfechafinValidate(Sender: TField);
    procedure recibosfechareciboValidate(Sender: TField);
    procedure dsqempleadosDataChange(Sender: TObject; Field: TField);
    procedure dsrecibosDataChange(Sender: TObject; Field: TField);
    procedure dsqrecibosclienteDataChange(Sender: TObject; Field: TField);
    procedure empleadosBeforePost(DataSet: TDataSet);
    procedure dsqgrupospDataChange(Sender: TObject; Field: TField);
    procedure qrecursosAfterInsert(DataSet: TDataSet);
    procedure qrecursosBeforeDelete(DataSet: TDataSet);
    procedure qrecursosBeforePost(DataSet: TDataSet);
    procedure qidrecursosBeforeOpen(DataSet: TDataSet);
    procedure qprogresoBeforeOpen(DataSet: TDataSet);
    procedure qprogresosBeforeOpen(DataSet: TDataSet);
    procedure gruposAfterPost(DataSet: TDataSet);
    procedure gruposBeforePost(DataSet: TDataSet);
    procedure qimpartiractivoBeforeOpen(DataSet: TDataSet);
    procedure qrecibosempleadosAfterInsert(DataSet: TDataSet);
    procedure qgruposdesactivarAfterPost(DataSet: TDataSet);
    procedure dsclientesDataChange(Sender: TObject; Field: TField);
    procedure qfaltasempleadosAfterInsert(DataSet: TDataSet);
    procedure dsqprogresosDataChange(Sender: TObject; Field: TField);
    procedure sesionesBeforeOpen(DataSet: TDataSet);
    procedure sesiones_alumnosBeforeOpen(DataSet: TDataSet);
    procedure qrecibosempleadosBeforePost(DataSet: TDataSet);
    procedure gruposfechainicioValidate(Sender: TField);
  private
    { Private declarations }
  public
    { Public declarations }
    var filtro,filtrolista:string;
        vertodos,vertodosempgrupos:integer;
    function PedirConfirmacion(mensaje:string; si,no,cancelar:boolean):integer;
    function EsMascaraDeFechaVacia(const ValorMasked: string): Boolean;
  end;

var
  DM: TDM;
    pcentro,pcurso,pgrupo,pprofesor:integer;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

uses principal, DATOS2, fconfirmar, datosalumnos;

{$R *.dfm}
function tdm.EsMascaraDeFechaVacia(const ValorMasked: string): Boolean;
var
  i: Integer;
begin
  Result := True; // Asumimos que está vacía por defecto
  for i := 1 to Length(ValorMasked) do
  begin
    // Si encontramos cualquier carácter que sea un número,
    // significa que el usuario ha introducido datos.
    if CharInSet(ValorMasked[i], ['0'..'9']) then
    begin
      Result := False;
      Exit; // Salimos de la función, ya no hace falta seguir buscando
    end;
  end;
end;

function tdm.PedirConfirmacion(mensaje:string; si,no,cancelar:boolean):integer;
begin
    confirmar:=tconfirmar.create(nil);
    with confirmar do
    begin
        LMensaje.caption:=mensaje;
        bsi.visible:=si;
        bno.visible:=no;
        bcancelar.visible:=cancelar;
    end;
    result:=Confirmar.Showmodal;
    confirmar.free;
end;


procedure TDM.alumnosAfterDelete(DataSet: TDataSet);
begin
    qalumnos.Refresh;
end;

procedure TDM.alumnosAfterPost(DataSet: TDataSet);
var ide,ida:string;
begin
    ide:=alumnoside.asstring;
    ida:=alumnosid.asstring;
    qalumnos.Refresh;
    qalumnos.Locate('id',ida,[locaseinsensitive,lopartialkey]);
    alumnos.MasterSource:=dsqalumnos;
end;

procedure TDM.asistirfechabajaValidate(Sender: TField);
begin
   if asistirfechabaja.asstring='  /  /  ' then
   begin
      asistirfechabaja.value := null;
   end;
end;

procedure TDM.asistirfechafinValidate(Sender: TField);
begin
   if asistirfechafin.asstring='  /  /  ' then
   begin
      asistirfechafin.value := null;
   end;
end;

procedure TDM.asistirfechainicioValidate(Sender: TField);
begin
   if asistirfechainicio.asstring='  /  /  ' then
   begin
      asistirfechainicio.value := null;
   end;
end;

procedure TDM.asistirfecha_abonoValidate(Sender: TField);
begin
   if asistirfecha_abono.asstring='  /  /  ' then
   begin
      asistirfecha_abono.value := null;
   end;
end;

procedure TDM.cursosAfterDelete(DataSet: TDataSet);
begin
   qcursos.Refresh;
end;

procedure TDM.cursosAfterPost(DataSet: TDataSet);
var ide,ida:string;
begin
    ide:=cursoside.asstring;
    ida:=cursosid.asstring;

    if cursoactivo<>cursosactivo.AsInteger then
    begin
       if cursosactivo.AsInteger=0 then
       begin
         qgruposdesactivar.Close;
         qgruposdesactivar.Prepare;
         qgruposdesactivar.ParamByName('EMPRESA').AsInteger:=cursoside.AsInteger;
         qgruposdesactivar.ParamByName('CURSO').AsInteger:=cursosid.AsInteger;
         qgruposdesactivar.Open;
         while not qgruposdesactivar.eof do
         begin

           grupoactivo:=qgruposdesactivaractivo.AsInteger;
           qgruposdesactivar.Edit;
           qgruposdesactivaractivo.Value:=0;
           qgruposdesactivarfechabaja.Value:=cursosfechafin.AsDateTime;
           qgruposdesactivar.Post;
           qgruposdesactivar.Next;
         end;
       end;
    end;
    qcursos.Refresh;
    qcursos.Locate('id',ida,[locaseinsensitive,lopartialkey]);
    cursos.MasterSource:=dsqcursos;
end;

procedure TDM.DataModuleCreate(Sender: TObject);

var F: TextFile;
    sLinea,thost,tuser,tpass: String;
    hora1,hora2,hora3:ttime;
    configuracion:array of string;
    linea,x:integer;

begin
  inherited;
  AssignFile( F, ExtractFilePath( Application.ExeName ) + 'config.ini' );
  Reset( F );
  linea:=1;
  setlength (configuracion,6);
  for x:=1 to 5 do
  begin
    ReadLn( F, sLinea );
    configuracion[linea]:=sLinea;
    linea:=linea+1;
  end;

  CloseFile( F );
    thost:=configuracion[1];
    tuser:=configuracion[2];
    tpass:=configuracion[3];
    tprinter:=configuracion[4];
    tprinter2:=configuracion[5];
//    tlimitado:=configuracion[4];
    DM.dbjolly.Connected:=false;
    DM.dbjolly.HostName:=thost;
    DM.dbjolly.User:=tuser;
    DM.dbjolly.Password:=tpass;
    DM.dbjolly.connected:=true;

end;

procedure TDM.DataModuleDestroy(Sender: TObject);
begin
  inherited;
    ExitProcess(0);
end;

procedure TDM.dsalumnosDataChange(Sender: TObject; Field: TField);
begin
    menu.LEedad.Caption:='Edad: '+inttostr(trunc((date()-alumnosfecha_nacimiento.AsDateTime)/365))+' años';
    if (alumnoside.AsString<>'') and (alumnosid.asstring<>'') and (alumnos.State in [dsbrowse]) then
    begin
       qrecibosalumno.close;
        qrecibosalumno.sql.clear;
        qrecibosalumno.SQL.Add('select * from cobros where ide='+inttostr(centro)+' and ida='+alumnosid.AsString+' order by pagado,fecharecibo desc');
        qrecibosalumno.Open;
    end;
    if (alumnoside.AsString<>'') and (alumnosid.asstring<>'') and (alumnos.State in [dsbrowse]) then
    begin
        qasistiralumno.close;
        qasistiralumno.sql.clear;
        qasistiralumno.SQL.Add('select a.*,g.curso,i.idp,e.nombre as nomprofesor,g.nombre from asistir a,grupos g,impartir i,empleados e where g.ide=i.ide and g.id=i.idg and e.ide=i.ide and e.id=i.idp and a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and a.ida='+alumnosid.AsString+' order by g.curso desc');
        qasistiralumno.Open;
    end;
end;

procedure TDM.dsalumnosStateChange(Sender: TObject);
begin
   if alumnos.State in [dsedit,dsinsert] then
   begin
       menu.btAnuevo.Enabled:=false;
       menu.btAborrar.Enabled:=false;
       menu.btAmodificar.Enabled:=false;
       menu.btAguardar.Enabled:=true;
       menu.btAcancelar.Enabled:=true;
       menu.Palumnosdatos.Enabled:=true;
   end else
   begin
       menu.btAnuevo.Enabled:=true;
       menu.btAborrar.Enabled:=true;
       menu.btAmodificar.Enabled:=true;
       menu.btAguardar.Enabled:=false;
       menu.btAcancelar.Enabled:=false;
       menu.Palumnosdatos.Enabled:=false;
   end;
end;

procedure TDM.dsasistirStateChange(Sender: TObject);
begin
   if asistir.State in [dsedit,dsinsert] then
   begin
       menu.btAsnuevo.Enabled:=false;
       menu.btAsborrar.Enabled:=false;
       menu.btAsmodificar.Enabled:=false;
       menu.btAsguardar.Enabled:=true;
       menu.btAscancelar.Enabled:=true;
       menu.Pestudiosalumno.Enabled:=true;
   end else
   begin
       menu.btAsnuevo.Enabled:=true;
       menu.btAsborrar.Enabled:=true;
       menu.btAsmodificar.Enabled:=true;
       menu.btAsguardar.Enabled:=false;
       menu.btAscancelar.Enabled:=false;
       menu.Pestudiosalumno.Enabled:=false;
   end;
end;

procedure TDM.dsclientesDataChange(Sender: TObject; Field: TField);
begin
   if clientesautorizalpd.AsInteger=1 then menu.PTDclientes.Color:=clMoneyGreen;
   if clientesautorizalpd.AsInteger=0 then menu.PTDclientes.Color:=clRed;
   dmalumnos.qdocumentoscli.Close;
   dmalumnos.qdocumentoscli.Prepare;
   dmalumnos.qdocumentoscli.ParamByName('PCLIENTE').Asstring:=clientesid.Asstring;
   dmalumnos.qdocumentoscli.ParamByName('PEMPRESA').AsInteger:=clienteside.AsInteger;
   dmalumnos.qdocumentoscli.Open;

end;

procedure TDM.dsclientesStateChange(Sender: TObject);
begin
   if clientes.State in [dsedit,dsinsert] then
   begin
       menu.btclnuevo.Enabled:=false;
       menu.btclborrar.Enabled:=false;
       menu.btclmodificar.Enabled:=false;
       menu.btclguardar.Enabled:=true;
       menu.btclcancelar.Enabled:=true;
       menu.Pclientesdatos.Enabled:=true;
   end else
   begin
       menu.btclnuevo.Enabled:=true;
       menu.btclborrar.Enabled:=true;
       menu.btclmodificar.Enabled:=true;
       menu.btclguardar.Enabled:=false;
       menu.btclcancelar.Enabled:=false;
       menu.Pclientesdatos.Enabled:=false;
   end;
end;

procedure TDM.dscursosDataChange(Sender: TObject; Field: TField);
begin
  pcentro:=qcursoside.AsInteger;
  pcurso:=qcursosid.AsInteger;
    if (cursoside.AsString<>'') and (cursosid.asstring<>'') and (cursos.State in [dsbrowse]) then
    begin
        qgrupocurso.close;
        qgrupocurso.sql.clear;
        qgrupocurso.SQL.Add('select g.*,a.nombre,p.nombre as profesor from grupos g,aulas a,empleados p,impartir i where i.idp=p.id and i.ide=p.ide and i.idg=g.id and i.ide=g.ide and g.ide=a.ide and g.idaula=a.id and g.ide='+inttostr(centro)+' and g.idcurso='+cursosid.AsString+' order by a.nombre');
        qgrupocurso.Open;
    end;


end;

procedure TDM.dscursosStateChange(Sender: TObject);
begin
   if cursos.State in [dsedit,dsinsert] then
   begin
       menu.btcnuevo.Enabled:=false;
       menu.btcborrar.Enabled:=false;
       menu.btcmodificar.Enabled:=false;
       menu.btcguardar.Enabled:=true;
       menu.btccancelar.Enabled:=true;
       menu.Pcursosdatos.Enabled:=true;
   end else
   begin
       menu.btcnuevo.Enabled:=true;
       menu.btcborrar.Enabled:=true;
       menu.btcmodificar.Enabled:=true;
       menu.btcguardar.Enabled:=false;
       menu.btccancelar.Enabled:=false;
       menu.Pcursosdatos.Enabled:=false;
   //    menu.pcolor.Visible:=false;
   end;
end;

procedure TDM.dsempleadosDataChange(Sender: TObject; Field: TField);
var filtroempgrupos:string;
begin
    if vertodosempgrupos=0 then filtroempgrupos:='';
    if vertodosempgrupos=1 then filtroempgrupos:=' and g.activo=1 ';

    if (empleadoside.AsString<>'') and (empleadosid.asstring<>'') and (empleados.State in [dsbrowse]) then
    begin
       qrecibosempleados.Close;
       qrecibosempleados.Prepare;
       qrecibosempleados.ParamByName('EMPRESA').AsInteger:=empleadoside.AsInteger;
       qrecibosempleados.ParamByName('EMPLEADO').AsInteger:=empleadosid.AsInteger;
       qrecibosempleados.Open;
    end;
    if (empleadoside.AsString<>'') and (empleadosid.asstring<>'') and (empleados.State in [dsbrowse]) then
    begin
        qimpartirgrupo.close;
        qimpartirgrupo.sql.clear;
        qimpartirgrupo.SQL.Add('select a.*,g.curso,g.nombre from impartir a,grupos g where a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and a.idp='+empleadosid.AsString+filtroempgrupos+' order by g.curso desc');
        qimpartirgrupo.Open;
    end;
    if (qimpartirgrupo.RecordCount>0) and (qimpartirgrupoide.AsString<>'') and (qimpartirgrupoidg.asstring<>'') and (qimpartirgrupo.State in [dsbrowse]) then
    begin
        qgrupoalumnos.close;
        qgrupoalumnos.sql.clear;
        qgrupoalumnos.SQL.Add('select al.*,a.*,g.curso,g.nombre from alumnos al,asistir a,grupos g where a.fechabaja is null and al.ide=a.ide and al.id=a.ida and a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and g.id='+qimpartirgrupoidg.AsString+filtroempgrupos+' order by al.nombre_completo');
        qgrupoalumnos.Open;
    end else
          begin
            qgrupoalumnos.Close;
          end;
//   menu.pcolor.color:=empleadoscolor.AsVariant;
   qrecibosempleados.Close;
   qrecibosempleados.Prepare;
   qrecibosempleados.ParamByName('EMPRESA').AsInteger:=dm.empleadoside.AsInteger;
   qrecibosempleados.ParamByName('EMPLEADO').AsInteger:=dm.empleadosid.AsInteger;
   qrecibosempleados.Open;
   qfaltasempleados.Close;
   qfaltasempleados.Prepare;
   qfaltasempleados.ParamByName('EMPRESA').AsInteger:=dm.empleadoside.AsInteger;
   qfaltasempleados.ParamByName('EMPLEADO').AsInteger:=dm.empleadosid.AsInteger;
   qfaltasempleados.Open;

end;

procedure TDM.dsempleadosStateChange(Sender: TObject);
begin
   if empleados.State in [dsedit,dsinsert] then
   begin
       menu.btenuevo.Enabled:=false;
       menu.bteborrar.Enabled:=false;
       menu.btemodificar.Enabled:=false;
       menu.bteguardar.Enabled:=true;
       menu.btecancelar.Enabled:=true;
       menu.Pempleadosdatos.Enabled:=true;
   end else
   begin
       menu.btenuevo.Enabled:=true;
       menu.bteborrar.Enabled:=true;
       menu.btemodificar.Enabled:=true;
       menu.bteguardar.Enabled:=false;
       menu.btecancelar.Enabled:=false;
       menu.Pempleadosdatos.Enabled:=false;
   end;
end;

procedure TDM.dsgruposDataChange(Sender: TObject; Field: TField);
begin
{    if (gruposide.AsString<>'') and (gruposid.asstring<>'') and (grupos.State in [dsbrowse]) then
    begin
        qgrupoalumnos2.close;
        qgrupoalumnos2.sql.clear;
        qgrupoalumnos2.SQL.Add('select al.*,a.*,g.curso,g.nombre from alumnos al,asistir a,grupos g where al.ide=a.ide and al.id=a.ida and a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and g.id='+gruposid.AsString+' order by al.nombre_completo');
        qgrupoalumnos2.Open;
    end;  }
end;

procedure TDM.dsgruposStateChange(Sender: TObject);
begin
   if grupos.State in [dsedit,dsinsert] then
   begin
       menu.btgnuevo.Enabled:=false;
       menu.btgborrar.Enabled:=false;
       menu.btgmodificar.Enabled:=false;
       menu.btgguardar.Enabled:=true;
       menu.btgcancelar.Enabled:=true;
       menu.Pgruposdatos.Enabled:=true;
   end else
   begin
       menu.btgnuevo.Enabled:=true;
       menu.btgborrar.Enabled:=true;
       menu.btgmodificar.Enabled:=true;
       menu.btgguardar.Enabled:=false;
       menu.btgcancelar.Enabled:=false;
       menu.Pgruposdatos.Enabled:=false;
   end;
end;

procedure TDM.dsimg_alumnosDataChange(Sender: TObject; Field: TField);
var img:TPicture;
    blob: TblobStream;
    Jpg : TJPEGImage;
    bmp : Tbitmap;
    imagen : TPicture;
    ext:string;
begin
    if imagenes_alumnos.RecordCount>0 then
    begin
        menu.imgfoto2.Picture:=nil;
        ext:=imagenes_alumnostipo.AsString;
        imagenes_alumnosimagen.savetofile('c:\formagest\temp'+ext);
        if (ext='.jpg') or (ext='.jpeg') then
        begin
           imagen := TPicture.Create;
           bmp:= TBitmap.Create;
           imagen.LoadFromFile('c:\formagest\temp'+ext);//'c:\formagest\imagenes\'+dm.alumnosid.asstring+'.jpg');
           Bmp.Width:= Imagen.Width;
           Bmp.Height:= Imagen.Height;
//           Bmp.Canvas.StretchDraw(canvas.ClipRect,bmp);// draw(0,0,Imagen.Graphic);//
           bmp.Assign(imagen.Graphic);
           Bmp.SaveToFile('c:\formagest\temp.bmp');
           bmp.Free;
           bmp:=nil;
           imagen.Graphic:=nil;
        end;

        if (ext='.jpg') or (ext='.jpeg') or (ext='.bmp') then
        begin
            menu.imgfoto2.Picture:=nil;
            menu.imgfoto2.Picture.LoadFromFile('c:\formagest\temp'+ext);
        end;
    end;
    if imagenes_alumnos.RecordCount=0 then
    begin
        menu.imgfoto2.Picture:=nil;
    end;
if FileExists('c:\formagest\temp.bmp') then
begin
    DeleteFile('c:\formagest\temp.bmp');

end;
if FileExists('c:\formagest\temp'+ext) then
begin
    DeleteFile('c:\formagest\temp'+ext);
end;
//    imagen.Free;
//    bmp.free;
end;

procedure TDM.dsimg_empleadosDataChange(Sender: TObject; Field: TField);
var img:TPicture;
    blob: TblobStream;
    ext:string;
begin
    menu.imagee.Picture:=nil;
    ext:=imagenes_empleadostipo.AsString;
    imagenes_empleadosimagen.savetofile('c:\formagest\temp'+ext);
    if (ext='.jpg') or (ext='.jpeg') or (ext='.bmp') then
    begin
        menu.imagee.Picture.LoadFromFile('c:\formagest\temp'+ext);
    end;
if FileExists('c:\formagest\temp'+ext) then
    DeleteFile('c:\formagest\temp'+ext);

end;

procedure TDM.dsimpartiractivoDataChange(Sender: TObject; Field: TField);
begin

  pcentro:=qimpartiractivoide.AsInteger;
  pcurso:=qimpartiractivoidcurso.AsInteger;
  pgrupo:=qimpartiractivoidg.AsInteger;
  pprofesor:=qimpartiractivoidp.AsInteger;


  if menu.pagecontrol6.Visible=true then
  begin
    menu.qgrupoalumnos.Close;
    menu.qgrupoalumnos.Open;
    menu.Panel84.Caption:='Nº de alumnos: '+inttostr(menu.qgrupoalumnos.RecordCount);
  end;
    sesiones.Close;
    sesiones.Open;
{  qrecursos.Close;
  qrecursos.Open;
  qprogresos.Close;
  qprogresos.open;
}
end;

procedure TDM.dsimpartirStateChange(Sender: TObject);
begin
   if impartir.State in [dsedit,dsinsert] then
   begin
       menu.btinuevo.Enabled:=false;
       menu.btiborrar.Enabled:=false;
       menu.btimodificar.Enabled:=false;
       menu.btiguardar.Enabled:=true;
       menu.bticancelar.Enabled:=true;
       menu.Pgruposempleados.Enabled:=true;
   end else
   begin
       menu.btinuevo.Enabled:=true;
       menu.btiborrar.Enabled:=true;
       menu.btimodificar.Enabled:=true;
       menu.btiguardar.Enabled:=false;
       menu.bticancelar.Enabled:=false;
       menu.Pgruposempleados.Enabled:=false;
   end;
end;

procedure TDM.dsnotasStateChange(Sender: TObject);
begin
   if notas.State in [dsedit,dsinsert] then
   begin
       menu.btnotasmodificar.Enabled:=false;
       menu.btnotasguardar.Enabled:=true;
       menu.btnotascancelar.Enabled:=true;
//       menu.Panelnotas2.Enabled:=true;
       menu.btsnotasmodificar.Enabled:=false;
       menu.btsnotasguardar.Enabled:=true;
       menu.btsnotascancelar.Enabled:=true;
       menu.Panelnotassesiones.Enabled:=true;
   end else
   begin
       menu.btsnotasmodificar.Enabled:=true;
       menu.btsnotasguardar.Enabled:=false;
       menu.btsnotascancelar.Enabled:=false;
       menu.Panelnotassesiones.Enabled:=false;

       menu.btnotasmodificar.Enabled:=true;
       menu.btnotasguardar.Enabled:=false;
       menu.btnotascancelar.Enabled:=false;
//       menu.Panelnotas2.Enabled:=false;
   end;
end;

procedure TDM.dsqalumnosDataChange(Sender: TObject; Field: TField);
begin
    if qalumnos.RecordCount>0 then
    begin
        imagenes_alumnos.Close;
        imagenes_alumnos.SQL.Clear;
        imagenes_alumnos.SQL.Add('select * from imagenes where (tipo='+''''+'.jpg'+''''+' or tipo='+''''+'.jpeg'+''''+' or tipo='+''''+'.bmp'+''''+') and  idalumno='+qalumnosid.AsString+' order by id desc');
        imagenes_alumnos.Open;
    end;
end;

procedure TDM.dsqclientesDataChange(Sender: TObject; Field: TField);
begin
    if (qclienteside.AsString<>'') and (qclientesid.asstring<>'') then
    begin
       { qreciboscliente.close;
        qreciboscliente.sql.clear;
        qreciboscliente.SQL.Add('select co.*,a.nombre_completo as alumno,c.nombre_completo as cliente from cobros co,alumnos a,clientes c where co.ida=a.id and co.idc=c.id and co.ide='+inttostr(centro)+' and co.idc='+dm.qclientesid.AsString+' order by pagado,fecharecibo desc');
        qreciboscliente.Open;  }
    end;
    if (qclienteside.AsString<>'') and (qclientesid.asstring<>'') then
    begin
        qgruposclientes.close;
        qgruposclientes.Prepare;
        qgruposclientes.ParamByName('PCLIENTE').AsInteger:=dm.qclientesid.Asinteger;
        qgruposclientes.Open;
    end;
    if (qclienteside.AsString<>'') and (qclientesid.asstring<>'') then
    begin
        qalumnosclientes.close;
        qalumnosclientes.prepare;
        qalumnosclientes.ParamByName('CLIENTE').AsInteger:=dm.qclientesid.AsInteger;
        qalumnosclientes.Open;
    end;
    if (dm.qclienteside.AsString<>'') and (dm.qclientesid.asstring<>'') then
    begin
{        dm2.qclientes.Close;
        dm2.qclientes.SQL.Clear;
        dm2.qclientes.SQL.Add('select id,ide,nif,nombre_completo from clientes where id='+dm.qclientesid.AsString+' order by nombre_completo');
        dm2.qclientes.Open; }
    end;


end;

procedure TDM.dsqempleadosDataChange(Sender: TObject; Field: TField);
begin
   dmalumnos.qdocumentosemp.Close;
   dmalumnos.qdocumentosemp.Prepare;
   dmalumnos.qdocumentosemp.ParamByName('PEMPLEADO').AsInteger:=qempleadosid.asinteger;
   dmalumnos.qdocumentosemp.ParamByName('PEMPRESA').AsInteger:=centro;
   dmalumnos.qdocumentosemp.open;
   if qempleados.RecordCount>0 then
    begin
      imagenes_empleados.Close;
      imagenes_empleados.ParamByName('EMPRESA').AsInteger:=centro;
      imagenes_empleados.ParamByName('EMPLEADO').AsInteger:=qempleadosid.asinteger;
      imagenes_empleados.Open;
      If not DirectoryExists('c:\formagest\tmp') then CreateDir('c:\formagest\tmp');
      Deletefile('c:\formagest\tmp\empimg.*');//+temp_fotosextension.AsString);
      menu.imgfoto2.Picture:=nil;
      if imagenes_empleados.RecordCount>0 then
      begin
        imagenes_empleadosimagen.savetofile('c:\formagest\tmp\empimg'+imagenes_empleadostipo.asstring);
        menu.imagee.Picture.LoadFromFile('c:\formagest\tmp\empimg'+imagenes_empleadostipo.AsString);
      end;
    end;
end;

procedure TDM.dsqgrupocursoDataChange(Sender: TObject; Field: TField);
begin
    if (qgrupocursoide.AsString<>'') and (qgrupocursoid.asstring<>'') and (qgrupocurso.State in [dsbrowse]) then
    begin
        qgrupoalumnos.close;
        qgrupoalumnos.sql.clear;
        qgrupoalumnos.SQL.Add('select al.*,a.*,g.curso,g.nombre from alumnos al,asistir a,grupos g where a.fechabaja is null and al.ide=a.ide and al.id=a.ida and a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and g.id='+qgrupocursoid.AsString+' order by al.nombre_completo');
        qgrupoalumnos.Open;

    end;
end;

procedure TDM.dsqgrupospDataChange(Sender: TObject; Field: TField);
begin
    gruponotas.Close;
    gruponotas.Prepare;
    gruponotas.ParamByName('EMPRESA').AsInteger:=qgrupospide.AsInteger;
    gruponotas.ParamByName('GRUPO').AsInteger:=qgrupospid.AsInteger;
    gruponotas.Open;

end;

procedure TDM.dsqimpartirDataChange(Sender: TObject; Field: TField);
begin
    if (qimpartirgrupo.RecordCount>0) and (qimpartirgrupoide.AsString<>'') and (qimpartirgrupoidg.asstring<>'') and (qimpartirgrupo.State in [dsbrowse]) then
    begin
        qgrupoalumnos.close;
        qgrupoalumnos.sql.clear;
        qgrupoalumnos.SQL.Add('select al.*,a.*,g.curso,g.nombre from alumnos al,asistir a,grupos g where a.fechabaja is null and al.ide=a.ide and al.id=a.ida and a.ide=g.ide and a.idg=g.id and a.ide='+inttostr(centro)+' and g.id='+qimpartirgrupoidg.AsString+' order by al.nombre_completo');
        qgrupoalumnos.Open;

    end else qgrupoalumnos.Close;
end;

procedure TDM.dsqprogresosDataChange(Sender: TObject; Field: TField);
begin
    qplansesiones.Close;
    qplansesiones.Prepare;
    qplansesiones.ParamByName('CENTRO').AsInteger:=qprogresoside.AsInteger;
    qplansesiones.ParamByName('CURSO').AsInteger:=qprogresosidc.AsInteger;
    qplansesiones.ParamByName('SESION').AsInteger:=qprogresosids.AsInteger;
    qplansesiones.Open;
    qrecursos.close;
    qrecursos.Prepare;
    qrecursos.ParamByName('CENTRO').AsInteger:=qprogresoside.AsInteger;
    qrecursos.ParamByName('CURSO').AsInteger:=qprogresosidc.AsInteger;
    qrecursos.ParamByName('SESION').AsInteger:=qprogresosids.AsInteger;
    qrecursos.open;


end;

procedure TDM.dsqreciboscliente2DataChange(Sender: TObject; Field: TField);
begin
   qclientes.Locate('id',qreciboscliente2idc.AsString,[locaseinsensitive]);
end;

procedure TDM.dsqrecibosclienteDataChange(Sender: TObject; Field: TField);
begin
   dm.recibos.prepare;
   dm.recibos.ParamByName('PRECIBO').AsInteger:=qrecibosclienteid.AsInteger;
   dm.recibos.refresh;
end;

procedure TDM.dsrecibosDataChange(Sender: TObject; Field: TField);
begin
  if dm.recibosid.AsInteger<>-10000 then
  begin
     dm2.qclientes.Close;
     dm2.qclientes.prepare;
     dm2.qclientes.ParamByName('PEMPRESA').AsInteger:=reciboside.AsInteger;
     dm2.qclientes.ParamByName('PCLIENTE').AsInteger:=recibosidc.AsInteger;
     dm2.qclientes.open;
//     dm2.qclientes.refresh;

     dm2.qalumnosclientes.close;
     dm2.qalumnosclientes.prepare;
     dm2.qalumnosclientes.ParamByName('PEMPRESA').AsInteger:=reciboside.AsInteger;
     dm2.qalumnosclientes.ParamByName('PCLIENTE').AsInteger:=recibosidc.AsInteger;
     dm2.qalumnosclientes.open;
//     dm2.qalumnosclientes.refresh;

     dm2.qgruposclientes.close;
     dm2.qgruposclientes.prepare;
     dm2.qgruposclientes.ParamByName('PEMPRESA').AsInteger:=reciboside.AsInteger;
     dm2.qgruposclientes.ParamByName('PCLIENTE').AsInteger:=recibosidc.AsInteger;
     dm2.qgruposclientes.ParamByName('PGRUPO').Asstring:='%';
     dm2.qgruposclientes.ParamByName('PALUMNO').Asstring:='%';
     dm2.qgruposclientes.open;
//     dm2.qgruposclientes.refresh;
  end;

end;

procedure TDM.dsrecibosStateChange(Sender: TObject);
begin
   if recibos.State in [dsedit,dsinsert] then
   begin
       menu.btrnuevo.Enabled:=false;
       menu.btrborrar.Enabled:=false;
       menu.btrmodificar.Enabled:=false;
       menu.btrguardar.Enabled:=true;
       menu.btrcancelar.Enabled:=true;
       menu.Precibosdatos.Enabled:=true;
   end else
   begin
       menu.btrnuevo.Enabled:=true;
       menu.btrborrar.Enabled:=true;
       menu.btrmodificar.Enabled:=true;
       menu.btrguardar.Enabled:=false;
       menu.btrcancelar.Enabled:=false;
       menu.Precibosdatos.Enabled:=false;
   end;
end;

procedure TDM.dssesionesDataChange(Sender: TObject; Field: TField);
var fecha:string;
    anyo,mes,dia:word;
begin
    if sesionesidp.asstring<>'' then
    begin
        qaux.Close;
        qaux.SQL.Clear;
        qaux.sql.Add('select ifnull(count(*),0) from sesiones where hora_fin is null and idp='+qempleadossesionesid.AsString);
        qaux.Open;

        if qaux.Fields[0].asinteger=0 then menu.btsinicio.enabled:=true else menu.btsinicio.enabled:=false;
        decodedate(sesionesfecha.AsDateTime,anyo,mes,dia);
        fecha:=''''+inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia)+'''';
        tavisos.Close;
        tavisos.SQL.Clear;
        tavisos.SQL.Add('select * from avisos where ide='+inttostr(centro)+' and idp='+sesionesidp.AsString+' and idg='+sesionesidg.AsString+' and fecha='+fecha);
        tavisos.Open;
    end;// else menu.btsinicio.enabled:=true;
    if (sesioneshora_fin.Asstring='') and (sesioneshora_inicio.asstring<>'') and (sesionesidp.AsInteger=qempleadossesionesid.AsInteger) then menu.btsfin.enabled:=true else menu.btsfin.enabled:=false;
    sesiones_alumnos.Close;
    sesiones_alumnos.Open;
end;

procedure TDM.dssesionesStateChange(Sender: TObject);
begin
   if sesiones.State in [dsedit,dsinsert] then
   begin
       menu.btsmodificar.Enabled:=false;
       menu.btsborrar.Enabled:=false;
       menu.btsguardar.Enabled:=true;
       menu.btscancelar.Enabled:=true;
   end else
   begin
       menu.btsmodificar.Enabled:=true;
       menu.btsborrar.Enabled:=true;
       menu.btsguardar.Enabled:=false;
       menu.btscancelar.Enabled:=false;
   end;
end;

procedure TDM.empleadosAfterDelete(DataSet: TDataSet);
begin
    qempleados.Refresh;
end;

procedure TDM.empleadosAfterPost(DataSet: TDataSet);
var ide,id:string;
begin
    ide:=empleadoside.asstring;
    id:=empleadosid.asstring;
    qempleados.Refresh;
    qempleados.Locate('id',id,[locaseinsensitive,lopartialkey]);
    empleados.MasterSource:=dsqempleados;

end;

procedure TDM.empleadosBeforePost(DataSet: TDataSet);
var vcolor:string;
    rojo,verde,azul:string;
begin
{   vcolor:='$' + inttohex(menu.colorempleados.Brush.Handle,8);
   empleadoscolor.Value:=vcolor;
   rojo:= inttohex(getrvalue(menu.colorempleados.color),2);
   verde:= inttohex(getgvalue(menu.colorempleados.color),2);
   azul:= inttohex(getbvalue(menu.colorempleados.color),2);
   vcolor:='$' + inttohex(getrvalue(menu.colorempleados.color),2) + inttohex(getgvalue(menu.colorempleados.color),2) +inttohex(getbvalue(menu.colorempleados.color),2)}
end;

procedure TDM.empresaBeforeOpen(DataSet: TDataSet);
begin
    empresa.Filtered:=false;
    empresa.Filter:='id='+inttostr(centro);
    empresa.filtered:=true;
end;

procedure TDM.gruposAfterPost(DataSet: TDataSet);
begin
if grupoactivo<>gruposactivo.AsInteger then
begin
   if gruposactivo.AsInteger=0 then
   begin
    qactualizarfechabajaalumnos.Prepare;
    qactualizarfechabajaalumnos.ParamByName('FECHA').asdatetime:=gruposfechabaja.AsDateTime;
    qactualizarfechabajaalumnos.ParamByName('EMPRESA').asinteger:=gruposide.asinteger;
    qactualizarfechabajaalumnos.ParamByName('GRUPO').asinteger:=gruposid.asinteger;
    qactualizarfechabajaalumnos.ExecSQL;
    qdesactivaralumnos.ExecSQL;
    qdesactivarclientes.execsql;
   end;

end;

end;

procedure TDM.gruposBeforePost(DataSet: TDataSet);
begin
    if gruposactivo.Value=0 then  gruposfechabaja.Value:=date();
    if gruposactivo.Value=1 then  gruposfechabaja.Value:=0;

end;

procedure TDM.gruposfechainicioValidate(Sender: TField);
begin
  if EsMascaraDeFechaVacia(Sender.AsString) then
  begin
    // Si está vacío, limpia el campo. Esto asignará NULL a la base de datos.
    Sender.Clear;
  end;
end;

procedure TDM.impartirAfterDelete(DataSet: TDataSet);
begin
    qimpartirgrupo.Refresh;
end;

procedure TDM.impartirAfterPost(DataSet: TDataSet);
var ide,id:string;
begin
    ide:=impartiride.asstring;
    id:=impartiridg.asstring;
    qimpartirgrupo.Refresh;
    qimpartirgrupo.Locate('idg',id,[locaseinsensitive,lopartialkey]);
    impartir.MasterSource:=dsqimpartir;
end;

procedure TDM.qalumnosAfterClose(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+') or nombre_padre_madre like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+') or nombre_padre_madre like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qalumnos.SQL.Clear;
    qalumnos.SQL.Add('select id,nombre_completo,ide from alumnos ' + filtrolocal +' order by nombre_completo')


end;

procedure TDM.qasistiralumnoAfterClose(DataSet: TDataSet);
begin
    asistir.Close;
end;

procedure TDM.qclientesBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;
    qclientes.SQL.Clear;
    qclientes.SQL.Add('select id,nombre_completo,ide,nif from clientes ' + filtrolocal +' order by nombre_completo');
end;

procedure TDM.qcursosBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where nombre like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (nombre like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qcursos.SQL.Clear;
    qcursos.SQL.Add('select id,nombre,ide,anyo_escolar from cursos ' + filtrolocal +'order by nombre')

end;

procedure TDM.qempleadosAfterClose(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (nombre_completo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qempleados.SQL.Clear;
    qempleados.SQL.Add('select id,nombre_completo,ide from empleados ' + filtrolocal +' order by nombre_completo')

end;

procedure TDM.qfaltasempleadosAfterInsert(DataSet: TDataSet);
begin
   qfaltasempleadosidp.Value:=empleadosid.AsInteger;
   qfaltasempleadoside.Value:=empleadoside.AsInteger;
end;

procedure TDM.qgrupoalumnos2CalcFields(DataSet: TDataSet);
begin
    qgrupoalumnos2edad.value:= trunc((date()-qgrupoalumnos2fecha_nacimiento.AsDateTime)/365);
end;

procedure TDM.qgrupoalumnosCalcFields(DataSet: TDataSet);
begin
    qgrupoalumnosedad.value:= trunc((date()-qgrupoalumnosfecha_nacimiento.AsDateTime)/365);
end;

procedure TDM.qgruposdesactivarAfterPost(DataSet: TDataSet);
begin
if grupoactivo<>qgruposdesactivaractivo.AsInteger then
begin
   if qgruposdesactivaractivo.AsInteger=0 then
   begin
    qactualizarfechabajaalumnos.Prepare;
    qactualizarfechabajaalumnos.ParamByName('FECHA').asdatetime:=qgruposdesactivarfechabaja.AsDateTime;
    qactualizarfechabajaalumnos.ParamByName('EMPRESA').asinteger:=qgruposdesactivaride.asinteger;
    qactualizarfechabajaalumnos.ParamByName('GRUPO').asinteger:=qgruposdesactivarid.asinteger;
    qactualizarfechabajaalumnos.ExecSQL;
    qdesactivaralumnos.ExecSQL;
    qdesactivarclientes.execsql;
   end;
end;
end;

procedure TDM.qgrupospBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where g.nombre like('+''''+filtro+''''+') and g.activo=1';
         if filtrolista<>'' then filtrolocal:=filtrolocal+' and '+filtrolista;

      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where g.nombre like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+' and g.activo=1 ';
            if filtrolista<>'' then filtrolocal:=filtrolocal+' and '+filtrolista;

          end;
      end else
          begin
            filtrolocal:=' where g.nombre like('+''''+filtro+''''+')';
            if filtrolista<>'' then filtrolocal:=filtrolocal+' and '+filtrolista;
          end;
       end;

    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where g.activo=1 ';
          if filtrolista<>'' then filtrolocal:=filtrolocal+' and '+filtrolista;

      end else
      begin
//         filtrolocal:=' where ';
//         if filtrolista<>'' then filtrolocal:=filtrolocal+filtrolista;
      end;
    end;


    qgruposp.SQL.Clear;
    qgruposp.SQL.Add('select g.* from grupos g' + filtrolocal +' order by g.nombre');
    qnum_alumnos.SQL.Clear;
    qnum_alumnos.SQL.Add('select sum(plazas_ocupadas) as num_alumnos FROM GRUPOS G '+ filtrolocal);
    qnum_alumnos.Open;

end;

procedure TDM.qidrecursosBeforeOpen(DataSet: TDataSet);
begin
  qidrecursos.Prepare;
  qidrecursos.ParamByName('CENTRO').AsInteger:=pcentro;
  qidrecursos.ParamByName('CURSO').AsInteger:=pcurso;
end;

procedure TDM.qimpartiractivoBeforeOpen(DataSet: TDataSet);
begin
    qimpartiractivo.Prepare;
    qimpartiractivo.ParamByName('EMPLEADO').AsInteger:=qempleadossesionesid.asinteger;
    qimpartiractivo.ParamByName('CENTRO').AsInteger:=qempleadossesioneside.asinteger;

end;

procedure TDM.qprogresoBeforeOpen(DataSet: TDataSet);
begin
  qprogresos.Prepare;
  qprogresos.ParamByName('CENTRO').AsInteger:=pcentro;
  qprogresos.ParamByName('CURSO').AsInteger:=pcurso;
end;

procedure TDM.qprogresosBeforeOpen(DataSet: TDataSet);
begin
  qprogresos.Prepare;
  qprogresos.ParamByName('CENTRO').AsInteger:=pcentro;
  qprogresos.ParamByName('CURSO').AsInteger:=pcurso;
  qprogresos.ParamByName('GRUPO').AsInteger:=pgrupo;


end;

procedure TDM.qrecibosempleadosAfterInsert(DataSet: TDataSet);
var vid:integer;
begin
   qidreciboemp.Open;
   if qidreciboempid.asinteger>0 then vid:=qidreciboempid.asinteger else vid:=1;
   qidreciboemp.Close;
   qrecibosempleadosid.value:=vid;
   qrecibosempleadoside.value:=empleadoside.asinteger;
   qrecibosempleadosidemp.Value:=empleadosid.AsInteger;
   qrecibosempleadosfecha.value:=date();
   qrecibosempleadospagado.Value:=0;
end;

procedure TDM.qrecibosempleadosBeforePost(DataSet: TDataSet);
begin
   qrecibosempleadosnomina.Value:=qrecibosempleadosbanco.AsFloat+qrecibosempleadosefectivo.AsFloat;
end;

procedure TDM.qrecursosAfterInsert(DataSet: TDataSet);
begin
  qidrecursos.Open;
  qrecursoside.Value:=pcentro;
  qrecursosidc.Value:=pcurso;
  qrecursosid.Value:=qidrecursosid.AsInteger;
end;

procedure TDM.qrecursosBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este recurso?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDM.qrecursosBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qrecursos.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este recurso?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este recurso?',true,true,true);
    case x of
        mrno: begin
                 qrecursos.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;
    end;
end;

procedure TDM.recibosfechareciboValidate(Sender: TField);
begin

   if recibosfecharecibo.asstring='  /  /  ' then
   begin
      recibosfecharecibo.value := null;
   end;
end;

procedure TDM.sesionesBeforeOpen(DataSet: TDataSet);
begin
    sesiones.Prepare;
    sesiones.ParamByName('CENTRO').AsInteger:=pcentro;
    sesiones.ParamByName('GRUPO').AsInteger:=pgrupo;

end;

procedure TDM.sesiones_alumnosBeforeOpen(DataSet: TDataSet);
begin
    sesiones_alumnos.Prepare;
    sesiones_alumnos.ParamByName('CENTRO').AsInteger:=sesioneside.asinteger;
    sesiones_alumnos.ParamByName('GRUPO').AsInteger:=sesionesidg.asinteger;
    sesiones_alumnos.ParamByName('PROFESOR').AsInteger:=sesionesidp.asinteger;
    sesiones_alumnos.ParamByName('FECHA').AsDateTime:=sesionesfecha.asdatetime;
end;

end.

