{
===============================================================================
  Copyright (©) 2002. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 07-12-2002
  Versión actual: 1.0.1
  Fecha versión actual: 18-06-2003
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    18-06-2003    La descripción de la propiedad no se guarda en la tabla en
                  mayúsculas si no tal y como lo ha escrito el usuario.
===============================================================================
}

unit TablaValores;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares
  cxImage,

  //Aplicacion
  Framework, StrFunc, Entidades, Constantes, BaseDatos;


type
////////////////////////////////////////////////////////////////////////////////
//TDatosValor
////////////////////////////////////////////////////////////////////////////////
  TDatosValor = class(TObjeto)
  protected
    procedure AssignTo(Dest: TPersistent); override;
  public
    Propiedad : String;
    Valor : String;
  end;

////////////////////////////////////////////////////////////////////////////////
//TdmTablaValores
////////////////////////////////////////////////////////////////////////////////
  TdmTablaValores = class(TDataModule)
  private
    procedure IniciarSQL;
  public
    sqlInsertar : TStrings;
    sqlModificar : TStrings;
    sqlConsultar : TStrings;
    sqlEliminar : TStrings;
    sqlGrid : TStrings;
    sqlListaValores : TStrings;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    procedure InicializarGridValores(var vGrid: TcxGridDBTableView);
    function darContadorValor: Integer;
    procedure borrarValoresPropiedad(Codigo : Integer);
    function darPropiedades: TStrings; overload;
    procedure darPropiedades(var PropiedadCodigo, CodigoPropiedad: TStringList); overload;
  end;

var
  dmTablaValores : TdmTablaValores;



implementation

{$R *.DFM}

////////////////////////////////////////////////////////////////////////////////
//TABLAVALORES
////////////////////////////////////////////////////////////////////////////////
constructor TdmTablaValores.Create (AOwner : TComponent);
begin
  inherited;
  sqlGrid := TStringList.Create;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlListaValores := TStringList. Create;
  IniciarSQL;
end;

destructor TdmTablaValores.Destroy;
begin
  sqlGrid.Free;
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlListaValores.Free;
  inherited;
end;

procedure TdmTablaValores.IniciarSQL;
begin
  with sqlInsertar do
  begin
    Add('insert into VALORES (CODIGO, CODIGOPROPIEDAD, DESCRIPCION, IMAGEN) ');
    Add('values (:CODIGO, :CODIGOPROPIEDAD, :DESCRIPCION, :IMAGEN)');
  end;

  with sqlModificar do
  begin
    Add('update VALORES set ');
    Add('DESCRIPCION = :DESCRIPCION, ');
    Add('IMAGEN = :IMAGEN, ');
    Add('CODIGOPROPIEDAD = :CODIGOPROPIEDAD ');
    Add('where CODIGO = :CODIGO ');
  end;

  with sqlEliminar do
  begin
    Add('delete from VALORES ');
    Add('where CODIGO = :CODIGO ');
  end;

  with sqlConsultar do
  begin
    Add('select CODIGO, CODIGOPROPIEDAD, DESCRIPCION, IMAGEN ');
    Add('from VALORES ');
    Add('where CODIGOPROPIEDAD = :CODIGOPROPIEDAD ');
  end;

  with sqlListaValores do
  begin
    Add('select * from VALORES ');
    Add('where CODIGOPROPIEDAD = :CODIGOPROPIEDAD ');
    Add('order by DESCRIPCION');
  end;

end;

procedure TdmTablaValores.InicializarGridValores(var vGrid: TcxGridDBTableView);
var
  Columna : TcxGridDBColumn;
