folhapagamento/src/main/java/com/edernilson/folhapagamento/folha/FolhaPagamentoService.java
@Transactional
    public void pagarFolhaDaEmpresa(Long id) throws Exception {
        Optional<Empresa> empresaOptional = empresaRepository.findById(id);
        if (!empresaOptional.isPresent()) {
            throw new Exception();
        }
        Empresa empresa = empresaOptional.get();
        Optional<List<Funcionario>> listaFuncionarios = Optional.of(funcionarioRepository.findAllByEmpresa(empresa));

        if (!listaFuncionarios.isPresent()) {
            return;
        }

        double valorTotalFolha = listaFuncionarios.get().stream().map(f -> {
            try {
                contaCorrenteService.transferir(empresa.getContaCorrente(), f.getContaCorrente(), f.getSalary());
            } catch (Exception e) {
                throw new FolhaPagamentoException("Erro no pagamento do Funcionario: "+f.getName());
            }
            return f.getSalary();
        }).reduce(0D, Double::sum);

        double valorADebitar = valorTotalFolha * PERCENTUAL_DESCONTO / 100;
        contaCorrenteService.debitar(empresa.getContaCorrente(), valorADebitar);

        String nomes = listaFuncionarios.get().stream().map(f -> f.getName()).collect(Collectors.joining(", "));

        folhaMessageSender.enviaEmailDaFolha(empresa.getEmail(), nomes);
    }
/**
     * Paga o salario dos funcionarios da empresa informada e desconta um percentual da Empresa pelo servico prestado
     * 
     * @param id ID da Empresa
     * @throws Exception
     */
Paga o salario dos funcionarios da empresa informada e desconta um percentual da Empresa pelo servico prestado

@param id ID da Empresa
@throws Exception
Paga o salario dos funcionarios da empresa informada e desconta um percentual da Empresa pelo servico prestado @param id ID da Empresa @throws Exception
@Transactional
    public void pagarFolhaDaEmpresa(Long id) throws Exception {
        Optional<Empresa> empresaOptional = empresaRepository.findById(id);
        if (!empresaOptional.isPresent()) {
            throw new Exception();
        }
        Empresa empresa = empresaOptional.get();
        Optional<List<Funcionario>> listaFuncionarios = Optional.of(funcionarioRepository.findAllByEmpresa(empresa));
        if (!listaFuncionarios.isPresent()) {
            return;
        }
        double valorTotalFolha = listaFuncionarios.get().stream().map(f -> {
            try {
                contaCorrenteService.transferir(empresa.getContaCorrente(), f.getContaCorrente(), f.getSalary());
            } catch (Exception e) {
                throw new FolhaPagamentoException("Erro no pagamento do Funcionario: "+f.getName());
            }
            return f.getSalary();
        }).reduce(0D, Double::sum);
        double valorADebitar = valorTotalFolha * PERCENTUAL_DESCONTO / 100;
        contaCorrenteService.debitar(empresa.getContaCorrente(), valorADebitar);
        String nomes = listaFuncionarios.get().stream().map(f -> f.getName()).collect(Collectors.joining(", "));
        folhaMessageSender.enviaEmailDaFolha(empresa.getEmail(), nomes);
    }
@ Transactional public void pagarFolhaDaEmpresa ( Long id ) throws Exception { Optional < Empresa > empresaOptional = empresaRepository . findById ( id ) ; if ( ! empresaOptional . isPresent ( ) ) { throw new Exception ( ) ; } Empresa empresa = empresaOptional . get ( ) ; Optional < List < Funcionario > > listaFuncionarios = Optional . of ( funcionarioRepository . findAllByEmpresa ( empresa ) ) ; if ( ! listaFuncionarios . isPresent ( ) ) { return ; } double valorTotalFolha = listaFuncionarios . get ( ) . stream ( ) . map ( f -> { try { contaCorrenteService . transferir ( empresa . getContaCorrente ( ) , f . getContaCorrente ( ) , f . getSalary ( ) ) ; } catch ( Exception e ) { throw new FolhaPagamentoException ( "Erro no pagamento do Funcionario: " + f . getName ( ) ) ; } return f . getSalary ( ) ; } ) . reduce ( 0D , Double :: sum ) ; double valorADebitar = valorTotalFolha * PERCENTUAL_DESCONTO / 100 ; contaCorrenteService . debitar ( empresa . getContaCorrente ( ) , valorADebitar ) ; String nomes = listaFuncionarios . get ( ) . stream ( ) . map ( f -> f . getName ( ) ) . collect ( Collectors . joining ( ", " ) ) ; folhaMessageSender . enviaEmailDaFolha ( empresa . getEmail ( ) , nomes ) ; }
Paga o salario dos funcionarios da empresa informada e desconta um percentual da Empresa pelo servico prestado
Paga o salario dos funcionarios da empresa informada e desconta um percentual da Empresa pelo servico prestado