unit frecibos_s;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, ZDataset, Vcl.StdCtrls,
  Vcl.ExtCtrls, Vcl.Mask, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids,
  ZAbstractRODataset, ZAbstractDataset, Vcl.ImgList, frxClass,
  frxExportBaseDialog, frxExportPDF, frxDBSet, Vcl.ComCtrls;

type
  Trecibos_s = class(TForm)
    formaspago: TZQuery;
    Panel12: TPanel;
    Panel34: TPanel;
    DBGrid11: TDBGrid;
    Panel35: TPanel;
    Label169: TLabel;
    Panel33: TPanel;
    DBGrid12: TDBGrid;
    Panel66: TPanel;
    Label170: TLabel;
    Panel27: TPanel;
    Label129: TLabel;
    todosclientesrecibos: TCheckBox;
    tbuscarclientesrecibos: TEdit;
    DBGrid10: TDBGrid;
    qalumnosclientes: TZQuery;
    qclientes: TZReadOnlyQuery;
    qgruposclientes: TZQuery;
    qgruposclienteside: TIntegerField;
    qgruposclientesidc: TIntegerField;
    qgruposclientesnomalumno: TWideStringField;
    qgruposclientesida: TIntegerField;
    qgruposclientesidg: TIntegerField;
    qgruposclientesnomgrupo: TWideStringField;
    qgruposclientespreciomensual: TFloatField;
    qgruposclientesnomprofesor: TWideStringField;
    qgruposclientesidcurso: TIntegerField;
    qreciboscliente: TZQuery;
    qreciboscliente2: TZQuery;
    recibos: TZQuery;
    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;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    precibosdatos: TPanel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBLookupComboBox1: TDBLookupComboBox;
    DBLookupComboBox2: TDBLookupComboBox;
    DBLookupComboBox3: TDBLookupComboBox;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    comboformapago: TDBLookupComboBox;
    DBEdit8: TDBEdit;
    DBCheckBox3: TDBCheckBox;
    DBCheckBox4: TDBCheckBox;
    chkpagado: TDBCheckBox;
    DBEdit9: TDBEdit;
    Button4: TButton;
    Button5: TButton;
    Button7: TButton;
    edconcepto: TEdit;
    edfecha: TMaskEdit;
    edimporte: TEdit;
    Button8: TButton;
    edmaterial: TCheckBox;
    Panel4: TPanel;
    Panel5: TPanel;
    RadioGroup2: TRadioGroup;
    sdelcliente: TRadioButton;
    ssincobrar: TRadioButton;
    sdomiciliados: TRadioButton;
    stodos: TRadioButton;
    DBGrid1: TDBGrid;
    Panel6: TPanel;
    Label17: TLabel;
    btrcancelar: TButton;
    btrmodificar: TButton;
    btrborrar: TButton;
    btrnuevo: TButton;
    btrguardar: TButton;
    Button14: TButton;
    btractualizar: TButton;
    dsqreciboscliente2: TDataSource;
    dsqreciboscliente: TDataSource;
    dsqgruposclientes: TDataSource;
    dsqalumnosclientes: TDataSource;
    dsqclientes: TDataSource;
    dsrecibos: TDataSource;
    dsformaspago: TDataSource;
    qclientesid: TIntegerField;
    qclientesnombre_completo: TWideStringField;
    qclienteside: TIntegerField;
    qclientesnif: TWideStringField;
    qalumnosclienteside: TIntegerField;
    qalumnosclientesid: TIntegerField;
    qalumnosclientesidc: TIntegerField;
    qalumnosclientesnombre_completo: TWideStringField;
    qalumnosclientesdescuento: TFloatField;
    qalumnosclientesactivo: TIntegerField;
    gcrpagado: TDBCheckBox;
    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;
    qreciboscliente2ids: TWideStringField;
    qreciboscliente2idf: TIntegerField;
    qreciboscliente2alumno: TWideStringField;
    qreciboscliente2cliente: TWideStringField;
    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;
    qrecibosclienteforma_pago: TIntegerField;
    qrecibosclientedoc_pago: TWideStringField;
    qrecibosclientedescuento: TIntegerField;
    qrecibosclienteimportefinal: TFloatField;
    qrecibosclienteseleccionado: TIntegerField;
    qrecibosclienteids: TWideStringField;
    qrecibosclienteidf: TIntegerField;
    qrecibosclientealumno: TWideStringField;
    qrecibosclientecliente: TWideStringField;
    qclientes2: TZReadOnlyQuery;
    dsqclientes2: TDataSource;
    qalumnosclientes2: TZQuery;
    dsqalumnosclientes2: TDataSource;
    qgruposclientes2: TZQuery;
    dsqgruposclientes2: TDataSource;
    qclientes2id: TIntegerField;
    qclientes2nombre_completo: TWideStringField;
    qclientes2ide: TIntegerField;
    qclientes2nif: TWideStringField;
    qalumnosclientes2ide: TIntegerField;
    qalumnosclientes2id: TIntegerField;
    qalumnosclientes2idc: TIntegerField;
    qalumnosclientes2nombre_completo: TWideStringField;
    qalumnosclientes2descuento: TFloatField;
    qalumnosclientes2activo: TIntegerField;
    qgruposclientes2ide: TIntegerField;
    qgruposclientes2idc: TIntegerField;
    qgruposclientes2nomalumno: TWideStringField;
    qgruposclientes2ida: TIntegerField;
    qgruposclientes2idg: TIntegerField;
    qgruposclientes2nomgrupo: TWideStringField;
    qgruposclientes2preciomensual: TFloatField;
    qgruposclientes2nomprofesor: TWideStringField;
    qgruposclientes2idcurso: TIntegerField;
    ImageList1: TImageList;
    qaux: TZReadOnlyQuery;
    informedb: TfrxDBDataset;
    frxPDFExport1: TfrxPDFExport;
    informe: TfrxReport;
    qgrupos: TZReadOnlyQuery;
    qgruposid: TIntegerField;
    qgruposide: TIntegerField;
    qgruposidcurso: TIntegerField;
    qgruposnombre: TWideStringField;
    qgrupospreciomensual: TFloatField;
    qalumnos: TZReadOnlyQuery;
    qalumnoside: TIntegerField;
    qalumnosida: TIntegerField;
    qalumnosdescuento: TFloatField;
    qalumnosidc: TIntegerField;
    qclientesidfp: TIntegerField;
    qclientes3: TZReadOnlyQuery;
    qclientes3id: TIntegerField;
    qclientes3nombre_completo: TWideStringField;
    qclientes3ide: TIntegerField;
    qclientes3nif: TWideStringField;
    qclientes3idfp: TIntegerField;
    qaux2: TZReadOnlyQuery;
    qgruposclientes2preciomaterial: TFloatField;
    qgruposclientespreciomaterial: TFloatField;
    qfacturas: TZQuery;
    qfacturasdetalle: TZQuery;
    qfacturasserie: TWideStringField;
    qfacturasid: TIntegerField;
    qfacturasidempresa: TIntegerField;
    qfacturasidcliente: TIntegerField;
    qfacturasnif: TWideStringField;
    qfacturasdireccion: TWideStringField;
    qfacturaspoblacion: TWideStringField;
    qfacturasprovincia: TWideStringField;
    qfacturascodpost: TWideStringField;
    qfacturasfecha: TDateField;
    qfacturastelefono: TWideStringField;
    qfacturasnomcliente: TWideStringField;
    qfacturaspaiscliente: TWideStringField;
    qfacturasneto: TFloatField;
    qfacturastotal: TFloatField;
    qfacturascobrado: TIntegerField;
    qfacturasdocumento: TWideStringField;
    qfacturasdescuento_lin: TFloatField;
    qfacturasdescuento_com: TFloatField;
    qfacturasdescuento_pp: TFloatField;
    qfacturasdescuento_total: TFloatField;
    qfacturastotaliva: TFloatField;
    qfacturasobservaciones: TWideStringField;
    qfacturasdetalleid: TIntegerField;
    qfacturasdetalleidempresa: TIntegerField;
    qfacturasdetalleserie: TWideStringField;
    qfacturasdetalleidfactura: TIntegerField;
    qfacturasdetalledescripcion: TWideStringField;
    qfacturasdetallecantidad: TFloatField;
    qfacturasdetalleprecio: TFloatField;
    qfacturasdetalledescuento: TFloatField;
    qfacturasdetalletotaldescuento: TFloatField;
    qfacturasdetallebase: TFloatField;
    qfacturasdetalletipoiva: TFloatField;
    qfacturasdetalleiva: TFloatField;
    qfacturasdetalletotal: TFloatField;
    dsqfacturas: TDataSource;
    dsqfacturasdetalles: TDataSource;
    qseries: TZQuery;
    qclientes2nombre: TWideStringField;
    qclientes2apellidos: TWideStringField;
    qclientes2direccion: TWideStringField;
    qclientes2poblacion: TWideStringField;
    qclientes2codpost: TWideStringField;
    qclientes2provincia: TWideStringField;
    qclientes2telefono1: TWideStringField;
    qclientes2telefono2: TWideStringField;
    qclientes2email: TWideStringField;
    qclientes2formapago: TWideStringField;
    qclientes2entidad: TWideStringField;
    qclientes2iban: TWideStringField;
    qclientes2cuenta: TWideStringField;
    qclientes2swift: TWideStringField;
    qclientes2activo: TIntegerField;
    qclientes2descuento: TIntegerField;
    qclientes2idfp: TIntegerField;
    qseriesid: TWideStringField;
    qserieside: TIntegerField;
    qseriesdescripcion: TWideStringField;
    qseriesnum_presupuesto: TIntegerField;
    qseriesnum_albaran: TIntegerField;
    qseriesnum_factura: TIntegerField;
    qseriesdefecto: TIntegerField;
    qseriesfechainicio: TDateField;
    qseriesfechafin: TDateField;
    qseriesplantillaalbaran: TWideStringField;
    qseriesplantillapresupuesto: TWideStringField;
    qseriesplantillafactura: TWideStringField;
    formaspagoid: TIntegerField;
    formaspagoide: TIntegerField;
    formaspagoids: TWideStringField;
    formaspagodescripcion: TWideStringField;
    formaspagoactivo: TIntegerField;
    formaspagodomiciliado: TIntegerField;
    qfacturasidformapago: TIntegerField;
    Label18: TLabel;
    DBText1: TDBText;
    DBText2: TDBText;
    qfacturastmp: TZQuery;
    qfacturasdetalletmp: TZQuery;
    qfacturastmpserie: TWideStringField;
    qfacturastmpid: TIntegerField;
    qfacturastmpidempresa: TIntegerField;
    qfacturastmpidcliente: TIntegerField;
    qfacturastmpnif: TWideStringField;
    qfacturastmpdireccion: TWideStringField;
    qfacturastmppoblacion: TWideStringField;
    qfacturastmpprovincia: TWideStringField;
    qfacturastmpcodpost: TWideStringField;
    qfacturastmpfecha: TDateField;
    qfacturastmptelefono: TWideStringField;
    qfacturastmpnomcliente: TWideStringField;
    qfacturastmppaiscliente: TWideStringField;
    qfacturastmpneto: TFloatField;
    qfacturastmptotal: TFloatField;
    qfacturastmpcobrado: TIntegerField;
    qfacturastmpdocumento: TWideStringField;
    qfacturastmpdescuento_lin: TFloatField;
    qfacturastmpdescuento_com: TFloatField;
    qfacturastmpdescuento_pp: TFloatField;
    qfacturastmpdescuento_total: TFloatField;
    qfacturastmptotaliva: TFloatField;
    qfacturastmpobservaciones: TWideStringField;
    qfacturastmpidformapago: TIntegerField;
    qfacturasdetalletmpid: TIntegerField;
    qfacturasdetalletmpidempresa: TIntegerField;
    qfacturasdetalletmpserie: TWideStringField;
    qfacturasdetalletmpidfactura: TIntegerField;
    qfacturasdetalletmpdescripcion: TWideStringField;
    qfacturasdetalletmpcantidad: TFloatField;
    qfacturasdetalletmpprecio: TFloatField;
    qfacturasdetalletmpdescuento: TFloatField;
    qfacturasdetalletmptotaldescuento: TFloatField;
    qfacturasdetalletmpbase: TFloatField;
    qfacturasdetalletmptipoiva: TFloatField;
    qfacturasdetalletmpiva: TFloatField;
    qfacturasdetalletmptotal: TFloatField;
    qformaspagocobros: TZReadOnlyQuery;
    qformaspagocobrosid: TIntegerField;
    qformaspagocobroside: TIntegerField;
    qformaspagocobrosids: TWideStringField;
    qformaspagocobrosdescripcion: TWideStringField;
    qformaspagocobrosactivo: TIntegerField;
    qformaspagocobrosdomiciliado: TIntegerField;
    Panel3: TPanel;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    Edit1: TEdit;
    Edit4: TEdit;
    Edit2: TEdit;
    procedure FormShow(Sender: TObject);
    procedure tbuscarclientesrecibosEnter(Sender: TObject);
    procedure tbuscarclientesrecibosExit(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dsqclientesDataChange(Sender: TObject; Field: TField);
    procedure DBGrid11DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure ssincobrarClick(Sender: TObject);
    procedure sdelclienteClick(Sender: TObject);
    procedure stodosClick(Sender: TObject);
    procedure sdomiciliadosClick(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure dsqrecibosclienteDataChange(Sender: TObject; Field: TField);
    procedure dsqreciboscliente2DataChange(Sender: TObject; Field: TField);
    procedure dsqclientes2DataChange(Sender: TObject; Field: TField);
    procedure btrnuevoClick(Sender: TObject);
    procedure btrborrarClick(Sender: TObject);
    procedure btrmodificarClick(Sender: TObject);
    procedure btrguardarClick(Sender: TObject);
    procedure btrcancelarClick(Sender: TObject);
    procedure btractualizarClick(Sender: TObject);
    procedure dsrecibosStateChange(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit3KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure recibosfechacobroValidate(Sender: TField);
    procedure recibosfechareciboValidate(Sender: TField);
    procedure DBEdit4Change(Sender: TObject);
    procedure DBEdit4Exit(Sender: TObject);
    procedure DBEdit4KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DBEdit2Exit(Sender: TObject);
    procedure DBEdit5Enter(Sender: TObject);
    procedure DBEdit7Enter(Sender: TObject);
    procedure DBEdit6Enter(Sender: TObject);
    procedure DBCheckBox3Click(Sender: TObject);
    procedure chkpagadoClick(Sender: TObject);
    procedure dsqalumnosclientes2DataChange(Sender: TObject; Field: TField);
    procedure DBEdit4Enter(Sender: TObject);
    procedure recibosAfterPost(DataSet: TDataSet);
    procedure dsqgruposclientes2DataChange(Sender: TObject; Field: TField);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  recibos_s: Trecibos_s;
  filtro,vertodos,tprinter,tprinter2:string;
  nuevorecibo,recibo,cliente,centro:integer;
  cobrando:boolean;
  numcobros,x:integer;
  listarecibos:array of integer;
const
  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;


implementation

{$R *.dfm}

uses CONSULTASINFORMES, ffacturas, fdlgcobros;

procedure Trecibos_s.btrmodificarClick(Sender: TObject);
begin
    if recibos.MasterSource=dsqreciboscliente then nuevorecibo:=1;
    if recibos.MasterSource=dsqreciboscliente2 then nuevorecibo:=2;
    if qreciboscliente2.Active=false then qreciboscliente2.Open;
    recibo:=recibosid.AsInteger;
    cliente:=recibosidc.AsInteger;
    recibos.Edit;
    precibosdatos.Enabled:=true;
//    dbedit3.SetFocus;
end;

procedure Trecibos_s.btrborrarClick(Sender: TObject);
begin
   qaux.Close;
   qaux.SQL.Clear;
   qaux.SQL.Add('select * from cobros where seleccionado=1');
   qaux.Open;
   if qaux.RecordCount>0 then
   begin
       qaux.Close;
       qaux.SQL.Clear;
       qaux.SQL.Add('delete from cobros where seleccionado=1');
       qaux.execsql;
   end else
   begin
       qaux.Close;
       qaux.SQL.Clear;
       qaux.SQL.Add('delete from cobros where id='+recibosid.AsString);
       qaux.execsql;
   end;

//   dm.recibos.Delete;
   qreciboscliente.Refresh;
   qreciboscliente2.Refresh;
  if dbgrid1.DataSource=dsqreciboscliente then
  begin
    recibo:=qrecibosclienteid.AsInteger;
       recibos.Prepare;
       recibos.ParamByName('PRECIBO').AsInteger:=recibo;
       recibos.Refresh;
  end;
  if dbgrid1.DataSource=dsqreciboscliente2 then
  begin
    recibo:=qreciboscliente2id.AsInteger;
       recibos.Prepare;
       recibos.ParamByName('PRECIBO').AsInteger:=recibo;
       recibos.Refresh;
  end;

end;

procedure Trecibos_s.btrnuevoClick(Sender: TObject);
begin
     nuevorecibo:=1;

    recibos.MasterSource:=nil;
    recibos.Append;
    recibosdomiciliado.Value:=0;
    recibosmaterial.Value:=0;
    recibospagado.Value:=0;
    reciboside.value:=centro;
    recibosidc.Value:=qclientesid.AsInteger;

    precibosdatos.Enabled:=true;
    dbedit3.SetFocus;
end;

procedure Trecibos_s.Button14Click(Sender: TObject);
begin
  close;
end;

procedure Trecibos_s.Button4Click(Sender: TObject);
var recibo,i,idformapago:integer;
    vfechacobro:tdate;
    ventrega:real;

begin
  ventrega:=0;
  if dbgrid1.Selectedrows.Count>=1 then
  begin
    for x:=0 to dbgrid1.Selectedrows.Count-1 do
      begin
        if dbgrid1.DataSource=dsqreciboscliente then
        begin
           qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[x]));
           ventrega:=ventrega+recibosimportefinal.asfloat;
        end;
        if dbgrid1.DataSource=dsqreciboscliente2 then
        begin
           qreciboscliente2.GotoBookmark (pointer (dbgrid1.selectedrows[x]));
           ventrega:=ventrega+recibosimportefinal.asfloat;
        end;
      end;


    dlgcobros := Tdlgcobros.Create(nil);
    try
      dlgcobros.vfecha.Date:=date();
      dlgcobros.lentrega.text:=floattostr(ventrega);//recibosimportefinal.AsString;
      qformaspagocobros.open;
      dlgcobros.showmodal();
    finally
      vfechacobro:=dlgcobros.vfecha.DateTime;
      idformapago:=qformaspagocobrosid.AsInteger;
      ventrega:=strtofloat(dlgcobros.lentrega.Text);
      dlgcobros.Free;
    end;
   numcobros:=dbgrid1.SelectedRows.Count-1;
   listarecibos:=nil;
   setlength(listarecibos,dbgrid1.SelectedRows.Count);
   if dbgrid1.Selectedrows.Count>=1 then
   begin
      for x:=0 to numcobros do
      begin
        qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[x]));
        listarecibos[x]:=recibosid.AsInteger;
      end;
      for x:=0 to numcobros do
      begin
        if dbgrid1.DataSource=dsqreciboscliente then
        begin
          // qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[x]));
          // listarecibos[x]:=recibosid.AsInteger;
//           btrmodificar.Click;
           cobrando:=true;
           recibos.Prepare;
           recibos.ParamByName('PRECIBO').AsInteger:=listarecibos[x];
           recibos.Refresh;
           recibos.Edit;
           recibospagado.Value:=1;
           recibo:=recibosid.AsInteger;
           recibosforma_pago.Value:=idformapago;
           recibosfechacobro.Value:=vfechacobro;
           //if recibosfechacobro.AsString='' then recibosfechacobro.Value:=date();
           if x=numcobros then recibosentrega.Value:=ventrega
           else
             begin
               recibosentrega.Value:=recibosimportefinal.AsFloat;
               ventrega:=ventrega-recibosimportefinal.AsFloat;
             end;
           recibos.Post;
          if cobrando and (recibospagado.AsInteger=1) and ((recibosidf.asstring='') or (recibosidf.asstring='-1')) then
          begin
               qseries.Close;
               qseries.Prepare;
               qseries.ParamByName('EMPRESA').AsInteger:=reciboside.AsInteger;
               qseries.ParamByName('SERIE').Asstring:=formaspagoids.AsString;
               qseries.Open;
               qfacturas.Open;
               qfacturas.Append;
               qfacturasserie.Value:=qseriesid.AsString;
               qfacturasidempresa.Value:=qclientes2ide.AsInteger;
               qfacturasid.Value:=qseriesnum_factura.AsInteger;
               qfacturasidcliente.Value:=qclientes2id.AsInteger;
               qfacturasnif.Value:=qclientes2nif.Asstring;
               qfacturasnomcliente.value:=qclientes2apellidos.AsString+' '+qclientes2nombre.AsString;
               qfacturaspoblacion.value:=qclientes2poblacion.AsString;
               qfacturasprovincia.value:=qclientes2provincia.AsString;
               qfacturascodpost.value:=qclientes2codpost.AsString;
               qfacturastelefono.value:=qclientes2telefono1.AsString;
               qfacturasdireccion.value:=qclientes2direccion.AsString;
               qfacturasfecha.value:=recibosfechacobro.AsDateTime;
               qfacturasneto.value:=recibosimporte.Asfloat;
               qfacturasdescuento_total.value:=recibosdescuento.Asfloat/100*recibosimporte.AsFloat;
               qfacturastotal.value:=recibosimportefinal.Asfloat;
               qfacturasidformapago.value:=recibosforma_pago.asinteger;
               qfacturas.Post;
               qfacturasdetalle.Open;
               qfacturasdetalle.Append;
               qfacturasdetalleid.value:=1;
               qfacturasdetalleidempresa.value:=qfacturasidempresa.AsInteger;
               qfacturasdetalleserie.value:=qfacturasserie.AsString;
               qfacturasdetalleidfactura.value:=qfacturasid.AsInteger;
               qfacturasdetalledescripcion.value:='Recibo Nº: '+recibosid.asstring+' '+recibosconcepto.AsString;
               qfacturasdetallecantidad.value:=1;
               qfacturasdetalleprecio.value:=recibosimporte.AsFloat;
               qfacturasdetalletotaldescuento.value:=recibosdescuento.AsFloat/100*recibosimporte.AsFloat;
               qfacturasdetalledescuento.value:=recibosdescuento.AsFloat;
               qfacturasdetallebase.value:=recibosimportefinal.AsFloat;
               qfacturasdetalletipoiva.value:=0;
               qfacturasdetalleiva.value:=0;
               qfacturasdetalletotal.value:=recibosimportefinal.AsFloat;
               qfacturasdetalle.post;
               qseries.Edit;
               qseriesnum_factura.Value:=qseriesnum_factura.AsInteger+1;
               qseries.Post;
               recibos.Edit;
               recibosids.value:=qfacturasserie.asstring;
               recibosidf.Value:=qfacturasid.asinteger;
               recibos.Post;
