Você está na página 1de 16

Local

Evento
- endereco: String
- <<collection>> pacotesComprados: PacoteProduto
- <<collection>> Conta
RelatorioFinanceiro reservas: Date - data: Date
- valor: Float
- <<collection>> contasPagas: Conta AgendaEventos - local: Local
- pago: Boolean
- <<collection>> contasNaoPagas: Conta - <<collection>> eventos: Evento - conta: Conta
- dataVencimento: Date
- <<collection>> produtosComprados: ProdutoCompra - contrato: Contrato
- dataPagamento: Date
- <<collection>> servicosContratados: ServicoOfertado

- tema: TemaEvento

Contrato

- cliente: Cliente
EmpresaEventos
- evento: Evento
- <<collection>> funcionarios: Funcionario

- <<collection>> pacotesDeProdutos:
PacoteProduto

Pessoa - <<collection>> servicosOfertados:


ServicoOfertado
- nome: String TemaEvento
- <<collection>> temas: TemaEvento
- dataNascimento: Date - tema: String
- <<collection>> locais: Local
- nroDocumento: String
- <<collection>> fornecedor: Fornecedor

- <<collection>> clientes: Cliente

- agenda: AgendaEventos
PacoteProduto
- estoque: Estoque
- <<collection>>: ProdutoVenda

- valor: Float

Estoque

- <<collection>> pedidosDeCompra:
ProdutoCompra

- <<collection>> produtosEmEstoque:
ProdutoEstoque
ProdutoVenda
- algumPedidoPendente: Boolean
- produto: Produto

- quantidade: Int
Cliente Funcionário Fornecedor
ProdutoCompra
- <<collection>> - cargo: String - <<collection>>
eventos: Evento servicos: Servico - fornecedor: Fornecedor
- salario: Float ProdutoEstoque
- nomeFantasia: String - produto: Produto
- horarioTrabalho: String - produto: Produto
- telefoneContato: - quantidade: Int
String - quantidade: Int
- pendente: Boolean
- emailContato: String - taxaLucro: Float
- valorFinal: Float

Produto

- nome: String

- valor: Float

ServicoOfertado
Servico
- servico: Servico
- nome: String
- cargo: String
- valor: Float
- fornecedor:
Fornecedor
AtorCliente
Cadastrar clientes

Gerenciar contas a
receber Receber pagamento
<extends>
<extends>
Cobrar conta

<include>

Dar baixa em conta


AtorFuncionario

Cadastrar fornecedores

Cadastrar serviços
ofertados

AtorFuncionario

AtorFornecedor
Cadastrar produtos
ofertados nos eventos

Cadastrar pacotes de
eventos (produtos e
quantidades)

Visualizar agenda de
eventos cadastrados

Cadastrar temas de
eventos

Cadastrar locais de
realização dos eventos

Gerar relatório de
eventos

AtorFuncionario
Gerar relatório financeiro

Cadastrar funcionários

Gerar conta

Emitir contrato de evento


<include>

<include> Enviar detalhes do


evento
<extends>
Cadastrar evento de um
cliente
<extends>

AtorCliente

<include>
Cancelar cadastro de
<extends>
evento
Receber pedido
Realizar pedido de compra <extends> de compra
para o fornecedor
<extends>
Checar estoque

Ator Fornecedor
Contratar servicos

AtorFuncionario
Visão de Pedido de Compra

clienteCadastrado =
cliente IN clientes

[NOT clienteCadastrado]

ref ref

[clienteCadastrado] Cadastrar Clientes Dar baixa em conta

ref

ref Realizar pedido de comprar para fornecedor

[NOT produtosEmEstoque] Receber pagamento

ref

[produtosEmEstoque]
Visão de Pedido de Compra
[pagamentoEfetuado]
[NOT pedidoAtendido]

[NOT pagamentoEfetuado]

[pedidoAtendido]

ref
ref
[NOT algumTemaCadastrado] Cobrar conta
Receber Pedido
ref

[algumTemaCadastrado] Cadastrar temas de eventos

[temaEscolhido && pacotesEscolhidos] ref ref

