Пример #1
0
        public async Task <ISaida> ObterFaturaPorLancamento(int idLancamento, int idUsuario)
        {
            var fatura = await _faturaRepositorio.ObterPorLancamento(idLancamento);

            this.NotificarSeNulo(fatura, CartaoCreditoMensagem.Fatura_Id_Lancamento_Nao_Encontrada);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            var mesFatura = Convert.ToInt32(fatura.MesAno.Substring(0, 2));
            var anoFatura = Convert.ToInt32(fatura.MesAno.Substring(2));

            return(await ObterFaturaPorCartaoCredito(fatura.IdCartaoCredito, idUsuario, mesFatura, anoFatura));
        }
Пример #2
0
        public async Task <ISaida> ExcluirLancamento(int idLancamento, int idUsuario)
        {
            this.NotificarSeMenorOuIgualA(idLancamento, 0, LancamentoMensagem.Id_Lancamento_Invalido);
            this.NotificarSeMenorOuIgualA(idUsuario, 0, Mensagem.Id_Usuario_Invalido);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            var lancamento = await _lancamentoRepositorio.ObterPorId(idLancamento);

            // Verifica se o lançamento existe
            this.NotificarSeNulo(lancamento, LancamentoMensagem.Id_Lancamento_Nao_Existe);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            // Verifica se o lançamento pertece ao usuário informado.
            this.NotificarSeDiferentes(lancamento.IdUsuario, idUsuario, LancamentoMensagem.Lancamento_Excluir_Nao_Pertence_Usuario);

            if (this.Invalido)
            {
                return(new Saida(false, this.Mensagens, null));
            }

            foreach (var anexo in lancamento.Anexos)
            {
                // Exclui os anexos do banco de dados e os arquivos do Google Drive
                await _anexoRepositorio.Deletar(anexo);
            }

            // Verifica se o lançamento está associado ao pagamento de uma fatura de cartão de crédito.
            if (lancamento.Categoria.Id == (int)TipoCategoriaEspecial.PagamentoFaturaCartao)
            {
                var fatura = await _faturaRepositorio.ObterPorLancamento(lancamento.Id);

                if (fatura != null)
                {
                    var parcelas = await _parcelaRepositorio.ObterPorFatura(fatura.Id);

                    foreach (var parcela in parcelas)
                    {
                        parcela.DesfazerLancamento();
                    }
                }
            }

            // Caso o lançamento esteja associado a uma parcela, a parcela deve ser reaberta.
            if (lancamento.IdParcela.HasValue)
            {
                var parcela = await _parcelaRepositorio.ObterPorId(lancamento.IdParcela.Value);

                parcela?.DesfazerLancamento();
            }

            if (string.IsNullOrEmpty(lancamento.IdTransferencia))
            {
                _lancamentoRepositorio.Deletar(lancamento);
            }
            // Caso o lançamento pertence a uma transferência, todos os lançamentos relacionados a transferência também serão excluídos.
            else
            {
                var lancamentosTransferencia = await _lancamentoRepositorio.ObterPorIdTransferencia(lancamento.IdTransferencia);

                foreach (var item in lancamentosTransferencia)
                {
                    _lancamentoRepositorio.Deletar(item);
                }
            }

            await _uow.Commit();

            return(new Saida(true, new[] { LancamentoMensagem.Lancamento_Excluido_Com_Sucesso }, new LancamentoSaida(lancamento)));
        }