//               recibos.Refresh;
               if numcobros<=x+1 then
               begin
                 cobrando:=false;
 //                if qreciboscliente.Active and not cobrando then  qreciboscliente.Refresh;
 //                if qreciboscliente2.Active and not cobrando then qreciboscliente2.Refresh;
               end
               else
                  begin
                    if dbgrid1.DataSource=dsqreciboscliente then
                    begin
                      qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[X]));
                    end;
                    if dbgrid1.DataSource=dsqreciboscliente2 then
                    begin
                      qreciboscliente2.GotoBookmark (pointer (dbgrid1.selectedrows[X]));
                    end;
                  end;
          end;

        end;


        if dbgrid1.DataSource=dsqreciboscliente2 then
        begin
           qreciboscliente2.GotoBookmark (pointer (dbgrid1.selectedrows[x]));
           listarecibos[x]:=recibosid.AsInteger;
//           btrmodificar.Click;
           cobrando:=true;
           recibos.Prepare;
           recibos.ParamByName('PRECIBO').AsInteger:=listarecibos[x];
           recibos.Refresh;
           cobrando:=true;
           recibos.Edit;
           recibospagado.Value:=1;
           recibo:=recibosid.AsInteger;
           recibosforma_pago.Value:=idformapago;
           recibosfechacobro.Value:=vfechacobro;
