unit uCargaEDI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, ComCtrls, StdCtrls, JvExComCtrls, JvAnimate,
  pngimage, XPMan, ImgList;

type
  TIconoEstado = (ieOK, ieMAL, ieNada);

  TfCargaEDI = class(TForm)
    Label13: TLabel;
    JvAnimate1: TJvAnimate;
    Button1: TButton;
    TimerCuentaAtrasCerrar: TTimer;
    ListView1: TListView;
    Image1: TImage;
    Bevel1: TBevel;
    TimerCuentaAtrasCargar: TTimer;
    XPManifest1: TXPManifest;
    ImageList1: TImageList;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure TimerCuentaAtrasCerrarTimer(Sender: TObject);
    procedure TimerCuentaAtrasCargarTimer(Sender: TObject);
  private
    FNumCargasError : Integer;
    FNumCargasOK : Integer;
    FCuentaAtras : Integer;
    procedure OnLoadSuccess(Sender: TObject);
    procedure OnLoadError(Sender : TObject);
    procedure AnadirMensaje(const aMensaje : String; Icono : TIconoEstado = ieNada);
    procedure LanzarCargas;
  public
    { Public declarations }
  end;

var
  fCargaEDI: TfCargaEDI;

implementation

{$R *.dfm}

uses
  uCargarFicheros, uDataModuleBase;

procedure TfCargaEDI.FormShow(Sender: TObject);
begin
  FNumCargasOK := 0;
  FNumCargasError := 0;   
  TimerCuentaAtrasCargar.Enabled := True;
end;

procedure TfCargaEDI.OnLoadError(Sender: TObject);
begin
  Beep;
  AnadirMensaje((Sender as TCargarFicherosThread).Nombre + ': ' + (Sender as TCargarFicherosThread).ErrorText, ieMAL);

  FNumCargasError := FNumCargasError + 1;
  if (FNumCargasError = 2) or
    ((FNumCargasError = 1) and (FNumCargasOK = 1)) then
  begin
    JvAnimate1.Visible := False;
    JvAnimate1.Active := False;
    TimerCuentaAtrasCerrar.Enabled := True;
  end;
end;

procedure TfCargaEDI.OnLoadSuccess(Sender: TObject);
begin
  Beep;
  AnadirMensaje((Sender as TCargarFicherosThread).Nombre + ': Ficheros cargados', ieOK);

  FNumCargasOK := FNumCargasOK + 1;
  if (FNumCargasOK = 2) or
    ((FNumCargasError = 1) and (FNumCargasOK = 1)) then
  begin
    JvAnimate1.Visible := False;
    JvAnimate1.Active := False;
    TimerCuentaAtrasCerrar.Enabled := True;
  end;
end;

procedure TfCargaEDI.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfCargaEDI.FormCreate(Sender: TObject);
begin
  FCuentaAtras := 5;
  FNumCargasError := 0;
  FNumCargasOK := 0;  
end;

procedure TfCargaEDI.Button1Click(Sender: TObject);
begin
  Close;
end;

procedure TfCargaEDI.AnadirMensaje(const aMensaje: String;
  Icono : TIconoEstado = ieNada);
var
  AItem : TListItem;
begin
  AItem := ListView1.Items.Add;
  case Icono of
    ieOK  : AItem.ImageIndex := 1;
    ieMAL : AItem.ImageIndex := 0;
    else
      AItem.ImageIndex := -1;    
  end;
  AItem.Caption := TimeToStr(Now);
  AItem.SubItems.Add(aMensaje);
end;

procedure TfCargaEDI.LanzarCargas;
begin
  if not dmBase.HayConexion then
  begin
    JvAnimate1.Visible := False;
    JvAnimate1.Active := False;
    AnadirMensaje('No se encuentra el servidor', ieMAL);
    TimerCuentaAtrasCerrar.Enabled := True;
  end
  else begin
    JvAnimate1.Active := True;
    AnadirMensaje('Cargando ficheros de ventas');
    TCargarVentasThread.Create('CABVEN.TXT', 'LUGVEN.TXT',
      'ARTVEN.TXT', OnLoadSuccess, OnLoadError);

    AnadirMensaje('Cargando ficheros de inventario');
    TCargarInventarioThread.Create('CABINV.TXT', 'LININV.TXT',
      'CANTINV.TXT', OnLoadSuccess, OnLoadError);
  end;
end;

procedure TfCargaEDI.TimerCuentaAtrasCerrarTimer(Sender: TObject);
begin
  Button1.Enabled := True;
  TimerCuentaAtrasCerrar.Enabled := False;
  if FCuentaAtras = 0 then
    Close;
  Button1.Caption := 'Cerrar (' + IntToStr(FCuentaAtras) + ')';
  Update;
  Application.ProcessMessages;
  FCuentaAtras := FCuentaAtras - 1;
  TimerCuentaAtrasCerrar.Enabled := True;
end;

procedure TfCargaEDI.TimerCuentaAtrasCargarTimer(Sender: TObject);
begin
  TimerCuentaAtrasCargar.Enabled := False;
  Update;
  LanzarCargas;
end;

end.
