示例#1
0
 public override bool VisibleFor(Feed feed, object data, Guid userId)
 {
     return(base.VisibleFor(feed, data, userId) && CRMSecurity.CanGoToFeed((Task)data));
 }
示例#2
0
        private Task SaveOrUpdateTaskInDb(Task newTask)
        {
            if (String.IsNullOrEmpty(newTask.Title) || newTask.DeadLine == DateTime.MinValue ||
                newTask.CategoryID <= 0)
            {
                throw new ArgumentException();
            }

            if (newTask.ID == 0 || Db.ExecuteScalar <int>(Query("crm_task").SelectCount().Where(Exp.Eq("id", newTask.ID))) == 0)
            {
                newTask.CreateOn = DateTime.UtcNow;
                newTask.CreateBy = ASC.Core.SecurityContext.CurrentAccount.ID;

                newTask.LastModifedOn = DateTime.UtcNow;
                newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;

                newTask.ID = Db.ExecuteScalar <int>(
                    Insert("crm_task")
                    .InColumnValue("id", 0)
                    .InColumnValue("title", newTask.Title)
                    .InColumnValue("description", newTask.Description)
                    .InColumnValue("deadline", TenantUtil.DateTimeToUtc(newTask.DeadLine))
                    .InColumnValue("responsible_id", newTask.ResponsibleID)
                    .InColumnValue("contact_id", newTask.ContactID)
                    .InColumnValue("entity_type", (int)newTask.EntityType)
                    .InColumnValue("entity_id", newTask.EntityID)
                    .InColumnValue("is_closed", newTask.IsClosed)
                    .InColumnValue("category_id", newTask.CategoryID)
                    .InColumnValue("create_on", newTask.CreateOn)
                    .InColumnValue("create_by", newTask.CreateBy)
                    .InColumnValue("last_modifed_on", newTask.LastModifedOn)
                    .InColumnValue("last_modifed_by", newTask.LastModifedBy)
                    .InColumnValue("alert_value", newTask.AlertValue)
                    .Identity(1, 0, true));
            }
            else
            {
                var oldTask = Db.ExecuteList(GetTaskQuery(Exp.Eq("id", newTask.ID)))
                              .ConvertAll(row => ToTask(row))
                              .FirstOrDefault();

                CRMSecurity.DemandEdit(oldTask);

                newTask.CreateOn = oldTask.CreateOn;
                newTask.CreateBy = oldTask.CreateBy;

                newTask.LastModifedOn = DateTime.UtcNow;
                newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;

                newTask.IsClosed = oldTask.IsClosed;

                Db.ExecuteNonQuery(
                    Update("crm_task")
                    .Set("title", newTask.Title)
                    .Set("description", newTask.Description)
                    .Set("deadline", TenantUtil.DateTimeToUtc(newTask.DeadLine))
                    .Set("responsible_id", newTask.ResponsibleID)
                    .Set("contact_id", newTask.ContactID)
                    .Set("entity_type", (int)newTask.EntityType)
                    .Set("entity_id", newTask.EntityID)
                    .Set("category_id", newTask.CategoryID)
                    .Set("last_modifed_on", newTask.LastModifedOn)
                    .Set("last_modifed_by", newTask.LastModifedBy)
                    .Set("alert_value", (int)newTask.AlertValue)
                    .Set("exec_alert", 0)
                    .Where(Exp.Eq("id", newTask.ID)));
            }

            return(newTask);
        }
示例#3
0
        public int GetDealsCount(String searchText,
                                 Guid responsibleID,
                                 int milestoneID,
                                 IEnumerable <String> tags,
                                 int contactID,
                                 DealMilestoneStatus?stageType,
                                 bool?contactAlsoIsParticipant,
                                 DateTime fromDate,
                                 DateTime toDate)
        {
            var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) +
                           "deals" +
                           SecurityContext.CurrentAccount.ID.ToString() +
                           searchText +
                           responsibleID +
                           milestoneID +
                           contactID;

            if (tags != null)
            {
                cacheKey += String.Join("", tags.ToArray());
            }

            if (stageType.HasValue)
            {
                cacheKey += stageType.Value;
            }

            if (contactAlsoIsParticipant.HasValue)
            {
                cacheKey += contactAlsoIsParticipant.Value;
            }

            if (fromDate != DateTime.MinValue)
            {
                cacheKey += fromDate.ToString();
            }

            if (toDate != DateTime.MinValue)
            {
                cacheKey += toDate.ToString();
            }

            var fromCache = _cache.Get <string>(cacheKey);

            if (fromCache != null)
            {
                return(Convert.ToInt32(fromCache));
            }

            var withParams = !(String.IsNullOrEmpty(searchText) &&
                               responsibleID == Guid.Empty &&
                               milestoneID <= 0 &&
                               (tags == null || !tags.Any()) &&
                               contactID <= 0 &&
                               stageType == null &&
                               contactAlsoIsParticipant == null &&
                               fromDate == DateTime.MinValue &&
                               toDate == DateTime.MinValue);

            ICollection <int> exceptIDs = CRMSecurity.GetPrivateItems(typeof(Deal)).ToList();

            int result;

            using (var db = GetDb())
            {
                if (withParams)
                {
                    var whereConditional = WhereConditional(exceptIDs, searchText, responsibleID, milestoneID, tags,
                                                            contactID, stageType, contactAlsoIsParticipant);


                    var sqlQuery = GetDealSqlQuery(whereConditional);

                    if (fromDate != DateTime.MinValue && toDate != DateTime.MinValue)
                    {
                        sqlQuery.Having(Exp.Between("close_date", TenantUtil.DateTimeToUtc(fromDate), TenantUtil.DateTimeToUtc(toDate)));

                        result = db.ExecuteList(sqlQuery).Count;
                    }
                    else if (whereConditional == null)
                    {
                        result = 0;
                    }
                    else
                    {
                        result = db.ExecuteList(sqlQuery).Count;
                    }
                }
                else
                {
                    var countWithoutPrivate = db.ExecuteScalar <int>(Query("crm_deal").SelectCount());
                    var privateCount        = exceptIDs.Count;

                    if (privateCount > countWithoutPrivate)
                    {
                        _log.Error("Private deals count more than all deals");

                        privateCount = 0;
                    }

                    result = countWithoutPrivate - privateCount;
                }
            }
            if (result > 0)
            {
                _cache.Insert(cacheKey, result, TimeSpan.FromSeconds(30));
            }
            return(result);
        }
示例#4
0
        protected void ExecCasesDetailsView(ASC.CRM.Core.Entities.Cases targetCase)
        {
            var casesDetailsViewControl = (CasesDetailsView)LoadControl(CasesDetailsView.Location);

            casesDetailsViewControl.TargetCase = targetCase;
            CommonContainerHolder.Controls.Add(casesDetailsViewControl);

            var title = targetCase.Title;

            Master.CurrentPageCaption    = title;
            Master.CommonContainerHeader = Global.RenderItemHeaderWithMenu(title.HtmlEncode(), EntityType.Case, CRMSecurity.IsPrivate(targetCase), true);

            Title = HeaderStringHelper.GetPageTitle(title);
        }
示例#5
0
        public List <Task> GetTasks(
            String searchText,
            Guid responsibleID,
            int categoryID,
            bool?isClosed,
            DateTime fromDate,
            DateTime toDate,
            EntityType entityType,
            int entityID,
            int from,
            int count,
            OrderBy orderBy)
        {
            if (CRMSecurity.IsAdmin)
            {
                return(GetCrudeTasks(
                           searchText,
                           responsibleID,
                           categoryID,
                           isClosed,
                           fromDate,
                           toDate,
                           entityType,
                           entityID,
                           from,
                           count,
                           orderBy));
            }


            var crudeTasks = GetCrudeTasks(
                searchText,
                responsibleID,
                categoryID,
                isClosed,
                fromDate,
                toDate,
                entityType,
                entityID,
                0,
                from + count,
                orderBy);

            if (crudeTasks.Count == 0)
            {
                return(crudeTasks);
            }

            if (crudeTasks.Count < from + count)
            {
                return(CRMSecurity.FilterRead(crudeTasks).Skip(from).ToList());
            }

            var result = CRMSecurity.FilterRead(crudeTasks).ToList();

            if (result.Count == crudeTasks.Count)
            {
                return(result.Skip(from).ToList());
            }

            var localCount = count;
            var localFrom  = from + count;

            while (true)
            {
                crudeTasks = GetCrudeTasks(
                    searchText,
                    responsibleID,
                    categoryID,
                    isClosed,
                    fromDate,
                    toDate,
                    entityType,
                    entityID,
                    localFrom,
                    localCount,
                    orderBy);

                if (crudeTasks.Count == 0)
                {
                    break;
                }

                result.AddRange(CRMSecurity.FilterRead(crudeTasks));

                if ((result.Count >= count + from) || (crudeTasks.Count < localCount))
                {
                    break;
                }

                localFrom += localCount;
                localCount = localCount * 2;
            }

            return(result.Skip(from).Take(count).ToList());
        }
        public RelationshipEvent CreateItem(RelationshipEvent item)
        {
            CRMSecurity.DemandCreateOrUpdate(item);

            var htmlBody = String.Empty;

            if (item.CreateOn == DateTime.MinValue)
            {
                item.CreateOn = TenantUtil.DateTimeNow();
            }
            item.CreateBy      = ASC.Core.SecurityContext.CurrentAccount.ID;
            item.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;

            if (item.CategoryID == (int)HistoryCategorySystem.MailMessage)
            {
                var jsonObj   = JObject.Parse(item.Content);
                var messageId = jsonObj.Value <Int32>("message_id");

                var apiServer = new Api.ApiServer();
                var msg       = apiServer.GetApiResponse(
                    String.Format("{0}mail/messages/{1}.json?id={1}&loadImages=true&needSanitize=true", SetupInfo.WebApiBaseUrl, messageId), "GET");

                if (msg == null)
                {
                    throw new ArgumentException("Mail message cannot be found");
                }

                var    msgResponseWrapper = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(msg)));
                var    msgRequestObj      = msgResponseWrapper.Value <JObject>("response");
                string messageUrl;

                htmlBody = msgRequestObj.Value <String>("htmlBody");

                using (var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(htmlBody)))
                {
                    var filePath = String.Format("folder_{0}/message_{1}.html", (messageId / 1000 + 1) * 1000, messageId);

                    Global.GetStore().Save("mail_messages", filePath, fileStream);

                    messageUrl = String.Format("{0}HttpHandlers/filehandler.ashx?action=mailmessage&message_id={1}", PathProvider.BaseAbsolutePath, messageId).ToLower();
                }

                var msg_date_created = msgRequestObj.Value <String>("date");
                var message_id       = msgRequestObj.Value <Int32>("id");
                item.Content = JsonConvert.SerializeObject(new
                {
                    @from        = msgRequestObj.Value <String>("from"),
                    to           = msgRequestObj.Value <String>("to"),
                    cc           = msgRequestObj.Value <String>("cc"),
                    bcc          = msgRequestObj.Value <String>("bcc"),
                    subject      = msgRequestObj.Value <String>("subject"),
                    important    = msgRequestObj.Value <Boolean>("important"),
                    chain_id     = msgRequestObj.Value <String>("chainId"),
                    is_sended    = msgRequestObj.Value <Int32>("folder") != 1,
                    date_created = msg_date_created,
                    introduction = msgRequestObj.Value <String>("introduction"),
                    message_id   = message_id,
                    message_url  = messageUrl
                });

                item.CreateOn = DateTime.Parse(msg_date_created, CultureInfo.InvariantCulture);

                var sqlQueryFindMailsAlready = Query("crm_relationship_event")
                                               .SelectCount()
                                               .Where("contact_id", item.ContactID)
                                               .Where(Exp.Like("content", string.Format("\"message_id\":{0},", message_id)))
                                               .Where("entity_type", (int)item.EntityType)
                                               .Where("entity_id", item.EntityID)
                                               .Where("category_id", item.CategoryID);
                if (Db.ExecuteScalar <int>(sqlQueryFindMailsAlready) > 0)
                {
                    throw new Exception("Already exists");
                }
            }


            item.ID = Db.ExecuteScalar <int>(
                Insert("crm_relationship_event")
                .InColumnValue("id", 0)
                .InColumnValue("contact_id", item.ContactID)
                .InColumnValue("content", item.Content)
                .InColumnValue("create_on", TenantUtil.DateTimeToUtc(item.CreateOn))
                .InColumnValue("create_by", item.CreateBy)
                .InColumnValue("entity_type", (int)item.EntityType)
                .InColumnValue("entity_id", item.EntityID)
                .InColumnValue("category_id", item.CategoryID)
                .InColumnValue("last_modifed_on", DateTime.UtcNow)
                .InColumnValue("last_modifed_by", item.LastModifedBy)
                .InColumnValue("have_files", false)
                .Identity(1, 0, true));

            if (item.CreateOn.Kind == DateTimeKind.Utc)
            {
                item.CreateOn = TenantUtil.DateTimeFromUtc(item.CreateOn);
            }

            FactoryIndexer <EventsWrapper> .IndexAsync(item);

            return(item);
        }
