unit FDLGFAMILIAS;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, Db, DBCtrls,tiposdefinidos;

type
  TDLGFAMILIAS = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    bcancelar: TBitBtn;
    bok: TBitBtn;
    DBGrid1: TDBGrid;
    DSFAMILIAS: TDataSource;
    DBNavigator1: TDBNavigator;
    Panel3: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure DBGrid1DblClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DSFAMILIASDataChange(Sender: TObject; Field: TField);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1Enter(Sender: TObject);
    procedure bcancelarClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    ANTERIOR,GVANTERIOR:STRING;
    function GetFAMILIA:string;
    procedure SetFAMILIA(nif:string);
    function getnombre:string;
  public
    { Public declarations }
     CerrarDataset:boolean;
     VER:STRING;
    // la uso para cerrar fdlconductoes, pq esto lo utilizo en otros que
    // no son fdlconductores, y se queda abierto.
    // lo cierro por defecto, al menos que desde fdlgconductores le diga que
    // no.

    property codigo:string read GetFAMILIA write SetFAMILIA;
    property nombre:string read GetNombre;
  end;

var
  DLGFAMILIAS: TDLGFAMILIAS;


implementation

uses UDMGS;

{$R *.DFM}
function TDLGFAMILIAS.GetNombre:string;
begin
  result := DMGS.CDSQ_FAMILIASDESCRIPCION.AsString;
end;

procedure TDLGFAMILIAS.FormCreate(Sender: TObject);
begin
  if DMGS.CDSQ_FAMILIAS.active then
     DMGS.CDSQ_FAMILIAS.close;
  dsFAMILIAS.DataSet := DMGS.CDSQ_FAMILIAS;
  BOK.Enabled:=false;
//  son_datosexteriores:=false;
  CerrarDataset := true;
  VER :='0'; // SOLO MUESTRA LOS NO BORRADOS.
  GVANTERIOR :='%';

  with DMGS.CDSQ_FAMILIAS do
  BEGIN
    Close;
//    DMGS.VFAMILIAS.ID :='%';
    DMGS.Vfamilias.TIPO := '4';
    DMGS.vfamilias.ID := ' WHERE (COD_FAMILIA LIKE (''%'')  or descripcion like (''%'')) and profundidad=0 ';
    dmgs.vfamilias.ORDEN := Oordenfamilias;
    Open;
  END;
   ANTERIOR:=TRIM(EDIT1.Text);

end;
procedure TDLGFAMILIAS.FormDestroy(Sender: TObject);
begin
// esto hace falta pq uso cdsq_fdlgconductores en fconductores
// y si dsfdlgconductores apunta a cdsq_fdlgconductores cuando cambia
// de datos llama a la funcion que hay en el formulario fdlgconductor
 dsFAMILIAS.DataSet := nil;
// si lo llamo de fconductor hay que poner esta variable a false
 if CerrarDataset then
    DMGS.CDSQ_FAMILIAS.close;

end;


procedure TDLGFAMILIAS.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
IF DMGS.CDSQ_FAMILIAS.EOF  THEN
try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_FAMILIAS.GetNextPacket;
except
end;
end;

procedure TDLGFAMILIAS.DSFAMILIASDataChange(Sender: TObject;
  Field: TField);
begin
if ((DMGS.CDSQ_FAMILIAS.Eof)AND (NOT (DMGS.CDSQ_FAMILIAS.STATE IN [DSEDIT,DSINSERT]))) then
try // para evitar el error de memoria bloqueada en el server.
    DMGS.CDSQ_FAMILIAS.GetNextPacket;
except
end;
end;
procedure TDLGFAMILIAS.DBGrid1DblClick(Sender: TObject);
var aux,aux1:string;

begin

// VER 3.6