//           if recibosfechacobro.AsString='' then recibosfechacobro.Value:=date();
           if x=numcobros then recibosentrega.Value:=ventrega
           else
             begin
               recibosentrega.Value:=recibosimportefinal.AsFloat;
               ventrega:=ventrega-recibosimportefinal.AsFloat;
             end;
           recibos.Post;
          if cobrando and (recibospagado.AsInteger=1) and ((recibosidf.asstring='') or (recibosidf.asstring='-1')) then
          begin
               qseries.Close;
               qseries.Prepare;
               qseries.ParamByName('EMPRESA').AsInteger:=reciboside.AsInteger;
               qseries.ParamByName('SERIE').Asstring:=formaspagoids.AsString;
               qseries.Open;
               qfacturas.Open;
               qfacturas.Append;
               qfacturasserie.Value:=qseriesid.AsString;
               qfacturasidempresa.Value:=qclientes2ide.AsInteger;
               qfacturasid.Value:=qseriesnum_factura.AsInteger;
               qfacturasidcliente.Value:=qclientes2id.AsInteger;
               qfacturasnif.Value:=qclientes2nif.Asstring;
               qfacturasnomcliente.value:=qclientes2apellidos.AsString+' '+qclientes2nombre.AsString;
               qfacturaspoblacion.value:=qclientes2poblacion.AsString;
               qfacturasprovincia.value:=qclientes2provincia.AsString;
               qfacturascodpost.value:=qclientes2codpost.AsString;
               qfacturastelefono.value:=qclientes2telefono1.AsString;
               qfacturasdireccion.value:=qclientes2direccion.AsString;
               qfacturasfecha.value:=recibosfechacobro.AsDateTime;
               qfacturasneto.value:=recibosimporte.Asfloat;
               qfacturasdescuento_total.value:=recibosdescuento.Asfloat/100*recibosimporte.AsFloat;
               qfacturastotal.value:=recibosimportefinal.Asfloat;
               qfacturasidformapago.value:=recibosforma_pago.asinteger;
               qfacturas.Post;
               qfacturasdetalle.Open;
               qfacturasdetalle.Append;
               qfacturasdetalleid.value:=1;
               qfacturasdetalleidempresa.value:=qfacturasidempresa.AsInteger;
               qfacturasdetalleserie.value:=qfacturasserie.AsString;
               qfacturasdetalleidfactura.value:=qfacturasid.AsInteger;
               qfacturasdetalledescripcion.value:='Recibo Nº: '+recibosid.asstring+' '+recibosconcepto.AsString;
               qfacturasdetallecantidad.value:=1;
               qfacturasdetalleprecio.value:=recibosimporte.AsFloat;
               qfacturasdetalletotaldescuento.value:=recibosdescuento.AsFloat/100*recibosimporte.AsFloat;
               qfacturasdetalledescuento.value:=recibosdescuento.AsFloat;
               qfacturasdetallebase.value:=recibosimportefinal.AsFloat;
               qfacturasdetalletipoiva.value:=0;
               qfacturasdetalleiva.value:=0;
               qfacturasdetalletotal.value:=recibosimportefinal.AsFloat;
               qfacturasdetalle.post;
               qseries.Edit;
               qseriesnum_factura.Value:=qseriesnum_factura.AsInteger+1;
               qseries.Post;
               recibos.Edit;
               recibosids.value:=qfacturasserie.asstring;
               recibosidf.Value:=qfacturasid.asinteger;
               recibos.Post;
//               recibos.Refresh;
               if numcobros<=x+1 then
               begin
              // button5.Click;
                 cobrando:=false;
                 if qreciboscliente.Active and not cobrando then  qreciboscliente.Refresh;
                 if qreciboscliente2.Active and not cobrando then qreciboscliente2.Refresh;
               end
               else
                  begin
                    if dbgrid1.DataSource=dsqreciboscliente then
                    begin
                      qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[X]));
                    end;
                    if dbgrid1.DataSource=dsqreciboscliente2 then
                    begin
                      qreciboscliente2.GotoBookmark (pointer (dbgrid1.selectedrows[X]));
                    end;
                  end;
          end;
        end;

      end;
          button5.click;
          if qreciboscliente.Active and not cobrando then  qreciboscliente.Refresh;
          if qreciboscliente2.Active and not cobrando then qreciboscliente2.Refresh;
   end;
  end else showmessage('Debe seleccionar al menos un recibo');
  if qreciboscliente.Active then
  begin
    qreciboscliente.Next;
    qreciboscliente.Prior;
  end;
  if qreciboscliente2.Active then
  begin
    qreciboscliente2.Next;
    qreciboscliente2.Prior;
  end;

end;

procedure Trecibos_s.Button5Click(Sender: TObject);
var recibo:string;
     i:integer;
begin
   if dbgrid1.Selectedrows.Count>0 then
   begin
   if dbgrid1.Selectedrows.Count>1 then
   begin
     qaux.SQL.Clear;
     qaux.SQL.Add('update cobros set seleccionado=0 where seleccionado=1');
     qaux.ExecSQL;
     for i := 0 to dbgrid1.Selectedrows.Count - 1 do
     begin
       if dbgrid1.DataSource=dsqreciboscliente then
       begin
         qreciboscliente.GotoBookmark (pointer (dbgrid1.selectedrows[i]));
         qaux.SQL.Clear;
         qaux.SQL.Add('update cobros set seleccionado=1 where id='+qrecibosclienteid.asstring);
         qaux.ExecSQL;
       end;
       if dbgrid1.DataSource=dsqreciboscliente2 then
       begin
         qreciboscliente2.GotoBookmark (pointer (dbgrid1.selectedrows[i]));
         qaux.SQL.Clear;
         qaux.SQL.Add('update cobros set seleccionado=1 where id='+qreciboscliente2id.asstring);
         qaux.ExecSQL;
       end;
     end;
    dminf.qinfrecibo.close;
    dminf.qinfrecibo.SQL.Clear;
    dminf.qinfrecibo.SQL.Add('select c.*,cli.nif,cli.nombre_completo as nomcliente,a.nombre_completo as nomalumno,g.nombre as nomgrupo ');
    dminf.qinfrecibo.SQL.Add(',(select descripcion from formas_pago where ide=c.ide and id=c.forma_pago) as descpago from cobros c,clientes cli,alumnos a,grupos g');
    dminf.qinfrecibo.SQL.Add(' where c.ide=cli.ide and c.idc=cli.id and c.ide=a.ide and c.ida=a.id and ');
    dminf.qinfrecibo.SQL.Add(' c.ide=g.ide and c.idg=g.id and cli.ide=a.ide and cli.id=a.idc and c.seleccionado=1');
    dminf.qinfrecibo.Open;
   end;
   if dbgrid1.Selectedrows.Count=1 then
   begin
        recibo:=recibosid.Asstring;
        dminf.qinfrecibo.close;
        dminf.qinfrecibo.SQL.Clear;
        dminf.qinfrecibo.SQL.Add('select c.*,cli.nif,cli.nombre_completo as nomcliente,a.nombre_completo as nomalumno,g.nombre as nomgrupo ');
        dminf.qinfrecibo.SQL.Add(',(select descripcion from formas_pago where ide=c.ide and id=c.forma_pago) as descpago from cobros c,clientes cli,alumnos a,grupos g');
        dminf.qinfrecibo.SQL.Add(' where c.ide=cli.ide and c.idc=cli.id and c.ide=a.ide and c.ida=a.id and ');
        dminf.qinfrecibo.SQL.Add(' c.ide=g.ide and c.idg=g.id and cli.ide=a.ide and cli.id=a.idc and c.id='+recibo);
        dminf.qinfrecibo.Open;
    end;

    informedb.Datasource:=dminf.dsqinfrecibo;
    informe.Report.Clear;
    informe.LoadFromFile('c:\formagest\informes\tiquet.fr3');

