Commit b53b431a authored by Thiago Anders's avatar Thiago Anders

Caso de uso CRUD para livro e exemplar finalizado

parent 0a47ab0c
...@@ -1925,7 +1925,7 @@ begin ...@@ -1925,7 +1925,7 @@ begin
Result := '<?xml version="1.0"?>' + #13#10 + 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 + '<!--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:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">' + #13#10 +
' <xs:element name="SYSMAG">' + #13#10 + ' <xs:element name="SYSMSG">' + #13#10 +
' <xs:complexType>' + #13#10 + ' <xs:complexType>' + #13#10 +
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 + ' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Livro">' + #13#10 + ' <xs:element name="Livro">' + #13#10 +
...@@ -2047,24 +2047,8 @@ begin ...@@ -2047,24 +2047,8 @@ begin
' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 + ' <xs:sequence minOccurs="1" maxOccurs="1">' + #13#10 +
' <xs:element name="Livro">' + #13#10 + ' <xs:element name="Livro">' + #13#10 +
' <xs:complexType>' + #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:attribute name="Codigo" type="xs:string" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:anyAttribute namespace="" processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 +
' </xs:element>' + #13#10 +
' </xs:sequence>' + #13#10 +
' <xs:attribute name="Titulo" type="xs:string" use="required"/>' + #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="Autor" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="OID" type="xs:string" use="required"/>' + #13#10 +
' <xs:attribute name="Edicao" type="xs:string" use="required"/>' + #13#10 + ' <xs:attribute name="Edicao" type="xs:string" use="required"/>' + #13#10 +
' <xs:anyAttribute processContents="skip"/>' + #13#10 + ' <xs:anyAttribute processContents="skip"/>' + #13#10 +
' </xs:complexType>' + #13#10 + ' </xs:complexType>' + #13#10 +
...@@ -2162,29 +2146,6 @@ begin ...@@ -2162,29 +2146,6 @@ begin
''; '';
end; end;
function GetXSDOut_3227_smucCadastrarLivro_EditandoCadastro_RM_EXCLUIR_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="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:schema>' + #13#10 +
'';
end;
procedure RegisterUseCases1(piMetaModel: acMetaModel); procedure RegisterUseCases1(piMetaModel: acMetaModel);
var var
lUseCaseTicket: acUseCaseTicket; lUseCaseTicket: acUseCaseTicket;
...@@ -3244,7 +3205,6 @@ begin ...@@ -3244,7 +3205,6 @@ begin
lTransition.AddTrigger('RM_EXCLUIR_EXEMPLAR'); lTransition.AddTrigger('RM_EXCLUIR_EXEMPLAR');
lTransition.AddEffect('Effect_ExcluirExemplar'); lTransition.AddEffect('Effect_ExcluirExemplar');
lTransition.XsdIn.XML := GetXSDIn_3227_smucCadastrarLivro_EditandoCadastro_RM_EXCLUIR_EXEMPLAR; lTransition.XsdIn.XML := GetXSDIn_3227_smucCadastrarLivro_EditandoCadastro_RM_EXCLUIR_EXEMPLAR;
lTransition.XsdOut.XML := GetXSDOut_3227_smucCadastrarLivro_EditandoCadastro_RM_EXCLUIR_EXEMPLAR;
end; end;
......
...@@ -103,7 +103,7 @@ begin ...@@ -103,7 +103,7 @@ begin
while not lEnumExemplar.EOL do while not lEnumExemplar.EOL do
begin begin
lFieldExemplar := lFieldExemplares.AddField('Exemplar'); lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lExemplar := lEnumExemplar.Current; lExemplar := lEnumExemplar.Current as ngExemplar;
lExemplar.toXML(lFieldExemplar); lExemplar.toXML(lFieldExemplar);
lEnumExemplar.MoveNext; lEnumExemplar.MoveNext;
...@@ -186,7 +186,7 @@ begin ...@@ -186,7 +186,7 @@ begin
{Verificamos se ele tiver emprestimos} {Verificamos se ele tiver emprestimos}
lOQL.LoadDataSet(lFieldResult); lOQL.LoadDataSet(lFieldResult);
if lFieldResult.ValueByPath('DATAPACKET.ROWDATA.ROW.@C0').AsInteger > 0 if lFieldResult.ValueByPath('DATAPACKET.ROWDATA.ROW.@C0').AsInteger > 0
then raise EucException.Create('Nao foi possvel excluir o livro, ele possui pelo menos um exemplar com emprstimo associado.'); then raise EucException.Create('Nao foi possvel excluir o livro, ele possui pelo menos um exemplar com emprestimo associado.');
{Deletamos o livro e seus exemplares, exemplares so deletado devido a efeito cascata da composio} {Deletamos o livro e seus exemplares, exemplares so deletado devido a efeito cascata da composio}
lLivro := Self.Session.LoadObject(ngLivro,acOIDInt.Create(lFieldLivro.AttributeByName('OID').AsInteger)) as ngLivro; lLivro := Self.Session.LoadObject(ngLivro,acOIDInt.Create(lFieldLivro.AttributeByName('OID').AsInteger)) as ngLivro;
...@@ -204,8 +204,44 @@ begin ...@@ -204,8 +204,44 @@ begin
end; end;
procedure ucCadastrarLivro.Effect_ConcluirEdicao(piRequest: utRequest; piTransition: utTransition); procedure ucCadastrarLivro.Effect_ConcluirEdicao(piRequest: utRequest; piTransition: utTransition);
var
lFieldLivro,
lFieldExemplares,
lFieldExemplar: utField;
lEnumExemplar: acEnumerator;
lExemplares: acPersistentObjectList;
lExemplar: ngExemplar;
lSavePoint: acPersistenceSessionSavePoint;
begin begin
lSavePoint := Self.Session.AddSavePoint;
lFieldLivro := piRequest.Message.RootField.FieldByName('Livro');
fLivro.Autor.Value := lFieldLivro.FindAttribute('Autor').AsString;
fLivro.Titulo.Value := lFieldLivro.FindAttribute('Titulo').AsString;
fLivro.Edicao.Value := lFieldLivro.FindAttribute('Edicao').AsString;
Session.Save;
lFieldLivro := piRequest.Response.RootField.AddField('Livro');
fLivro.toXML(lFieldLivro);
lFieldExemplares := lFieldLivro.AddField('Exemplares');
lEnumExemplar := fLivro.Exemplares.GetEnumerator;
try
while not lEnumExemplar.EOL do
begin
lExemplar := lEnumExemplar.Current as ngExemplar;;
lFieldExemplar := lFieldExemplares.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
lEnumExemplar.MoveNext;
end;
finally
lEnumExemplar.Free;
end;
piRequest.Processed := True;
end; end;
procedure ucCadastrarLivro.Effect_Cancelar(piRequest: utRequest; piTransition: utTransition); procedure ucCadastrarLivro.Effect_Cancelar(piRequest: utRequest; piTransition: utTransition);
...@@ -217,16 +253,85 @@ begin ...@@ -217,16 +253,85 @@ begin
end; end;
procedure ucCadastrarLivro.Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition); procedure ucCadastrarLivro.Effect_IncluirExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar: utField;
lExemplar: ngExemplar;
lSavePoint: acPersistenceSessionSavePoint;
lString: acString;
lSituacao: ngSituacaoExemplar;
begin begin
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
lSavePoint := Self.Session.AddSavePoint;
try
lExemplar := ngExemplar.CreateNew(Self.Session);
lExemplar.Codigo.Value := lFieldExemplar.FindAttribute('Codigo').AsString;
lExemplar.Livro.Partner := fLivro;
try
lSituacao := Self.Session.LoadObject(ngSituacaoExemplar,acOIDInt.Create(1)) as ngSituacaoExemplar;
except
on e:acObjectNotFoundException do
raise EucException.Create('Situacao do exemplar no podeser encontrada.');
else
raise EucException.Create('No foi possvel atribuir uma situao a esse exemplar.');
end;
lExemplar.Situacao.Partner := lSituacao;
lFieldExemplar := piRequest.Response.RootField.AddField('Exemplar');
lExemplar.toXML(lFieldExemplar);
except
Self.Session.RollBackToSavePoint(lSavePoint);
raise;
end;
piRequest.Processed := True; piRequest.Processed := True;
end; end;
procedure ucCadastrarLivro.Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition); procedure ucCadastrarLivro.Effect_ExcluirExemplar(piRequest: utRequest; piTransition: utTransition);
var
lFieldExemplar,
lFieldResult: utField;
lExemplar: ngExemplar;
lSavePoint: acPersistenceSessionSavePoint;
lOQL: IContarEmprestimosExemplar;
begin begin
lSavePoint := Session.AddSavePoint;
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
lFieldExemplar := piRequest.Message.RootField.FieldByName('Exemplar');
try
{Verificamos se est na lista de exemplares do livro}
lExemplar := Session.LoadObject(ngExemplar, acOIDInt.Create(lFieldExemplar.AttributeByName('OID').AsInteger)) as ngExemplar;
if fLivro.Exemplares.IndexOf(lExemplar) = -1
then raise EucException.Create('Exemplar nao esta na lista de exeplares deste livro.');
{Preparamos a busca OQL}
lOQL := utEmprestimoOQL.ContarEmprestimosExemplar(Self.Session);
lOQL.Param_oid.Value := lFieldExemplar.AttributeByName('OID').AsInteger;
lFieldResult := utField.Create;
try
{Verificamos se ele tiver emprestimos}
lOQL.LoadDataSet(lFieldResult);
if lFieldResult.ValueByPath('DATAPACKET.ROWDATA.ROW.@C0').AsInteger > 0
then raise EucException.Create('Nao foi possvel excluir o exemplar, ele possui ao menos um emprestimo associado.');
{Deletamos o exemplar de livro}
lExemplar := Self.Session.LoadObject(ngExemplar,acOIDInt.Create(lFieldExemplar.AttributeByName('OID').AsInteger)) as ngExemplar;
fLivro.Exemplares.Remove(lExemplar);
finally
lFieldResult.Free;
end;
except
Self.Session.RollBackToSavePoint(lSavePoint);
raise;
end;
piRequest.Processed := True; piRequest.Processed := True;
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