{
===============================================================================
  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.7
  Fecha versión actual: 07-01-2005
===============================================================================
  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'.

    15-05-2002    P224. Poder cambiar la situación a muchas facturas a la vez.

    08-04-2003    P263. Agrupar por años las facturas.

    07-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.

    07-03-2004    p272. Adaptación a multiempresa.

    07-01-2005    Arreglo de informes de facturas pendientes y facturas de iva que
                  llaman al mismo frame y no cambiaba pero al cambiar entidad solo si funciona.
===============================================================================
}

unit FacturasProveedores;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RdxFrameFacturasProveedor, RdxBotones, ExtCtrls, RdxPaneles, RdxBarras,
  Grids, DBGrids, RXDBCtrl, Menus, am2000menuitem, RdxFrame, am2000utils,
  am2000popupmenu, am2000, Db, StdCtrls, RdxComboBox, dxCntner, dxTL,
  dxDBCtrl, dxDBGrid;

type
  TfrFacturasProveedores = class(TRdxFrameFacturasProveedor)
    BarraFacturas: TRdxBarraSuperior;
    bAnadir: TRdxBotonSuperior;
    bModificar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    bBuscar: TRdxBotonSuperior;
    bListar: TRdxBotonMenu;
    pnlCuerpo: TRdxPanel;
    pnlGridFacturas: TPanel;
    dsFacturas: TDataSource;
    menuListar: TPopupMenu2000;
    mnuListadoFacturasPendientes: TMenuItem2000;
    N1: TMenuItem2000;
    mnuListadoIVA: TMenuItem2000;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelarGuardar: TRdxBoton;
    brSimple: TRdxBarraInferior;
    bSalir: TRdxBoton;
    pnlExtra: TRdxBarraSuperior;
    bCambiarSituacion: TRdxBoton;
    gridFacturas: TdxDBGrid;
    N2: TMenuItem2000;
    Listadodefacturasdeproveedor1: TMenuItem2000;
    imgSombra: TImage;
    RdxPanel1: TRdxPanel;
    Label1: TLabel;
    cbxAno: TRdxComboBox;
    procedure bAnadirClick(Sender: TObject);
    procedure bModificarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
    procedure bConsultarClick(Sender: TObject);
    procedure bBuscarClick(Sender: TObject);
    procedure mnuListadoFacturasPendientesClick(Sender: TObject);
    procedure bSeleccionarClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure mnuListadoIVAClick(Sender: TObject);
    procedure bCambiarSituacionClick(Sender: TObject);
    procedure gridFacturasRefreshButton(Sender: TObject);
    procedure gridFacturasCustomDrawCell(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);
    procedure Listadodefacturasdeproveedor1Click(Sender: TObject);
    procedure cbxAnoChange(Sender: TObject);
    procedure gridFacturasDblClick(Sender: TObject);
  private
    FCodigoProveedor : string;
    procedure SetCodigoProveedor(Value : String);
    procedure ActualizarBotones;
  protected
    procedure BuscarFactura; override;
    procedure FreeContenido; override;
    procedure VerModal; override;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;    
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property CodigoProveedor : String read FCodigoProveedor write SetCodigoProveedor;
    property TablaFacturasProveedor;
    property Entidad;
  end;

var
  frFacturasProveedores: TfrFacturasProveedores;

implementation
{$R *.DFM}

{ TfrFacturasProveedores }

uses
  Tipos, BaseDatos, TablaFacturasProveedor, IBDatabase, Configuracion,
  IBCustomDataSet, Mensajes, FacturaProveedor, BuscarFacturaProveedor,
  ListadoFacturasProvPenIVA, PagarFacturaProveedor, StrFunc, ListadoFacturasProv,
  Constantes, Literales, RdxEmpresaActiva;

procedure TfrFacturasProveedores.BuscarFactura;
begin
  with TablaFacturasProveedor do
  begin
    DisableControls;
    Close;
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
    ActualizarBotones;
    EnableControls;
    Locate('CODIGO', CodigoFactura, []);
  end;
