Пример #1
0
        public void GerarNotaFiscal_HavingGeneratedAValidXml_ShouldPersistNotaFiscalInDataBase()
        {
            // arrange
            var pedido = A.Dummy <Pedido>();

            pedido.ItensDoPedido.Add(A.Dummy <PedidoItem>());

            A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored)).Returns(true);

            A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()).Returns(A.Dummy <int>());

            A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()).Returns(A.Dummy <int>());

            A.CallTo(() => _notaFiscalRepository.InsertNotaFiscal(A <int> .Ignored, A <int> .Ignored,
                                                                  A <string> .Ignored, A <string> .Ignored, A <string> .Ignored)).Returns(1);

            A.CallTo(() => _notaFiscalRepository.InsertNotaFiscalItem(A <int> .Ignored, A <string> .Ignored, A <string> .Ignored,
                                                                      A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored));

            // act
            var notaFiscalService = new NotaFiscalService(_xmlWriter, _notaFiscalRepository);
            var result            = notaFiscalService.GerarNotaFiscal(pedido);

            // assert
            A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored))
            .MustHaveHappenedOnceExactly();

            A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()).MustHaveHappenedOnceExactly();

            A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()).MustHaveHappenedOnceExactly();

            A.CallTo(() => _notaFiscalRepository.InsertNotaFiscal(A <int> .Ignored, A <int> .Ignored,
                                                                  A <string> .Ignored, A <string> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly();

            A.CallTo(() => _notaFiscalRepository.InsertNotaFiscalItem(A <int> .Ignored, A <string> .Ignored, A <string> .Ignored,
                                                                      A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored,
                                                                      A <double> .Ignored, A <double> .Ignored, A <double> .Ignored)).MustHaveHappenedOnceOrMore();

            Assert.IsTrue(result.Status);
        }
Пример #2
0
        private NotaFiscal MontarNotaFiscal(Pedido pedido)
        {
            var notaFiscal = new NotaFiscal
            {
                Id = _notaFiscalRepository.GetNextIdNotaFiscal(),
                NumeroNotaFiscal = _notaFiscalRepository.GetNextNumeroNotaFiscal(),
                Serie            = new Random().Next(int.MaxValue),
                NomeCliente      = pedido.NomeCliente,

                EstadoDestino = pedido.EstadoDestino,
                EstadoOrigem  = pedido.EstadoOrigem,
            };

            var idNotaFiscalItem = _notaFiscalRepository.GetLastIdNotaFiscalItem();

            var desconto = UF.IsSudeste(notaFiscal.EstadoDestino) ? 0.10 : 0.00;
            var cfop     = DefinirCfop(notaFiscal.EstadoOrigem, notaFiscal.EstadoDestino);

            foreach (var itemPedido in pedido.ItensDoPedido)
            {
                var notaFiscalItem = new NotaFiscalItem()
                {
                    Id = idNotaFiscalItem++, IdNotaFiscal = notaFiscal.Id, Cfop = cfop
                };

                if (notaFiscal.EstadoDestino == notaFiscal.EstadoOrigem)
                {
                    notaFiscalItem.TipoIcms     = "60";
                    notaFiscalItem.AliquotaIcms = 0.18;
                }
                else
                {
                    notaFiscalItem.TipoIcms     = "10";
                    notaFiscalItem.AliquotaIcms = 0.17;
                }

                if (notaFiscalItem.Cfop == "6.009")
                {
                    notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido * 0.90;
                }
                else
                {
                    notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido;
                }

                notaFiscalItem.ValorIcms   = notaFiscalItem.BaseIcms * notaFiscalItem.AliquotaIcms;
                notaFiscalItem.AliquotaIpi = 0.10;

                if (itemPedido.Brinde)
                {
                    notaFiscalItem.TipoIcms     = "60";
                    notaFiscalItem.AliquotaIcms = 0.18;
                    notaFiscalItem.ValorIcms    = notaFiscalItem.BaseIcms * notaFiscalItem.AliquotaIcms;
                    notaFiscalItem.AliquotaIpi  = 0.00;
                }

                notaFiscalItem.BaseIpi       = itemPedido.ValorItemPedido;
                notaFiscalItem.ValorIpi      = notaFiscalItem.BaseIpi * notaFiscalItem.AliquotaIpi;
                notaFiscalItem.NomeProduto   = itemPedido.NomeProduto;
                notaFiscalItem.CodigoProduto = itemPedido.CodigoProduto;
                notaFiscalItem.Desconto      = desconto;

                notaFiscal.ItensDaNotaFiscal.Add(notaFiscalItem);
            }

            return(notaFiscal);
        }