示例#7
0
        public VoipUpload DeleteUploadedFile(AudioType audioType, string fileName)
        {
            if (!CRMSecurity.IsAdmin)
            {
                throw CRMSecurity.CreateSecurityException();
            }

            var store  = Global.GetStore();
            var path   = Path.Combine(audioType.ToString().ToLower(), fileName);
            var result = new VoipUpload
            {
                AudioType = audioType,
                Name      = fileName,
                Path      = CommonLinkUtility.GetFullAbsolutePath(store.GetUri(path).ToString())
            };

            if (!store.IsFile("voip", path))
            {
                throw new ItemNotFoundException();
            }
            store.Delete("voip", path);

            var dao     = DaoFactory.VoipDao;
            var numbers = dao.GetNumbers();

            var defAudio = StorageFactory.GetStorage("", "crm").ListFiles("voip", "default/" + audioType.ToString().ToLower(), "*.*", true).FirstOrDefault();

            if (defAudio == null)
            {
                return(result);
            }

            foreach (var number in numbers)
            {
                switch (audioType)
                {
                case AudioType.Greeting:
                    if (number.Settings.GreetingAudio == result.Path)
                    {
                        number.Settings.GreetingAudio = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString());
                    }
                    break;

                case AudioType.HoldUp:
                    if (number.Settings.HoldAudio == result.Path)
                    {
                        number.Settings.HoldAudio = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString());
                    }
                    break;

                case AudioType.Queue:
                    var queue = number.Settings.Queue;
                    if (queue != null && queue.WaitUrl == result.Path)
                    {
                        queue.WaitUrl = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString());
                    }
                    break;

                case AudioType.VoiceMail:
                    if (number.Settings.VoiceMail == result.Path)
                    {
                        number.Settings.VoiceMail = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString());
                    }
                    break;
                }

                dao.SaveOrUpdateNumber(number);
            }

            return(result);
        }
        public int GetInvoicesCount(
            String searchText,
            InvoiceStatus?status,
            DateTime issueDateFrom,
            DateTime issueDateTo,
            DateTime dueDateFrom,
            DateTime dueDateTo,
            EntityType entityType,
            int entityID,
            String currency)
        {
            var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) +
                           "invoice" +
                           SecurityContext.CurrentAccount.ID.ToString() +
                           searchText;

            var fromCache = _cache.Get(cacheKey);

            if (fromCache != null)
            {
                return(Convert.ToInt32(fromCache));
            }

            var withParams = hasParams(searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);

            var exceptIDs = CRMSecurity.GetPrivateItems(typeof(Invoice)).ToList();

            int result;

            using (var db = GetDb())
            {
                if (withParams)
                {
                    var whereConditional = WhereConditional(null, exceptIDs, searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);
                    result = whereConditional != null?db.ExecuteScalar <int>(Query("crm_invoice").Where(whereConditional).SelectCount()) : 0;
                }
                else
                {
                    var countWithoutPrivate = db.ExecuteScalar <int>(Query("crm_invoice").SelectCount());
                    var privateCount        = exceptIDs.Count;

                    if (privateCount > countWithoutPrivate)
                    {
                        _log.ErrorFormat(@"Private invoice count more than all cases. Tenant: {0}. CurrentAccount: {1}",
                                         TenantID,
                                         SecurityContext.CurrentAccount.ID);

                        privateCount = 0;
                    }

                    result = countWithoutPrivate - privateCount;
                }
            }

            if (result > 0)
            {
                _cache.Remove(cacheKey);
                _cache.Insert(cacheKey, result, new CacheDependency(null, new[] { _invoiceCacheKey }), Cache.NoAbsoluteExpiration,
                              TimeSpan.FromSeconds(30));
            }
            return(result);
        }
        private int SaveOrUpdateInvoice(Invoice invoice, DbManager db)
        {
            if (String.IsNullOrEmpty(invoice.Number) ||
                invoice.IssueDate == DateTime.MinValue ||
                invoice.ContactID <= 0 ||
                invoice.DueDate == DateTime.MinValue ||
                String.IsNullOrEmpty(invoice.Currency) ||
                invoice.ExchangeRate <= 0 ||
                String.IsNullOrEmpty(invoice.Terms))
            {
                throw new ArgumentException();
            }



            invoice.PurchaseOrderNumber = !String.IsNullOrEmpty(invoice.PurchaseOrderNumber) ? invoice.PurchaseOrderNumber : String.Empty;

            if (!IsExist(invoice.ID, db))
            {
                if (IsExist(invoice.Number, db))
                {
                    throw new ArgumentException();
                }

                invoice.ID = db.ExecuteScalar <int>(
                    Insert("crm_invoice")
                    .InColumnValue("id", 0)
                    .InColumnValue("status", (int)invoice.Status)
                    .InColumnValue("number", invoice.Number)
                    .InColumnValue("issue_date", TenantUtil.DateTimeToUtc(invoice.IssueDate))
                    .InColumnValue("template_type", invoice.TemplateType)
                    .InColumnValue("contact_id", invoice.ContactID)
                    .InColumnValue("consignee_id", invoice.ConsigneeID)
                    .InColumnValue("entity_type", (int)invoice.EntityType)
                    .InColumnValue("entity_id", invoice.EntityID)
                    .InColumnValue("due_date", TenantUtil.DateTimeToUtc(invoice.DueDate))
                    .InColumnValue("language", invoice.Language)
                    .InColumnValue("currency", invoice.Currency)
                    .InColumnValue("exchange_rate", invoice.ExchangeRate)
                    .InColumnValue("purchase_order_number", invoice.PurchaseOrderNumber)
                    .InColumnValue("terms", invoice.Terms)
                    .InColumnValue("description", invoice.Description)
                    .InColumnValue("json_data", null)
                    .InColumnValue("file_id", 0)
                    .InColumnValue("create_on", DateTime.UtcNow)
                    .InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
                    .InColumnValue("last_modifed_on", DateTime.UtcNow)
                    .InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
                    .Identity(1, 0, true));
            }
            else
            {
                var oldInvoice = db.ExecuteList(GetInvoiceSqlQuery(Exp.Eq("id", invoice.ID), null))
                                 .ConvertAll(ToInvoice)
                                 .FirstOrDefault();

                CRMSecurity.DemandEdit(oldInvoice);

                db.ExecuteNonQuery(
                    Update("crm_invoice")
                    .Set("status", (int)invoice.Status)
                    .Set("issue_date", TenantUtil.DateTimeToUtc(invoice.IssueDate))
                    .Set("template_type", invoice.TemplateType)
                    .Set("contact_id", invoice.ContactID)
                    .Set("consignee_id", invoice.ConsigneeID)
                    .Set("entity_type", (int)invoice.EntityType)
                    .Set("entity_id", invoice.EntityID)
                    .Set("due_date", TenantUtil.DateTimeToUtc(invoice.DueDate))
                    .Set("language", invoice.Language)
                    .Set("currency", invoice.Currency)
                    .Set("exchange_rate", invoice.ExchangeRate)
                    .Set("purchase_order_number", invoice.PurchaseOrderNumber)
                    .Set("terms", invoice.Terms)
                    .Set("description", invoice.Description)
                    .Set("json_data", null)
                    .Set("file_id", 0)
                    .Set("last_modifed_on", DateTime.UtcNow)
                    .Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
                    .Where(Exp.Eq("id", invoice.ID)));
            }

            return(invoice.ID);
        }
示例#10
0
        protected void ExecDealDetailsView(Deal targetDeal)
        {
            if (!CRMSecurity.CanAccessTo(targetDeal))
            {
                Response.Redirect(PathProvider.StartURL());
            }

            var dealActionViewControl = (DealDetailsView)LoadControl(DealDetailsView.Location);

            dealActionViewControl.TargetDeal = targetDeal;
            CommonContainerHolder.Controls.Add(dealActionViewControl);

            var headerTitle = targetDeal.Title.HtmlEncode();

            Master.CurrentPageCaption = headerTitle;

            Master.CommonContainerHeader = Global.RenderItemHeaderWithMenu(headerTitle, EntityType.Opportunity, CRMSecurity.IsPrivate(targetDeal), true);

            Title = HeaderStringHelper.GetPageTitle(headerTitle);
        }
示例#11
0
        public List <Invoice> GetInvoices(
            String searchText,
            InvoiceStatus?status,
            DateTime issueDateFrom,
            DateTime issueDateTo,
            DateTime dueDateFrom,
            DateTime dueDateTo,
            EntityType entityType,
            int entityID,
            String currency,
            int from,
            int count,
            OrderBy orderBy)
        {
            if (CRMSecurity.IsAdmin)
            {
                return(GetCrudeInvoices(
                           searchText,
                           status,
                           issueDateFrom,
                           issueDateTo,
                           dueDateFrom,
                           dueDateTo,
                           entityType,
                           entityID,
                           currency,
                           from,
                           count,
                           orderBy));
            }


            var crudeInvoices = GetCrudeInvoices(
                searchText,
                status,
                issueDateFrom,
                issueDateTo,
                dueDateFrom,
                dueDateTo,
                entityType,
                entityID,
                currency,
                0,
                from + count,
                orderBy);

            if (crudeInvoices.Count == 0)
            {
                return(crudeInvoices);
            }

            if (crudeInvoices.Count < from + count)
            {
                return(CRMSecurity.FilterRead(crudeInvoices).Skip(from).ToList());
            }

            var result = CRMSecurity.FilterRead(crudeInvoices).ToList();

            if (result.Count == crudeInvoices.Count)
            {
                return(result.Skip(from).ToList());
            }

            var localCount = count;
            var localFrom  = from + count;

            while (true)
            {
                crudeInvoices = GetCrudeInvoices(
                    searchText,
                    status,
                    issueDateFrom,
                    issueDateTo,
                    dueDateFrom,
                    dueDateTo,
                    entityType,
                    entityID,
                    currency,
                    localFrom,
                    localCount,
                    orderBy);

                if (crudeInvoices.Count == 0)
                {
                    break;
                }

                result.AddRange(CRMSecurity.FilterRead(crudeInvoices));

                if ((result.Count >= count + from) || (crudeInvoices.Count < localCount))
                {
                    break;
                }

                localFrom += localCount;
                localCount = localCount * 2;
            }

            return(result.Skip(from).Take(count).ToList());
        }
示例#12
0
        public int GetCasesCount(
            String searchText,
            int contactID,
            bool?isClosed,
            IEnumerable <String> tags)
        {
            var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) +
                           "cases" +
                           SecurityContext.CurrentAccount.ID.ToString() +
                           searchText +
                           contactID;

            if (tags != null)
            {
                cacheKey += String.Join("", tags.ToArray());
            }

            if (isClosed.HasValue)
            {
                cacheKey += isClosed.Value;
            }

            var fromCache = _cache.Get <string>(cacheKey);

            if (fromCache != null)
            {
                return(Convert.ToInt32(fromCache));
            }


            var withParams = !(String.IsNullOrEmpty(searchText) &&
                               contactID <= 0 &&
                               isClosed == null &&
                               (tags == null || !tags.Any()));


            var exceptIDs = CRMSecurity.GetPrivateItems(typeof(Cases)).ToList();

            int result;

            if (withParams)
            {
                var whereConditional = WhereConditional(exceptIDs, searchText, contactID, isClosed, tags);
                result = whereConditional != null?Db.ExecuteScalar <int>(Query("crm_case").Where(whereConditional).SelectCount()) : 0;
            }
            else
            {
                var countWithoutPrivate = Db.ExecuteScalar <int>(Query("crm_case").SelectCount());
                var privateCount        = exceptIDs.Count;

                if (privateCount > countWithoutPrivate)
                {
                    _log.ErrorFormat(@"Private cases count more than all cases. Tenant: {0}. CurrentAccount: {1}",
                                     TenantID,
                                     SecurityContext.CurrentAccount.ID);

                    privateCount = 0;
                }

                result = countWithoutPrivate - privateCount;
            }

            if (result > 0)
            {
                _cache.Insert(cacheKey, result, TimeSpan.FromSeconds(30));
            }
            return(result);
        }
示例#13
0
        public static void DataContactFullCardView(BasePage page, Contact targetContact)
        {
            List <CustomField> data;

            if (targetContact is Company)
            {
                data = Global.DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Company, targetContact.ID, false);
            }
            else
            {
                data = Global.DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Person, targetContact.ID, false);
            }

            var networks =
                Global.DaoFactory.GetContactInfoDao().GetList(targetContact.ID, null, null, null).ConvertAll(
                    n => new
            {
                data              = n.Data.HtmlEncode(),
                infoType          = n.InfoType,
                isPrimary         = n.IsPrimary,
                categoryName      = n.CategoryToString(),
                infoTypeLocalName = n.InfoType.ToLocalizedString()
            });

            String json;

            using (var stream = new MemoryStream())
            {
                var serializer = new DataContractJsonSerializer(data.GetType());
                serializer.WriteObject(stream, data);
                json = Encoding.UTF8.GetString(stream.ToArray());
            }

            var listItems = Global.DaoFactory.GetListItemDao().GetItems(ListType.ContactStatus);

            var tags           = Global.DaoFactory.GetTagDao().GetEntityTags(EntityType.Contact, targetContact.ID);
            var availableTags  = Global.DaoFactory.GetTagDao().GetAllTags(EntityType.Contact).Where(item => !tags.Contains(item));
            var responsibleIDs = CRMSecurity.GetAccessSubjectGuidsTo(targetContact);

            var script = String.Format(@"
                            var customFieldList = {0};
                            var contactNetworks = {1};
                            var sliderListItems = {2};
                            var contactTags = {3};
                            var contactAvailableTags = {4};
                            var contactResponsibleIDs = {5}; ",
                                       json,
                                       JsonConvert.SerializeObject(networks),
                                       JsonConvert.SerializeObject(new
            {
                id             = targetContact.ID,
                status         = targetContact.StatusID,
                positionsCount = listItems.Count,
                items          = listItems.ConvertAll(n => new
                {
                    id    = n.ID,
                    color = n.Color,
                    title = n.Title.HtmlEncode()
                })
            }),
                                       JsonConvert.SerializeObject(tags.ToList().ConvertAll(t => t.HtmlEncode())),
                                       JsonConvert.SerializeObject(availableTags.ToList().ConvertAll(t => t.HtmlEncode())),
                                       JsonConvert.SerializeObject(responsibleIDs)
                                       );

            page.RegisterInlineScript(script, onReady: false);
        }
