Commit c7c61256 authored by Thiago Anders's avatar Thiago Anders

Selecionar Exemplar funcionando

parent 0119f01b
*.dproj
*.exe
*.~*
*.rsm
<?xml version="1.0" encoding="ISO-8859-1" ?>
<DATA>
<oql name="ObterClientes" oqltype="0">
<description></description>
<query><![CDATA[SELECT ngCliente
FROM ngCliente
WHERE (ngCliente.Nome LIKE '%'+?nome:acString+'%' OR ?nome:acString IS NULL)
AND (ngCliente.CPF = ?cpf:acString OR ?cpf:acString IS NULL)]]></query>
</oql>
<oql name="ObterExemplares" oqltype="0">
<description></description>
<query><![CDATA[SELECT ngExemplar
FROM ngExemplar
WHERE (ngExemplar.Livro.Titulo LIKE '%'+?titulo:acString+'%' OR ?titulo:acString IS NULL)
AND (ngExemplar.Codigo = ?codigo:acString OR ?codigo:acString IS NULL)
ORDER BY ngExemplar.Livro.OID]]></query>
</oql>
</DATA>
This diff is collapsed.
This diff is collapsed.
......@@ -4,7 +4,7 @@ unit nguExemplar;
interface
uses
acuframework;
acuframework, utuMessage;
type
ngExemplar = class(acPersistentObject)
......@@ -13,6 +13,8 @@ type
fLivro: acRelationPartnerShip;
fSituacao: acRelationPartnerShip;
fEmprestimos: acRelationPartnerList;
public
procedure toXML(piField: utField);
published
property Codigo: acString read FCodigo write FCodigo;
property Livro: acRelationPartnerShip read fLivro write fLivro;
......@@ -22,6 +24,11 @@ type
implementation
procedure ngExemplar.toXML(piField: utField);
begin
piField.AddAttribute('OID').AsString := Self.IDO.AsString;
piField.AddAttribute('Codigo').AsString := Self.Codigo.AsString;
end;
initialization
......
......@@ -4,7 +4,7 @@ unit nguLivro;
interface
uses
acuframework;
acuframework, utuMessage;
type
ngLivro = class(acPersistentObject)
......@@ -13,6 +13,8 @@ type
FAutor: acString;
FEdicao: acString;
fExemplares: acRelationPartnerList;
public
procedure toXML(piField: utField);
published
property Titulo: acString read FTitulo write FTitulo;
property Autor: acString read FAutor write FAutor;
......@@ -22,6 +24,13 @@ type
implementation
procedure ngLivro.toXML(piField: utField);
begin
piField.AddAttribute('OID').AsString := Self.IDO.AsString;
piField.AddAttribute('Titulo').AsString := Self.Titulo.AsString;
piField.AddAttribute('Autor').AsString := Self.Autor.AsString;
piField.AddAttribute('Edicao').AsString := Self.Edicao.AsString;
end;
initialization
......
......@@ -4,13 +4,15 @@ unit nguSituacaoExemplar;
interface
uses
acuframework;
acuframework, utuMessage;
type
ngSituacaoExemplar = class(acPersistentObject)
private
FCodigo: acString;
FDescricao: acString;
public
procedure toXML(piField: utField);
published
property Codigo: acString read FCodigo write FCodigo;
property Descricao: acString read FDescricao write FDescricao;
......@@ -18,6 +20,11 @@ type
implementation
procedure ngSituacaoExemplar.toXML(piField: utField);
begin
piField.AddAttribute('Codigo').AsString := Self.Codigo.AsString;
piField.AddAttribute('Descricao').AsString := Self.Descricao.AsString;
end;
initialization
......
......@@ -4,13 +4,16 @@ unit ucuEmprestarLivro;
interface
uses
utuStateMachine, utuRequest, ucuUseCase;
utuStateMachine, utuRequest, ucuUseCase, acuFramework, nguCliente;
type
ucEmprestarLivro = class(ucUseCase)
public
procedure Initialize; Override;
procedure Finalize; Override;
private
//fCliente : ngCliente;
//fListaEmprestimos : acPersistentObjectList;
published
procedure Effect_PesquisarUsuario(piRequest: utRequest; piTransition: utTransition);
procedure Effect_EscolherUsuario(piRequest: utRequest; piTransition: utTransition);
......@@ -27,11 +30,11 @@ implementation
uses
ucuManager,
utuMessage {define utField},
acuFramework,
utuEmprestimoOQL,
acuObject {define acEnumerator},
nguCliente;
nguExemplar,
nguLivro,
nguSituacaoExemplar;
procedure ucEmprestarLivro.Initialize;
begin
......@@ -57,7 +60,7 @@ begin
lOQL := utEmprestimoOQL.ObterClientes(Self.Session);
lFieldUsuarios := piRequest.Response.RootField.AddField('Cliente');
lFieldUsuarios := piRequest.Response.RootField.AddField('Clientes');
lListUsuarios := acPersistentObjectList.Create(ngCliente);
try
......@@ -93,15 +96,112 @@ begin
end;
procedure ucEmprestarLivro.Effect_EscolherUsuario(piRequest: utRequest; piTransition: utTransition);
var
lFieldCliente : utField;
lCliente : ngCliente;
begin
lFieldCliente := piRequest.Message.RootField.FieldByName('Cliente');
try
lCliente := Self.Session.LoadObject(ngCliente,acOIDInt.Create(lFieldCliente.AttributeByName('OID').AsInteger)) as ngCliente;
except
on e:acObjectNotFoundException do
raise EucException.Create('Cliente no encontrado.');
else
raise EucException.Create('No foi possvel buscar o cliente.');
end;
//if not Assigned(lCliente) then raise EucException.Create('Cliente no encontrado.');
lCliente.toXML(piRequest.Response.RootField.AddField('Cliente'));
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_PesquisarExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldExemplares,
lFieldLivro,
lFieldLivros,
lFieldSituacao: utField;
lOQL: IObterExemplares;
lListExemplares: acPersistentObjectList;
lEnumExemplares: acEnumerator;
lExemplar: ngExemplar;
lLivro,lUltimoLivro: ngLivro;
lSituacao: ngSituacaoExemplar;
begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
//if lFieldExemplar.HasField('Livro')
//then lFieldLivro := lFieldExemplar.FieldByName('Livro');
lOQL := utEmprestimoOQL.ObterExemplares(Self.Session);
lFieldLivros := piRequest.Response.RootField.AddField('Livros');
lListExemplares := acPersistentObjectList.Create(ngExemplar); {Lista de exemplar obtida}
{Comeamos a formatao da resposta}
try
{Colocamos os parmetros para a busca oql}
if lFieldExemplar.HasAttribute('Codigo')
then lOQL.Param_codigo.Value := lFieldExemplar.AttributeByName('Codigo').AsString
else lOQL.Param_codigo.SetNull;
{Se o xml tinha livro...}
if lFieldExemplar.HasField('Livro') then
begin
if lFieldExemplar.FieldByName('Livro').HasAttribute('Titulo')
then lOQL.Param_titulo.Value := lFieldExemplar.FieldByName('Livro').AttributeByName('Titulo').AsString
else lOQL.Param_titulo.SetNull;
end
else lOQL.Param_titulo.SetNull;
lOQL.LoadList(lListExemplares);
lEnumExemplares := acEnumerator.Create(lListExemplares);
try
lExemplar := lEnumExemplares.Current as ngExemplar;
lLivro := lExemplar.Livro.Partner as ngLivro;
{Guardamos ultimo livro para agrup-los e criamos seu campo exemplares}
lUltimoLivro := lLivro;
lFieldLivro := lFieldLivros.AddField('Livro');
lLivro.toXML(lFieldLivro);
lFieldExemplares := lFieldLivro.AddField('Exemplares');
while not lEnumExemplares.EOL do
begin
lExemplar := lEnumExemplares.Current as ngExemplar;
lLivro := lExemplar.Livro.Partner as ngLivro;
lSituacao := lExemplar.Situacao.Partner as ngSituacaoExemplar;
if not lLivro.Equals(lUltimoLivro) then
begin
lUltimoLivro := lLivro;
lFieldLivro := lFieldLivros.AddField('Livro');
lLivro.toXML(lFieldLivro);
lFieldExemplares := lFieldLivro.AddField('Exemplares');
end;
{Criamos as tags no xml}
lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lFieldSituacao := lFieldExemplar.AddField('Situacao');
{Damos os valores as tags}
lExemplar.toXML(lFieldExemplar);
lSituacao.toXML(lFieldSituacao);
lEnumExemplares.MoveNext;
end;
finally
lEnumExemplares.Free;
end;
finally
lListExemplares.Free;
end;
piRequest.Processed := True;
end;
......
......@@ -11,8 +11,14 @@ type
function Param_cpf: acOQLParamString;
end;
IObterExemplares = interface(IOQLQuery)
function Param_titulo: acOQLParamString;
function Param_codigo: acOQLParamString;
end;
utEmprestimoOQL = class
class function ObterClientes(piSessao: acPersistenceSession): IObterClientes;
class function ObterExemplares(piSessao: acPersistenceSession): IObterExemplares;
end;
implementation
......@@ -24,6 +30,11 @@ type
function Param_cpf: acOQLParamString;
end;
TObterExemplares = class(acOQLQuery, IObterExemplares)
function Param_titulo: acOQLParamString;
function Param_codigo: acOQLParamString;
end;
{ TObterClientes }
function TObterClientes.Param_nome: acOQLParamString;
......@@ -36,6 +47,18 @@ begin
result := acOQLParamString(Self.ParamByName('cpf'));
end;
{ TObterExemplares }
function TObterExemplares.Param_titulo: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('titulo'));
end;
function TObterExemplares.Param_codigo: acOQLParamString;
begin
result := acOQLParamString(Self.ParamByName('codigo'));
end;
{ utOQLs }
class function utEmprestimoOQL.ObterClientes(piSessao: acPersistenceSession): IObterClientes;
......@@ -47,4 +70,14 @@ begin
' AND (ngCliente.CPF = ?cpf:acString OR ?cpf:acString IS NULL)');
end;
class function utEmprestimoOQL.ObterExemplares(piSessao: acPersistenceSession): IObterExemplares;
begin
result := TObterExemplares.Create(pisessao,
'SELECT ngExemplar' + #13#10 +
'FROM ngExemplar' + #13#10 +
'WHERE (ngExemplar.Livro.Titulo LIKE ''%''+?titulo:acString+''%'' OR ?titulo:acString IS NULL)' + #13#10 +
' AND (ngExemplar.Codigo = ?codigo:acString OR ?codigo:acString IS NULL)' + #13#10 +
'ORDER BY ngExemplar.Livro.OID');
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