{
===============================================================================
  Copyright (©) 2001. 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-10-2001
  Versión actual: 1.0.5
  Fecha versión actual: 23-11-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    09-10-2001    Al pulsar la tecla ESC se activa el botón 'Cancelar'. Sólo
                  pasa cuando este frame está en una ventana modal.

    07-04-2002    Se ha adaptado para la transacción única.

    06-05-2002    Adaptación al grid 'TdxDBGrid'.

    06-03-2004    Al hacer doble click sobre el grid, se pasará a modificar el
                  registro o se seleccionará, dependiendo del modo en el que
                  se encuentre la pantalla.

    23-11-2004    p297. Solo sacar etiquetas de los clientes/proveedores etiquetados.
===============================================================================
}

unit Proveedores;

interface

uses
  Dialogs, Menus, am2000menuitem, am2000popupmenu, am2000, Db, RdxBarras,
  Grids, DBGrids, RXDBCtrl, ExtCtrls, RdxBotones, Classes, Graphics,
  Controls, RdxPaneles, RdxFrameProveedores, IBEvents, dxCntner, dxTL,
  dxDBCtrl, dxDBGrid, am2000utils, Windows, dxGrClms;



type
  TfrProveedores = class(TRdxFrameProveedores)
    BarraProveedores: TRdxBarraSuperior;
    bAnadir: TRdxBotonSuperior;
    bModificar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    bBuscar: TRdxBotonSuperior;
    bDocumentos: TRdxBotonMenu;
    dsProveedores: TDataSource;
    menuDocumentos: TPopupMenu2000;
    Presupuestos1: TMenuItem2000;
    N1: TMenuItem2000;
    Facturas1: TMenuItem2000;
    menuListar: TPopupMenu2000;
    bListadoEtiquetas: TMenuItem2000;
    bListar: TRdxBotonMenu;
    MenuItem1: TMenuItem2000;
    imgSombra: TImage;
    pnlContenido: TRdxPanel;
    PanelPrincipal: TPanel;
    gridProveedores: TdxDBGrid;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelarGuardar: TRdxBoton;
    pnlExtra: TRdxBarraSuperior;
    bEtiquetar: TRdxBoton;
    procedure bAnadirClick(Sender: TObject);
    procedure bModificarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
    procedure bConsultarClick(Sender: TObject);
    procedure bBuscarClick(Sender: TObject);
    procedure bSeleccionarClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure Presupuestos1Click(Sender: TObject);
    procedure Facturas1Click(Sender: TObject);
    procedure gridProveedoresRefreshButton(Sender: TObject);
    procedure bListadoEtiquetasClick(Sender: TObject);
    procedure MenuItem1Click(Sender: TObject);
    procedure gridProveedoresDblClick(Sender: TObject);
    procedure bEtiquetarClick(Sender: TObject);
    procedure gridProveedoresCustomDrawCell(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
      AColumn: TdxTreeListColumn; ASelected, AFocused,
      ANewItemRow: Boolean; var AText: String; var AColor: TColor;
      AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
  private
    FEtiquetados: Boolean;
    procedure ActualizarBotones;
    procedure SetEtiquetados(const Value: Boolean);
  protected
    procedure BuscarProveedor; override;
    procedure FreeContenido; override;
    procedure VerModal; override;
  public
    property SoloEtiquetados : Boolean read FEtiquetados write SetEtiquetados;  
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaProveedores;
    property Entidad;
  end;

var
  frProveedores: TfrProveedores;

implementation

{$R *.DFM}

uses
  Proveedor, IBDatabase, Configuracion, 
  BuscarProveedor, Tipos, TablaProveedores, PedidosProveedores,
  BaseDatos, IBCustomDataSet, Sysutils, FacturasProveedores,
  GenerarEtiquetasProveedores, ListarProveedores, Constantes, strFunc;

constructor TfrProveedores.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  Entidad := entProveedor;
  ConfigurarFrame(Self, Self.Entidad);

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaProveedores := TIBDataSet.Create(Self);
  dsProveedores.DataSet := TablaProveedores;

  with TablaProveedores do
  begin
    DisableControls;
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaProveedores.sqlGrid);
    Prepare;
    Open;
    EnableControls;
    ActualizarBotones;
  end;
  dmTablaProveedores.InicializarGridProveedores(gridProveedores);
  with (gridProveedores.ColumnByFieldName('ETIQUETADO') as TdxDBGridImageColumn) do
  begin
    Images := dmConfiguracion.ilEtiquetado;
    ImageIndexes.Add('0');
    ImageIndexes.Add('1');
    Values.Add('1');
    Values.Add('0');
  end;