示例#14
0
        private SearchResultItem[] ToSearchResultItem(IEnumerable <object[]> rows)
        {
            var result = new List <SearchResultItem>();

            foreach (var row in rows)
            {
                var    containerType = ((EntityType)Convert.ToInt32(row[0]));
                var    id            = row[1];
                string imageRef;
                String url;

                switch (containerType)
                {
                case EntityType.Contact:
                {
                    var contact = DaoFactory.ContactDao.GetByID(Convert.ToInt32(id));

                    if (contact == null || !CRMSecurity.CanAccessTo(contact))
                    {
                        continue;
                    }

                    url = String.Format("default.aspx?id={0}", id);

                    if (contact is Company)
                    {
                        imageRef = WebImageSupplier.GetAbsoluteWebPath("companies_widget.png",
                                                                       ProductEntryPoint.ID);
                    }
                    else
                    {
                        imageRef = WebImageSupplier.GetAbsoluteWebPath("people_widget.png",
                                                                       ProductEntryPoint.ID);
                    }

                    break;
                }

                case EntityType.Opportunity:
                {
                    var deal = DaoFactory.DealDao.GetByID(Convert.ToInt32(id));

                    if (deal == null || !CRMSecurity.CanAccessTo(deal))
                    {
                        continue;
                    }

                    url = String.Format("deals.aspx?id={0}", id);

                    imageRef = WebImageSupplier.GetAbsoluteWebPath("deal_widget.png",
                                                                   ProductEntryPoint.ID);
                    break;
                }

                case EntityType.Case:
                {
                    var cases = DaoFactory.CasesDao.GetByID(Convert.ToInt32(id));

                    if (cases == null || !CRMSecurity.CanAccessTo(cases))
                    {
                        continue;
                    }

                    url = String.Format("cases.aspx?id={0}", id);

                    imageRef = WebImageSupplier.GetAbsoluteWebPath("cases_widget.png",
                                                                   ProductEntryPoint.ID);

                    break;
                }

                case EntityType.Task:
                {
                    var task = DaoFactory.TaskDao.GetByID(Convert.ToInt32(id));

                    if (task == null || !CRMSecurity.CanAccessTo(task))
                    {
                        continue;
                    }

                    url = "";

                    imageRef = WebImageSupplier.GetAbsoluteWebPath("tasks_widget.png",
                                                                   ProductEntryPoint.ID);
                    break;
                }

                case EntityType.Invoice:
                {
                    var invoice = DaoFactory.InvoiceDao.GetByID(Convert.ToInt32(id));

                    if (invoice == null || !CRMSecurity.CanAccessTo(invoice))
                    {
                        continue;
                    }

                    url = String.Format("invoices.aspx?id={0}", id);

                    imageRef = WebImageSupplier.GetAbsoluteWebPath("invoices_widget.png",
                                                                   ProductEntryPoint.ID);

                    break;
                }

                default:
                    throw new ArgumentException();
                }

                result.Add(new SearchResultItem
                {
                    Name        = Convert.ToString(row[2]),
                    Description = HtmlUtil.GetText(Convert.ToString(row[3]), 120),
                    URL         = !string.IsNullOrEmpty(url) ? String.Concat(PathProvider.BaseAbsolutePath, url) : string.Empty,
                    Date        = TenantUtil.DateTimeFromUtc(DateTime.Parse(Convert.ToString(row[7]))),
                    Additional  = new Dictionary <String, Object>
                    {
                        { "imageRef", imageRef },
                        { "relativeInfo", GetPath(
                              Convert.ToInt32(row[4]),
                              Convert.ToInt32(row[5]),
                              (EntityType)Convert.ToInt32(row[6])) },
                        { "typeInfo", containerType.ToLocalizedString() }
                    }
                });
            }

            return(result.ToArray());
        }
        public string AddContactTagToGroup(string entityType, int entityid, string tagName)
        {
            if (entityid <= 0 || string.IsNullOrEmpty(tagName))
            {
                throw new ArgumentException();
            }

            var entityTypeObj = ToEntityType(entityType);

            if (entityTypeObj != EntityType.Company && entityTypeObj != EntityType.Person)
            {
                throw new ArgumentException();
            }

            var contactInst = DaoFactory.ContactDao.GetByID(entityid);

            if (contactInst == null || !CRMSecurity.CanAccessTo(contactInst))
            {
                throw new ItemNotFoundException();
            }

            if (contactInst is Person && entityTypeObj == EntityType.Company)
            {
                throw new Exception(CRMErrorsResource.ContactIsNotCompany);
            }
            if (contactInst is Company && entityTypeObj == EntityType.Person)
            {
                throw new Exception(CRMErrorsResource.ContactIsNotPerson);
            }


            var contactIDsToAddTag = new List <int>();


            if (contactInst is Company)
            {
                contactIDsToAddTag.Add(contactInst.ID);

                var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(contactInst.ID);

                foreach (var m in members)
                {
                    if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0))
                    {
                        contactIDsToAddTag.Add(m.Key);
                    }
                }
            }
            else
            {
                var CompanyID = ((Person)contactInst).CompanyID;
                if (CompanyID != 0)
                {
                    var cnt = DaoFactory.ContactDao.GetByID(CompanyID);
                    if (cnt != null && cnt is Company && CRMSecurity.CanAccessTo(cnt))
                    {
                        contactIDsToAddTag.Add(CompanyID);

                        var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(CompanyID);

                        foreach (var m in members)
                        {
                            if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0))
                            {
                                contactIDsToAddTag.Add(m.Key);
                            }
                        }
                    }
                    else
                    {
                        contactIDsToAddTag.Add(contactInst.ID);
                    }
                }
                else
                {
                    contactIDsToAddTag.Add(contactInst.ID);
                }
            }

            DaoFactory.TagDao.AddTagToContacts(contactIDsToAddTag.ToArray(), tagName);


            var entityTitle    = contactInst.GetTitle();
            var messageActions = GetTagCreatedGroupAction(entityTypeObj);

            foreach (var messageAction in messageActions)
            {
                MessageService.Send(Request, messageAction, MessageTarget.Create(contactInst.ID), entityTitle, tagName);
            }

            return(tagName);
        }
示例#16
0
        public OpportunityWrapper UpdateDeal(
            int opportunityid,
            int contactid,
            IEnumerable <int> members,
            string title,
            string description,
            Guid responsibleid,
            BidType bidType,
            decimal bidValue,
            string bidCurrencyAbbr,
            int perPeriodValue,
            int stageid,
            int successProbability,
            ApiDateTime actualCloseDate,
            ApiDateTime expectedCloseDate,
            IEnumerable <ItemKeyValuePair <int, string> > customFieldList,
            bool isPrivate,
            IEnumerable <Guid> accessList,
            bool isNotify)
        {
            var deal = DaoFactory.DealDao.GetByID(opportunityid);

            if (deal == null)
            {
                throw new ItemNotFoundException();
            }

            deal.Title                    = title;
            deal.Description              = description;
            deal.ResponsibleID            = responsibleid;
            deal.BidType                  = bidType;
            deal.BidValue                 = bidValue;
            deal.PerPeriodValue           = perPeriodValue;
            deal.DealMilestoneID          = stageid;
            deal.DealMilestoneProbability = successProbability < 0 ? 0 : (successProbability > 100 ? 100 : successProbability);
            deal.ContactID                = contactid;
            deal.ActualCloseDate          = actualCloseDate;
            deal.ExpectedCloseDate        = expectedCloseDate;
            deal.BidCurrency              = !String.IsNullOrEmpty(bidCurrencyAbbr) ? bidCurrencyAbbr.ToUpper() : null;

            CRMSecurity.DemandCreateOrUpdate(deal);

            DaoFactory.DealDao.EditDeal(deal);

            deal = DaoFactory.DealDao.GetByID(opportunityid);

            var membersList = members != null?members.ToList() : new List <int>();

            if (membersList.Any())
            {
                var contacts = DaoFactory.ContactDao.GetContacts(membersList.ToArray()).Where(CRMSecurity.CanAccessTo).ToList();
                membersList = contacts.Select(m => m.ID).ToList();

                DaoFactory.DealDao.SetMembers(deal.ID, membersList.ToArray());
            }


            if (CRMSecurity.IsAdmin || deal.CreateBy == SecurityContext.CurrentAccount.ID)
            {
                SetAccessToDeal(deal, isPrivate, accessList, isNotify, false);
            }

            if (customFieldList != null)
            {
                var existingCustomFieldList = DaoFactory.CustomFieldDao.GetFieldsDescription(EntityType.Opportunity).Select(fd => fd.ID).ToList();
                foreach (var field in customFieldList)
                {
                    if (string.IsNullOrEmpty(field.Value) || !existingCustomFieldList.Contains(field.Key))
                    {
                        continue;
                    }
                    DaoFactory.CustomFieldDao.SetFieldValue(EntityType.Opportunity, deal.ID, field.Key, field.Value);
                }
            }

            return(ToOpportunityWrapper(deal));
        }
        public string DeleteContactTagFromGroup(string entityType, int entityid, string tagName)
        {
            if (entityid <= 0 || string.IsNullOrEmpty(tagName))
            {
                throw new ArgumentException();
            }

            var entityTypeObj = ToEntityType(entityType);

            if (entityTypeObj != EntityType.Company && entityTypeObj != EntityType.Person)
            {
                throw new ArgumentException();
            }

            var contactInst = DaoFactory.ContactDao.GetByID(entityid);

            if (contactInst == null)
            {
                throw new ItemNotFoundException();
            }

            if (contactInst is Person && entityTypeObj == EntityType.Company)
            {
                throw new Exception(CRMErrorsResource.ContactIsNotCompany);
            }
            if (contactInst is Company && entityTypeObj == EntityType.Person)
            {
                throw new Exception(CRMErrorsResource.ContactIsNotPerson);
            }



            var contactIDsForDeleteTag = new List <int>();

            if (contactInst is Company)
            {
                contactIDsForDeleteTag.Add(contactInst.ID);

                var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(contactInst.ID);

                foreach (var m in members)
                {
                    if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0))
                    {
                        contactIDsForDeleteTag.Add(m.Key);
                    }
                }
            }
            else
            {
                var CompanyID = ((Person)contactInst).CompanyID;
                if (CompanyID != 0)
                {
                    var cnt = DaoFactory.ContactDao.GetByID(CompanyID);
                    if (cnt != null && cnt is Company && CRMSecurity.CanAccessTo(cnt))
                    {
                        contactIDsForDeleteTag.Add(CompanyID);

                        var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(CompanyID);

                        foreach (var m in members)
                        {
                            if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0))
                            {
                                contactIDsForDeleteTag.Add(m.Key);
                            }
                        }
                    }
                    else
                    {
                        contactIDsForDeleteTag.Add(contactInst.ID);
                    }
                }
                else
                {
                    contactIDsForDeleteTag.Add(contactInst.ID);
                }
            }

            DaoFactory.TagDao.DeleteTagFromContacts(contactIDsForDeleteTag.ToArray(), tagName);

            return(tagName);
        }
示例#18
0
        private IEnumerable <OpportunityWrapper> ToListOpportunityWrapper(ICollection <Deal> deals)
        {
            if (deals == null || deals.Count == 0)
            {
                return(new List <OpportunityWrapper>());
            }

            var result = new List <OpportunityWrapper>();

            var contactIDs       = new List <int>();
            var dealIDs          = new List <int>();
            var dealMilestoneIDs = new List <int>();

            foreach (var deal in deals)
            {
                contactIDs.Add(deal.ContactID);
                dealIDs.Add(deal.ID);
                dealMilestoneIDs.Add(deal.DealMilestoneID);
            }

            dealMilestoneIDs = dealMilestoneIDs.Distinct().ToList();

            var contacts = new Dictionary <int, ContactBaseWrapper>();

            var customFields = DaoFactory.CustomFieldDao.GetEnityFields(EntityType.Opportunity, dealIDs.ToArray())
                               .GroupBy(item => item.EntityID)
                               .ToDictionary(item => item.Key, item => item.Select(ToCustomFieldBaseWrapper));

            var dealMilestones = DaoFactory.DealMilestoneDao.GetAll(dealMilestoneIDs.ToArray())
                                 .ToDictionary(item => item.ID, item => new DealMilestoneBaseWrapper(item));


            var dealMembers = DaoFactory.DealDao.GetMembers(dealIDs.ToArray());

            foreach (var value in dealMembers.Values)
            {
                contactIDs.AddRange(value);
            }

            contactIDs = contactIDs.Distinct().ToList();

            if (contactIDs.Count > 0)
            {
                DaoFactory.ContactDao.GetContacts(contactIDs.ToArray()).ForEach(item =>
                {
                    if (item == null)
                    {
                        return;
                    }
                    contacts.Add(item.ID, ToContactBaseWrapper(item));
                });
            }

            foreach (var deal in deals)
            {
                var dealWrapper = new OpportunityWrapper(deal);

                if (contacts.ContainsKey(deal.ContactID))
                {
                    dealWrapper.Contact = contacts[deal.ContactID];
                }

                dealWrapper.CustomFields = customFields.ContainsKey(deal.ID)
                                               ? customFields[deal.ID]
                                               : new List <CustomFieldBaseWrapper>();

                dealWrapper.Members = dealMembers.ContainsKey(dealWrapper.ID)
                                          ? dealMembers[dealWrapper.ID].Where(contacts.ContainsKey).Select(item => contacts[item])
                                          : new List <ContactBaseWrapper>();

                if (dealMilestones.ContainsKey(deal.DealMilestoneID))
                {
                    dealWrapper.Stage = dealMilestones[deal.DealMilestoneID];
                }

                dealWrapper.IsPrivate = CRMSecurity.IsPrivate(deal);

                if (dealWrapper.IsPrivate)
                {
                    dealWrapper.AccessList = CRMSecurity.GetAccessSubjectTo(deal).Select(item => EmployeeWraper.Get(item.Key)).ToItemList();
                }

                if (!string.IsNullOrEmpty(deal.BidCurrency))
                {
                    dealWrapper.BidCurrency = ToCurrencyInfoWrapper(CurrencyProvider.Get(deal.BidCurrency));
                }

                result.Add(dealWrapper);
            }

            return(result);
        }
