Olá galera,
essa é uma parte da estrutura do projeto:
As Notas que forem sendo cadastradas possuirão no máximo 2 produtos, PICOLE LIMAO e MORANGO, com uma determinada quantidade. Essas Notas determinam a quantidade de Picolés que possuo.
O Recibo possui praticamente a mesma estrutura da Nota, a diferença é que quando um recibo é gerado, com os produtos e a quantidade de cada produto, é debitado do saldo das Notas os produtos dos Recibos.
Exemplo:
Nota: 16100
produtos: PICOLE LIMAO: 100CX e PICOLE MORANGO: 100CX
Gero:
Recibo: 00001
Produtos: PICOLE LIMAO: 20CX e PICOLE MORANGO: 10CX
No fim a Nota 16100 deve conter PICOLE LIMAO: 80CX e PICOLE MORANGO: 90CX.
Esse é o código que salva o Recibo no Banco e que debita das Notas os saldos dos produtos que saíram:
public void salvar(Recibo recibo) throws ServiceException {
salvar(dao, recibo);
List<Produto> produtosRecibo = recibo.getItens().stream().map(item -> item.getProduto()).collect(Collectors.toList());
try {
List<Nota> notasDB = notaDAO.getNotas();
notasDB.forEach(nota -> {
nota.getItens().forEach(itemNota -> {
recibo.getItens().forEach(itemRecibo -> {
if (itemRecibo.getProduto().equals(itemNota.getProduto())) {
if (itemNota.getQuantidade() >= itemRecibo.getQuantidade()) {
int quantidadeNota = itemNota.getQuantidade();
int quantidadeRecibo = itemRecibo.getQuantidade();
itemNota.setQuantidade(quantidadeNota - quantidadeRecibo);
}
}
});
});
});
notasDB.forEach(nota -> {
try {
alterar(notaDAO, nota);
} catch (ServiceException e) {
e.printStackTrace();
}
});
} catch (DAOException e) {
throw new ServiceException(e);
}
}
O problema dele é que debita de todas as notas!
O que eu gostaria é que se uma Nota não possuir a quantidade suficiente, então é debitado da Nota seguinte.
