unit frm_ConfigEnvio;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.UITypes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Grids,
  Vcl.DBGrids, Data.DB, Vcl.Buttons, uAppTheme, FireDAC.Stan.Param, FireDAC.Comp.Client,
  frm_BaseList;

type
  TfrmConfigEnvio = class(TfrmBaseList)
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject); override;
    procedure btnNewClick(Sender: TObject); override;
    procedure btnEditClick(Sender: TObject); override;
    procedure btnDeleteClick(Sender: TObject); override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmConfigEnvio: TfrmConfigEnvio;

implementation

uses
  dmg_Main, frm_ConfigEnvioEditor, uDbErrorHandler;

{$R *.dfm}

procedure TfrmConfigEnvio.FormShow(Sender: TObject);
begin
  inherited;
  frmConfigEnvio := Self;
  OnDestroy := FormDestroy;
  pnlSearch.Visible := True;
  lblSearch.Caption := 'Buscar Cuenta / Perfil:';
  btnRefreshClick(nil);
end;

procedure TfrmConfigEnvio.FormDestroy(Sender: TObject);
begin
  if frmConfigEnvio = Self then
    frmConfigEnvio := nil;
end;

procedure TfrmConfigEnvio.btnRefreshClick(Sender: TObject);
var
  LSql: string;
begin
  FQryMain.Close;
  LSql :=
    'SELECT c.id, c.empresa_id, c.nombre_perfil, c.smtp_host, c.smtp_puerto, c.smtp_ssl, ' +
    '       c.smtp_usuario, c.smtp_nombre, c.smtp_probado, c.wa_modo, c.wa_telefono, c.activo, ' +
    '       COALESCE(e.nombre, ''Todas / General'') as empresa_nombre ' +
    'FROM ge_config_envio c ' +
    'LEFT JOIN ge_empresas e ON c.empresa_id = e.id ' +
    'WHERE 1=1 ';

  if Trim(edtSearch.Text) <> '' then
  begin
    LSql := LSql + 'AND (c.nombre_perfil LIKE :search OR c.smtp_usuario LIKE :search OR c.smtp_host LIKE :search) ';
  end;
  LSql := LSql + 'ORDER BY e.nombre, c.nombre_perfil';

  FQryMain.SQL.Text := LSql;

  if Trim(edtSearch.Text) <> '' then
    FQryMain.ParamByName('search').AsString := '%' + Trim(edtSearch.Text) + '%';

  FQryMain.Open;

  dbGridMain.Columns.Clear;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'nombre_perfil';
    Title.Caption := 'Perfil de Envío';
    Width := 160;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'empresa_nombre';
    Title.Caption := 'Empresa';
    Width := 160;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'smtp_usuario';
    Title.Caption := 'Cuenta Remitente';
    Width := 190;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'smtp_nombre';
    Title.Caption := 'Nombre Visible';
    Width := 140;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'smtp_host';
    Title.Caption := 'Servidor SMTP';
    Width := 140;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'smtp_puerto';
    Title.Caption := 'Puerto';
    Width := 55;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'smtp_probado';
    Title.Caption := 'Probado';
    Width := 65;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'activo';
    Title.Caption := 'Activo';
    Width := 55;
  end;
end;

procedure TfrmConfigEnvio.btnNewClick(Sender: TObject);
begin
  if not Assigned(frmConfigEnvioEditor) then
    Application.CreateForm(TfrmConfigEnvioEditor, frmConfigEnvioEditor);

  frmConfigEnvioEditor.ParentForm := Self;
  frmConfigEnvioEditor.ConfigEnvioId := 0;
  if frmConfigEnvioEditor.ShowModal = mrOk then
    btnRefreshClick(nil);
end;

procedure TfrmConfigEnvio.btnEditClick(Sender: TObject);
begin
  if FQryMain.IsEmpty then Exit;

  if not Assigned(frmConfigEnvioEditor) then
    Application.CreateForm(TfrmConfigEnvioEditor, frmConfigEnvioEditor);

  frmConfigEnvioEditor.ParentForm := Self;
  frmConfigEnvioEditor.ConfigEnvioId := FQryMain.FieldByName('id').AsInteger;
  if frmConfigEnvioEditor.ShowModal = mrOk then
    btnRefreshClick(nil);
end;

procedure TfrmConfigEnvio.btnDeleteClick(Sender: TObject);
var
  LId: Integer;
begin
  if FQryMain.IsEmpty then Exit;

  LId := FQryMain.FieldByName('id').AsInteger;
  if MessageDlg('¿Está seguro de que desea eliminar el perfil de envío "' +
                FQryMain.FieldByName('nombre_perfil').AsString + '"?',
                mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    try
      dmgMain.qryExec.Close;
      dmgMain.qryExec.SQL.Text := 'DELETE FROM ge_config_envio WHERE id = :id';
      dmgMain.qryExec.ParamByName('id').AsInteger := LId;
      dmgMain.qryExec.ExecSQL;
      btnRefreshClick(nil);
    except
      on E: Exception do
        TDbErrorHandler.HandleException(E, 'Error al eliminar el perfil de envío');
    end;
  end;
end;

end.
