示例#1
0
 /// <summary>
 /// Aggiunge i dati del documento nella coda dei processi
 /// </summary>
 /// <param name="DMD"></param>
 void AddMessageNotificationQueue(DocumentMonitorData Data)
 {
     lock (lockQueue)
     {
         #if (DEBUG)
         {
             Console.WriteLine("Aggiunto in coda " + Data.FullFileName);
         }
         #endif
         messageNotificationQueue.Enqueue(Data);
     }
 }
        /// <summary>
        /// spedisce la notifica
        /// </summary>
        /// <param name="Message"></param>
        public void SendsNotification(DocumentMonitorData Message)
        {
            // nessuna regola matcha esce
            if (Message.IndexFile == 0)
            {
                return;
            }

            // effettua il refresh del login di present dal PRP
            CheckLoggedTime();

            if (context == null)
            {
                logger.Warn("PresentDataContext is null SendsNotification failed!");
                return;
            }

            // imposta il messaggio da notificare nel documento
            var notifyMessage = ResourceDecodeMessage(Message);

            // il messaggio per essere valido deve avere il testo e il soggetto
            if (notifyMessage.Subject == string.Empty || notifyMessage.Text == string.Empty)
            {
                return;
            }

            switch (Message.FileState)
            {
            case eFileState.CreatedOrChanged:

                var log          = string.Empty;
                var messageFound = false;

                if (Message.isPublicMessage)
                {
                    // la notifica è pubblica per cui il targetAccoutID è 0
                    // cancella eventuale notifica precedente se UpdateMessage
                    messageFound = RemoveMessage(0, param.UpdateMessage, notifyMessage);
                    // se trova un messaggio precedente e non è impostato il flag UpdateMessage NON inserisce la nuova notifica
                    if ((!messageFound && !param.UpdateMessage) || param.UpdateMessage)
                    {
                        PushMessage(0, notifyMessage);
                        log = string.Format("inserita notifica pubblica {0}", Message.FullFileName);
                    }
                    else
                    {
                        log = string.Format("notifica globale pubblica {0}", Message.FullFileName);
                    }
                    logger.Info(log);
                }
                else
                {
                    // piu utenti web possono avere associato un utente present effettua le notifiche a tutti gli utenti web
                    GetAccountID(Message.Value).ForEach(targetAccountId =>
                    {
                        // cancella eventuale notifica precedente se UpdateMessage
                        messageFound = RemoveMessage(targetAccountId, param.UpdateMessage, notifyMessage);
                        // se trova un messaggio precedente e non è impostato il flag UpdateMessage NON inserisce la nuova notifica
                        if ((!messageFound && !param.UpdateMessage) || param.UpdateMessage)
                        {
                            PushMessage(targetAccountId, notifyMessage);
                            log = string.Format("inserita notifica {0} {1} {2} accountID {3}", Message.FullFileName, param.PersonKeyField, Message.Value, targetAccountId);
                        }
                        else
                        {
                            log = string.Format("notifica trovata {0} {1} {2} accountID {3}", Message.FullFileName, param.PersonKeyField, Message.Value, targetAccountId);
                        }
                        logger.Info(log);
                    });
                }

                break;

            case eFileState.Deleted:

                if (Message.isPublicMessage)
                {
                    // la notifica è pubblica per cui il targetAccoutID è 0
                    RemoveMessage(0, true, notifyMessage);
                    log = string.Format("rimossa notifica pubblica {0}", Message.FullFileName);
                    logger.Info(log);
                }
                else
                {
                    // piu utenti web possono avere associato un utente present effettua le notifiche a tutti gli utenti web
                    GetAccountID(Message.Value).ForEach(targetAccountId =>
                    {
                        // se non c'è + il documento lo cancella
                        RemoveMessage(targetAccountId, true, notifyMessage);
                        log = string.Format("rimossa notifica {0} {1} {2} accountID {3}", Message.FullFileName, param.PersonKeyField, Message.Value, targetAccountId);
                        logger.Info(log);
                    });
                }

                break;

            case eFileState.Renamed:

                var oldLog = string.Empty;

                if (Message.isPublicMessage)
                {
                    // la notifica è pubblica per cui il targetAccoutID è 0
                    oldLog = string.Format("rinominata notifica pubblica {0} in {1}", Message.OldFullFileName, Message.FullFileName);
                    logger.Info(oldLog);

                    // cancella la vecchia notifica rinominata
                    RemoveMessage(0, true, notifyMessage);
                    oldLog = string.Format("rimossa notifica pubblica {0}", Message.OldFullFileName);
                    logger.Info(oldLog);

                    // cancella eventuale notifica rinominata precedente se UpdateMessage
                    messageFound = RemoveMessage(0, param.UpdateMessage, notifyMessage);
                    // se trova un messaggio precedente e non è impostato il flag UpdateMessage NON inserisce la nuova notifica
                    if ((!messageFound && !param.UpdateMessage) || param.UpdateMessage)
                    {
                        PushMessage(0, notifyMessage);
                        log = string.Format("inserita notifica pubblica {0}", Message.FullFileName);
                        logger.Info(log);
                    }
                    else
                    {
                        log = string.Format("notifica trovata pubblica {0}", Message.FullFileName);
                    }
                }
                else
                {
                    // notifica privata
                    oldLog = string.Format("rinominata notifica {0} in {1} {2} {3}", Message.OldFullFileName, Message.FullFileName, param.PersonKeyField, Message.OldValue);
                    logger.Info(oldLog);

                    // piu utenti web possono avere associato un utente present effettua le notifiche a tutti gli utenti web
                    GetAccountID(Message.OldValue).ForEach(oldTargetAccountId =>
                    {
                        // se non c'è + il documento lo cancella
                        RemoveMessage(oldTargetAccountId, true, notifyMessage);
                        oldLog = string.Format("rimossa notifica {0} {1} {2} accountID {3}", Message.OldFullFileName, param.PersonKeyField, Message.OldValue, oldTargetAccountId);
                        logger.Info(oldLog);
                    });

                    // piu utenti web possono avere associato un utente present effettua le notifiche a tutti gli utenti web
                    GetAccountID(Message.Value).ForEach(targetAccountId =>
                    {
                        // cancella eventuale notifica precedente se UpdateMessage
                        messageFound = RemoveMessage(targetAccountId, param.UpdateMessage, notifyMessage);
                        // se trova un messaggio precedente e non è impostato il flag UpdateMessage NON inserisce la nuova notifica
                        if ((!messageFound && !param.UpdateMessage) || param.UpdateMessage)
                        {
                            PushMessage(targetAccountId, notifyMessage);
                            log = string.Format("inserita notifica {0} {1} {2} accountID {3}", Message.FullFileName, param.PersonKeyField, Message.Value, targetAccountId);
                            logger.Info(log);
                        }
                        else
                        {
                            log = string.Format("notifica trovata {0} {1} {2} accountID {3}", Message.FullFileName, param.PersonKeyField, Message.Value, targetAccountId);
                        }
                    });
                }

                break;

            case eFileState.None:
                break;

            default:
                break;
            }
        }
        /// <summary>
        /// decodifica (dalle risorse) il soggetto ed il testo del messaggio
        /// </summary>
        /// <param name="Message"></param>
        /// <param name="subject"></param>
        /// <param name="text"></param>
        /// <param name="oldText"></param>
        private NotifyMessage ResourceDecodeMessage(DocumentMonitorData Message)
        {
            var notifyMessage = new NotifyMessage();

            // messaggio pubblico / privato da decodificare in base alla lingua e opzionalmente alla data
            try
            {
                var paramLanguage = param.LanguageKey.FirstOrDefault(Index => Index.IndexFile == Message.IndexFile);

                string yearMonth = "";

                if (Message.ReadYear)
                {
                    yearMonth = " {1:yyyy}";
                }
                if (Message.ReadMonth)
                {
                    yearMonth += " {1:MM}";
                }

                // versione 1.0.0.2 tredicesima e/o quattordicesima inserisce la stringa aggiuntiva EXTRA
                var extra = "";
                switch (Message.ExtraMonth)
                {
                case 1:
                {
                    extra = " tredicesima";
                    break;
                }

                case 2:
                {
                    extra = " quattordicesima";
                    break;
                }
                }

                if (Message.ReadYear || Message.ReadMonth)
                {
                    // messaggio con anno e mese
                    notifyMessage.Subject = string.Format("{0}" + extra + yearMonth, Resources.GetString(paramLanguage.Subject), Message.Period);
                    notifyMessage.Text    = Resources.GetString(paramLanguage.Text, Message.FullFileName, Message.Period);
                    if (Message.OldFullFileName != "")
                    {
                        notifyMessage.OldText = Resources.GetString(paramLanguage.Text, Message.OldFullFileName, Message.Period);
                    }
                }
                else
                {
                    // messaggio senza periodo o messaggio globale
                    // qui il programma è x forza un po' inchiodato perché nel segnaposto {1} abbiamo il nome del file
                    notifyMessage.Subject = Resources.GetString(paramLanguage.Subject);
                    notifyMessage.Text    = Resources.GetString(paramLanguage.Text, Message.FullFileName, GetFileName(Message.FullFileName));
                    if (Message.OldFullFileName != "")
                    {
                        notifyMessage.OldText = Resources.GetString(paramLanguage.Text, Message.OldFullFileName, GetFileName(Message.OldFullFileName));
                    }
                }

                return(notifyMessage);
            }

            catch (Exception ex)
            {
                logger.Error(ex, string.Format("Errori nella decodifica del soggetto e/o del testo del messaggio da inserire"));
                return(notifyMessage);
            }
        }
