public PublicacaoResponse ExcluirPublicacao(int PublicacaoId)
        {
            PublicacaoResponse resposta = new PublicacaoResponse();
            try
            {
                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, PublicacaoId);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_DEL_Publicacao"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            resposta.Resposta.Erro = (bool)dt.Rows[0]["indErro"];
                            resposta.Resposta.Mensagem = (string)dt.Rows[0]["msgErro"];
                            resposta.Publicacao = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                resposta.Resposta.Erro = true;
                resposta.Resposta.Mensagem = ex.Message;

                //logBLL.Error(ex);
            }
            return resposta;
        }
        public PublicacaoResponse Carregar(int SiteId, int IdiomaId, int PublicacaoId, int UsuarioId, bool FiltrarPrivacidade = true)
        {
            PublicacaoResponse resposta = new PublicacaoResponse();
            Publicacao publicacao;

            try
            {
                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@SiteId", SqlDbType.Int, SiteId);
                    objetoConexao.AdicionarParametro("@IdiomaId", SqlDbType.Int, IdiomaId);
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, PublicacaoId);
                    objetoConexao.AdicionarParametro("@UsuarioId", SqlDbType.Int, UsuarioId);
                    objetoConexao.AdicionarParametro("@FiltrarPrivacidade", SqlDbType.Bit, FiltrarPrivacidade);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_SEL_Publicacao"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            DataRow dr = dt.Rows[0];
                            publicacao = new Publicacao();
                            CarregarDTO_Publicacao(publicacao, dr);

                            resposta.Publicacao = publicacao;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //logBLL.Error(ex);
                throw;
            }

            return resposta;
        }
        public ActionResult GravarPublicacao(string Publicacao, string PublicacaoOld, string ListaUsuarioGrupo, string ListaUsuario)
        {
            NumberFormatInfo provider = NumberFormatInfo.CurrentInfo;
            
            var form = (JObject)JsonConvert.DeserializeObject(Publicacao);

            Publicacao _anterior = new Publicacao();
            Publicacao _novo = new Publicacao();

            _novo.PublicacaoId = (int)Util.GetValue<int>(form, "PublicacaoId");
            _novo.SiteId = GetCurrentSite();
            _novo.PublicacaoTipoId = (int)Util.GetValue<int>(form, "PublicacaoTipo");
            var data = (String)Util.GetValue<String>(form, "Data");
            if (!String.IsNullOrEmpty(data)){
                CultureInfo provider2 = new CultureInfo("pt-BR");
                _novo.Data = Convert.ToDateTime(data, provider2);
            }
            
            var dataValidade = (String)Util.GetValue<String>(form, "DataValidade");
            if (!String.IsNullOrEmpty(dataValidade)){
                CultureInfo provider2 = new CultureInfo("pt-BR");
                _novo.DataValidade = Convert.ToDateTime(dataValidade, provider2);
            }

            _novo.Detalhe.IdiomaId = 1;
            _novo.Detalhe.Titulo = (string)Util.GetValue<string>(form, "Titulo");
            _novo.Detalhe.Resumo = (string)Util.GetValue<string>(form, "Resumo");
            _novo.Detalhe.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudo");
            _novo.Ativo = Convert.ToBoolean((int?)Util.GetValue<int?>(form, "Status"));

            _novo.Destaque = Convert.ToBoolean((int?)Util.GetValue<int?>(form, "ExibirHome"));
            _novo.Posicao = (int?)Util.GetValue<int?>(form, "Posicao");
            _novo.EditoriaId = (int)Util.GetValue<int>(form, "Editoria", 0);
            _novo.Detalhe.Fonte = (string)Util.GetValue<string>(form, "Fonte");
            _novo.Tags = (string)Util.GetValue<string>(form, "tags_1");

            _novo.Complemento.Privado = Convert.ToBoolean((int?)Util.GetValue<int?>(form, "Privado"));

            //var grupos = (string)Util.GetValue<string>(form, "UsuarioGrupo");

            #region --> Validação
            PublicacaoResponse resp = new PublicacaoResponse();
            if (_novo.PublicacaoTipoId == null || _novo.PublicacaoTipoId == 0)
            {
                resp.Resposta.Erro = true;
                if (resp.Resposta.Mensagem.Length > 0) resp.Resposta.Mensagem += "<br />";
                resp.Resposta.Mensagem += "- Selecionar o Tipo de Publicação.";
            }
            if (Util.GetValue<int?>(form, "Status") == null)
            {
                resp.Resposta.Erro = true;
                if (resp.Resposta.Mensagem.Length > 0) resp.Resposta.Mensagem += "<br />";
                resp.Resposta.Mensagem += "- Selecionar o Status: Ativo / Inativo.";
            }
            if (_novo.Complemento.Privado == true && string.IsNullOrEmpty(ListaUsuarioGrupo) && string.IsNullOrEmpty(ListaUsuario))
            {
                resp.Resposta.Erro = true;
                if (resp.Resposta.Mensagem.Length > 0) resp.Resposta.Mensagem += "<br />";
                resp.Resposta.Mensagem += "- Informar pelo menos um Usuário ou Grupo para publicação privada.";
            }
            if (resp.Resposta.Erro)
            {
                return Json(resp, JsonRequestBehavior.AllowGet);
            }
            #endregion

            List<PublicacaoIdiomaExcecao> Extras = new List<PublicacaoIdiomaExcecao>();
            List<PublicacaoIdiomaExcecao> ExtrasOld = new List<PublicacaoIdiomaExcecao>();
            
            #region -> Idiomas Extras
            //-- EN
            PublicacaoIdiomaExcecao ExtraEN = new PublicacaoIdiomaExcecao();
            ExtraEN.IdiomaId = (int)Util.IDIOMA.ENGLISH;
            ExtraEN.Titulo = (string)Util.GetValue<string>(form, "TituloEN");
            ExtraEN.Resumo = (string)Util.GetValue<string>(form, "ResumoEN");
            ExtraEN.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoEN");
            //ExtraEN.Editora = (string)Util.GetValue<string>(form, "EditoriaEN");
            ExtraEN.Fonte = (string)Util.GetValue<string>(form, "FonteEN");
            Extras.Add(ExtraEN);
            //-- ES
            PublicacaoIdiomaExcecao ExtraES = new PublicacaoIdiomaExcecao();
            ExtraES.IdiomaId = (int)Util.IDIOMA.ESPANHOL;
            ExtraES.Titulo = (string)Util.GetValue<string>(form, "TituloES");
            ExtraES.Resumo = (string)Util.GetValue<string>(form, "ResumoES");
            ExtraES.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoES");
            ExtraES.Editora = (string)Util.GetValue<string>(form, "EditoriaES");
            //ExtraES.Fonte = (string)Util.GetValue<string>(form, "FonteES");
            Extras.Add(ExtraES);
            //-- FR
            PublicacaoIdiomaExcecao ExtraFR = new PublicacaoIdiomaExcecao();
            ExtraFR.IdiomaId = (int)Util.IDIOMA.FRANCES;
            ExtraFR.Titulo = (string)Util.GetValue<string>(form, "TituloFR");
            ExtraFR.Resumo = (string)Util.GetValue<string>(form, "ResumoFR");
            ExtraFR.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoFR");
            ExtraFR.Editora = (string)Util.GetValue<string>(form, "EditoriaFR");
            //ExtraFR.Fonte = (string)Util.GetValue<string>(form, "FonteFR");
            Extras.Add(ExtraFR);
            #endregion

            if (PublicacaoOld != null && PublicacaoOld != "null")
            {
                var formOld = (JObject)JsonConvert.DeserializeObject(PublicacaoOld);

                _anterior.PublicacaoId = (int)Util.GetValue<int>(formOld, "UsuarioId");
                _anterior.Titulo = (string)Util.GetValue<string>(formOld, "Nome");
                _anterior.Resumo = (string)Util.GetValue<string>(formOld, "Login");
                //_anterior.Data = (DateTime)Util.GetValue<string>(form, "Data");

                #region -> Idiomas Extras (Dados anterior a alteração)
                //-- EN
                PublicacaoIdiomaExcecao ExtraENOld = new PublicacaoIdiomaExcecao();
                ExtraENOld.IdiomaId = (int)Util.IDIOMA.ENGLISH;
                ExtraENOld.Titulo = (string)Util.GetValue<string>(form, "TituloEN");
                ExtraENOld.Resumo = (string)Util.GetValue<string>(form, "ResumoEN");
                ExtraENOld.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoEN");
                //ExtraENOld.Editora = (string)Util.GetValue<string>(form, "EditoriaEN");
                ExtraENOld.Fonte = (string)Util.GetValue<string>(form, "FonteEN");
                ExtrasOld.Add(ExtraENOld);
                //-- ES
                PublicacaoIdiomaExcecao ExtraESOld = new PublicacaoIdiomaExcecao();
                ExtraESOld.IdiomaId = (int)Util.IDIOMA.ESPANHOL;
                ExtraESOld.Titulo = (string)Util.GetValue<string>(form, "TituloES");
                ExtraESOld.Resumo = (string)Util.GetValue<string>(form, "ResumoES");
                ExtraESOld.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoES");
                //ExtraESOld.Editora = (string)Util.GetValue<string>(form, "EditoriaES");
                ExtraESOld.Fonte = (string)Util.GetValue<string>(form, "FonteES");
                ExtrasOld.Add(ExtraESOld);
                //-- FR
                PublicacaoIdiomaExcecao ExtraFROld = new PublicacaoIdiomaExcecao();
                ExtraFROld.IdiomaId = (int)Util.IDIOMA.FRANCES;
                ExtraFROld.Titulo = (string)Util.GetValue<string>(form, "TituloFR");
                ExtraFROld.Resumo = (string)Util.GetValue<string>(form, "ResumoFR");
                ExtraFROld.Conteudo = (string)Util.GetValue<string>(form, "PublicacaoConteudoFR");
                //ExtraFROld.Editora = (string)Util.GetValue<string>(form, "EditoriaFR");
                ExtraFROld.Fonte = (string)Util.GetValue<string>(form, "FonteFR");
                ExtrasOld.Add(ExtraFROld);
                #endregion
            }

            return Json(new PublicacaoDAL().Gravar(_novo, _anterior, Extras, ExtrasOld, ListaUsuarioGrupo, ListaUsuario), JsonRequestBehavior.AllowGet);
        }
        public PublicacaoResponse Gravar(Publicacao Publicacao, Publicacao PublicacaoOld, List<PublicacaoIdiomaExcecao> Extras, List<PublicacaoIdiomaExcecao> ExtrasOld, string ListaUsuarioGrupo, string ListaUsuario)
        {
            PublicacaoResponse resposta = new PublicacaoResponse();
            try
            {
                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, Publicacao.PublicacaoId);
                    objetoConexao.AdicionarParametro("@SiteId", SqlDbType.Int, Publicacao.SiteId);
                    objetoConexao.AdicionarParametro("@PublicacaoTipoId", SqlDbType.Int, Publicacao.PublicacaoTipoId);
                    objetoConexao.AdicionarParametro("@Data", SqlDbType.DateTime, Publicacao.Data);
                    objetoConexao.AdicionarParametro("@DataValidade", SqlDbType.DateTime, Publicacao.DataValidade);
                    objetoConexao.AdicionarParametro("@Posicao", SqlDbType.Int, Publicacao.Posicao);
                    objetoConexao.AdicionarParametro("@Destaque", SqlDbType.Bit, Publicacao.Destaque);
                    objetoConexao.AdicionarParametro("@Privado", SqlDbType.Bit, Publicacao.Complemento.Privado);
                    objetoConexao.AdicionarParametro("@ListaUsuarioGrupo", SqlDbType.VarChar, ListaUsuarioGrupo);
                    objetoConexao.AdicionarParametro("@ListaUsuario", SqlDbType.VarChar, ListaUsuario);
                    objetoConexao.AdicionarParametro("@Ativo", SqlDbType.Bit, Publicacao.Ativo);
                    objetoConexao.AdicionarParametro("@EditoriaId", SqlDbType.Int, Publicacao.EditoriaId);
                    objetoConexao.AdicionarParametro("@Tags", SqlDbType.VarChar, Publicacao.Tags);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_Publicacao"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            resposta.Resposta.Erro = false;// (bool)dt.Rows[0]["indErro"];
                            resposta.Resposta.Mensagem = "";// (string)dt.Rows[0]["msgErro"];
                            resposta.Publicacao = Publicacao;
                            resposta.Publicacao.PublicacaoId = (int)dt.Rows[0]["PublicacaoId"];
                        }
                    }
                }

                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, resposta.Publicacao.PublicacaoId);
                    objetoConexao.AdicionarParametro("@Privado", SqlDbType.Bit, false);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_PublicacaoRestricao"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            resposta.Resposta.Erro = false;// (bool)dt.Rows[0]["indErro"];
                            resposta.Resposta.Mensagem = "";// (string)dt.Rows[0]["msgErro"];
                            resposta.Publicacao = Publicacao;
                            //resposta.Publicacao.PublicacaoId = (int)dt.Rows[0]["PublicacaoRestricaoId"];
                        }
                    }
                }

                using (ConexaoDB objetoConexao = new ConexaoDB())
                {

                    objetoConexao.AdicionarParametro("@PublicacaoIdiomaExcecaoId", SqlDbType.Int, 0);
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, resposta.Publicacao.PublicacaoId);
                    objetoConexao.AdicionarParametro("@IdiomaId", SqlDbType.Int, Publicacao.Detalhe.IdiomaId);
                    objetoConexao.AdicionarParametro("@Titulo", SqlDbType.VarChar, Publicacao.Detalhe.Titulo);
                    objetoConexao.AdicionarParametro("@Resumo", SqlDbType.VarChar, Publicacao.Detalhe.Resumo);
                    objetoConexao.AdicionarParametro("@Conteudo", SqlDbType.VarChar, Publicacao.Detalhe.Conteudo);
                    //objetoConexao.AdicionarParametro("@Editora", SqlDbType.VarChar, Publicacao.Detalhe.Editora);
                    objetoConexao.AdicionarParametro("@Fonte", SqlDbType.VarChar, Publicacao.Detalhe.Fonte);
                    objetoConexao.AdicionarParametro("@Tags", SqlDbType.VarChar, Publicacao.Detalhe.Tags);
                    objetoConexao.AdicionarParametro("@ArquivoDestaqueId", SqlDbType.BigInt, Publicacao.Detalhe.ArquivoDestaqueId);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_PublicacaoIdiomaExcecao"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            resposta.Resposta.Erro = false;// (bool)dt.Rows[0]["indErro"];
                            resposta.Resposta.Mensagem = "";// (string)dt.Rows[0]["msgErro"];
                            resposta.Publicacao = Publicacao;
                            //resposta.Publicacao.PublicacaoId = (int)dt.Rows[0]["PublicacaoRestricaoId"];
                        }
                    }
                }

                foreach (var Extra in Extras)
                {
                    using (ConexaoDB objetoConexao = new ConexaoDB())
                    {

                        objetoConexao.AdicionarParametro("@PublicacaoIdiomaExcecaoId", SqlDbType.Int, 0);
                        objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, resposta.Publicacao.PublicacaoId);
                        objetoConexao.AdicionarParametro("@IdiomaId", SqlDbType.Int, Extra.IdiomaId);
                        objetoConexao.AdicionarParametro("@Titulo", SqlDbType.VarChar, Extra.Titulo);
                        objetoConexao.AdicionarParametro("@Resumo", SqlDbType.VarChar, Extra.Resumo);
                        objetoConexao.AdicionarParametro("@Conteudo", SqlDbType.VarChar, Extra.Conteudo);
                        //objetoConexao.AdicionarParametro("@Editora", SqlDbType.VarChar, Extra.Editora);
                        objetoConexao.AdicionarParametro("@Fonte", SqlDbType.VarChar, Extra.Fonte);
                        objetoConexao.AdicionarParametro("@Tags", SqlDbType.VarChar, Extra.Tags);
                        objetoConexao.AdicionarParametro("@ArquivoDestaqueId", SqlDbType.BigInt, Publicacao.Detalhe.ArquivoDestaqueId);
                        using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_PublicacaoIdiomaExcecao"))
                        {
                            if (dt != null && dt.Rows.Count > 0)
                            {
                                resposta.Resposta.Erro = false;// (bool)dt.Rows[0]["indErro"];
                                resposta.Resposta.Mensagem = "";// (string)dt.Rows[0]["msgErro"];
                                resposta.Publicacao = Publicacao;
                                //resposta.Publicacao.PublicacaoId = (int)dt.Rows[0]["PublicacaoRestricaoId"];
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                resposta.Resposta.Erro = true;
                resposta.Resposta.Mensagem = ex.Message;

                //logBLL.Error(ex);
            }
            return resposta;
        }
        public PublicacaoResponse LiberarPublicacao(int PublicacaoId, int? UsuarioId, bool Liberado)
        {
            PublicacaoResponse resposta = new PublicacaoResponse();
            try
            {
                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, PublicacaoId);
                    objetoConexao.AdicionarParametro("@UsuarioId", SqlDbType.Int, UsuarioId);
                    objetoConexao.AdicionarParametro("@Liberado", SqlDbType.Bit, Liberado);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_PublicacaoAprovacaoItem"))
                    {
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            resposta.Resposta.Erro = (bool)dt.Rows[0]["indErro"];
                            resposta.Resposta.Mensagem = (string)dt.Rows[0]["msgErro"];
                            resposta.Publicacao = null;
                        }
                    }
                }

                using (ConexaoDB objetoConexao = new ConexaoDB())
                {
                    objetoConexao.AdicionarParametro("@PublicacaoId", SqlDbType.Int, PublicacaoId);
                    using (DataTable dt = objetoConexao.RetornarTabela("USP_INS_Publicacao_Liberacao"))
                    {
                        //if (dt != null && dt.Rows.Count > 0)
                        //{
                        //    resposta.Resposta.Erro = (bool)dt.Rows[0]["indErro"];
                        //    resposta.Resposta.Mensagem = (string)dt.Rows[0]["msgErro"];
                        //    resposta.Publicacao = null;
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                resposta.Resposta.Erro = true;
                resposta.Resposta.Mensagem = ex.Message;

                //logBLL.Error(ex);
            }
            return resposta;
        }