unit FARQUEODECAJA;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db,TIPOSDEFINIDOS,
  ActnList, ImgList, ComCtrls, ToolWin,DBCLIENT, DC, NIF,forden,dateutils;

type
  TARQUEODECAJA = class(TForm)
    Menu: TMainMenu;
    ARCHIVO: TMenuItem;
    PDatos: TPanel;
    ALTAS1: TMenuItem;
    BAJAS1: TMenuItem;
    CONSULTAS1: TMenuItem;
    MODIFICACIONES1: TMenuItem;
    LISTADO1: TMenuItem;
    N1: TMenuItem;
    SALIR1: TMenuItem;
    REGISTRO1: TMenuItem;
    PRIMERO1: TMenuItem;
    ANTERIOR1: TMenuItem;
    SIGUIENTE1: TMenuItem;
    ToolBar1: TToolBar;
    BALTAS: TToolButton;
    BBAJAS: TToolButton;
    BCONSULTAS: TToolButton;
    BMODIFICACIONES: TToolButton;
    BLISTADO: TToolButton;
    ToolButton6: TToolButton;
    DBNavigator2: TDBNavigator;
    ToolButton7: TToolButton;
    BSALIR: TToolButton;
    ActionList1: TActionList;
    AAltas: TAction;
    ABajas: TAction;
    AConsultas: TAction;
    AModificaciones: TAction;
    ASalir: TAction;
    ALISTADO: TAction;
    ImageList1: TImageList;
    Label13: TLabel;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    abusqueda: TAction;
    aorden: TAction;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label5: TLabel;
    Label12: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    DBEdit1: TDBEdit;
    DSARQUEODECAJA: TDataSource;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    DBEdit15: TDBEdit;
    DBEdit16: TDBEdit;
    Label23: TLabel;
    DBEdit17: TDBEdit;
    DBEdit18: TDBEdit;
    DBText1: TDBText;
    DBEdit34: TDBEdit;
    ACIERRE: TAction;
    DBEdit19: TDBEdit;
    DBEdit20: TDBEdit;
    DBEdit21: TDBEdit;
    DBEdit22: TDBEdit;
    DBEdit23: TDBEdit;
    DBEdit24: TDBEdit;
    DBEdit25: TDBEdit;
    DBEdit33: TDBEdit;
    DBEdit32: TDBEdit;
    DBEdit31: TDBEdit;
    DBEdit30: TDBEdit;
    DBEdit29: TDBEdit;
    DBEdit28: TDBEdit;
    DBEdit27: TDBEdit;
    DBEdit26: TDBEdit;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    Label44: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    DBEdit35: TDBEdit;
    DBEdit36: TDBEdit;
    Label4: TLabel;
    Label14: TLabel;
    ToolButton5: TToolButton;
    Label24: TLabel;
    Label25: TLabel;
    DBText2: TDBText;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure BAltasClick(Sender: TObject);
    procedure BConsultasClick(Sender: TObject);
    procedure BBajasClick(Sender: TObject);
    procedure BModificacionesClick(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BSalirClick(Sender: TObject);
    procedure DSARQUEODECAJAStateChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BListadoClick(Sender: TObject);
    procedure REGISTRO1Click(Sender: TObject);
    procedure PRIMERO1Click(Sender: TObject);
    procedure ANTERIOR1Click(Sender: TObject);
    procedure SIGUIENTE1Click(Sender: TObject);
    procedure ARCHIVOClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DSARQUEODECAJADataChange(Sender: TObject; Field: TField);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure FormResize(Sender: TObject);
    procedure abusquedaExecute(Sender: TObject);
    procedure aordenExecute(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure DBEdit16KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit1Exit(Sender: TObject);
    procedure ACIERREExecute(Sender: TObject);
    procedure DBEdit19Exit(Sender: TObject);
    procedure DBEdit34KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit1Change(Sender: TObject);
    procedure DBEdit16Change(Sender: TObject);
    procedure DBEdit34Change(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure ToolButton9Click(Sender: TObject);

  private
    { Private declarations }
    PAUX :STRING;
    ancho : integer;
    TOTAL:BOOLEAN;
    procedure EstadoBotones;
    PROCEDURE CALCULARTOTAL;
    PROCEDURE CALCULARTOTALCIERRE;
    procedure habilitar(pregunta:boolean);
  public
    { Public declarations }
     VER : STRING;
     ARORDEN:TORDEN;
     procedure buscar;
  end;

var
  ARQUEODECAJA: TARQUEODECAJA;

implementation

uses RUTINAS, UDMGS, fdlgARQUEODECAJA,  fprevio,
  FLISTADOS, FDLGEMPRESAAUX, menu;

{$R *.DFM}


//********************    FALTA POR HACER EL LISTADO

procedure TARQUEODECAJA.BListadoClick(Sender: TObject);
VAR PATH:STRING;
    bookmark:tbookmark;
begin
    bookmark:= dmgs.CDSQ_ARQUEODECAJA.GetBookmark ;
    DSARQUEODECAJA.DataSet := NIL; // HACE FALTA
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_ARQUEODECAJA;
 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ARQUEODECAJA.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSARQUEODECAJA.DataSet := DMGS.CDSQ_ARQUEODECAJA;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    dmgs.CDSQ_ARQUEODECAJA.GotoBookmark(bookmark);
    dmgs.CDSQ_ARQUEODECAJA.FreeBookmark (bookmark);
end;


//***********************************************************


procedure TARQUEODECAJA.FormDestroy(Sender: TObject);
begin
 if DMGS.CDSQ_ARQUEODECAJA.active then
     DMGS.CDSQ_ARQUEODECAJA.close;

 DMGS.CDSQ_MAXIMO.CLOSE;
 ARORDEN.FREE;
 ARORDEN := NIL;

end;
procedure TARQUEODECAJA.FormCreate(Sender: TObject);
begin
 if DMGS.CDSQ_ARQUEODECAJA.active then
     DMGS.CDSQ_ARQUEODECAJA.close;
 TOTAL := FALSE;
 VER := '0';
 ancho := Width ;
 ARORDEN := TORDEN.Create(NIL);
 ARORDEN.CDS := DMGS.CDSQ_ARQUEODECAJA;
 ARORDEN.nombre  := 'CDSQ_ARQUEODECAJA';
 dmgs.RARQUEO.BUSCANDO := false;
 IF arorden.sORDEN = '' THEN
     arorden.SORDEN := ORDENARQUEO;

 with DMGS.CDSQ_ARQUEODECAJA do
  BEGIN
    Close;
        DMGS.VARQUEO.ID :=' WHERE ESTADO=1 ';
        DMGS.VARQUEO.BORRADO := VER;
        DMGS.VARQUEO.TIPO := '2';
        DMGS.VARQUEO.EMPRESA := FMENU.ID_EMPRESA;
        DMGS.VARQUEO.ORDEN := ARORDEN.SORDEN;
    Open;
  END;
  HABILITAR(TRUE);
end;
procedure TARQUEODECAJA.FormShow(Sender: TObject);
begin
    EstadoBotones;
    LABEL29.CAPTION := FMENU.ID_FORMAPAGO ;
end;
procedure TARQUEODECAJA.BConsultasClick(Sender: TObject);
begin
    DSARQUEODECAJA.DataSet := nil;
    DLGARQUEODECAJA:=tDLGARQUEODECAJA.create(nil);

    IF TRIM(ARORDEN.SORDEN) = '' THEN
        DLGARQUEODECAJA.ORDEN:=ORDENARQUEO
    ELSE
        DLGARQUEODECAJA.ORDEN :=  ARORDEN.SORDEN;

    DLGARQUEODECAJA.CerrarDataset := false;
    DLGARQUEODECAJA.VER := VER;
    DLGARQUEODECAJA.Showmodal;
    DLGARQUEODECAJA.Free;
    DLGARQUEODECAJA := nil;
    IF NOT DMGS.CDSQ_ARQUEODECAJA.ACTIVE THEN
       ESTADOBOTONES;
    DSARQUEODECAJA.dataset := DMGS.CDSQ_ARQUEODECAJA;
end;

procedure TARQUEODECAJA.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (ActiveControl=nil) and (key=#13) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and not (ActiveControl is TButton) then
    begin
        PAUX:='';
        if (uppercase(activecontrol.name)='DBEDIT34' ) OR
        (uppercase(activecontrol.name)='DBEDIT16')
          then
           if dmgs.RARQUEO.BUSCANDO then
            buscar
           else
           BEGIN
            CALCULARTOTAL;
            CALCULARTOTALCIERRE;
            DMGS.CDSQ_ARQUEODECAJA.post;
           END;
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0 ;
    end;

    if not (activeControl is TDBEdit) then
    begin
       if uppercase(key)='A' then if BAltas.enabled then BAltas.click;
       if uppercase(key)='B' then if BBajas.enabled then BBajas.click;
       if uppercase(key)='C' then if BConsultas.enabled then BConsultas.click;
       if uppercase(key)='M' then if BModificaciones.enabled then BModificaciones.click;
       if uppercase(key)='L' then if BListado.enabled then BListado.click;
    end;

    if (key = #27) and not (DMGS.CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert])
     then
      if not dmgs.RARQUEO.BUSCANDO then
        close
      else
        dmgs.RARQUEO.buscando := false;

    if (key = #27) and not (ActiveControl is TButton) then
        if DMGS.CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert]
          then
           if dmgs.RARQUEO.buscando then
            buscar
           else
           BEGIN
            CALCULARTOTAL;
            CALCULARTOTALCIERRE;
            DMGS.CDSQ_ARQUEODECAJA.post;
           END;

end;

procedure TARQUEODECAJA.BSalirClick(Sender: TObject);
begin
    close;
    modalresult := mrOk;
end;
procedure TARQUEODECAJA.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if key=38 then CambiarControl(self,false);
    if key=40 then CambiarControl(self,true);
end;
procedure TARQUEODECAJA.REGISTRO1Click(Sender: TObject);
begin
   if (DMGS.CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert]) then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
    primero1.enabled:=DMGS.CDSQ_ARQUEODECAJA.bof=false;
    anterior1.enabled:=primero1.enabled;
    siguiente1.enabled:=DMGS.CDSQ_ARQUEODECAJA.eof=false;
   end;
end;

procedure TARQUEODECAJA.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_ARQUEODECAJA.first;
end;

procedure TARQUEODECAJA.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_ARQUEODECAJA.Prior;
end;

procedure TARQUEODECAJA.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_ARQUEODECAJA.next;
end;

procedure TARQUEODECAJA.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_ARQUEODECAJA.state=dsbrowse) or (DMGS.CDSQ_ARQUEODECAJA.state=dsinactive);
    BListado.enabled:=(DMGS.CDSQ_ARQUEODECAJA.state=dsbrowse) and (DMGS.CDSQ_ARQUEODECAJA.RecordCount >0 );
    BConsultas.enabled:=(DMGS.CDSQ_ARQUEODECAJA.state=dsbrowse) or (DMGS.CDSQ_ARQUEODECAJA.state=dsinactive);
    BModificaciones.enabled:=(DMGS.CDSQ_ARQUEODECAJA.state=dsbrowse)  and (DMGS.CDSQ_ARQUEODECAJA.RecordCount >0 );//AND (DMGS.CDSQ_ARQUEODECAJABORRADO.VALUE = 0);
    BBajas.enabled:=(DMGS.CDSQ_ARQUEODECAJA.state=dsbrowse) and (DMGS.CDSQ_ARQUEODECAJA.RecordCount >0 );
    dbtext2.Visible := DMGS.CDSQ_ARQUEODECAJAESTADO.ASSTRING='2';
end;

procedure TARQUEODECAJA.BAltasClick(Sender: TObject);
begin
 WITH DMGS.CDSQ_ARQUEODECAJA DO
  BEGIN
    IF NOT DMGS.CDSQ_ARQUEODECAJA.ACTIVE THEN
    BEGIN
    DMGS.VARQUEO.ID :='-125478';
    DMGS.VARQUEO.BORRADO := '-1';
    DMGS.VARQUEO.TIPO := '1';
        DMGS.VARQUEO.ORDEN := ARORDEN.SORDEN;
     OPEN;
    END;
     HABILITAR(TRUE);
     APPEND;
  END;
  dbedit1.setfocus;
end;
procedure TARQUEODECAJA.BBajasClick(Sender: TObject);
VAR AUX:STRING;
begin
    if (DMGS.CDSQ_ARQUEODECAJA.recordcount>0)
    AND (DMGS.CDSQ_ARQUEODECAJAestado.asstring = '1')// or (DMGS.CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert])
      then
        begin
           DMGS.CDSQ_ARQUEODECAJA.delete;
           DMGS.CDSQ_ARQUEODECAJAafterpost(DMGS.CDSQ_ARQUEODECAJA);
        end;

end;
procedure TARQUEODECAJA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (dMGS.CDSQ_ARQUEODECAJA.State in [dsedit,dsinsert])
  and (not dmgs.RARQUEO.BUSCANDO) then
      BEGIN
         CALCULARTOTAL;
         CALCULARTOTALCIERRE;
         DMGS.CDSQ_ARQUEODECAJA.post;
      END;
  ACTION := CAFREE;
end;
procedure TARQUEODECAJA.BModificacionesClick(Sender: TObject);
begin
    if (DMGS.CDSQ_ARQUEODECAJA.recordcount>0)
    AND (DMGS.CDSQ_ARQUEODECAJAestado.asstring = '1')
    then
    begin
      DMGS.CDSQ_ARQUEODECAJA.edit;
      IF DMGS.CDSQ_ARQUEODECAJAESTADO.Value = 1 THEN
      BEGIN
         HABILITAR(TRUE);
         dbedit1.setfocus;
      END
      ELSE
      BEGIN
         HABILITAR(FALSE);
         DBEDIT19.SETFOCUS;
      END;
    end;
end;
procedure TARQUEODECAJA.DSARQUEODECAJAStateChange(Sender: TObject);
begin
    IF NOT DBEDIT6.Enabled THEN
       DBEDIT6.Enabled := TRUE;
    EstadoBotones;
end;
procedure TARQUEODECAJA.ARCHIVOClick(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
    listado1.enabled:=blistado.enabled;
end;
//******* PONERLO EN RUTINAS ES DIFERENTE DE LA FUNCION DE CLIENTES
//******* VER CON JJ PARA HACER UNA PARA LOS DOS.



procedure TARQUEODECAJA.DSARQUEODECAJADataChange(Sender: TObject;
  Field: TField);
begin
  IF (DMGS.CDSQ_ARQUEODECAJA.EOF) AND (NOT(DMGS.CDSQ_ARQUEODECAJA.STATE IN [DSEDIT,DSINSERT])) THEN
  try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_ARQUEODECAJA.GetNextPacket;
  except
  end;
  ESTADOBOTONES;
end;

procedure TARQUEODECAJA.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_ARQUEODECAJA.EOF  THEN
  try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_ARQUEODECAJA.GetNextPacket;
  except
  end;
end;




procedure TARQUEODECAJA.FormResize(Sender: TObject);
begin
   pdatos.Left := 10 + (ClientWidth - ancho ) div 2 ;
end;

procedure TARQUEODECAJA.abusquedaExecute(Sender: TObject);
begin
  WITH dmgs.CDSQ_ARQUEODECAJA DO
  BEGIN
     CLOSE;
     dmgs.VARQUEO.ID :='-1897456';
     dmgs.VARQUEO.BORRADO := '-1';
     dmgs.VARQUEO.ORDEN := ARORDEN.SORDEN;
     dmgs.VARQUEO.TIPO :='1';
     DMGS.VARQUEO.EMPRESA := FMENU.ID_EMPRESA;
     dmgs.RARQUEO.BUSCANDO  := TRUE;
     OPEN;
     APPEND;
  END;
  dmgs.CDSQ_ARQUEODECAJAAFECHA.FocusControl
end;

procedure TARQUEODECAJA.aordenExecute(Sender: TObject);
begin
   ARORDEN.ShowModal;
end;

procedure tARQUEODECAJA.buscar;
var aux,AUX1,fecha:STRING;
    i,AUX2,AUX3,J:integer;
    auxfecha:tdatetime;
begin
  i:= 0;
  aux := '';
  WHILE I < SELF.ComponentCount DO
  begin
    IF (SELF.Components[I] IS TDBEDIT) THEN
    BEGIN
      AUX1:=(SELF.Components[I] AS TDBEDIT).DataField ;
      if (NOT (TRIM(dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).ASSTRING) ='')) AND
         (NOT ( dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).FieldKIND IN  [fkCalculated,fkInternalCalc]))
      then
      BEGIN
//         if pos('FECHA',uppercase(aux1)) <> 0 then
         IF (dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).DataType IN  [FTTIMESTAMP,FTDATE]) AND
         ( POS(':',UPPERCASE(AUX1)) = 0)
         THEN
         begin
            auxfecha :=dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).AsDateTime ;
            fecha := inttostr(yearof(auxfecha))+'-'+inttostr(monthof(auxfecha))+'-'+inttostr(dayof(auxfecha));
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = '''+ fecha+''' '
            else
               aux := AUX1 +' = '''+ fecha+''' ';
         end
         else
         begin
            if aux <> '' then                         // LIKE
               aux := aux + ' AND char(' + AUX1  +') = ('''+ dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(dmgs.CDSQ_ARQUEODECAJA.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      IF (SELF.Components[I] IS TDBCHECKBOX) THEN
      begin
            AUX1:=(SELF.Components[I] AS TDBCHECKBOX).DataField ;
            IF (TRIM(AUX1)<>'MISMA_DIRECCION')
            // EXCLUYO EL DBCHECKBOX MISMA_DIRECCION
            THEN
            BEGIN
             J:=0;
             IF (SELF.Components[I] AS TDBCHECKBOX).Checked THEN
                 J:=1;
             if aux <> '' then
                aux := aux + ' AND ' + AUX1  +'= '+INTTOSTR(J)
             else
                aux := AUX1  +'= '+INTTOSTR(J);
            END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_ARQUEODECAJA.close;
  dmgs.RARQUEO.BUSCANDO :=false;
  if aux <> '' then
  begin
//     dmgs.VARQUEO.EMPRESA  := '';
     dmgs.VARQUEO.ANYO := '';
     IF TRIM(ARORDEN.SORDEN)<> '' THEN
        dmgs.VARQUEO.ORDEN := ARORDEN.SORDEN
     ELSE
        dmgs.VARQUEO.ORDEN := ordencliente;
     dmgs.VARQUEO.ID  :=' where '+ aux;
     dmgs.VARQUEO.borrado := ver;
     dmgs.VARQUEO.TIPO := '3';
     dmgs.CDSQ_ARQUEODECAJA.Open ;
  end;
end;

procedure TARQUEODECAJA.FormPaint(Sender: TObject);
begin
 pdatos.Left := 10 + (ClientWidth - ancho ) div 2 ;
end;


procedure TARQUEODECAJA.DBEdit16KeyPress(Sender: TObject; var Key: Char);
begin
  if key='.' then
     key:= ',';
  IF (DMGS.CDSQ_ARQUEODECAJA.State IN [DSEDIT,DSINSERT])
  AND (KEY IN ['0'..'9']) THEN
  WITH DMGS DO
   BEGIN
      CDSQ_ARQUEODECAJAAB500.Value := 0;
      CDSQ_ARQUEODECAJAAB200.Value := 0;
      CDSQ_ARQUEODECAJAAB100.Value := 0;
      CDSQ_ARQUEODECAJAAB50.Value := 0;
      CDSQ_ARQUEODECAJAAB20.Value := 0;
      CDSQ_ARQUEODECAJAAB10.Value := 0;
      CDSQ_ARQUEODECAJAAB5.Value := 0;
      CDSQ_ARQUEODECAJAAM2.Value := 0;
      CDSQ_ARQUEODECAJAAM1.Value := 0;
      CDSQ_ARQUEODECAJAAM050.Value := 0;
      CDSQ_ARQUEODECAJAAM020.Value := 0;
      CDSQ_ARQUEODECAJAAM010.Value := 0;
      CDSQ_ARQUEODECAJAAM005.Value := 0;
      CDSQ_ARQUEODECAJAAM002.Value := 0;
      CDSQ_ARQUEODECAJAAM001.Value := 0;
   END;
end;
PROCEDURE TARQUEODECAJA.CALCULARTOTAL;
BEGIN
 WITH DMGS DO
 IF (CDSQ_ARQUEODECAJA.STATE IN [DSEDIT,DSINSERT]) AND
 (NOT TOTAL) THEN
 BEGIN
   DMGS.CDSQ_ARQUEODECAJAATOTAL.ASFLOAT := (CDSQ_ARQUEODECAJAAB500.ASFLOAT*500) +
      (CDSQ_ARQUEODECAJAAB200.ASFLOAT * 200) +
      (CDSQ_ARQUEODECAJAAB100.ASFLOAT * 100) +
      (CDSQ_ARQUEODECAJAAB50.ASFLOAT *50 ) +
      (CDSQ_ARQUEODECAJAAB20.ASFLOAT * 20) +
      (CDSQ_ARQUEODECAJAAB10.ASFLOAT * 10 ) +
      (CDSQ_ARQUEODECAJAAB5.ASFLOAT * 5 ) +
      (CDSQ_ARQUEODECAJAAM2.ASFLOAT * 2)+
      (CDSQ_ARQUEODECAJAAM1.ASFLOAT * 1) +
      (CDSQ_ARQUEODECAJAAM050.ASFLOAT * 0.5)+
      (CDSQ_ARQUEODECAJAAM020.ASFLOAT * 0.2)+
      (CDSQ_ARQUEODECAJAAM010.ASFLOAT * 0.1) +
      (CDSQ_ARQUEODECAJAAM005.ASFLOAT * 0.05) +
      (CDSQ_ARQUEODECAJAAM002.ASFLOAT * 0.02)  +
      (CDSQ_ARQUEODECAJAAM001.ASFLOAT * 0.01) ;

 END;
END;
PROCEDURE TARQUEODECAJA.CALCULARTOTALCIERRE;
BEGIN
 WITH DMGS DO
 IF (CDSQ_ARQUEODECAJA.STATE IN [DSEDIT,DSINSERT]) AND (NOT TOTAL)
 THEN
 BEGIN
   DMGS.CDSQ_ARQUEODECAJACTOTAL.ASFLOAT := (CDSQ_ARQUEODECAJACB500.ASFLOAT*500) +
       (CDSQ_ARQUEODECAJACB200.ASFLOAT * 200) +
       (CDSQ_ARQUEODECAJACB100.ASFLOAT * 100) +
       (CDSQ_ARQUEODECAJACB50.ASFLOAT *50 ) +
      (CDSQ_ARQUEODECAJACB20.ASFLOAT * 20) +
      (CDSQ_ARQUEODECAJACB10.ASFLOAT * 10 ) +
      (CDSQ_ARQUEODECAJACB5.ASFLOAT * 5 ) +
      (CDSQ_ARQUEODECAJACM2.ASFLOAT * 2)+
      (CDSQ_ARQUEODECAJACM1.ASFLOAT * 1) +
      (CDSQ_ARQUEODECAJACM050.ASFLOAT * 0.5)+
      (CDSQ_ARQUEODECAJACM020.ASFLOAT * 0.2)+
      (CDSQ_ARQUEODECAJACM010.ASFLOAT * 0.1) +
      (CDSQ_ARQUEODECAJACM005.ASFLOAT * 0.05) +
      (CDSQ_ARQUEODECAJACM002.ASFLOAT * 0.02)  +
      (CDSQ_ARQUEODECAJACM001.ASFLOAT * 0.01) ;

 END;
END;


procedure TARQUEODECAJA.DBEdit1Exit(Sender: TObject);
begin
  CALCULARTOTAL;
end;

procedure TARQUEODECAJA.ACIERREExecute(Sender: TObject);
begin
    if (DMGS.CDSQ_ARQUEODECAJA.recordcount>0)
    AND (DMGS.CDSQ_ARQUEODECAJAestado.asstring = '1')
    then
    begin
        HABILITAR(FALSE);
        DMGS.CDSQ_ARQUEODECAJA.edit;
        DMGS.CDSQ_ARQUEODECAJACFECHA.Value := DATE;
        DMGS.CDSQ_ARQUEODECAJACHORA.VALUE := TIME;
        DMGS.CDSQ_ARQUEODECAJAESTADO.Value := 2;
        dbedit19.setfocus;
    end;
end;

procedure TARQUEODECAJA.DBEdit19Exit(Sender: TObject);
begin
  CALCULARTOTALCIERRE;
end;


procedure TARQUEODECAJA.habilitar(pregunta:boolean);
begin
   dbedit1.enabled := PREGUNTA;
   dbedit2.enabled := PREGUNTA;
   dbedit3.enabled := PREGUNTA;
   dbedit4.enabled := PREGUNTA;
   dbedit5.enabled := PREGUNTA;
   dbedit6.enabled := PREGUNTA;
   dbedit7.enabled := PREGUNTA;
   dbedit8.enabled := PREGUNTA;
   dbedit9.enabled := PREGUNTA;
   dbedit10.enabled := PREGUNTA;
   dbedit11.enabled := PREGUNTA;
   dbedit12.enabled := PREGUNTA;
   dbedit13.enabled := PREGUNTA;
   dbedit14.enabled := PREGUNTA;
   dbedit15.enabled := PREGUNTA;
   dbedit16.enabled := PREGUNTA;
   dbedit17.enabled := PREGUNTA;
   dbedit18.enabled := PREGUNTA;
   dbedit19.enabled := NOT PREGUNTA;
   dbedit20.enabled := NOT PREGUNTA;
   dbedit21.enabled := NOT PREGUNTA;
   dbedit22.enabled := NOT PREGUNTA;
   dbedit23.enabled := NOT PREGUNTA;
   dbedit24.enabled := NOT PREGUNTA;
   dbedit25.enabled := NOT PREGUNTA;
   dbedit26.enabled := NOT PREGUNTA;
   dbedit27.enabled := NOT PREGUNTA;
   dbedit28.enabled := NOT PREGUNTA;
   dbedit29.enabled := NOT PREGUNTA;
   dbedit30.enabled := NOT PREGUNTA;
   dbedit31.enabled := NOT PREGUNTA;
   dbedit32.enabled := NOT PREGUNTA;
   dbedit33.enabled := NOT PREGUNTA;
   dbedit34.enabled := NOT PREGUNTA;
   dbedit35.enabled := NOT PREGUNTA;
   dbedit36.enabled := NOT PREGUNTA;
end;


procedure TARQUEODECAJA.DBEdit34KeyPress(Sender: TObject; var Key: Char);
BEGIN
  if key='.' then
     key:= ',';
  IF (DMGS.CDSQ_ARQUEODECAJA.State IN [DSEDIT,DSINSERT])
  AND (KEY IN ['0'..'9']) THEN
  WITH DMGS DO
   BEGIN
       CDSQ_ARQUEODECAJACB500.Value := 0;
       CDSQ_ARQUEODECAJACB200.Value := 0;
       CDSQ_ARQUEODECAJACB100.Value := 0;
      CDSQ_ARQUEODECAJACB50.Value := 0;
      CDSQ_ARQUEODECAJACB20.Value := 0;
      CDSQ_ARQUEODECAJACB10.Value := 0;
      CDSQ_ARQUEODECAJACB5.Value := 0;
      CDSQ_ARQUEODECAJACM2.Value := 0;
      CDSQ_ARQUEODECAJACM1.Value := 0;
      CDSQ_ARQUEODECAJACM050.Value := 0;
      CDSQ_ARQUEODECAJACM020.Value := 0;
      CDSQ_ARQUEODECAJACM010.Value := 0;
      CDSQ_ARQUEODECAJACM005.Value := 0;
      CDSQ_ARQUEODECAJACM002.Value := 0;
      CDSQ_ARQUEODECAJACM001.Value := 0;
   END;
end;

procedure TARQUEODECAJA.DBEdit1Change(Sender: TObject);
begin
  TOTAL := FALSE;
end;

procedure TARQUEODECAJA.DBEdit16Change(Sender: TObject);
begin
  TOTAL := TRUE;
end;

procedure TARQUEODECAJA.DBEdit34Change(Sender: TObject);
begin
  TOTAL := TRUE;
end;

procedure TARQUEODECAJA.ToolButton8Click(Sender: TObject);
VAR AUX,AUXB,AUXC,AUXD,AUXE:DOUBLE;
    B:STRING;
begin
  if (dmgs.CDSQ_ARQUEODECAJAESTADO.asstring = '2') then
  begin
   dmgs.CDSQ_FORMAPAGO.close;
   WITH dmgs.CDSQ_FORMAPAGO   DO
   BEGIN
    CLOSE;
    DMGS.VFORMAPAGO.ID := '%';
    OPEN;
   END;

   while not dmgs.cdsq_formapago.eof do
   begin
     dmgs.cdsq_formapago.Last;
     IF dmgs.CDSQ_FORMAPAGO.Eof THEN
     try // para evitar el error de memoria bloqueada en el server.
       dmgs.CDSQ_FORMAPAGO.GetNextPacket ;
     except
   end;
   end;

   dmgs.CDSQ_FORMAPAGO.First;

  aux := 0;

  while not dmgs.cdsq_formapago.eof do
  begin
    if(dmgs.cdsq_formapagoid_forma.AsString <> fmenu.ID_FORMAPAGO ) then
    begin
     WITH DMGS.CDSQ_FLOAT DO
     BEGIN
       CLOSE;
       COMMANDTEXT := 'select distinct PARQUEO ( '''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJAAFECHA.ASSTRING)+''','''+
       ''+DMGS.CDSQ_ARQUEODECAJAAHORA.ASSTRING+''','+DMGS.CDSQ_ARQUEODECAJAID_EMPRESA.AsString+','''+dmgs.cdsq_formapagoid_forma.AsString+''','''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJACFECHA.ASSTRING)+''','''+
       ''+DMGS.CDSQ_ARQUEODECAJACHORA.ASSTRING+'''  ) from empresas where id_empresa='+fmenu.ID_EMPRESA+'  ' ;

       B:= COMMANDTEXT;
       OPEN;
       AUX := aux + FIELDS.Fields[0].AsFloat;
      END;
     end;
     dmgs.CDSQ_FORMAPAGO.Next;
  end;

  ShowMessage('La cantidad en otras formas de pago es : ' + floattostr(aux) + ' € ');

  dmgs.cdsq_formapago.Close;
 end
 else
  ShowMessage('Debe de hacerse el cierre antes de ver la cantidad en otras formas de pago. ' );
end;

procedure TARQUEODECAJA.ToolButton9Click(Sender: TObject);
VAR AUX,albaranes,facturas,tickets:DOUBLE;
    B:STRING;
    I:SMALLINT;
begin
  if (dmgs.CDSQ_ARQUEODECAJAESTADO.asstring = '2') then
  begin
   aux := 0;
   FOR I:=0 TO 3 DO
   BEGIN
    WITH DMGS.CDSQ_FLOAT DO
    BEGIN
       CLOSE;
       COMMANDTEXT := 'select distinct PARQUEONC ( '''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJAAFECHA.ASSTRING)+''','''+
        ''+DMGS.CDSQ_ARQUEODECAJAAHORA.ASSTRING+''','+DMGS.CDSQ_ARQUEODECAJAID_EMPRESA.AsString+','''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJACFECHA.ASSTRING)+''','''+
        ''+DMGS.CDSQ_ARQUEODECAJACHORA.ASSTRING+''',0,'''+inttostr(i)+''' ) from empresas where id_empresa='+fmenu.ID_EMPRESA+'  ' ;
       B:= COMMANDTEXT;
       OPEN;
       if i=0 then
          AUX :=  FIELDS.Fields[0].AsFloat;
       if i=1 then
         albaranes := FIELDS.Fields[0].AsFloat;
       if i=2 then
         facturas := FIELDS.Fields[0].AsFloat;
       if i=3 then
         tickets := FIELDS.Fields[0].AsFloat;
    END;
   END;
   ShowMessage('La cantidad que no se ha cobrado total es: ' + floattostr(aux) + ' €. ');
   ShowMessage('La cantidad que no se ha cobrado en Albaranes es: ' + floattostr(albaranes) + ' €. ');
   ShowMessage('La cantidad que no se ha cobrado en Facturas es: ' + floattostr(facturas) + ' €. ');
   ShowMessage('La cantidad que no se ha cobrado en Tickets es: ' + floattostr(tickets) + ' €. ');

   DMGS.CDSQ_FLOAT.CLOSE;

  end
  else
    ShowMessage('Debe de hacerse el cierre antes de ver la cantidad en otras formas de pago. ' );

//  /*******/
end;

end.
