{
===============================================================================
  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: 04-10-2004
  Versión actual: 1.0.0
  Fecha versión actual: 04-10-2004
===============================================================================
  Modificaciones:

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

unit AlbaranesInstaladores;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RdxFrameAlbaranes, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls,
  Tipos, Menus, am2000menuitem, am2000popupmenu, am2000, Db, DBTables,
  RdxPaneles, RdxBarras, RXDBCtrl, dxCntner, dxTL, dxDBCtrl,
  dxDBGrid, StdCtrls, RdxComboBox, pngimage;

type
  TfrAlbaranesInstaladores = class(TRdxFrameAlbaranes)
    dsAlbaranes: TDataSource;
    BarraAlbaranes: TRdxBarraSuperior;
    bAnadir: TRdxBotonSuperior;
    bModificar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    bBuscar: TRdxBotonSuperior;
    pnlCuerpo: TRdxPanel;
    pnlGridAlbaranesCliente: TPanel;
    pnlExtra: TRdxBarraSuperior;
    bImprimir: TRdxBoton;
    bExportar: TRdxBoton;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelarGuardar: TRdxBoton;
    brSimple: TRdxBarraInferior;
    bSalir: TRdxBoton;
    gridAlbaranes: TdxDBGrid;
    imgSombra: TImage;
    RdxPanel1: TRdxPanel;
    Label1: TLabel;
    cbxAno: TRdxComboBox;
    bEnviarCorreo: TRdxBoton;
    procedure bAnadirClick(Sender: TObject);
    procedure bModificarClick(Sender: TObject);
    procedure bConsultarClick(Sender: TObject);
    procedure bBuscarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
    procedure bImprimirClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);
    procedure bSeleccionarClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure bExportarClick(Sender: TObject);
    procedure gridAlbaranesRefreshButton(Sender: TObject);
    procedure cbxAnoChange(Sender: TObject);
    procedure gridAlbaranesDblClick(Sender: TObject);
    procedure bEnviarCorreoClick(Sender: TObject);
  private
    FCodigoInstalador: String;
    procedure SetCodigoInstalador(Value : String);
    procedure ActualizarBotones;
  protected
    procedure BuscarAlbaran; override;
    procedure FreeContenido; override;
    procedure VerModal; override;
    procedure ActualizarBarras; override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property CodigoInstalador : String read FCodigoInstalador write SetCodigoInstalador;
    property TablaAlbaranes;
    property Entidad;
  end;

var
  frAlbaranesInstaladores: TfrAlbaranesInstaladores;

implementation
{$R *.DFM}

uses
  AlbaranInstalador, BuscarAlbaranInstalador, FacturaCliente, SysFunc,
  TablaAlbaranesInstalador, BaseDatos, Configuracion,
  IBCustomDataSet, FacturasClientes, Mensajes, InformeAlbaranInstalador,
  StrFunc, Constantes, Literales, RdxEmpresaActiva, Correo;

procedure TfrAlbaranesInstaladores.FreeContenido;
begin
  if (Contenido is TRdxFrameAlbaranes) then
    CodigoAlbaran := (Contenido as TRdxFrameAlbaranes).CodigoAlbaran;
  inherited FreeContenido;
  BuscarAlbaran;
end;

procedure TfrAlbaranesInstaladores.bAnadirClick(Sender: TObject);
begin
  inherited;
  Contenido := TfrAlbaranInstalador.Create(Self);
  Contenido.Modo := Anadir;
end;

procedure TfrAlbaranesInstaladores.bModificarClick(Sender: TObject);
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  Contenido := TfrAlbaranInstalador.Create(Self);
  Contenido.Modo := Modificar;
end;

procedure TfrAlbaranesInstaladores.bConsultarClick(Sender: TObject);
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  Contenido := TfrAlbaranInstalador.Create(Self);
  Contenido.Modo := Consultar;
end;

procedure TfrAlbaranesInstaladores.bBuscarClick(Sender: TObject);
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  Contenido := TfrBuscarAlbaranInstalador.Create(Self);
  Contenido.Entidad := Self.Entidad;
end;

procedure TfrAlbaranesInstaladores.bEliminarClick(Sender: TObject);
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  Contenido := TfrAlbaranInstalador.Create(Self);
  Contenido.Modo := Eliminar;
end;

procedure TfrAlbaranesInstaladores.bImprimirClick(Sender: TObject);
var
  FInformeAlbaran : TInformeAlbaranInstalador;
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  FInformeAlbaran := TInformeAlbaranInstalador.Create(Self);
  try
    FInformeAlbaran.Imprimir(FCodigoAlbaran);
  finally
    FInformeAlbaran.Free;
  end;
end;

