Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 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);
     }
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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)));
            }
        }
Exemplo n.º 9
0
 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);
 }
Exemplo n.º 11
0
 public override int GetHashCode()
 {
     return(Math.Abs(
                HashCode.Combine(
                    Cfop.GetHashCode(),
                    Origem.GetHashCode(),
                    Cst.GetHashCode(),
                    Aliq.GetHashCode(),
                    Ncm.GetHashCode()
                    )));
 }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
 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);
     }
 }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
 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);
 }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 20
0
        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);
            });
        }
Exemplo n.º 22
0
        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());
        }
Exemplo n.º 23
0
        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);
        }
Exemplo n.º 24
0
        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());
        }
Exemplo n.º 25
0
        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);
        }
Exemplo n.º 26
0
        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)));
            }
        }
Exemplo n.º 28
0
        /// <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);
            }
        }
Exemplo n.º 29
0
        /// <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);
            }
        }
Exemplo n.º 30
0
        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);
        }