unit uDialogListaPedidosCliEnvioEMail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, ComCtrls,
  uDialogListaEnvioEMail, uIDialogListaPedidosCliEnvioEMail,
  uPedidosClienteController, uBizPedidosCliente;

type
  TfDialogListaPedidosCliEnvioEMail = class(TfDialogListaEnvioEMail, IDialogListaPedidosCliEnvioEMail)
    procedure actCancelarExecute(Sender: TObject);
    procedure actAceptarUpdate(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
  private
    FPedidos : IBizPedidoCliente;
    FController : IPedidosClienteController;
  protected
    function GetPedidos: IBizPedidoCliente;
    procedure SetPedidos(const Value: IBizPedidoCliente);

    procedure RellenarLista;
    procedure BorrarLista;
  public
    constructor Create(AOwner: TComponent); override;
    property Pedidos: IBizPedidoCliente read GetPedidos write SetPedidos;
  end;

implementation

uses
  schPedidosClienteClient_Intf, uStringsUtils, cxControls;

{$R *.dfm}


{ TfDialogListaPedidosEnvioEMail }

procedure TfDialogListaPedidosCliEnvioEMail.actAceptarExecute(Sender: TObject);
var
  i : Integer;
begin
  ShowHourglassCursor;
  Application.ProcessMessages;
  try
    FPedidos.First;
    FController.RecuperarCliente(FPedidos);
    FPedidos.Cliente.DataTable.Active := True;
    try
      for i := 0 to FPedidos.DataTable.RecordCount - 1 do
      begin
        if not EsCadenaVacia(FPedidos.Cliente.EMAIL_ADMINISTRACION) then
        begin
          if FController.EnviarPedidoPorEMail(FPedidos, True, FPedidos.Cliente.EMAIL_ADMINISTRACION) then
          begin
            ListView1.Items[i].SubItems[2] := 'Correo generado';
            ModalResult := mrOk;
          end
          else
            ListView1.Items[i].SubItems[2] := 'Error al generar correo';
          Self.Update;
          Application.ProcessMessages;
        end;

        FPedidos.Next;
        FController.RecuperarCliente(FPedidos);
        FPedidos.Cliente.DataTable.Active := True;
      end;
      Button2.Enabled := False;
    finally
      ListView1.Items.EndUpdate;
    end;
  finally
    HideHourglassCursor;
  end;

  Button1.SetFocus;
end;

procedure TfDialogListaPedidosCliEnvioEMail.actAceptarUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (ListView1.Items.Count > 0)
end;

procedure TfDialogListaPedidosCliEnvioEMail.actCancelarExecute(Sender: TObject);
begin
  inherited;
  ModalResult := mrOk;
end;

procedure TfDialogListaPedidosCliEnvioEMail.BorrarLista;
begin
  ListView1.Items.Clear;
end;

constructor TfDialogListaPedidosCliEnvioEMail.Create(AOwner: TComponent);
begin
  inherited;
  ModalResult := mrCancel;
  FController := TPedidosClienteController.Create;
end;

function TfDialogListaPedidosCliEnvioEMail.GetPedidos: IBizPedidoCliente;
begin
  Result := FPedidos;
end;

procedure TfDialogListaPedidosCliEnvioEMail.RellenarLista;
var
  i : Integer;
begin
  ListView1.Items.BeginUpdate;
  ListView1.Items.Clear;

  FPedidos.First;
  FPedidos.DataTable.DisableControls;
  try
    for i := 0 to FPedidos.DataTable.RecordCount - 1 do
    begin
      FController.RecuperarCliente(FPedidos);
      FPedidos.Cliente.DataTable.Active := True;

      with ListView1.Items.Add do
      begin
        Caption := FPedidos.REFERENCIA;
        SubItems.Add(FPedidos.NOMBRE);
        SubItems.Add(FPedidos.Cliente.EMAIL_ADMINISTRACION);

        if EsCadenaVacia(FPedidos.Cliente.EMAIL_ADMINISTRACION) then
          SubItems.Add('Sin dirección e-mail administrativa')
        else
          SubItems.Add('')
      end;
      FPedidos.Next;
    end;
  finally
    FPedidos.DataTable.EnableControls;
    ListView1.Items.EndUpdate;
  end;
end;

procedure TfDialogListaPedidosCliEnvioEMail.SetPedidos(
  const Value: IBizPedidoCliente);
begin
  FPedidos := Value;

  if Assigned(FPedidos) then
  begin
    FPedidos.DataTable.Open;
    RellenarLista;
  end
  else
    BorrarLista;
end;

end.
