public static NotaFiscalItem New(NotaFiscal notaFiscal, PedidoItem pedidoItem) { var cfop = new Cfop(notaFiscal.EstadoOrigem, notaFiscal.EstadoDestino).Value(); var icms = new ImpostoIcms(notaFiscal, pedidoItem, cfop); var ipi = new ImpostoIpi(notaFiscal, pedidoItem); var notaFiscalItem = new NotaFiscalItem { NotaFiscal = notaFiscal, NomeProduto = pedidoItem.NomeProduto, CodigoProduto = pedidoItem.CodigoProduto, Cfop = cfop, TipoIcms = icms.Tipo, BaseIcms = icms.Base, AliquotaIcms = icms.Aliquota, ValorIcms = icms.Valor, BaseIpi = ipi.Base, AliquotaIpi = ipi.Aliquota, ValorIpi = ipi.Valor, Desconto = 0 }; notaFiscalItem.AplicarDesconto(); notaFiscalItem.Validate(); return(notaFiscalItem); }
/// <summary> /// Aplica os impostos e verifica o CFOP do Pedido /// </summary> /// <param name="pedido">Pedido que será verificado</param> /// <returns>Retorna uma lista com os itens da nota fiscal preenchido</returns> public List <NotaFiscalItem> PopulaItensNotaFiscal(Pedido pedido) { Cfop cfop = new Cfop(); string valorImpostoCfop = cfop.VerificaCFOP(pedido); ManipulaEstados manipulaEstados = new ManipulaEstados(); double desconto = manipulaEstados.DescontoParaEstadosDestino(pedido.EstadoDestino); return(pedido.ItensDoPedido.Select(_ => { Impostos impostoICMS = new ImpostoICMS(pedido, _, valorImpostoCfop); Impostos impostoIPI = new ImpostoIPI(_); return new NotaFiscalItem() { NomeProduto = _.NomeProduto, CodigoProduto = _.CodigoProduto, Cfop = valorImpostoCfop, BaseIcms = impostoICMS.CalculaBase(), TipoIcms = ((ImpostoICMS)impostoICMS).VerificaTipo(), AliquotaIcms = impostoICMS.VerificaAliquota(), ValorIcms = impostoICMS.Valor(), BaseIpi = impostoIPI.CalculaBase(), AliquotaIpi = impostoIPI.VerificaAliquota(), ValorIpi = impostoIPI.Valor(), Desconto = desconto }; }).ToList()); }
public void CalcularIcms_Cfop6009_ReducaoBaseAplicada() { // Arrange var pedido = NotaFiscalTest.NovoPedido(); pedido.EstadoOrigem = "SP"; pedido.EstadoDestino = "SE"; var novoPedidoItem = new PedidoItem { Brinde = false, CodigoProduto = "123", NomeProduto = "X", ValorItemPedido = 1000 }; var notaFiscal = NotaFiscal.New(pedido); var cfop = new Cfop(notaFiscal.EstadoOrigem, notaFiscal.EstadoDestino).Value(); // 6.009 // Act var icms = new ImpostoIcms(notaFiscal, novoPedidoItem, cfop); // Assert Assert.NotNull(icms); Assert.Equal("10", icms.Tipo); Assert.Equal(0.17, icms.Aliquota); Assert.Equal(1000 * 0.17 * 0.9, icms.Valor); }
public Icms CalcularIcms(Pedido pedido, PedidoItem pedidoItem, Cfop cfop) { Icms icms = null; string tipoIcms = string.Empty; decimal baseIcms = 0; decimal aliquotaIcms = 0; if (pedido.EhMesmoEstado()) { tipoIcms = "60"; aliquotaIcms = 0.18M; } else { tipoIcms = "10"; aliquotaIcms = 0.17M; } if (pedidoItem.Brinde) { tipoIcms = "60"; aliquotaIcms = 0.18M; } baseIcms = CalcularBaseIcms(pedidoItem, cfop); icms = new Icms(tipoIcms, baseIcms, aliquotaIcms); icms.Calcular(); return(icms); }
public static void Iniciar(ISession s) { try { string path = AppDomain.CurrentDomain.BaseDirectory + "arquivos\\"; var arqCfop = new StreamReader(path + "cfop.txt"); string line = ""; while (line != null) { line = arqCfop.ReadLine(); if (line != null) { string[] split = line.Split(';'); var cfop = new Cfop { CodigoCfop = int.Parse(split[0]), Aplicacao = split[1] }; s.Save(cfop); } } } catch (Exception ex) { throw new Exception("Erro ao importar a tabela CFOP.\n" + ex.Message); } }
public void CalcularIcms_PedidoItemBrinde_TipoAliquotaDefinidosBrinde() { // Arrange var pedido = NotaFiscalTest.NovoPedido(); pedido.EstadoOrigem = "SP"; pedido.EstadoDestino = "RJ"; var novoPedidoItem = new PedidoItem { Brinde = true, CodigoProduto = "123", NomeProduto = "X", ValorItemPedido = 1000 }; var notaFiscal = NotaFiscal.New(pedido); var cfop = new Cfop(notaFiscal.EstadoOrigem, notaFiscal.EstadoDestino).Value(); // Act var icms = new ImpostoIcms(notaFiscal, novoPedidoItem, cfop); // Assert Assert.NotNull(icms); Assert.Equal("60", icms.Tipo); Assert.Equal(0.18, icms.Aliquota); Assert.Equal(1000 * 0.18, icms.Valor); }
private void btnSalvar_Click(object sender, EventArgs e) { try { Cfop cfop = new Cfop(); cfop.Descricao = descricaoTextBox.Text; cfop.CodCfop = Int32.Parse(cfopTextBox.Text); cfop.Icms = 0; GerenciadorCfop gCfop = GerenciadorCfop.GetInstance(); if (estado.Equals(EstadoFormulario.INSERIR)) { gCfop.Inserir(cfop); } else { gCfop.Atualizar(cfop); } cfopBindingSource.EndEdit(); } catch (DadosException de) { cfopBindingSource.CancelEdit(); throw de; } finally { habilitaBotoes(true); btnBuscar.Focus(); } }
public IActionResult AlterarCfop([FromBody] Cfop objJson, int id) { try { if (!ModelState.IsValid) { return(StatusCode(400, new RetornoJsonErro(400, "Objeto inválido [Alterar Cfop]", null))); } if (objJson.Id != id) { return(StatusCode(400, new RetornoJsonErro(400, "Objeto inválido [Alterar Cfop] - ID do objeto difere do ID da URL.", null))); } var objBanco = _repository.Cfop.ConsultarObjeto(objJson.Id); if (objBanco == null) { return(StatusCode(400, new RetornoJsonErro(400, "Objeto com ID inválido [Alterar Cfop]", null))); } _repository.Cfop.Alterar(objBanco, objJson); return(ConsultarObjetoCfop(id)); } catch (Exception ex) { return(StatusCode(500, new RetornoJsonErro(500, "Erro no Servidor [Alterar Cfop]", ex))); } }
public NotaFiscalItem(int id, int idNotaFiscal, Cfop cfop, Icms icms, Produto produto, Ipi ipi) { Id = id; IdNotaFiscal = idNotaFiscal; Cfop = cfop; Icms = icms; Produto = produto; Ipi = ipi; }
private void ConverterDtoParaModelo(Cfop destino) { destino.CodInterno = this.cadastro.ObterValorNormalizado(c => c.Codigo, destino.CodInterno); destino.Descricao = this.cadastro.ObterValorNormalizado(c => c.Nome, destino.Descricao); destino.IdTipoCfop = this.cadastro.ObterValorNormalizado(c => c.IdTipoCfop, destino.IdTipoCfop); destino.TipoMercadoria = this.cadastro.ObterValorNormalizado(c => c.TipoMercadoria, destino.TipoMercadoria); destino.AlterarEstoqueTerceiros = this.cadastro.ObterValorNormalizado(c => c.AlterarEstoqueTerceiros, destino.AlterarEstoqueTerceiros); destino.AlterarEstoqueCliente = this.cadastro.ObterValorNormalizado(c => c.AlterarEstoqueCliente, destino.AlterarEstoqueCliente); destino.Obs = this.cadastro.ObterValorNormalizado(c => c.Observacao, destino.Obs); }
public override int GetHashCode() { return(Math.Abs( HashCode.Combine( Cfop.GetHashCode(), Origem.GetHashCode(), Cst.GetHashCode(), Aliq.GetHashCode(), Ncm.GetHashCode() ))); }
private List <Cfop> PreencheLista(DataTable dt) { List <Cfop> listacfop = new List <Cfop>(); foreach (DataRow r in dt.Rows) { Cfop cfop = PreencheObjInfo(r); listacfop.Add(cfop); } return(listacfop); }
private decimal CalcularBaseIcms(PedidoItem pedidoItem, Cfop cfop) { if (cfop.Valor == "6.009") { return(pedidoItem.ValorItemPedido * 0.90M); //redução de base } else { return(pedidoItem.ValorItemPedido); } }
public void DeveRetornarCfopCorretoOrigemMG(string estadoDestino, string cfopEsperado) { Estado origem = "MG"; Estado destino = estadoDestino; Cfop cfop = cfopEsperado; var _cfopFactory = new CfopFactory(origem, destino); Cfop cfopFabricado = _cfopFactory.ObterInstancia(); Assert.IsTrue(cfopFabricado.Equals(cfop)); }
private List <SqlParametros> PreencheParametros(Cfop cfop) { List <SqlParametros> lstParametros = new List <SqlParametros>(); lstParametros.Add(new SqlParametros("Codigo", cfop.Codigo)); lstParametros.Add(new SqlParametros("Grupo", cfop.Grupo)); lstParametros.Add(new SqlParametros("Descricao", cfop.Descricao)); lstParametros.Add(new SqlParametros("Aplica", cfop.Aplica)); return(lstParametros); }
public Item(int numSequenciaItem, string codigo, string cfop, decimal baseCalc, decimal aliquota, decimal icms, short apuracao, short incentivo) { NumSequenciaItem = numSequenciaItem; Codigo = codigo; BaseCalc = baseCalc; Aliquota = aliquota; Icms = icms; Cfop = new Cfop(cfop); Apuracao = new Apuracao(apuracao); Incentivo = new Incentivo(incentivo); }
private Cfop PreencheObjInfo(DataRow row) { Cfop cfop = new Cfop(); cfop.CfopId = Convert.ToInt16(row["CfopId"]); cfop.Codigo = row["Codigo"].ToString(); cfop.Grupo = Convert.ToBoolean(row["Grupo"]); cfop.Descricao = row["Descricao"].ToString(); cfop.Aplica = row["Aplica"].ToString(); return(cfop); }
public void TestEstadoOrigemSP_EstadoDestinoSP() { Mocks mock = new Mocks(); Pedido pedido = mock.Pedido(); pedido.EstadoOrigem = "SP"; pedido.EstadoDestino = "SP"; Cfop cfop = new Cfop(); string valorCfop = cfop.VerificaCFOP(mock.Pedido()); Assert.AreEqual(string.Empty, valorCfop); }
public void TestEstadoOrigemEstadoDestinoNotFound() { Mocks mock = new Mocks(); Pedido pedido = mock.Pedido(); pedido.EstadoOrigem = "RS"; pedido.EstadoDestino = "AM"; Cfop cfop = new Cfop(); string valorCfop = cfop.VerificaCFOP(pedido); Assert.AreEqual("", valorCfop); }
public void CriarCfop_EstadosOrigemDestinoNaoContemplados_CfopNaoCriado() { // Arrange const string estadoOrigem = "GO"; const string estadoDestino = "AM"; // Act var cfop = new Cfop(estadoOrigem, estadoDestino); // Assert Assert.NotNull(cfop); Assert.Empty(cfop.Value()); }
/// <summary> /// Inicia uma nova instância da classe <see cref="ConverterCadastroAtualizacaoParaCfop"/>. /// </summary> /// <param name="cadastro">O DTO de cadastro, enviado para o endpoint.</param> /// <param name="atual">O CFOP atual (opcional), para que sejam aproveitados os valores, se necessário.</param> public ConverterCadastroAtualizacaoParaCfop( CadastroAtualizacaoDto cadastro, Cfop atual = null) { this.cadastro = cadastro; this.cfop = new Lazy <Cfop>(() => { var destino = atual ?? new Cfop(); this.ConverterDtoParaModelo(destino); return(destino); }); }
public void CriarCfop_EstadosOrigemDestinoValidos_CfopCriado() { // Arrange const string estadoOrigem = "MG"; const string estadoDestino = "RJ"; // Act var cfop = new Cfop(estadoOrigem, estadoDestino); // Assert Assert.NotNull(cfop); Assert.Equal("6.000", cfop.Value()); }
public void TestEstadoOrigemMG_EstadoDestinoMG() { Mocks mock = new Mocks(); Pedido pedido = mock.Pedido(); pedido.EstadoOrigem = "MG"; pedido.EstadoDestino = "MG"; Cfop cfop = new Cfop(); string valorCfop = cfop.VerificaCFOP(pedido); Assert.AreEqual("6.002", valorCfop); }
public void CriarCfop_EstadoOrigemSpEstadoDestinoRo_Cfop6006() { // Arrange const string estadoOrigem = "SP"; const string estadoDestino = "RO"; // Act var cfop = new Cfop(estadoOrigem, estadoDestino); // Assert Assert.NotNull(cfop); Assert.Equal("6.006", cfop.Value()); }
public void DeveIncluirBaseIcmsMultiplicadoPorZeroNoveValorPedidoQuandoCfopSeisMilENove() { Estado origem = "SP"; Estado destino = "MG"; var pedido = new Pedido("Samir", origem, destino); var pedidoItem = new PedidoItem("Produto", "123", 120, false); decimal valorEsperado = 120 * 0.90M; Cfop cfop = "6.009"; IcmsService icmsService = new IcmsService(); Icms icms = icmsService.CalcularIcms(pedido, pedidoItem, cfop); Assert.AreEqual(valorEsperado, icms.BaseIcms); }
public void DeveRetornarIcmsDezAliquitaZeroDezesseteParaEstadoDestinoEOrigemDiferentes() { Estado origem = "SP"; Estado destino = "MG"; var pedido = new Pedido("Samir", origem, destino); var pedidoItem = new PedidoItem("Produto", "123", 120, false); Cfop cfop = "6.009"; IcmsService icmsService = new IcmsService(); Icms icms = icmsService.CalcularIcms(pedido, pedidoItem, cfop); Assert.AreEqual("10", icms.TipoIcms); Assert.AreEqual(0.17M, icms.AliquotaIcms); }
public IActionResult InserirCfop([FromBody] Cfop objJson) { try { if (!ModelState.IsValid) { return(StatusCode(400, new RetornoJsonErro(400, "Objeto inválido [Inserir Cfop]", null))); } _repository.Cfop.Inserir(objJson); return(CreatedAtRoute("ConsultarObjetoCfop", new { id = objJson.Id }, objJson)); } catch (Exception ex) { return(StatusCode(500, new RetornoJsonErro(500, "Erro no Servidor [Inserir Cfop]", ex))); } }
/// <summary> /// Atualiza dados do cfop na base de dados /// </summary> /// <param name="cfop"></param> public void Atualizar(Cfop cfop) { try { var repCfop = new RepositorioGenerico <CfopE>(); CfopE _cfop = repCfop.ObterEntidade(cf => cf.cfop.Equals(cfop.CodCfop)); _cfop.descricao = cfop.Descricao; _cfop.icms = cfop.Icms; repCfop.SaveChanges(); } catch (Exception e) { throw new DadosException("Cfop", e.Message, e); } }
/// <summary> /// Insere um novo cfop na base de dados /// </summary> /// <param name="cfop"></param> /// <returns></returns> public Int64 Inserir(Cfop cfop) { try { var repCfop = new RepositorioGenerico <CfopE>(); CfopE _cfop = new CfopE(); _cfop.cfop = cfop.CodCfop; _cfop.descricao = cfop.Descricao; _cfop.icms = cfop.Icms; repCfop.Inserir(_cfop); repCfop.SaveChanges(); return(_cfop.cfop); } catch (Exception e) { throw new DadosException("Cfop", e.Message, e); } }
public bool GerarNotaFiscal(Domain.Pedido pedido) { NotaFiscal notaFiscal = new NotaFiscal(new Random().Next(99999), 1, pedido.NomeCliente, pedido.EstadoDestino, pedido.EstadoOrigem); Cfop cfop = _cfopService.ObterCfop(pedido); if (string.IsNullOrEmpty(cfop.Valor)) { return(false); } foreach (PedidoItem itemPedido in pedido.Itens) { Produto produto = new Produto(itemPedido.NomeProduto, itemPedido.CodigoProduto, itemPedido.ValorItemPedido); Icms icms = _icmsService.CalcularIcms(pedido, itemPedido, cfop); Ipi ipi = _ipiService.CalcularIpi(itemPedido); EstadoService estado = new EstadoService(pedido.EstadoDestino); NotaFiscalItem notaFiscalItem = new NotaFiscalItem(0, notaFiscal.NumeroNotaFiscal, cfop, icms, produto, ipi); if (estado.EhEstadoSudeste()) { notaFiscalItem.AplicarDesconto(0.10M); } notaFiscal.AdicionarItem(notaFiscalItem); } bool notaFiscalCriada = CriarXml(notaFiscal); if (notaFiscalCriada) { this._notaFiscalRepositorio.AdicionarNotaFiscal(notaFiscal); } return(notaFiscalCriada); }