示例#1
0
        public NotaFiscal(
            int numeroNotaFiscal,
            int serie,
            string nomeCliente,
            EstadoDestino estadoDestino,
            EEstados estadoOrigem
            )
        {
            NumeroNotaFiscal = numeroNotaFiscal;
            Serie            = serie;
            NomeCliente      = nomeCliente;
            EstadoDestino    = estadoDestino;
            EstadoOrigem     = estadoOrigem;

            AddNotifications(estadoDestino);

            AddNotifications(new Contract()
                             .Requires()
                             .IsGreaterThan(NumeroNotaFiscal, 0, "NotaFiscal.NumeroNotaFiscal", "O Numero da Nota Fiscal deve ser maior que 0")
                             .IsGreaterThan(Serie, 0, "NotaFiscal.Serie", "O Numero da Nota Fiscal deve ser maior que 0")
                             .HasMinLen(NomeCliente, 3, "NotaFiscal.NomeCliente", "O Nome do Cliente não pode ter menos de 3 caracteres")
                             .IsNotNull(estadoOrigem, "NotaFiscal.EstadoOrigem", "O Campo EstadoOrigem é obrigatório")
                             .AreNotEquals(estadoOrigem.ToString(), EEstados.Selecione.ToString(), "NotaFiscal.EstadoOrigem", "O Campo EstadoOrigem Precisa ser um estado válido")
                             );

            ItensDaNotaFiscal = new List <NotaFiscalItem>();
        }
示例#2
0
        public NotaFiscalItem(EEstados origem, EstadoDestino destino, double valorItemPedido, bool brinde, string nomeProduto, string codigoProduto)
        {
            Origem             = origem;
            Destino            = destino;
            this.NomeProduto   = nomeProduto;
            this.CodigoProduto = codigoProduto;

            AddNotifications(new Contract()
                             .Requires()
                             .HasMinLen(NomeProduto, 3, "NotaFiscalItem.NomeProduto", "O Campo NomeProduto não pode ter menos de 3 caracteres")
                             .HasMinLen(CodigoProduto, 3, "NotaFiscalItem.CodigoProduto", "O Campo CodigoProduto não pode ter menos de 3 caracteres")
                             .IsNotNull(Origem, "NotaFiscalItem.EstadoOrigem", "O Campo EstadoOrigem é obrigatório")
                             .AreNotEquals(Origem.ToString(), EEstados.Selecione.ToString(), "NotaFiscalItem.EstadoOrigem", "O Campo EstadoOrigem Precisa ser um estado válido")
                             .IsGreaterThan(valorItemPedido, 0, "NotaFiscalItem.ValorItemPedido", "O Campo valorItemPedido deve ser maior que zero")
                             );
            AddNotifications(Destino);

            this.CalcularAlicotas(valorItemPedido, brinde);
        }
示例#3
0
        public void EmitirNotaFiscal(Pedido pedido)
        {
            this.NumeroNotaFiscal = 99999;
            this.Serie            = new Random().Next(Int32.MaxValue);
            this.NomeCliente      = pedido.NomeCliente;

            this.EstadoDestino = pedido.EstadoOrigem;
            this.EstadoOrigem  = pedido.EstadoDestino;
            string[] descontoSudeste = { "SP", "RJ", "MG", "ES" };

            foreach (PedidoItem itemPedido in pedido.ItensDoPedido)
            {
                NotaFiscalItem notaFiscalItem = new NotaFiscalItem();
                notaFiscalItem.Cfop = GetCpof(EstadoDestino);

                if (notaFiscalItem.Cfop == "6.009")
                {
                    notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido * 0.90; //redução de base
                }
                else
                {
                    notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido;
                }

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

                notaFiscalItem.ValorIcms = notaFiscalItem.BaseIcms * notaFiscalItem.AliquotaIcms;
                notaFiscalItem.BaseIpi   = itemPedido.ValorItemPedido;

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

                notaFiscalItem.ValorIpi = notaFiscalItem.BaseIpi * notaFiscalItem.AliquotaIpi;
                if (descontoSudeste.Contains(EstadoDestino.ToUpper()))
                {
                    itemPedido.ValorItemPedido = itemPedido.ValorItemPedido - (itemPedido.ValorItemPedido * 0.1);
                }

                notaFiscalItem.NomeProduto   = itemPedido.NomeProduto;
                notaFiscalItem.CodigoProduto = itemPedido.CodigoProduto;
                (ItensDaNotaFiscal as List <NotaFiscalItem>).Add(notaFiscalItem);
            }
        }
示例#4
0
        public void ShouldReturnErrorWhenEstadoDestinoIsValid()
        {
            var obj = new EstadoDestino(EEstados.SP);

            Assert.IsTrue(obj.Valid);
        }
示例#5
0
        public void ShouldReturnErrorWhenEstadoDestinoIsInvalid(EEstados estados)
        {
            var obj = new EstadoDestino(estados);

            Assert.IsTrue(obj.Invalid);
        }