[NOT desejaServicos] Cadastrar eventos Emitir contrato de evento

[desejaServicos]

ref

Contratar serviços
Contrata serviços

[desejaServicos]

Escolhe pacote de
Escolhe tema [NOT desejaServicos] Cadastra evento
produtos

Emite contrato de
Da baixa em conta Recebe pagamento Cobra conta
evento
1.6: checaServicos()

1.5: checaPacotes()
1.10: atualizaEstoque()
1.4: checaTemas()

1: solicitaEvento() 1.1: solicitaEvento() 1.9: checaEstoque(pacotes)


empresa:
cliente: Cliente estoque: Estoque
EmpresaEventos

)
o(

1.
nt

11
ve

:co
oE

1.12: cadastraEvento(cliente,

nt
ca

desejaServicos, servicos)
1.7: enviaDetalhes(cliente,

ra
i
desejaServico, servico)

ta
is
qu

Se
re

r
tema, pacotes,

vi
tema, pacotes,

2:

co
1.

se(
r vi
co
)
e,
nt
, s s, lie
os te (c
1.3: respondeRequisicao()

s)
ic co to

co
rv pa en

vi
Se , Ev

er
ja ma ra
se te ast
d
funcionario: Funcionario ca agenda: AgendaEventos fornecedor: Fornecedor
8:
1.

de

1.14: emiteContrato(
1.13: geraConta()

servicos, cliente)
pacotes,
evento: Evento
2: checaContas() 2.1: checaContas()
funcionario: Funcionario empresa: EmpresaEventos

2.2: checaContas()
2.3: checaConta()
evento: Evento agenda: AgendaEventos

2.4: checaConta()
2.9: darBaixaEmConta() 2.8: realizaPagamento(valor)

2.5: verificaPagamento() 2.7: checaSeSaldoSuficiente(valor)

2.6: realizaCobranca(valor)

conta: Conta cliente: Cliente


estoque: Estoque fornecedor: Fornecedor agenda: AgendaEventos evento: Evento
cliente: Cliente empresa: EmpresaEventos funcionario: Funcionario pacote: PacoteProduto

solicitaEvento() funcionarioResponsavel = requisicaoEvento(Cliente)


funcionarioResponsavel = solicitaEvento()
funcionarioResponsavel = responderRequisicao()

opt [funcionarioResponsavel]

temas = checaTemas()

pacotes = checaPacotes()

servicos = checaServicos()

evento = enviaDetalhes(cliente, tema, pacotes, desejaServico, servico)

evento = cadastrarEvento(cliente, tema,


pacotes, desejaServico, servico)

ProdutoVenda produtos = extraiProdutos(pacotes)

produtosDisponiveis = checaEstoque(produtos) ProdutoVenda produtosSemEstoqueSuficiente =


foraDeEstoque(produtos)

alt

[produtosSemEstoqueSuficiente NOT null] atendidos = fazPedidos(produtos)

loop

produtoRecebido = pedidoDeProduto(produto, quantidade)


[produto em produtosSemEstoqueSuficiente]

adicionaNoEstoque(produtoRecebido)
se produtoRecebido = null,
atendidos = false e há um break
nesse loop

alt
cancelaPedidos(produtos)
[NOT atendidos]

cancelaCadastroEvento()

removeDoEstoque(produtos)

ref

Finalização do Cadastro de Eventos

[else] removeDoEstoque(produtos)

ref

Finalização do Cadastro de Eventos


empresa: EmpresaEventos fornecedor: Fornecedor agenda: AgendaEventos evento: Evento

loop [servico em servicos]

contrataServico(servico, data)

evento = cadastrarEvento(cliente, tema, pacotes, desejaServico, servicos, local, data)

cadastraEvento(cliente, tema, pacotes,


desejaServico, servicos)

geraConta()

emiteContrato(pacotes, servicos, cliente)


funcionario: Funcionario empresa: EmpresaEventos agenda: AgendaEventos evento: Evento conta: Conta cliente: Cliente

checaContas()
checaContas()
checaContas()

loop [evento in eventos]


checaConta()

checaConta()

pago = verificaPagamento()

alt [NOT pago] pagamentoRecebido = realizaCobranca(valor)


saldoSuficiente =
checaSeSaldoSuficiente(valor)
fragmento combinado ALT
condição = [NOT pago]

alt [saldoSuficiente]
realizaPagamento(valor)

fragmento combinado ALT


condição = [saldoSuficiente]

darBaixaEmConta()
[NOT pagamentoRecebido]

verificaPagamento() verificaPagamento()

instanciada contaPaga
realizaCobranca() darBaixaEmConta()

do/atualizaValor() [pagamentoRecebido]

pago = false pago = true


cancelaPedidos()
[NOT produtoRecebido]

pedidosDeCompra não nulo;


algumPedidoPendente = true

pedidos pendentes
adicionaNoEstoque()

pedidoDeProduto() [produtoRecebido]

[NOTalgumPedidoPendente]
[algumPedidoPendente]

)
os(
id
ed
zP
fa
instanciada produtos em estoque
adicionaNoEstoque()

pedidoDeProduto() [produtoRecebido]

pedidosDeCompra nulo; [not produtoRecebido]


produtosEmEstoque nulo;
algumPedidoPendente = false pedidosDeCompra não nulo;
produtosEmEstoque não nulo;
algumPedidoPendente = false
: DispatcherServlet cliente: Cliente empresa: EmpresaEventos funcionario: Funcionario pacote: PacoteProduto estoque: Estoque fornecedor: Fornecedor

AtorCliente
AtorFuncionario AtorFornecedor

solicitaEvento(data) solicitaEvento(data)
funcionarioResponsavel = solicitaEvento(data)
funcionarioResponsavel = solicitaEvento()
funcionarioResponsavel = requisicaoEvento()

funcionarioResponsavel = encaminhaRequisicao(funcionario)

requisicaoEvento()

respondeRequisicao(resposta)

opt [funcionarioResponsavel NOT null]


notificaAtendimento() pedeOpcoes(data)

locais= checaLocais(data)

temas = checaTemas()

pacotes = checaPacotes()

servicos = checaServicos(data)
enviaOpcoes(locais, temas, pacotes, servicos)

enviaDetalhes(cliente, tema, pacotes, desejaServico, servico, local, data)


enviaDetalhes(cliente, tema, pacotes, desejaServico, servico, local, data)

evento = enviaDetalhes(cliente, tema, pacotes, desejaServico, servico, local, data)

encaminhaDetalhes(cliente, tema, pacotes, desejaServico, servico, local, data)

enviaDetalhes(cliente, tema, pacotes, desejaServico, servico, local, data)

cadastrarEvento(cliente, tema, pacotes, desejaServico, servico, local, data)

evento = cadastrarEvento(cliente, tema,


pacotes, desejaServico, servico, local, data)

ProdutoVenda produtos = extraiProdutos(pacotes)

produtosDisponiveis = checaEstoque(produtos, repor = true) ProdutoVenda produtosSemEstoqueSuficiente =


foraDeEstoque(produtos)

alt

[produtosSemEstoqueSuficiente NOT null AND repor = true] atendidos = fazPedidos(produtosSemEstoqueSuficiente)

loop produtoRecebido = pedidoDeProduto(produto, quantidade)

encaminhaPedido(produto, quantidade)
se produtoRecebido = null, [produto em produtosSemEstoqueSuficiente]
atendidos = false e há um break encaminhaPedido(produto, quantidade)
nesse loop
respondePedido(produto) [NULL se não atendido]

adicionaNoEstoque(produtoRecebido)

alt
cancelaPedidos(produtos)
[NOT atendidos]

cancelaCadastroEvento()

notifiicaCancelamentoFuncionario()
notificaCancelamentoCliente()

[else]

removeDoEstoque(produtos)

ref

Finalização do Cadastro de Eventos

[produtosSemEstoqueSuficiente IS NULL]

removeDoEstoque(produtos)

ref

Finalização do Cadastro de Eventos


empresa: EmpresaEventos fornecedor: Fornecedor agenda: AgendaEventos evento: Evento : DispatcherServlet
local: Local

AtorFornecedor

opt [desejaServicos] contrataServicos(servicos, data)

loop [servico em servicos]


contrataServico(servico, data)
informaFornecedor(servico, data, fornecedor)
informaFornecedor(servico, data)

reservaLocal(data)

evento = cadastrarEvento(cliente, tema, pacotes, desejaServico, servicos, local, data)

cadastraEvento(cliente, tema, pacotes,


desejaServico, servicos)

geraConta()

emiteContrato(pacotes, servicos, cliente)

enviaContrato(contrato)
enviaContrato(contrato)
: DispatcherServlet funcionario: Funcionario empresa: EmpresaEventos agenda: AgendaEventos evento: Evento conta: Conta cliente: Cliente

AtorFuncionario
AtorCliente

checaContas()
checaContas()
checaContas()
checaContas()
checaContas()

loop [evento in eventos]


checaConta()

checaConta()

pago = verificaPagamento()

alt [NOT pago] pagamentoRecebido = realizaCobranca(valor, prazo)

encaminhaCobranca(valor, prazo)

realizaCobranca(valor, prazo)

respondeCobranca(Boolean pago)

opt
[pagamentoRecebido]
realizaPagamento(valor)

darBaixaEmConta()
Algoritmo de Método — solicitaEvento (DispatcherServlet) Algoritmo de Método — enviaDetalhes (DispatcherServlet) Algoritmo de Método — cadastraEvento (EmpresaEventos) Algoritmo de Método — checaEstoque (Estoque) Algoritmo de Método — fazPedidos (Estoque) Algoritmo de Método — checaConta (Conta)
empresa.enviaDetalhes(cliente,
tema, pacotes, desejaServico,
cliente.solicitaEvento(data) servico, local, data) pacote.extraiProdutos(pacotes)
estoque.foraDeEstoque(produtos)

[else] estoque.pedidoDeProduto(produto,
[else] quantidade) conta.verificaPagamento()
Parâmetro repor identificado
como necessário para ja
estoque.checaEstoque(produtos,
mandar a ordem de compra método para atualizar o valor
[funcionarioResponsavel NOT null] repor = true) [else]
caso não tenha os produtos caso a conta esteja em atraso
necessários
[evento IS null]
<<if>>
[produtosSemEstoqueSuficiente NOT null AND repor = true]

objDS.notificaAtendimento() <<if>> [produtoRecebido]


[NOT pago]
[else]
<<if>>
objDS.notificaCancelamento() <<if>>
Essa variável dentro do método <<if>>
é instanciada com true ou false
apenas depois de haver a estoque.fazPedidos(produtosSemEstoqueSuficiente) estoque.adicionaNoEstoque()
[produtosDisponiveis] checagem do estoque e haver a conta.atualizaValor()
tentativa de realizar os pedidos
dos produtos faltantes, caso
existam
<<if>>

[else]
estoque.removeDoEstoque(produtos)
[algumPedidoPendente]
objDS.pedeOpcoes(data)
conta.realizaCobranca(valor, prazo)
[NOT atendidos]
[produtosSemEstoqueSuficiente IS null]

[else]
[else]
<<if>>

estoque.cancelaPedidos( [else]
produtosSemEstoqueSuficiente) [else]
[desejaServicos]

[pagamentoRecebido]
<<if>>

empresa.checaLocais(data) empresa.checaTemas() empresa.checaPacotes() empresa.checaServicos(data)


empresa.contrataServicos(servicos, <<if>>
data)
conta.darBaixaEmConta()

objDS.enviaOpcoes(locais,
temas, pacotes, servicos)

local.reservaLocal(data)

agenda.cadastrarEvento(cliente,
tema, pacotes, desejaServico,
servicos, local, data)
Evento
Local
- <<collection>> pacotesComprados: PacoteProduto
- endereco: String Conta
- tema: TemaEvento
- <<collection>> reservas: Date - valor: Float
+ geraConta(): Conta
- pago: Boolean
RelatorioFinanceiro AgendaEventos
+ reservaLocal(data): void + emiteContrato(pacotes, servicos, cliente): Contrato
- dataVencimento: Date
- <<collection>> contasPagas: Conta - <<collection>> eventos: Evento
+ cadastrarEvento(cliente, tema, pacotes,
desejaServico, servicos, local, data) : Evento - dataPagamento: Date
- <<collection>> contasNaoPagas: Conta
+ cadastrarEvento(cliente,
- <<collection>> produtosComprados: ProdutoCompra tema, pacotes, desejaServico, + checaContas() : void + darBaixaEmConta() : void
servicos, local, data) : Evento
+ realizaCobranca(valor, prazo) : boolean
- contrato: Contrato
+ checaContas() : void
+ verificaPagamento() : boolean
- conta: Conta
EmpresaEventos
+ atualizaValor() : void
- local: Local
- <<collection>> funcionarios: Funcionario
+ checaConta() : void
- data: Date
- <<collection>> pacotesDeProdutos: PacoteProduto
- <<collection>> servicosContratados: ServicoOfertado

- <<collection>> servicosOfertados: ServicoOfertado

- <<collection>> temas: TemaEvento

- <<collection>> locais: Local TemaEvento


Contrato
- <<collection>> fornecedor: Fornecedor - tema: String
- cliente: Cliente
Pessoa - <<collection>> clientes: Cliente
- evento: Evento
- nome: String - agenda: AgendaEventos

- dataNascimento: Date - estoque: Estoque

- nroDocumento: String
+ contrataServicos(servicos, data) : void

+ cadastrarEvento(cliente, tema,
pacotes, desejaServico, servico, local, data) : Evento
+ checaContas() : void

+ checaServicos(data) : <<collection>> ServicoOfertado

+ checaPacotes() : <<collection>> PacoteProduto

+ checaTemas() : <<collection>> TemaEvento PacoteProduto

+ checaLocais(data) : <<collection>> Local - valor: Float


DispatchServlet
+ solicitaEvento(data) : Funcionario - <<collection>>: ProdutoVenda
+ solicitaEvento(data): void
+ extraiProdutos(pacotes):
<<collection>>ProdutoVenda + notificaAtendimento(): void

+ enviaOpcoes(locais, temas, pacotes, servicos): void


Estoque
+ notificaCancelamentoCliente(): void
- <<collection>> pedidosDeCompra: ProdutoCompra
+ informaFornecedor(servico, data): void

- <<collection>> produtosEmEstoque: ProdutoEstoque + enviaContrato(contrato): void

+ checaContas(): void
Cliente Funcionário Fornecedor ProdutoVenda
- algumPedidoPendente: Boolean
+ encaminhaCobranca(valor, prazo): void
- <<collection>> eventos: Evento - cargo: String - <<collection>> servicos: - produto: Produto
Servico + foraDeEstoque(produtos): <<collection>> + respondeCobranca(pago): void
- salario: Float ProdutoVenda - quantidade: Int
+ solicitaEvento(data) : - nomeFantasia: String
Funcionario - horarioTrabalho: String + checaEstoque(produtos, repor): <<collection>>
- telefoneContato: String ProdutoEstoque
+ realizaPagamento(valor) : void
+ checaContas() : void
- emailContato: String + removeDoEstoque(produtos): void
+ enviaDetalhes(cliente, tema, + enviaDetalhes(cliente,
pacotes, desejaServico, servico, tema, pacotes, + cancelaPedidos(produtos): void
+ pedidoDeProduto(produto,
local, data) : void desejaServico, servico, local, quantidade): <<collection>>
data) : Evento + adicionaNoEstoque(produto): void
ProdutoEstoque
+ fazPedidos(produtos): boolean
+ contrataServicos(servicos,
data): void

ProdutoCompra
ProdutoEstoque
- fornecedor: Fornecedor
- produto: Produto
- produto: Produto
- quantidade: Int
- quantidade: Int
- taxaLucro: Float
- pendente: Boolean

- valorFinal: Float + method(type): type

Produto

- nome: String

- valor: Float

ServicoOfertado
Servico
- servico: Servico
- nome: String
- cargo: String
- valor: Float
- fornecedor:
Fornecedor

Você também pode gostar