Beispiel #1
0
        public Dictionary <string, object> Deleta_Item_NF_e_Calcula_Totais(decimal NUMERO_SEQ_NFE, decimal NUMERO_SEQ_ITEM_NFE, bool Moeda)
        {
            using (Doran_ERP_Servicos_DadosDataContext ctx = new Doran_ERP_Servicos_DadosDataContext())
            {
                var query = (from item in ctx.TB_ITEM_NOTA_ENTRADAs
                             where item.NUMERO_SEQ_NFE == NUMERO_SEQ_NFE &&
                             item.NUMERO_SEQ_ITEM_NFE == NUMERO_SEQ_ITEM_NFE
                             select item).ToList();

                Dictionary <string, decimal> linha1 = new Dictionary <string, decimal>();

                foreach (var linha in query)
                {
                    linha1.Add("TOTAL_PRODUTOS_NFE", (decimal)linha.VALOR_TOTAL_ITEM_NFE);
                    linha1.Add("TOTAL_IPI_NFE", (decimal)linha.VALOR_IPI_ITEM_NFE);
                    linha1.Add("BASE_ICMS_NFE", (decimal)linha.BASE_ICMS_ITEM_NFE);
                    linha1.Add("VALOR_ICMS_NFE", (decimal)linha.VALOR_ICMS_ITEM_NFE);
                    linha1.Add("BASE_ICMS_SUBS_NFE", (decimal)linha.BASE_ICMS_SUBS_ITEM_NFE);
                    linha1.Add("VALOR_ICMS_SUBS_NFE", (decimal)linha.VALOR_ICMS_SUBS_ITEM_NFE);

                    using (Doran_Saldo_Cliente_Fornecedor abatimento_cliente = new Doran_Saldo_Cliente_Fornecedor(ID_USUARIO))
                    {
                        abatimento_cliente.NUMERO_SEQ_NF_ENTRADA  = linha.NUMERO_SEQ_NFE;
                        abatimento_cliente.NUMERO_ITEM_NF_ENTRADA = linha.NUMERO_SEQ_ITEM_NFE;

                        abatimento_cliente.Cancela_Abatimento_Cliente(ctx);
                    }

                    ctx.TB_ITEM_NOTA_ENTRADAs.DeleteOnSubmit(linha);
                    Doran_Base.Auditoria_ERP_Servicos.Doran_Auditoria.Audita_Delete(ctx, linha, ctx.TB_ITEM_NOTA_ENTRADAs.ToString(), ID_USUARIO);
                }

                linha1["TOTAL_PRODUTOS_NFE"]  = linha1["TOTAL_PRODUTOS_NFE"] * (-1);
                linha1["TOTAL_IPI_NFE"]       = linha1["TOTAL_IPI_NFE"] * (-1);
                linha1["BASE_ICMS_NFE"]       = linha1["BASE_ICMS_NFE"] * (-1);
                linha1["VALOR_ICMS_NFE"]      = linha1["VALOR_ICMS_NFE"] * (-1);
                linha1["BASE_ICMS_SUBS_NFE"]  = linha1["BASE_ICMS_SUBS_NFE"] * (-1);
                linha1["VALOR_ICMS_SUBS_NFE"] = linha1["VALOR_ICMS_SUBS_NFE"] * (-1);

                delete = true;
                return(Calcula_e_Grava_Totais_Nota_Entrada(ctx, linha1, Moeda));
            }
        }
