Ejemplo n.º 1
0
      public async Task <IActionResult> Edit(int id, FaturaViewModel FVM, FaturaCliente faturaCliente)
      {
          var fatura = await _context.Faturas
                       .Include(f => f.Fatura)
                       .FirstOrDefaultAsync(m => m.NrFaturaId == id);

          var pacote = await _context.Pacotes
                       .SingleOrDefaultAsync(p => p.PacoteId == fatura.PacoteId);

          fatura.DataEmissao   = FVM.DataEmissao;
          fatura.Descricao     = FVM.Descricao;
          fatura.NomeCliente   = FVM.NomeCliente;
          fatura.ContratoId    = FVM.ContratoId;
          fatura.Morada        = FVM.Morada;
          fatura.PrecoContrato = FVM.PrecoContrato;
          fatura.PacoteId      = FVM.PacoteId;
          FVM.NomePacote       = pacote.NomePacote;

          if (faturaCliente.DataEmissao > DateTime.Today || faturaCliente.DataEmissao < DateTime.Today.AddDays(-90))
          {
              ModelState.AddModelError("DataEmissao", "A data da fatura não pode ultrapassar os 90 dias anteriores");
          }

          if (!ModelState.IsValid)
          {
              ModelState.AddModelError("", "Não foi possível adicionar a fatura, tente novamente");
              return(View(FVM));
          }

          _context.Update(fatura);
          await _context.SaveChangesAsync();

          ViewBag.Mensagem = "Fatura editada com sucesso";
          return(View("Sucesso"));
      }
Ejemplo n.º 2
0
      // GET: FaturaCliente/Details/5
      public async Task <IActionResult> Details(int?id)
      {
          if (id == null)
          {
              return(NotFound());
          }

          FaturaViewModel FVM = new FaturaViewModel();


          var faturaCliente = await _context.Faturas
                              .Include(f => f.Fatura)
                              .FirstOrDefaultAsync(m => m.NrFaturaId == id);

          var pacote = await _context.Pacotes
                       .SingleOrDefaultAsync(p => p.PacoteId == faturaCliente.PacoteId);

          FVM.NrFaturaId    = (int)id;
          FVM.DataEmissao   = faturaCliente.DataEmissao;
          FVM.ContratoId    = faturaCliente.ContratoId;
          FVM.NomeCliente   = faturaCliente.NomeCliente;
          FVM.Morada        = faturaCliente.Morada;
          FVM.PrecoContrato = faturaCliente.PrecoContrato;
          FVM.NomePacote    = pacote.NomePacote;
          FVM.PacoteId      = pacote.PacoteId;
          FVM.Descricao     = faturaCliente.Descricao;

          if (faturaCliente == null)
          {
              return(NotFound());
          }

          return(View(FVM));
      }
Ejemplo n.º 3
0
        public FaturaViewModel FaturaAtualizar(FaturaViewModel faturaViewModel)
        {
            var fatura = Mapper.Map <Fatura>(faturaViewModel);

            _faturaService.FaturaAtualizar(fatura);
            Commit();
            return(faturaViewModel);
        }
Ejemplo n.º 4
0
 public ActionResult Edit(FaturaViewModel faturaViewModel)
 {
     if (ModelState.IsValid)
     {
         _faturaApplicationService.FaturaAdicionar(faturaViewModel);
         return(RedirectToAction("Index"));
     }
     return(View(faturaViewModel));
 }
