unit uoddface_prepare;

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls, ExtCtrls, Buttons,
  ssl_openssl,
  urosx,
  xmatdefs,
  uListadoProblemasODDFACE,
  uDataSetGenerico,
  uconstantessimsee,
  unotificar,
  uversiones_oddface,
  uverdoc,
  uvisordetabla,
  uoddfaceconfig;


type

  { TFormPrincipal }

  TFormPrincipal = class(TForm)
    btAyudaLogin: TButton;
    btGuardar: TBitBtn;
    btAgregarPerfil: TBitBtn;
    btEliminarPerfil: TBitBtn;
    btClonarPerfil: TBitBtn;
    btIngresar: TButton;
    btNuevo: TButton;
    btRefrescar: TButton;
    btProbarGuardar: TButton;
    btAyudaListadoProblemas: TButton;
    cbPerfil: TComboBox;
    cb_recordar_clave_proxy: TCheckBox;
    cb_recordar_clave_simsee: TCheckBox;
    eClaveSimSEE: TEdit;
    eproxy_host: TEdit;
    eproxy_pass: TEdit;
    eproxy_puerto: TEdit;
    eproxy_user: TEdit;
    eUsuarioSimSEE: TEdit;
    e_ros_host: TLabeledEdit;
    e_ros_ip: TLabeledEdit;
    e_ros_port: TLabeledEdit;
    e_ros_uri: TLabeledEdit;
    gb_ProxyParams: TGroupBox;
    gbrosx: TGroupBox;
    gbUsuario: TGroupBox;
    lbPuertoProxy: TLabel;
    lbServidorProxy: TLabel;
    Label15: TLabel;
    lbEjemploServidorProxy: TLabel;
    lbEjemploPuertoProxy: TLabel;
    lbUsuariProxy: TLabel;
    lbClaeProxy: TLabel;
    lbUsuario: TLabel;
    lbClave: TLabel;
    lblPerfil: TLabel;
    memo_login: TMemo;
    PageControl1: TPageControl;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    ScrollBox1: TScrollBox;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    procedure btAgregarPerfilClick(Sender: TObject);
    procedure btAyudaListadoProblemasClick(Sender: TObject);
    procedure btAyudaLoginClick(Sender: TObject);
    procedure btClonarPerfilClick(Sender: TObject);
    procedure btCrearTablasDBClick(Sender: TObject);
    procedure btEliminarPerfilClick(Sender: TObject);
    procedure btGuardarClick(Sender: TObject);
    procedure btNuevoClick(Sender: TObject);
    procedure btProbarGuardarClick(Sender: TObject);
    procedure btIngresarClick(Sender: TObject);
    procedure btRefrescarClick(Sender: TObject);
    procedure cbPerfilChange(Sender: TObject);
    procedure cbPerfilEditingDone(Sender: TObject);
    procedure cbPerfilSelect(Sender: TObject);
    procedure eUsuarioSimSEEChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure gb_ProxyParamsClick(Sender: TObject);
    procedure lbPuertoProxyClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }

  public
    { public declarations }
    lst_problemas: TListadoProblemasODDFACE;
    dbcon: TDBrosxCon;
    oddface_cfg: TOddFaceConfigRec;

    procedure SetPerfilInfo(kPerfil: integer);
    procedure GetPerfilInfo(aPerfil: TOddFaceConfigPerfil);
    procedure LoadConfig;
    procedure SaveConfig;
  end;

var
  FormPrincipal: TFormPrincipal;

implementation

{$R *.lfm}

{ TFormPrincipal }



procedure TFormPrincipal.btNuevoClick(Sender: TObject);
var
  nid_problema: integer;
  sql: string;
  str_nombres, str_valores: string;
begin

  nid_problema := TListadoProblemasODDFACE.CrearNuevoProblema(dbcon);

  if lst_problemas <> nil then
  begin
    lst_problemas.flg_populate := True;
    lst_problemas.Editar_onClick(IntToStr(nid_problema), 0);
  end;

end;

procedure TFormPrincipal.btCrearTablasDBClick(Sender: TObject);
begin

end;

procedure TFormPrincipal.btEliminarPerfilClick(Sender: TObject);
var
  k: integer;
  aPerfil: TOddFaceConfigPerfil;