{ aux := dmgs.cdsq_familiascod_familia.AsString;

 with DMGS.CDSQ_FAMILIAS do
 BEGIN
    Close;
    DMGS.VFAMILIAS.ID :=aux;
    dmgs.vfamilias.ORDEN := Oordenfamilias;
    Open;
 END;
 ANTERIOR:=TRIM(EDIT1.Text);
}

 aux := dmgs.cdsq_familiascod_familia.AsString;

 with DMGS.CDSQ_FAMILIAS do
 BEGIN
    Close;
    DMGS.Vfamilias.TIPO := '4';
    DMGS.vfamilias.ID := ' WHERE PADRE='''+AUX+''' ';
    dmgs.vfamilias.ORDEN := Oordenfamilias;
    Open;
 END;

 if (dmgs.CDSQ_FAMILIAS.RecordCount = 0) then
 begin
  with DMGS.CDSQ_FAMILIAS do
  BEGIN
     Close;
     DMGS.Vfamilias.TIPO := '4';
     DMGS.vfamilias.ID := ' WHERE cod_familia='''+AUX+''' ';
     dmgs.vfamilias.ORDEN := Oordenfamilias;
     Open;
   END;
 end;

 if (dmgs.CDSQ_FAMILIAS.RecordCount = 1)
// OR (GVANTERIOR = AUX)
 then
    bok.click
 ELSE
    GVANTERIOR := AUX;
    
end;

procedure TDLGFAMILIAS.Edit1Exit(Sender: TObject);
begin
      with DMGS.CDSQ_FAMILIAS do
       IF NOT(TRIM(EDIT1.Text)='')
       AND (ANTERIOR<>TRIM(EDIT1.Text))
       THEN
       BEGIN
        Close;
        DMGS.VFAMILIAS.ID :=TRIM(EDIT1.Text);
        dmgs.vfamilias.ORDEN := Oordenfamilias;
        Open;
       END;
       ANTERIOR:=TRIM(EDIT1.Text);
  BOK.Enabled := TRUE;
end;

procedure TDLGFAMILIAS.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    BEGIN
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    END;
end;
procedure TDLGFAMILIAS.FormShow(Sender: TObject);
begin
   EDIT1.SetFocus;
end;

procedure TDLGFAMILIAS.Edit1Enter(Sender: TObject);
begin
    BOK.Enabled := FALSE;
end;

procedure TDLGFAMILIAS.bcancelarClick(Sender: TObject);
begin
  if DMGS.CDSQ_FAMILIAS.active then
     DMGS.CDSQ_FAMILIAS.Close;
//  SI CONDUCTORES USA ALGUN CDSDATASET, CERRARLO AQUI.
  modalresult:= mrCancel;
end;
function TDLGFAMILIAS.GetFAMILIA:string;
begin
    result:=DMGS.CDSQ_FAMILIASCOD_FAMILIA.asstring;
end;

//***********************************************************
//***********************************************************
procedure TDLGFAMILIAS.SetFAMILIA(nif:string);
begin
end;
procedure TDLGFAMILIAS.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
end;
//************************************************************************




procedure TDLGFAMILIAS.Button1Click(Sender: TObject);
VAR AUX,aux1,profundidad:string;
begin

// dmgs.CDSQ_FAMILIAS.First;
// while not dmgs.cdsq_familias.Eof do
// begin
  if not dmgs.cdsq_familias.eof then //no
  begin      //no

//   if Length (dmgs.CDSQ_FAMILIASPADRE.AsString) < length (aux) then
//      aux :=  DMGS.CDSQ_FAMILIASPadre.asstring;

    if dmgs.cdsq_familiasprofundidad.AsInteger > 1 then
    BEGIN
        profundidad := inttostr(dmgs.cdsq_familiasprofundidad.AsInteger - 1 );
        AUX := DMGS.CDSQ_FAMILIASPadre.asstring;
        with DMGS.CDSQ_FAMILIAS do
        BEGIN
          Close;
  //    DMGS.VFAMILIAS.ID := aux;
  //    dmgs.vfamilias.ORDEN := Oordenfamilias;
          DMGS.Vfamilias.TIPO := '4';
          DMGS.vfamilias.ID := ' WHERE (COD_FAMILIA LIKE ('''+aux+'%'')  or descripcion like ('''+aux+'%'')) and profundidad='+profundidad+' ';
          dmgs.vfamilias.ORDEN := Oordenfamilias;
          Open;
        END;
        AUX := DMGS.CDSQ_FAMILIASPadre.asstring;
        with DMGS.CDSQ_FAMILIAS do
        BEGIN
          Close;
  //    DMGS.VFAMILIAS.ID := aux;
  //    dmgs.vfamilias.ORDEN := Oordenfamilias;
          DMGS.Vfamilias.TIPO := '4';
          DMGS.vfamilias.ID := ' WHERE (COD_FAMILIA LIKE ('''+aux+'%'')  or descripcion like ('''+aux+'%'')) and profundidad='+profundidad+' ';
          dmgs.vfamilias.ORDEN := Oordenfamilias;
          Open;
        END;
     END
     else
     begin
        with DMGS.CDSQ_FAMILIAS do
        BEGIN
          Close;
          DMGS.Vfamilias.TIPO := '4';
          DMGS.vfamilias.ID := ' WHERE profundidad=0 ';
          dmgs.vfamilias.ORDEN := Oordenfamilias;
         Open;
        END;
     end;
  end // no
  else
  begin

    if aux='' then
        aux := '%';

    with DMGS.CDSQ_FAMILIAS do
    BEGIN
      Close;
      DMGS.Vfamilias.TIPO := '4';
      DMGS.vfamilias.ID := ' WHERE (COD_FAMILIA LIKE ('''+aux+'%'')  or descripcion like ('''+aux+'%'')) '; //and profundidad='+profundidad+' ';
      dmgs.vfamilias.ORDEN := Oordenfamilias;
      Open;
     END;
  end;
end;

end.
