unit uDialogListaPedidosProveedorEnvioEMail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, ComCtrls,
  uDialogListaEnvioEMail, uIDialogListaPedidosProveedorEnvioEMail, uPedidosProveedorController,
  uBizPedidosProveedor;

type
  TfDialogListaPedidosProveedorEnvioEMail = class(TfDialogListaEnvioEMail, IDialogListaPedidosProveedorEnvioEMail)
    procedure actCancelarExecute(Sender: TObject);
    procedure actAceptarUpdate(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
  private
    FPedidosProveedor : IBizPedidoProveedor;
    FController : IPedidosProveedorController;
  protected
    function GetPedidos: IBizPedidoProveedor;
    procedure SetPedidos(const Value: IBizPedidoProveedor);

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

implementation

uses
  schPedidosProveedorClient_Intf, uStringsUtils, cxControls;

{$R *.dfm}


{ TfDialogListaPedidosEnvioEMail }

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

        FPedidosProveedor.Next;
        FController.RecuperarProveedor(FPedidosProveedor);
        FPedidosProveedor.Proveedor.DataTable.Active := True;
      end;
      btnAceptar.Enabled := False;
    finally
      ListView1.Items.EndUpdate;
    end;
  finally
    HideHourglassCursor;
  end;

  btnCancelar.SetFocus;
end;

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

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

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

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

function TfDialogListaPedidosProveedorEnvioEMail.GetPedidos: IBizPedidoProveedor;
begin
  Result := FPedidosProveedor;
end;

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

  FPedidosProveedor.First;
  FPedidosProveedor.DataTable.DisableControls;
  try
    for i := 0 to FPedidosProveedor.DataTable.RecordCount - 1 do
    begin
      FController.RecuperarProveedor(FPedidosProveedor);
      FPedidosProveedor.Proveedor.DataTable.Active := True;

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

procedure TfDialogListaPedidosProveedorEnvioEMail.SetPedidos(const Value: IBizPedidoProveedor);
begin
  FPedidosProveedor := Value;

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

end.