Beispiel #2
0
        public Dictionary <string, object> Calcula_e_Grava_Item_Nota_Entrada(Dictionary <string, object> dados)
        {
            string str_conn = ConfigurationManager.ConnectionStrings["Doran_Servicos_ORM.Properties.Settings.Doran_ERP_ServicosConnectionString"].ConnectionString;

            using (Doran_ERP_Servicos_DadosDataContext ctx1 = new Doran_ERP_Servicos_DadosDataContext())
            {
                string CODIGO_CFOP    = dados["CODIGO_CFOP_ITEM_NFE"].ToString();
                string CLAS_FISCAL_NF = dados["CODIGO_CF_ITEM_NFE"].ToString();


                decimal VALOR_TOTAL_ITEM_NFE = Convert.ToDecimal(dados["VALOR_TOTAL_ITEM_NFE"]);
                decimal VALOR_IPI_ITEM_NFE   = Math.Round(VALOR_TOTAL_ITEM_NFE * (Convert.ToDecimal(dados["ALIQ_IPI_ITEM_NFE"]) / 100), 2);

                decimal ALIQ_ICMS_ITEM_NFE = Convert.ToDecimal(dados["ALIQ_ICMS_ITEM_NFE"]);
                decimal BASE_ICMS_ITEM_NFE = dados.ContainsKey("BASE_ICMS_ITEM_NFE") ?
                                             Convert.ToDecimal(dados["BASE_ICMS_ITEM_NFE"]) :
                                             Convert.ToDecimal(dados["VALOR_TOTAL_ITEM_NFE"]);

                decimal VALOR_ICMS_ITEM_NFE = Math.Round(BASE_ICMS_ITEM_NFE * (ALIQ_ICMS_ITEM_NFE / 100), 2);

                decimal BASE_ICMS_SUBS_ITEM_NFE  = Convert.ToDecimal(dados["BASE_ICMS_SUBS_ITEM_NFE"]);
                decimal VALOR_ICMS_SUBS_ITEM_NFE = Convert.ToDecimal(dados["VALOR_ICMS_SUBS_ITEM_NFE"]);

                try
                {
                    ctx1.Connection.ConnectionString = str_conn;
                    ctx1.Connection.Open();
                    ctx1.Transaction = ctx1.Connection.BeginTransaction(IsolationLevel.ReadUncommitted);

                    decimal ID_PRODUTO = 0;

                    if (!dados.ContainsKey("ID_PRODUTO"))
                    {
                        var query = (from linha1 in ctx1.TB_PRODUTOs
                                     where linha1.CODIGO_PRODUTO == dados["CODIGO_PRODUTO_ITEM_NFE"].ToString()
                                     select new
                        {
                            linha1.ID_PRODUTO
                        }).ToList();

                        foreach (var item in query)
                        {
                            ID_PRODUTO = item.ID_PRODUTO;
                        }
                    }
                    else
                    {
                        if (!decimal.TryParse(dados["ID_PRODUTO"].ToString(), out ID_PRODUTO))
                        {
                            throw new Exception("ID de produto inv&aacute;lido");
                        }

                        ID_PRODUTO = Convert.ToDecimal(dados["ID_PRODUTO"]);
                    }

                    var existeProduto = (from linha1 in ctx1.TB_PRODUTOs
                                         where linha1.ID_PRODUTO == ID_PRODUTO
                                         select linha1).Any();

                    if (!existeProduto)
                    {
                        throw new Exception("C&oacute;digo de produto n&atilde;o cadastrado");
                    }

                    System.Data.Linq.Table <TB_ITEM_NOTA_ENTRADA> Entidade = ctx1.GetTable <TB_ITEM_NOTA_ENTRADA>();

                    TB_ITEM_NOTA_ENTRADA novo = new TB_ITEM_NOTA_ENTRADA();

                    novo.NUMERO_SEQ_NFE             = _NUMERO_SEQ;
                    novo.ID_PRODUTO_ITEM_NFE        = ID_PRODUTO;
                    novo.CODIGO_PRODUTO_ITEM_NFE    = dados["CODIGO_PRODUTO_ITEM_NFE"].ToString().Trim();
                    novo.DESCRICAO_PRODUTO_ITEM_NFE = dados["DESCRICAO_PRODUTO_ITEM_NFE"].ToString().Trim();
                    novo.CODIGO_CF_ITEM_NFE         = dados["CODIGO_CF_ITEM_NFE"].ToString();
                    novo.CODIGO_ST_ITEM_NFE         = dados["CODIGO_ST_ITEM_NFE"].ToString();
                    novo.CODIGO_CFOP_ITEM_NFE       = dados["CODIGO_CFOP_ITEM_NFE"].ToString();
                    novo.QTDE_ITEM_NFE            = Convert.ToDecimal(dados["QTDE_ITEM_NFE"]);
                    novo.VALOR_UNITARIO_ITEM_NFE  = Convert.ToDecimal(dados["VALOR_UNITARIO_ITEM_NFE"]);
                    novo.VALOR_TOTAL_ITEM_NFE     = VALOR_TOTAL_ITEM_NFE;
                    novo.ALIQ_ICMS_ITEM_NFE       = ALIQ_ICMS_ITEM_NFE;
                    novo.VALOR_ICMS_ITEM_NFE      = VALOR_ICMS_ITEM_NFE;
                    novo.BASE_ICMS_ITEM_NFE       = BASE_ICMS_ITEM_NFE;
                    novo.ALIQ_IPI_ITEM_NFE        = Convert.ToDecimal(dados["ALIQ_IPI_ITEM_NFE"]);
                    novo.VALOR_IPI_ITEM_NFE       = VALOR_IPI_ITEM_NFE;
                    novo.BASE_ICMS_SUBS_ITEM_NFE  = BASE_ICMS_SUBS_ITEM_NFE;
                    novo.VALOR_ICMS_SUBS_ITEM_NFE = VALOR_ICMS_SUBS_ITEM_NFE;
                    novo.PERC_IVA_ITEM_NFE        = Convert.ToDecimal(dados["PERC_IVA_ITEM_NFE"]);
                    novo.DATA_CHEGADA_ITEM_NFE    = DateTime.Now;
                    novo.NUMERO_LOTE_ITEM_NFE     = dados["NUMERO_LOTE_ITEM_NFE"].ToString();

                    novo.NUMERO_PEDIDO_COMPRA       = dados.ContainsKey("NUMERO_PEDIDO_COMPRA") ? Convert.ToDecimal(dados["NUMERO_PEDIDO_COMPRA"]) : 0;
                    novo.NUMERO_ITEM_COMPRA         = dados.ContainsKey("NUMERO_ITEM_COMPRA") ? Convert.ToDecimal(dados["NUMERO_ITEM_COMPRA"]) : 0;
                    novo.SALDO_ITEM_NFE             = Convert.ToDecimal(dados["QTDE_ITEM_NFE"]);
                    novo.ABATIMENTO_CONCEDIDO       = dados.ContainsKey("ABATIMENTO_CONCEDIDO") ? Convert.ToDecimal(dados["ABATIMENTO_CONCEDIDO"]) : 0;
                    novo.ALIQ_ICMS_SAIDA_ICMS_ST    = dados.ContainsKey("ALIQ_ICMS_SAIDA_ICMS_ST") ? Convert.ToDecimal(dados["ALIQ_ICMS_SAIDA_ICMS_ST"]) : 0;
                    novo.PERCENTUAL_IPI_A_RECUPERAR = dados.ContainsKey("PERCENTUAL_IPI_A_RECUPERAR") ? Convert.ToDecimal(dados["PERCENTUAL_IPI_A_RECUPERAR"]) : 0;

                    Entidade.InsertOnSubmit(novo);

                    Doran_Base.Auditoria_ERP_Servicos.Doran_Auditoria.Audita_Insert(ctx1, novo, Entidade.ToString(), ID_USUARIO);

                    ctx1.SubmitChanges();

                    var CFOP_DEVOLUCAO = (from linha1 in ctx1.TB_CFOPs
                                          where linha1.CODIGO_CFOP == novo.CODIGO_CFOP_ITEM_NFE
                                          select linha1.OPERACAO_DEVOLUCAO).ToList().First();

                    if (novo.ABATIMENTO_CONCEDIDO == 1 && CFOP_DEVOLUCAO == 1)
                    {
                        using (Doran_Saldo_Cliente_Fornecedor abatimento_cliente = new Doran_Saldo_Cliente_Fornecedor(Convert.ToDecimal(dados["ID_USUARIO"])))
                        {
                            abatimento_cliente.NUMERO_SEQ_NF_ENTRADA  = novo.NUMERO_SEQ_NFE;
                            abatimento_cliente.NUMERO_ITEM_NF_ENTRADA = novo.NUMERO_SEQ_ITEM_NFE;
                            abatimento_cliente.Grava_Futuro_Abatimento_Cliente(novo.VALOR_TOTAL_ITEM_NFE, ctx1);
                        }
                    }

                    Dictionary <string, decimal> linha = new Dictionary <string, decimal>();

                    linha.Add("TOTAL_PRODUTOS_NFE", VALOR_TOTAL_ITEM_NFE);
                    linha.Add("TOTAL_IPI_NFE", VALOR_IPI_ITEM_NFE);
                    linha.Add("BASE_ICMS_NFE", BASE_ICMS_ITEM_NFE);
                    linha.Add("VALOR_ICMS_NFE", VALOR_ICMS_ITEM_NFE);
                    linha.Add("BASE_ICMS_SUBS_NFE", BASE_ICMS_SUBS_ITEM_NFE);
                    linha.Add("VALOR_ICMS_SUBS_NFE", VALOR_ICMS_SUBS_ITEM_NFE);

                    Dictionary <string, object> retorno = Calcula_e_Grava_Totais_Nota_Entrada(ctx1, linha, true);

                    ctx1.Transaction.Commit();

                    return(retorno);
                }
                catch
                {
                    ctx1.Transaction.Rollback();
                    throw;
                }
            }
        }
