コード例 #1
0
        public static void SendAutoReminderAboutTask(DateTime scheduleDate)
        {
            var execAlert = new List<int>();

            var defaultDao = new DaoFactory(Tenant.DEFAULT_TENANT, CRMConstants.StorageModule);
            
            foreach (var row in defaultDao.GetTaskDao()
                                  .GetInfoForReminder(scheduleDate))
            {

                var tenantId = Convert.ToInt32(row[0]);
                var taskId = Convert.ToInt32(row[1]);
                var deadline = Convert.ToDateTime(row[2]);
                var alertValue = Convert.ToInt32(row[3]);
                var responsibleID = !string.IsNullOrEmpty(Convert.ToString(row[4])) ? new Guid(Convert.ToString(row[4])) : Guid.Empty;
                
                var deadlineReminderDate = deadline.AddMinutes(-alertValue);

                if (deadlineReminderDate.Subtract(scheduleDate).Minutes > 1) continue;

                execAlert.Add(taskId);

                var tenant = CoreContext.TenantManager.GetTenant(tenantId);
                if (tenant == null ||
                    tenant.Status != TenantStatus.Active ||
                    TariffState.NotPaid <= CoreContext.PaymentManager.GetTariff(tenant.TenantId).State)
                {
                    continue;
                }

                try
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(ASC.Core.Configuration.Constants.CoreSystem);
                    
                    var user = CoreContext.UserManager.GetUsers(responsibleID);

                    if (!(!Constants.LostUser.Equals(user) && user.Status == EmployeeStatus.Active)) continue;
                    
                    SecurityContext.AuthenticateMe(user.ID);

                    Thread.CurrentThread.CurrentCulture = user.GetCulture();
                    Thread.CurrentThread.CurrentUICulture = user.GetCulture();

                    var task = new DaoFactory(tenantId, CRMConstants.StorageModule).GetTaskDao().GetByID(taskId);

                     if (task == null) continue;

                    NotifyClient.Instance.SendTaskReminder(task);

                }
                catch (Exception ex)
                {
                    LogManager.GetLogger("ASC.CRM.Tasks").Error("SendAutoReminderAboutTask, tenant: " + tenant.TenantDomain, ex);
                }
            }

            defaultDao.GetTaskDao().ExecAlert(execAlert);
        }