begin
  with vGrid do begin
    ClearItems;
    OptionsView.DataRowHeight := CTE_ALT_IMG;
    OptionsView.Footer := True;

    {Columna CODIGO}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGO';
    Columna.Caption := 'Código del Valor';
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna CODIGOPROPIEDAD}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'CODIGOPROPIEDAD';
    Columna.Caption := 'Código de la propiedad relacionada';
    Columna.Options.Filtering := False;
    Columna.Visible := False;

    {Columna IMAGEN}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'IMAGEN';
    Columna.Caption := 'Imagen';
    Columna.Width := CTE_ALT_IMG;
    Columna.Visible := True;
    Columna.PropertiesClassName := 'TcxImageProperties';
    with TcxImageProperties(Columna.Properties) do
    begin
      GraphicClassName := 'TJPEGImage';
      Stretch := True;
      PopupMenuLayout.MenuItems := [];
    end;

    {Columna DESCRIPCION}
    Columna := CreateColumn;
    Columna.DataBinding.FieldName := 'DESCRIPCION';
    Columna.Caption := 'Nombres de propiedad';
    Columna.Options.Filtering := False;
    Columna.SortOrder := soAscending;
    Columna.Width := 300;
    Columna.Visible := True;    
    with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
    try
      try
        BeginUpdate;
        Column := Columna;
        FieldName := Columna.DataBinding.FieldName;
        Format := 'Total: 0 nombres de valor';
        Kind := skCount;
      finally
        EndUpdate;
      end;
    except
      DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
    end;

{    object cvCarsPicture: TcxGridDBCardViewRow
        PropertiesClassName = 'TcxImageProperties'
        Properties.GraphicClassName = 'TJPEGImage'
        Properties.Stretch = True
        Options.ShowCaption = False
        DataBinding.FieldName = 'Picture'
      end
}


  end;
end;

function TdmTablaValores.darPropiedades: TStrings;
var
  oSQL : TIBSQL;
  Lista : TStringList;
begin
  oSQL := TIBSQL.Create(Self);
  Lista := TStringList.Create;

  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select DESCRIPCION from PROPIEDADES order by DESCRIPCION');

  try
    Prepare;
    ExecQuery;
    while not EOF do begin
      Lista.Append(Fields[0].AsString);
      Next;
    end;
    Result := Lista;
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

function TdmTablaValores.darContadorValor: Integer;
var
  oSQL : TIBSQL;
begin
  oSQL := TIBSQL.Create(Self);

  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select MAX(CODIGO) from VALORES');

  try
    Prepare;
    ExecQuery;
    Result := (Fields[0].AsInteger + 1);
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

procedure TdmTablaValores.darPropiedades(var PropiedadCodigo, CodigoPropiedad: TStringList);
var
  oSQL : TIBSQL;
begin
  if (PropiedadCodigo = nil) or (CodigoPropiedad = nil) then
    Exit;

  //Limpiamos los valores que tubieran antes (por si acaso)
  PropiedadCodigo.Clear;
  CodigoPropiedad.Clear;

  oSQL := TIBSQL.Create(Self);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select CODIGO, DESCRIPCION from PROPIEDADES ');
    SQL.Add('order by CODIGO');

  try
    Prepare;
    ExecQuery;
    while not EOF do
    begin
      PropiedadCodigo.Values[FieldByName('DESCRIPCION').AsString] := FieldByName('CODIGO').AsString;
      CodigoPropiedad.Values[FieldByName('CODIGO').AsString] := FieldByName('DESCRIPCION').AsString;
      Next;
    end;
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

procedure TdmTablaValores.borrarValoresPropiedad(Codigo : Integer);
var
  oSQL : TIBSQL;
begin
  oSQL := TIBSQL.Create(Self);

  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('delete from VALORES ');
    SQL.Add('where CODIGOPROPIEDAD = :CODIGOPROPIEDAD');
  try
    ParamByName('CODIGOPROPIEDAD').AsInteger := Codigo;
    Prepare;
    ExecQuery;
  finally
    Close;
    Transaction := NIL;
    Free;
  end;
  end;
end;

////////////////////////////////////////////////////////////////////////////////
//TDatosValor
////////////////////////////////////////////////////////////////////////////////
procedure TDatosValor.AssignTo(Dest: TPersistent);
begin
  if not (Dest is TDatosValor) then
    AssignError(Dest);
  (Dest as TDatosValor).Propiedad := Propiedad;
  (Dest as TDatosValor).Valor := Valor;
end;

end.
