unit uDialogListaPresupuestosEnvioEMail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, ComCtrls,
  uDialogListaEnvioEMail, uIDialogListaPresupuestosEnvioEMail, uPresupuestosClienteController,
  uBizPresupuestosCliente;

type
  TfDialogListaPresupuestosEnvioEMail = class(TfDialogListaEnvioEMail, IDialogListaPresupuestosEnvioEMail)
    procedure actCancelarExecute(Sender: TObject);
    procedure actAceptarUpdate(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
  private
    FPresupuestos : IBizPresupuestoCliente;
    FController : IPresupuestosClienteController;
  protected
    function GetPresupuestos: IBizPresupuestoCliente;
    procedure SetPresupuestos(const Value: IBizPresupuestoCliente);

    procedure RellenarLista;
    procedure BorrarLista;
  public
    constructor Create(AOwner: TComponent); override;
    property Presupuestos: IBizPresupuestoCliente read GetPresupuestos write SetPresupuestos;
  end;

implementation

uses
  schPresupuestosClienteClient_Intf, uStringsUtils, cxControls;

{$R *.dfm}


{ TfDialogListaFacturasEnvioEMail }

procedure TfDialogListaPresupuestosEnvioEMail.actAceptarExecute(Sender: TObject);
var
  i : Integer;
  AEmail: String;
begin

  ShowHourglassCursor;
  Application.ProcessMessages;
  try
    FPresupuestos.First;
    FController.RecuperarCliente(FPresupuestos);
    FPresupuestos.Cliente.DataTable.Active := True;
    try
      for i := 0 to FPresupuestos.DataTable.RecordCount - 1 do
      begin
        AEmail := '';
        if not FPresupuestos.Cliente.EMAIL_1IsNull then
           AEmail := FPresupuestos.Cliente.EMAIL_1
        else if not FPresupuestos.Cliente.EMAIL_2IsNull then
           AEmail := FPresupuestos.Cliente.EMAIL_2;

        if not EsCadenaVacia(AEmail) then
        begin
          if FController.EnviarPresupuestoPorEMail(FPresupuestos, True, AEmail) 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;

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

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

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

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

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

function TfDialogListaPresupuestosEnvioEMail.GetPresupuestos: IBizPresupuestoCliente;
begin
  Result := FPresupuestos;
end;

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

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

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

procedure TfDialogListaPresupuestosEnvioEMail.SetPresupuestos(const Value: IBizPresupuestoCliente);
begin
  FPresupuestos := Value;

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

end.