示例#19
0
        protected void SaveOrUpdateContact(object sender, CommandEventArgs e)
        {
            Contact contact;

            var typeAddedContact = Request["typeAddedContact"];

            var companyID = 0;

            if (!String.IsNullOrEmpty(Request["baseInfo_compID"]))
            {
                companyID = Convert.ToInt32(Request["baseInfo_compID"]);
            }
            else if (!String.IsNullOrEmpty(Request["baseInfo_compName"]))
            {
                var peopleCompany = new Company
                {
                    CompanyName = Request["baseInfo_compName"].Trim()
                };

                peopleCompany.ID = Global.DaoFactory.GetContactDao().SaveContact(peopleCompany);

                CRMSecurity.MakePublic(peopleCompany);

                companyID = peopleCompany.ID;
            }

            if (typeAddedContact.Equals("people"))
            {
                contact = new Person
                {
                    FirstName = Request["baseInfo_firstName"].Trim(),
                    LastName  = Request["baseInfo_lastName"].Trim(),
                    JobTitle  = Request["baseInfo_personPosition"].Trim(),
                    CompanyID = companyID
                };
            }
            else
            {
                contact = new Company
                {
                    CompanyName = Request["baseInfo_companyName"].Trim()
                };
            }

            if (!String.IsNullOrEmpty(Request["baseInfo_contactOverview"]))
            {
                contact.About = Request["baseInfo_contactOverview"].Trim();
            }

            Boolean isSharedContact;

            if (bool.TryParse(Request["isPublicContact"], out isSharedContact))
            {
                contact.IsShared = isSharedContact;
            }

            contact.ContactTypeID = Convert.ToInt32(Request["baseInfo_contactType"]);

            if (TargetContact != null)
            {
                contact.ID       = TargetContact.ID;
                contact.StatusID = TargetContact.StatusID;
                Global.DaoFactory.GetContactDao().UpdateContact(contact);
                contact = Global.DaoFactory.GetContactDao().GetByID(contact.ID);
            }
            else
            {
                contact.ID = Global.DaoFactory.GetContactDao().SaveContact(contact);
                contact    = Global.DaoFactory.GetContactDao().GetByID(contact.ID);
            }

            SetContactManager(contact);

            if (contact is Company)
            {
                int[] assignedContactsIDs = null;

                if (!String.IsNullOrEmpty(Request["baseInfo_assignedContactsIDs"]))
                {
                    assignedContactsIDs = Request["baseInfo_assignedContactsIDs"].Split(',').Select(item => Convert.ToInt32(item)).ToArray();
                }

                Global.DaoFactory.GetContactDao().SetMembers(contact.ID, assignedContactsIDs);
            }

            var assignedTags = Request["baseInfo_assignedTags"];

            if (assignedTags != null)
            {
                var oldTagList = Global.DaoFactory.GetTagDao().GetEntityTags(EntityType.Contact, contact.ID);
                foreach (var tag in oldTagList)
                {
                    Global.DaoFactory.GetTagDao().DeleteTagFromEntity(EntityType.Contact, contact.ID, tag);
                }
                if (assignedTags != string.Empty)
                {
                    var tagListInfo = JObject.Parse(assignedTags)["tagListInfo"].ToArray();
                    var newTagList  = tagListInfo.Select(t => t.ToString()).ToArray();
                    Global.DaoFactory.GetTagDao().SetTagToEntity(EntityType.Contact, contact.ID, newTagList);
                }
            }

            var contactInfos    = new List <ContactInfo>();
            var addressList     = new Dictionary <int, ContactInfo>();
            var addressTemplate = new JObject();

            foreach (String addressPartName in Enum.GetNames(typeof(AddressPart)))
            {
                addressTemplate.Add(addressPartName.ToLower(), "");
            }

            var addressTemplateStr = addressTemplate.ToString();

            foreach (var item in Request.Form.AllKeys)
            {
                if (item.StartsWith("customField_"))
                {
                    int    fieldID    = Convert.ToInt32(item.Split('_')[1]);
                    String fieldValue = Request.Form[item].Trim();

                    if (contact is Person)
                    {
                        Global.DaoFactory.GetCustomFieldDao().SetFieldValue(EntityType.Person, contact.ID, fieldID, fieldValue);
                    }
                    else
                    {
                        Global.DaoFactory.GetCustomFieldDao().SetFieldValue(EntityType.Company, contact.ID, fieldID, fieldValue);
                    }
                }
                else if (item.StartsWith("contactInfo_"))
                {
                    var nameParts       = item.Split('_').Skip(1).ToList();
                    var contactInfoType = (ContactInfoType)Enum.Parse(typeof(ContactInfoType), nameParts[0]);
                    var category        = Convert.ToInt32(nameParts[2]);

                    if (contactInfoType == ContactInfoType.Address)
                    {
                        var index            = Convert.ToInt32(nameParts[1]);
                        var addressPart      = (AddressPart)Enum.Parse(typeof(AddressPart), nameParts[3]);
                        var isPrimaryAddress = Convert.ToInt32(nameParts[4]) == 1;
                        var dataValues       = Request.Form.GetValues(item).Select(n => n.Trim()).ToList();

                        if (!addressList.ContainsKey(index))
                        {
                            var newAddress = new ContactInfo
                            {
                                Category  = category,
                                InfoType  = contactInfoType,
                                Data      = addressTemplateStr,
                                IsPrimary = isPrimaryAddress,
                                ContactID = contact.ID
                            };
                            addressList.Add(index, newAddress);
                        }

                        foreach (var data in dataValues)
                        {
                            var addressParts = JObject.Parse(addressList[index].Data);
                            addressParts[addressPart.ToString().ToLower()] = data;
                            addressList[index].Data = addressParts.ToString();
                        }
                        continue;
                    }

                    var isPrimary = Convert.ToInt32(nameParts[3]) == 1;
                    if (Request.Form.GetValues(item) != null)
                    {
                        var dataValues = Request.Form.GetValues(item).Where(n => !string.IsNullOrEmpty(n.Trim())).ToList();

                        contactInfos.AddRange(dataValues.Select(dataValue => new ContactInfo
                        {
                            Category  = category,
                            InfoType  = contactInfoType,
                            Data      = dataValue.Trim(),
                            IsPrimary = isPrimary,
                            ContactID = contact.ID
                        }));
                    }
                }
            }

            if (addressList.Count > 0)
            {
                contactInfos.AddRange(addressList.Values.ToList());
            }

            Global.DaoFactory.GetContactInfoDao().DeleteByContact(contact.ID);
            Global.DaoFactory.GetContactInfoDao().SaveList(contactInfos);

            var emails = contactInfos
                         .Where(item => item.InfoType == ContactInfoType.Email)
                         .Select(item => item.Data)
                         .ToList();

            if (emails.Count > 0)
            {
                var userIds = CRMSecurity.GetAccessSubjectTo(contact).Keys.ToList();
                Global.DaoFactory.GetContactInfoDao().UpdateMailAggregator(emails, userIds);
            }

            var photoPath = Request["uploadPhotoPath"];

            if (!String.IsNullOrEmpty(photoPath))
            {
                if (photoPath != "null")
                {
                    if (photoPath.StartsWith(PathProvider.BaseAbsolutePath))
                    {
                        var tmpDirName = photoPath.Substring(0, photoPath.LastIndexOf('/'));
                        ContactPhotoManager.TryUploadPhotoFromTmp(contact.ID, TargetContact == null, tmpDirName);
                    }
                    else
                    {
                        ContactPhotoManager.UploadPhoto(photoPath, contact.ID);
                    }
                }
            }
            else if (TargetContact != null)
            {
                ContactPhotoManager.DeletePhoto(TargetContact.ID);
            }

            Response.Redirect(String.Compare(e.CommandArgument.ToString(), "0", true) == 0
                                  ? String.Format("default.aspx?id={0}{1}", contact.ID,
                                                  contact is Company
                                                      ? ""
                                                      : String.Format("&{0}=people", UrlConstant.Type))
                                  : String.Format("default.aspx?action=manage{0}",
                                                  contact is Company
                                                      ? ""
                                                      : String.Format("&{0}=people", UrlConstant.Type)));
        }
示例#20
0
        protected void SaveOrUpdateDeal(Object sender, CommandEventArgs e)
        {
            try
            {
                using (var scope = DIHelper.Resolve())
                {
                    var dao = scope.Resolve <DaoFactory>();
                    int dealID;

                    var _isPrivate = false;
                    var _selectedUsersWithoutCurUsr = new List <Guid>();

                    #region BaseInfo

                    var deal = new Deal
                    {
                        Title           = Request["nameDeal"],
                        Description     = Request["descriptionDeal"],
                        DealMilestoneID = Convert.ToInt32(Request["dealMilestone"])
                    };

                    int contactID;
                    if (int.TryParse(Request["selectedContactID"], out contactID))
                    {
                        deal.ContactID = contactID;
                    }

                    int probability;
                    if (int.TryParse(Request["probability"], out probability))
                    {
                        deal.DealMilestoneProbability = probability;
                    }

                    if (deal.DealMilestoneProbability < 0)
                    {
                        deal.DealMilestoneProbability = 0;
                    }
                    if (deal.DealMilestoneProbability > 100)
                    {
                        deal.DealMilestoneProbability = 100;
                    }

                    deal.BidCurrency = Request["bidCurrency"];

                    if (String.IsNullOrEmpty(deal.BidCurrency))
                    {
                        deal.BidCurrency = Global.TenantSettings.DefaultCurrency.Abbreviation;
                    }
                    else
                    {
                        deal.BidCurrency = deal.BidCurrency.ToUpper();
                    }

                    if (!String.IsNullOrEmpty(Request["bidValue"]))
                    {
                        decimal bidValue;
                        if (!decimal.TryParse(Request["bidValue"], out bidValue))
                        {
                            bidValue = 0;
                        }

                        deal.BidValue = bidValue;
                        deal.BidType  = (BidType)Enum.Parse(typeof(BidType), Request["bidType"]);

                        if (deal.BidType != BidType.FixedBid)
                        {
                            int perPeriodValue;

                            if (int.TryParse(Request["perPeriodValue"], out perPeriodValue))
                            {
                                deal.PerPeriodValue = perPeriodValue;
                            }
                        }
                    }
                    else
                    {
                        deal.BidValue = 0;
                        deal.BidType  = BidType.FixedBid;
                    }

                    DateTime expectedCloseDate;

                    if (!DateTime.TryParse(Request["expectedCloseDate"], out expectedCloseDate))
                    {
                        expectedCloseDate = DateTime.MinValue;
                    }
                    deal.ExpectedCloseDate = expectedCloseDate;

                    deal.ResponsibleID = new Guid(Request["responsibleID"]);

                    #endregion

                    #region Validation

                    CRMSecurity.DemandCreateOrUpdate(deal);

                    if (HavePermission)
                    {
                        var CurrentAccountID = SecurityContext.CurrentAccount.ID;

                        bool value;
                        if (bool.TryParse(Request.Form["isPrivateDeal"], out value))
                        {
                            _isPrivate = value;
                        }

                        if (_isPrivate)
                        {
                            _selectedUsersWithoutCurUsr = Request.Form["selectedPrivateUsers"]
                                                          .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                                          .Select(item => new Guid(item)).Where(i => i != CurrentAccountID).Distinct().ToList();

                            foreach (var uID in _selectedUsersWithoutCurUsr)
                            {
                                var usr = CoreContext.UserManager.GetUsers(uID);
                                if (usr.IsVisitor())
                                {
                                    throw new ArgumentException();
                                }
                            }

                            if (deal.ResponsibleID != CurrentAccountID)
                            {
                                _selectedUsersWithoutCurUsr.Add(deal.ResponsibleID);

                                var responsible = CoreContext.UserManager.GetUsers(deal.ResponsibleID);
                                if (responsible.IsVisitor())
                                {
                                    throw new ArgumentException(CRMErrorsResource.ResponsibleCannotBeVisitor);
                                }
                            }
                        }
                    }


                    #endregion

                    var dealMilestone = dao.DealMilestoneDao.GetByID(deal.DealMilestoneID);
                    if (TargetDeal == null)
                    {
                        if (dealMilestone.Status != DealMilestoneStatus.Open)
                        {
                            deal.ActualCloseDate = TenantUtil.DateTimeNow();
                        }

                        dealID        = dao.DealDao.CreateNewDeal(deal);
                        deal.ID       = dealID;
                        deal.CreateBy = SecurityContext.CurrentAccount.ID;
                        deal.CreateOn = TenantUtil.DateTimeNow();
                        deal          = dao.DealDao.GetByID(dealID);

                        SetPermission(deal, _isPrivate, _selectedUsersWithoutCurUsr);

                        if (deal.ResponsibleID != Guid.Empty && deal.ResponsibleID != SecurityContext.CurrentAccount.ID)
                        {
                            NotifyClient.Instance.SendAboutResponsibleForOpportunity(deal);
                        }
                        MessageService.Send(HttpContext.Current.Request, MessageAction.OpportunityCreated,
                                            MessageTarget.Create(deal.ID), deal.Title);
                    }
                    else
                    {
                        dealID  = TargetDeal.ID;
                        deal.ID = TargetDeal.ID;
                        deal.ActualCloseDate = TargetDeal.ActualCloseDate;

                        if (TargetDeal.ResponsibleID != Guid.Empty && TargetDeal.ResponsibleID != deal.ResponsibleID)
                        {
                            NotifyClient.Instance.SendAboutResponsibleForOpportunity(deal);
                        }


                        if (TargetDeal.DealMilestoneID != deal.DealMilestoneID)
                        {
                            deal.ActualCloseDate = dealMilestone.Status != DealMilestoneStatus.Open
                                ? TenantUtil.DateTimeNow()
                                : DateTime.MinValue;
                        }

                        dao.DealDao.EditDeal(deal);
                        deal = dao.DealDao.GetByID(dealID);
                        SetPermission(deal, _isPrivate, _selectedUsersWithoutCurUsr);
                        MessageService.Send(HttpContext.Current.Request, MessageAction.OpportunityUpdated,
                                            MessageTarget.Create(deal.ID), deal.Title);
                    }

                    #region Members

                    var dealMembers = !String.IsNullOrEmpty(Request["selectedMembersID"])
                        ? Request["selectedMembersID"].Split(new[] { ',' }).Select(
                        id => Convert.ToInt32(id)).Where(id => id != deal.ContactID).ToList()
                        : new List <int>();

                    var dealMembersContacts =
                        dao.ContactDao.GetContacts(dealMembers.ToArray()).Where(CRMSecurity.CanAccessTo).ToList();
                    dealMembers = dealMembersContacts.Select(m => m.ID).ToList();

                    if (deal.ContactID > 0)
                    {
                        dealMembers.Add(deal.ContactID);
                    }

                    dao.DealDao.SetMembers(dealID, dealMembers.ToArray());

                    #endregion

                    #region CustomFields

                    foreach (var customField in Request.Form.AllKeys)
                    {
                        if (!customField.StartsWith("customField_"))
                        {
                            continue;
                        }

                        var fieldID = Convert.ToInt32(customField.Split('_')[1]);

                        var fieldValue = Request.Form[customField];

                        if (String.IsNullOrEmpty(fieldValue) && TargetDeal == null)
                        {
                            continue;
                        }

                        dao.CustomFieldDao.SetFieldValue(EntityType.Opportunity, dealID, fieldID, fieldValue);
                    }

                    #endregion

                    string redirectUrl;
                    if (TargetDeal == null && UrlParameters.ContactID != 0)
                    {
                        redirectUrl =
                            string.Format(
                                e.CommandArgument.ToString() == "1"
                                    ? "deals.aspx?action=manage&contactID={0}"
                                    : "default.aspx?id={0}#deals", UrlParameters.ContactID);
                    }
                    else
                    {
                        redirectUrl = e.CommandArgument.ToString() == "1"
                            ? "deals.aspx?action=manage"
                            : string.Format("deals.aspx?id={0}", dealID);
                    }

                    Response.Redirect(redirectUrl, false);
                    Context.ApplicationInstance.CompleteRequest();
                }
            }
            catch (Exception ex)
            {
                log4net.LogManager.GetLogger("ASC.CRM").Error(ex);
                var cookie = HttpContext.Current.Request.Cookies.Get(ErrorCookieKey);
                if (cookie == null)
                {
                    cookie = new HttpCookie(ErrorCookieKey)
                    {
                        Value = ex.Message
                    };
                    HttpContext.Current.Response.Cookies.Add(cookie);
                }
            }
        }
