unit Articulo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxEdit, DB, cxDBData, Menus, am2000menuitem, am2000popupmenu, am2000,
  cxButtonEdit, cxDBEdit, cxMaskEdit, cxDropDownEdit, cxContainer,
  cxTextEdit, cxMemo, StdCtrls, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGridCustomTableView, cxGridCardView,
  cxGridDBCardView, cxGrid, AdvPanel, ExtCtrls, RdxBotones, RdxPaneles,
  RdxBarras, RdxTitulos, RdxFrame, ArticuloModelo, IBCustomDataSet, IBQuery,
  cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, ActnList, cxDataStorage;

type
  TfrArticulo = class(TfrArticuloModelo)
    Label1: TLabel;
    Precio: TcxDBTextEdit;
    Label2: TLabel;
    Referencia: TcxDBTextEdit;
    procedure CodigoPropertiesButtonClick(Sender: TObject;AButtonIndex: Integer); override;
    procedure cbxFamiliaPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
  private
    FFamilia : Variant;
    function CargarPropiedadesModelo(Familia: Integer): Boolean;
  protected
    procedure ActivarModoAnadir; override;
    procedure ActivarModoModificar; override;
    procedure ActivarModoEliminar; override;
    procedure ActivarModoConsultar; override;
    procedure InicializarTablas; override;
  end;

var
  frArticulo: TfrArticulo;

implementation

uses
  TablaArticulos, TablaPropiedadesArticulo, TablaPropiedades,
  TablaFamilias, Entidades, BaseDatos, IBSQL, Articulos, Mensajes,
  RxMemDS, Literales, Configuracion;

{$R *.dfm}

{ TfrArticulo }

procedure TfrArticulo.ActivarModoAnadir;
begin
  inherited;
  dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
//  TablaArticulos.FieldByName('FAMILIA').OnSetText := FamiliaSetText;
  Referencia.SetFocus;
end;

procedure TfrArticulo.ActivarModoModificar;
begin
  inherited;
  dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
  //  TablaArticulos.FieldByName('FAMILIA').OnSetText := FamiliaSetText;
  Descripcion.SetFocus;
end;

function TfrArticulo.CargarPropiedadesModelo(Familia: Integer): Boolean;
var
  Contador : Integer;
  DatosArtModelo : TDatosArticuloModelo;
  PropiedadAux : TDatosPropiedad;
begin
  Result := False;

  DatosArtModelo := TDatosArticuloModelo.Create(Familia);
  try
    if (DatosArtModelo.ListaPropiedades.Count > 0) and
       (VerMensajePregunta(msgDatosCargaPropFamilia) = IDYES) then
    begin
      // Insertamos las propiedades
      with TablaPropiedadesMem do
      begin
        DisableControls;
        EmptyTable;
        try
          First;
          for Contador := 0 to (DatosArtModelo.ListaPropiedades.Count - 1) do
          begin
            PropiedadAux := DatosArtModelo.ListaPropiedades.Items[Contador];
            Insert;
            FieldByName('CODIGOPROPIEDAD').AsInteger := PropiedadAux.CodigoPropiedad;
            FieldByName('VALOR').AsString := PropiedadAux.Valor;
            Post;
          end;
        finally
          EnableControls;
        end;
      end;
    end;
  finally
    DatosArtModelo.Free;
  end;
  Result := True;
end;

procedure TfrArticulo.CodigoPropertiesButtonClick(Sender: TObject;AButtonIndex: Integer);
begin
  if (TratarCambios = IDCANCEL) then
    exit;
  { Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos
    este botón se cierra la tabla y si en el frame hijo (el del grid) damos
    a cancelar, FCodigoArticulo es NULL y da error al activar modo porque
    no se inicializa los parámetros de la sql. Lo hace BuscarInstalador. }
  if not TablaArticulos.Active then
    BuscarArticulo;
  ContenidoModal := TfrArticulos.Create(Self);
end;

procedure TfrArticulo.InicializarTablas;
begin
  Entidad := entArticulo;
  dmTablaArticulos.ArtModelo := entArticulo;

  with TablaArticulos do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaArticulos.sqlConsultar);
    InsertSQL.Assign(dmTablaArticulos.sqlInsertar);
    ModifySQL.Assign(dmTablaArticulos.sqlModificar);
    DeleteSQL.Assign(dmTablaArticulos.sqlEliminar);
    RefreshSQL.Assign(dmTablaArticulos.sqlConsultar);
  end;

  with TablaPropiedades do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaPropiedadesArticulo.sqlGrid);
    InsertSQL.Assign(dmTablaPropiedadesArticulo.sqlInsertar);
    ModifySQL.Assign(dmTablaPropiedadesArticulo.sqlModificar);
    DeleteSQL.Assign(dmTablaPropiedadesArticulo.sqlEliminar);
    RefreshSQL.Assign(dmTablaPropiedadesArticulo.sqlConsultar);
  end;
end;

procedure TfrArticulo.cbxFamiliaPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
  inherited;
  if (FFamilia <> DisplayValue) then
  begin
    FFamilia := DisplayValue;
    if CargarPropiedadesModelo(dsFamilias.DataSet.FieldByName('CODIGO').AsInteger) then
      Descripcion.SetFocus;
    ActualizarBotones;
  end;
end;

procedure TfrArticulo.ActivarModoEliminar;
begin
  inherited;
  dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
end;

procedure TfrArticulo.ActivarModoConsultar;
begin
  inherited;
  dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
end;

end.
