unit FAVISO;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db,TIPOSDEFINIDOS,
  ActnList, ImgList, ComCtrls, ToolWin,FORDEN,dateutils;

type
  TAVISO = class(TForm)
    Menu: TMainMenu;
    AVISOS1: TMenuItem;
    PDatos: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label6: TLabel;
    Label5: TLabel;
    Label12: TLabel;
    Label9: TLabel;
    DSAVISO: TDataSource;
    ALTAS1: TMenuItem;
    BAJAS1: TMenuItem;
    CONSULTAS1: TMenuItem;
    MODIFICACIONES1: TMenuItem;
    LISTADO1: TMenuItem;
    N1: TMenuItem;
    SALIR1: TMenuItem;
    REGISTRO1: TMenuItem;
    PRIMERO1: TMenuItem;
    ANTERIOR1: TMenuItem;
    SIGUIENTE1: TMenuItem;
    DBEdit6: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    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;
    Label7: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    DBEdit1: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit15: TDBEdit;
    DBEdit16: TDBEdit;
    ToolButton1: TToolButton;
    Label22: TLabel;
    ToolButton2: TToolButton;
    DBEdit8: TDBEdit;
    Label4: TLabel;
    Label17: TLabel;
    Label23: TLabel;
    ABUSQUEDA: TAction;
    AORDEN: TAction;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    DateTimePicker1: TDateTimePicker;
    ToolButton5: TToolButton;
    AIMPRIMIR: TAction;
    DBCheckBox1: TDBCheckBox;
    Label11: TLabel;
    DBEdit2: TDBEdit;
    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 DSAVISOStateChange(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 AVISOS1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DSAVISODataChange(Sender: TObject; Field: TField);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure ABUSQUEDAExecute(Sender: TObject);
    procedure AORDENExecute(Sender: TObject);
    procedure DateTimePicker1Click(Sender: TObject);
    procedure DBEdit12Exit(Sender: TObject);
    procedure DateTimePicker1Change(Sender: TObject);
    procedure AIMPRIMIRExecute(Sender: TObject);
  private
    { Private declarations }
    procedure EstadoBotones;
    procedure comprobarsubcuenta;
    PROCEDURE BUSCAR;
    function fechas(sender:tobject):boolean;
  public
    { Public declarations }
     VER : STRING;
     ARORDEN : TORDEN;
  end;

var
  AVISO: TAVISO;

implementation

uses RUTINAS, UDMGS, fdlgAVISO, DLGSUBCUENTA, DBClient, fprevio,
  FLISTADOS, menu, FLISTADOOPCIONESAVISO;

{$R *.DFM}


//********************    FALTA POR HACER EL LISTADO

procedure TAVISO.BListadoClick(Sender: TObject);
VAR PATH:STRING;
    bookmark:tbookmark;
begin
    bookmark:= dmgs.CDSQ_AVISO.GetBookmark ;
    DSAVISO.DataSet := NIL; // HACE FALTA
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_AVISO;
 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\AVISO.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSAVISO.DataSet := DMGS.CDSQ_AVISO;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    dmgs.CDSQ_aviso.GotoBookmark(bookmark);
    dmgs.cdsq_aviso.FreeBookmark (bookmark);
end;


//***********************************************************

procedure TAVISO.FormDestroy(Sender: TObject);
begin
 if DMGS.CDSQ_AVISO.active then
     DMGS.CDSQ_AVISO.close;
 DMGS.CDSQ_TIPOS.CLOSE;
 ARORDEN.FREE;
 ARORDEN := NIL;
end;
procedure TAVISO.FormCreate(Sender: TObject);
begin
  DATETIMEPICKER1.Date := DATE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS := DMGS.CDSQ_AVISO;
  ARORDEN.nombre  := 'CDSQ_AVISO';
  IF arorden.sORDEN = '' THEN
     arorden.SORDEN := ordenAVISO;
  DMGS.RAVISO.BUSCANDO  := FALSE;
  with DMGS.CDSQ_AVISO do
  BEGIN
    Close;
    DMGS.VAVISO.ID :='%';
    DMGS.VAVISO.TIPO := '1';
    DMGS.VAVISO.ORDEN := ARORDEN.SORDEN;
    Open;
  END;

end;
procedure TAVISO.FormShow(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TAVISO.BConsultasClick(Sender: TObject);
begin
    DSAVISO.DataSet := nil;
    dlgAVISO:=tdlgAVISO.create(nil);
    DLGAVISO.ORDEN := ARORDEN.sORDEN;
    dlgAVISO.CerrarDataset := false;
    DlgAVISO.Showmodal;
    dlgAVISO.Free;
    dlgAVISO := nil;
    IF NOT DMGS.CDSQ_AVISO.ACTIVE THEN
       ESTADOBOTONES;
    dsAVISO.dataset := DMGS.CDSQ_AVISO;
end;

procedure TAVISO.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
        if uppercase(activecontrol.name)='DBEDIT9'
          then
            if DMGS.RAVISO.BUSCANDO then
               buscar
            ELSE
              DMGS.CDSQ_AVISO.post;
        if not dbedit8.Focused
        then
        begin
         if fechas(sender)
         then
            Perform(WM_NextDLGCtl, 0, 0);
        end
        else
            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_AVISO.state in [dsedit,dsinsert])
     then
       close;

    if (key = #27) and not (ActiveControl is TButton) then
        if DMGS.CDSQ_AVISO.state in [dsedit,dsinsert]
          then
          if DMGS.RAVISO.BUSCANDO then
              buscar
          ELSE
            DMGS.CDSQ_AVISO.post;

end;

procedure TAVISO.BSalirClick(Sender: TObject);
begin
    close;
    modalresult := mrOk;
end;
procedure TAVISO.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if key=38 then CambiarControl(self,false);
    if key=40 then CambiarControl(self,true);
    if (ActiveControl is tdbedit)
    and ((activecontrol as tdbedit).field.DataSet.State in [dsedit,dsinsert])
    then
    begin
     if ((activecontrol as tdbedit).Field.DataType IN [FTDATE,ftTimeStamp])
     then
     begin
        if trim((activecontrol as tdbedit).Text) = '/  /' then
           (activecontrol as tdbedit).Field.Clear;
     end;
    end;
end;
procedure TAVISO.REGISTRO1Click(Sender: TObject);
begin
   if (DMGS.CDSQ_AVISO.state in [dsedit,dsinsert]) then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
    primero1.enabled:=DMGS.CDSQ_AVISO.bof=false;
    anterior1.enabled:=primero1.enabled;
    siguiente1.enabled:=DMGS.CDSQ_AVISO.eof=false;
   end;
end;

procedure TAVISO.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_AVISO.first;
end;

procedure TAVISO.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_AVISO.Prior;
end;

procedure TAVISO.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_AVISO.next;
end;

procedure TAVISO.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_AVISO.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_AVISO.state=dsbrowse) or (DMGS.CDSQ_AVISO.state=dsinactive);
    BListado.enabled:=(DMGS.CDSQ_AVISO.state=dsbrowse) and (DMGS.CDSQ_AVISO.RecordCount >0 ) ;
    BConsultas.enabled:=(DMGS.CDSQ_AVISO.state=dsbrowse) or (DMGS.CDSQ_AVISO.state=dsinactive);
    BModificaciones.enabled:=(DMGS.CDSQ_AVISO.state=dsbrowse)  and (DMGS.CDSQ_AVISO.RecordCount >0 );//AND (DMGS.CDSQ_AVISOBORRADO.VALUE = 0);
    BBajas.enabled:=(DMGS.CDSQ_AVISO.state=dsbrowse) and (DMGS.CDSQ_AVISO.RecordCount >0 ) ;

end;

procedure TAVISO.BAltasClick(Sender: TObject);
begin
 WITH DMGS.CDSQ_AVISO DO
  BEGIN
  IF NOT DMGS.CDSQ_AVISO.ACTIVE THEN
    BEGIN
     DMGS.VAVISO.ID :='-999887';
     DMGS.VAVISO.TIPO := '1';
     DMGS.VAVISO.ORDEN := ARORDEN.SORDEN;
     OPEN;
    END;
    APPEND;
  END;
  DATETIMEPICKER1.Date := DATE;
  dbedit1.setfocus;
end;
procedure TAVISO.BBajasClick(Sender: TObject);
VAR AUX:STRING;
begin
    if (dmgs.cdsq_AVISO.recordcount>0) then
    begin
      dmgs.cdsq_AVISO.delete;
      dmgs.cdsq_AVISOafterpost(dmgs.cdsq_AVISO);
    end;

end;
procedure TAVISO.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (DMGS.CDSQ_AVISO.State in [dsedit,dsinsert])
  AND (NOT dmgs.RAVISO.BUSCANDO )
  then
      DMGS.CDSQ_AVISO.post;
  ACTION := CAFREE;
end;
procedure TAVISO.BModificacionesClick(Sender: TObject);
begin
    if DMGS.CDSQ_AVISO.recordcount>0 then
    begin
        DMGS.CDSQ_AVISO.edit;
        dbedit1.setfocus;
    end;
end;
procedure TAVISO.DSAVISOStateChange(Sender: TObject);
begin
    IF NOT DBEDIT6.Enabled THEN
       DBEDIT6.Enabled := TRUE;
    EstadoBotones;
end;
procedure TAVISO.AVISOS1Click(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 TAVISO.DSAVISODataChange(Sender: TObject;
  Field: TField);
begin
  IF (DMGS.CDSQ_AVISO.EOF) AND (NOT(DMGS.CDSQ_AVISO.STATE IN [DSEDIT,DSINSERT])) THEN
  try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_AVISO.GetNextPacket;
  except
  end;
  ESTADOBOTONES;
  COMPROBARSUBCUENTA;
end;

procedure TAVISO.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_AVISO.EOF  THEN
  try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_AVISO.GetNextPacket;
  except
  end;
end;

PROCEDURE tAVISO.COMPROBARsubcuenta;
VAR I:INTEGER;
BEGIN
END;

procedure TAVISO.ABUSQUEDAExecute(Sender: TObject);
begin
  DMGS.CDSQ_AVISO.CLOSE;
  DMGS.RAVISO.BUSCANDO  := true;
  WITH DMGS.CDSQ_AVISO  DO
  BEGIN
    DMGS.VAVISO.ID :='-999887';
    DMGS.VAVISO.TIPO := '1';
    DMGS.VAVISO.ORDEN := ARORDEN.SORDEN;
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_AVISOid_AVISO.asstring := '';
  DMGS.CDSQ_AVISOID_AVISO.FocusControl
end;

procedure TAVISO.AORDENExecute(Sender: TObject);
begin
  ARORDEN.ShowModal;
end;
PROCEDURE TAVISO.BUSCAR;
var aux,AUX1,fecha:string;
    i,AUX2,AUX3:integer;
    auxfecha:tdatetime;
begin
  i:= 0;
  aux := '';
  WHILE I < SELF.ComponentCount DO
  begin
    IF (SELF.Components[I] IS TDBEDIT) OR
    (SELF.COMPONENTS[I] IS TDBCOMBOBOX) or
    (self.Components[i] is tdbcheckbox)
    THEN
    BEGIN
      IF (SELF.Components[I] IS TDBEDIT) THEN
          AUX1:=(SELF.Components[I] AS TDBEDIT).DataField
      ELSE  IF (SELF.Components[I] IS TDBEDIT) THEN
                AUX1:=(SELF.Components[I] AS TDBCOMBOBOX).DataField
            else AUX1:=(SELF.Components[I] AS tdbcheckbox).datafield;
      if NOT (TRIM(DMGS.CDSQ_AVISO.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_AVISO.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_AVISO.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char ('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_AVISO.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                            // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_AVISO.close;
  DMGS.RAVISO.BUSCANDO:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;
     IF TRIM(ARORDEN.SORDEN) <> '' THEN
       aux := aux + ARORDEN.SORDEN
     ELSE
       aux := aux + ordenaviso;
     with dmgs.CDSQ_AVISO do
     begin
       DMGS.VAVISO.ID  := ' where '+ aux;
       DMGS.VAVISO.TIPO := '2';
       open;
     end
  end;
end;

procedure TAVISO.DateTimePicker1Click(Sender: TObject);
begin
  IF (DMGS.CDSQ_AVISO.STATE IN [DSEDIT,DSINSERT])
  THEN
  BEGIN
    DMGS.CDSQ_AVISOFECHA_PARA_VISITA.AsDateTime := DATETIMEPICKER1.Date ;
    DBEDIT7.SetFocus ;
  END;
end;

procedure TAVISO.DBEdit12Exit(Sender: TObject);
begin
  IF (DMGS.CDSQ_AVISO.STATE IN [DSEDIT,DSINSERT])
  THEN
  BEGIN
      DATETIMEPICKER1.DateTime := DMGS.CDSQ_AVISOFECHA_PARA_VISITA.AsDateTime;
      DBEDIT7.SetFocus ;
  END;

end;

procedure TAVISO.DateTimePicker1Change(Sender: TObject);
begin
  IF (DMGS.CDSQ_AVISO.STATE IN [DSEDIT,DSINSERT])
  THEN
  BEGIN
    DMGS.CDSQ_AVISOFECHA_PARA_VISITA.AsDateTime := DATETIMEPICKER1.Date;
    DBEDIT7.SetFocus ;
  END;

end;
procedure TAVISO.AIMPRIMIRExecute(Sender: TObject);
var cadena:string;
begin
   listadoopcionesAVISO := tlistadoopcionesAVISO.create(nil);
   if listadoopcionesAVISO.ShowModal = mrok then
   begin
    cadena := listadoopcionesAVISO.cadena;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    WITH DMGS.CDSQ_AVISOAUX DO
    BEGIN
       CLOSE;
       IF TRIM(CADENA) <> '' THEN
       BEGIN
          DMGS.VAVISOAUX.ID:=' WHERE '+CADENA;
          DMGS.VAVISOAUX.TIPO:='2';
       END
       ELSE
       BEGIN
          DMGS.VAVISOAUX.ID:='%';
          DMGS.VAVISOAUX.TIPO:='1';
       END;
       IF TRIM(ARORDEN.SORDEN) <> '' THEN
           DMGS.VAVISOAUX.ORDEN:=ARORDEN.SORDEN
       ELSE
           DMGS.VAVISOAUX.ORDEN := ORDENAVISO;
       OPEN;
    END;
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_AVISOAUX;
 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\AVISO.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_AVISOAUX.CLOSE;
   END;
   listadoopcionesAVISO.free;
   listadoopcionesAVISO := nil;
end;
FUNCTION  TAVISO.fechas(SENDER:TOBJECT):BOOLEAN;
VAR I:SMALLINT;
    aux,cad:string;
    fecha:tdatetime;
begin
    RESULT := TRUE;
    if (ActiveControl is tdbedit)
    then
     begin
     if (((activecontrol as tdbedit).Field.DataType IN [FTDATE,ftTimeStamp]))
     and ((activecontrol as tdbedit).field.DataSet.State in [dsedit,dsinsert])
     then
     BEGIN
      aux:=trim((activecontrol as tdbedit).Text);
      if AUX = '/  /' then
         (activecontrol as tdbedit).Field.Clear
      else
        BEGIN
           try
             // ME COJE LA FECHA 0105/20/05
             // CUANDO SON CAMPOS DBEDIT
             IF POS('/',Aux)=5  THEN
             BEGIN
               CAD := aux[1];CAD := cad + aux[2];
               CAD := cad + '/';CAD := cad + aux[3];
               CAD := cad + aux[4];CAD := cad + '/';
               CAD := cad + aux[6];CAD := cad + aux[7];
               CAD := cad + aux[9];CAD := cad + aux[10];
             end
             else
               cad := aux;
             FECHA :=STRTODATE(cad);
           except
           BEGIN
            showmessage('LA FECHA NO ES VALIDA');
            result:= false;
            (activecontrol as tdbedit).Field.FocusControl;
//            RESULT := ;//HAY QUE MANTENER EL FOCUS
           END
           end
        END;
     END;
     end;
end;
end.
