private IList <Comunicazioni> GetComunicazioniByStatus(TipoCanale tipoCanale, List <MailStatus> status, bool include, int?minRec, int?maxRec, string utente) { List <Comunicazioni> lComunicazioni = new List <Comunicazioni>(); int skip = (int)(minRec - 1); int take = (int)(maxRec - minRec); string[] stati = Enum.GetValues(typeof(MailStatus)) .Cast <string>() .Select(x => x.ToString()) .ToArray(); using (FAXPECContext dbcontext = new FAXPECContext()) { List <MAIL_CONTENT> l = new List <MAIL_CONTENT>(); try { l = (from c in dbcontext.COMUNICAZIONI_FLUSSO join m in dbcontext.MAIL_CONTENT on c.REF_ID_COM equals m.REF_ID_COM join cm in dbcontext.COMUNICAZIONI on c.REF_ID_COM equals cm.ID_COM where m.MAIL_SENDER == utente.ToUpper() && c.CANALE == tipoCanale.ToString() && (stati.Contains(c.STATO_COMUNICAZIONE_NEW)) orderby c.REF_ID_COM select m).Skip(skip).Take(take).ToList(); foreach (MAIL_CONTENT com in l) { Comunicazioni coMp = AutoMapperConfiguration.fromComunicazioniCompleteToDto(com); lComunicazioni.Add(coMp); } } catch (Exception ex) { lComunicazioni = null; //TASK: Allineamento log - Ciro if (!ex.GetType().Equals(typeof(ManagedException))) { ManagedException mEx = new ManagedException(ex.Message, "ORA_ERR013", string.Empty, string.Empty, ex.InnerException); ErrorLogInfo err = new ErrorLogInfo(mEx); _log.Error(err); throw mEx; } else { throw ex; } } } return(lComunicazioni); }
/// <summary> /// Ottiene tutte le comunicazioni che hanno un certo status /// </summary> /// <param name="status"></param> /// <returns></returns> internal IList <ComunicazioniType> GetComunicazioniByStatus(TipoCanale tipoCanale, List <MailStatus> status, bool include, int?minRec, int?maxRec, string utente) { List <ComunicazioniType> lComunicazioni = new List <ComunicazioniType>(); using (OracleCommand oCmd = base.CurrentConnection.CreateCommand()) { #region "old query" /* old query * oCmd.CommandText = "WITH t_flussi AS" + " (SELECT REF_ID_COM" + ", ROW_NUMBER() OVER (ORDER BY REF_ID_COM) AS RN" + " FROM (" + "SELECT DISTINCT REF_ID_COM" + " FROM COMUNICAZIONI_FLUSSO CF" + " WHERE CANALE = '" + tipoCanale.ToString() + "'" + " AND" + ((include == false) ? " NOT" : "") + " EXISTS (SELECT *" + " FROM COMUNICAZIONI_FLUSSO CF0" + " WHERE CF0.REF_ID_COM = CF.REF_ID_COM" + " AND CF0.CANALE = CF.CANALE" + " AND CF0.STATO_COMUNICAZIONE_NEW" + " IN ('" + String.Join("', '", status.Select(s => ((int)s).ToString()).ToArray()) + "'))" + " ORDER BY REF_ID_COM)) " + queryBase + " WHERE v0.com_flussi IS NOT EMPTY" + " AND v0.id_com IN (SELECT ref_id_com FROM t_flussi" + //+ " WHERE " + //+ ((minRec.HasValue) ? (" RN >= " + minRec.Value.ToString()) : " RN >= 0") + //+ ((maxRec.HasValue) ? (" AND RN <= " + maxRec.Value.ToString()) : "") + ")" + (String.IsNullOrEmpty(utente) ? "" : " AND v0.mail_com.mail_sender = '" + utente + "'"); */ #endregion StringBuilder sb = new StringBuilder("WITH t_flussi AS") .Append(" (SELECT DISTINCT IDX, ROW_NUMBER() OVER (ORDER BY IDX) AS RN") .Append(" FROM (SELECT DISTINCT mc.REF_ID_COM as IDX FROM COMUNICAZIONI_FLUSSO CF INNER JOIN MAIL_CONTENT MC") .Append(" on cf.ref_id_com = mc.ref_id_com") .Append(" WHERE mc.mail_sender = :p_sender and CANALE = :p_canale AND") .Append(include ? "" : " NOT") .Append(" EXISTS (SELECT 1") .Append(" FROM COMUNICAZIONI_FLUSSO CF0") .Append(" WHERE CF0.REF_ID_COM = CF.REF_ID_COM") .Append(" AND CF0.CANALE = CF.CANALE") .Append(" AND CF0.STATO_COMUNICAZIONE_NEW IN (") .Append(string.Format("'{0}'", string.Join("', '", status.Select(s => ((int)s).ToString()).ToArray()))) .Append(")))") .Append(" ORDER BY IDX)") .Append(" SELECT VALUE(v0)") .Append(" FROM v_comunicazioni_complete_obj v0") .Append(" WHERE v0.com_flussi IS NOT EMPTY") .Append(" AND v0.id_com IN (SELECT idx FROM t_flussi") .Append(" where RN >= :p_minRec") .Append(" AND RN <= :p_maxRec") .Append(")"); oCmd.CommandText = sb.ToString(); oCmd.BindByName = true; oCmd.Parameters.Add(new OracleParameter { Direction = System.Data.ParameterDirection.Input, OracleDbType = OracleDbType.Varchar2, ParameterName = "p_sender", Value = utente }); oCmd.Parameters.Add(new OracleParameter { Direction = System.Data.ParameterDirection.Input, OracleDbType = OracleDbType.Varchar2, ParameterName = "p_canale", Size = 20, Value = tipoCanale.ToString() }); oCmd.Parameters.Add(new OracleParameter { Direction = System.Data.ParameterDirection.Input, OracleDbType = OracleDbType.Decimal, ParameterName = "p_minRec", Precision = 10, Scale = 0, Value = ((minRec.HasValue) ? minRec.Value : 0) }); oCmd.Parameters.Add(new OracleParameter { Direction = System.Data.ParameterDirection.Input, OracleDbType = OracleDbType.Decimal, ParameterName = "p_maxRec", Value = ((maxRec.HasValue) ? maxRec.Value : int.MaxValue) }); try { using (OracleDataReader r = oCmd.ExecuteReader()) { while (r.Read()) { lComunicazioni.Add((ComunicazioniType)r.GetValue(0)); } } } catch (Exception ex) { lComunicazioni = null; //TASK: Allineamento log - Ciro if (!ex.GetType().Equals(typeof(ManagedException))) { ManagedException mEx = new ManagedException(ex.Message, "ORA_ERR013", string.Empty, string.Empty, ex.InnerException); ErrorLogInfo err = new ErrorLogInfo(mEx); log.Error(err); throw mEx; } else { throw ex; } } } return(lComunicazioni); }