Ejemplo n.º 5
0
        public string GerarFatura(string postedData)
        {
            var    js         = new JavaScriptSerializer();
            var    boleto     = js.Deserialize <LoteBoleto>(postedData);
            var    fatura     = new FaturaViewModel();
            var    tokenIUGU  = new RepositorioParametro().Listar().FirstOrDefault().TokenIUGU;
            var    response   = "";
            string faturaJSON = "";

            try
            {
                //Util.EnviarBoletoPorEmail(boleto, "boleto.pdf");
                if (boleto.TituloId != null)
                {
                    fatura = Util.GerarFatura(boleto);
                }
                else
                {
                    fatura = Util.GerarFatura((int)boleto.TituloRecorrenteId, boleto.ModeloBoletoId, boleto.DataVencimento, boleto.Valor);
                }


                faturaJSON = js.Serialize(fatura);

                using (WebClient client = new WebClient()) {
                    client.Encoding = System.Text.Encoding.UTF8;

                    client.Headers.Add("Content-Type", "application/json");
                    client.Headers.Add("Authorization", "Basic " + tokenIUGU);

                    response = client.UploadString("https://api.iugu.com/v1/invoices", "POST", faturaJSON);
                }

                var faturaResponse = js.Deserialize <FaturaResponse>(response);
                if (faturaResponse != null)
                {
                    var faturaGerada = new FaturaGerada();
                    faturaGerada.DataVencimento     = DateTime.Parse(faturaResponse.due_date);
                    faturaGerada.IuguId             = faturaResponse.id;
                    faturaGerada.TituloId           = boleto.TituloId;
                    faturaGerada.TituloRecorrenteId = boleto.TituloRecorrenteId;
                    faturaGerada.UrlFatura          = faturaResponse.secure_url;

                    var repoFaturaGerada = new RepositorioFaturaGerada();
                    repoFaturaGerada.Incluir(faturaGerada);
                }

                return("Enviado");
            }
            catch (WebException e)
            {
                return(StreamToString(e.Response.GetResponseStream()) + "      " + faturaJSON);
            }
        }
Ejemplo n.º 6
0
        public ActionResult Edit(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            FaturaViewModel faturaViewModel = _faturaApplicationService.FaturaObterPorId(id.Value);

            if (faturaViewModel == null)
            {
                return(HttpNotFound());
            }
            return(View(faturaViewModel));
        }
Ejemplo n.º 7
0
 public ActionResult Edit(int id)
 {
     if (id == -1)
     {
         var model = new FaturaEditViewModel();
         model.Id          = -1;
         model.Total       = 0;
         model.Subtotal    = 0;
         model.RazonSocial = string.Empty;
         model.Correo      = string.Empty;
         model.Direccion   = string.Empty;
         model.Nit         = 0;
         var ClienteList = new List <SelectListItem>();
         var clienmodel  = ServiceDeal.GetClientes();
         ClienteList.Add(new SelectListItem {
             Value = "-1", Text = "--Seleccione un Cliente--", Selected = true
         });
         foreach (var il in clienmodel)
         {
             ClienteList.Add(new SelectListItem {
                 Value = il.Nit.ToString(), Text = il.RazonSocial + " - " + il.Nit
             });
         }
         model.Clientes = ClienteList;
         var ProductList  = new List <SelectListItem>();
         var Productmodel = ServiceDeal.GetProductos();
         ProductList.Add(new SelectListItem {
             Value = "-1", Text = "--Seleccione un Producto--", Selected = true
         });
         foreach (var il in Productmodel)
         {
             ProductList.Add(new SelectListItem {
                 Value = il.Id.ToString(), Text = il.Descripcion
             });
         }
         model.Productos = ProductList;
         return(View(model));
     }
     else
     {
         var lis    = ServiceDeal.GetFactura(id);
         var produc = ServiceDeal.GetFacturaporproducto(id);
         var model  = new FaturaViewModel();
         model.Id       = lis.Id;
         model.Total    = lis.Subtotal;
         model.Subtotal = lis.Subtotal;
         return(View(model));
     }
 }