procedure TfrAlbaranesInstaladores.ActualizarBarras;
begin
  inherited;
  case Modo of
    Facturar  : begin
                  if BarraSeleccion <> NIL then BarraSeleccion.Visible := True;
                  if BarraSalir <> NIL then BarraSalir.Visible := False;
                  if BarraOperacion <> NIL then BarraOperacion.Visible := False;
                end;
  end;
end;

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

  if TablaAlbaranes.RecordCount = 0 then
  begin
    bAnadir.Enabled := True;
    bModificar.Enabled := False;
    bEliminar.Enabled := False;
    bConsultar.Enabled := False;
    bBuscar.Enabled := False;
    bExportar.Enabled := False;
    bImprimir.Enabled := False;
  end
  else begin
    bAnadir.Enabled := True;
    bModificar.Enabled := True;
    bEliminar.Enabled := True;
    bConsultar.Enabled := True;
    bBuscar.Enabled := True;
    bExportar.Enabled := True;
    bImprimir.Enabled := True;
  end;
end;

procedure TfrAlbaranesInstaladores.BuscarAlbaran;
begin
  with TablaAlbaranes do
  begin
    DisableControls;
    Close;
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes);
    ActualizarBotones;
    EnableControls;
    Locate('CODIGO', CodigoAlbaran, []);
  end;
end;

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

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaAlbaranes := TIBDataSet.Create(Self);
  dsAlbaranes.DataSet := TablaAlbaranes;

  with TablaAlbaranes do
  begin
    DisableControls;
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaAlbaranesInstalador.sqlConsultarGridAlbaranes);
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    ActualizarBotones;
    EnableControls;
  end;
  dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes);
  dmTablaAlbaranesInstalador.InicializarGridAlbaranes(gridAlbaranes);
  gridAlbaranes.GotoFirst;

  cbxAno.Items := dmTablaAlbaranesInstalador.DarListaAnos(EmpresaActiva.Codigo);
  cbxAno.ItemIndex := 0;
end;

destructor TfrAlbaranesInstaladores.Destroy;
begin
  TablaAlbaranes.Close;
  TablaAlbaranes.UnPrepare;
  TablaAlbaranes.Free;
  inherited;
end;

procedure TfrAlbaranesInstaladores.SetCodigoInstalador(Value: String);
begin
  if FCodigoInstalador = Value then
    exit;
  FCodigoInstalador := Value;
  with TablaAlbaranes do
  begin
    DisableControls;
    Close;
    SelectSQL.Assign(dmTablaAlbaranesInstalador.sqlConsultarGridAlbaranesIns);
    ParamByName('CODIGOINSTALADOR').AsString := FCodigoInstalador;
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    dmTablaAlbaranesInstalador.InicializarTablaAlbaranes(@TablaAlbaranes);
    ActualizarBotones;        
    EnableControls;
    Locate('CODIGO', CodigoAlbaran, []);
  end;
end;

procedure TfrAlbaranesInstaladores.VerModal;
begin
  FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  inherited;
end;

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

procedure TfrAlbaranesInstaladores.bSeleccionarClick(Sender: TObject);
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  CloseFrame;
end;

procedure TfrAlbaranesInstaladores.bCancelarGuardarClick(Sender: TObject);
begin
  FCodigoAlbaran := '';
  CloseFrame;
end;

procedure TfrAlbaranesInstaladores.bExportarClick(Sender: TObject);
var
  FInformeAlbaran : TInformeAlbaranInstalador;
  Fichero : String;
begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  if not DarFicheroExportar(Fichero) then
    Exit;
  FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  FInformeAlbaran := TInformeAlbaranInstalador.Create(Self);
  try
    FInformeAlbaran.Exportar(FCodigoAlbaran, Fichero);
  finally
    FInformeAlbaran.Free;
  end;
end;

procedure TfrAlbaranesInstaladores.gridAlbaranesRefreshButton(Sender: TObject);
begin
  BuscarAlbaran;
end;

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

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

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

procedure TfrAlbaranesInstaladores.bEnviarCorreoClick(Sender: TObject);
var
  FInforme : TInformeAlbaranInstalador;
  Fichero : String;
  Datos: TDatosCorreo;

begin
  CodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').AsString;
  Datos:= Nil;
  Fichero := CodigoAlbaran;
  Fichero := DarRutaTemporal + StringReplace(Fichero, CTE_SEPSERIADO, CTE_SEPSERIADO2, [rfReplaceAll, rfIgnoreCase]);
  Fichero := Fichero + CTE_DOC;

  //Generamos el fichero para luego adjuntaro al correo
  FInforme:= TInformeAlbaranInstalador.Create(Self);
  try
    FInforme.Exportar(CodigoAlbaran, Fichero);
  finally
    FInforme.Free;
  end;

  try
  //Creamos el correo
  Datos:= TDatosCorreo.Create;
  Datos.Adjuntos.Add(Fichero);
  enviarCorreo(Datos);
  finally
    FreeAndNil(Datos);
  end;
end;

end.
