Commit 222f107c authored by Gabriel Macena's avatar Gabriel Macena

Casos de uso Consultar Emprestimo (concluído) e Cadastrar Livro (criado).

parent a3742827
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?>
<DATA> <DATA>
<oql name="ContarEmprestimosExemplar" oqltype="1">
<description></description>
<query><![CDATA[SELECT count(*) as qnt
FROM ngExemplar,
ngExemplar.Emprestimos
WHERE ngExemplar.OID = ?oid:acInt]]></query>
</oql>
<oql name="ContarEmprestimosLivro" oqltype="1">
<description></description>
<query><![CDATA[SELECT count(*) as qnt
FROM ngLivro,
ngLivro.Exemplares,
ngLivro.Exemplares.Emprestimos
WHERE ngLivro.OID = ?oid:acInt]]></query>
</oql>
<oql name="ObterEmprestimos" oqltype="0">
<description></description>
<query><![CDATA[SELECT ngEmprestimo
FROM ngEmprestimo
WHERE (ngEmprestimo.Usuario.OID = ?oid:acInt OR ?oid:acInt IS NULL)
AND(ngEmprestimo.Usuario.Nome LIKE '%'+?nome:acString+'%' OR ?nome:acString IS NULL)
AND (ngEmprestimo.Usuario.CPF = ?cpf:acString OR ?cpf:acString IS NULL)]]></query>
</oql>
<oql name="ObterExemplares" oqltype="0"> <oql name="ObterExemplares" oqltype="0">
<description></description> <description></description>
<query><![CDATA[SELECT ngExemplar <query><![CDATA[SELECT ngExemplar
...@@ -9,6 +32,15 @@ WHERE (ngExemplar.Livro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString ...@@ -9,6 +32,15 @@ WHERE (ngExemplar.Livro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString
AND (ngExemplar.Livro.ISBN = ?isbn:acString OR ?isbn:acString IS NULL) AND (ngExemplar.Livro.ISBN = ?isbn:acString OR ?isbn:acString IS NULL)
AND (ngExemplar.Codigo = ?codigo:acString OR ?codigo:acString IS NULL) AND (ngExemplar.Codigo = ?codigo:acString OR ?codigo:acString IS NULL)
ORDER BY ngExemplar.Livro.OID ASC]]></query> ORDER BY ngExemplar.Livro.OID ASC]]></query>
</oql>
<oql name="ObterLivros" oqltype="0">
<description></description>
<query><![CDATA[SELECT ngLivro
FROM ngLivro
WHERE (ngLivro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString IS NULL)
AND (ngLivro.ISBN = ?isbn:acString OR ?isbn:acString IS NULL)
AND (ngLivro.Edicao = ?edicao:acString OR ?edicao:acString IS NULL)
ORDER BY ngLivro.Titulo ASC]]></query>
</oql> </oql>
<oql name="ObterUsuarios" oqltype="0"> <oql name="ObterUsuarios" oqltype="0">
<description></description> <description></description>
......
This diff is collapsed.
...@@ -99,7 +99,9 @@ uses ...@@ -99,7 +99,9 @@ uses
nguSituacao in 'ngu\nguSituacao.pas', nguSituacao in 'ngu\nguSituacao.pas',
nguUsuario in 'ngu\nguUsuario.pas', nguUsuario in 'ngu\nguUsuario.pas',
ucuEfetuarEmprestimo in 'ucu\ucuEfetuarEmprestimo.pas', ucuEfetuarEmprestimo in 'ucu\ucuEfetuarEmprestimo.pas',
utuEmprestimoOQL in 'utu\utuEmprestimoOQL.pas'; utuEmprestimoOQL in 'utu\utuEmprestimoOQL.pas',
ucuConsultarEmprestimo in 'ucu\ucuConsultarEmprestimo.pas',
ucuCadastrarLivro in 'ucu\ucuCadastrarLivro.pas';
var var
lErros : TStringList; lErros : TStringList;
......
This diff is collapsed.
...@@ -13,11 +13,13 @@ type ...@@ -13,11 +13,13 @@ type
private private
FDataInicio: acDateTime; FDataInicio: acDateTime;
FDataDevolucaoPrevista: acDateTime; FDataDevolucaoPrevista: acDateTime;
FDataDevolucao: acDateTime;
fExemplar: acRelationPartnerShip; fExemplar: acRelationPartnerShip;
fUsuario: acRelationPartnerShip; fUsuario: acRelationPartnerShip;
published published
property DataInicio: acDateTime read FDataInicio write FDataInicio; property DataInicio: acDateTime read FDataInicio write FDataInicio;
property DataDevolucaoPrevista: acDateTime read FDataDevolucaoPrevista write FDataDevolucaoPrevista; property DataDevolucaoPrevista: acDateTime read FDataDevolucaoPrevista write FDataDevolucaoPrevista;
property DataDevolucao: acDateTime read FDataDevolucao write FDataDevolucao;
property Exemplar: acRelationPartnerShip read fExemplar write fExemplar; property Exemplar: acRelationPartnerShip read fExemplar write fExemplar;
property Usuario: acRelationPartnerShip read fUsuario write fUsuario; property Usuario: acRelationPartnerShip read fUsuario write fUsuario;
end; end;
...@@ -29,6 +31,7 @@ begin ...@@ -29,6 +31,7 @@ begin
piField.AddAttribute('OID').AsString := Self.IDO.AsString; piField.AddAttribute('OID').AsString := Self.IDO.AsString;
piField.AddAttribute('DataInicio').AsDate := Self.DataInicio.Value; piField.AddAttribute('DataInicio').AsDate := Self.DataInicio.Value;
piField.AddAttribute('DataDevolucaoPrevista').AsDate := Self.DataDevolucaoPrevista.Value; piField.AddAttribute('DataDevolucaoPrevista').AsDate := Self.DataDevolucaoPrevista.Value;
piField.AddAttribute('DataDevolucao').AsDate := Self.DataDevolucao.Value;
end; end;
initialization initialization
......
...@@ -29,6 +29,7 @@ begin ...@@ -29,6 +29,7 @@ begin
piField.AddAttribute('OID').AsString := Self.IDO.AsString; piField.AddAttribute('OID').AsString := Self.IDO.AsString;
piField.AddAttribute('Titulo').AsString := Self.Titulo.AsString; piField.AddAttribute('Titulo').AsString := Self.Titulo.AsString;
piField.AddAttribute('ISBN').AsString := Self.ISBN.AsString; piField.AddAttribute('ISBN').AsString := Self.ISBN.AsString;
piField.AddAttribute('Edicao').AsString := Self.Edicao.AsString;
end; end;
initialization initialization
......
unit svuHelloWorld; unit svuHelloWorld;
interface interface
...@@ -125,3 +125,4 @@ finalization ...@@ -125,3 +125,4 @@ finalization
end. end.
<?xml version="1.0"?>
<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SYSMSG">
<xs:complexType>
<xs:sequence>
<xs:element name="Livro">
<xs:complexType>
<xs:attribute name="ISBN" use="optional" type="xs:string"/>
<xs:attribute name="Titulo" use="optional" type="xs:string"/>
<xs:attribute name="Edicao" use="optional" type="xs:string"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SYSMSG">
<xs:complexType>
<xs:sequence>
<xs:element name="Livros">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Livro">
<xs:complexType>
<xs:attribute name="Titulo" type="xs:string" use="required"/>
<xs:attribute name="ISBN" type="xs:string" use="required"/>
<xs:attribute name="Edicao" type="xs:string" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SYSMSG">
<xs:complexType>
<xs:sequence>
<xs:element name="Usuario">
<xs:complexType>
<xs:attribute name="OID" type="xs:string" use="optional"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SYSMSG">
<xs:complexType>
<xs:sequence>
<xs:element name="Emprestimos">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Emprestimo">
<xs:complexType>
<xs:sequence>
<xs:element name="Usuario">
<xs:complexType>
<xs:attribute name="OID" type="xs:string" use="required"/>
<xs:attribute name="Nome" type="xs:string" use="required"/>
<xs:attribute name="CPF" type="xs:string" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
<xs:element name="Exemplar">
<xs:complexType>
<xs:sequence>
<xs:element name="Livro">
<xs:complexType>
<xs:attribute name="Titulo" type="xs:string" use="required"/>
<xs:attribute name="ISBN" type="xs:string" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Codigo" type="xs:string" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="DataInicio" type="xs:date" use="required"/>
<xs:attribute name="DataDevolucaoPrevista" type="xs:date" use="required"/>
<xs:attribute name="DataDevolucao" type="xs:date" use="required"/>
<xs:attribute name="OID" type="xs:string" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:schema>
unit ucuCadastrarLivro;
interface
uses
utuStateMachine, utuRequest, ucuUseCase, acuFramework, nguLivro;
type
ucCadastrarLivro = class(ucUseCase)
private
fLivro : ngLivro;
fSavePoint : acPersistenceSessionSavePoint;
public
procedure Initialize; Override;
procedure Finalize; Override;
published
procedure Effect_IncluirLivro(piRequest: utRequest; piTransition: utTransition);
procedure Effect_EditarLivro(piRequest: utRequest; piTransition: utTransition);
procedure Effect_BuscarLivro(piRequest: utRequest; piTransition: utTransition);
procedure Effect_ExcluirLivro(piRequest: utRequest; piTransition: utTransition);
procedure Effect_CancelarCadastro(piRequest: utRequest; piTransition: utTransition);
procedure Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_ConcluirCadastro(piRequest: utRequest; piTransition: utTransition);
end;
implementation
uses
ucuManager,
utuMessage,
acuObject,
utuEmprestimoOQL,
nguExemplar,
nguSituacao;
procedure ucCadastrarLivro.Initialize;
begin
inherited;
end;
procedure ucCadastrarLivro.Finalize;
begin
inherited;
end;
procedure ucCadastrarLivro.Effect_IncluirLivro(piRequest: utRequest; piTransition: utTransition);
var
lFieldLivro : utField;
begin
fSavePoint := Session.AddSavePoint;
try
fLivro := ngLivro.CreateNew(Self.Session);
lFieldLivro := piRequest.Response.RootField.AddField('Livro');
lFieldLivro.AddAttribute('OID').AsString := fLivro.IDO.AsString;
except
Session.RollBackToSavePoint(fSavePoint);
raise;
end;
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_EditarLivro(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_BuscarLivro(piRequest: utRequest; piTransition: utTransition);
var
lFieldLivro,
lFieldLivros : utField;
lListLivros : acPersistentObjectList;
lEnumLivro : acEnumerator;
lLivro : ngLivro;
lOQL : IObterLivros;
begin
lFieldLivro := piRequest.Message.RootField.FieldByName('Livro');
lListLivros := acPersistentObjectList.Create(ngLivro);
try
lOQL := utEmprestimoOQL.ObterLivros(Self.Session);
if lFieldLivro.HasAttribute('Titulo')
then lOQL.Param_titulo.Value := lFieldLivro.AttributeByName('Titulo').AsString
else lOQL.Param_titulo.SetNull;
if lFieldLivro.HasAttribute('ISBN')
then lOQL.Param_isbn.Value := lFieldLivro.AttributeByName('ISBN').AsString
else lOQL.Param_isbn.SetNull;
if lFieldLivro.HasAttribute('Edicao')
then lOQL.Param_edicao.Value := lFieldLivro.AttributeByName('Edicao').AsString
else lOQL.Param_edicao.SetNull;
lOQL.LoadList(lListLivros);
lEnumLivro := lListLivros.GetEnumerator;
try
lFieldLivros := piRequest.Response.RootField.AddField('Livros');
while not lEnumLivro.EOL do
begin
lLivro := lEnumLivro.Current as ngLivro;
lLivro.toXML(lFieldLivros.AddField('Livro'));
lEnumLivro.MoveNext;
end;
finally
lEnumLivro.Free;
end;
finally
lListLivros.Free;
end;
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_ExcluirLivro(piRequest: utRequest; piTransition: utTransition);
var
lFieldLivro,
lFieldLivros,
lFieldResult : utField;
lListLivros : acPersistentObjectList;
lEnumLivro : acEnumerator;
lLivro : ngLivro;
lOQL : IContarEmprestimosLivro;
lSavePoint : acPersistenceSessionSavePoint;
begin
lFieldLivro := piRequest.Message.RootField.FieldByName('Livro');
lSavePoint := Session.AddSavePoint;
try
lOQL := utEmprestimoOQL.ContarEmprestimosLivro(Self.Session);
lOQL.Param_oid.Value := lFieldLivro.AttributeByName('OID').AsInteger;
lFieldResult := utField.Create;
try
lOQL.LoadDataSet(lFieldResult);
if lFieldResult.ValueByPath('DATAPACKET.ROWDATA.ROW.@C0').AsInteger > 0
then raise EucException.Create('No possvel excluir o livro, ele possui pelo menos um exemplar com emprstimo associado.');
lLivro := Session.LoadObject(ngLivro, acOIDInt.Create(lFieldLivro.AttributeByName('OID').AsInteger)) as ngLivro;
Session.DeleteObject(lLivro);
Session.Save;
finally
lFieldResult.Free;
end;
except
Session.RollBackToSavePoint(lSavePoint);
raise;
end;
lListLivros := acPersistentObjectList.Create(ngLivro);
try
Self.Session.LoadAllInstances(ngLivro, lListLivros);
lEnumLivro := lListLivros.GetEnumerator;
try
lFieldLivros := piRequest.Response.RootField.AddField('Livros');
while not lEnumLivro.EOL do
begin
lLivro := lEnumLivro.Current as ngLivro;
lLivro.toXML(lFieldLivros.AddField('Livro'));
lEnumLivro.MoveNext;
end;
finally
lEnumLivro.Free;
end;
finally
lListLivros.Free;
end;
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_CancelarCadastro(piRequest: utRequest; piTransition: utTransition);
begin
if Assigned(fSavePoint)
then Session.RollBackToSavePoint(fSavePoint);
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldExemplares : utField;
lExemplar : ngExemplar;
lEnumExemplar : acEnumerator;
begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
lExemplar := ngExemplar.CreateNew(Self.Session);
lExemplar.Codigo.AsString := lFieldExemplar.AttributeByName('Codigo').AsString;
lExemplar.Situacao.Partner := Session.LoadObject(ngSituacao, acOIDInt.Create(1));
fLivro.Exemplares.Add(lExemplar);
lFieldExemplares := piRequest.Response.RootField.AddField('Exemplares');
lEnumExemplar := fLivro.Exemplares.GetEnumerator;
try
while not lEnumExemplar.EOL do
begin
lExemplar := lEnumExemplar.Current as ngExemplar;
lExemplar.toXML(lFieldExemplares.AddField('Exemplar'));
lEnumExemplar.MoveNext;
end;
finally
lEnumExemplar.Free;
end;
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_ConcluirCadastro(piRequest: utRequest; piTransition: utTransition);
var
lSavePoint : acPersistenceSessionSavePoint;
lFieldLivroIn,
lFieldLivroOut,
lFieldExemplares : utField;
lExemplar : ngExemplar;
lEnumExemplar : acEnumerator;
begin
lSavePoint := Self.Session.AddSavePoint;
try
lFieldLivroIn := piRequest.Message.RootField.FieldByName('Livro');
fLivro.Titulo.AsString := lFieldLivroIn.AttributeByName('Titulo').AsString;
fLivro.ISBN.AsString := lFieldLivroIn.AttributeByName('ISBN').AsString;
fLivro.Edicao.AsString := lFieldLivroIn.AttributeByName('Edicao').AsString;
Session.Save;
lFieldLivroOut := piRequest.Response.RootField.AddField('Livro');
fLivro.toXML(lFieldLivroOut);
lFieldExemplares := lFieldLivroOut.AddField('Exemplares');
lEnumExemplar := fLivro.Exemplares.GetEnumerator;
try
while not lEnumExemplar.EOL do
begin
lExemplar := lEnumExemplar.Current as ngExemplar;
lExemplar.toXML(lFieldExemplares.AddField('Exemplar'));
lEnumExemplar.MoveNext;
end;
finally
lEnumExemplar.Free;
end;
except
Session.RollBackToSavePoint(lSavePoint);
raise;
end;
piRequest.Processed := True;
end;
initialization
gucManager.RegisterClass(3226,ucCadastrarLivro);
end.
unit ucuConsultarEmprestimo;
interface
uses
utuStateMachine, utuRequest, ucuUseCase, acuFramework;
type
ucConsultarEmprestimo = class(ucUseCase)
public
procedure Initialize; Override;
procedure Finalize; Override;
published
procedure Effect_Consultar(piRequest: utRequest; piTransition: utTransition);
end;
implementation
uses
ucuManager,
utuMessage,
acuObject,
utuEmprestimoOQL,
nguUsuario,
nguLivro,
nguExemplar,
nguEmprestimo,
SysUtils,
DateUtils;
procedure ucConsultarEmprestimo.Initialize;
begin
inherited;
end;
procedure ucConsultarEmprestimo.Finalize;
begin
inherited;
end;
procedure ucConsultarEmprestimo.Effect_Consultar(piRequest: utRequest; piTransition: utTransition);
var
lEnumEmprestimo : acEnumerator;
lExemplar : ngExemplar;
lEmprestimo : ngEmprestimo;
lLivro : ngLivro;
lListEmprestimos : acPersistentObjectList;
lUsuario : ngUsuario;
lOQL: IObterEmprestimos;
lFieldEmprestimos,
lFieldEmprestimo,
lFieldUsuario,
lFieldLivro,
lFieldExemplar,
lFieldUsuarioIn : utField;
begin
lOQL := utEmprestimoOQL.ObterEmprestimos(Self.Session);
lListEmprestimos := acPersistentObjectList.Create(ngEmprestimo);
try
lFieldUsuarioIn := piRequest.Message.RootField.FieldByName('Usuario');
if lFieldUsuarioIn.HasAttribute('OID')
then lOQL.Param_oid.Value := lFieldUsuarioIn.AttributeByName('OID').AsInteger
else lOQL.Param_oid.SetNull;
if lFieldUsuarioIn.HasAttribute('Nome')
then lOQL.Param_nome.Value := lFieldUsuarioIn.AttributeByName('Nome').AsString
else lOQL.Param_nome.SetNull;
if lFieldUsuarioIn.HasAttribute('CPF')
then lOQL.Param_cpf.Value := lFieldUsuarioIn.AttributeByName('CPF').AsString
else lOQL.Param_cpf.SetNull;
lOQL.LoadList(lListEmprestimos);
lEnumEmprestimo := lListEmprestimos.GetEnumerator;
try
lFieldEmprestimos := piRequest.Response.RootField.AddField('Emprestimos');
while not lEnumEmprestimo.EOL do
begin
//Tag de Emprestimo
lEmprestimo := lEnumEmprestimo.Current as ngEmprestimo;
lFieldEmprestimo := lFieldEmprestimos.AddField('Emprestimo');
lEmprestimo.toXML(lFieldEmprestimo);
//Tag de Usurio
lUsuario := lEmprestimo.Usuario.Partner as ngUsuario;
lFieldUsuario := lFieldEmprestimo.AddField('Usuario');
lUsuario.toXML(lFieldUsuario);
//Tag de Exemplar
lExemplar := lEmprestimo.Exemplar.Partner as ngExemplar;
lFieldExemplar := lFieldEmprestimo.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
//Tag de Livro
lFieldLivro := lFieldExemplar.AddField('Livro');
lLivro := lExemplar.Livro.Partner as ngLivro;
lLivro.toXML(lFieldLivro);
lEnumEmprestimo.MoveNext;
end;
finally
lEnumEmprestimo.Free;
end;
finally
lListEmprestimos.Free;
end;
piRequest.Processed := True;
end;
initialization
gucManager.RegisterClass(3222,ucConsultarEmprestimo);
end.
...@@ -6,19 +6,43 @@ uses acuOQL, acuFramework; ...@@ -6,19 +6,43 @@ uses acuOQL, acuFramework;
type type
IContarEmprestimosExemplar = interface(IDataSetOQLQuery)
function Param_oid: acOQLParamInt;
end;
IContarEmprestimosLivro = interface(IDataSetOQLQuery)
function Param_oid: acOQLParamInt;
end;
IObterEmprestimos = interface(IOQLQuery)
function Param_oid: acOQLParamInt;
function Param_nome: acOQLParamString;
function Param_cpf: acOQLParamString;
end;
IObterExemplares = interface(IOQLQuery) IObterExemplares = interface(IOQLQuery)
function Param_titulo: acOQLParamString; function Param_titulo: acOQLParamString;
function Param_isbn: acOQLParamString; function Param_isbn: acOQLParamString;
function Param_codigo: acOQLParamString; function Param_codigo: acOQLParamString;
end; end;
IObterLivros = interface(IOQLQuery)
function Param_titulo: acOQLParamString;
function Param_isbn: acOQLParamString;
function Param_edicao: acOQLParamString;
end;
IObterUsuarios = interface(IOQLQuery) IObterUsuarios = interface(IOQLQuery)
function Param_nome: acOQLParamString; function Param_nome: acOQLParamString;
function Param_cpf: acOQLParamString; function Param_cpf: acOQLParamString;
end; end;
utEmprestimoOQL = class utEmprestimoOQL = class
class function ContarEmprestimosExemplar(piSessao: acPersistenceSession): IContarEmprestimosExemplar;
class function ContarEmprestimosLivro(piSessao: acPersistenceSession): IContarEmprestimosLivro;
class function ObterEmprestimos(piSessao: acPersistenceSession): IObterEmprestimos;
class function ObterExemplares(piSessao: acPersistenceSession): IObterExemplares; class function ObterExemplares(piSessao: acPersistenceSession): IObterExemplares;
class function ObterLivros(piSessao: acPersistenceSession): IObterLivros;
class function ObterUsuarios(piSessao: acPersistenceSession): IObterUsuarios; class function ObterUsuarios(piSessao: acPersistenceSession): IObterUsuarios;
end; end;
...@@ -26,17 +50,68 @@ implementation ...@@ -26,17 +50,68 @@ implementation
type type
TContarEmprestimosExemplar = class(acDataSetOQLQuery, IContarEmprestimosExemplar)
function Param_oid: acOQLParamInt;
end;
TContarEmprestimosLivro = class(acDataSetOQLQuery, IContarEmprestimosLivro)
function Param_oid: acOQLParamInt;
end;
TObterEmprestimos = class(acOQLQuery, IObterEmprestimos)
function Param_oid: acOQLParamInt;
function Param_nome: acOQLParamString;
function Param_cpf: acOQLParamString;
end;
TObterExemplares = class(acOQLQuery, IObterExemplares) TObterExemplares = class(acOQLQuery, IObterExemplares)
function Param_titulo: acOQLParamString; function Param_titulo: acOQLParamString;
function Param_isbn: acOQLParamString; function Param_isbn: acOQLParamString;
function Param_codigo: acOQLParamString; function Param_codigo: acOQLParamString;
end; end;
TObterLivros = class(acOQLQuery, IObterLivros)
function Param_titulo: acOQLParamString;
function Param_isbn: acOQLParamString;
function Param_edicao: acOQLParamString;
end;
TObterUsuarios = class(acOQLQuery, IObterUsuarios) TObterUsuarios = class(acOQLQuery, IObterUsuarios)
function Param_nome: acOQLParamString; function Param_nome: acOQLParamString;
function Param_cpf: acOQLParamString; function Param_cpf: acOQLParamString;
end; end;
{ TContarEmprestimosExemplar }
function TContarEmprestimosExemplar.Param_oid: acOQLParamInt;
begin
result := acOQLParamInt(Self.ParamByName('oid'));
end;
{ TContarEmprestimosLivro }
function TContarEmprestimosLivro.Param_oid: acOQLParamInt;
begin
result := acOQLParamInt(Self.ParamByName('oid'));
end;
{ TObterEmprestimos }
function TObterEmprestimos.Param_oid: acOQLParamInt;
begin
result := acOQLParamInt(Self.ParamByName('oid'));
end;
function TObterEmprestimos.Param_nome: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('nome'));
end;
function TObterEmprestimos.Param_cpf: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('cpf'));
end;
{ TObterExemplares } { TObterExemplares }
function TObterExemplares.Param_titulo: acOQLParamString; function TObterExemplares.Param_titulo: acOQLParamString;
...@@ -54,6 +129,23 @@ begin ...@@ -54,6 +129,23 @@ begin
result := acOQLParamString(Self.ParamByName('codigo')); result := acOQLParamString(Self.ParamByName('codigo'));
end; end;
{ TObterLivros }
function TObterLivros.Param_titulo: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('titulo'));
end;
function TObterLivros.Param_isbn: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('isbn'));
end;
function TObterLivros.Param_edicao: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('edicao'));
end;
{ TObterUsuarios } { TObterUsuarios }
function TObterUsuarios.Param_nome: acOQLParamString; function TObterUsuarios.Param_nome: acOQLParamString;
...@@ -68,6 +160,35 @@ end; ...@@ -68,6 +160,35 @@ end;
{ utOQLs } { utOQLs }
class function utEmprestimoOQL.ContarEmprestimosExemplar(piSessao: acPersistenceSession): IContarEmprestimosExemplar;
begin
result := TContarEmprestimosExemplar.Create(pisessao,
'SELECT count(*) as qnt' + #13#10 +
'FROM ngExemplar,' + #13#10 +
' ngExemplar.Emprestimos' + #13#10 +
'WHERE ngExemplar.OID = ?oid:acInt');
end;
class function utEmprestimoOQL.ContarEmprestimosLivro(piSessao: acPersistenceSession): IContarEmprestimosLivro;
begin
result := TContarEmprestimosLivro.Create(pisessao,
'SELECT count(*) as qnt' + #13#10 +
'FROM ngLivro,' + #13#10 +
' ngLivro.Exemplares,' + #13#10 +
' ngLivro.Exemplares.Emprestimos' + #13#10 +
'WHERE ngLivro.OID = ?oid:acInt');
end;
class function utEmprestimoOQL.ObterEmprestimos(piSessao: acPersistenceSession): IObterEmprestimos;
begin
result := TObterEmprestimos.Create(pisessao,
'SELECT ngEmprestimo' + #13#10 +
'FROM ngEmprestimo' + #13#10 +
'WHERE (ngEmprestimo.Usuario.OID = ?oid:acInt OR ?oid:acInt IS NULL)' + #13#10 +
' AND(ngEmprestimo.Usuario.Nome LIKE ''%''+?nome:acString+''%'' OR ?nome:acString IS NULL)' + #13#10 +
' AND (ngEmprestimo.Usuario.CPF = ?cpf:acString OR ?cpf:acString IS NULL)');
end;
class function utEmprestimoOQL.ObterExemplares(piSessao: acPersistenceSession): IObterExemplares; class function utEmprestimoOQL.ObterExemplares(piSessao: acPersistenceSession): IObterExemplares;
begin begin
result := TObterExemplares.Create(pisessao, result := TObterExemplares.Create(pisessao,
...@@ -80,6 +201,17 @@ begin ...@@ -80,6 +201,17 @@ begin
'ORDER BY ngExemplar.Livro.OID ASC'); 'ORDER BY ngExemplar.Livro.OID ASC');
end; end;
class function utEmprestimoOQL.ObterLivros(piSessao: acPersistenceSession): IObterLivros;
begin
result := TObterLivros.Create(pisessao,
'SELECT ngLivro' + #13#10 +
'FROM ngLivro' + #13#10 +
'WHERE (ngLivro.Titulo LIKE ''%''+?titulo:acString+''%'' OR ?titulo:acString IS NULL)' + #13#10 +
' AND (ngLivro.ISBN = ?isbn:acString OR ?isbn:acString IS NULL)' + #13#10 +
' AND (ngLivro.Edicao = ?edicao:acString OR ?edicao:acString IS NULL)' + #13#10 +
'ORDER BY ngLivro.Titulo ASC');
end;
class function utEmprestimoOQL.ObterUsuarios(piSessao: acPersistenceSession): IObterUsuarios; class function utEmprestimoOQL.ObterUsuarios(piSessao: acPersistenceSession): IObterUsuarios;
begin begin
result := TObterUsuarios.Create(pisessao, result := TObterUsuarios.Create(pisessao,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment