/// <summary> /// Retorna os funcionários para um determinado filtro. /// </summary> /// <param name="tipo"></param> /// <param name="dataIni"></param> /// <param name="dataFim"></param> /// <returns></returns> public KeyValuePair <uint, string>[] GetFuncionarios(string tipo, string dataIni, string dataFim, int tabela, string campo) { if (String.IsNullOrEmpty(tipo)) { return new KeyValuePair <uint, string>[] { new KeyValuePair <uint, string>(0, "Todos (selecione um Tipo)") } } ; DadosFiltro <uint, string>[] filtros = GetFiltro <uint, string>("f.idFunc", "f.nome", tipo, dataIni, dataFim, tabela, campo, 0, true, false); List <KeyValuePair <uint, string> > retorno = new List <KeyValuePair <uint, string> >(); foreach (DadosFiltro <uint, string> f in filtros) { retorno.Add(new KeyValuePair <uint, string>(f.Valor, BibliotecaTexto.GetTwoFirstNames(f.Descricao))); } retorno.Sort(new Comparison <KeyValuePair <uint, string> >( delegate(KeyValuePair <uint, string> x, KeyValuePair <uint, string> y) { return(x.Key > 0 ? x.Value.CompareTo(y.Value) : x.Key.CompareTo(y.Key)); } )); return(retorno.ToArray()); }
/// <summary> /// Texto impresso no rodape do relatório /// </summary> public static string TextoRodapeRelatorio(string nomeFuncionario, bool incluirData) { return (string.Format("WebGlass v{0} - Relatório impresso por {1}{2}", ObtemVersao(), BibliotecaTexto.GetTwoFirstNames(nomeFuncionario), incluirData ? string.Format(" em {0}", DateTime.Now.ToString("dd/MM/yyyy HH:mm")) : string.Empty)); }
/// <summary> /// Envia SMS de pedido pronto /// </summary> public static void EnviaSMSPedidoPronto(GDASession session, uint idPedido) { bool exibirM2 = PedidoConfig.EnviarTotM2SMSPedidoPronto; uint idCli = PedidoDAO.Instance.ObtemIdCliente(session, idPedido); // Verifica se o cliente não recebe SMS if (ClienteDAO.Instance.NaoRecebeSMS(session, idCli)) { return; } // Se o sms já tiver sido enviado, ignora. if (FilaSmsDAO.Instance.MensagemJaEnviada(session, "nosso numero " + idPedido)) { return; } // Se for pedido importado de outro sistema, envia o SMS para o cliente original, ou seja, o cliente da empresa que exportou // o pedido para esta empresa, caso contrário, envia para o cliente deste pedido mesmo. var celCliente = !PedidoDAO.Instance.IsPedidoImportado(session, idPedido) ? ClienteDAO.Instance.ObtemCelEnvioSMS(session, idCli) : PedidoDAO.Instance.ObtemCelCliExterno(session, idPedido); if (String.IsNullOrEmpty(celCliente)) { throw new Exception("O número do celular do cliente não foi informado."); } while (celCliente.Contains(" ")) { celCliente = celCliente.Replace(" ", ""); } celCliente = celCliente.Replace("(", "").Replace(")", "").Replace("-", ""); // Deve considerar que em São Paulo são 9 dígitos fora o DDD if (celCliente.Length < 10 || celCliente.Length > 11) { throw new Exception("O número do celular do cliente informado é inválido."); } uint idLoja = PedidoDAO.Instance.ObtemIdLoja(session, idPedido); string codCliente = PedidoDAO.Instance.ObtemValorCampo <string>(session, "codCliente", "idPedido=" + idPedido); decimal totalPedido = PedidoEspelhoDAO.Instance.ObtemValorCampo <decimal>(session, "total", "idPedido=" + idPedido); float totM = PedidoEspelhoDAO.Instance.ObtemTotM2(session, idPedido); float peso = PedidoEspelhoDAO.Instance.ObtemPeso(session, idPedido); string nomeLoja = BibliotecaTexto.GetTwoFirstNames(LojaDAO.Instance.GetNome(session, idLoja)); // Se for pedido importado, exibe o nome do cliente (loja filial) ao enviar o SMS if (OrdemCargaConfig.ControlarPedidosImportados && PedidoDAO.Instance.IsPedidoImportado(session, idPedido)) { nomeLoja = BibliotecaTexto.GetTwoFirstNames(ClienteDAO.Instance.GetNome(session, idCli)); totalPedido = PedidoDAO.Instance.ObtemValorCampo <decimal>(session, "TotalPedidoExterno", "idPedido=" + idPedido); } var mensagem = TextoSMSPedidoPronto((int)idPedido, codCliente, ref nomeLoja, totalPedido, exibirM2, (decimal)totM, peso); EnviaSMSAsync(session, idPedido.ToString() + idCli, nomeLoja, celCliente, mensagem, false); }
//private GraficoVendasDAO() { } /// <summary> /// /// </summary> /// <param name="idLoja"></param> /// <param name="idVendedor"></param> /// <param name="dataIni"></param> /// <param name="dataFim"></param> /// <param name="agrupar"></param> /// <param name="series">Se verdadeiro, busca apenas séries (do gráfico), senão busca todos os dados</param> /// <returns></returns> public GraficoVendas[] GetVendas(uint idLoja, int tipoFunc, uint idVendedor, uint idCli, string nomeCliente, string dataIni, string dataFim, int agrupar, bool series) { string data = PedidoConfig.LiberarPedido ? "DataLiberacao" : "DataConf"; bool temFiltro; string filtroAdicional; var login = UserInfo.GetUserInfo; var cliente = login.IsCliente; var administrador = login.IsAdministrador; var emitirGarantia = Config.PossuiPermissao(Config.FuncaoMenuPedido.EmitirPedidoGarantia); var emitirReposicao = Config.PossuiPermissao(Config.FuncaoMenuPedido.EmitirPedidoReposicao); var emitirPedidoFuncionario = Config.PossuiPermissao(Config.FuncaoMenuPedido.EmitirPedidoFuncionario); string sql = PedidoDAO.Instance.SqlRptSit(0, "", 0, null, null, idCli.ToString(), nomeCliente, 0, (idLoja > 0 ? idLoja.ToString() : null), (int)Pedido.SituacaoPedido.Confirmado + "," + (int)Pedido.SituacaoPedido.LiberadoParcialmente, dataIni, dataFim, null, null, null, null, 0, 0, null, 0, 0, 0, null, null, 0, null, null, false, false, false, null, null, 0, null, null, 0, 0, null, null, null, null, false, 0, 0, true, false, false, true, out temFiltro, out filtroAdicional, 0, null, 0, true, 0, null, cliente, administrador, emitirGarantia, emitirReposicao, emitirPedidoFuncionario).Replace("?filtroAdicional?", filtroAdicional); string criterio = String.Empty; sql = @" Select p.idLoja, p.idFunc" + (tipoFunc == 0 ? "" : "Cliente") + @" as idFunc, cast(Sum(p.Total) as decimal(12,2)) as TotalVenda, NomeFunc" + (tipoFunc == 0 ? "" : "Cliente") + " as NomeVendedor, NomeLoja, (Right(Concat('0', Cast(Month(p." + data + ") as char), '/', Cast(Year(p." + data + @") as char)), 7)) as DataVenda, p.idCli as idCliente, NomeCliente, '$$$' as Criterio From (" + sql + @") as p Where 1"; if (idLoja > 0) { criterio += "Loja: " + LojaDAO.Instance.GetNome(idLoja) + " "; } if (idVendedor > 0) { sql += " And p.idFunc" + (tipoFunc == 0 ? "" : "Cliente") + "=" + idVendedor; criterio += (tipoFunc == 0 ? "Emissor" : "Vendedor") + ": " + BibliotecaTexto.GetTwoFirstNames(FuncionarioDAO.Instance.GetNome(idVendedor)) + " "; } if (idCli > 0) { criterio += "Cliente: " + ClienteDAO.Instance.GetNome(idCli) + " "; } else if (!String.IsNullOrEmpty(nomeCliente)) { criterio += "Cliente: " + nomeCliente + " "; } if (!String.IsNullOrEmpty(dataIni)) { criterio += "Data Início: " + dataIni + " "; } if (!String.IsNullOrEmpty(dataFim)) { criterio += "Data Fim: " + dataFim + " "; } // Agrupar por loja if (agrupar == 1) { sql += " Group By p.idLoja"; if (!series) { sql += ", (Right(Concat('0', Cast(Month(p." + data + ") as char), '/', Cast(Year(p." + data + ") as char)), 7))"; } sql += " Order By NomeLoja"; } // Agrupar por vendedor else if (agrupar == 2) { sql += " Group By p.idFunc" + (tipoFunc == 0 ? "" : "Cliente"); if (!series) { sql += ", (Right(Concat('0', Cast(Month(p." + data + ") as char), '/', Cast(Year(p." + data + ") as char)), 7))"; } sql += " Having sum(p.Total) > 500"; sql += " Order By NomeFunc" + (tipoFunc == 0 ? "" : "Cliente"); } else // Nenhum { if (!series) { sql += " Group By (Right(Concat('0', Cast(Month(p." + data + ") as char), '/', Cast(Year(p." + data + ") as char)), 7))"; } } return(objPersistence.LoadData(sql.Replace("$$$", criterio), GetParams(dataIni, dataFim, nomeCliente)).ToList().ToArray()); }
//private GraficoProdutosDAO() { } /// <summary> /// Retorna os dados para o gráfico de produtos mais vendidos /// </summary> public GraficoProdutos[] GetMaisVendidos(uint idLoja, uint idVendedor, int idCliente, string nomeCliente, uint idGrupoProd, uint idSubgrupoProd, int quantidade, int tipo, string dataIni, string dataFim, string codInternoMP, string descrMP, bool apenasMP) { var tipoCalcM2 = (int)TipoCalculoGrupoProd.M2 + "," + (int)TipoCalculoGrupoProd.M2Direto + "," + (int)TipoCalculoGrupoProd.Perimetro + "," + (int)TipoCalculoGrupoProd.QtdM2; var qtde = "if(tipoCalc in (" + tipoCalcM2 + @"), sum(totalM2), sum(totalQtdeLong))"; var campos = @"p.idProd, p.descricao as DescrProduto, p.idFunc, cast(Sum(p.TotalVend) as decimal(12,2)) as TotalVenda, (Right(Concat('0', Cast(Month(dataFiltro) as char), '/', Cast(Year(dataFiltro) as char)), 7)) as DataVenda, '$$$' as Criterio, (" + qtde + ") as totalQtde, cast(" + tipo + " as signed) as tipo"; var criterio = string.Empty; var lstParam = new List <GDAParameter>(); // Se for para buscar apenas matéria-prima busca apenas produtos que são matéria-prima (ignora codInternoMP e descrMP) // Senão busca por produtos que tenham como matéria-prima o produto indicado var tipoBuscaMP = apenasMP ? ProdutoDAO.TipoBuscaMateriaPrima.ApenasProdutoMateriaPrima : ProdutoDAO.TipoBuscaMateriaPrima.ApenasMateriaPrima; var sql = @" Select " + campos + @" From (" + ProdutoDAO.Instance.SqlVendasProd((uint)idCliente, nomeCliente, null, idLoja.ToString(), idGrupoProd.ToString(), idSubgrupoProd.ToString(), codInternoMP, descrMP, tipoBuscaMP, dataIni, dataFim, null, null, null, null, ((int)Pedido.SituacaoPedido.Confirmado).ToString(), null, null, null, idVendedor, 0, 0, 0, 0, false, false, false, false, false, 0, 0, null, null, ref lstParam, true) + @") as p Where 1"; if (idLoja > 0) { criterio += "Loja: " + LojaDAO.Instance.GetNome(idLoja) + " "; } if (idVendedor > 0) { criterio += "Vendedor: " + BibliotecaTexto.GetTwoFirstNames(FuncionarioDAO.Instance.GetNome(idVendedor)) + " "; } if (idCliente > 0 || !string.IsNullOrEmpty(nomeCliente)) { criterio += string.Format("Cliente: {0} ", idCliente == 0 ? nomeCliente : ClienteDAO.Instance.GetNome((uint)idCliente)); } if (idGrupoProd > 0) { criterio += "Grupo: " + GrupoProdDAO.Instance.GetDescricao((int)idGrupoProd) + " "; } if (idSubgrupoProd > 0) { criterio += "Subgrupo: " + SubgrupoProdDAO.Instance.GetDescricao((int)idSubgrupoProd) + " "; } if (!String.IsNullOrEmpty(dataIni)) { criterio += "Data Início: " + dataIni + " "; } if (!String.IsNullOrEmpty(dataFim)) { criterio += "Data Fim: " + dataFim + " "; } var campoTipo = tipo == 1 ? "totalQtde" : "totalVenda"; sql += " group by idProd order by " + campoTipo + " desc limit " + quantidade; var lista = new List <GraficoProdutos>(); if (lstParam != null) { lista = objPersistence.LoadData(sql.Replace("$$$", criterio), lstParam.ToArray()); } else { lista = objPersistence.LoadData(sql.Replace("$$$", criterio)); } return(lista.ToArray()); }
/// <summary> /// Texto impresso no rodape do relatório /// </summary> /// <param name="nomeFuncionario"> nome do funcionário que imprimiu o relatório </param> /// <returns></returns> public static string TextoRodapeRelatorio(string nomeFuncionario) { return("WebGlass v" + Glass.Configuracoes.Geral.ObtemVersao() + " - Relatório impresso por " + BibliotecaTexto.GetTwoFirstNames(nomeFuncionario) + " em " + DateTime.Now.ToString("dd/MM/yyyy HH:mm")); }
//private GraficoOrcamentosDAO() { } /// <summary> /// /// </summary> /// <param name="idLoja"></param> /// <param name="idVendedor"></param> /// <param name="dataIni"></param> /// <param name="dataFim"></param> /// <param name="agrupar"></param> /// <param name="series">Se verdadeiro, busca apenas séries (do gráfico), senão busca todos os dados</param> /// <returns></returns> public IList <GraficoOrcamentos> GetOrcamentos(uint idLoja, uint idVendedor, IEnumerable <int> situacao, string dataIni, string dataFim, int agrupar, bool series) { string data = agrupar != 3 ? "DataCad" : "DataSituacao"; string campos = @"o.idLoja, o.idFunc, cast(Sum(o.Total) as decimal(12,2)) as TotalVenda, f.Nome as NomeVendedor, coalesce(l.nomeFantasia, l.razaoSocial) as NomeLoja, (Right(Concat('0', Cast(Month(o." + data + ") as char), '/', Cast(Year(o." + data + @") as char)), 7)) as DataVenda, o.situacao, '$$$' as Criterio"; string criterio = String.Empty; string sql = @" Select " + campos + @" From orcamento o left join funcionario f On (o.idFunc=f.idFunc) left join loja l on (o.idLoja=l.idLoja) Where 1"; if (idLoja > 0) { sql += " And o.IdLoja=" + idLoja; criterio += "Loja: " + LojaDAO.Instance.GetNome(idLoja) + " "; } if (idVendedor > 0) { sql += " And o.idFunc=" + idVendedor; criterio += "Vendedor: " + BibliotecaTexto.GetTwoFirstNames(FuncionarioDAO.Instance.GetNome(idVendedor)) + " "; } if (situacao != null && situacao.Count() > 0 && situacao.ToList()[0] != 0) { sql += string.Format(" And o.Situacao IN ({0})", string.Join(",", situacao)); criterio += "Situação: " + string.Join(",", situacao.Select(f => Orcamento.GetDescrSituacao(f)).ToList()); } if (!String.IsNullOrEmpty(dataIni)) { sql += " And o." + data + ">=?dataIni"; criterio += "Data Início: " + dataIni + " "; } if (!String.IsNullOrEmpty(dataFim)) { sql += " And o." + data + "<=?dataFim"; criterio += "Data Fim: " + dataFim + " "; } // Agrupar por loja if (agrupar == 1) { sql += " and o.idLoja is not null Group By o.idLoja"; if (!series) { sql += ", (Right(Concat('0', Cast(Month(o." + data + ") as char), '/', Cast(Year(o." + data + ") as char)), 7))"; } sql += " Order By coalesce(l.Nomefantasia, l.razaoSocial)"; } // Agrupar por vendedor else if (agrupar == 2) { sql += " and o.idFunc is not null Group By o.idFunc"; if (!series) { sql += ", (Right(Concat('0', Cast(Month(o." + data + ") as char), '/', Cast(Year(o." + data + ") as char)), 7))"; } sql += " Having sum(o.Total) > 500"; sql += " Order By f.Nome"; } // Agrupar por situação else if (agrupar == 3) { sql += " and o.situacao is not null Group By o.situacao"; if (!series) { sql += ", (Right(Concat('0', Cast(Month(o." + data + ") as char), '/', Cast(Year(o." + data + ") as char)), 7))"; } sql += " Order By o.situacao"; } else // Nenhum { if (!series) { sql += " Group By (Right(Concat('0', Cast(Month(o." + data + ") as char), '/', Cast(Year(o." + data + ") as char)), 7))"; } } return(objPersistence.LoadData(sql.Replace("$$$", criterio), GetParams(dataIni, dataFim)).ToList()); }
protected void Page_Load(object sender, EventArgs e) { Ajax.Utility.RegisterTypeForAjax(typeof(Glass.UI.Web.Cadastros.CadConfirmarPedido)); Ajax.Utility.RegisterTypeForAjax(typeof(MetodosAjax)); hdfDataTela.Value = DateTime.Now.ToString(); if (!IsPostBack && Request["idPedido"] != null) { txtNumPedido.Text = Request["idPedido"]; uint idPedido = Glass.Conversoes.StrParaUint(Request["idPedido"]); // Se o pedido não existir if (!PedidoDAO.Instance.PedidoExists(idPedido)) { grdProdutos.Visible = false; } else { // Busca o pedido Glass.Data.Model.Pedido pedido = PedidoDAO.Instance.GetElementByPrimaryKey(idPedido); // Se o pedido já tiver sido cancelado, esconde os produtos grdProdutos.Visible = pedido.Situacao != Glass.Data.Model.Pedido.SituacaoPedido.Cancelado; if (pedido.Situacao == Glass.Data.Model.Pedido.SituacaoPedido.Ativo) { lblViewConfirm.Text += "Pedido está ativo. Só é possível confirmar pedidos conferidos."; imgImprimir.Visible = false; } // Se o pedido estiver confirmado, mostra quem confirmou e quando if (pedido.Situacao == Glass.Data.Model.Pedido.SituacaoPedido.Confirmado) { lblViewConfirm.Text += "Pedido confirmado"; if (pedido.UsuConf != null) { lblViewConfirm.Text += " por " + BibliotecaTexto.GetTwoFirstNames(FuncionarioDAO.Instance.GetNome((uint)pedido.UsuConf.Value)); } lblViewConfirm.Text += pedido.DataConf != null ? " no dia " + pedido.DataConf.Value.ToString("dd/MM/yy") + ". " : ". "; imgImprimir.Visible = true; } // Vendido para funcionário if (pedido.VendidoFuncionario) { divFunc.Visible = true; divAVista.Visible = false; chkVerificarParcelas.Visible = false; chkVerificarParcelas.Checked = false; btnConfirmarPrazo.Visible = false; tbObra.Visible = false; lblNomeFuncVenda.Text += "Funcionário comprador: " + PedidoDAO.Instance.ObtemNomeFuncVenda(idPedido); } // À Prazo else if (pedido.TipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.APrazo) { // Se tiver sido recebido o sinal, mostra quem recebeu if (pedido.RecebeuSinal) { CaixaDiario caixa = CaixaDiarioDAO.Instance.GetPedidoSinal(pedido.IdPedido); lblViewSinal.Text = "O sinal deste pedido no valor de " + pedido.ValorEntrada.ToString("F2") + " foi recebido por " + caixa.DescrUsuCad + " em " + caixa.DataCad.ToString("dd/MM/yy") + "."; } divAVista.Visible = false; chkVerificarParcelas.Checked = true; btnConfirmarPrazo.Visible = true; divFunc.Visible = false; tbObra.Visible = false; } // À Vista else if (pedido.TipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.AVista) { decimal totalASerPago = pedido.Total; #region Crédito cliente decimal valorCredito = 0; decimal credito = ClienteDAO.Instance.GetCredito(pedido.IdCli); valorCredito = credito; hdfValorCredito.Value = credito.ToString().Replace(',', '.'); hdfIdCliente.Value = pedido.IdCli.ToString(); #endregion divAVista.Visible = true; chkVerificarParcelas.Visible = false; btnConfirmarPrazo.Visible = false; divFunc.Visible = false; tbObra.Visible = false; } else if (pedido.TipoVenda == (int)Glass.Data.Model.Pedido.TipoVendaPedido.Obra) { if (pedido.IdObra != null) { Obra obra = ObraDAO.Instance.GetElementByPrimaryKey(pedido.IdObra.Value); lblDescrObra.Text = obra.Descricao; lblSaldoObra.Text = obra.Saldo.ToString("C"); lblValorPedido.Text = pedido.Total.ToString("C"); hdfValorObra.Value = (pedido.Total - obra.Saldo).ToString(); pagtoObra.Visible = (pedido.Total - obra.Saldo) > 0; hdfIdCliente.Value = obra.IdCliente.ToString(); } divAVista.Visible = false; chkVerificarParcelas.Visible = false; btnConfirmarPrazo.Visible = false; divFunc.Visible = false; tbObra.Visible = true; } if (pedido.Situacao == Glass.Data.Model.Pedido.SituacaoPedido.Confirmado || pedido.Situacao == Glass.Data.Model.Pedido.SituacaoPedido.Ativo) { divAVista.Visible = false; grdProdutos.Visible = true; btnConfirmarPrazo.Visible = false; chkVerificarParcelas.Visible = false; divFunc.Visible = false; tbObra.Visible = false; } } } else if (!IsPostBack) { grdProdutos.Visible = false; } }