{
===============================================================================
  Copyright (©) 2005. 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-01-2004
  Versión actual: 1.0.1
  Fecha versión actual:  04-03-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    04-03-2005    Se ha cambiado el bSeleccionar para que en el caso de elegir
                  un unico articulo coja los datos de la tabla y no de la lista
                  ya que en el caso de elegir uno la lista no refresca
===============================================================================
}

unit ArticulosFabPro;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Articulos, Db, dxCntner, dxTL, dxDBCtrl, dxDBGrid, ExtCtrls, dxEditor,
  dxExEdtr, dxDBEdtr, dxDBELib, StdCtrls, RdxBarras, RdxBotones, RdxPaneles,
  RdxComboBox, Tipos;

type
  TfrArticulosFabPro = class(TfrArticulos)
    cbxFabricante: TRdxComboBox;
    eFabricante: TLabel;
    eProveedor: TLabel;
    cbxProveedor: TRdxComboBox;
    procedure cbxFabricanteChange(Sender: TObject);
    procedure cbxProveedorChange(Sender: TObject);
    procedure bBuscarClick(Sender: TObject);

  private
    FNombreProveedor: Variant;
    FListaCodArtProAux: TStringList;
    FListaCodArtPro: TStringList;
    FListaCodArtFabAux: TStringList;
    FListaCodArtFab: TStringList;
    FListaPreciosAux: TStringList;
    FListaPrecios: TStringList;

    procedure SetListaCodArtPro (Value : TStringList);
    procedure SetListaCodArtFab (Value : TStringList);
    procedure SetListaPrecios (Value : TStringList);
    procedure SetFCodArtPro(const Value: Variant);
    procedure SetFCodArtFab(const Value: Variant);
    procedure SetFPrecio(const Value: Variant);
    function GetFCodArtPro: Variant;
    function GetFCodArtFab: Variant;
    function GetFPrecio: Variant;

    procedure filtrar (cbxChange: Integer);
    procedure setNombreProveedor(const Value: Variant);

  protected
    procedure BuscarArticulo; override;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;

  public
    property NombreProveedor: Variant read FNombreProveedor write setNombreProveedor;
    property ListaCodArtPro : TStringList read FListaCodArtPro write SetListaCodArtPro;
    property ListaCodArtFab : TStringList read FListaCodArtFab write SetListaCodArtFab;
    property CodArtPro : Variant read GetFCodArtPro write SetFCodArtPro;
    property CodArtFab : Variant read GetFCodArtFab write SetFCodArtFab;

    property ListaPrecios : TStringList read FListaPrecios write SetListaPrecios;
    property Precio : Variant read GetFPrecio write SetFPrecio;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;

  published
    procedure gridArticulosSelectedCountChange2(Sender: TObject);
    procedure bSeleccionarClick(Sender: TObject); override;

  end;

var
  frArticulosFabPro: TfrArticulosFabPro;

implementation

uses Constantes, TablaArticulos, TablaFabricantes, TablaProveedores,
BuscarArticuloFabPro, StrFunc, mensajes, literales;

{$R *.DFM}

{ TfrArticulosFabPro }

constructor TfrArticulosFabPro.Create(AOwner: TComponent);
begin
  inherited;

  with TablaArticulos do
  begin
    Close;
    DisableControls;
    SelectSQL.Assign(dmTablaArticulos.sqlGridArtFabPro);
    Prepare;
    Open;
    dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulos);
    EnableControls;
  end;
  dmTablaArticulos.InicializarGridArticulosFabPro(gridArticulos);


  cbxFabricante.Items := dmTablaFabricantes.DarListaFabricantes;
  cbxFabricante.ItemIndex := 0;

  cbxProveedor.Items := dmTablaProveedores.DarListaProveedores;
  cbxProveedor.ItemIndex := 0;

  FListaPreciosAux := TStringList.Create;
  FListaPrecios := TStringList.Create;

  FListaCodArtProAux := TStringList.Create;
  FListaCodArtPro := TStringList.Create;
  FListaCodArtFabAux := TStringList.Create;
  FListaCodArtFab := TStringList.Create;
end;

procedure TfrArticulosFabPro.cbxFabricanteChange(Sender: TObject);
begin
  filtrar(0);
  gridArticulos.SetFocus;
  gridArticulos.GotoFirst;
end;

procedure TfrArticulosFabPro.cbxProveedorChange(Sender: TObject);
begin
  filtrar(1);
  gridArticulos.SetFocus;
  gridArticulos.GotoFirst;
end;

procedure TfrArticulosFabPro.filtrar(cbxChange: Integer);
begin
  if (cbxChange = 0) then
  begin
    gridArticulos.Filter.Remove(gridArticulos.FindColumnByFieldName('FABRICANTE'));
    if cbxFabricante.Text <> CTE_TODOS then
       gridArticulos.Filter.Add(gridArticulos.FindColumnByFieldName('FABRICANTE'), cbxFabricante.Text, cbxFabricante.Text);
  end;

  if (cbxChange = 1) then
  begin
    gridArticulos.Filter.Remove(gridArticulos.FindColumnByFieldName('PROVEEDOR'));
    if cbxProveedor.Text <> CTE_TODOS then
       gridArticulos.Filter.Add(gridArticulos.FindColumnByFieldName('PROVEEDOR'), cbxProveedor.Text, cbxProveedor.Text);
  end;
end;

procedure TfrArticulosFabPro.bBuscarClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulos.FieldByName('CODIGO').AsString;
  Contenido := TfrBuscarArticuloFabPro.Create(Self);
end;

procedure TfrArticulosFabPro.SetListaPrecios(Value: TStringList);
begin
  if (Value = Nil) or (Value.Count = 0) then
    exit;

  FListaPrecios.Clear;
  FListaPrecios.Assign(Value);
end;

function TfrArticulosFabPro.GetFPrecio: Variant;
begin
  if (ListaPrecios.Count = 0) then
    Result := NULL
  else
    Result := ListaPrecios.Strings[ListaPrecios.Count-1];
end;

procedure TfrArticulosFabPro.SetFPrecio(const Value: Variant);
begin
  FListaPrecios.Clear;
  if (VarIsNull(Value))
  then
    FListaPrecios.Add('')
  else
    FListaPrecios.Add(Value);
end;

destructor TfrArticulosFabPro.Destroy;
begin
  if FListaCodArtProAux <> NIL then
  begin
    FListaCodArtProAux.Clear;
    FListaCodArtProAux.Free;
    FListaCodArtProAux := NIL;
  end;

  if FListaCodArtFabAux <> NIL then
  begin
    FListaCodArtFabAux.Clear;
    FListaCodArtFabAux.Free;
    FListaCodArtFabAux := NIL;
  end;

  if FListaPreciosAux <> NIL then
  begin
    FListaPreciosAux.Clear;
    FListaPreciosAux.Free;
    FListaPreciosAux := NIL;
  end;

  FListaCodArtPro.free;
  FListaCodArtPro := NIL;

  FListaCodArtFab.free;
  FListaCodArtFab := NIL;

  FListaPrecios.free;
  FListaPrecios := NIL;

  inherited;
end;

procedure TfrArticulosFabPro.gridArticulosSelectedCountChange2(
  Sender: TObject);
var
  IndiceCol1 : Integer;
  IndiceCol2 : Integer;
  IndiceCol3 : Integer;
  IndiceSel : Integer;

begin
  inherited gridArticulosSelectedCountChange(Sender);

  if TablaArticulos.Active then
  begin
    IndiceCol1 := gridArticulos.ColumnByFieldName('PRECIOFINAL').Index;
    IndiceCol2 := gridArticulos.ColumnByFieldName('CODARTPROVEEDOR').Index;
    IndiceCol3 := gridArticulos.ColumnByFieldName('CODARTFABRICANTE').Index;

    //Limpiamos las listas
    FListaPreciosAux.Clear;
    FListaCodArtProAux.Clear;
    FListaCodArtFabAux.Clear;

    for IndiceSel:=0 to gridArticulos.SelectedCount-1 do
    begin
      FListaPreciosAux.Add(FloatToStr(gridArticulos.SelectedNodes[IndiceSel].Values[IndiceCol1]));
      FListaCodArtProAux.Add(gridArticulos.SelectedNodes[IndiceSel].Values[IndiceCol2]);
      FListaCodArtFabAux.Add(gridArticulos.SelectedNodes[IndiceSel].Values[IndiceCol3]);
    end;
  end;