示例#21
0
        private void ImportContactsData()
        {
            using (var CSVFileStream = _dataStore.GetReadStream("temp", _CSVFileURI))
                using (CsvReader csv = ImportFromCSV.CreateCsvReaderInstance(CSVFileStream, _importSettings))
                {
                    int currentIndex = 0;

                    var personFakeIdCompanyNameHash = new Dictionary <int, String>();

                    var contactDao     = _daoFactory.GetContactDao();
                    var contactInfoDao = _daoFactory.GetContactInfoDao();
                    var customFieldDao = _daoFactory.GetCustomFieldDao();
                    var tagDao         = _daoFactory.GetTagDao();

                    var findedContacts     = new Dictionary <int, Contact>();
                    var findedTags         = new Dictionary <int, List <String> >();
                    var findedCustomField  = new List <CustomField>();
                    var findedContactInfos = new List <ContactInfo>();

                    while (csv.ReadNextRecord())
                    {
                        _columns = csv.GetCurrentRowFields(false);
                        Contact contact = null;

                        #region Common data

                        if (!_CommonData(currentIndex, ref contact, ref personFakeIdCompanyNameHash))
                        {
                            continue;
                        }

                        findedContacts.Add(contact.ID, contact);

                        #endregion

                        #region Read tags

                        _ReadTags(ref findedTags, contact);

                        #endregion

                        #region Custom fields Y contact infos

                        var primaryFields = new List <int>();

                        foreach (JProperty jToken in _importSettings.ColumnMapping.Children())
                        {
                            var propertyValue = GetPropertyValue(jToken.Name);
                            if (String.IsNullOrEmpty(propertyValue))
                            {
                                continue;
                            }

                            if (jToken.Name.StartsWith("customField_"))
                            {
                                _ReadCustomField(jToken, propertyValue, contact, ref findedCustomField, customFieldDao);
                            }
                            else if (jToken.Name.StartsWith("contactInfo_"))
                            {
                                var addressTemplate = new JObject();
                                foreach (String addressPartName in Enum.GetNames(typeof(AddressPart)))
                                {
                                    addressTemplate.Add(addressPartName.ToLower(), "");
                                }

                                var addressTemplateStr = addressTemplate.ToString();

                                _ReadContactInfo(jToken, propertyValue, contact, ref findedContactInfos, ref primaryFields, addressTemplateStr);
                            }
                        }
                        #endregion

                        if (currentIndex + 1 > ImportFromCSV.MaxRoxCount)
                        {
                            break;
                        }
                        currentIndex++;
                    }

                    Percentage = 37.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());


                    #region Processing duplicate rule

                    _DuplicateRecordRuleProcess(ref findedContacts, ref personFakeIdCompanyNameHash, ref findedContactInfos, ref findedCustomField, ref findedTags);

                    #endregion

                    Percentage += 12.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());

                    var findedCompanies = findedContacts.Where(x => x.Value is Company).ToDictionary(x => x.Key, y => y.Value);
                    var findedPeoples   = findedContacts.Where(x => x.Value is Person).ToDictionary(x => x.Key, y => y.Value);

                    var fakeRealContactIdHash = contactDao.SaveContactList(findedCompanies.Values.ToList())
                                                .ToDictionary(item => item.Key, item => item.Value);

                    var companyNameRealIdHash = new Dictionary <String, int>();

                    foreach (Company item in findedCompanies.Values)
                    {
                        if (companyNameRealIdHash.ContainsKey(item.CompanyName))
                        {
                            continue;
                        }

                        companyNameRealIdHash.Add(item.CompanyName, item.ID);
                    }

                    foreach (var item in personFakeIdCompanyNameHash)
                    {
                        var person = (Person)findedPeoples[item.Key];


                        if (companyNameRealIdHash.ContainsKey(item.Value))
                        {
                            person.CompanyID = companyNameRealIdHash[item.Value];
                        }
                        else
                        {
                            var findedCompany = contactDao.GetContactsByName(item.Value, true).FirstOrDefault();

                            // Why ???
                            if (findedCompany == null)
                            {
                                #region create COMPANY for person in csv

                                findedCompany = new Company
                                {
                                    CompanyName = item.Value,
                                    ShareType   = _importSettings.ShareType
                                };
                                findedCompany.ID = contactDao.SaveContact(findedCompany);

                                person.CompanyID = findedCompany.ID;
                                CRMSecurity.SetAccessTo(findedCompany, _importSettings.ContactManagers);

                                if (_importSettings.Tags.Count != 0)
                                {
                                    tagDao.SetTagToEntity(EntityType.Contact, person.CompanyID, _importSettings.Tags.ToArray());
                                }

                                #endregion
                            }
                            else
                            {
                                person.CompanyID = findedCompany.ID;
                            }

                            companyNameRealIdHash.Add(item.Value, person.CompanyID);
                        }
                    }

                    fakeRealContactIdHash = fakeRealContactIdHash.Union(contactDao.SaveContactList(findedPeoples.Values.ToList()))
                                            .ToDictionary(item => item.Key, item => item.Value);

                    Percentage += 12.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());


                    #region Save contact infos

                    findedContactInfos.ForEach(item => item.ContactID = fakeRealContactIdHash[item.ContactID]);
                    contactInfoDao.SaveList(findedContactInfos);

                    #endregion

                    Percentage += 12.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());

                    #region Save custom fields

                    findedCustomField.ForEach(item => item.EntityID = fakeRealContactIdHash[item.EntityID]);
                    customFieldDao.SaveList(findedCustomField);

                    #endregion

                    Percentage += 12.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());


                    #region Save tags
                    foreach (var findedTagKey in findedTags.Keys)
                    {
                        tagDao.SetTagToEntity(EntityType.Contact, fakeRealContactIdHash[findedTagKey], findedTags[findedTagKey].ToArray());
                    }
                    #endregion

                    #region CRMSecurity set

                    findedContacts.Values.ToList().ForEach(contact => CRMSecurity.SetAccessTo(contact, _importSettings.ContactManagers));

                    #endregion

                    Percentage += 12.5;

                    if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
                    {
                        ImportDataCache.ResetAll(EntityType.Contact);

                        throw new OperationCanceledException();
                    }

                    ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
                }

            Complete();
        }
        public RelationshipEventWrapper AddHistoryTo(
            string entityType,
            int entityId,
            int contactId,
            string content,
            int categoryId,
            ApiDateTime created,
            IEnumerable <int> fileId,
            IEnumerable <Guid> notifyUserList)
        {
            if (!string.IsNullOrEmpty(entityType) &&
                !(
                    string.Compare(entityType, "opportunity", StringComparison.OrdinalIgnoreCase) == 0 ||
                    string.Compare(entityType, "case", StringComparison.OrdinalIgnoreCase) == 0)
                )
            {
                throw new ArgumentException();
            }

            var entityTypeObj = ToEntityType(entityType);

            var entityTitle = "";

            if (contactId > 0)
            {
                var contact = DaoFactory.ContactDao.GetByID(contactId);
                if (contact == null || !CRMSecurity.CanAccessTo(contact))
                {
                    throw new ArgumentException();
                }
                entityTitle = contact.GetTitle();
            }

            if (entityTypeObj == EntityType.Case)
            {
                var cases = DaoFactory.CasesDao.GetByID(entityId);
                if (cases == null || !CRMSecurity.CanAccessTo(cases))
                {
                    throw new ArgumentException();
                }
                if (contactId <= 0)
                {
                    entityTitle = cases.Title;
                }
            }
            if (entityTypeObj == EntityType.Opportunity)
            {
                var deal = DaoFactory.DealDao.GetByID(entityId);
                if (deal == null || !CRMSecurity.CanAccessTo(deal))
                {
                    throw new ArgumentException();
                }
                if (contactId <= 0)
                {
                    entityTitle = deal.Title;
                }
            }

            var relationshipEvent = new RelationshipEvent
            {
                CategoryID = categoryId,
                EntityType = entityTypeObj,
                EntityID   = entityId,
                Content    = content,
                ContactID  = contactId,
                CreateOn   = created,
                CreateBy   = Core.SecurityContext.CurrentAccount.ID
            };

            var category = DaoFactory.ListItemDao.GetByID(categoryId);

            if (category == null)
            {
                throw new ArgumentException();
            }

            var item = DaoFactory.RelationshipEventDao.CreateItem(relationshipEvent);


            notifyUserList = notifyUserList != null?notifyUserList.ToList() : new List <Guid>();

            var needNotify = notifyUserList.Any();

            var fileListInfoHashtable = new Hashtable();

            if (fileId != null)
            {
                var fileIds = fileId.ToList();
                var files   = FilesDaoFactory.GetFileDao().GetFiles(fileIds.Cast <object>().ToArray());

                if (needNotify)
                {
                    foreach (var file in files)
                    {
                        var extension = Path.GetExtension(file.Title);
                        if (extension == null)
                        {
                            continue;
                        }

                        var fileInfo = string.Format("{0} ({1})", file.Title, extension.ToUpper());
                        if (!fileListInfoHashtable.ContainsKey(fileInfo))
                        {
                            fileListInfoHashtable.Add(fileInfo, file.DownloadUrl);
                        }
                        else
                        {
                            fileInfo = string.Format("{0} ({1}, {2})", file.Title, extension.ToUpper(), file.UniqID);
                            fileListInfoHashtable.Add(fileInfo, file.DownloadUrl);
                        }
                    }
                }

                DaoFactory.RelationshipEventDao.AttachFiles(item.ID, fileIds.ToArray());

                if (files.Any())
                {
                    var fileAttachAction = GetFilesAttachAction(entityTypeObj, contactId);
                    MessageService.Send(Request, fileAttachAction, MessageTarget.Create(item.ID), entityTitle, files.Select(x => x.Title));
                }
            }

            if (needNotify)
            {
                NotifyClient.Instance.SendAboutAddRelationshipEventAdd(item, fileListInfoHashtable, DaoFactory, notifyUserList.ToArray());
            }

            var wrapper = ToRelationshipEventWrapper(item);

            var historyCreatedAction = GetHistoryCreatedAction(entityTypeObj, contactId);

            MessageService.Send(Request, historyCreatedAction, MessageTarget.Create(item.ID), entityTitle, category.Title);

            return(wrapper);
        }
 public override bool VisibleFor(Feed feed, object data, Guid userId)
 {
     return(base.VisibleFor(feed, data, userId) && CRMSecurity.CanAccessTo((Contact)data));
 }
        public IEnumerable <RelationshipEventWrapper> GetHistory(
            string entityType,
            int entityId,
            int categoryId,
            Guid createBy,
            ApiDateTime fromDate,
            ApiDateTime toDate)
        {
            var entityTypeObj = ToEntityType(entityType);

            switch (entityTypeObj)
            {
            case EntityType.Contact:
                var contact = DaoFactory.ContactDao.GetByID(entityId);
                if (contact == null || !CRMSecurity.CanAccessTo(contact))
                {
                    throw new ItemNotFoundException();
                }
                break;

            case EntityType.Case:
                var cases = DaoFactory.CasesDao.GetByID(entityId);
                if (cases == null || !CRMSecurity.CanAccessTo(cases))
                {
                    throw new ItemNotFoundException();
                }
                break;

            case EntityType.Opportunity:
                var deal = DaoFactory.DealDao.GetByID(entityId);
                if (deal == null || !CRMSecurity.CanAccessTo(deal))
                {
                    throw new ItemNotFoundException();
                }
                break;

            default:
                if (entityId != 0)
                {
                    throw new ArgumentException();
                }
                break;
            }

            RelationshipEventByType eventByType;

            IEnumerable <RelationshipEventWrapper> result;

            OrderBy eventOrderBy;

            if (Web.CRM.Classes.EnumExtension.TryParse(_context.SortBy, true, out eventByType))
            {
                eventOrderBy = new OrderBy(eventByType, !_context.SortDescending);
            }
            else if (string.IsNullOrEmpty(_context.SortBy))
            {
                eventOrderBy = new OrderBy(RelationshipEventByType.Created, false);
            }
            else
            {
                eventOrderBy = null;
            }

            if (eventOrderBy != null)
            {
                result = ToListRelationshipEventWrapper(DaoFactory.RelationshipEventDao.GetItems(
                                                            _context.FilterValue,
                                                            entityTypeObj,
                                                            entityId,
                                                            createBy,
                                                            categoryId,
                                                            fromDate,
                                                            toDate,
                                                            (int)_context.StartIndex,
                                                            (int)_context.Count,
                                                            eventOrderBy));

                _context.SetDataPaginated();
                _context.SetDataFiltered();
                _context.SetDataSorted();
            }
            else
            {
                result = ToListRelationshipEventWrapper(DaoFactory.RelationshipEventDao.GetItems(
                                                            _context.FilterValue,
                                                            entityTypeObj,
                                                            entityId,
                                                            createBy,
                                                            categoryId,
                                                            fromDate,
                                                            toDate,
                                                            0,
                                                            0,
                                                            null));
            }

            return(result.ToSmartList());
        }
