public void AddRelationshipEvents(MailMessageItem item)
        {
            CoreContext.TenantManager.SetCurrentTenant(TenantId);
            var factory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId, CRMConstants.DatabaseId);
            foreach (var contact_entity in item.LinkedCrmEntityIds)
            {
                switch (contact_entity.Type)
                {
                    case ChainXCrmContactEntity.EntityTypes.Contact:
                        var crm_contact = factory.GetContactDao().GetByID(contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_contact);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Case:
                        var crm_case = factory.GetCasesDao().GetByID(contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_case);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Opportunity:
                        var crm_opportunity = factory.GetDealDao().GetByID(contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_opportunity);
                        break;
                }

                var file_ids = StoreAttachmentsToCrm(item, contact_entity);
                var content_string = GetHistoryContentJson(item);
                AddRelationshipEventWithCrmApi(item, contact_entity, content_string, file_ids);
            }
        }
Beispiel #2
0
        public int GetCRMRootFolder()
        {
            if (_crmDaoFactory == null)
                _crmDaoFactory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId,
                                                CRMConstants.DatabaseId);

            return  _crmDaoFactory.GetFileDao().GetRoot();
            
        }
Beispiel #3
0
        internal static List<BaseCalendar> GetUserCalendars(Guid userId)
        {
            if (!DbRegistry.IsDatabaseRegistered(CRMConstants.DatabaseId))
                DbRegistry.RegisterDatabase(CRMConstants.DatabaseId, WebConfigurationManager.ConnectionStrings[CRMConstants.DatabaseId]);

            var tenantId = CoreContext.TenantManager.GetCurrentTenant().TenantId;
            var crmDaoFactory = new DaoFactory(tenantId,CRMConstants.DatabaseId);

            var cals = new List<BaseCalendar>();
            cals.Add(new CRMCalendar(crmDaoFactory,userId));
            return cals;
           
        }
        public CRMCalendar(DaoFactory daoFactory, Guid userId)
        {
            _daoFactory = daoFactory;

            Context.HtmlBackgroundColor = "";
            Context.HtmlTextColor = "";
            Context.CanChangeAlertType = false;
            Context.CanChangeTimeZone = false;
            Context.GetGroupMethod = () => Web.CRM.Resources.CRMCommonResource.ProductName;
            Id = "crm_calendar";
            EventAlertType = EventAlertType.Never;
            Name = Web.CRM.Resources.CRMCommonResource.ProductName;
            Description = "";
            SharingOptions = new SharingOptions();
            SharingOptions.PublicItems.Add(new SharingOptions.PublicItem {Id = userId, IsGroup = false});
        }
        public CRMCalendar(DaoFactory daoFactory, Guid userId)
        {
            _userId = userId;
            _daoFactory = daoFactory;

            this.Context.HtmlBackgroundColor = "";
            this.Context.HtmlTextColor = "";
            this.Context.CanChangeAlertType = false;
            this.Context.CanChangeTimeZone = false;
            this.Context.GetGroupMethod = delegate() { return ASC.Web.CRM.Resources.CRMCommonResource.ProductName; };
            this.Id = "crm_calendar";
            this.EventAlertType = EventAlertType.Never;
            this.Name = ASC.Web.CRM.Resources.CRMCommonResource.ProductName;
            this.Description = "";
            this.SharingOptions = new SharingOptions();
            this.SharingOptions.PublicItems.Add(new SharingOptions.PublicItem() { Id = userId, IsGroup = false });
        }
        public void Configure()
        {
            if (!FilesIntegration.IsRegisteredFileSecurityProvider("crm", "crm_common"))
            {
                FilesIntegration.RegisterFileSecurityProvider("crm", "crm_common", new FileSecurityProvider());
            }

            //Register prodjects' calendar events
            CalendarManager.Instance.RegistryCalendarProvider(userid =>
                {
                    if (WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(), userid))
                    {
                        var factory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId, CRMConstants.DatabaseId);
                        return new List<BaseCalendar> {new CRMCalendar(factory, userid)};
                    }
                    return new List<BaseCalendar>();
                });
        }
        public void AddRelationshipEvents(MailMessageItem item)
        {
            var factory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId, CRMConstants.DatabaseId);
            foreach (var contactEntity in item.LinkedCrmEntityIds)
            {
                switch (contactEntity.Type)
                {
                    case ChainXCrmContactEntity.EntityTypes.Contact:
                        var crmContact = factory.GetContactDao().GetByID(contactEntity.Id);
                        CRMSecurity.DemandAccessTo(crmContact);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Case:
                        var crmCase = factory.GetCasesDao().GetByID(contactEntity.Id);
                        CRMSecurity.DemandAccessTo(crmCase);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Opportunity:
                        var crmOpportunity = factory.GetDealDao().GetByID(contactEntity.Id);
                        CRMSecurity.DemandAccessTo(crmOpportunity);
                        break;
                }

                var fileIds = new List<int>();

                foreach (var attachment in item.Attachments.FindAll(attach => !attach.isEmbedded))
                {
                    using (var file = AttachmentManager.GetAttachmentStream(attachment))
                    {
                        var uploadedFileId = ApiHelper.UploadToCrm(file.FileStream, file.FileName,
                                                                       attachment.contentType, contactEntity);
                        if (uploadedFileId > 0)
                        {
                            fileIds.Add(uploadedFileId);
                        }
                    }
                }

                var contentString = GetHistoryContentJson(item);

                ApiHelper.AddToCrmHistory(item, contactEntity, contentString, fileIds);
            }
        }
