public static int InserePedido( UsuarioResumido u, ParametroResumido pr, int codVendedor, int codCliente, string observacao, int codFormaPagto, int codCondPagto, List<ProdutoResumido> produtos, int codEmp, Int32 NumPedWeb, Int32 NumPed, decimal DescontoPedido, int CodPrc_Tab, int CodPrz_Tab, int UnidadeVenda, int iCodTipMov) { Decimal TotalComissao = 0; Decimal TotalComissaoTelev = 0; ClasseBanco csBanco = new ClasseBanco(); //verifica se tem itens na grid if (produtos.Count.ToString() == "0") { //throw new Exception("Não há produtos digitados."); return 0; } try { DataClassesDataContext dcdc = new DataClassesDataContext(); decimal cPesoTotal = 0; decimal comissao_televend = 0; decimal comissao_vendedor = 0; int iIncideTelev = 0; int iIncideVend = 0; int CodTipMov = ValidaMovimentacao(codCliente, codEmp, iCodTipMov); if (CodTipMov == 0) { throw new Exception("Não há Tipo de Movimentação Padrão cadastrada nos Parâmetros de Venda."); } /*51287*/ string varCLIE_IPISuspenso = dcdc.CLIENTEs.FirstOrDefault(cli => cli.CodCli == codCliente).CLIE_IPISuspenso.ToString(); PEDIDO p = new PEDIDO(); p.CodEmp = (short)codEmp; //FABIANO - 12/10/2011 - N.42120 //Buscar o segundo vendedor da VENDCLI e sua comissao. (TELEVENDEDOR) //49637 - Adicionado CODEMP na clausula where //var sSql = "SELECT CodVen, COMISSAOTELEV, INCIDE FROM VENDCLI INNER JOIN VENDEDOR ON VENDCLI.CodVen = VENDEDOR.CodVend" + //" WHERE CodCli = " + codCliente + " AND CodVen <> " + codVendedor + ""; var sSql = "SELECT CodVen, COMISSAOTELEV, INCIDE FROM VENDCLI INNER JOIN VENDEDOR ON VENDCLI.CodVen = VENDEDOR.CodVend" + " WHERE CodCli = " + codCliente + " AND CodVen <> " + codVendedor + " AND CODEMP = " + p.CodEmp; var televendedor = csBanco.Query(sSql); p.TelVend_Pedido = null; if (televendedor.Read()) { if (televendedor[0].ToString() != "") //CODVEN { p.TelVend_Pedido = Convert.ToInt16(televendedor[0].ToString()); } if (televendedor[1].ToString()!="") //COMISSAO { comissao_televend = Convert.ToDecimal(televendedor[1].ToString()); } if (televendedor[2].ToString() != "") //INCIDE { iIncideTelev = Convert.ToInt16(televendedor[2].ToString()); } } televendedor.Close(); //Busca comissao do vendedor principal e o setor na vendcli sSql = "SELECT SETOR, Comissao, Incide" + " FROM " + " VENDCLI INNER JOIN VENDEDOR ON VENDCLI.CodVen = VENDEDOR.CodVend " + " WHERE 1=1 " + " AND CodCli = " + codCliente + "" + " AND CodVen = " + codVendedor + ""; var r = csBanco.Query(sSql); if (r.Read()) { p.SETOR = r[0].ToString(); //43573 if (r[1].ToString()!="") //COMISSAO { comissao_vendedor = Convert.ToDecimal(r[1].ToString()); } if (r[2].ToString() != "") //INCIDE { iIncideVend = Convert.ToInt16(r[2].ToString()); } } r.Close(); //Busca parametro sistema r = csBanco.Query("SELECT conteudo FROM parametrosist WHERE descparametro = 'BloqPedConf' AND codemp = " + codEmp); if (r.Read()) { //Se Bloqueia por conferencia ou nao //Se = 'S' bloqueia com DIV (Divergencia), senao grava null p.RESCONFER = r[0].ToString() == "S" ? "DIV" : null; } r.Close(); //Validacao PEDIDO X PEDIDOWEB r = csBanco.Query("SELECT NUMPED FROM PEDIDO WHERE codemp = " + codEmp + " AND NUMPED = " + NumPedWeb + " AND NUMPEDWEB = " + NumPed + ""); if (r.Read()) { throw new Exception("Pedido " + NumPed + " já cadastrado."); } r.Close(); //Campos fixos p.Origem = 'W'; //43573 //p.StatusComercial = "BCF"; // bloqueado para conferência (default) p.PesoBruto = 0; p.Volume = 0; p.Carga = 1; p.SubCarga = 1; p.Comissao = 0; p.VlrFrete_Pedido = 0; p.Origem_Pedido = "VENDEDOR"; p.Tipo_Pedido = "PEDIDO"; p.USUCAD = u.NomUsu; //43573 p.SitPed = "ABE"; p.HoraCad = DateTime.Now; //43573 p.Hora = DateTime.Now; p.DtaEmi = DateTime.Today; //DateTime.Now; p.DtaEnt = DateTime.Today; p.DtaFat = DateTime.Today; //Campos dinamicos p.PercDes = DescontoPedido; p.CodVen = (short)codVendedor; p.CodCli = (int)codCliente; p.CodTipMov = Convert.ToInt16(CodTipMov); p.NumPedWeb = NumPedWeb; p.NumPed = NumPed; //Agora buscando de forma diferente p.CodPgt = (short)codCondPagto; p.CodFrmPgt = (short)codFormaPagto; /*Alterado forma de pegar tabela de preco. Agora pega da combo, pois pode ser diferente do padrao configurado no sigma - Regras alteradas por solicitacao do cliente Bagetti - 13/03/2013 - Fabiano p.CodigoTab = Convert.ToInt16(pr.CodTipPrc); p.CodPrzTab = Convert.ToInt16(pr.CodTipPrz); */ p.CodigoTab = (short)CodPrc_Tab; p.CodPrzTab = (short)CodPrz_Tab; p.Obs = observacao; p.Vlrtot = (decimal)produtos.Sum(p2 => p2.TotalParcial) - ((decimal)produtos.Sum(p2 => p2.TotalParcial) * DescontoPedido/100); p.NomUsu = u.NomUsu; p.Usuario = u.NomUsu; p.VlrSubTot = (decimal)produtos.Sum(p2 => p2.TotalParcial); p.VlrDes1 = ((decimal)produtos.Sum(p2 => p2.TotalParcial) * DescontoPedido / 100); p.PesoLiq = 0; //produtos.ForEach(prood => p.PesoLiq += dcdc.SERVMERCs.SingleOrDefault(sm => sm.CodServMerc == prood.Codigo).PesoLiq * prood.Quantidade); //produtos.ForEach(prood => p.PesoLiq += Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", dcdc.SERVMERCs.SingleOrDefault(sm => sm.CodServMerc == prood.Codigo).PesoLiq)) * prood.Quantidade); //produtos.ForEach(prood => p.PesoBruto += dcdc.SERVMERCs.SingleOrDefault(sm => sm.CodServMerc == prood.Codigo).PesoBruto * prood.Quantidade); //produtos.ForEach(prood => p.PesoBruto += Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", dcdc.SERVMERCs.SingleOrDefault(sm => sm.CodServMerc == prood.Codigo).PesoBruto)) * prood.Quantidade); string sValidaIPI = "", sIncidenciaDescBaseIpi=""; /*51667 - BIERHOFF*/ r = csBanco.Query("SELECT CALCULAIPI, CALCIPIDESC FROM NATOPER WHERE CODIGO = " + iCodTipMov); if (r.Read()) { sValidaIPI = r["CALCULAIPI"].ToString(); sIncidenciaDescBaseIpi = r["CALCIPIDESC"].ToString(); } r.Close(); //<<51667 decimal cQtdTributavel = 0; decimal cVlrTributavel = 0; decimal cVlrIpi = 0; decimal cVlrPis = 0; decimal cVlrCofins = 0; decimal cQtdEmb = 0; decimal cPercIpi = 0; //<<51667 dcdc.PEDIDOs.InsertOnSubmit(p); foreach (ProdutoResumido produto in produtos) { ITENSPED itped = new ITENSPED(); /* Verifica qual unidade de venda * 0 = Menor Unidade (Padrão) * 2 = Maior Unidade (Selecionada pelo usuário) */ int iUniVend = produto.UnidadeVenda == "0" ? 0 : 2; itped.Consignacao = 'N'; itped.Itp_CodTabPrz = produto.Itp_CodTabPrz; itped.Reserva = Convert.ToChar(pr.SaldoPed); itped.CodEmp = (short)codEmp; itped.Qtd = (decimal)produto.Quantidade; itped.Item = (short)(produtos.IndexOf(produto) + 1); itped.CodServMerc = produto.Codigo; //Comissao Tabela de Preco r = csBanco.Query("SELECT COMISSAO, FATOR FROM FATORES WHERE CODSERVMERC = " + produto.Codigo + " AND CodTipPrc = " + CodPrc_Tab + " AND CodTipPrz = " + produto.Itp_CodTabPrz + ""); decimal dComissaoTabela=0; if (r.Read()) { dComissaoTabela = Convert.ToDecimal(r["COMISSAO"].ToString()); } r.Close(); itped.NumPed = NumPed; //SERVMERC servMercadoria = dcdc.SERVMERCs.SingleOrDefault(sm => sm.CodServMerc == produto.Codigo); r = csBanco.Query("SELECT QTDEMB, VALORPIS, VALORCOFINS, IPI, SERV_VALORIPI, PercDesc, Aliquota, Saldo, PesoLiq, PesoBruto FROM SERVMERC WHERE CODSERVMERC = " + produto.Codigo + ""); if (r.Read()) { itped.DescMax = Convert.ToDecimal(r["PercDesc"].ToString()); itped.Aliquota = Convert.ToDecimal(r["Aliquota"].ToString()); itped.Saldo = (decimal)(Convert.ToDecimal(r["Saldo"].ToString()) - (decimal)produto.Quantidade); //Bug com LinqToSql , tivemos que fazer calculo manualmente... var cLiq = Convert.ToDecimal(r["PesoLiq"].ToString()); p.PesoLiq += cLiq * produto.Quantidade; var cBruto = Convert.ToDecimal(r["PesoBruto"].ToString()); p.PesoBruto += cBruto * produto.Quantidade; //<<51667 cPercIpi = Convert.ToDecimal(r["IPI"] == null ? "0" : r["IPI"].ToString()); cVlrIpi = Convert.ToDecimal(r["SERV_VALORIPI"] == null ? "0" : r["SERV_VALORIPI"].ToString()); cVlrPis = Convert.ToDecimal(r["VALORPIS"].ToString() == "" ? "0" : r["VALORPIS"].ToString()); cVlrCofins = Convert.ToDecimal(r["VALORCOFINS"].ToString() == "" ? "0" : r["VALORCOFINS"].ToString()); cQtdEmb = Convert.ToDecimal(r["QTDEMB"].ToString() == "" ? "0" : r["QTDEMB"].ToString()); //<<51667 } r.Close(); cPesoTotal = cPesoTotal + produto.Peso; itped.VlrProm = 0; itped.UniVenda = (short)iUniVend; if (produto.QtdCaixa == 0) { produto.QtdCaixa = 1; } //Maior e menor unidade decimal cQtdSolicitada = (Convert.ToDecimal(produto.Quantidade) / Convert.ToDecimal(produto.QtdCaixa)); //String.Format("{0:" + Funcoes.Decimais(pr) + "}", products.Sum(p => p.TotalParcial)); //itped.VlrUni = iUniVend == 2 ? (double)(Convert.ToDecimal(produto.Preco) / Convert.ToDecimal(produto.Quantidade)) : (double)produto.Preco; //itped.VlrReal = iUniVend == 2 ? (decimal)produto.Preco / cQtdSolicitada : (decimal)produto.Preco; //itped.VLRUNIVENDA = iUniVend == 2 ? (double)produto.Preco / (double)cQtdSolicitada : (double)produto.Preco; //itped.QTDUNIVENDA = iUniVend == 2 ? cQtdSolicitada : produto.Quantidade; //if (iUniVend == 2) //{ // itped.VLRUNIVENDALIQ = ((double)produto.Preco / (double)cQtdSolicitada) - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (((double)produto.Preco / (double)cQtdSolicitada) * ((double)produto.Desconto / 100)))); //} //else //{ // itped.VLRUNIVENDALIQ = (double)produto.Preco - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", ((double)produto.Preco * (double)produto.Desconto / 100))); //} //49199 string sPrecoUnitario, sPrecoUnitarioReal, sPrecoUnitarioOriginal; decimal dValorUnitarioLiq; if (iUniVend == 2) { sPrecoUnitario = String.Format("{0:" + Funcoes.Decimais(pr) + "}", (double)(Convert.ToDecimal(produto.Preco) / Convert.ToDecimal(produto.Quantidade))); sPrecoUnitarioReal = String.Format("{0:" + Funcoes.Decimais(pr) + "}", (decimal)produto.Preco / cQtdSolicitada); sPrecoUnitarioOriginal = String.Format("{0:" + Funcoes.Decimais(pr) + "}", (decimal)produto.PrecoReal / cQtdSolicitada); } else { sPrecoUnitario = String.Format("{0:" + Funcoes.Decimais(pr) + "}", (double)produto.Preco); sPrecoUnitarioReal = sPrecoUnitario; sPrecoUnitarioOriginal = String.Format("{0:" + Funcoes.Decimais(pr) + "}", (double)produto.PrecoReal); } itped.ValorIpi = 0; itped.BASEIPI = 0; itped.ALIQIPI = 0; itped.IPIUNIVENDA = 0; /*51954*///Calcular o Valor unitario liquido antes do calculo da Qtd e Vlr tributavel IPI if (iUniVend == 2) { //itped.VLRUNIVENDALIQ = ((double)produto.Preco / (double)cQtdSolicitada) - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (((double)produto.Preco / (double)cQtdSolicitada) * ((double)produto.Desconto / 100)))); dValorUnitarioLiq = (Convert.ToDecimal(sPrecoUnitarioReal) - (Convert.ToDecimal(sPrecoUnitarioReal) * produto.Desconto / 100)); } else { //itped.VLRUNIVENDALIQ = (double)produto.Preco - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", ((double)produto.Preco * (double)produto.Desconto / 100))); dValorUnitarioLiq = (Convert.ToDecimal(sPrecoUnitario) - (Convert.ToDecimal(sPrecoUnitario) * produto.Desconto / 100)); } dValorUnitarioLiq = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", dValorUnitarioLiq)); //>>51667 //51954 - Considerar o valor unitario liquido. if (sValidaIPI == "S") { /* Se valida IPI */ if (cPercIpi <= 0) /* Se percentual do IPI for zero, considerar valor*/ { cVlrTributavel = Convert.ToDecimal(dValorUnitarioLiq) / (cQtdEmb == 0 ? 1 : cQtdEmb); cQtdTributavel = (decimal)itped.Qtd * (cQtdEmb == 0 ? 1 : cQtdEmb); /*51827*/ if (cVlrIpi > 0) /* Se houver valor de IPI no cadastro da mercadoria*/ { //itped.ValorIpi = cQtdTributavel * cVlrIpi; /*Tratar casas decimais*/ itped.ValorIpi = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (cQtdTributavel * cVlrIpi))); itped.BASEIPI = (decimal)itped.Qtd * Convert.ToDecimal(dValorUnitarioLiq); itped.ALIQIPI = 0; itped.IPIUNIVENDA = itped.ValorIpi; } } else if (cPercIpi > 0) /* Existe Percentual IPI */ { cVlrTributavel = Convert.ToDecimal(dValorUnitarioLiq); cQtdTributavel = (decimal)itped.Qtd; /*51827*/ itped.BASEIPI = cQtdTributavel * Convert.ToDecimal(dValorUnitarioLiq); //itped.ValorIpi = ((itped.BASEIPI * cPercIpi) / 100); /*Tratar casas decimais*/ itped.ValorIpi = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", ((itped.BASEIPI * cPercIpi) / 100))); itped.IPIUNIVENDA = itped.ValorIpi; /* Verificar incidencias sobre base IPI ?*/ itped.ALIQIPI = cPercIpi; } if (sIncidenciaDescBaseIpi.Equals("S")) { itped.BASEIPI = itped.BASEIPI - Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (itped.BASEIPI * DescontoPedido / 100))); } /*51827*/ if (varCLIE_IPISuspenso.Equals("S")) /* Se cliente for suspenso IPI, zera valores calculados*/ { itped.ValorIpi = 0; itped.BASEIPI = 0; itped.ALIQIPI = 0; itped.IPIUNIVENDA = 0; } } /*Não validad IPI*/ else { if (cVlrPis > 0 || cVlrCofins > 0) { cVlrTributavel = Convert.ToDecimal(dValorUnitarioLiq) / (cQtdEmb == 0 ? 1 : cQtdEmb); cQtdTributavel = (decimal)itped.Qtd * (cQtdEmb == 0 ? 1 : cQtdEmb); } else { cVlrTributavel = Convert.ToDecimal(dValorUnitarioLiq); cQtdTributavel = (decimal)itped.Qtd; } } itped.QTDTRIBUTAVEL = cQtdTributavel; itped.VLRTRIBUTAVEL = cVlrTributavel; //<<51667 itped.VlrUni = Convert.ToDouble(sPrecoUnitario); //itped.VlrReal = Convert.ToDecimal(sPrecoUnitarioReal); itped.VlrReal = Convert.ToDecimal(sPrecoUnitarioOriginal); itped.VLRUNIVENDA = Convert.ToDouble(sPrecoUnitarioReal); itped.QTDUNIVENDA = iUniVend == 2 ? cQtdSolicitada : produto.Quantidade; /*51954*/ //if (iUniVend == 2) //{ // //itped.VLRUNIVENDALIQ = ((double)produto.Preco / (double)cQtdSolicitada) - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (((double)produto.Preco / (double)cQtdSolicitada) * ((double)produto.Desconto / 100)))); // dValorUnitarioLiq = (Convert.ToDecimal(sPrecoUnitarioReal) - (Convert.ToDecimal(sPrecoUnitarioReal) * produto.Desconto / 100)); //} //else //{ // //itped.VLRUNIVENDALIQ = (double)produto.Preco - Convert.ToDouble(String.Format("{0:" + Funcoes.Decimais(pr) + "}", ((double)produto.Preco * (double)produto.Desconto / 100))); // dValorUnitarioLiq = (Convert.ToDecimal(sPrecoUnitario) - (Convert.ToDecimal(sPrecoUnitario) * produto.Desconto / 100)); //} //dValorUnitarioLiq = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", dValorUnitarioLiq)); itped.VLRUNIVENDALIQ = Convert.ToDouble(dValorUnitarioLiq); itped.QtdCan = 0; itped.QTDCANUNIVENDA = 0; itped.QtdTroca = 0; itped.VlrDes = produto.Desconto; //FABIANO - 07/10/2011 itped.ValorDesconto = 0; itped.VlrDescRateio = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (((decimal)itped.VLRUNIVENDALIQ * DescontoPedido / 100) * (decimal)itped.Qtd))); itped.PerDescRateio = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", DescontoPedido)); itped.PercDescGordura = 0; itped.VLRADICIONAL = 0; itped.VLREMBALAGEM = 0; itped.VlrComiss = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (decimal)ClasseComissao.CalculaComissao(pr, Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", iUniVend == 2 ? (double)(Convert.ToDecimal(itped.VLRUNIVENDALIQ) / Convert.ToDecimal(produto.QtdCaixa)) : (double)itped.VLRUNIVENDALIQ)), (decimal)itped.Qtd, 0, 0, comissao_vendedor, dComissaoTabela, produto.Comissao, produto.Comissao, "N", 0, 0, produto.Comissao, (decimal)comissao_televend, (Int16)iIncideVend, (Int16)iIncideTelev, (Int32)produto.Codigo, produto.Desconto))); itped.ComissaoUsada = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (decimal)ClasseComissao.ComissaoUsada)); //VALOR DA COMISSAO TELEVENDEDOR itped.COMISSAOTELEV = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", (decimal)ClasseComissao.CalculaComissao(pr, Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", iUniVend == 2 ? (double)(Convert.ToDecimal(itped.VLRUNIVENDALIQ) / Convert.ToDecimal(produto.QtdCaixa)) : (double)itped.VLRUNIVENDALIQ)), (decimal)itped.Qtd, 0, 0, comissao_vendedor, dComissaoTabela, produto.ComissaoTel, produto.Comissao, "T", 0, 0, produto.Comissao, (decimal)comissao_televend, (Int16)iIncideVend, (Int16)iIncideTelev, (Int32)produto.Codigo, produto.Desconto))); itped.COMISSAOUSADATELEV = (decimal)ClasseComissao.ComissaoUsadaTele; itped.FatorComiss = (decimal)ClasseComissao.FatorDesconto; TotalComissao += (decimal)itped.VlrComiss; TotalComissaoTelev += (decimal)itped.COMISSAOTELEV; dcdc.ITENSPEDs.InsertOnSubmit(itped); } p.Comissao = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", TotalComissao)); //Valor da comissao VENDEDOR p.COMISSAOTELEV = Convert.ToDecimal(String.Format("{0:" + Funcoes.Decimais(pr) + "}", TotalComissaoTelev)); //Valor da comissao do TELEVENDEDOR (OU SEGUNDO VENDEDOR) //p.PesoBruto = cPesoTotal; //p.PesoLiq = cPesoTotal; dcdc.SubmitChanges(); dcdc.Dispose(); return NumPed; } catch (Exception ex) { if (!String.IsNullOrEmpty(ex.Message)) { throw new Exception(ex.Message); } else { return -1; } } }
partial void UpdateITENSPED(ITENSPED instance);
partial void DeleteITENSPED(ITENSPED instance);
partial void InsertITENSPED(ITENSPED instance);