示例#4
0
        /// <summary>
        /// estrae i dati dal nome del file
        /// </summary>
        /// <param name="FullFileName"></param>
        /// <returns></returns>
        DocumentMonitorData ExctractFileData(string FullFileName)
        {
            var attr = new DocumentMonitorData();

            try
            {
                param.RegExFiles.ForEach(reg =>
                {
                    var matchPeriod = Regex.Match(FullFileName, reg.FullFileNameRegEx, RegexOptions.IgnoreCase);
                    if (matchPeriod.Success)
                    {
                        attr.IndexFile = reg.IndexFile;
                        // dal nome viene estratto il periodo
                        int year  = (reg.YearPosition > 0) ? Convert.ToInt32(matchPeriod.Groups[reg.YearPosition].Value) : 0;
                        int month = (reg.MonthPosition > 0) ? Convert.ToInt32(matchPeriod.Groups[reg.MonthPosition].Value) : 0;
                        //var month = (reg.MonthPosition > 0) ? Convert.ToInt32(matchPeriod.Groups[reg.MonthPosition].Value) : 1;
                        // dal nome del file viene estratta la chiave della persona
                        string key = (reg.KeyPosition > 0) ? Convert.ToInt64(matchPeriod.Groups[reg.KeyPosition].Value).ToString(param.FormatDipKey) : param.FormatDipKey;

                        attr.ReadMonth = (reg.MonthPosition > 0);
                        attr.ReadYear  = (reg.YearPosition > 0);
                        attr.Value     = key;

                        // versione 1.0.0.2 inseriscono i mesi con il 13 per la tredicesima e con il 14 per la quattordicesima
                        if (month > 12)
                        {
                            attr.ExtraMonth = month - 12;
                            // default reiserisce un mese valido
                            month = 12;
                            // prima leggeva il mese dagli attributi del file
                            //month = File.GetLastWriteTime(FullFileName).Month;
                            switch (attr.ExtraMonth)
                            {
                            case 1:
                                {
                                    // mese tredicesima
                                    if (param.ThirteenthMonth >= 1 && param.ThirteenthMonth <= 12)
                                    {
                                        month = param.ThirteenthMonth;
                                    }
                                    break;
                                }

                            case 2:
                                {
                                    // mese quattordicesima
                                    if (param.FourteenthMonth >= 1 && param.FourteenthMonth <= 12)
                                    {
                                        month = param.FourteenthMonth;
                                    }
                                    break;
                                }
                            }
                        }
                        if (attr.ReadMonth || attr.ReadYear)
                        {
                            // se il mese non è impostato setta di default gennaio
                            // solo perché non dia errore nella stringa del database localization estrae poi correttamente solo il mese o l'anno
                            if (!attr.ReadMonth)
                            {
                                month = 1;
                            }

                            // se l'anno non è impostato setta di default l'anno corrente
                            // solo perché non dia errore nella stringa del database localization estrae poi correttamente solo il mese o l'anno
                            if (!attr.ReadYear)
                            {
                                year = DateTime.Today.Year;
                            }

                            // imposta il periodo relativo al nome del file
                            attr.Period = new DateTime(year, month, 1);
                        }
                        // imposta se il messaggio è pubblico o privato
                        attr.isPublicMessage = reg.isPublicMessage;
                    }
                });
            }
            catch
            {
                return(attr);
            }

            return(attr);
        }