end;

procedure TfrArticulosFabPro.bSeleccionarClick(Sender: TObject);
var
  IndiceCol1 : Integer;
  IndiceCol2 : Integer;
  IndiceCol3 : Integer;
  contador:integer;

begin
  if gridArticulos.SelectedCount = 0 then
  begin
    VerMensaje(msgArtNoHayArt);
    exit;
  end;

  if gridArticulos.SelectedCount = 1 then
  begin
    IndiceCol1 := gridArticulos.ColumnByFieldName('PRECIOFINAL').Index;
    IndiceCol2 := gridArticulos.ColumnByFieldName('CODARTPROVEEDOR').Index;
    IndiceCol3 := gridArticulos.ColumnByFieldName('CODARTFABRICANTE').Index;

    Precio := FloatToStr(gridArticulos.SelectedNodes[0].Values[IndiceCol1]);
    CodArtPro := gridArticulos.SelectedNodes[0].Values[IndiceCol2];
    CodArtFab := gridArticulos.SelectedNodes[0].Values[IndiceCol3];
  end
  else
  begin
    ListaPrecios := FListaPreciosAux;
    ListaCodArtPro := FListaCodArtProAux;
    ListaCodArtFab := FListaCodArtFabAux;
  end;

  inherited;
end;

function TfrArticulosFabPro.GetFCodArtPro: Variant;
begin
  if (ListaCodArtPro.Count = 0) then
    Result := NULL
  else
    Result := ListaCodArtPro.Strings[ListaCodArtPro.Count-1];
end;

procedure TfrArticulosFabPro.SetFCodArtPro(const Value: Variant);
begin
  FListaCodArtPro.Clear;
  if (VarIsNull(Value))
  then
    FListaCodArtPro.Add('')
  else
    FListaCodArtPro.Add(Value);
end;

procedure TfrArticulosFabPro.SetListaCodArtPro(Value: TStringList);
begin
  if (Value = Nil) or (Value.Count = 0) then
    exit;

  FListaCodArtPro.Clear;
  FListaCodArtPro.Assign(Value);
end;

procedure TfrArticulosFabPro.setNombreProveedor(const Value: Variant);
begin
  if varIsNull(Value) then
    Exit;

  FNombreProveedor := Value;
  cbxProveedor.ItemIndex := cbxProveedor.Items.IndexOf(FNombreProveedor);
  cbxProveedor.Enabled := False;
  cbxFabricante.Enabled := False;
  filtrar(1);
end;

procedure TfrArticulosFabPro.BuscarArticulo;
begin
  with TablaArticulos do
  begin
    DisableControls;
    Close;
    Open;
    ActualizarBotones;
    dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulos);
    EnableControls;
  end;
  TablaArticulos.Locate('CODIGO',CodigoArticulo,[]);
end;

procedure TfrArticulosFabPro.CambiarModo(ModoAnterior, Modo: TRdxModo);
begin
  inherited;
  dmTablaArticulos.InicializarTablaArticulosFabPro(@TablaArticulos);
end;

procedure TfrArticulosFabPro.SetListaCodArtFab(Value: TStringList);
begin
  if (Value = Nil) or (Value.Count = 0) then
    exit;

  FListaCodArtFab.Clear;
  FListaCodArtFab.Assign(Value);
end;

procedure TfrArticulosFabPro.SetFCodArtFab(const Value: Variant);
begin
  FListaCodArtFab.Clear;
  if (VarIsNull(Value))
  then
    FListaCodArtFab.Add('')
  else
    FListaCodArtFab.Add(Value);
end;

function TfrArticulosFabPro.GetFCodArtFab: Variant;
begin
  if (ListaCodArtFab.Count = 0) then
    Result := NULL
  else
    Result := ListaCodArtFab.Strings[ListaCodArtFab.Count-1];
end;

end.