end;

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

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaFacturasProveedor := TIBDataSet.Create(Self);
  dsFacturas.DataSet := TablaFacturasProveedor;

  with TablaFacturasProveedor do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarGridFacturas);
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    ActualizarBotones;    
  end;
  dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
  dmTablaFacturasProveedor.InicializarGridFacturas(gridFacturas);
  gridFacturas.GotoFirst;

  cbxAno.Items := dmTablaFacturasProveedor.DarListaAnos(EmpresaActiva.Codigo, True);
  cbxAno.ItemIndex := 0;
end;

destructor TfrFacturasProveedores.Destroy;
begin
  TablaFacturasProveedor.Close;
  TablaFacturasProveedor.UnPrepare;
  TablaFacturasProveedor.Free;
  inherited;
end;

procedure TfrFacturasProveedores.FreeContenido;
begin
  if (Contenido is TRdxFrameFacturasProveedor) then
    CodigoFactura := (Contenido as TRdxFrameFacturasProveedor).CodigoFactura;

  if (ContenidoModal is TfrPagarFacturaProveedor) then
    CodigoFactura := (ContenidoModal as TfrPagarFacturaProveedor).ListaFacturas.Strings[0];

  inherited FreeContenido;
end;

procedure TfrFacturasProveedores.SetCodigoProveedor(Value: String);
begin
  if FCodigoProveedor = Value then
    exit;
  FCodigoProveedor := Value;
  with TablaFacturasProveedor do
  begin
    DisableControls;
    Close;
    SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarGridFacturasProv);
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;    
    ParamByName('CODIGOPROVEEDOR').AsString := FCodigoProveedor;
    Prepare;
    Open;
    ActualizarBotones;
    EnableControls;
    dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor);
    Locate('CODIGO', CodigoFactura, []);
  end;
end;

procedure TfrFacturasProveedores.bAnadirClick(Sender: TObject);
begin
  inherited;
  Contenido := TfrFacturaProveedor.Create(Self);
  Contenido.Modo := Anadir;
  Contenido.Visible := True;
end;

procedure TfrFacturasProveedores.bModificarClick(Sender: TObject);
begin
  CodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
  if UpperCase(TablaFacturasProveedor.FieldByName('SITUACION').AsString) <> 'NO PAGADA' then
  begin
    VerMensaje(mFacturaNoModificar);
    Exit;
  end;

  Contenido := TfrFacturaProveedor.Create(Self);
  Contenido.Modo := Modificar;
  Contenido.Visible := True;
end;

procedure TfrFacturasProveedores.bEliminarClick(Sender: TObject);
begin
  CodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
  if UpperCase(TablaFacturasProveedor.FieldByName('SITUACION').AsString) <> 'NO PAGADA' then
  begin
    VerMensaje(mFacturaNoEliminar);
    Exit;
  end;

  Contenido := TfrFacturaProveedor.Create(Self);
  Contenido.Modo := Eliminar;
  Contenido.Visible := True;
end;

procedure TfrFacturasProveedores.bConsultarClick(Sender: TObject);
begin
  CodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
  Contenido := TfrFacturaProveedor.Create(Self);
  Contenido.Modo := Consultar;
  Contenido.Visible := True;
end;

procedure TfrFacturasProveedores.bBuscarClick(Sender: TObject);
begin
  CodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
  Contenido := TfrBuscarFacturaProveedor.Create(Self);
end;

procedure TfrFacturasProveedores.mnuListadoFacturasPendientesClick(Sender: TObject);
begin
  Contenido := TfrListadoFacturasProvPenIVA.Create(Self);
  Contenido.Entidad := entListadoFacturasProvPendientes;
end;

procedure TfrFacturasProveedores.bSeleccionarClick(Sender: TObject);
begin
  CodigoFactura := TablaFacturasProveedor.FieldByName('CODIGO').AsString;
  CloseFrame;
end;

procedure TfrFacturasProveedores.bSalirClick(Sender: TObject);
begin
  CloseFrame;
end;

procedure TfrFacturasProveedores.bCancelarGuardarClick(Sender: TObject);
begin
  FCodigoFactura := NULL;
  CloseFrame;
end;

