private void GetLigacaoNaoFinalizada()
        {
            retorno.SqlExec = "q7"; //busca ligação que iniciou e não teve resultado

            var dados = funcdb.ExecSql("SELECT cc.CODIGO FROM campanhas_clientes cc inner join clientes cli on cli.CODIGO = cc.CLIENTE "
                                       + " WHERE cc.CONCLUIDO = 'SIM' AND coalesce(cc.RESULTADO,0) = 0 AND cc.DATA_HORA_LIG >= 0 "
                                       + "  AND cc.OPERADOR_LIGACAO = " + retorno.id.ToString() + " and cli.ATIVO = 'SIM' LIMIT 1; ");

            if (dados.Count > 0)
            {
                retorno.CODIGO = Convert.ToInt32(dados[0]);
            }
        }
        public IHttpActionResult ConfirmarPedido([FromUri] Pedido dados)
        {
            FuncoesBanco f  = new FuncoesBanco(dblocal);
            var          id = f.ExecSql("select id from SP_GRAVAR_PEDIDO_WEB(" + dados.id + ", " + dados.CodUsr
                                        + ", " + dados.Mesa + ", '" + dados.Total.ToString().Replace(",", ".") + "')");

            if (id != null && id.Count > 0)
            {
                dados.id = Convert.ToInt32(id[0]);
            }

            int ii = 0;

            if (dados.Produtos is string)
            {
                PRODUTO i = JsonConvert.DeserializeObject <PRODUTO>(dados.Produtos);
                f.ExecSql("select id from SP_GRAVAR_PEDIDO_ITEM_WEB(" + dados.id + ", " + dados.CodUsr
                          + ", " + dados.Mesa + ", '" + i.PRODN3VLRVENDA.ToString().Replace(",", ".")
                          + "', " + i.QTD.ToString()
                          + "," + ii
                          + ", " + i.id
                          + ")");
            }
            else
            {
                foreach (dynamic item in dados.Produtos)
                {
                    ii++;
                    PRODUTO i = JsonConvert.DeserializeObject <PRODUTO>(item);
                    f.ExecSql("select id from SP_GRAVAR_PEDIDO_ITEM_WEB(" + dados.id + ", " + dados.CodUsr
                              + ", " + dados.Mesa + ", '" + i.PRODN3VLRVENDA.ToString().Replace(",", ".")
                              + "', " + i.QTD.ToString()
                              + "," + ii
                              + ", " + i.id
                              + ")");
                }
            }

            retorno.id = dados.id;
            return(CreatedAtRoute("DefaultApi", new { id = retorno.id }, retorno));
            // return Ok(retorno);
        }
        private void GetValores(int id, DateTime?datainicial, DateTime?datafinal)
        {
            if (datainicial == null)
            {
                datainicial = DateTime.Now;
            }

            if (datafinal == null)
            {
                datafinal = DateTime.Now;
            }

            var x = " select (AVG(XX.PRODUTIVIDADE)) PRODUTIVIDADE, SUM(XX.DISCADAS) DISCADAS, "
                    + " SUM(XX.CONTATOS) CONTATOS,  AVG(XX.CONTATOS * 100 / XX.DISCADAS) APROVEITAMENTO, SUM(XX.PEDIDOS) PEDIDOS FROM "
                    + " (SELECT ((( (if ((select sum(time_to_sec(cr.LIGACAO_FINALIZADA) - time_to_sec(cr.LIGACAO_RECEBIDA)) "
                    + "          from chamadas_receptivo cr where cr.operador = o.codigo and DATE(cr.LIGACAO_RECEBIDA) between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "        ) + ( "
                    + "          select(sum(time_to_sec(data_hora_fim) - time_to_sec(data_hora_lig))) as tempo_falando "
                    + "            from campanhas_clientes "
                    + "            where "
                    + "          OPERADOR_LIGACAO = o.codigo "
                    + "          and DATE(data_hora_lig)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "        ) "
                    + "        is null,if ( "
                    + "            (select sum(time_to_sec(cr.LIGACAO_FINALIZADA) - time_to_sec(cr.LIGACAO_RECEBIDA)) "
                    + "              from chamadas_receptivo cr "
                    + "             where cr.operador = o.codigo "
                    + "              and DATE(cr.LIGACAO_RECEBIDA)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "            ) is null,(select(sum(time_to_sec(data_hora_fim) - time_to_sec(data_hora_lig))) as tempo_falando "
                    + "            from campanhas_clientes where OPERADOR_LIGACAO = o.codigo "
                    + "          and DATE(data_hora_lig)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "        ),( "
                    + "              select sum(time_to_sec(cr.LIGACAO_FINALIZADA) - time_to_sec(cr.LIGACAO_RECEBIDA)) "
                    + "              from chamadas_receptivo cr "
                    + "              where cr.operador = o.codigo "
                    + "              and DATE(cr.LIGACAO_RECEBIDA)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "            )),( "
                    + "          select sum(time_to_sec(cr.LIGACAO_FINALIZADA) - time_to_sec(cr.LIGACAO_RECEBIDA)) "
                    + "          from chamadas_receptivo cr "
                    + "          where cr.operador = o.codigo "
                    + "          and DATE(cr.LIGACAO_RECEBIDA)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "        ) + ( "
                    + "          select(sum(time_to_sec(data_hora_fim) - time_to_sec(data_hora_lig))) as tempo_falando "
                    + "            from campanhas_clientes  where "
                    + "          OPERADOR_LIGACAO = o.codigo "
                    + "          and DATE(data_hora_lig)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "')))))*100)/ "
                    + "    (if (((select sum(time_to_sec(l.tempo_logado)) as tempo_logado from login_ativo_receptivo l "
                    + "      where "
                    + "        o.codigo = l.operador "
                    + "        and modulo = 'Ativo' "
                    + "        and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "    ) -(( "
                    + "      select sum(ligacoes_ok) "
                    + "      from login_ativo_receptivo l "
                    + "      where modulo ='Ativo' "
                    + "      and l.OPERADOR = o.codigo "
                    + "      and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "       ) *1)) is null,0,(( "
                    + "     select "
                    + "        sum(time_to_sec(l.tempo_logado)) as tempo_logado from login_ativo_receptivo l "
                    + "      where "
                    + "        o.codigo = l.operador "
                    + "        and modulo = 'Ativo' "
                    + "       and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "    ) -(( "
                    + "      select sum(ligacoes_ok) "
                    + "      from login_ativo_receptivo l "
                    + "      where modulo = 'Ativo' "
                    + "      and l.OPERADOR = o.codigo "
                    + "      and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                    + "       ) *1))) + if ((select "
                    + "        sum(time_to_sec(l.tempo_logado)) as tempo_logado from login_ativo_receptivo l "
                    + "      where  o.codigo = l.operador "
                    + "        and modulo = 'Receptivo' "
                    + "        and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "')is null,0,(select "
                    + "        sum(time_to_sec(l.tempo_logado)) as tempo_logado from login_ativo_receptivo l "
                    + "      where  o.codigo = l.operador "
                    + "        and modulo = 'Receptivo' "
                    + "        and DATE(entrada)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "')) "
                    + "        - (SELECT IFNULL(SUM(TIME_TO_SEC(p.DATA_HORA_FIM) - TIME_TO_SEC(p.DATA_HORA)), 0) AS TEMPO_PAUSA FROM pausas_realizadas p inner join motivos_pausa mp on mp.CODIGO = p.COD_PAUSA and mp.PRODUTIVIDADE = 'SIM'  WHERE DATE(p.DATA_HORA)between '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' and p.OPERADOR = o.codigo)  "
                    + "        ) AS PRODUTIVIDADE, "
                    + " CAST(COUNT(distinct cc.CODIGO) AS CHAR) AS DISCADAS, "
                    + " CAST(SUM(IF(r.ECONTATO = 'SIM', 1, 0)) AS CHAR) AS CONTATOS, "
                    + "      CAST(SUM(IF(r.EPEDIDO = 'SIM', 1, 0)) AS CHAR) AS PEDIDOS FROM operadores o "
                    + "   LEFT JOIN campanhas_clientes cc ON (cc.OPERADOR_LIGACAO = o.CODIGO  AND cc.OPERADOR_LIGACAO > 0 "
                    + "   AND DATE(cc.DT_RESULTADO) BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "') "
                    + "  LEFT JOIN resultados r ON(r.CODIGO = cc.RESULTADO) "
                    + "  LEFT JOIN campanhas c ON(c.CODIGO = cc.CAMPANHA) "
                    + " WHERE o.CODIGO = " + id.ToString() + ") as XX ";

            FuncoesBanco   f      = new FuncoesBanco(dblocal);
            List <dynamic> MyList = f.CollectionFromSql(x,
                                                        new Dictionary <string, object> {
            }).ToList();

            foreach (dynamic item in MyList)
            {
                if (!DBNull.Equals(item.PRODUTIVIDADE, DBNull.Value))
                {
                    PRODUTIVIDADE = Convert.ToDouble(item.PRODUTIVIDADE);
                }
                else
                {
                    PRODUTIVIDADE = 0;
                }
                if (!DBNull.Equals(item.DISCADAS, DBNull.Value))
                {
                    DISCADAS = Convert.ToInt32(item.DISCADAS);
                }
                else
                {
                    DISCADAS = 0;
                }
                if (!DBNull.Equals(item.CONTATOS, DBNull.Value))
                {
                    CONTATOS = Convert.ToInt32(item.CONTATOS);
                }
                else
                {
                    CONTATOS = 0;
                }
                if (!DBNull.Equals(item.APROVEITAMENTO, DBNull.Value))
                {
                    APROVEITAMENTO = Convert.ToDouble(item.APROVEITAMENTO);
                }
                else
                {
                    APROVEITAMENTO = 0;
                }
                if (!DBNull.Equals(item.PEDIDOS, DBNull.Value))
                {
                    PEDIDOS = Convert.ToInt32(item.PEDIDOS);
                }
                else
                {
                    PEDIDOS = 0;
                }
            }

            x = "SELECT cli.ESTADO, SUM(cc.VALOR) as VALOR FROM compras cc "
                + " JOIN clientes cli on cli.CODIGO = cc.CLIENTE AND cli.ESTADO <> '' "
                + " WHERE cc.OPERADOR > 0 AND cc.DATA BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                + " group by cli.ESTADO having SUM(cc.VALOR) > 0 ORDER BY COUNT(cc.CODIGO) DESC ";

            if (VendasPorEstado == null)
            {
                MyList = f.CollectionFromSql(x,
                                             new Dictionary <string, object> {
                }).ToList();

                VendasPorEstado = MyList;
            }

            x = "SELECT meta.OPERADOR,o.LOGIN, sum(meta.VALOR_META) as META "
                + " FROM operadores_meta meta JOIN operadores o on o.CODIGO = meta.OPERADOR WHERE CAST(CONCAT(meta.ANO, '-', meta.MES, '-01') AS DATE) BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                + " group by meta.OPERADOR,o.LOGIN ";

            if (MetasXVendas == null)
            {
                MyList = f.CollectionFromSql(x,
                                             new Dictionary <string, object> {
                }).ToList();

                MetasXVendas = MyList;

                foreach (var m in MetasXVendas)
                {
                    x = "SELECT SUM(cc.VALOR) as VALOR FROM compras cc "
                        + " WHERE cc.OPERADOR = " + m.OPERADOR + " AND cc.DATA BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                        + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' ";

                    var valor = f.ExecSql(x);

                    if (valor != null && valor.Count > 0)
                    {
                        m.VALOR_VENDA = Convert.ToDouble(valor[0]);
                    }
                    else
                    {
                        m.VALOR_VENDA = 0;
                    }

                    x = " select p.VALOR from campanhas_clientes a inner join propostas p on p.LIGACAO = a.CODIGO "
                        + " WHERE a.OPERADOR = " + m.OPERADOR + " AND a.DT_RESULTADO BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                        + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' ";
                    valor = f.ExecSql(x);

                    if (valor != null && valor.Count > 0)
                    {
                        m.VALOR_PROPOSTA = Convert.ToDouble(valor[0]);
                    }
                    else
                    {
                        m.VALOR_PROPOSTA = 0;
                    }
                }
            }
        }
        private void GetValores(int id, DateTime?datainicial, DateTime?datafinal)
        {
            if (datainicial == null)
            {
                datainicial = DateTime.Now;
            }

            if (datafinal == null)
            {
                datafinal = DateTime.Now;
            }

            FuncoesBanco f = new FuncoesBanco(dblocal);

            var x = GetSQLProcutividade(id, datainicial, datafinal);

            List <dynamic> MyList = f.CollectionFromSql(x,
                                                        new Dictionary <string, object> {
            }).ToList();

            foreach (dynamic item in MyList)
            {
                if (!DBNull.Equals(item.PRODUTIVIDADE, DBNull.Value))
                {
                    PRODUTIVIDADE = Convert.ToDouble(item.PRODUTIVIDADE);
                }
                else
                {
                    PRODUTIVIDADE = 0;
                }

                if (!DBNull.Equals(item.DISCADAS, DBNull.Value))
                {
                    DISCADAS = Convert.ToInt32(item.DISCADAS);
                }
                else
                {
                    DISCADAS = 0;
                }
                if (!DBNull.Equals(item.CONTATOS, DBNull.Value))
                {
                    CONTATOS = Convert.ToInt32(item.CONTATOS);
                }
                else
                {
                    CONTATOS = 0;
                }
                if (!DBNull.Equals(item.APROVEITAMENTO, DBNull.Value))
                {
                    APROVEITAMENTO = Convert.ToDouble(item.APROVEITAMENTO);
                }
                else
                {
                    APROVEITAMENTO = 0;
                }
                if (!DBNull.Equals(item.PEDIDOS, DBNull.Value))
                {
                    PEDIDOS = Convert.ToInt32(item.PEDIDOS);
                }
                else
                {
                    PEDIDOS = 0;
                }
            }

            x = "SELECT cli.ESTADO, SUM(cc.VALOR) as VALOR FROM compras cc "
                + " JOIN clientes cli on cli.CODIGO = cc.CLIENTE AND cli.ESTADO <> '' "
                + " WHERE cc.OPERADOR > 0 AND cc.DATA BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                + " group by cli.ESTADO having SUM(cc.VALOR) > 0 ORDER BY COUNT(cc.CODIGO) DESC ";

            if (VendasPorEstado == null)
            {
                MyList = f.CollectionFromSql(x,
                                             new Dictionary <string, object> {
                }).ToList();

                VendasPorEstado = MyList;
            }

            x = "SELECT meta.OPERADOR,o.LOGIN, sum(meta.VALOR_META) as META "
                + " FROM operadores_meta meta JOIN operadores o on o.CODIGO = meta.OPERADOR WHERE CAST(CONCAT(meta.ANO, '-', meta.MES, '-01') AS DATE) BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial) + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' "
                + " group by meta.OPERADOR,o.LOGIN ";

            if (MetasXVendas == null)
            {
                MyList = f.CollectionFromSql(x,
                                             new Dictionary <string, object> {
                }).ToList();

                MetasXVendas = MyList;

                foreach (var m in MetasXVendas)
                {
                    x = "SELECT SUM(cc.VALOR) as VALOR FROM compras cc "
                        + " WHERE cc.OPERADOR = " + m.OPERADOR + " AND cc.DATA BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                        + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' ";

                    var valor = f.ExecSql(x);

                    if (valor != null && valor.Count > 0)
                    {
                        m.VALOR_VENDA = Convert.ToDouble(valor[0]);
                    }
                    else
                    {
                        m.VALOR_VENDA = 0;
                    }

                    x = " select p.VALOR from campanhas_clientes a inner join propostas p on p.LIGACAO = a.CODIGO "
                        + " WHERE a.OPERADOR = " + m.OPERADOR + " AND a.DT_RESULTADO BETWEEN '" + String.Format("{0:yyyy-MM-dd}", datainicial)
                        + "' AND '" + String.Format("{0:yyyy-MM-dd}", datafinal) + "' ";
                    valor = f.ExecSql(x);

                    if (valor != null && valor.Count > 0)
                    {
                        m.VALOR_PROPOSTA = Convert.ToDouble(valor[0]);
                    }
                    else
                    {
                        m.VALOR_PROPOSTA = 0;
                    }
                }
            }
        }
        public dynamic ConfirmarPedido(Pedido dados)
        {
            FuncoesBanco f = new FuncoesBanco(dblocal);

            if (dados.id < 0)
            {
                dados.id = 0;
            }

            var id = f.ExecSql("select id from SP_GRAVAR_PEDIDO_WEB(" + dados.id + ", " + dados.CodUsr
                               + ", " + dados.Mesa + ", '" + dados.Total.ToString().Replace(",", ".")
                               + "' , '" + dados.OBS.Trim()
                               + "')");

            if (id != null && id.Count > 0)
            {
                dados.id = Convert.ToInt32(id[0]);
            }

            int ii = 0;

            if (dados.Produtos is string)
            {
                PRODUTO i = JsonConvert.DeserializeObject <PRODUTO>(dados.Produtos);
                f.ExecSql("select id from SP_GRAVAR_PEDIDO_ITEM_WEB(" + dados.id + ", " + dados.CodUsr
                          + ", " + dados.Mesa + ", '" + i.PRODN3VLRVENDA.ToString().Replace(",", ".")
                          + "', " + i.QTD.ToString()
                          + "," + ii
                          + ", " + i.id
                          + ")");
            }
            else
            {
                PRODUTO i = new PRODUTO();
                foreach (dynamic item in dados.Produtos)
                {
                    foreach (dynamic filho in item)
                    {
                        foreach (dynamic campo in filho)
                        {
                            if (filho.Name == "id")
                            {
                                i.id = (int)campo.Value;
                            }
                            else
                            if (filho.Name == "PRODN3VLRVENDA")
                            {
                                i.PRODN3VLRVENDA = campo.Value;
                            }
                            else
                            if (filho.Name == "QTD")
                            {
                                i.QTD = (int)campo.Value;
                            }
                        }
                    }

                    ii++;
                    //item;//JsonConvert.DeserializeObject<PRODUTO>(item);
                    f.ExecSql("select id from SP_GRAVAR_PEDIDO_ITEM_WEB(" + dados.id + ", " + dados.CodUsr
                              + ", " + dados.Mesa + ", '" + i.PRODN3VLRVENDA.ToString().Replace(",", ".")
                              + "', " + i.QTD.ToString()
                              + "," + ii
                              + ", " + i.id
                              + ")");
                }
            }

            //retorno.id = dados.id;
            return(dados);
        }