Ejemplo n.º 8
0
        public static FaturaViewModel GerarFatura(int tituloRecorrenteId, int modeloBoletoId, DateTime dataVencimento, decimal valor)
        {
            FaturaViewModel fatura = new FaturaViewModel();
            var             db     = new Contexto();

            var titulo      = db.TitulosRecorrentes.Find(tituloRecorrenteId);
            var conta       = titulo.Conta;
            var pessoa      = titulo.Pessoa;
            var empresa     = titulo.Empresa;
            int numeroBanco = conta.Banco.Codigo;

            titulo.Valor = valor;
            var modeloBoleto = db.ModelosBoleto.Find(modeloBoletoId);

            var emails = pessoa.EmailFinanceiro.Replace(",", ";").Replace(" ", "").Split(';');

            fatura.cc_emails = string.Join(";", emails.Skip(1));
            fatura.email     = emails.First();
            fatura.due_date  = dataVencimento.ToString("yyyy-MM-dd");
            fatura.items.Add(new ItemFatura()
            {
                description = modeloBoleto.Instrucao, price_cents = (int)(titulo.Valor * 100), quantity = 1
            });
            fatura.return_url        = "";
            fatura.fines             = true;
            fatura.late_payment_fine = (int)modeloBoleto.Multa;
            fatura.per_day_interest  = true;

            if (modeloBoleto.PercentualDesconto > 0)
            {
                fatura.early_payment_discount = true;
                fatura.early_payment_discounts.Add(new ItemDesconto()
                {
                    days    = modeloBoleto.DiasDesconto,
                    percent = modeloBoleto.PercentualDesconto.ToString().Replace(",", ".")
                });
            }

            fatura.payable_with   = "bank_slip";
            fatura.payer.cpf_cnpj = pessoa.Cpf;
            fatura.payer.name     = pessoa.Nome;
            if (pessoa.Telefones.Count > 0)
            {
                fatura.payer.phone_prefix = pessoa.Telefones.First().Telefone.Ddd;
                fatura.payer.phone        = pessoa.Telefones.First().Telefone.Numero;
            }

            fatura.payer.address = new Address()
            {
                zip_code   = pessoa.Endereco.Cep,
                street     = pessoa.Endereco.Logradouro,
                number     = pessoa.Endereco.Numero == "" ? "0" : pessoa.Endereco.Numero,
                district   = pessoa.Endereco.Bairro,
                city       = pessoa.Endereco.Cidade,
                state      = pessoa.Endereco.Uf,
                country    = "Brasil",
                complement = pessoa.Endereco.Complemento
            };

            return(fatura);
        }
        public HttpResponseMessage GerarBoletoFornecedor(HttpRequestMessage request, FaturaViewModel faturaVm)
        {
            return(CreateHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;

                if (!ModelState.IsValid)
                {
                    response = request.CreateResponse(HttpStatusCode.BadRequest,
                                                      ModelState.Keys.SelectMany(k => ModelState[k].Errors)
                                                      .Select(m => m.ErrorMessage).ToArray());
                }
                else
                {
                    var usuario = _usuarioRep.GetSingle(int.Parse(HttpContext.Current.User.Identity.GetUserId()));

                    var fatura = _faturaRep.GetSingle(faturaVm.Id);
                    var param = new List <string> {
                        "MULTA_MORA", "MULTA_ATRASO"
                    };

                    //Pega parâmetros de multa
                    var parametrosAtrasoPagtoFatura = _parametroSistemaRep.GetAll().Where(x => param.Contains(x.Codigo)).ToList();
                    var multaDiaria = (decimal)parametrosAtrasoPagtoFatura.FirstOrDefault(c => c.Codigo == "MULTA_MORA")?.Valor.TryParseInt() / 30;
                    var multaAtraso = parametrosAtrasoPagtoFatura.FirstOrDefault(c => c.Codigo == "MULTA_ATRASO")?.Valor.TryParseInt();

                    var pessoa = fatura.Fornecedor.Pessoa;
                    var telefone = pessoa.Telefones.FirstOrDefault(x => x.Ativo);
                    var endereco = pessoa.Enderecos.FirstOrDefault();
                    //endereco.Bairro = new Bairro();
                    //endereco.Estado = new Estado();

                    var diasAtraso = DateTime.Now.Subtract(fatura.DtVencimento).Days;
                    var valorAtrasoDias = fatura.Comissoes.Sum(x => x.Valor) * (diasAtraso * multaDiaria);
                    var valorMultaAtraso = fatura.Comissoes.Sum(x => x.Valor) * multaAtraso / 100;
                    var valorMulta = valorMultaAtraso + valorAtrasoDias;

                    var gerenciaNet = new GerencianetAPI();

                    #region Criando Transação


                    List <Item> itens = new List <Item>();

                    fatura.Comissoes.ForEach(c => itens.Add(new Item
                    {
                        Name = $"Pedido: {c.PedidoId}",
                        Value = (int)Convert.ToDecimal(string.Format("{0:N}", c.Valor).Replace(",", "").Replace(".", ""))
                    }));

                    itens.Add(new Item
                    {
                        Name = "Multa e Juros",
                        Value = (int)Convert.ToDecimal(string.Format("{0:N}", valorMulta).Replace(",", "").Replace(".", ""))
                    });


                    var metadata = new Metadata
                    {
                        CustomId = fatura.Id.ToString(),
                        NotificationURL = $"{ConfigurationManager.AppSettings[$"{Environment.GetEnvironmentVariable("Amb_EconomizaJa")}_UrlRetorno"]}api/pagamentos/retornoFatura"
                    };

                    var transacao = new TransactionRequest
                    {
                        Items = itens.ToArray(),
                        Metadata = metadata
                    };

                    var retornoTransacao = gerenciaNet.CreateTransaction(transacao);

                    #endregion

                    #region Associando Forma de Pagamento Boleto para Transação

                    Payment payment = new Payment();

                    payment.BankingBillet = new BankingBillet
                    {
                        ExpireAt = DateTime.Now.AddDays(1).ToShortDateString(), //Vencimento para o dia seguinte
                        Customer = new Customer
                        {
                            Name = pessoa.Usuarios.FirstOrDefault()?.UsuarioNome,
                            Birth = (pessoa.PessoaJuridica.DtFundacao ?? DateTime.Now).ToString("yyyy-MM-dd"),
                            Email = pessoa.PessoaJuridica.Email,
                            PhoneNumber = $"{telefone?.DddTelComl}{telefone?.TelefoneComl}",
                            Address = new Address
                            {
                                ZipCode = endereco.Cep,
                                City = endereco.Cidade.DescCidade,
                                Number = endereco.Numero.ToString(),
                                Neighborhood = endereco.Bairro.DescBairro,
                                Complement = endereco.Complemento,
                                State = endereco.Estado.Uf,
                                Street = endereco.DescEndereco
                            },
                            JuridicalPerson = new JuridicalPerson
                            {
                                CNPJ = pessoa.PessoaJuridica.Cnpj,
                                CorporateName = pessoa.PessoaJuridica.RazaoSocial
                            }
                        },

                        //Adicionando juros por dia caso venha pagar depois do vencimento
                        Configurations = new ConfigGerenciaNet
                        {
                            Interest = 33
                        },

                        Message = "Após vencimento será cobrado multa de 2% sobre o valor boleto e 0,033% ao dia."
                    };

                    var retornoBoleto = gerenciaNet.CreateBankingBillet(retornoTransacao.ChargerId, payment);

                    #endregion

                    #region Cancelando Boleto Vencido

                    var retornoCancelBoleto = new object();
                    if (fatura.ChargerId > 0)
                    {
                        retornoCancelBoleto = gerenciaNet.CancelTransaction(fatura.ChargerId);
                    }

                    #endregion

                    #region Atualizando Dados Fatura Banco

                    if (retornoCancelBoleto.TryParseInt() == 200)
                    {
                        fatura.DtAlteracao = DateTime.Now;
                        fatura.ChargerId = retornoBoleto.ChargeId;
                        fatura.UrlBoleto = retornoBoleto.Link;
                        fatura.Status = StatusFatura.AguardandoPagamento;
                        _faturaRep.Edit(fatura);
                        _unitOfWork.Commit();

                        #region Envia Email

                        Emails emails = new Emails
                        {
                            UsuarioCriacaoId = 1,
                            DtCriacao = DateTime.Now,
                            AssuntoEmail = "Boleto Gerado - 2º via do boleto gerada.",
                            EmailDestinatario = pessoa.PessoaJuridica.Email,

                            CorpoEmail = _templateRep.GetSingle(28).Template.Trim()
                                         .Replace("#NomeFantasia#", pessoa.PessoaJuridica.NomeFantasia)
                                         .Replace("#UrlBoleto#", fatura.UrlBoleto),

                            Status = Status.NaoEnviado,
                            Origem = Origem.BoletoGerado,
                            Ativo = true
                        };

                        _emailsRep.Add(emails);
                        _unitOfWork.Commit();

                        #endregion
                    }

                    #endregion

                    response = request.CreateResponse(HttpStatusCode.OK, new { });

                    return response;
                }

                return response;
            }));
        }