示例#25
0
        public int GetTasksCount(
            String searchText,
            Guid responsibleId,
            int categoryId,
            bool?isClosed,
            DateTime fromDate,
            DateTime toDate,
            EntityType entityType,
            int entityId)
        {
            int result = 0;

            LogManager.GetLogger("ASC.CRM").DebugFormat("Starting GetTasksCount: {0}", DateTime.Now.ToString());

            var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) +
                           "tasks" +
                           SecurityContext.CurrentAccount.ID.ToString() +
                           searchText +
                           responsibleId +
                           categoryId +
                           fromDate.ToString(CultureInfo.InvariantCulture) +
                           toDate.ToString(CultureInfo.InvariantCulture) +
                           (int)entityType +
                           entityId;

            if (!String.IsNullOrEmpty(_cache.Get <String>(cacheKey)))
            {
                LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. From cache", DateTime.Now.ToString());

                return(Convert.ToInt32(_cache.Get <String>(cacheKey)));
            }


            if (!String.IsNullOrEmpty(searchText))
            {
                var tasks = GetCrudeTasks(searchText,
                                          responsibleId,
                                          categoryId,
                                          isClosed,
                                          fromDate,
                                          toDate,
                                          entityType,
                                          entityId,
                                          0,
                                          0,
                                          null);

                if (CRMSecurity.IsAdmin)
                {
                    result = tasks.Count();
                }
                else
                {
                    result = CRMSecurity.FilterRead(tasks).Count();
                }
            }
            else
            {
                if (CRMSecurity.IsAdmin)
                {
                    var sqlQuery = Query("crm_task tbl_tsk").SelectCount();

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    result = Db.ExecuteScalar <int>(sqlQuery);
                }
                else
                {
                    var taskIds = new List <int>();

                    var sqlQuery = Query("crm_task tbl_tsk")
                                   .Select("tbl_tsk.id")
                                   .LeftOuterJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id"))
                                   .Where(Exp.Or(Exp.Eq("tbl_ctc.is_shared", Exp.Empty), Exp.Gt("tbl_ctc.is_shared", 0)));

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    // count tasks without entityId and only open contacts

                    taskIds = Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList();

                    LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks without entityId and only open contacts", DateTime.Now.ToString());


                    sqlQuery = Query("crm_task tbl_tsk")
                               .Select("tbl_tsk.id")
                               .InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id"))
                               .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") &
                                          Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
                                          Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
                                          Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Company|', tbl_ctc.id)"))
                               .Where(Exp.Eq("tbl_ctc.is_shared", 0))
                               .Where(Exp.Eq("tbl_ctc.is_company", 1));

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    // count tasks with entityId and only close contacts
                    taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList());

                    LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and only close contacts", DateTime.Now.ToString());

                    sqlQuery = Query("crm_task tbl_tsk")
                               .Select("tbl_tsk.id")
                               .InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id"))
                               .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") &
                                          Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
                                          Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
                                          Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Person|', tbl_ctc.id)"))
                               .Where(Exp.Eq("tbl_ctc.is_shared", 0))
                               .Where(Exp.Eq("tbl_ctc.is_company", 0));

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    // count tasks with entityId and only close contacts
                    taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList());

                    LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and only close contacts", DateTime.Now.ToString());


                    sqlQuery = Query("crm_task tbl_tsk")
                               .Select("tbl_tsk.id")
                               .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") &
                                          Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
                                          Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
                                          Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Deal|', tbl_tsk.entity_id)"))
                               .Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Opportunity) & Exp.Eq("tbl_tsk.contact_id", 0));

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    // count tasks with entityId and without contact
                    taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList());

                    LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and without contact", DateTime.Now.ToString());

                    sqlQuery = Query("crm_task tbl_tsk")
                               .Select("tbl_tsk.id")
                               .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") &
                                          Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
                                          Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
                                          Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Cases|', tbl_tsk.entity_id)"))
                               .Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Case) & Exp.Eq("tbl_tsk.contact_id", 0));

                    sqlQuery = WhereConditional(sqlQuery, "tbl_tsk",
                                                responsibleId,
                                                categoryId,
                                                isClosed,
                                                fromDate,
                                                toDate,
                                                entityType,
                                                entityId,
                                                0,
                                                0,
                                                null);

                    // count tasks with entityId and without contact
                    taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList());

                    result = taskIds.Distinct().Count();

                    LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and without contact", DateTime.Now.ToString());

                    LogManager.GetLogger("ASC.CRM").Debug("Finish");
                }
            }


            if (result > 0)
            {
                _cache.Insert(cacheKey, result, TimeSpan.FromMinutes(1));
            }

            return(result);
        }
示例#26
0
        protected void Page_Command(Object sender, CommandEventArgs e)
        {
            Guid   gORDER_ID    = CommonTypeConvert.ToGuid(Request["ORDER_ID"]);
            Guid   gQUOTE_ID    = CommonTypeConvert.ToGuid(Request["QUOTE_ID"]);
            Guid   gPARENT_ID   = CommonTypeConvert.ToGuid(Request["PARENT_ID"]);
            string sMODULE      = String.Empty;
            string sPARENT_TYPE = String.Empty;
            string sPARENT_NAME = String.Empty;

            CommonProcedure.ParentGet(ref gPARENT_ID, ref sMODULE, ref sPARENT_TYPE, ref sPARENT_NAME);
            if (e.CommandName == "Save")
            {
                ValidateEditViewFields(m_sMODULE + ".EditView");
                ValidateEditViewFields(m_sMODULE + ".EditAddress");
                ValidateEditViewFields(m_sMODULE + ".EditDescription");
                if (Page.IsValid)
                {
                    string    sCUSTOM_MODULE    = "INVOICES";
                    DataTable dtCustomFields    = CRMCache.FieldsMetaData_Validated(sCUSTOM_MODULE);
                    DataTable dtCustomLineItems =
                        CRMCache.FieldsMetaData_UnvalidatedCustomFields(sCUSTOM_MODULE + "_LINE_ITEMS");

                    DataRow rowCurrent = null;
                    var     dtCurrent  = new DataTable();
                    if (!CommonTypeConvert.IsEmptyGuid(gID))
                    {
                        string innerSql = ApplicationSQL.SQL["Invoices_EditView_323"].ToString();
                        var    oQuery   = new InlineQueryDBManager();

                        oQuery.CommandText = innerSql;
                        CRMSecurity.Filter(oQuery, m_sMODULE, "edit");
                        TypeConvert.AppendParameter(oQuery, gID, "ID", false);
                        dtCurrent = oQuery.GetTable();

                        if (dtCurrent.Rows.Count > 0)
                        {
                            rowCurrent = dtCurrent.Rows[0];
                        }
                        else
                        {
                            gID = Guid.Empty;
                        }
                    }


                    ctlEditLineItemsView.UpdateTotals();
                    CommonProcedure.InvoicesUpdate
                        (ref gID
                        , new DynamicControl(this, rowCurrent, "ASSIGNED_USER_ID").ID
                        , new DynamicControl(this, rowCurrent, "NAME").Text
                        , new DynamicControl(this, rowCurrent, "QUOTE_ID").ID
                        , new DynamicControl(this, rowCurrent, "ORDER_ID").ID
                        , new DynamicControl(this, rowCurrent, "OPPORTUNITY_ID").ID
                        , new DynamicControl(this, rowCurrent, "PAYMENT_TERMS").SelectedValue
                        , new DynamicControl(this, rowCurrent, "INVOICE_STAGE").SelectedValue
                        , new DynamicControl(this, rowCurrent, "PURCHASE_ORDER_NUM").Text
                        , new DynamicControl(this, rowCurrent, "DUE_DATE").DateValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "EXCHANGE_RATE").FloatValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "CURRENCY_ID").ID
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TAXRATE_ID").ID
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SHIPPER_ID").ID
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SUBTOTAL").DecimalValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "DISCOUNT").DecimalValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SHIPPING").DecimalValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TAX").DecimalValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TOTAL").DecimalValue
                        , new DynamicControl(ctlEditLineItemsView, rowCurrent, "AMOUNT_DUE").DecimalValue
                        , new DynamicControl(this, rowCurrent, "BILLING_ACCOUNT_ID").ID
                        , new DynamicControl(this, rowCurrent, "BILLING_CONTACT_ID").ID
                        , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_STREET").Text
                        , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_CITY").Text
                        , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_STATE").Text
                        , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_POSTALCODE").Text
                        , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_COUNTRY").Text
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ACCOUNT_ID").ID
                        , new DynamicControl(this, rowCurrent, "SHIPPING_CONTACT_ID").ID
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_STREET").Text
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_CITY").Text
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_STATE").Text
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_POSTALCODE").Text
                        , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_COUNTRY").Text
                        , new DynamicControl(this, rowCurrent, "DESCRIPTION").Text
                        , new DynamicControl(this, rowCurrent, "TEAM_ID").ID
                        );
                    CRMDynamic.UpdateCustomFields(this, gID, sCUSTOM_MODULE, dtCustomFields);

                    DataTable dtLineItems = ctlEditLineItemsView.LineItems;
                    foreach (DataRow row in dtLineItems.Rows)
                    {
                        if (row.RowState == DataRowState.Deleted)
                        {
                            Guid gITEM_ID = CommonTypeConvert.ToGuid(row["ID", DataRowVersion.Original]);
                            if (!CommonTypeConvert.IsEmptyGuid(gITEM_ID))
                            {
                                CommonProcedure.InvoicesLINE_ITEMS_Delete(gITEM_ID);
                            }
                        }
                    }
                    int nPOSITION = 1;
                    foreach (DataRow row in dtLineItems.Rows)
                    {
                        if (row.RowState != DataRowState.Deleted)
                        {
                            Guid    gITEM_ID             = CommonTypeConvert.ToGuid(row["ID"]);
                            Guid    gLINE_GROUP_ID       = CommonTypeConvert.ToGuid(row["LINE_GROUP_ID"]);
                            string  sLINE_ITEM_TYPE      = CommonTypeConvert.ToString(row["LINE_ITEM_TYPE"]);
                            string  sNAME                = CommonTypeConvert.ToString(row["NAME"]);
                            string  sMFT_PART_NUM        = CommonTypeConvert.ToString(row["MFT_PART_NUM"]);
                            string  sVENDOR_PART_NUM     = CommonTypeConvert.ToString(row["VENDOR_PART_NUM"]);
                            Guid    gPRODUCT_TEMPLATE_ID = CommonTypeConvert.ToGuid(row["PRODUCT_TEMPLATE_ID"]);
                            string  sTAX_CLASS           = CommonTypeConvert.ToString(row["TAX_CLASS"]);
                            int     nQUANTITY            = CommonTypeConvert.ToInteger(row["QUANTITY"]);
                            Decimal dCOST_PRICE          = CommonTypeConvert.ToDecimal(row["COST_PRICE"]);
                            Decimal dLIST_PRICE          = CommonTypeConvert.ToDecimal(row["LIST_PRICE"]);
                            Decimal dUNIT_PRICE          = CommonTypeConvert.ToDecimal(row["UNIT_PRICE"]);
                            string  sDESCRIPTION         = CommonTypeConvert.ToString(row["DESCRIPTION"]);
                            if (!CommonTypeConvert.IsEmptyGuid(gPRODUCT_TEMPLATE_ID) ||
                                !CommonTypeConvert.IsEmptyString(sNAME))
                            {
                                CommonProcedure.InvoicesLINE_ITEMS_Update
                                    (ref gITEM_ID
                                    , gID
                                    , gLINE_GROUP_ID
                                    , sLINE_ITEM_TYPE
                                    , nPOSITION
                                    , sNAME
                                    , sMFT_PART_NUM
                                    , sVENDOR_PART_NUM
                                    , gPRODUCT_TEMPLATE_ID
                                    , sTAX_CLASS
                                    , nQUANTITY
                                    , dCOST_PRICE
                                    , dLIST_PRICE
                                    , dUNIT_PRICE
                                    , sDESCRIPTION
                                    );
                                CRMDynamic.UpdateCustomFields(row, gITEM_ID, sCUSTOM_MODULE + "_LINE_ITEMS",
                                                              dtCustomLineItems);
                                nPOSITION++;
                            }
                        }
                    }
                    CommonProcedure.InvoicesUpdateAmountDue(gID);


                    if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID))
                    {
                        Response.Redirect("~/CRM/" + sMODULE + "/view.aspx?ID=" + gPARENT_ID);
                    }
                    else
                    {
                        Response.Redirect("view.aspx?ID=" + gID);
                    }
                }
            }
            else if (e.CommandName == "Cancel")
            {
                if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID))
                {
                    Response.Redirect("~/CRM/" + sMODULE + "/view.aspx?ID=" + gPARENT_ID);
                }
                else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID))
                {
                    Response.Redirect("~/CRM/Orders/view.aspx?ID=" + gORDER_ID);
                }
                else if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID))
                {
                    Response.Redirect("~/CRM/Quotes/view.aspx?ID=" + gQUOTE_ID);
                }
                else if (CommonTypeConvert.IsEmptyGuid(gID))
                {
                    Response.Redirect("Index.aspx");
                }
                else
                {
                    Response.Redirect("view.aspx?ID=" + gID);
                }
            }
        }
示例#27
0
        private void ImportContactsData(DaoFactory _daoFactory)
        {
            var index = 0;

            var personFakeIdCompanyNameHash = new Dictionary <int, String>();

            var contactDao     = _daoFactory.ContactDao;
            var contactInfoDao = _daoFactory.ContactInfoDao;
            var customFieldDao = _daoFactory.CustomFieldDao;
            var tagDao         = _daoFactory.TagDao;

            var findedContacts     = new Dictionary <int, Contact>();
            var findedTags         = new Dictionary <int, List <String> >();
            var findedCustomField  = new List <CustomField>();
            var findedContactInfos = new List <ContactInfo>();

            #region Read csv
            using (var CSVFileStream = _dataStore.GetReadStream("temp", _CSVFileURI))
                using (CsvReader csv = ImportFromCSV.CreateCsvReaderInstance(CSVFileStream, _importSettings))
                {
                    int currentIndex = 0;

                    while (csv.ReadNextRecord())
                    {
                        _columns = csv.GetCurrentRowFields(false);
                        Contact contact = null;

                        #region Common data

                        if (!_CommonData(currentIndex, _daoFactory, ref contact, ref personFakeIdCompanyNameHash))
                        {
                            continue;
                        }

                        findedContacts.Add(contact.ID, contact);

                        #endregion

                        #region Read tags

                        _ReadTags(ref findedTags, contact);

                        #endregion

                        #region Custom fields Y contact infos

                        var primaryFields = new List <int>();

                        foreach (JProperty jToken in _importSettings.ColumnMapping.Children())
                        {
                            var propertyValue = GetPropertyValue(jToken.Name);
                            if (String.IsNullOrEmpty(propertyValue))
                            {
                                continue;
                            }

                            if (jToken.Name.StartsWith("customField_"))
                            {
                                _ReadCustomField(jToken, propertyValue, contact, ref findedCustomField, customFieldDao);
                            }
                            else if (jToken.Name.StartsWith("contactInfo_"))
                            {
                                var addressTemplate = new JObject();
                                foreach (String addressPartName in Enum.GetNames(typeof(AddressPart)))
                                {
                                    addressTemplate.Add(addressPartName.ToLower(), "");
                                }

                                var addressTemplateStr = addressTemplate.ToString();

                                _ReadContactInfo(jToken, propertyValue, contact, ref findedContactInfos, ref primaryFields, addressTemplateStr);
                            }
                        }
                        #endregion

                        if (currentIndex + 1 > ImportFromCSV.MaxRoxCount)
                        {
                            break;
                        }
                        currentIndex++;
                    }
                }
            _log.InfoFormat("ImportContactsData. Reading {0} findedContacts complete", findedContacts.Count);

            #endregion

            Percentage = 37.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            #region Processing duplicate rule

            _DuplicateRecordRuleProcess(_daoFactory, ref findedContacts, ref personFakeIdCompanyNameHash, ref findedContactInfos, ref findedCustomField, ref findedTags);

            _log.Info("ImportContactsData. _DuplicateRecordRuleProcess. End");

            if (IsCompleted)
            {
                return;
            }

            #endregion

            Percentage += 12.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            #region Manipulation for saving Companies for persons + CRMSecurity

            var findedCompanies = findedContacts.Where(x => x.Value is Company).ToDictionary(x => x.Key, y => y.Value);
            var findedPeoples   = findedContacts.Where(x => x.Value is Person).ToDictionary(x => x.Key, y => y.Value);

            var fakeRealContactIdHash = new Dictionary <int, int>();
            var companyNameRealIdHash = new Dictionary <String, int>();


            var findedCompaniesList = findedCompanies.Values.ToList();
            if (findedCompaniesList.Count != 0)
            {
                index = 0;
                while (index < findedCompaniesList.Count)
                {
                    var portion = findedCompaniesList.Skip(index).Take(DaoIterationStep).ToList();// Get next step

                    fakeRealContactIdHash = fakeRealContactIdHash.Union(
                        contactDao.SaveContactList(portion))
                                            .ToDictionary(item => item.Key, item => item.Value);


                    #region CRMSecurity set -by every item-

                    portion.ForEach(ct => CRMSecurity.SetAccessTo(ct, _importSettings.ContactManagers));

                    #endregion


                    index += DaoIterationStep;
                    if (index > findedCompaniesList.Count)
                    {
                        index = findedCompaniesList.Count;
                    }
                }
            }


            foreach (Company item in findedCompanies.Values)
            {
                if (companyNameRealIdHash.ContainsKey(item.CompanyName))
                {
                    continue;
                }

                companyNameRealIdHash.Add(item.CompanyName, item.ID);
            }

            foreach (var item in personFakeIdCompanyNameHash)
            {
                var person = (Person)findedPeoples[item.Key];

                if (companyNameRealIdHash.ContainsKey(item.Value))
                {
                    person.CompanyID = companyNameRealIdHash[item.Value];
                }
                else
                {
                    var findedCompany = contactDao.GetContactsByName(item.Value, true).FirstOrDefault();

                    // Why ???
                    if (findedCompany == null)
                    {
                        #region create COMPANY for person in csv

                        findedCompany = new Company
                        {
                            CompanyName = item.Value,
                            ShareType   = _importSettings.ShareType
                        };
                        findedCompany.ID = contactDao.SaveContact(findedCompany);

                        person.CompanyID = findedCompany.ID;
                        CRMSecurity.SetAccessTo(findedCompany, _importSettings.ContactManagers);

                        if (_importSettings.Tags.Count != 0)
                        {
                            tagDao.SetTagToEntity(EntityType.Contact, person.CompanyID, _importSettings.Tags.ToArray());
                        }

                        #endregion
                    }
                    else
                    {
                        person.CompanyID = findedCompany.ID;
                    }

                    companyNameRealIdHash.Add(item.Value, person.CompanyID);
                }
            }
            #endregion

            #region Saving People common data -by portions- + CRMSecurity

            var findedPeopleList = findedPeoples.Values.ToList();
            if (findedPeopleList.Count != 0)
            {
                index = 0;
                while (index < findedPeopleList.Count)
                {
                    var portion = findedPeopleList.Skip(index).Take(DaoIterationStep).ToList();// Get next step

                    fakeRealContactIdHash = fakeRealContactIdHash.Union(
                        contactDao.SaveContactList(portion))
                                            .ToDictionary(item => item.Key, item => item.Value);

                    #region CRMSecurity set -by every item-

                    portion.ForEach(ct => CRMSecurity.SetAccessTo(ct, _importSettings.ContactManagers));

                    #endregion


                    index += DaoIterationStep;
                    if (index > findedPeopleList.Count)
                    {
                        index = findedPeopleList.Count;
                    }
                }
            }
            _log.Info("ImportContactsData. Contacts common data saved");
            #endregion

            Percentage += 12.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            #region Save contact infos -by portions-

            if (findedContactInfos.Count != 0)
            {
                findedContactInfos.ForEach(item => item.ContactID = fakeRealContactIdHash[item.ContactID]);

                index = 0;
                while (index < findedContactInfos.Count)
                {
                    var portion = findedContactInfos.Skip(index).Take(DaoIterationStep).ToList();// Get next step

                    contactInfoDao.SaveList(portion);

                    index += DaoIterationStep;
                    if (index > findedContactInfos.Count)
                    {
                        index = findedContactInfos.Count;
                    }
                }
            }
            _log.Info("ImportContactsData. Contacts infos saved");
            #endregion

            Percentage += 12.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            #region Save custom fields -by portions-

            if (findedCustomField.Count != 0)
            {
                findedCustomField.ForEach(item => item.EntityID = fakeRealContactIdHash[item.EntityID]);

                index = 0;
                while (index < findedCustomField.Count)
                {
                    var portion = findedCustomField.Skip(index).Take(DaoIterationStep).ToList();// Get next step

                    customFieldDao.SaveList(portion);

                    index += DaoIterationStep;
                    if (index > findedCustomField.Count)
                    {
                        index = findedCustomField.Count;
                    }
                }
            }
            _log.Info("ImportContactsData. Custom fields saved");
            #endregion

            Percentage += 12.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            #region Save tags

            var findedTagsValues = new List <string>();

            findedTags.Values.ToList().ForEach(t => { findedTagsValues.AddRange(t); });
            findedTagsValues = findedTagsValues.Distinct().ToList();

            var allTagsForImport = tagDao.GetAndAddTags(EntityType.Contact, findedTagsValues.Distinct().ToArray());

            foreach (var findedTagKey in findedTags.Keys)
            {
                var curTagNames = findedTags[findedTagKey];
                var curTagIds   = curTagNames.ConvertAll(n => allTagsForImport.ContainsKey(n) ? allTagsForImport[n] : 0).Where(id => id != 0).ToArray();

                tagDao.AddTagToEntity(EntityType.Contact, fakeRealContactIdHash[findedTagKey], curTagIds);
            }
            _log.Info("ImportContactsData. Tags saved");
            #endregion

            Percentage += 12.5;

            #region Check Cancel flag | Insert Operation InCache
            if (ImportDataCache.CheckCancelFlag(EntityType.Contact))
            {
                ImportDataCache.ResetAll(EntityType.Contact);

                throw new OperationCanceledException();
            }

            ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone());
            #endregion

            Complete();
        }
