Commit 8ec60964 authored by Thiago Anders's avatar Thiago Anders

Começo daimplementação od caso de uso de CRUD para livro e exemplar.

parent 0e60f8af
<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?>
<DATA> <DATA>
<oql name="ContarEmprestimosDeUmLivro" oqltype="0">
<description></description>
<query><![CDATA[SELECT count(*) as qnt
FROM ngExemplar
]]></query>
</oql>
<oql name="ObterClientes" oqltype="0"> <oql name="ObterClientes" oqltype="0">
<description></description> <description></description>
<query><![CDATA[SELECT ngCliente <query><![CDATA[SELECT ngCliente
...@@ -22,4 +28,11 @@ WHERE (ngExemplar.Livro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString ...@@ -22,4 +28,11 @@ WHERE (ngExemplar.Livro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString
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]]></query> ORDER BY ngExemplar.Livro.OID]]></query>
</oql> </oql>
<oql name="ObterLivros" oqltype="0">
<description>Obtm livros por ttulo ou autor.</description>
<query><![CDATA[SELECT ngLivro
FROM ngLivro
WHERE (ngLivro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString IS NULL)
AND (ngLivro.Autor = ?autor:acString OR ?autor:acString IS NULL)]]></query>
</oql>
</DATA> </DATA>
This diff is collapsed.
...@@ -100,7 +100,8 @@ uses ...@@ -100,7 +100,8 @@ uses
nguLivro in 'ngu\nguLivro.pas', nguLivro in 'ngu\nguLivro.pas',
nguSituacaoExemplar in 'ngu\nguSituacaoExemplar.pas', nguSituacaoExemplar in 'ngu\nguSituacaoExemplar.pas',
nguVersaoBanco in 'ngu\nguVersaoBanco.pas', nguVersaoBanco in 'ngu\nguVersaoBanco.pas',
ucuBuscarEmprestimos in 'ucu\ucuBuscarEmprestimos.pas'; ucuBuscarEmprestimos in 'ucu\ucuBuscarEmprestimos.pas',
ucuCadastrarLivro in 'ucu\ucuCadastrarLivro.pas';
var var
lErros : TStringList; lErros : TStringList;
......
This diff is collapsed.
...@@ -55,16 +55,15 @@ lOQL: IObterEmprestimos; ...@@ -55,16 +55,15 @@ lOQL: IObterEmprestimos;
lListaEmprestimos: acPersistentObjectList; lListaEmprestimos: acPersistentObjectList;
lEnumEmprestimo: acEnumerator; lEnumEmprestimo: acEnumerator;
begin begin
{Pegamo input e criamos root field do xml resposta}
lFieldCliente := piRequest.Message.RootField.FieldByName('Cliente'); lFieldCliente := piRequest.Message.RootField.FieldByName('Cliente');
lFieldEmprestimos:= piRequest.Response.RootField.AddField('Emprestimos');
lOQL := utEmprestimoOQL.ObterEmprestimos(Self.Session); lOQL := utEmprestimoOQL.ObterEmprestimos(Self.Session);
lFieldEmprestimos:= piRequest.Response.RootField.AddField('Emprestimos');
lListaEmprestimos := acPersistentObjectList.Create(ngEmprestimo); lListaEmprestimos := acPersistentObjectList.Create(ngEmprestimo);
try try
{Setamos os parmetros da busca e ento a chamamos}
if lFieldCliente.HasAttribute('Nome') if lFieldCliente.HasAttribute('Nome')
then lOQL.Param_nome.Value := lFieldCliente.AttributeByName('Nome').AsString then lOQL.Param_nome.Value := lFieldCliente.AttributeByName('Nome').AsString
else lOQL.Param_nome.SetNull; else lOQL.Param_nome.SetNull;
...@@ -74,8 +73,9 @@ begin ...@@ -74,8 +73,9 @@ begin
else lOQL.Param_cpf.SetNull; else lOQL.Param_cpf.SetNull;
lOQL.LoadList(lListaEmprestimos); lOQL.LoadList(lListaEmprestimos);
lEnumEmprestimo := acEnumerator.Create(lListaEmprestimos);
{Percorremos a lista resposta da consulta ao banco e escrevemos os campos da nossa resposta}
lEnumEmprestimo := acEnumerator.Create(lListaEmprestimos);
try try
while not lEnumEmprestimo.EOL do while not lEnumEmprestimo.EOL do
begin begin
......
unit ucuCadastrarLivro;
interface
uses
utuStateMachine, utuRequest, ucuUseCase, acuFramework, nguLivro;
type
ucCadastrarLivro = class(ucUseCase)
public
procedure Initialize; Override;
procedure Finalize; Override;
private
fLivro: ngLivro;
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_ConcluirEdicao(piRequest: utRequest; piTransition: utTransition);
procedure Effect_Cancelar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition);
end;
implementation
uses
ucuManager,
utuMessage {define utField},
utuEmprestimoOQL,
acuObject {define acEnumerator},
nguExemplar,
nguSituacaoExemplar,
nguEmprestimo,
nguCliente,
dateUtils;
procedure ucCadastrarLivro.Initialize;
begin
inherited;
end;
procedure ucCadastrarLivro.Finalize;
begin
inherited;
end;
procedure ucCadastrarLivro.Effect_IncluirLivro(piRequest: utRequest; piTransition: utTransition);
begin
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
lFieldLivros,
lFieldLivro: utField;
lOQL: IObterLivros;
lListLivros: acPersistentObjectList;
lEnumLivro: acEnumerator;
lLivro: ngLivro;
begin
lFieldLivro:= piRequest.Message.RootField.FieldByName('Livro');
lOQL := utEmprestimoOQL.ObterLivros(Self.Session);
lFieldLivros := piRequest.Response.RootField.AddField('Livros');
lListLivros := acPersistentObjectList.Create(ngLivro);
try
if lFieldLivro.HasAttribute('Titulo')
then lOQL.Param_titulo.Value := lFieldLivro.AttributeByName('Titulo').AsString
else lOQL.Param_titulo.SetNull;
if lFieldLivro.HasAttribute('Autor')
then lOQL.Param_autor.Value := lFieldLivro.AttributeByName('Autor').AsString
else lOQL.Param_autor.SetNull;
lOQL.LoadList(lListLivros);
lEnumLivro := acEnumerator.Create(lListLivros);
try
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;
{Devido ao modelo, s ocorrer a excluso se o livro no possuir emprstimos.}
{Se ele possuir exemplares, eles sero deletados juntos com o livro.}
procedure ucCadastrarLivro.Effect_ExcluirLivro(piRequest: utRequest; piTransition: utTransition);
var
lFieldLivro: utField;
lLivro: ngLivro;
lListExemplares: acPersistentObjectList;
begin
lFieldLivro := piRequest.Message.RootField.FieldByName('Livro');
try
lLivro := Self.Session.LoadObject(ngLivro,acOIDInt.Create(lFieldLivro.AttributeByName('OID').AsInteger)) as ngLivro;
Self.Session.DeleteObject(lLivro,ngLivro);
except
on e:acObjectNotFoundException do
raise EucException.Create('Livro a ser deletado no encontrado.');
else
raise EucException.Create('No foi possvel buscar o Livro a ser deletado.');
end;
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_ConcluirEdicao(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_Cancelar(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
procedure ucCadastrarLivro.Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition);
begin
piRequest.Processed := True;
end;
initialization
gucManager.RegisterClass(3227,ucCadastrarLivro);
end.
...@@ -21,10 +21,16 @@ type ...@@ -21,10 +21,16 @@ type
function Param_codigo: acOQLParamString; function Param_codigo: acOQLParamString;
end; end;
IObterLivros = interface(IOQLQuery)
function Param_titulo: acOQLParamString;
function Param_autor: acOQLParamString;
end;
utEmprestimoOQL = class utEmprestimoOQL = class
class function ObterClientes(piSessao: acPersistenceSession): IObterClientes; class function ObterClientes(piSessao: acPersistenceSession): IObterClientes;
class function ObterEmprestimos(piSessao: acPersistenceSession): IObterEmprestimos; class function ObterEmprestimos(piSessao: acPersistenceSession): IObterEmprestimos;
class function ObterExemplares(piSessao: acPersistenceSession): IObterExemplares; class function ObterExemplares(piSessao: acPersistenceSession): IObterExemplares;
class function ObterLivros(piSessao: acPersistenceSession): IObterLivros;
end; end;
implementation implementation
...@@ -46,6 +52,11 @@ type ...@@ -46,6 +52,11 @@ type
function Param_codigo: acOQLParamString; function Param_codigo: acOQLParamString;
end; end;
TObterLivros = class(acOQLQuery, IObterLivros)
function Param_titulo: acOQLParamString;
function Param_autor: acOQLParamString;
end;
{ TObterClientes } { TObterClientes }
function TObterClientes.Param_nome: acOQLParamString; function TObterClientes.Param_nome: acOQLParamString;
...@@ -82,6 +93,18 @@ begin ...@@ -82,6 +93,18 @@ 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_autor: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('autor'));
end;
{ utOQLs } { utOQLs }
class function utEmprestimoOQL.ObterClientes(piSessao: acPersistenceSession): IObterClientes; class function utEmprestimoOQL.ObterClientes(piSessao: acPersistenceSession): IObterClientes;
...@@ -112,4 +135,13 @@ begin ...@@ -112,4 +135,13 @@ begin
'ORDER BY ngExemplar.Livro.OID'); 'ORDER BY ngExemplar.Livro.OID');
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.Autor = ?autor:acString OR ?autor:acString IS NULL)');
end;
end. end.
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