Beispiel #8
0
        public IEnumerable<FileWrapper> GetCRMFiles(int contactID, EntityType entityType, int entityID)
        {

            if (_crmDaoFactory == null)
                _crmDaoFactory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId,
                                                CRMConstants.DatabaseId);
                      
            var members = new List<int>();

            if (contactID > 0)
            {
                members.Add(contactID);

                if (_crmDaoFactory.GetContactDao().GetByID(contactID) is Company)
                 members.AddRange(_crmDaoFactory.GetContactDao().GetMembers(contactID).Select(item => item.ID));

            }

            var answer = _crmDaoFactory.GetRelationshipEventDao().GetAllFiles(members.ToArray(), entityType, entityID)
                .ConvertAll(file => new FileWrapper(file));

            return answer;
        }
 public CRMSecurityObjectProvider(DaoFactory daoFactory)
 {
     _daoFactory = daoFactory;
 }
        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);
        }
Beispiel #11
0
        public int AttachCRMFiles(int contactID, EntityType entityType, int entityID, IEnumerable<int> fileIDs)
        {
            if (_crmDaoFactory == null)
                _crmDaoFactory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId,
                                                CRMConstants.DatabaseId);

          return  _crmDaoFactory.GetRelationshipEventDao().AttachFiles(contactID, entityType, entityID, fileIDs.ToArray());

        }
Beispiel #12
0
        private Feed ToFeed(Cases cases)
        {
            var dao = new DaoFactory(Tenant, DbId).GetContactDao();
            var contactsString = Helper.GetContactsString(cases.Members, dao);

            var itemUrl = "/products/crm/cases.aspx?id=" + cases.ID + "#profile";
            return new Feed(cases.CreateBy, cases.CreateOn)
                {
                    Item = item,
                    ItemId = cases.ID.ToString(CultureInfo.InvariantCulture),
                    ItemUrl = CommonLinkUtility.ToAbsolute(itemUrl),
                    Product = Product,
                    Module = Name,
                    Title = cases.Title,
                    AdditionalInfo = contactsString,
                    Keywords = cases.Title,
                    HasPreview = false,
                    CanComment = false,
                    GroupId = string.Format("{0}_{1}", item, cases.ID)
                };
        }
 public MailTemplateManager(DaoFactory daoFactory)
 {
     _daoFactory = daoFactory;
 }
 public MailTemplateManager()
 {
     _daoFactory = Global.DaoFactory;
 }
Beispiel #15
0
        public SendBatchEmailsOperation(
              List<int> fileID,
              List<int> contactID,
              String subject,
              String bodyTempate,
              bool storeInHistory)
        {
            Id = TenantProvider.CurrentTenantID;
            Percentage = 0;
            _fileID = fileID;
            _contactID = contactID;
            _subject = subject;
            _bodyTempate = bodyTempate;

            _log = LogManager.GetLogger("ASC.CRM.MailSender");
            _tenantID = TenantProvider.CurrentTenantID;
            _daoFactory = Global.DaoFactory;
            _smtpSetting = Global.TenantSettings.SMTPServerSetting;
            _currUser = ASC.Core.SecurityContext.CurrentAccount.ID;
            _storeInHistory = storeInHistory;

            Status = new
            {
                RecipientCount = _contactID.Count,
                EstimatedTime = 0,
                DeliveryCount = 0
            };
        }
Beispiel #16
0
        public void DeleteCRMFile(int fileID)
        {
            if (_crmDaoFactory == null)
                _crmDaoFactory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId,
                                                CRMConstants.DatabaseId);

            _crmDaoFactory.GetRelationshipEventDao().RemoveFile(fileID);
        } 
        public void LinkChainToCrm(int id_message, int id_tenant, string id_user, List<CrmContactEntity> contact_ids)
        {
            var factory = new DaoFactory(CoreContext.TenantManager.GetCurrentTenant().TenantId, CRMConstants.DatabaseId);
            foreach (var crm_contact_entity in contact_ids)
            {

                switch (crm_contact_entity.Type)
                {
                    case ChainXCrmContactEntity.EntityTypes.Contact:
                        var crm_contact = factory.GetContactDao().GetByID(crm_contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_contact);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Case:
                        var crm_case = factory.GetCasesDao().GetByID(crm_contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_case);
                        break;
                    case ChainXCrmContactEntity.EntityTypes.Opportunity:
                        var crm_opportunity = factory.GetDealDao().GetByID(crm_contact_entity.Id);
                        CRMSecurity.DemandAccessTo(crm_opportunity);
                        break;
                }
            }
            
            using (var db = GetDb())
            {
                var chain_info = GetMessageChainInfo(db, id_tenant, id_user, id_message);
                MarkChainAsCrmLinked(db, chain_info.id, chain_info.mailbox, id_tenant, contact_ids);
                AddChainMailsToCrmHistory(db, chain_info, id_tenant, id_user, contact_ids);
            }
        }
Beispiel #18
0
 public SearchDao(int tenantID, DaoFactory daoFactory)
     : base(tenantID)
 {
     DaoFactory = daoFactory;
 }