begin
  if oddface_cfg.perfiles.count = 1 then
  begin
    ShowMessage( 'No es posible borrar el último perfil.' );
    exit;
  end;
  k:= oddface_cfg.kPerfilActivo;
  aPerfil:= oddface_cfg.perfiles[ k ];
  aPerfil.Free;
  oddface_cfg.perfiles.Delete( k );
  if k >= oddface_cfg.perfiles.count then dec( k );
  oddface_cfg.kPerfilActivo:= k;
  cbPerfil.Items:= oddface_cfg.NombresPerfiles;
  SetPerfilInfo( k );
end;

procedure TFormPrincipal.btGuardarClick(Sender: TObject);
begin
  saveconfig;
//  oddface_cfg.Save;
end;

procedure TFormPrincipal.btAgregarPerfilClick(Sender: TObject);
var
  aPerfil: TOddFaceConfigPerfil;
  orgName: string;
  kDup: integer;
begin
  aPerfil:= TOddFaceConfigPerfil.CreateDefault;
  orgName:= aPerfil.nombrePerfil;
  kDup:= 0;
  while oddface_cfg.GetPerfil( aPerfil.nombrePerfil ) <> nil do
  begin
    inc( kDup );
    aPerfil.nombrePerfil:= orgName+'_'+IntToStr(kDup);
  end;
  oddface_cfg.perfiles.add( aPerfil );
  oddface_cfg.kPerfilActivo:= oddface_cfg.perfiles.count-1;
  cbPerfil.Items:= oddface_cfg.NombresPerfiles;
  SetPerfilInfo( oddface_cfg.kPerfilActivo  );
end;

procedure TFormPrincipal.btAyudaListadoProblemasClick(Sender: TObject);
begin
  verdoc(3831,'oddface-listadoproblemas', '');
end;

procedure TFormPrincipal.btAyudaLoginClick(Sender: TObject);
begin
  verdoc(3831,'oddface-login', '');
end;

procedure TFormPrincipal.btClonarPerfilClick(Sender: TObject);
var
  aPerfil: TOddFaceConfigPerfil;
  orgName: string;
  kDup: integer;
begin
  aPerfil:= oddface_cfg.PerfilActivo.CreateClone;
  orgName:= aPerfil.nombrePerfil;
  kDup:= 0;
  while oddface_cfg.GetPerfil( aPerfil.nombrePerfil ) <> nil do
  begin
    inc( kDup );
    aPerfil.nombrePerfil:= orgName+'_'+IntToStr(kDup);
  end;
  oddface_cfg.perfiles.add( aPerfil );
  oddface_cfg.kPerfilActivo:= oddface_cfg.perfiles.count-1;
  cbPerfil.Items:= oddface_cfg.NombresPerfiles;
  SetPerfilInfo( oddface_cfg.kPerfilActivo  );
end;


procedure TFormPrincipal.LoadConfig;
begin
  oddface_cfg := get_OddFace_cfg;
  cbPerfil.Items := oddface_cfg.NombresPerfiles;
  SetPerfilInfo(oddface_cfg.kPerfilActivo);
end;


procedure TFormPrincipal.SaveConfig;
begin
  //  oddface_cfg:= get_OddFace_cfg;
  oddface_cfg.kPerfilActivo := cbPerfil.ItemIndex;
  GetPerfilInfo(oddface_cfg.Perfiles[cbPerfil.ItemIndex]);
  oddface_cfg.Save;
end;



procedure TFormPrincipal.btProbarGuardarClick(Sender: TObject);
var
  hora: string;
begin
  {$IFDEF PROXY_ENABLED_ROS}
  dbcon.proxy_host := trim(eproxy_host.Text);
  dbcon.proxy_port := trim(eproxy_puerto.Text);
  dbcon.proxy_user := trim(eproxy_user.Text);
  dbcon.proxy_pass := trim(eproxy_pass.Text);
  {$ENDIF}
  unotificar.esperando_inicio('... intentando conexión con servidor de IIE-FING...');
  hora := dbcon.sql_func('SELECT now() FROM ofe_problemas LIMIT 1 ');
  if hora <> '' then
  begin
    memo_login.Lines.add('Se ha conectado correctamente al servidor del IIE-FING');
    memo_login.Lines.add(' .. la hora del servidor es: ' + hora);
    saveconfig;
  end
  else
  begin
    memo_login.Lines.add('FALLO INTENTO DE CONEXIÓN');
  end;
  unotificar.esperando_fin;
end;

procedure TFormPrincipal.btIngresarClick(Sender: TObject);
var
  hora: string;
  clave: string;
  ficha: TDataRecord;
begin
  {$IFDEF PROXY_ENABLED_ROS}
  dbcon.proxy_host := trim(eproxy_host.Text);
  dbcon.proxy_port := trim(eproxy_puerto.Text);
  dbcon.proxy_user := trim(eproxy_user.Text);
  dbcon.proxy_pass := trim(eproxy_pass.Text);
  {$ENDIF}
  dbcon.usuario_email := trim(eUsuarioSimSEE.Text);
  dbcon.ipfija := trim(e_ros_ip.Text);
  dbcon.host := trim(e_ros_host.Text);
  dbcon.uri_rosx := trim(e_ros_uri.Text);
  dbcon.puerto := trim(e_ros_port.Text);
  clave := trim(eClaveSimSEE.Text);
  try
    unotificar.esperando_inicio('... Intentando conexión con servidor ' +
      dbcon.host + ' ....');
    dbcon.usuario_loginok := True;
    ficha := dbcon.sql_ficha(
      'SELECT now() as hora, nid, grupo, tipo FROM ofe_usuarios WHERE email =''' +
      dbcon.usuario_email + ''' AND clave=''' + clave + '''; ');
    dbcon.usuario_loginok := False;
    if ficha <> nil then
    begin
      hora := ficha.GetByNameAsString('hora');
      dbcon.usuario_nid := ficha.GetByNameAsInt('nid');
      dbcon.usuario_grupo := ficha.GetByNameAsInt('grupo');
      dbcon.usuario_tipo := ficha.GetByNameAsInt('tipo');
      dbcon.usuario_loginok := dbcon.usuario_nid > 0;
      ficha.Free;
    end;

    if not dbcon.usuario_loginok then
    begin
      unotificar.esperando_fin;
      unotificar.notificar('Falló verificación de ingreso.', True);
      exit;
    end;


    dbcon.determinar_tipo_servidor;

    unotificar.esperando_fin;
    if hora <> '' then
    begin
      saveconfig;
      PageControl1.TabIndex := 0;
      TabSheet1.Enabled := True;
      TabSheet1.Visible := True;
      TabSheet2.Enabled := False;
      TabSheet2.Visible := False;
      lst_problemas.flg_populate := True;
    end
    else
      unotificar.notificar(
        'No fue posible conectarse al servidor. Si usted está detrás de un PROXY debe configurarlo.',
        True);
  finally
  end;
end;

procedure TFormPrincipal.btRefrescarClick(Sender: TObject);
begin
  if lst_problemas = nil then
  begin
    lst_problemas := TListadoProblemasODDFACE.Create(
      dbcon, scrollbox1, 'lst_problemas', oddface_cfg.PerfilActivo.nombrePerfil );
    lst_problemas.Parent := scrollbox1;
  end;
  lst_problemas.flg_populate := True;
  lst_problemas.Invalidate;
  ScrollBox1.AutoScroll := False;

end;

procedure TFormPrincipal.cbPerfilChange(Sender: TObject);
begin

end;



procedure TFormPrincipal.cbPerfilEditingDone(Sender: TObject);
begin
  oddface_cfg.PerfilActivo.nombrePerfil:= cbPerfil.Caption;
  cbPerfil.Items[ oddface_cfg.kPerfilActivo ]:= cbPerfil.Caption;
  cbPerfil.ItemIndex:= oddface_cfg.kPerfilActivo;
end;


procedure TFormPrincipal.cbPerfilSelect(Sender: TObject);
begin
  oddface_cfg.kPerfilActivo:= cbPerfil.ItemIndex;
  SetPerfilInfo( cbPerfil.ItemIndex );
end;

procedure TFormPrincipal.eUsuarioSimSEEChange(Sender: TObject);
begin

end;


procedure TFormPrincipal.FormCreate(Sender: TObject);
begin

  loadconfig;

  PageControl1.TabIndex := 1;
  TabSheet1.Enabled := False;
  TabSheet1.Visible := False;
  TabSheet2.Enabled := True;
  tabsheet2.Visible := True;

  //  dbcon:= TDBrosxCon.Create('', 'iie.fing.edu.uy', '80', '/simsee/ros/rosx.php' );
  //  dbcon:= TDBrosxCon.Create('', 'iie.fing.edu.uy', '80', '/simsee/ros/rosx.php' );
  dbcon := TDBrosxCon.Create('', 'latorre.adme.com.uy', '80', '/zeros/x/rosx.php');

  lst_problemas := TListadoProblemasODDFACE.Create(dbcon, scrollbox1, 'lst_problemas', oddface_cfg.PerfilActivo.nombrePerfil );
  lst_problemas.Parent := scrollbox1;
  lst_problemas.flg_populate := False;

  Caption := 'OddFace - ' + uversiones_oddface.vOddFace + ' (c) IIE-FING';

  {$IFDEF PROXY_ENABLED_ROS}
  gb_ProxyParams.Visible := True;
  {$ENDIF}
end;

procedure TFormPrincipal.gb_ProxyParamsClick(Sender: TObject);
begin

end;

procedure TFormPrincipal.lbPuertoProxyClick(Sender: TObject);
begin

end;


procedure TFormPrincipal.Timer1Timer(Sender: TObject);
begin
  lst_problemas.populate;
end;

procedure TFormPrincipal.SetPerfilInfo(kPerfil: integer);
var
  aPerfil: TOddFaceConfigPerfil;
begin
  aPerfil := oddface_cfg.perfiles[kPerfil];
  eUsuarioSimSEE.Text := aPerfil.UsuarioSimSEE;
  eClaveSimSEE.Text := aPerfil.ClaveSimSEE;
  e_ros_ip.Text := aPerfil.ros_ip;
  e_ros_host.Text := aPerfil.ros_host;
  e_ros_port.Text := aPerfil.ros_port;
  e_ros_uri.Text := aPerfil.ros_uri;
  eproxy_host.Text := aPerfil.proxy_host;
  eproxy_puerto.Text := aPerfil.proxy_port;
  eproxy_user.Text := aPerfil.proxy_user;
  eproxy_pass.Text := aPerfil.proxy_pass;
  cb_recordar_clave_proxy.Checked := aPerfil.flg_recordar_clave_proxy;
  cb_recordar_clave_simsee.Checked := aPerfil.flg_recordar_clave_simsee;
  cbPerfil.ItemIndex := kPerfil;
  cbPerfil.Caption:= aPerfil.NombrePerfil;
end;

procedure TFormPrincipal.GetPerfilInfo(aPerfil: TOddFaceConfigPerfil);
begin
  aPerfil.nombrePerfil := cbPerfil.Caption;
  aPerfil.UsuarioSimSEE := eUsuarioSimSEE.Text;

  aPerfil.flg_recordar_clave_simsee := cb_recordar_clave_simsee.Checked;
  if aPerfil.flg_recordar_clave_simsee then
    aPerfil.ClaveSimSEE := eClaveSimSEE.Text
  else
    aPerfil.ClaveSimSEE := '';

  aPerfil.ros_ip := e_ros_ip.Text;
  aPerfil.ros_host := e_ros_host.Text;
  aPerfil.ros_port := e_ros_port.Text;
  aPerfil.ros_uri := e_ros_uri.Text;
  aPerfil.proxy_host := eproxy_host.Text;
  aPerfil.proxy_port := eproxy_puerto.Text;
  aPerfil.proxy_user := eproxy_user.Text;

  aPerfil.flg_recordar_clave_proxy := cb_recordar_clave_proxy.Checked;

  if aPerfil.flg_recordar_clave_proxy then
    aPerfil.proxy_pass := eproxy_pass.Text
  else
    aPerfil.proxy_pass := '';

end;


(**
procedure TFormPrincipal.Button3Click(Sender: TObject);
var
  ds: TResultadoQuery;
  r: TDataRecord;
begin
  ds:= sql_query( 'SELECT nid FROM ofe_problemas WHERE tipo = 2' );
  r:= ds.first;
  while r<> nil do
  begin
    sql_exec( 'DELETE FROM ofe_individuos_'+ r.GetByNameAsString('nid')+' WHERE dtu > ''2012-11-10 21:00:00'' ');
    writeln( 'problema : '+ r.GetByNameAsString('nid') );
    r:= ds.next;
  end;
end;
**)

end.