procedure TfrFacturasProveedores.mnuListadoIVAClick(Sender: TObject);
begin
  Contenido := TfrListadoFacturasProvPenIVA.Create(Self);
  Contenido.Entidad := entListadoFacturasProvIVA;
end;

procedure TfrFacturasProveedores.bCambiarSituacionClick(Sender: TObject);
var
  Situacion : String;
  iAux : Integer;
begin
  ListaFacturas := dmTablaFacturasProveedor.DarListaFacturas(gridFacturas, @TablaFacturasProveedor);
  if (ListaFacturas = NIL) or (ListaFacturas.Count = 0) then
    exit;

  // Comprobar que todas las facturas tienen la misma situación
  for iAux := 0 to ListaFacturas.Count - 1 do
  begin
    if iAux = 0 then
      Situacion := dmTablaFacturasProveedor.DarSituacionFactura(EmpresaActiva.Codigo,
        ListaFacturas.Strings[iAux])
    else begin
      if Situacion <> dmTablaFacturasProveedor.DarSituacionFactura(EmpresaActiva.Codigo,
        ListaFacturas.Strings[iAux]) then
      begin
        VerMensaje(msgFacSitDistinta);
        Exit;
      end;
    end;
  end;

  CaptionModal := 'Cambiar situación de factura de proveedor';
  WidthModal := 460;
  HeightModal := 200;
  ModoModal := Pagar;
  EntidadModal := entProveedor;
  ContenidoModal := TfrPagarFacturaProveedor.Create(Self);
end;

procedure TfrFacturasProveedores.VerModal;
begin
  if (ContenidoModal is TfrPagarFacturaProveedor) then
    (ContenidoModal as TfrPagarFacturaProveedor).ListaFacturas := ListaFacturas;

  inherited;
end;

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

  if TablaFacturasProveedor.RecordCount = 0 then
  begin
    bAnadir.Enabled := True;
    bModificar.Enabled := False;
    bEliminar.Enabled := False;
    bConsultar.Enabled := False;
    bBuscar.Enabled := False;
    bListar.Enabled := False;
    bCambiarSituacion.Enabled := False;
  end
  else begin
    bAnadir.Enabled := True;
    bModificar.Enabled := True;
    bEliminar.Enabled := True;
    bConsultar.Enabled := True;
    bBuscar.Enabled := True;
    bListar.Enabled := True;
    bCambiarSituacion.Enabled := True;    
  end;
end;

procedure TfrFacturasProveedores.gridFacturasRefreshButton(Sender: TObject);
begin
  BuscarFactura;
end;

procedure TfrFacturasProveedores.gridFacturasCustomDrawCell(
  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('IMPORTETOTAL').Index;
    if Copy(ANode.Strings[IndiceCol], 0, 1) = '-' then
      AFont.Color := COLOR_ABONO;
  end;
end;

procedure TfrFacturasProveedores.Listadodefacturasdeproveedor1Click(Sender: TObject);
begin
  Contenido := TfrListadoFacturasProv.Create(Self);
end;

procedure TfrFacturasProveedores.cbxAnoChange(Sender: TObject);
begin
  if cbxAno.Text = CTE_TODOS then begin
    gridFacturas.Filter.Remove(gridFacturas.FindColumnByFieldName(CTE_ANO));
    gridFacturas.Filter.Clear;
  end
  else begin
    gridFacturas.Filter.Clear;
    gridFacturas.Filter.Add(gridFacturas.FindColumnByFieldName(CTE_ANO), cbxAno.Text, cbxAno.Text);
  end;

  gridFacturas.SetFocus;
  gridFacturas.GotoFirst;
//Falta seleccionar tupla
end;

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

procedure TfrFacturasProveedores.SetContenido(NuevoFrame: TRdxFrame);
begin
  inherited;
  if (Contenido is TfrListadoFacturasProv) then
    (Contenido as TfrListadoFacturasProv).CodigoProveedor := TablaFacturasProveedor.FieldByName('CODIGOPROVEEDOR').AsString;

  if (Contenido is TfrListadoFacturasProvPenIVA) then
    (Contenido as TfrListadoFacturasProvPenIVA).CodigoProveedor := TablaFacturasProveedor.FieldByName('CODIGOPROVEEDOR').AsString;
end;

end.