end;

destructor TfrProveedores.Destroy;
begin
  with TablaProveedores do
  begin
    Close;
    UnPrepare;
    Free;
  end;
  inherited;
end;

procedure TfrProveedores.bAnadirClick(Sender: TObject);
begin
  Contenido := TfrProveedor.Create(Self);
  Contenido.Modo := Anadir;
end;

procedure TfrProveedores.bModificarClick(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  Contenido := TfrProveedor.Create(Self);
  Contenido.Modo := Modificar;
end;

procedure TfrProveedores.bEliminarClick(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  Contenido := TfrProveedor.Create(Self);
  Contenido.Modo := Eliminar;
end;

procedure TfrProveedores.bConsultarClick(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  Contenido := TfrProveedor.Create(Self);
  Contenido.Modo := Consultar;
end;

procedure TfrProveedores.bBuscarClick(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  Contenido := TfrBuscarProveedor.Create(Self);
end;

procedure TfrProveedores.bSeleccionarClick(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  CloseFrame;
end;

procedure TfrProveedores.bCancelarGuardarClick(Sender: TObject);
begin
  inherited;
  CodigoProveedor := NULL;
  CloseFrame;
end;

procedure TfrProveedores.BuscarProveedor;
begin
  with TablaProveedores do
  begin
    DisableControls;
    Close;
    Open;
    ActualizarBotones;
    EnableControls;
    Locate('CODIGO', CodigoProveedor, []);
  end;
end;

procedure TfrProveedores.FreeContenido;
begin
  if (Contenido is TRdxFrameProveedores) then
    CodigoProveedor := (Contenido as TRdxFrameProveedores).CodigoProveedor;
  inherited;
end;

procedure TfrProveedores.Presupuestos1Click(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  CaptionModal := Format('Lista de pedidos al proveedor %s', [TablaProveedores.FieldByName('NOMBRE').AsString]);
  WidthModal := 815;
  HeightModal := 600;
  ModoModal := Consultar;
  ContenidoModal := TfrPedidosProveedores.Create(Self);
end;

procedure TfrProveedores.VerModal;
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  if (ContenidoModal is TfrPedidosProveedores) then
    (ContenidoModal as TfrPedidosProveedores).CodigoProveedor := CodigoProveedor;

  if (ContenidoModal is TfrFacturasProveedores) then
    (ContenidoModal as TfrFacturasProveedores).CodigoProveedor := CodigoProveedor;

  inherited;
end;

procedure TfrProveedores.Facturas1Click(Sender: TObject);
begin
  CodigoProveedor := TablaProveedores.FieldByName('CODIGO').AsString;
  CaptionModal := Format('Lista de facturas del proveedor %s', [TablaProveedores.FieldByName('NOMBRE').AsString]);
  WidthModal := 815;
  HeightModal := 600;
  ModoModal := Consultar;
  ContenidoModal := TfrFacturasProveedores.Create(Self);
end;

procedure TfrProveedores.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    bAnadir.Enabled := False;
    bModificar.Enabled := False;
    bEliminar.Enabled := False;
    bConsultar.Enabled := True;
    bDocumentos.Enabled := True;
    bBuscar.Enabled := True;
    Exit;
  end;

  if TablaProveedores.RecordCount = 0 then
  begin
    bAnadir.Enabled := True;
    bModificar.Enabled := False;
    bEliminar.Enabled := False;
    bConsultar.Enabled := False;
    bDocumentos.Enabled := False;
    bBuscar.Enabled := False;
  end
  else begin
    bAnadir.Enabled := True;  
    bModificar.Enabled := True;
    bEliminar.Enabled := True;
    bConsultar.Enabled := True;
    bDocumentos.Enabled := True;
    bBuscar.Enabled := True;
  end;
end;

procedure TfrProveedores.gridProveedoresRefreshButton(Sender: TObject);
begin
  BuscarProveedor;
end;

procedure TfrProveedores.bListadoEtiquetasClick(Sender: TObject);
begin
  CaptionModal := 'Generar etiquetas de proveedor';
  WidthModal := 515;
  HeightModal := 200;
  ModoModal := Listar;
  EntidadModal := entProveedor;
  ContenidoModal := TfrGenerarEtiquetasProveedores.Create(Self);
end;

procedure TfrProveedores.MenuItem1Click(Sender: TObject);
begin
  Contenido := TfrListarProveedores.Create(Self);
  Contenido.Modo := Listar;
end;

procedure TfrProveedores.gridProveedoresDblClick(Sender: TObject);
begin
  if Modo = Seleccionar then
    bSeleccionar.Click
  else
    bModificar.Click;
end;

procedure TfrProveedores.bEtiquetarClick(Sender: TObject);
var
  IndiceCol1 : Integer;
  IndiceCol2 : Integer;
  IndiceSel : Integer;
  CodProveedores0 : TStringList;
  CodProveedores1 : TStringList;

begin
  IndiceCol1 := gridProveedores.ColumnByFieldName('CODIGO').Index;
  IndiceCol2 := gridProveedores.ColumnByFieldName('ETIQUETADO').Index;

  CodProveedores0 := TStringList.Create;
  CodProveedores1 := TStringList.Create;

  for IndiceSel:=0 to gridProveedores.SelectedCount-1 do
  begin
    if StrToInt(gridProveedores.SelectedNodes[IndiceSel].Strings[IndiceCol2]) = CTE_NOETIQUETAR then
      CodProveedores0.Append(gridProveedores.SelectedNodes[IndiceSel].Strings[IndiceCol1])
    else
      CodProveedores1.Append(gridProveedores.SelectedNodes[IndiceSel].Strings[IndiceCol1]);
  end;

  //Asignamos su nuevo valor a los proveedores elegidos
  dmTablaProveedores.etiquetarProveedores(codProveedores0, CTE_NOETIQUETAR);
  dmTablaProveedores.etiquetarProveedores(codProveedores1, CTE_ETIQUETAR);
  commit;

  codProveedores0.Free;
  codProveedores1.Free;
  
  //Refrescamos
  CodigoProveedor := gridProveedores.FocusedNode.Strings[IndiceCol1];
end;

procedure TfrProveedores.gridProveedoresCustomDrawCell(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
  AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
  var AText: String; var AColor: TColor; AFont: TFont;
  var AAlignment: TAlignment; var ADone: Boolean);
var
  IndiceCol : Integer;
begin
{  if not ASelected then
  begin
    IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('ETIQUETADO').Index;
    if StrToInt(ANode.Strings[IndiceCol]) = CTE_ETIQUETAR then
      AFont.Color := COLOR_ETIQUETADO
    else
      AFont.Color := COLOR_NOETIQUETADO;
  end;}
end;

procedure TfrProveedores.SetEtiquetados(const Value: Boolean);
var
  valor : variant;
begin
  valor := 1;
  FEtiquetados := Value;
  if FEtiquetados then
     gridProveedores.Filter.Add(gridProveedores.FindColumnByFieldName('ETIQUETADO'), valor, valor);
end;

end.