//    informes.Report.FileName:=TMES.Text+' ' + qjornalestrabajador.asstring;
    informe.PrintOptions.Printer:=tprinter;
    informe.ShowReport();

    informe.Clear;
   end else
         begin
           showmessage('¡¡¡ ATENCION DEBE SELECCIONAR AL MENOS UN RECIBO ¡¡¡');
         end;


     qaux.SQL.Clear;
     qaux.SQL.Add('update cobros set seleccionado=0 where seleccionado=1');
     qaux.ExecSQL;
 //    qreciboscliente.Refresh;
 //    qreciboscliente2.Refresh;


end;


procedure Trecibos_s.Button7Click(Sender: TObject);
begin

    qgrupos.Open;
    qgrupos.first;
    while not qgrupos.Eof do
    begin
        qalumnos.Close;
        qalumnos.SQL.Clear;
        qalumnos.SQL.Add('select a.ide,a.ida,al.idc,al.descuento from asistir a,alumnos al where al.automatico=1 and a.fechabaja is null and a.ide=al.ide and a.ida=al.id');
        qalumnos.SQL.Add(' and a.ide='+qgruposide.AsString+' and a.idg='+qgruposid.asstring);
        qalumnos.Open;
        if qalumnos.RecordCount>0 then
        begin
           while not qalumnos.Eof do
           begin
             qclientes3.close;
             qclientes3.Prepare;
             qclientes3.ParamByName('NOMBRE').AsString:=' ';
             qclientes3.ParamByName('IDC').AsInteger:= qalumnosidc.AsInteger;
             qclientes3.ParamByName('ACTIVO').AsString:='1';
             qclientes3.Open;


             recibos.MasterSource:=nil;
             recibos.Append;
             recibospagado.Value:=0;
             reciboside.Value:=qalumnoside.AsInteger;
             recibosidc.Value:=qalumnosidc.AsInteger;
             recibosida.Value:=qalumnosida.AsInteger;
             recibosidg.Value:=qgruposid.AsInteger;
             recibosfecharecibo.Value:=strtodate(edfecha.Text);
             recibosconcepto.Value:=edconcepto.Text;
             if edimporte.Text='' then
             begin
                 if edmaterial.Checked then recibosmaterial.Value:=1 else recibosmaterial.Value:=0;
                 recibosimporte.Value:=qgrupospreciomensual.AsFloat;
                 recibosdescuento.Value:=qalumnosdescuento.Asinteger;
                 recibosimportefinal.Value:=qgrupospreciomensual.AsFloat-((qgrupospreciomensual.AsFloat*qalumnosdescuento.AsFloat)/100);
             end else
             begin
                 if edmaterial.Checked then recibosmaterial.Value:=1 else recibosmaterial.Value:=0;
                 recibosimporte.Value:=strtofloat(edimporte.text);
                 recibosdescuento.Value:=0;
                 recibosimportefinal.Value:=strtofloat(edimporte.text);
             end;
             recibosforma_pago.value:=qclientes3idfp.AsInteger;
             qaux.SQL.Clear;
             qaux.SQL.Add('select domiciliado from formas_pago where ide='+reciboside.asstring+' and id='+recibosforma_pago.asstring);
             qaux.Open;
             recibosdomiciliado.Value:=qaux.Fields[0].asinteger;

             recibos.Post;
             qalumnos.Next;
           end;
        end;
        qgrupos.Next;
    end;
    dbgrid1.DataSource:=dsqreciboscliente2;
    dbgrid1.Columns[3].FieldName:='cliente';
    dbgrid1.Columns[3].Title.caption :='Cliente';
    qreciboscliente2.close;
    qreciboscliente2.Prepare;
    qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
    qreciboscliente2.ParamByName('PAGADO').AsString:='0';
    qreciboscliente2.ParamByName('DOMICILIADO').AsString:='%';
    qreciboscliente2.open;
    qreciboscliente.Refresh;
    qgrupos.Close;

end;

procedure Trecibos_s.btrguardarClick(Sender: TObject);
var recibo:integer;

begin
    recibo:=recibosid.AsInteger;
    recibosdomiciliado.Value:=formaspagodomiciliado.asinteger;
    cliente:=recibosidc.AsInteger;
    recibosidg.Value:=qgruposclientes2idg.asinteger;
    reciboside.Value:=qclientes2ide.asinteger;
    recibos.Post;
    if (recibospagado.AsInteger=0) and ((recibosidf.asstring<>'') or (recibosidf.asstring<>'-1')) and (cobrando=true) then
    begin
         qseries.Close;
         qseries.Prepare;
         qseries.ParamByName('EMPRESA').AsInteger:=reciboside.AsInteger;
         qseries.ParamByName('SERIE').Asstring:=formaspagoids.AsString;
         qseries.Open;
         qfacturastmp.Close;
         qfacturastmp.Prepare;
         qfacturastmp.ParamByName('EMPRESA').AsInteger:=reciboside.AsInteger;
         qfacturastmp.ParamByName('SERIE').AsString:=recibosids.AsString;
         qfacturastmp.ParamByName('ID').AsInteger:=recibosidf.AsInteger;
         qfacturastmp.Open;
         qfacturas.Open;
         qfacturas.Append;
         qfacturasserie.Value:=qfacturastmpserie.AsString;
         qfacturasidempresa.Value:=qfacturastmpidempresa.AsInteger;
         qfacturasid.Value:=qseriesnum_factura.AsInteger;
         qfacturasidcliente.Value:=qfacturastmpidcliente.AsInteger;
         qfacturasnif.Value:=qfacturastmpnif.Asstring;
         qfacturasnomcliente.value:=qfacturastmpnomcliente.AsString;
         qfacturaspoblacion.value:=qfacturastmppoblacion.AsString;
         qfacturasprovincia.value:=qfacturastmpprovincia.AsString;
         qfacturascodpost.value:=qfacturastmpcodpost.AsString;
         qfacturastelefono.value:=qfacturastmptelefono.AsString;
         qfacturasdireccion.value:=qfacturastmpdireccion.AsString;
         qfacturasfecha.value:=date();
         qfacturasneto.value:=qfacturastmpneto.Asfloat*-1;
         qfacturasdescuento_total.value:=qfacturastmpdescuento_total.AsFloat*-1;
         qfacturastotal.value:=qfacturastmptotal.Asfloat*-1;
         qfacturasidformapago.value:=qfacturastmpidformapago.asinteger;
         qfacturas.Post;
         qfacturasdetalletmp.Close;
         qfacturasdetalletmp.Prepare;
         qfacturasdetalletmp.ParamByName('EMPRESA').AsInteger:=reciboside.AsInteger;
         qfacturasdetalletmp.ParamByName('SERIE').AsString:=recibosids.AsString;
         qfacturasdetalletmp.ParamByName('ID').AsInteger:=recibosidf.AsInteger;
         qfacturasdetalletmp.Open;
         qfacturasdetalle.Open;
         qfacturasdetalle.Append;
         qfacturasdetalleid.value:=1;
         qfacturasdetalleidempresa.value:=qfacturasidempresa.AsInteger;
         qfacturasdetalleserie.value:=qfacturasserie.AsString;
         qfacturasdetalleidfactura.value:=qfacturasid.AsInteger;
         qfacturasdetalledescripcion.value:='Anulacion factura: '+qfacturasdetalletmpserie.asstring+'/'+qfacturasdetalletmpidfactura.AsString;
         qfacturasdetallecantidad.value:=-1;
         qfacturasdetalleprecio.value:=qfacturasdetalletmpprecio.AsFloat;
         qfacturasdetalletotaldescuento.value:=qfacturasdetalletmptotaldescuento.AsFloat*-1;
         qfacturasdetalledescuento.value:=qfacturasdetalletmpdescuento.AsFloat;
         qfacturasdetallebase.value:=qfacturasdetalletmpbase.asfloat*-1;
         qfacturasdetalletipoiva.value:=0;
         qfacturasdetalleiva.value:=0;
         qfacturasdetalletotal.value:=qfacturasdetalletmptotal.AsFloat*-1;
         qfacturasdetalle.post;
         qseries.Edit;
         qseriesnum_factura.Value:=qseriesnum_factura.AsInteger+1;
         qseries.Post;

         recibos.Edit;
         recibosids.Value:='';
         recibosidf.Value:=-1;
         recibosentrega.Value:=0;
         recibos.Post;
         cobrando:=false;
//         qreciboscliente2.Locate('id',recibosid.AsInteger,[locaseinsensitive]);
    end;

//    recibo:=recibosid.AsInteger;
//    recibos.last;
    if cobrando= false then
    begin
       qreciboscliente2.refresh;
       qreciboscliente.refresh;
       qreciboscliente2.Locate('id',recibo,[locaseinsensitive]);
       qreciboscliente.Locate('id',recibo,[locaseinsensitive]);
       qreciboscliente.First;
       qreciboscliente2.First;
       if nuevorecibo=1 then recibos.MasterSource:=dsqreciboscliente;
       if nuevorecibo=2 then recibos.MasterSource:=dsqreciboscliente2;
       dbedit9.Visible:=TRUE;
       label16.Visible:=TRUE;
       precibosdatos.Enabled:=false;
       tbuscarclientesrecibos.Text:=qrecibosclientecliente.asstring;
   //    qreciboscliente.Locate('id',recibo,[locaseinsensitive]);
   //    qreciboscliente2.Locate('id',recibo,[locaseinsensitive]);
       recibos.Prepare;
       recibos.ParamByName('PRECIBO').AsInteger:=recibo;
       recibos.Refresh;
    end;

end;

procedure Trecibos_s.btractualizarClick(Sender: TObject);
begin
    facturas := Tfacturas.Create(nil);
    try
      facturas.gserie:=recibosids.AsString;
      facturas.gfactura:=recibosidf.AsInteger;
      facturas.pagina:='0';
      facturas.showmodal();

    finally
      facturas.Free;
    end;
end;

procedure Trecibos_s.btrcancelarClick(Sender: TObject);
begin

    recibos.cancel;
    {btRactualizar.Click;
    qclientes.Locate('id',cliente,[locaseinsensitive,lopartialkey]);
    if nuevorecibo=1 then recibos.MasterSource:=dsqreciboscliente;
    if nuevorecibo=2 then recibos.MasterSource:=dsqreciboscliente2;
    qreciboscliente.CLOSE;
    qreciboscliente.Open;
    qreciboscliente.Locate('id',recibo,[locaseinsensitive,lopartialkey]);

    qreciboscliente2.Locate('id',recibo,[locaseinsensitive,lopartialkey]);
    recibos.MasterFields:='id;ide';
    recibos.LinkedFields:='id;ide';
    recibos.Open;
     }
    precibosdatos.Enabled:=false;
end;

procedure Trecibos_s.DBCheckBox3Click(Sender: TObject);
begin
   if recibos.State in [dsedit,dsinsert] then
   begin
       if dbcheckbox3.Checked then
       begin
         qaux2.SQL.Clear;
         qaux2.SQL.Add('select precio_material from cursos where ide=:PIDE and id=:PID');
         qaux2.prepare;
         qaux2.ParamByName('PIDE').asinteger:=qgruposclientes2ide.AsInteger;
         qaux2.ParamByName('PID').asinteger:=qgruposclientes2idcurso.AsInteger;
         qaux2.Open;
         recibosimporte.Value:=qaux2.fields[0].asfloat;
       end else recibosimporte.Value:=qgruposclientespreciomensual.asfloat;
       dbedit7.SetFocus;
   end;

end;

procedure Trecibos_s.chkpagadoClick(Sender: TObject);
begin
  if recibos.State  in [dsedit,dsinsert] then
  begin
    cobrando:=true;
    if chkpagado.Checked then recibosfechacobro.Value:=date();
  end;
end;

procedure Trecibos_s.DBEdit2Exit(Sender: TObject);
begin
    recibosconcepto.Value:=recibosconcepto.asstring;
end;

procedure Trecibos_s.DBEdit3Exit(Sender: TObject);
begin
    If DBEdit3.Text = '  /  /  ' then
    begin
      recibosfecharecibo.EditMask   := '';
      recibosfecharecibo.OnValidate := nil;
      DBEDIT3.Text:='';
    end;

    recibosfecharecibo.editmask   := '!99/99/99;1;_';
    recibosfecharecibo.OnValidate := recibosfecharecibovalidate;
end;

procedure Trecibos_s.DBEdit3KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    If (Key = VK_BACK) or (Key = VK_DELETE) then
    If DBEdit3.Text = '  /  /  ' then
    begin
      recibosfecharecibo.EditMask   := '';
      recibosfecharecibo.OnValidate := nil;
      DBEdit3.Text := '';
    end;
end;

procedure Trecibos_s.DBEdit4Change(Sender: TObject);
begin
    If DBEdit4.Text = '' then
    begin
    recibosfechacobro.editmask   := '!99/99/99;1;_';
    recibosfechacobro.OnValidate := recibosfechacobrovalidate;
    end;
end;

procedure Trecibos_s.DBEdit4Enter(Sender: TObject);
begin
    recibosfechacobro.editmask   := '!99/99/99;1;_';
end;

procedure Trecibos_s.DBEdit4Exit(Sender: TObject);
begin
    If DBEdit4.Text = '  /  /  ' then
    begin
      recibosfechacobro.EditMask   := '';
      recibosfechacobro.OnValidate := nil;
      DBEDIT4.Text:='';
    end;

    recibosfechacobro.editmask   := '!99/99/99;1;_';
    recibosfechacobro.OnValidate := recibosfechacobrovalidate;
end;

procedure Trecibos_s.DBEdit4KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    If (Key = VK_BACK) or (Key = VK_DELETE) then
    If DBEdit4.Text = '  /  /  ' then
    begin
      recibosfechacobro.EditMask   := '';
      recibosfechacobro.OnValidate := nil;
      DBEdit4.Text := '';

    end;
end;

procedure Trecibos_s.DBEdit5Enter(Sender: TObject);
begin
   if (dbedit5.Text='') and (not dbcheckbox3.Checked) then recibosimporte.Value:=qgruposclientes2preciomensual.asfloat;
end;

procedure Trecibos_s.DBEdit6Enter(Sender: TObject);
begin
   if dbedit6.Text='' then recibosdescuento.Value:=qalumnosclientes2descuento.asinteger;
end;

procedure Trecibos_s.DBEdit7Enter(Sender: TObject);
begin
    recibosimportefinal.Value:=recibosimporte.AsFloat-((recibosimporte.AsFloat*recibosdescuento.AsFloat)/100);
    recibosentrega.Value:=recibosimportefinal.AsFloat;
end;

procedure Trecibos_s.DBGrid11DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
    if qalumnosclientesactivo.Asinteger=0 then
    begin
        DBGrid11.Canvas.brush.Color := rojo;
    end;
    DBGrid11.DefaultDrawColumnCell(Rect, DataCol, Column, State);
// dibujar check

if (gdFocused in State) then
begin
    if (Column.Field.FieldName = 'activo') then
     begin
       gcrpagado.Left := Rect.Left + DBGrid11.Left + 2;
       gcrpagado.Top := Rect.Top + DBGrid11.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin
       if (Column.Field.FieldName = 'activo') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
      //   DrawState := ISChecked[Column.Field.Asboolean];
         DBGrid11.Canvas.FillRect(Rect);
         DrawFrameControl(DBGrid11.Canvas.Handle, DrawRect,
         DFC_BUTTON, DrawState);
       end;

     end;




end;

procedure Trecibos_s.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
//    dm.recibos.MasterSource:=nil;
if qreciboscliente2.Active=false then qreciboscliente2.Open;
    if dbgrid1.DataSource=dsqreciboscliente then
        begin
        if qrecibosclientepagado.Asinteger=0 then
        begin
            DBgrid1.Canvas.brush.Color := rojo;
        end;
        DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        if qrecibosclienteseleccionado.Asinteger=1 then
        begin
            DBgrid1.Canvas.brush.Color := amarillo;
        end;
        DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    if dbgrid1.DataSource=dsqreciboscliente2 then
        begin
        if qreciboscliente2pagado.Asinteger=0 then
        begin
            DBgrid1.Canvas.brush.Color := rojo;
        end;
        DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        if qreciboscliente2seleccionado.Asinteger=1 then
        begin
            DBgrid1.Canvas.brush.Color := amarillo;
        end;
        DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;

// dibujar check

if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'pagado') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;

    if (Column.Field.FieldName = 'domiciliado') then
    begin
      gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
      gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
      gcrpagado.Width := Rect.Right - Rect.Left;
      gcrpagado.Height := Rect.Bottom - Rect.Top;
      gcrpagado.Visible := True;
    end;
    if (Column.Field.FieldName = 'material') then
    begin
      gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
      gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
      gcrpagado.Width := Rect.Right - Rect.Left;
      gcrpagado.Height := Rect.Bottom - Rect.Top;
      gcrpagado.Visible := True;
    end;

end else
     begin

       if (Column.Field.FieldName = 'pagado') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
      //   DrawState := ISChecked[Column.Field.Asboolean];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,
         DFC_BUTTON, DrawState);
       end;

       if (Column.Field.FieldName = 'domiciliado') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
      //   DrawState := ISChecked[Column.Field.Asboolean];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,
         DFC_BUTTON, DrawState);
       end;
       if (Column.Field.FieldName = 'material') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
      //   DrawState := ISChecked[Column.Field.Asboolean];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,
         DFC_BUTTON, DrawState);
       end;

     end;
//    if nuevorecibo=1 then recibos.MasterSource:=dsqreciboscliente;
//    if nuevorecibo=2 then recibos.MasterSource:=dsqreciboscliente2;

end;

procedure Trecibos_s.DBGrid1TitleClick(Column: TColumn);
var
  st,ST2:ZAbstractRODataset.TSortType;
  ORDEN:STRING;
begin
    if sdelcliente.Checked then
    begin
      st:=qreciboscliente.SortType;
      If st = stAscending then
      begin
       ORDEN:='DESC';
       qreciboscliente.sorttype:=stDescending;
      end else
      begin
        ORDEN:='ASC';
        qreciboscliente.sorttype:=stAscending;
      end;
      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 c.id like(:CLIENTE) and c.ide=:EMPRESA ');
      qreciboscliente.sql.Add('order by pagado asc,'+column.FieldName+' '+ORDEN+',cliente');
      qreciboscliente.Prepare;
      qreciboscliente.ParamByName('CLIENTE').Asstring:=qclientesid.Asstring;
      qreciboscliente.ParamByName('EMPRESA').Asinteger:=qclienteside.AsInteger;
      qreciboscliente.open;
//      qreciboscliente.refresh;
     { st:=qreciboscliente.SortType;
      qreciboscliente.SortedFields:='PAGADO,'+Column.FieldName+',CLIENTE';
      If st = stAscending then qreciboscliente.SortType:=stDescending else qreciboscliente.SortType:=stAscending;
      dsqreciboscliente.DataSet.First;}
    end;
    if ssincobrar.Checked then
    begin
      st:=qreciboscliente2.SortType;
      If st = stAscending then
      begin
       ORDEN:='DESC';
       qreciboscliente2.sorttype:=stDescending;
      end else
      begin
        ORDEN:='ASC';
        qreciboscliente2.sorttype:=stAscending;
      end;
      qreciboscliente2.Close;
      qreciboscliente2.SQL.Clear;
      qreciboscliente2.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=:EMPRESA and pagado like(:PAGADO) and domiciliado like(:DOMICILIADO) ');
      qreciboscliente2.sql.Add('order by pagado asc,'+column.FieldName+' '+ORDEN+',cliente');
      qreciboscliente2.Prepare;
      qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
      qreciboscliente2.ParamByName('PAGADO').AsString:='0';
      qreciboscliente2.ParamByName('DOMICILIADO').AsString:='%';
      qreciboscliente2.open;
    end;
    if sdomiciliados.Checked then
    begin
      st:=qreciboscliente2.SortType;
      If st = stAscending then
      begin
       ORDEN:='DESC';
       qreciboscliente2.sorttype:=stDescending;
      end else
      begin
        ORDEN:='ASC';
        qreciboscliente2.sorttype:=stAscending;
      end;
      qreciboscliente2.Close;
      qreciboscliente2.SQL.Clear;
      qreciboscliente2.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=:EMPRESA and pagado like(:PAGADO) and domiciliado like(:DOMICILIADO) ');
      qreciboscliente2.sql.Add('order by pagado asc,'+column.FieldName+' '+ORDEN+',cliente');
      qreciboscliente2.Prepare;
      qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
      qreciboscliente2.ParamByName('PAGADO').AsString:='%';
      qreciboscliente2.ParamByName('DOMICILIADO').AsString:='1';
      qreciboscliente2.open;
    end;
    if stodos.Checked then
    begin
      st:=qreciboscliente2.SortType;
      If st = stAscending then
      begin
       ORDEN:='DESC';
       qreciboscliente2.sorttype:=stDescending;
      end else
      begin
        ORDEN:='ASC';
        qreciboscliente2.sorttype:=stAscending;
      end;
      qreciboscliente2.Close;
      qreciboscliente2.SQL.Clear;
      qreciboscliente2.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=:EMPRESA and pagado like(:PAGADO) and domiciliado like(:DOMICILIADO) ');
      qreciboscliente2.sql.Add('order by pagado asc,'+column.FieldName+' '+ORDEN+',cliente');
      qreciboscliente2.Prepare;
      qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
      qreciboscliente2.ParamByName('PAGADO').AsString:='%';
      qreciboscliente2.ParamByName('DOMICILIADO').AsString:='%';
      qreciboscliente2.open;
    end;

      //qreciboscliente2.refresh;
{      st:=qreciboscliente2.SortType;
      qreciboscliente2.SortedFields:='PAGADO asc,'+Column.FieldName+',CLIENTE, id desc';
      If st = stAscending then qreciboscliente2.SortType:=stDescending else qreciboscliente2.SortType:=stAscending;
      dsqreciboscliente2.DataSet.First;}
end;

procedure Trecibos_s.dsqalumnosclientes2DataChange(Sender: TObject;
  Field: TField);
begin
   if recibos.State in [dsedit,dsinsert] then recibosdescuento.value:=qalumnosclientes2descuento.AsInteger;
end;

procedure Trecibos_s.dsqclientes2DataChange(Sender: TObject; Field: TField);
var activo:string;
begin
   if recibos.State in [dsbrowse,dsedit] then activo:='%' else activo:='1';

   qalumnosclientes2.close;
   qalumnosclientes2.ParamByName('CLIENTE').AsInteger:=qclientes2id.AsInteger;
   qalumnosclientes2.ParamByName('EMPRESA').AsInteger:=qclientes2ide.AsInteger;
   qalumnosclientes2.open;
   qgruposclientes2.close;
   qgruposclientes2.ParamByName('CLIENTE').Asinteger:=qclientes2id.AsInteger;
   qgruposclientes2.ParamByName('EMPRESA').Asinteger:=qclientes2ide.AsInteger;
   qgruposclientes2.ParamByName('ACTIVO').AsString:=activo;
   qgruposclientes2.open;
