/// <summary> /// Remover um determinado pagamento de uma saída /// </summary> /// <param name="codSaidaPagamento"></param> /// <param name="saida"></param> public void Remover(Int64 codSaidaPagamento, Saida saida) { try { if ((saida.TipoSaida == Saida.TIPO_PRE_VENDA) || (saida.TipoSaida == Saida.TIPO_VENDA)) { List <Conta> contas = GerenciadorConta.GetInstance(saceContext).ObterPorSaidaPagamento(saida.CodSaida, codSaidaPagamento).ToList(); foreach (Conta conta in contas) { GerenciadorMovimentacaoConta.GetInstance(saceContext).RemoverPorConta(conta.CodConta); GerenciadorConta.GetInstance(saceContext).Remover(conta.CodConta); } } var query = from saidaPagamentoSet in saceContext.SaidaFormaPagamentoSet where saidaPagamentoSet.codSaidaFormaPagamento == codSaidaPagamento select saidaPagamentoSet; foreach (SaidaFormaPagamentoE _saidaPagamentoE in query) { repSaidaPagamento.Remover(_saidaPagamentoE); } repSaidaPagamento.SaveChanges(); saida.TotalPago = ObterPorSaida(saida.CodSaida).Sum(sp => sp.Valor); saida.Troco = saida.TotalPago - saida.TotalAVista; saida.Desconto = 100 - ((saida.TotalAVista / saida.Total) * 100); GerenciadorSaida.GetInstance(saceContext).Atualizar(saida); } catch (Exception e) { throw new DadosException("Pagamentos", e.Message, e); } }
/// <summary> /// Verifica se um cliente possui limite suficiente para realizar uma nova compra /// </summary> /// <param name="cliente"></param> /// <param name="totalNovaCompra"></param> /// <returns></returns> public decimal ObterLimiteCompraDisponivel(Pessoa cliente) { IEnumerable <Conta> listaContasAberto = GerenciadorConta.GetInstance(null).ObterPorSituacaoPessoa(SituacaoConta.SITUACAO_ABERTA, cliente.CodPessoa); IEnumerable <long> listaCodContas = listaContasAberto.Select(p => p.CodConta); IEnumerable <MovimentacaoConta> listaPagamentos = GerenciadorMovimentacaoConta.GetInstance(null).ObterPorContas(new List <long>(listaCodContas)); decimal totalValorPagar = listaContasAberto.Sum(c => c.ValorPagar); decimal totalValorPago = listaPagamentos.Sum(m => m.Valor); return(cliente.LimiteCompra - totalValorPagar + totalValorPago); }
/// <summary> /// REgistra os pagamentos associando para cada um dele uma conta a pagar /// </summary> /// <param name="pagamentos"></param> /// <param name="entrada"></param> private void RegistrarPagamentosEntrada(List <EntradaPagamento> pagamentos, Entrada entrada, SaceEntities saceContext) { foreach (EntradaPagamento pagamento in pagamentos) { // Para cada pagamento é criada uma nova conta Conta conta = new Conta(); if (pagamento.PagamentoDoFrete) { conta.CodPessoa = entrada.CodEmpresaFrete; } else { conta.CodPessoa = entrada.CodFornecedor; } conta.CodPlanoConta = PlanoConta.ENTRADA_PRODUTOS; conta.CodEntrada = entrada.CodEntrada; conta.CodSaida = Global.SAIDA_PADRAO; // saída não válida conta.CodPagamento = pagamento.CodEntradaFormaPagamento; conta.Desconto = 0; // Quando o pagamento é realizado em dinheiro a conta já é inserido quitada if (pagamento.CodFormaPagamento == FormaPagamento.DINHEIRO) { conta.CodSituacao = SituacaoConta.SITUACAO_QUITADA.ToString(); } else { conta.CodSituacao = SituacaoConta.SITUACAO_ABERTA.ToString(); } conta.TipoConta = Conta.CONTA_PAGAR.ToString(); conta.Valor = pagamento.Valor; if (pagamento.CodFormaPagamento == FormaPagamento.BOLETO) { conta.FormatoConta = Conta.FORMATO_CONTA_BOLETO; } else { conta.FormatoConta = Conta.FORMATO_CONTA_FICHA; } conta.DataVencimento = pagamento.Data; conta.CodConta = GerenciadorConta.GetInstance(saceContext).Inserir(conta); if (pagamento.CodFormaPagamento == FormaPagamento.DINHEIRO) { MovimentacaoConta movimentacao = new MovimentacaoConta(); movimentacao.CodContaBanco = pagamento.CodContaBanco; movimentacao.CodConta = conta.CodConta; movimentacao.CodResponsavel = GerenciadorLoja.GetInstance().Obter(Global.LOJA_PADRAO).ElementAt(0).CodPessoa; movimentacao.CodTipoMovimentacao = MovimentacaoConta.PAGAMENTO_FORNECEDOR; movimentacao.DataHora = DateTime.Now; movimentacao.Valor = pagamento.Valor; GerenciadorMovimentacaoConta.GetInstance(saceContext).Inserir(movimentacao); } } }