Пример #1
0
        public static void EnviaSMSAdministradores()
        {
            if (!FilaSmsDAO.Instance.PodeEnviarSmsAdmin())
            {
                return;
            }

            var func = FuncionarioDAO.Instance.GetAdministradores(false);

            if (func.Count == 0)
            {
                return;
            }

            var lstParam = new List <GDA.GDAParameter>
            {
                new GDA.GDAParameter("?dataIni", Geral.DataInicioEnvioSMSEmailAdministradores),
                new GDA.GDAParameter("?dataFim", Geral.DataFimEnvioSMSEmailAdministradores)
            };

            var reposicaoGarantia = EmailConfig.ConsiderarReposicaoGarantiaTotalPedidosEmitidos
                ? string.Empty :
                                    string.Format("AND TipoVenda NOT IN ({0},{1})", (int)Pedido.TipoVendaPedido.Garantia, (int)Pedido.TipoVendaPedido.Reposição);

            // Busca os dados para a mensagem, sem considerar pedidos de produção
            var sqlTotalPedidos =
                string.Format(@"select sum({0}) from pedido p
                    Inner Join Cliente c ON (p.IdCli = c.Id_Cli) where IFNULL(c.IgnorarNoSmsResumoDiario, false) = false AND 
                    p.situacao<>{1} and p.dataCad>=?dataIni and p.dataCad<=?dataFim and p.tipoPedido<>{2} {3}",
                              "{0}", (int)Pedido.SituacaoPedido.Cancelado, (int)Pedido.TipoPedidoEnum.Producao, "{1}");

            // Se houver alteração neste sql, altera também no envio do email para os administradores
            decimal totalPedidos = PedidoDAO.Instance.ExecuteScalar <decimal>(string.Format(sqlTotalPedidos, "total", reposicaoGarantia), lstParam.ToArray());

            double totMPedidos = PedidoDAO.Instance.ExecuteScalar <double>(string.Format(sqlTotalPedidos, "totM", reposicaoGarantia), lstParam.ToArray());

            var idsSetorPronto = SetorDAO.Instance.GetValoresCampo("Select idSetor From setor Where tipo=" + (int)TipoSetor.Pronto, "idSetor");

            // Cálculo de peças prontas baseadas em roteiro
            var totMPronto = ProducaoDAO.Instance.ExecuteScalar <double>(@"
                SELECT SUM(ppe.totM/ppe.qtde) 
                FROM produtos_pedido_espelho ppe
                INNER JOIN (
	                SELECT ppp.idprodped
	                FROM roteiro_producao_etiqueta rpe
		                INNER JOIN setor s ON (rpe.idSetor=s.idSetor and ultimosetor=1)
		                INNER JOIN leitura_producao lp ON (rpe.idProdPedProducao=lp.idProdPedProducao and rpe.idSetor=lp.idSetor)
		                INNER JOIN produto_pedido_producao ppp ON (ppp.idProdPedProducao=lp.idProdPedProducao)
	                WHERE DATE(lp.dataLeitura)>=?dataIni AND DATE(lp.dataLeitura)<=?dataFim
                ) AS tbl ON (ppe.idProdPed=tbl.IdProdPed)", lstParam.ToArray());

            // Cálculo de peças prontas baseada em setor pronto (se a empresa tiver)
            if (!string.IsNullOrEmpty(idsSetorPronto))
            {
                totMPronto += ProducaoDAO.Instance.ExecuteScalar <double>(string.Format(@"
                    SELECT SUM(ppe.totM/ppe.qtde) 
                    FROM produtos_pedido_espelho ppe
                    INNER JOIN (
	                    SELECT ppp.idprodped
	                    FROM leitura_producao lp
		                    INNER JOIN produto_pedido_producao ppp ON (ppp.idProdPedProducao=lp.idProdPedProducao)
	                    WHERE DATE(lp.dataLeitura)>=?dataIni AND DATE(lp.dataLeitura)<=?dataFim
		                    AND lp.IdSetor In ({0})
                    ) AS tbl ON (ppe.idProdPed=tbl.IdProdPed)", idsSetorPronto), lstParam.ToArray());
            }

            decimal totalLiberados = LiberarPedidoDAO.Instance.ExecuteScalar <decimal>
                                         (@"select sum(total) from liberarpedido lp
                   Inner Join Cliente c ON (lp.IdCliente = c.Id_Cli) where IFNULL(c.IgnorarNoSmsResumoDiario, false) = false AND lp.situacao=" +
                                         (int)LiberarPedido.SituacaoLiberarPedido.Liberado + " and lp.dataLiberacao>=?dataIni and lp.dataLiberacao<=?dataFim", lstParam.ToArray());

            // Verifica se será enviado SMS hoje
            // Só envia se houver algum dado para enviar
            if (totalPedidos == 0 && totMPedidos == 0 && totMPronto == 0 && totalLiberados == 0)
            {
                FilaSmsDAO.Instance.MarcaNaoEnviar();
                Erro msg = new Erro
                {
                    IdFuncErro = UserInfo.GetUserInfo.CodUser,
                    DataErro   = DateTime.Now,
                    UrlErro    = "MarcarNaoEnviarSMSAdmin"
                };
                ErroDAO.Instance.Insert(msg);
                return;
            }

            string mensagem = String.Format("Resumo diario WebGlass{0}. Ped. emitidos: " + totalPedidos.ToString("C") +
                                            " (" + totMPedidos.ToString("0.##") + "m2). m2 pronto: " + totMPronto.ToString("0.##") +
                                            "m2. Faturado: " + totalLiberados.ToString("C"), Configuracoes.Geral.TextoAdicionalSMS);

            foreach (Funcionario f in func)
            {
                // Se não tiver celular cadastrado para este administrador, apenas não envia SMS
                if (String.IsNullOrEmpty(f.TelCel))
                {
                    continue;
                }

                while (f.TelCel.Contains(" "))
                {
                    f.TelCel = f.TelCel.Replace(" ", "");
                }

                f.TelCel = f.TelCel.Replace("(", "").Replace(")", "").Replace("-", "");

                var codSMS = DateTime.Now.DayOfYear.ToString() + DateTime.Now.Year.ToString() + DateTime.Now.Hour.ToString() + f.IdFunc;

                SMS.EnviaSMSAsync(codSMS, "WebGlass", f.TelCel, mensagem, true);
            }
        }