end;

procedure Trecibos_s.dsqclientesDataChange(Sender: TObject; Field: TField);
begin
   qalumnosclientes.Prepare;
   qalumnosclientes.ParamByName('CLIENTE').AsInteger:=qclientesid.AsInteger;
   qalumnosclientes.ParamByName('EMPRESA').AsInteger:=qclienteside.AsInteger;
   qalumnosclientes.Refresh;
   qgruposclientes.Prepare;
   qgruposclientes.ParamByName('CLIENTE').Asinteger:=qclientesid.AsInteger;
   qgruposclientes.ParamByName('EMPRESA').Asinteger:=qclienteside.AsInteger;
   qgruposclientes.refresh;
   qreciboscliente.Prepare;
   qreciboscliente.ParamByName('CLIENTE').Asstring:=qclientesid.Asstring;
   qreciboscliente.ParamByName('EMPRESA').Asinteger:=qclienteside.AsInteger;
   qreciboscliente.refresh;
end;

procedure Trecibos_s.dsqgruposclientes2DataChange(Sender: TObject;
  Field: TField);
begin
  if recibos.State in [dsedit,dsinsert] then
  begin
     recibosimporte.Value:=qgruposclientes2preciomensual.asfloat;
     recibosimportefinal.Value:=recibosimporte.AsFloat-((recibosimporte.AsFloat*recibosdescuento.AsFloat)/100);
     recibosentrega.Value:=recibosimportefinal.AsFloat;
  end;

end;

procedure Trecibos_s.dsqreciboscliente2DataChange(Sender: TObject;
  Field: TField);
begin
    if recibos.State in [dsedit,dsinsert] then btrguardar.Click;
    recibos.Prepare;
    recibos.ParamByName('PRECIBO').AsInteger:=qreciboscliente2id.asinteger;
    recibos.Refresh;

end;

procedure Trecibos_s.dsqrecibosclienteDataChange(Sender: TObject;
  Field: TField);
begin
    if recibos.State in [dsedit,dsinsert] then btrguardar.Click;

    recibos.Prepare;
    recibos.ParamByName('PRECIBO').AsInteger:=qrecibosclienteid.asinteger;
    recibos.Refresh;
   // tbuscarclientesrecibos.Text:=qrecibosclientecliente.asstring;
end;

procedure Trecibos_s.dsrecibosStateChange(Sender: TObject);
begin
   if recibos.State in [dsedit,dsinsert] then
   begin
       btrnuevo.Enabled:=false;
       btrborrar.Enabled:=false;
       btrmodificar.Enabled:=false;
       btrguardar.Enabled:=true;
       btrcancelar.Enabled:=true;
       Precibosdatos.Enabled:=true;
       panel12.Enabled:=false;
   end else
   begin
       btrnuevo.Enabled:=true;
       btrborrar.Enabled:=true;
       btrmodificar.Enabled:=true;
       btrguardar.Enabled:=false;
       btrcancelar.Enabled:=false;
       Precibosdatos.Enabled:=false;
       panel12.Enabled:=true;
   end;
end;

procedure Trecibos_s.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if not (activecontrol is tdbMemo) then
    begin
      key:=upcase(key);

    end;
    if (key='.') and (activecontrol is tdbedit) then
    begin
       key:=','
    end;
    if (key='.') and (activecontrol is tdbgrid) then
    begin
        key:=',';
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;

    if (key ='.')
    //and (DMGS.CDSQ_mdalbaran.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (activecontrol is tdbedit) then
          key := ',';
    if (ActiveControl=nil) and (key=#13) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;

end;

procedure Trecibos_s.FormShow(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];

   if todosclientesrecibos.Checked then vertodos:='%' else vertodos:='1';
   qalumnosclientes.Open;
   qgruposclientes.Open;
   qalumnosclientes2.Open;
   qgruposclientes2.Open;
   qclientes2.Open;
   recibos.Open;
   qreciboscliente.open;
   qreciboscliente2.open;
   formaspago.Open;
   qclientes.Open;

end;

procedure Trecibos_s.sdelclienteClick(Sender: TObject);
begin
    tbuscarclientesrecibos.SetFocus;
    tbuscarclientesrecibos.Text:=qrecibosclientecliente.AsString;
end;

procedure Trecibos_s.ssincobrarClick(Sender: TObject);
var recibo:integer;
begin
    dbgrid1.DataSource:=dsqreciboscliente2;
    dbgrid1.Columns[3].FieldName:='cliente';
    dbgrid1.Columns[3].Title.caption :='Cliente';
    recibo:=recibosid.AsInteger ;
    qreciboscliente2.close;
    qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
    qreciboscliente2.ParamByName('PAGADO').AsString:='0';
    qreciboscliente2.ParamByName('DOMICILIADO').AsString:='%';
    qreciboscliente2.open;
    qreciboscliente2.Locate('id',recibo,[locaseinsensitive]);
end;

procedure Trecibos_s.sdomiciliadosClick(Sender: TObject);
begin
    dbgrid1.DataSource:=dsqreciboscliente2;
    dbgrid1.Columns[3].FieldName:='cliente';
    dbgrid1.Columns[3].Title.caption :='Cliente';
    qreciboscliente2.Prepare;
    qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
    qreciboscliente2.ParamByName('PAGADO').AsString:='%';
    qreciboscliente2.ParamByName('DOMICILIADO').AsString:='1';
    qreciboscliente2.Refresh;

end;

procedure Trecibos_s.stodosClick(Sender: TObject);
begin
    dbgrid1.DataSource:=dsqreciboscliente2;
    dbgrid1.Columns[3].FieldName:='cliente';
    dbgrid1.Columns[3].Title.caption :='Cliente';
    qreciboscliente2.Prepare;
    qreciboscliente2.ParamByName('EMPRESA').AsInteger:=1;
    qreciboscliente2.ParamByName('PAGADO').AsString:='%';
    qreciboscliente2.ParamByName('DOMICILIADO').AsString:='%';
    qreciboscliente2.Refresh;

end;

procedure Trecibos_s.recibosAfterPost(DataSet: TDataSet);
begin
//  if qreciboscliente.Active and not cobrando then  qreciboscliente.Refresh;
//  if qreciboscliente2.Active and not cobrando then qreciboscliente2.Refresh;
end;

procedure Trecibos_s.recibosfechacobroValidate(Sender: TField);
begin
   if recibosfechacobro.asstring='  /  /  ' then
   begin
      recibosfechacobro.value := null;
   end;
end;

procedure Trecibos_s.recibosfechareciboValidate(Sender: TField);
begin
   if recibosfecharecibo.asstring='  /  /  ' then
   begin
      recibosfecharecibo.value := null;
   end;
end;

procedure Trecibos_s.tbuscarclientesrecibosEnter(Sender: TObject);
begin
    tbuscarclientesrecibos.Text:='';
end;

procedure Trecibos_s.tbuscarclientesrecibosExit(Sender: TObject);
begin
    if tbuscarclientesrecibos.text<>'' then
    begin
        filtro:='%'+tbuscarclientesrecibos.Text+'%';

    end else filtro:='%';
   if todosclientesrecibos.Checked then vertodos:='%' else vertodos:='1';
//   qclientes.Close;
   qclientes.Prepare;
   qclientes.ParamByName('NOMBRE').AsString:=filtro;
   qclientes.ParamByName('ACTIVO').AsString:=VERTODOS;
   qclientes.ParamByName('IDC').AsInteger:=-1;
   qclientes.refresh;
   dbgrid1.DataSource:=dsqreciboscliente;
   dbgrid1.Columns[3].FieldName:='alumno';
   dbgrid1.Columns[3].Title.caption :='Alumno';
   //sdelcliente.Checked:=true;
end;

end.
