Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SERVIDOR
SERVERMETHODS1UNIT
unit ServerMethodsUnit1;
interface
//Estas son las librerias y las clases que se implementan en el servidor.
uses System.SysUtils, System.Classes, System.Json,
Datasnap.DSServer, Datasnap.DSAuth,
Datasnap.DSProviderDataModuleAdapter,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
FireDAC.Phys, Data.DB, FireDAC.Comp.Client, FireDAC.Phys.MySQL,
FireDAC.Phys.MySQLDef, FireDAC.Stan.Param, FireDAC.DatS,
FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.Comp.DataSet, Datasnap.Provider;
type
//Aqui se implementan todas las variables con su respectivo tipo (clases), como
se observa aqui se implementan los FDQuery, los DataSetProvider y la
conexion a la base de datos el TFDConnection
TServerMethods1 = class(TDSServerModule)
Conexion: TFDConnection;
FDQuery_Validar_Login: TFDQuery;
FDQuery_tipo_usuario: TFDQuery;
DataSetProvider_tipo_usuario: TDataSetProvider;
FDQuery_citas_medico: TFDQuery;
DataSetProvider_cita_med: TDataSetProvider;
FDQuery_nombre: TFDQuery;
DataSetProvider_nombre: TDataSetProvider;
FDQuery_id_usuario: TFDQuery;
FDQuery_citas_paciente: TFDQuery;
DataSetProvider_citas_paciente: TDataSetProvider;
DataSetProvider_id_usuario: TDataSetProvider;
FDQuery_nombre_med: TFDQuery;
DataSetProvider_nombre_med: TDataSetProvider;
FDQuery_id_sede: TFDQuery;
DataSetProvider_id_sede: TDataSetProvider;
implementation
{ %CLASSGROUP 'FMX.Controls.TControl' }
{$R *.dfm}
uses
System.StrUtils;
//Aqui comienzan a implementarse los metodos, estableciendo sus query y
conectandolos a sus respectivos FDQuery
function TServerMethods1.citas_medico(fecha, id: string): boolean;
//Se declaran dos variables, una tipo string para el query y otra tipo integer
para obtener un resultado booleano
var
query: string;
dato: integer;
begin
query := 'SELECT c.radicado_cita as Radicado,ac.hora_inicio as
Hora,concat(du.prim_nom," ",du.prim_ape) as Paciente FROM cita c
JOIN agenda_citas ac ON ac.id_agenda=c.id_agenda join datos_usuario
du ON du.id_usuario=c.id_usuario WHERE
ac.id_usuario_medico=''' + id + ''' AND c.cod_estado="1" AND
ac.fecha_inicio=''' + fecha + ''' order by ac.hora_inicio';
//De este modo se conecta los query a los FDQuery para que puedan
implementarse cuando sea llamada la funcin.
FDQuery_citas_medico.SQL.Clear;
FDQuery_citas_medico.SQL.Add(query);
FDQuery_citas_medico.Open;
dato := FDQuery_citas_medico.RecordCount;
//Se realiza un RecordCount, para obtener el dato de coincidencias del query
en la base de datos
if (dato > 0) then
begin
Result := true;
end
else
begin
Result := false;
end;
end;
begin
query:='select c.radicado_cita as Codigo_Cita,tc.tipo
Tipo_De_Cita,ac.fecha_inicio as Fecha,ac.hora_inicio as Hora,'+
'ec.estado as Estado,du.prim_nom as Nombre,du.prim_ape as
Apellido,c.id_agenda as Id_Agenda,se.nombre as Sede from
sismed1.cita c '+
'join sismed1.tipo_cita tc on c.cod_tipo=tc.cod_tipo join
sismed1.agenda_citas ac'+
' on ac.id_agenda= c.id_Agenda join sismed1.estado_cita ec on '+
'ec.cod_estado=c.cod_estado join sismed1.datos_usuario du on
du.id_usuario=ac.id_usuario_medico'+
' join sismed1.sedes se on se.cod_sede=du.cod_sede where
c.id_usuario='''+id+'''';
FDQuery_citas_paciente.SQL.Clear;
FDQuery_citas_paciente.SQL.Add(query);
FDQuery_citas_paciente.Open;
dato := FDQuery_citas_paciente.RecordCount;
end;
//Esta funcin es inherente del sistema
function TServerMethods1.EchoString(Value: string): string;
begin
Result := Value;
end;
function TServerMethods1.id_usuario(cedula: string): boolean;
var
query: string;
dato:integer;
begin
query:='select id_usuario from datos_usuario where
num_doc='''+cedula+'''';
FDQuery_id_usuario.SQL.Clear;
FDQuery_id_usuario.SQL.Add(query);
FDQuery_id_usuario.Open;
dato := FDQuery_id_usuario.RecordCount;
begin
query:='SELECT ag.id_agenda as CodigoAgenda, du.id_usuario as
CodigoMedico, du.PRIM_NOM as nombre, du.PRIM_APE as
apellido,hora_inicio as hora from datos_usuario du join agenda_citas
ag where ag.id_usuario_medico=du.id_usuario and
ag.fecha_inicio='''+fecha+''' and ag.disponible="s"';
FDQuery_nombre_med.SQL.Clear;
FDQuery_nombre_med.SQL.Add(query);
FDQuery_nombre_med.Open;
dato := FDQuery_nombre_med.RecordCount;
FDQuery_nombre.SQL.Clear;
FDQuery_nombre.SQL.Add(query);
FDQuery_nombre.Open;
dato:=FDQuery_nombre.RecordCount;
try
Conexion.ExecSQL(query,[]);
result:=true;
except
end;
end;
begin
query:='select cod_sede from datos_usuario where
cedula='''+cedula+'''';
FDQuery_id_sede.SQL.Clear;
FDQuery_id_sede.SQL.Add(query);
FDQuery_id_sede.Open;
dato:=FDQuery_id_sede.RecordCount;
unit ULogin;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.StdCtrls,
FMX.Controls.Presentation, FMX.Edit, IdHashMessageDigest,
Data.DBXDataSnap,
IPPeerClient, Data.DBXCommon, Data.DB, Data.SqlExpr, Datasnap.DBClient,
Datasnap.DSConnect, Data.Bind.EngExt, FMX.Bind.DBEngExt, System.Rtti,
System.Bindings.Outputs, FMX.Bind.Editors, Data.Bind.Components,
Data.Bind.DBScope, FMX.MaterialSources, FMX.Layouts, FMX.ExtCtrls;
type
TfrmLogin = class(TForm)
Label1: TLabel;
cedula: TLabel;
contrasea: TLabel;
user: TEdit;
pass: TEdit;
acceder: TButton;
exit: TButton;
SQLConnection1: TSQLConnection;
ClientDataSet1: TClientDataSet;
DSProviderConnection1: TDSProviderConnection;
StyleBook1: TStyleBook;
procedure accederClick(Sender: TObject);
procedure exitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmLogin: TfrmLogin;
implementation
{$R *.fmx}
//Aqui hace llamado a otros ofrmularios para usar su informacion, ademas se
hace llamdo al UServerClases el cual es el Puente con el servidoe, pemitiendo
conectar a las funciones con los objetos que las llamen
uses UServerClases, UMedico1, UPaciente1;
begin
//Se valida que los campos no esten vacios
if (user.Text = '') or (pass.Text = '') then
begin
ShowMessage('Por favor ingrese todos los datos');
end
else
begin
md5 := TIdHashMessageDigest5.Create;
password := md5.HashStringAsHex(pass.Text);
//Esta variable, permite llamar la conexin con el servidor para ejecutar las
funciones
dato := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
if (dato.login(user.Text, password) = true) then //Se valida si el login fue
correcto
begin
end;
if (prueba='4') then
begin
//se abre el formulario de medicos
frmLogin.Visible:=false;
frmMedico.ShowModal;
frmLogin.Close;
end;
if (prueba='1') then
begin
//Si no cumple con el limite de los tipos de usuario se arroja este mensaje
ShowMessage('Seor Administrador o Auxiliar, para hacer uso de la
plataforma SISMED dirijase a nuestra pagina web: www.sismed.comxa.com');
end;
end;
end
else
begin
//si no coincide el usuario y la contrasea con la base de datos, arroja este
mensaje
ShowMessage('El usuario y la contrasea estn incorrectos, o no se
encuentran en nuestra base de datos');
end;
end;
end;
UMedico1 frmMedico
--------------
unit UMedico1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.StdCtrls,
FMX.ListBox, FMX.DateTimeCtrls, Data.DBXDataSnap, IPPeerClient,
Data.DBXCommon, Data.DB, Datasnap.DBClient, Datasnap.DSConnect,
Data.SqlExpr,
Data.Bind.EngExt, Fmx.Bind.DBEngExt, System.Rtti, System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.DBScope;
private
{ Private declarations }
public
{ Public declarations }
//Estas son variables que se implementan de manera publica en el form para
que puedan ser llamadas en cualquier momento
var
cedula:string;
end;
var
frmMedico: TfrmMedico;
implementation
{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}
if(cita.nombre(cedula)=true) then
begin
ClientDataSet1.Close;
ClientDataSet1.Open;
nombre:=ClientDataSet1.Fields[0].AsString;
apellido:=ClientDataSet1.Fields[1].AsString;
label2.Text:=nombre+' '+apellido;
end;
end;
end.
UMedico2 frmMedico2
unit UMedico2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
System.Rtti,
FMX.StdCtrls, FMX.Layouts, FMX.Grid, Data.DBXDataSnap, IPPeerClient,
Data.DBXCommon, Data.DB, Datasnap.DBClient, Datasnap.DSConnect,
Data.SqlExpr,
Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid,
System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope;
type
TfrmMedico2 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Label3: TLabel;
DSProviderConnection1: TDSProviderConnection;
BindingsList1: TBindingsList;
Label2: TLabel;
ClientDataSet1: TClientDataSet;
ClientDataSet1Radicado: TIntegerField;
ClientDataSet1Hora: TTimeField;
ClientDataSet1Paciente: TStringField;
SQLConnection1: TSQLConnection;
BindSourceDB1: TBindSourceDB;
LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
var
frmMedico2: TfrmMedico2;
implementation
{$R *.fmx}
if(cita.citas_medico(fecha,'1')=false)then
begin
ShowMessage('NO TIENE CITAS ASIGNADAS EN ESTA FECHA');
end
else
begin
StringGrid1.Visible:=true;
ClientDataSet1.Close;
ClientDataSet1.Open;
end;
end;
end.
MODULO PACIENTES
unit UMedico2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
System.Rtti,
FMX.StdCtrls, FMX.Layouts, FMX.Grid, Data.DBXDataSnap, IPPeerClient,
Data.DBXCommon, Data.DB, Datasnap.DBClient, Datasnap.DSConnect,
Data.SqlExpr,
Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid,
System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope;
type
TfrmMedico2 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Label3: TLabel;
DSProviderConnection1: TDSProviderConnection;
BindingsList1: TBindingsList;
Label2: TLabel;
ClientDataSet1: TClientDataSet;
ClientDataSet1Radicado: TIntegerField;
ClientDataSet1Hora: TTimeField;
ClientDataSet1Paciente: TStringField;
SQLConnection1: TSQLConnection;
BindSourceDB1: TBindSourceDB;
LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
var
frmMedico2: TfrmMedico2;
implementation
{$R *.fmx}
if(cita.citas_medico(fecha,'1')=false)then
begin
ShowMessage('NO TIENE CITAS ASIGNADAS EN ESTA FECHA');
end
else
begin
StringGrid1.Visible:=true;
ClientDataSet1.Close;
ClientDataSet1.Open;
end;
end;
end.