Beispiel #3
0
        public Dictionary <string, object> Calcula_e_Atualiza_Item_Nota_Entrada(Dictionary <string, object> dados)
        {
            decimal VALOR_TOTAL_ITEM_NFE = Convert.ToDecimal(dados["VALOR_TOTAL_ITEM_NFE"]);
            decimal VALOR_IPI_ITEM_NFE   = Math.Round(VALOR_TOTAL_ITEM_NFE * (Convert.ToDecimal(dados["ALIQ_IPI_ITEM_NFE"]) / 100), 2);
            decimal ALIQ_ICMS_ITEM_NFE   = Convert.ToDecimal(dados["ALIQ_ICMS_ITEM_NFE"]);
            decimal BASE_ICMS_ITEM_NFE   = dados.ContainsKey("BASE_ICMS_ITEM_NFE") ?
                                           Convert.ToDecimal(dados["BASE_ICMS_ITEM_NFE"]) :
                                           Convert.ToDecimal(dados["VALOR_TOTAL_ITEM_NFE"]);

            decimal VALOR_ICMS_ITEM_NFE = Math.Round(BASE_ICMS_ITEM_NFE * (Convert.ToDecimal(dados["ALIQ_ICMS_ITEM_NFE"]) / 100), 2);

            decimal BASE_ICMS_SUBS_ITEM_NFE  = Convert.ToDecimal(dados["BASE_ICMS_SUBS_ITEM_NFE"]);
            decimal VALOR_ICMS_SUBS_ITEM_NFE = Convert.ToDecimal(dados["VALOR_ICMS_SUBS_ITEM_NFE"]);

            using (Doran_ERP_Servicos_DadosDataContext ctx1 = new Doran_ERP_Servicos_DadosDataContext())
            {
                var query = (from item in ctx1.TB_ITEM_NOTA_ENTRADAs

                             where item.NUMERO_SEQ_NFE == _NUMERO_SEQ &&
                             item.NUMERO_SEQ_ITEM_NFE == Convert.ToDecimal(dados["NUMERO_SEQ_ITEM_NFE"])

                             select item).ToList();

                if (query.Count() == 0)
                {
                    throw new Exception("N&atilde;o foi poss&iacute;vel encontrar o item de NF com o ID [" + dados["CODIGO_PRODUTO_ITEM_NFE"].ToString() + "]");
                }

                var query1 = (from linha1 in ctx1.TB_PRODUTOs
                              where linha1.CODIGO_PRODUTO == dados["CODIGO_PRODUTO_ITEM_NFE"].ToString()
                              select new
                {
                    linha1.ID_PRODUTO
                }).ToList();

                if (!query1.Any())
                {
                    throw new Exception("C&oacute;digo de produto n&atilde;o cadastrado");
                }

                decimal ID_PRODUTO = 0;

                foreach (var item in query1)
                {
                    ID_PRODUTO = item.ID_PRODUTO;
                }

                Dictionary <string, decimal> linha = new Dictionary <string, decimal>();

                foreach (var nota in query)
                {
                    decimal ATOTAL_PRODUTOS_NFE  = (decimal)nota.VALOR_TOTAL_ITEM_NFE;
                    decimal ATOTAL_IPI_NFE       = (decimal)nota.VALOR_IPI_ITEM_NFE;
                    decimal ABASE_ICMS_NFE       = (decimal)nota.BASE_ICMS_ITEM_NFE;
                    decimal AVALOR_ICMS_NFE      = (decimal)nota.VALOR_ICMS_ITEM_NFE;
                    decimal ABASE_ICMS_SUBS_NFE  = (decimal)nota.BASE_ICMS_SUBS_ITEM_NFE;
                    decimal AVALOR_ICMS_SUBS_NFE = (decimal)nota.VALOR_ICMS_SUBS_ITEM_NFE;

                    nota.ID_PRODUTO_ITEM_NFE        = ID_PRODUTO;
                    nota.CODIGO_PRODUTO_ITEM_NFE    = dados["CODIGO_PRODUTO_ITEM_NFE"].ToString();
                    nota.DESCRICAO_PRODUTO_ITEM_NFE = dados["DESCRICAO_PRODUTO_ITEM_NFE"].ToString();
                    nota.CODIGO_CF_ITEM_NFE         = dados["CODIGO_CF_ITEM_NFE"].ToString();
                    nota.CODIGO_ST_ITEM_NFE         = dados["CODIGO_ST_ITEM_NFE"].ToString();
                    nota.CODIGO_CFOP_ITEM_NFE       = dados["CODIGO_CFOP_ITEM_NFE"].ToString();
                    nota.QTDE_ITEM_NFE            = Convert.ToDecimal(dados["QTDE_ITEM_NFE"]);
                    nota.VALOR_UNITARIO_ITEM_NFE  = Convert.ToDecimal(dados["VALOR_UNITARIO_ITEM_NFE"]);
                    nota.ALIQ_ICMS_ITEM_NFE       = ALIQ_ICMS_ITEM_NFE;
                    nota.VALOR_ICMS_ITEM_NFE      = VALOR_ICMS_ITEM_NFE;
                    nota.BASE_ICMS_ITEM_NFE       = BASE_ICMS_ITEM_NFE;
                    nota.ALIQ_IPI_ITEM_NFE        = Convert.ToDecimal(dados["ALIQ_IPI_ITEM_NFE"]);
                    nota.VALOR_IPI_ITEM_NFE       = VALOR_IPI_ITEM_NFE;
                    nota.BASE_ICMS_SUBS_ITEM_NFE  = BASE_ICMS_SUBS_ITEM_NFE;
                    nota.VALOR_ICMS_SUBS_ITEM_NFE = VALOR_ICMS_SUBS_ITEM_NFE;
                    nota.VALOR_TOTAL_ITEM_NFE     = Convert.ToDecimal(dados["VALOR_TOTAL_ITEM_NFE"]);
                    nota.PERC_IVA_ITEM_NFE        = Convert.ToDecimal(dados["PERC_IVA_ITEM_NFE"]);
                    nota.DATA_CHEGADA_ITEM_NFE    = DateTime.Now;
                    nota.NUMERO_LOTE_ITEM_NFE     = dados["NUMERO_LOTE_ITEM_NFE"].ToString();
                    nota.ABATIMENTO_CONCEDIDO     = dados.ContainsKey("ABATIMENTO_CONCEDIDO") ?
                                                    Convert.ToDecimal(dados["ABATIMENTO_CONCEDIDO"]) :
                                                    nota.ABATIMENTO_CONCEDIDO;

                    nota.ALIQ_ICMS_SAIDA_ICMS_ST    = dados.ContainsKey("ALIQ_ICMS_SAIDA_ICMS_ST") ? Convert.ToDecimal(dados["ALIQ_ICMS_SAIDA_ICMS_ST"]) : 0;
                    nota.PERCENTUAL_IPI_A_RECUPERAR = dados.ContainsKey("PERCENTUAL_IPI_A_RECUPERAR") ? Convert.ToDecimal(dados["PERCENTUAL_IPI_A_RECUPERAR"]) : 0;

                    var CFOP_DEVOLUCAO = (from linha1 in ctx1.TB_CFOPs
                                          where linha1.CODIGO_CFOP == nota.CODIGO_CFOP_ITEM_NFE
                                          select linha1.OPERACAO_DEVOLUCAO).ToList().First();

                    if (nota.ABATIMENTO_CONCEDIDO == 1 && CFOP_DEVOLUCAO == 1)
                    {
                        //if (nota.VALOR_TOTAL_ITEM_NFE != VALOR_TOTAL_ITEM_NFE)
                        //{
                        using (Doran_Saldo_Cliente_Fornecedor abatimento_cliente = new Doran_Saldo_Cliente_Fornecedor(Convert.ToDecimal(dados["ID_USUARIO"])))
                        {
                            abatimento_cliente.NUMERO_SEQ_NF_ENTRADA  = nota.NUMERO_SEQ_NFE;
                            abatimento_cliente.NUMERO_ITEM_NF_ENTRADA = nota.NUMERO_SEQ_ITEM_NFE;

                            abatimento_cliente.Cancela_Abatimento_Cliente(ctx1);

                            nota.VALOR_TOTAL_ITEM_NFE = VALOR_TOTAL_ITEM_NFE;

                            abatimento_cliente.Grava_Futuro_Abatimento_Cliente(nota.VALOR_TOTAL_ITEM_NFE, ctx1);
                        }
                        //}
                    }

                    if (nota.ABATIMENTO_CONCEDIDO != 1)
                    {
                        using (Doran_Saldo_Cliente_Fornecedor abatimento_cliente = new Doran_Saldo_Cliente_Fornecedor(ID_USUARIO))
                        {
                            abatimento_cliente.NUMERO_SEQ_NF_ENTRADA  = nota.NUMERO_SEQ_NFE;
                            abatimento_cliente.NUMERO_ITEM_NF_ENTRADA = nota.NUMERO_SEQ_ITEM_NFE;

                            abatimento_cliente.Cancela_Abatimento_Cliente(ctx1);
                        }
                    }

                    Doran_Base.Auditoria_ERP_Servicos.Doran_Auditoria.Audita_Update(ctx1, ctx1.TB_ITEM_NOTA_ENTRADAs.GetModifiedMembers(nota),
                                                                                    ctx1.TB_ITEM_NOTA_ENTRADAs.ToString(), ID_USUARIO);

                    linha.Add("TOTAL_PRODUTOS_NFE", (-ATOTAL_PRODUTOS_NFE + VALOR_TOTAL_ITEM_NFE));
                    linha.Add("TOTAL_IPI_NFE", (-ATOTAL_IPI_NFE + VALOR_IPI_ITEM_NFE));
                    linha.Add("BASE_ICMS_NFE", (-ABASE_ICMS_NFE + BASE_ICMS_ITEM_NFE));
                    linha.Add("VALOR_ICMS_NFE", (-AVALOR_ICMS_NFE + VALOR_ICMS_ITEM_NFE));
                    linha.Add("BASE_ICMS_SUBS_NFE", (-ABASE_ICMS_SUBS_NFE + BASE_ICMS_SUBS_ITEM_NFE));
                    linha.Add("VALOR_ICMS_SUBS_NFE", (-AVALOR_ICMS_SUBS_NFE + VALOR_ICMS_SUBS_ITEM_NFE));
                }

                return(Calcula_e_Grava_Totais_Nota_Entrada(ctx1, linha, true));
            }
        }