Commit 6b6ef2a2 authored by Thiago Anders's avatar Thiago Anders

Caso de uso emprestar livro finalizado.

parent 871e43cc
This diff is collapsed.
......@@ -366,7 +366,7 @@ begin
prop := lClassMapTicket.NewAttributeTicket('DataDev', 'acDateTime', pvPersistent, False);
prop.FixSize := 0;
prop.VarSize := 0;
prop.Mandatory := True;
prop.Mandatory := False;
prop.DBType := 'DATETIME';
lClassToDBMapTicket.NewDbColumnMapRegisterTicket(prop).ColumnName := 'DATADEV';
......@@ -1502,6 +1502,127 @@ begin
'';
end;
function GetXSDOut_3219_smucEmprestarLivro_EditandoEmprestimos_RM_CONCLUIR_EDICAO_EMPRESTIMO: String;
begin
Result := '<?xml version="1.0"?>' + #13#10 +
'<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->' + #13#10 +
'<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">' + #13#10 +
' <xs:element name="SYSMSG">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Cliente">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Emprestimos">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="unbounded">' + #13#10 +
' <xs:element name="Emprestimo">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Exemplar">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Livro">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:attribute name="Titulo" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="Autor" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:attribute name="Codigo" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:attribute name="Retirada" type="xs:date" use="required"/>' + #13#10 +
' <xs:attribute name="PrevistaDev" type="xs:date" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:attribute name="Nome" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="CPF" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
'</xs:schema>' + #13#10 +
'';
end;
function GetXSDIn_3219_smucEmprestarLivro_EditandoEmprestimos_RM_REMOVER_EXEMPLAR: String;
begin
Result := '<?xml version="1.0"?>' + #13#10 +
'<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->' + #13#10 +
'<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">' + #13#10 +
' <xs:element name="SYSMSG">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Exemplar">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
'</xs:schema>' + #13#10 +
'';
end;
function GetXSDOut_3219_smucEmprestarLivro_EditandoEmprestimos_RM_REMOVER_EXEMPLAR: String;
begin
Result := '<?xml version="1.0"?>' + #13#10 +
'<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->' + #13#10 +
'<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">' + #13#10 +
' <xs:element name="SYSMSG">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Exemplares">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="0" maxOccurs="unbounded">' + #13#10 +
' <xs:element name="Exemplar">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Livro">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:attribute name="Titulo" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="Edicao" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="Autor" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:attribute name="Codigo" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
'</xs:schema>' + #13#10 +
'';
end;
function GetXSDIn_3219_smucEmprestarLivro_EscolhendoExemplar_RM_PESQUISAR_EXEMPLAR: String;
begin
Result := '<?xml version="1.0"?>' + #13#10 +
......@@ -1597,7 +1718,7 @@ begin
'<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">' + #13#10 +
' <xs:element name="SYSMSG">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:sequence>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Exemplar">' + #13#10 +
' <xs:complexType>' + #13#10 +
' <xs:attribute name="OID" type="xs:int" use="required"/>' + #13#10 +
......@@ -2487,11 +2608,14 @@ begin
lTransition.TargetState := lStateMachine.FindState('Confirmando');
lTransition.AddTrigger('RM_CONCLUIR_EDICAO_EMPRESTIMO');
lTransition.AddEffect('Effect_ConcluirEdicaoEmprestimo');
lTransition.XsdOut.XML := GetXSDOut_3219_smucEmprestarLivro_EditandoEmprestimos_RM_CONCLUIR_EDICAO_EMPRESTIMO;
lTransition := lState.NewOutgoingTransition('RM_REMOVER_EXEMPLAR');
lTransition.SourceState := lState;
lTransition.TargetState := lState;
lTransition.AddTrigger('RM_REMOVER_EXEMPLAR');
lTransition.AddEffect('Effect_RemoverExemplar');
lTransition.XsdIn.XML := GetXSDIn_3219_smucEmprestarLivro_EditandoEmprestimos_RM_REMOVER_EXEMPLAR;
lTransition.XsdOut.XML := GetXSDOut_3219_smucEmprestarLivro_EditandoEmprestimos_RM_REMOVER_EXEMPLAR;
lState := lStateMachine.FindState('EscolhendoExemplar');
lTransition := lState.NewOutgoingTransition('RM_CANCELAR_ESCOLHA_EXEMPLAR');
......
......@@ -4,7 +4,7 @@ unit nguEmprestimo;
interface
uses
acuframework;
acuframework, utuMessage;
type
ngEmprestimo = class(acPersistentObject)
......@@ -14,6 +14,8 @@ type
FDataDev: acDateTime;
fCliente: acRelationPartnerShip;
fExemplar: acRelationPartnerShip;
public
procedure toXML(piField: utField);
published
property Retirada: acDateTime read FRetirada write FRetirada;
property PrevistaDev: acDateTime read FPrevistaDev write FPrevistaDev;
......@@ -24,6 +26,12 @@ type
implementation
procedure ngEmprestimo.toXML(piField: utField);
begin
piField.AddAttribute('OID').AsString := Self.IDO.AsString;
piField.AddAttribute('Retirada').AsDate := Self.Retirada.Value;
piField.AddAttribute('PrevistaDev').AsDate := Self.PrevistaDev.Value;
end;
initialization
......
......@@ -12,12 +12,14 @@ type
procedure Initialize; Override;
procedure Finalize; Override;
private
//fCliente : ngCliente;
//fListaEmprestimos : acPersistentObjectList;
fCliente: ngCliente;
fListaExemplares: acPersistentObjectList;
fSavePoint: acPersistenceSessionSavePoint;
published
procedure Effect_PesquisarUsuario(piRequest: utRequest; piTransition: utTransition);
procedure Effect_EscolherUsuario(piRequest: utRequest; piTransition: utTransition);
procedure Effect_PesquisarExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_SelecionarExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_CancelarEscolhaExemplar(piRequest: utRequest; piTransition: utTransition);
procedure Effect_ConcluirEdicaoEmprestimo(piRequest: utRequest; piTransition: utTransition);
procedure Effect_RemoverExemplar(piRequest: utRequest; piTransition: utTransition);
......@@ -34,16 +36,19 @@ uses
acuObject {define acEnumerator},
nguExemplar,
nguLivro,
nguSituacaoExemplar;
nguSituacaoExemplar,
nguEmprestimo,
dateUtils;
procedure ucEmprestarLivro.Initialize;
begin
inherited;
fListaExemplares := acPersistentObjectList.Create(ngExemplar);
end;
procedure ucEmprestarLivro.Finalize;
begin
fListaExemplares.Free;
inherited;
end;
......@@ -111,6 +116,9 @@ begin
raise EucException.Create('No foi possvel buscar o cliente.');
end;
{Cliente da session marcado}
fCliente := lCliente;
//if not Assigned(lCliente) then raise EucException.Create('Cliente no encontrado.');
lCliente.toXML(piRequest.Response.RootField.AddField('Cliente'));
......@@ -133,8 +141,6 @@ var
lSituacao: ngSituacaoExemplar;
begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
//if lFieldExemplar.HasField('Livro')
//then lFieldLivro := lFieldExemplar.FieldByName('Livro');
lOQL := utEmprestimoOQL.ObterExemplares(Self.Session);
......@@ -206,31 +212,210 @@ begin
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_SelecionarExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldExemplares,
lFieldLivro: utField;
lEnumExemplares: acEnumerator;
lExemplar: ngExemplar;
lLivro: ngLivro;
begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
LFieldExemplares := piRequest.Response.RootField.AddField('Exemplares');
try
lExemplar := Self.Session.LoadObject(ngExemplar,acOIDInt.Create(lFieldExemplar.AttributeByName('OID').AsInteger)) as ngExemplar;
except
on e:acObjectNotFoundException do
raise EucException.Create('Exemplar no encontrado.');
else
raise EucException.Create('No foi possvel buscar o exemplar.');
end;
{Acrescentamos o exemplar a lista de selecionados}
if fListaExemplares.IndexOf(lExemplar) = -1 then
fListaExemplares.Add(lExemplar)
else
raise EucException.Create('Exemplar j est selecionado na lista.');
lEnumExemplares := acEnumerator.Create(fListaExemplares);
{Criamos o xml de resposta}
try
while not lEnumExemplares.EOL do
begin
lExemplar := lEnumExemplares.Current as ngExemplar;
lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
lFieldLivro := lFieldExemplar.AddField('Livro');
lLivro := lExemplar.Livro.Partner as ngLivro;
lLivro.toXML(lFieldLivro);
lEnumExemplares.MoveNext;
end;
finally
lEnumExemplares.Free;
end;
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_CancelarEscolhaExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldExemplares,
lFieldLivro: utField;
lEnumExemplares: acEnumerator;
lExemplar: ngExemplar;
lLivro: ngLivro;
begin
lFieldExemplares := piRequest.Response.RootField.AddField('Exemplares');
lEnumExemplares := acEnumerator.Create(fListaExemplares);
{Criamos o xml de resposta}
try
while not lEnumExemplares.EOL do
begin
lExemplar := lEnumExemplares.Current as ngExemplar;
lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
lFieldLivro := lFieldExemplar.AddField('Livro');
lLivro := lExemplar.Livro.Partner as ngLivro;
lLivro.toXML(lFieldLivro);
lEnumExemplares.MoveNext;
end;
finally
lEnumExemplares.Free;
end;
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_ConcluirEdicaoEmprestimo(piRequest: utRequest; piTransition: utTransition);
var
lFieldCliente,
lFieldEmprestimos,
lFieldEmprestimo,
lFieldExemplar,
lFieldLivro: utField;
lEmprestimo: ngEmprestimo;
lExemplar: ngExemplar;
lLivro: ngLivro;
lEnumExemplares: acEnumerator;
begin
fSavePoint := Self.Session.AddSavePoint;
try
lFieldCliente := piRequest.Response.RootField.AddField('Cliente');
fCliente.toXML(lFieldCliente);
lFieldEmprestimos := lFieldCliente.AddField('Emprestimos');
lEnumExemplares := acEnumerator.Create(fListaExemplares);
try
while not lEnumExemplares.EOL do
begin
lEmprestimo := ngEmprestimo.CreateNew(Self.Session);
lExemplar := lEnumExemplares.Current as ngExemplar;
lLivro := lExemplar.Livro.Partner as ngLivro;
lEmprestimo.Cliente.Partner := fCliente;
lEmprestimo.Exemplar.Partner := lExemplar;
lEmprestimo.Retirada.Value := dateUtils.Today;
lEmprestimo.PrevistaDev.Value := dateUtils.IncWeek(lEmprestimo.Retirada.Value,3);
lFieldEmprestimo := lFieldEmprestimos.AddField('Emprestimo');
lEmprestimo.toXML(lFieldEmprestimo);
lFieldExemplar := lFieldEmprestimo.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
lFieldLivro := lFieldExemplar.AddField('Livro');
lLivro.toXML(lFieldLivro);
lEnumExemplares.MoveNext;
end;
finally
lEnumExemplares.Free;
end;
except
Self.Session.RollBackToSavePoint(fSavePoint);
raise;
end;
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_RemoverExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldExemplares,
lFieldLivro: utField;
lEnumExemplares: acEnumerator;
lExemplar: ngExemplar;
lLivro: ngLivro;
begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
LFieldExemplares := piRequest.Response.RootField.AddField('Exemplares');
try
lExemplar := Self.Session.LoadObject(ngExemplar,acOIDInt.Create(lFieldExemplar.AttributeByName('OID').AsInteger)) as ngExemplar;
except
on e:acObjectNotFoundException do
raise EucException.Create('Exemplar a ser removido no pode ser encontrado.');
else
raise EucException.Create('No foi possvel remover o exemplar.');
end;
{Removemos de fato da lista}
if fListaExemplares.IndexOf(lExemplar) <> -1 then
fListaExemplares.Extract(lExemplar)
else
raise EucException.Create('Exemplar no est na lista de exemplares do cliente.');
{Criamos o xml de resposta}
try
lEnumExemplares := acEnumerator.Create(fListaExemplares);
while not lEnumExemplares.EOL do
begin
lExemplar := lEnumExemplares.Current as ngExemplar;
lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
lFieldLivro := lFieldExemplar.AddField('Livro');
lLivro := lExemplar.Livro.Partner as ngLivro;
lLivro.toXML(lFieldLivro);
lEnumExemplares.MoveNext;
end;
finally
lEnumExemplares.Free;
end;
piRequest.Processed := True;
end;
procedure ucEmprestarLivro.Effect_ConfirmarEmprestimo(piRequest: utRequest; piTransition: utTransition);
begin
var
lSavePoint: acPersistenceSessionSavePoint;
begin
lSavePoint := Self.Session.AddSavePoint;
try
Self.Session.Save;
except
Self.Session.RollBackToSavePoint(lSavePoint);
raise;
end;
piRequest.Processed := True;
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