unit uDialogListaFacturasClienteEnvioEMail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, ComCtrls,
  uDialogListaEnvioEMail, uIDialogListaFacturasClienteEnvioEMail, uFacturasClienteController,
  uBizFacturasCliente;

type
  TfDialogListaFacturasClienteEnvioEMail = class(TfDialogListaEnvioEMail, IDialogListaFacturasClienteEnvioEMail)
    procedure actCancelarExecute(Sender: TObject);
    procedure actAceptarUpdate(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
  private
    FFacturasCliente : IBizFacturaCliente;
    FController : IFacturasClienteController;
  protected
    function GetFacturas: IBizFacturaCliente;
    procedure SetFacturas(const Value: IBizFacturaCliente);

    procedure RellenarLista;
    procedure BorrarLista;
  public
    constructor Create(AOwner: TComponent); override;
    property FacturasCliente: IBizFacturaCliente read GetFacturas write SetFacturas;
  end;

implementation

uses
  schFacturasClienteClient_Intf, uStringsUtils, cxControls;

{$R *.dfm}


{ TfDialogListaFacturasEnvioEMail }

procedure TfDialogListaFacturasClienteEnvioEMail.actAceptarExecute(Sender: TObject);
var
  i : Integer;
begin
  ShowHourglassCursor;
  Application.ProcessMessages;
  try
    FFacturasCliente.First;
    FController.RecuperarCliente(FFacturasCliente);
    FFacturasCliente.Cliente.DataTable.Active := True;
    try
      for i := 0 to FFacturasCliente.DataTable.RecordCount - 1 do
      begin
        if not EsCadenaVacia(FFacturasCliente.Cliente.EMAIL_1) then
        begin
          if FController.EnviarFacturaPorEMail(FFacturasCliente, True, FFacturasCliente.Cliente.EMAIL_1) 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
        else
        if not EsCadenaVacia(FFacturasCliente.Cliente.EMAIL_2) then
        begin
          if FController.EnviarFacturaPorEMail(FFacturasCliente, True, FFacturasCliente.Cliente.EMAIL_2) 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;

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

  btnCancelar.SetFocus;
end;

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

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

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

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

function TfDialogListaFacturasClienteEnvioEMail.GetFacturas: IBizFacturaCliente;
begin
  Result := FFacturasCliente;
end;

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

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

      with ListView1.Items.Add do
      begin
        Caption := FFacturasCliente.REFERENCIA;
        SubItems.Add(FFacturasCliente.NOMBRE);
        if not FFacturasCliente.Cliente.EMAIL_1IsNull then
        begin
          SubItems.Add(FFacturasCliente.Cliente.EMAIL_1);
          SubItems.Add('')
        end
        else
        if not FFacturasCliente.Cliente.EMAIL_2IsNull then
        begin
          SubItems.Add(FFacturasCliente.Cliente.EMAIL_2);
          SubItems.Add('')
        end
        else
          SubItems.Add('Sin dirección e-mail')
      end;
      FFacturasCliente.Next;
    end;
  finally
    FFacturasCliente.DataTable.EnableControls;
    ListView1.Items.EndUpdate;
  end;
end;

procedure TfDialogListaFacturasClienteEnvioEMail.SetFacturas(const Value: IBizFacturaCliente);
begin
  FFacturasCliente := Value;

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

end.
