示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }