{
===============================================================================
  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: 01-12-2002
  Versión actual: 1.0.0
  Fecha versión actual: 01-12-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit TablaPropiedadesArticulo;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
  //Particulares
  cxGraphics, cxGridDBCardView, cxDBLookupComboBox, TablaPropiedades,

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

type

//////MIRAR ESTO PARA QUE SEA COMPATIBLE TAMBIEN/////////////////////////////////
  TListaPropiedadesArticulo = class(TListaPropiedades)
  private
    FCodigoArticulo : String;
  protected
    procedure AssignTo(Dest: TPersistent); override;
    procedure ObtenerLista; override;
  public
    constructor Create(CodigoArticulo : String); overload;
    constructor Create; overload; override;
    property Items;
  end;

  TListaPropiedadesArtModelo = class(TListaPropiedadesArticulo)
  protected
    procedure ObtenerLista; override;
  end;

/////////////////////////////////////////////////////////////////////////////////


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

    sqlInsertarProArtModelo : TStrings;
    sqlModificarProArtModelo : TStrings;
    sqlConsultarProArtModelo : TStrings;
    sqlEliminarProArtModelo : TStrings;
    sqlGridProArtModelo : TStrings;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    procedure InicializarGridPropiedadesArticulo(var vGrid: TcxGridDBCardView);
  end;

var
  dmTablaPropiedadesArticulo: TdmTablaPropiedadesArticulo;

implementation
{$R *.DFM}

constructor TdmTablaPropiedadesArticulo.Create (AOwner : TComponent);
begin
  inherited;
  sqlInsertar := TStringList.Create;
  sqlModificar := TStringList.Create;
  sqlConsultar := TStringList.Create;
  sqlEliminar := TStringList.Create;
  sqlGrid := TStringList.Create;

  sqlInsertarProArtModelo := TStringList.Create;
  sqlModificarProArtModelo := TStringList.Create;
  sqlConsultarProArtModelo := TStringList.Create;
  sqlEliminarProArtModelo := TStringList.Create;
  sqlGridProArtModelo := TStringList.Create;

  IniciarSQL;
end;

destructor TdmTablaPropiedadesArticulo.Destroy;
begin
  sqlInsertar.Free;
  sqlModificar.Free;
  sqlConsultar.Free;
  sqlEliminar.Free;
  sqlGrid.Free;

  sqlInsertarProArtModelo.Free;
  sqlModificarProArtModelo.Free;
  sqlConsultarProArtModelo.Free;
  sqlEliminarProArtModelo.Free;
  sqlGridProArtModelo.Free;

  inherited;
end;

procedure TdmTablaPropiedadesArticulo.IniciarSQL;
begin
  //Propiedades articulo
  with sqlInsertar do
  begin
    Add('insert into PROPIEDADESARTICULOS (');
    Add('CODIGOARTICULO, NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR) ');
    Add('values (:CODIGOARTICULO, :NUMPROPIEDAD, :CODIGOPROPIEDAD, :VALOR)');
  end;

  with sqlModificar do
  begin
    Add('update PROPIEDADESARTICULOS set ');
    Add('CODIGOPROPIEDAD = :CODIGOPROPIEDAD, ');
    Add('VALOR = :VALOR ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlEliminar do
  begin
    Add('delete from PROPIEDADESARTICULOS ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlConsultar do
  begin
    Add('select * from PROPIEDADESARTICULOS ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlGrid do
  begin
    Add('select CODIGOARTICULO, NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR ');
    Add('from PROPIEDADESARTICULOS ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
  end;

  //Propiedades articulo modelo
  with sqlInsertarProArtModelo do
  begin
    Add('insert into PROPIEDADESARTICULOSMODELO (');
    Add('CODIGOARTICULO, NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR) ');
    Add('values (:CODIGOARTICULO, :NUMPROPIEDAD, :CODIGOPROPIEDAD, :VALOR)');
  end;

  with sqlModificarProArtModelo do
  begin
    Add('update PROPIEDADESARTICULOSMODELO set ');
    Add('CODIGOPROPIEDAD = :CODIGOPROPIEDAD, ');
    Add('VALOR = :VALOR ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlEliminarProArtModelo do
  begin
    Add('delete from PROPIEDADESARTICULOSMODELO ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlConsultarProArtModelo do
  begin
    Add('select * from PROPIEDADESARTICULOSMODELO ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;

  with sqlGridProArtModelo do
  begin
    Add('select CODIGOARTICULO, NUMPROPIEDAD, CODIGOPROPIEDAD, VALOR ');
    Add('from PROPIEDADESARTICULOSMODELO ');
    Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    Add('and NUMPROPIEDAD = :NUMPROPIEDAD ');
  end;
end;

procedure TdmTablaPropiedadesArticulo.InicializarGridPropiedadesArticulo(var vGrid: TcxGridDBCardView);
var
  Columna : TcxGridDBCardViewRow;
begin
  with vGrid do begin
    {Columna CODIGOARTICULO}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CODIGOARTICULO';
    Columna.Caption := 'Código artículo';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := False;

    {Columna NUMPROPIEDAD}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'NUMPROPIEDAD';
    Columna.Caption := 'Número propiedad';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := False;

    {Columna CODIGOPROPIEDAD}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'CODIGOPROPIEDAD';
    Columna.Caption := 'Propiedad';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := True;
    Columna.PropertiesClassName := 'TcxLookupComboBoxProperties';
    with TcxLookupComboBoxProperties(Columna.Properties) do
    begin
      KeyFieldNames := 'CODIGO';
      ListColumns.Add.FieldName := 'DESCRIPCION';
      ListOptions.AnsiSort := True;
      ListOptions.GridLines := glNone;
      ListOptions.ShowHeader := False;
      GridMode := True;
    end;
    Columna.Visible := True;
    {Columna VALOR}
    Columna := CreateRow;
    Columna.DataBinding.FieldName := 'VALOR';
    Columna.Caption := 'Valor';
    Columna.CaptionAlignmentHorz := taRightJustify;
    Columna.Visible := True;
  end;
end;

{ TListaPropiedades }

constructor TListaPropiedadesArticulo.Create(CodigoArticulo: String);
begin
  inherited Create;
  FCodigoArticulo := CodigoArticulo;
  ObtenerLista;
end;

procedure TListaPropiedadesArticulo.AssignTo(Dest: TPersistent);
begin
  if not (Dest is TListaPropiedadesArticulo) then
    AssignError(Dest);
  (Dest as TListaPropiedadesArticulo).FCodigoArticulo := FCodigoArticulo;
  (Dest as TListaPropiedadesArticulo).FLista.Assign(FLista, laCopy, NIL);
end;

constructor TListaPropiedadesArticulo.Create;
begin
  inherited;
  FCodigoArticulo := '';
end;

procedure TListaPropiedadesArticulo.ObtenerLista;
var
  oSQL : TIBSQL;
  Propiedad : TDatosPropiedad;
begin
  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from PROPIEDADESARTICULOS');
    SQL.Add('where CODIGOARTICULO = :CODIGOARTICULO');
    try
      ParamByName('CODIGOARTICULO').AsString := FCodigoArticulo;
      Prepare;
      ExecQuery;
      while not EOF do begin
        Propiedad := TDatosPropiedad.Create;
        Propiedad.CodigoPropiedad := FieldByName('CODIGOPROPIEDAD').AsInteger;
        Propiedad.Valor := FieldByName('VALOR').AsString;
        FLista.Add(Propiedad);
        Next;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

{ TListaPropiedadesArtModelo }

procedure TListaPropiedadesArtModelo.ObtenerLista;
var
  oSQL : TIBSQL;
  Propiedad : TDatosPropiedad;
begin
  oSQL := TIBSQL.Create(nil);
  with oSQL do
  begin
    Database := dmBaseDatos.BD;
    Transaction := dmBaseDatos.Transaccion;
    SQL.Add('select * from PROPIEDADESARTICULOSMODELO');
    SQL.Add('where CODIGOARTICULO = :CODIGOARTICULO ');
    try
      ParamByName('CODIGOARTICULO').AsString := FCodigoArticulo;
      Prepare;
      ExecQuery;
      while not EOF do begin
        Propiedad := TDatosPropiedad.Create;
        Propiedad.CodigoPropiedad := FieldByName('CODIGOPROPIEDAD').AsInteger;
        Propiedad.Valor := FieldByName('VALOR').AsString;
        FLista.Add(Propiedad);
        Next;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

end.