示例#28
0
        protected void Page_Load(object sender, EventArgs e)
        {
            SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE));
            Visible = (Security.GetUserAccess(m_sMODULE, "edit") >= 0);
            if (!Visible)
            {
                return;
            }


            gID = CommonTypeConvert.ToGuid(Request["ID"]);
            if (!IsPostBack)
            {
                string sLOAD_MODULE     = "Invoices";
                string sLOAD_MODULE_KEY = "INVOICE_ID";
                Guid   gQUOTE_ID        = CommonTypeConvert.ToGuid(Request["QUOTE_ID"]);
                Guid   gORDER_ID        = CommonTypeConvert.ToGuid(Request["ORDER_ID"]);
                Guid   gDuplicateID     = CommonTypeConvert.ToGuid(Request["DuplicateID"]);
                if (!CommonTypeConvert.IsEmptyGuid(gID) || !CommonTypeConvert.IsEmptyGuid(gDuplicateID) ||
                    !CommonTypeConvert.IsEmptyGuid(gQUOTE_ID) || !CommonTypeConvert.IsEmptyGuid(gORDER_ID))
                {
                    string innerSql = ApplicationSQL.SQL["Invoices_EditView_323"].ToString();
                    var    oQuery   = new InlineQueryDBManager();

                    oQuery.CommandText = innerSql;
                    if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID))
                    {
                        //Load the data from the QUOTES record.
                        sLOAD_MODULE       = "Quotes";
                        sLOAD_MODULE_KEY   = "QUOTE_ID";
                        innerSql           = ApplicationSQL.SQL["Invoices_EditView_333"].ToString();
                        oQuery.CommandText = innerSql;
                        //Filter by the module we are loading.
                        CRMSecurity.Filter(oQuery, sLOAD_MODULE, "edit");
                        TypeConvert.AppendParameter(oQuery, gQUOTE_ID, "ID", false);
                    }
                    else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID))
                    {
                        //  Load the data from the ORDERS record.
                        sLOAD_MODULE       = "Orders";
                        sLOAD_MODULE_KEY   = "ORDER_ID";
                        innerSql           = ApplicationSQL.SQL["Invoices_EditView"].ToString();
                        oQuery.CommandText = innerSql;
                        //Filter by the module we are loading.
                        CRMSecurity.Filter(oQuery, sLOAD_MODULE, "edit");
                        TypeConvert.AppendParameter(oQuery, gORDER_ID, "ID", false);
                    }
                    else
                    {
                        //Use new CRMSecurity.Filter() function to apply Team and ACL security rules.
                        CRMSecurity.Filter(oQuery, m_sMODULE, "edit");
                        if (!CommonTypeConvert.IsEmptyGuid(gDuplicateID))
                        {
                            TypeConvert.AppendParameter(oQuery, gDuplicateID, "ID", false);
                            gID = Guid.Empty;
                        }
                        else
                        {
                            TypeConvert.AppendParameter(oQuery, gID, "ID", false);
                        }
                    }

                    using (SqlDataReader rdr = oQuery.ExecuteReader(CommandBehavior.SingleRow))
                    {
                        if (rdr.Read())
                        {
                            ctlModuleHeader.Title = CommonTypeConvert.ToString(rdr["NAME"]);
                            SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE) + " - " +
                                         ctlModuleHeader.Title);
                            Utils.UpdateTracker(Page, m_sMODULE, gID, ctlModuleHeader.Title);
                            ViewState["ctlModuleHeader.Title"] = ctlModuleHeader.Title;
                            ViewState["BILLING_ACCOUNT_ID"]    = CommonTypeConvert.ToGuid(rdr["BILLING_ACCOUNT_ID"]);
                            ViewState["SHIPPING_ACCOUNT_ID"]   = CommonTypeConvert.ToGuid(rdr["SHIPPING_ACCOUNT_ID"]);

                            new DynamicControl(this, "QUOTE_ID").ID = CommonTypeConvert.ToGuid(rdr["QUOTE_ID"]);
                            new DynamicControl(this, "ORDER_ID").ID = CommonTypeConvert.ToGuid(rdr["ORDER_ID"]);

                            AppendEditViewFields(m_sMODULE + ".EditView", tblMain, rdr);
                            AppendEditViewFields(m_sMODULE + ".EditAddress", tblAddress, rdr);
                            AppendEditViewFields(m_sMODULE + ".EditDescription", tblDescription, rdr);
                            //Dynamic buttons need to be recreated in order for events to fire.
                            ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView",
                                                            CommonTypeConvert.ToGuid(rdr["ASSIGNED_USER_ID"]), rdr);

                            if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID))
                            {
                                new DynamicControl(this, "QUOTE_ID").ID     = gQUOTE_ID;
                                new DynamicControl(this, "QUOTE_NAME").Text = CommonTypeConvert.ToString(rdr["NAME"]);
                                ctlEditLineItemsView.LoadLineItems(gQUOTE_ID, Guid.Empty, rdr, sLOAD_MODULE,
                                                                   sLOAD_MODULE_KEY);
                            }
                            else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID))
                            {
                                new DynamicControl(this, "ORDER_ID").ID     = gORDER_ID;
                                new DynamicControl(this, "ORDER_NAME").Text = CommonTypeConvert.ToString(rdr["NAME"]);
                                ctlEditLineItemsView.LoadLineItems(gORDER_ID, Guid.Empty, rdr, sLOAD_MODULE,
                                                                   sLOAD_MODULE_KEY);
                            }
                            else
                            {
                                ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, rdr, sLOAD_MODULE,
                                                                   sLOAD_MODULE_KEY);
                            }
                        }
                        else
                        {
                            ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, null, String.Empty, String.Empty);

                            //If item is not visible, then don't allow save
                            //Dynamic buttons need to be recreated in order for events to fire.
                            ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView", Guid.Empty, null);
                            ctlDynamicButtons.DisableAll();
                            ctlDynamicButtons.ErrorText = Translation.GetTranslation.Term("ACL.LBL_NO_ACCESS");
                        }
                    }
                }
                else
                {
                    AppendEditViewFields(m_sMODULE + ".EditView", tblMain, null);
                    AppendEditViewFields(m_sMODULE + ".EditAddress", tblAddress, null);
                    AppendEditViewFields(m_sMODULE + ".EditDescription", tblDescription, null);
                    //Dynamic buttons need to be recreated in order for events to fire.
                    ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView", Guid.Empty, null);

                    //Prepopulate the Account.
                    Guid gPARENT_ID = CommonTypeConvert.ToGuid(Request["PARENT_ID"]);
                    if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID))
                    {
                        string sMODULE      = String.Empty;
                        string sPARENT_TYPE = String.Empty;
                        string sPARENT_NAME = String.Empty;
                        CommonProcedure.ParentGet(ref gPARENT_ID, ref sMODULE, ref sPARENT_TYPE, ref sPARENT_NAME);
                        if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Accounts")
                        {
                            UpdateAccount(gPARENT_ID, true, true);
                        }
                        if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Contacts")
                        {
                            UpdateContact(gPARENT_ID, true, true);
                        }
                        else if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Opportunities")
                        {
                            new DynamicControl(this, "OPPORTUNITY_ID").ID     = gPARENT_ID;
                            new DynamicControl(this, "OPPORTUNITY_NAME").Text = sPARENT_NAME;
                        }
                    }
                    ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, new InlineQueryDBManager(), null, String.Empty,
                                                       String.Empty);
                }
            }
            else
            {
                // When validation fails, the header title does not retain its value.  Update manually.
                ctlModuleHeader.Title = CommonTypeConvert.ToString(ViewState["ctlModuleHeader.Title"]);
                SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE) + " - " + ctlModuleHeader.Title);

                var ctlBILLING_ACCOUNT_ID  = new DynamicControl(this, "BILLING_ACCOUNT_ID");
                var ctlSHIPPING_ACCOUNT_ID = new DynamicControl(this, "SHIPPING_ACCOUNT_ID");
                if (CommonTypeConvert.ToGuid(ViewState["BILLING_ACCOUNT_ID"]) != ctlBILLING_ACCOUNT_ID.ID)
                {
                    UpdateAccount(ctlBILLING_ACCOUNT_ID.ID, true, true);
                    ViewState["BILLING_ACCOUNT_ID"]  = ctlBILLING_ACCOUNT_ID.ID;
                    ViewState["SHIPPING_ACCOUNT_ID"] = ctlBILLING_ACCOUNT_ID.ID;
                }
                if (CommonTypeConvert.ToGuid(ViewState["SHIPPING_ACCOUNT_ID"]) != ctlSHIPPING_ACCOUNT_ID.ID)
                {
                    UpdateAccount(ctlSHIPPING_ACCOUNT_ID.ID, false, true);
                    ViewState["SHIPPING_ACCOUNT_ID"] = ctlSHIPPING_ACCOUNT_ID.ID;
                }
            }
        }
示例#29
0
        public List <int> GetCrmContactIds(string email)
        {
            var ids = new List <int>();

            if (string.IsNullOrEmpty(email))
            {
                return(ids);
            }
            try
            {
                var q = new SqlQuery(CrmContactTable.TABLE_NAME.Alias(CC_ALIAS))
                        .Select(CrmContactTable.Columns.Id.Prefix(CC_ALIAS),
                                CrmContactTable.Columns.IsCompany.Prefix(CC_ALIAS),
                                CrmContactTable.Columns.IsShared.Prefix(CC_ALIAS))
                        .InnerJoin(CrmContactInfoTable.TABLE_NAME.Alias(CCI_ALIAS),
                                   Exp.EqColumns(CrmContactTable.Columns.Tenant.Prefix(CC_ALIAS),
                                                 CrmContactInfoTable.Columns.Tenant.Prefix(CCI_ALIAS)) &
                                   Exp.EqColumns(CrmContactTable.Columns.Id.Prefix(CC_ALIAS),
                                                 CrmContactInfoTable.Columns.ContactId.Prefix(CCI_ALIAS)))
                        .Where(CrmContactTable.Columns.Tenant.Prefix(CC_ALIAS), Tenant)
                        .Where(CrmContactInfoTable.Columns.Type.Prefix(CCI_ALIAS), (int)ContactInfoType.Email)
                        .Where(CrmContactInfoTable.Columns.Data.Prefix(CCI_ALIAS), email);

                var contactList = Db.ExecuteList(q)
                                  .ConvertAll(
                    r =>
                    new
                {
                    Id        = Convert.ToInt32(r[0]),
                    Company   = Convert.ToBoolean(r[1]),
                    ShareType = (ShareType)Convert.ToInt32(r[2])
                });

                if (!contactList.Any())
                {
                    return(ids);
                }

                CoreContext.TenantManager.SetCurrentTenant(Tenant);
                SecurityContext.AuthenticateMe(new Guid(CurrentUserId));

                foreach (var info in contactList)
                {
                    var contact = info.Company
                        ? new Company()
                        : (Contact) new Person();

                    contact.ID        = info.Id;
                    contact.ShareType = info.ShareType;

                    if (CRMSecurity.CanAccessTo(contact))
                    {
                        ids.Add(info.Id);
                    }
                }
            }
            catch (Exception e)
            {
                Log.WarnFormat("GetCrmContactsId(tenandId='{0}', userId='{1}', email='{2}') Exception:\r\n{3}\r\n",
                               Tenant, CurrentUserId, email, e.ToString());
            }

            return(ids);
        }
示例#30
0
        private IEnumerable <TaskWrapper> ToTaskListWrapper(IEnumerable <Task> itemList)
        {
            var result = new List <TaskWrapper>();

            var contactIDs        = new List <int>();
            var taskIDs           = new List <int>();
            var categoryIDs       = new List <int>();
            var entityWrappersIDs = new Dictionary <EntityType, List <int> >();

            foreach (var item in itemList)
            {
                taskIDs.Add(item.ID);

                if (!categoryIDs.Contains(item.CategoryID))
                {
                    categoryIDs.Add(item.CategoryID);
                }

                if (item.ContactID > 0 && !contactIDs.Contains(item.ContactID))
                {
                    contactIDs.Add(item.ContactID);
                }

                if (item.EntityID > 0)
                {
                    if (item.EntityType != EntityType.Opportunity && item.EntityType != EntityType.Case)
                    {
                        continue;
                    }

                    if (!entityWrappersIDs.ContainsKey(item.EntityType))
                    {
                        entityWrappersIDs.Add(item.EntityType, new List <int>
                        {
                            item.EntityID
                        });
                    }
                    else if (!entityWrappersIDs[item.EntityType].Contains(item.EntityID))
                    {
                        entityWrappersIDs[item.EntityType].Add(item.EntityID);
                    }
                }
            }

            var entityWrappers = new Dictionary <string, EntityWrapper>();

            foreach (var entityType in entityWrappersIDs.Keys)
            {
                switch (entityType)
                {
                case EntityType.Opportunity:
                    DaoFactory.DealDao.GetDeals(entityWrappersIDs[entityType].Distinct().ToArray())
                    .ForEach(item =>
                    {
                        if (item == null)
                        {
                            return;
                        }

                        entityWrappers.Add(
                            string.Format("{0}_{1}", (int)entityType, item.ID),
                            new EntityWrapper
                        {
                            EntityId    = item.ID,
                            EntityTitle = item.Title,
                            EntityType  = "opportunity"
                        });
                    });
                    break;

                case EntityType.Case:
                    DaoFactory.CasesDao.GetByID(entityWrappersIDs[entityType].ToArray())
                    .ForEach(item =>
                    {
                        if (item == null)
                        {
                            return;
                        }

                        entityWrappers.Add(
                            string.Format("{0}_{1}", (int)entityType, item.ID),
                            new EntityWrapper
                        {
                            EntityId    = item.ID,
                            EntityTitle = item.Title,
                            EntityType  = "case"
                        });
                    });
                    break;
                }
            }

            var categories         = DaoFactory.ListItemDao.GetItems(categoryIDs.ToArray()).ToDictionary(x => x.ID, x => new TaskCategoryBaseWrapper(x));
            var contacts           = DaoFactory.ContactDao.GetContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper);
            var restrictedContacts = DaoFactory.ContactDao.GetRestrictedContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper);



            foreach (var item in itemList)
            {
                var taskWrapper = new TaskWrapper(item)
                {
                    CanEdit = CRMSecurity.CanEdit(item)
                };

                if (contacts.ContainsKey(item.ContactID))
                {
                    taskWrapper.Contact = contacts[item.ContactID];
                }
                if (restrictedContacts.ContainsKey(item.ContactID))
                {
                    taskWrapper.Contact = restrictedContacts[item.ContactID];
                    /*Hide some fields. Should be refactored! */
                    taskWrapper.Contact.Currency   = null;
                    taskWrapper.Contact.Email      = null;
                    taskWrapper.Contact.AccessList = null;
                }

                if (item.EntityID > 0)
                {
                    var entityStrKey = string.Format("{0}_{1}", (int)item.EntityType, item.EntityID);

                    if (entityWrappers.ContainsKey(entityStrKey))
                    {
                        taskWrapper.Entity = entityWrappers[entityStrKey];
                    }
                }

                if (categories.ContainsKey(item.CategoryID))
                {
                    taskWrapper.Category = categories[item.CategoryID];
                }

                result.Add(taskWrapper);
            }

            return(result);
        }