Пример #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            Utility.RegisterTypeForAjax(this.GetType());
            _manageItemPopup.Options.IsPopup = true;

            var query = "history/category";
            switch (CurrentTypeValue)
            {
                case ListType.ContactStatus:
                    query = "contact/type";
                    break;
                case ListType.HistoryCategory:
                    query = "history/category";
                    break;
                case ListType.TaskCategory:
                    query = "task/category";
                    break;
            }
            
            var apiServer = new Api.ApiServer();
            
            var data = apiServer.GetApiResponse(String.Format("api/1.0/crm/{0}.json", query), "GET");

            Page.JsonPublisher(data, "itemList");
        }
Пример #2
0
        public static bool CanCreateProjects()
        {
            try
            {
                var apiUrl = String.Format("{0}project/securityinfo.json", SetupInfo.WebApiBaseUrl);

                var cacheKey = String.Format("{0}-{1}", ASC.Core.SecurityContext.CurrentAccount.ID, apiUrl);

                bool canCreateProject;

                if (HttpRuntime.Cache[cacheKey] != null)
                    return Convert.ToBoolean(HttpRuntime.Cache[cacheKey]);

                var apiServer = new Api.ApiServer();

                var responseApi = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiServer.GetApiResponse(apiUrl, "GET"))))["response"];

                if (responseApi.HasValues)
                    canCreateProject = Convert.ToBoolean(responseApi["canCreateProject"].Value<String>());
                else
                    canCreateProject = false;

                HttpRuntime.Cache.Insert(cacheKey, canCreateProject, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
                                  TimeSpan.FromMinutes(5));

                return canCreateProject;

            }
            catch 
            {

                return false;
            }

        }
Пример #3
0
        private void GetApiData()
        {
            if (RequestContext.IsInConcreteProject()) return;

            var apiServer = new Api.ApiServer();
            var projects = apiServer.GetApiResponse(string.Format("api/1.0/project/filter.json?status=open&sortBy=title&sortOrder=ascending&fields={0}", "id,title"), "GET");
            JsonPublisher(projects, "projects");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Utility.RegisterTypeForAjax(this.GetType());

            _manageDealMilestonePopup.Options.IsPopup = true;

            var apiServer = new Api.ApiServer();
            var data = apiServer.GetApiResponse("api/1.0/crm/opportunity/stage.json", "GET");

            Page.JsonPublisher(data, "dealMilestoneList");
        }
        public void UpdateMailAggregator(IEnumerable<string> emails, IEnumerable<Guid> userIds)
        {
            var apiServer = new Api.ApiServer();

            var body = GetPostBody(emails, userIds);

            apiServer.GetApiResponse(
                String.Format("{0}mail/messages/update_crm.json", SetupInfo.WebApiBaseUrl),
                "POST",
                body);
        }
Пример #6
0
        private void GetApiData()
        {
            var apiServer = new Api.ApiServer();
            const string fields = "id,title";

            if (!RequestContext.IsInConcreteProject())
            {
                var tags = apiServer.GetApiResponse(string.Format("api/1.0/project/tag.json"), "GET");
                Page.JsonPublisher(tags, "tags");

                var projects = apiServer.GetApiResponse(ProjectSecurity.IsAdministrator(CurrentUserId) ?
                    string.Format("api/1.0/project/filter.json?status=open&sortBy=title&sortOrder=ascending&fields={0}", fields) :
                    string.Format("api/1.0/project/filter.json?participant={0}&status=open&sortBy=title&sortOrder=ascending&fields={1}", CurrentUserId, fields),
                "GET");
                Page.JsonPublisher(projects, "projects");
            }
        }
Пример #7
0
        public static bool CanCreateProjects()
        {
            try
            {
                var apiUrl = String.Format("{0}project/securityinfo.json", SetupInfo.WebApiBaseUrl);

                var cacheKey = String.Format("{0}-{1}", ASC.Core.SecurityContext.CurrentAccount.ID, apiUrl);

                bool canCreateProject;

                if (HttpRuntime.Cache[cacheKey] != null)
                {
                    return(Convert.ToBoolean(HttpRuntime.Cache[cacheKey]));
                }

                var apiServer = new Api.ApiServer();

                var responseApi = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiServer.GetApiResponse(apiUrl, "GET"))))["response"];

                if (responseApi.HasValues)
                {
                    canCreateProject = Convert.ToBoolean(responseApi["canCreateProject"].Value <String>());
                }
                else
                {
                    canCreateProject = false;
                }

                HttpRuntime.Cache.Insert(cacheKey, canCreateProject, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
                                         TimeSpan.FromMinutes(5));

                return(canCreateProject);
            }
            catch
            {
                return(false);
            }
        }
Пример #8
0
        private void InitForumsData()
        {
            IsForumsAvailable = true;

            var currentPath = HttpContext.Current.Request.Path;

            if (currentPath.IndexOf("Modules/Forum/Posts.aspx", StringComparison.OrdinalIgnoreCase) > 0)
            {
                InAParticularTopic = true;
                MakeCreateNewTopic = true;
            }

            var apiServer   = new Api.ApiServer();
            var apiResponse = apiServer.GetApiResponse(String.Format("{0}community/forum/count.json", SetupInfo.WebApiBaseUrl), "GET");
            var obj         = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
            var count       = 0;

            if (Int32.TryParse(obj["response"].ToString(), out count))
            {
                ForumsHasThreadCategories = count > 0;
            }

            if (InAParticularTopic && TopicID > 0)
            {
                apiServer   = new Api.ApiServer();
                apiResponse = apiServer.GetApiResponse(String.Format("{0}community/forum/topic/{1}.json", SetupInfo.WebApiBaseUrl, TopicID), "GET");
                obj         = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
                if (obj["response"] != null)
                {
                    obj = JObject.Parse(obj["response"].ToString());
                    var status = 0;
                    if (Int32.TryParse(obj["status"].ToString(), out status))
                    {
                        MakeCreateNewTopic = status != 1 && status != 3;
                    }
                }
            }
        }
Пример #9
0
        protected void GetDataFromCookie()
        {
            //init data for first request
            var filterObj = GetFilterObjectFromCookie();

            var filterNotEmpty = false;

            if (!String.IsNullOrEmpty(filterObj.FilterValue) || filterObj.CategoryID != 0 ||
                filterObj.FromDate != DateTime.MinValue || filterObj.ToDate != DateTime.MinValue ||
                filterObj.IsClosed != null || filterObj.ResponsibleID != Guid.Empty)
            {
                filterNotEmpty = true;
            }

            var queryString = String.Format("startIndex={0}&count={1}", filterObj.StartIndex, filterObj.Count);

            queryString += String.Format("&sortBy={0}", filterObj.SortBy);
            queryString += String.Format("&sortOrder={0}", filterObj.SortOrder);
            queryString += !String.IsNullOrEmpty(filterObj.FilterValue) ? String.Format("&filterValue={0}", filterObj.FilterValue) : "";
            queryString += filterObj.ResponsibleID != Guid.Empty ? String.Format("&responsibleID={0}", filterObj.ResponsibleID) : "";
            queryString += filterObj.FromDate != DateTime.MinValue ? String.Format("&fromDate={0}", DateToStringApi(filterObj.FromDate)) : "";
            queryString += filterObj.ToDate != DateTime.MinValue ? String.Format("&toDate={0}", DateToStringApi(filterObj.ToDate)) : "";

            queryString += filterObj.CategoryID != 0 ? String.Format("&categoryID={0}", filterObj.CategoryID) : "";
            queryString += filterObj.IsClosed != null?String.Format("&isClosed={0}", filterObj.IsClosed.ToString().ToLower()) : "";


            var apiServer            = new Api.ApiServer();
            var tasksForFirstRequest = apiServer.GetApiResponse(
                String.Format("api/1.0/crm/task/filter.json?{0}", queryString), "GET");

            var tasksRequest = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(tasksForFirstRequest)));

            NoTasks = !filterNotEmpty && tasksRequest["count"].ToString() == "0";

            Page.JsonPublisher(tasksForFirstRequest, "tasksForFirstRequest");
        }
        public static void DataListItemView(BasePage page, ListType currentTypeValue)
        {
            var query = "history/category";
            switch (currentTypeValue)
            {
                case ListType.ContactStatus:
                    query = "contact/status";
                    break;
                case ListType.ContactType:
                    query = "contact/type";
                    break;
                case ListType.HistoryCategory:
                    query = "history/category";
                    break;
                case ListType.TaskCategory:
                    query = "task/category";
                    break;
            }

            var apiServer = new Api.ApiServer();
            var data = apiServer.GetApiResponse(String.Format("{0}crm/{1}.json", SetupInfo.WebApiBaseUrl, query), "GET");

            page.JsonPublisher(data, "itemList");
        }
Пример #11
0
        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}&unblocked=true&is_need_to_sanitize_html=true", SetupInfo.WebApiBaseUrl, messageId), "GET");

                if (msg == null)
                    throw new ArgumentException();

                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");
                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 = msgRequestObj.Value<Int32>("id"),
                         message_url = messageUrl
                     });

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

            using (var db = GetDb())
            {
                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);


                return item;
            }
        }
        private void RegisterClientScript(EntityType entityType)
        {
            var apiServer = new Api.ApiServer();
            var templateConatainerList = apiServer.GetApiResponse(
                String.Format("{0}crm/{1}/tasktemplatecontainer.json", SetupInfo.WebApiBaseUrl, entityType.ToString().ToLower()), "GET");

            Page.JsonPublisher(templateConatainerList, "templateConatainerList");

        }
Пример #13
0
        private void GetApiData()
        {
            var apiServer = new Api.ApiServer();

            if (RequestContext.IsInConcreteProject())
            {
                var projectParticipants = apiServer.GetApiResponse(string.Format("api/1.0/project/{0}/team.json?fields={1}", RequestContext.GetCurrentProjectId(), "id,displayName"), "GET");
                JsonPublisher(projectParticipants, "projectParticipants");
                return;
            }

            var tags = apiServer.GetApiResponse(string.Format("api/1.0/project/tag.json"), "GET");
            JsonPublisher(tags, "tags");

            var projects = apiServer.GetApiResponse(ProjectSecurity.IsAdministrator(CurrentUserId) ?
                string.Format("api/1.0/project/filter.json?status=open&sortBy=title&sortOrder=ascending&fields={0}", "id,title") :
                string.Format("api/1.0/project/filter.json?status=open&sortBy=title&sortOrder=ascending&participant={0}&fields={1}", CurrentUserId, "id,title,responsible,status"),
            "GET");
            JsonPublisher(projects, "projects");
        }
Пример #14
0
        private void GetDataFromCookie()
        {
            //init data for first request
            var filterObj = GetFilterObjectFromCookie();

            var filterNotEmpty = false;

            if (filterObj.ContactID != 0 || !String.IsNullOrEmpty(filterObj.FilterValue) ||
                filterObj.FromDate != DateTime.MinValue || filterObj.ToDate != DateTime.MinValue || filterObj.OpportunityStagesID != 0 ||
                filterObj.ResponsibleID != Guid.Empty || filterObj.StageType != null ||
                filterObj.Tags != null && filterObj.Tags.Count != 0)
            {
                filterNotEmpty = true;
            }

            var queryString = String.Format("startIndex={0}&count={1}", filterObj.StartIndex, filterObj.Count);

            queryString += String.Format("&sortBy={0}", filterObj.SortBy);
            queryString += String.Format("&sortOrder={0}", filterObj.SortOrder);
            queryString += !String.IsNullOrEmpty(filterObj.FilterValue) ? String.Format("&filterValue={0}", filterObj.FilterValue) : "";

            queryString += filterObj.ResponsibleID != Guid.Empty ? String.Format("&responsibleID={0}", filterObj.ResponsibleID) : "";
            queryString += !String.IsNullOrEmpty(filterObj.StageType) ? String.Format("&stageType={0}", filterObj.StageType) : "";
            queryString += filterObj.OpportunityStagesID != 0 ? String.Format("&opportunityStagesID={0}", filterObj.OpportunityStagesID) : "";


            queryString += filterObj.FromDate != DateTime.MinValue && filterObj.ToDate != DateTime.MinValue
                               ? String.Format("&fromDate={0}&toDate={1}", DateToStringApi(filterObj.FromDate),
                                               DateToStringApi(filterObj.ToDate))
                               : "";

            queryString += filterObj.ContactID != 0 && filterObj.ContactAlsoIsParticipant != null
                                        ? String.Format("&contactID={0}&contactAlsoIsParticipant={1}",
                                                        filterObj.ContactID, filterObj.ContactAlsoIsParticipant)
                                        : "";

            if (filterObj.Tags != null)
            {
                queryString = filterObj.Tags.Aggregate(queryString,
                                                       (current, tag) => current + String.Format("&tags[]={0}", tag));
            }


            var apiServer = new Api.ApiServer();
            var opportunitiesForFirstRequest = apiServer.GetApiResponse(
                String.Format("api/1.0/crm/opportunity/filter.json?{0}", queryString), "GET");


            var opportunitiesRequest = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(opportunitiesForFirstRequest)));

            Page.JsonPublisher(opportunitiesForFirstRequest, "opportunitiesForFirstRequest");

            NoDeals = !filterNotEmpty && opportunitiesRequest["count"].ToString() == "0";

            //init Page Navigator
            _phPagerContent.Controls.Add(new PageNavigator
            {
                ID = "dealPageNavigator",
                CurrentPageNumber = filterObj.CurrentPageNumber,
                VisibleOnePage    = false,
                EntryCount        = 0,
                VisiblePageCount  = Global.VisiblePageCount,
                EntryCountOnPage  = filterObj.Count,
            });
        }
        public static void DataInvoicesDetailsView(BasePage page, Invoice targetInvoice)
        {
            if(targetInvoice == null)
                return;

            var script = String.Format(@"var invoiceData = '{0}';", Global.EncodeTo64(targetInvoice.JsonData));

            var apiServer = new Api.ApiServer();
            var apiUrl = String.Format("{0}crm/invoice/{1}.json",SetupInfo.WebApiBaseUrl, targetInvoice.ID);
            var invoice = apiServer.GetApiResponse(apiUrl, "GET");

            page.RegisterInlineScript(script, onReady: false);
            page.JsonPublisher(invoice, "invoice");
        }
Пример #16
0
        protected override void PageLoad()
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(TaskDescriptionView), Page);
            ((IStudioMaster)Master).DisabledSidePanel = true;

            Project = RequestContext.GetCurrentProject(false);

            if (RequestContext.IsInConcreteProject() && Project == null)
            {
                Response.Redirect("tasks.aspx", true);
            }

            InitBreadCrumbs();

            int taskID;

            if (Int32.TryParse(UrlParameters.EntityID, out taskID))
            {
                if (Project == null)
                {
                    return;
                }

                var apiServer = new Api.ApiServer();
                var task      = apiServer.GetApiResponse(String.Format("api/1.0/project/task/{0}.json", taskID), "GET");
                JsonPublisher(task, "taskDescription");

                var jTask = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(task)));

                if (jTask["count"].ToObject <int>() > 0)
                {
                    var taskDescriptionView = (TaskDescriptionView)LoadControl(PathProvider.GetControlVirtualPath("TaskDescriptionView.ascx"));

                    var taskDescription = new Task
                    {
                        ID      = jTask["response"]["id"].ToObject <int>(),
                        Title   = jTask["response"]["title"].ToString(),
                        Status  = jTask["response"]["status"].ToObject <TaskStatus>(),
                        Project = Project
                    };

                    taskDescriptionView.Task          = taskDescription;
                    taskDescriptionView.CanEditTask   = (bool)jTask["response"]["canEdit"];
                    taskDescriptionView.CanDeleteTask = (int)jTask["response"]["canWork"] == 3;

                    _content.Controls.Add(taskDescriptionView);
                    Master.BreadCrumbs.Add(new BreadCrumb());
                }
                else
                {
                    TaskNotFoundControlView(Project.ID);
                    Master.BreadCrumbs.Clear();
                }
            }
            else
            {
                var advansedFilter = new Studio.Controls.Common.AdvansedFilter {
                    BlockID = "AdvansedFilter"
                };
                _filter.Controls.Add(advansedFilter);

                var taskList = (TaskList)LoadControl(PathProvider.GetControlVirtualPath("TaskList.ascx"));
                _content.Controls.Add(taskList);

                var emptyScreenControlFilter = new Studio.Controls.Common.EmptyScreenControl
                {
                    ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("empty-filter.png", ProductEntryPoint.ID),
                    Header     = TaskResource.NoTasks,
                    Describe   = TaskResource.DescrEmptyListTaskFilter,
                    ButtonHTML = String.Format("<span class='baseLinkAction clearFilterButton'>{0}</span>", ProjectsFilterResource.ClearFilter)
                };
                _content.Controls.Add(emptyScreenControlFilter);

                var emptyScreenControl = new Studio.Controls.Common.EmptyScreenControl
                {
                    ImgSrc   = WebImageSupplier.GetAbsoluteWebPath("empty_screen_tasks.png", ProductEntryPoint.ID),
                    Header   = TaskResource.NoTasksCreated,
                    Describe = String.Format(TaskResource.TasksHelpTheManage)
                };

                if (CanCreateTask())
                {
                    emptyScreenControl.ButtonHTML = String.Format("<span class='baseLinkAction addFirstElement'>{0}</span>", TaskResource.AddFirstTask);
                }

                _content.Controls.Add(emptyScreenControl);
            }

            GetApiData();

            Title = HeaderStringHelper.GetPageTitle(TaskResource.Tasks, Master.BreadCrumbs);
        }
        public static void DataInvoicesActionView(BasePage page, Invoice targetInvoice)
        {
            var daoFactory       = page.DaoFactory;
            var invoiceItems     = daoFactory.InvoiceItemDao.GetAll();
            var invoiceItemsJson = JsonConvert.SerializeObject(invoiceItems.ConvertAll(item => new
            {
                id               = item.ID,
                title            = item.Title,
                stockKeepingUnit = item.StockKeepingUnit,
                description      = item.Description,
                price            = item.Price,
                quantity         = item.Quantity,
                stockQuantity    = item.StockQuantity,
                trackInventory   = item.TrackInventory,
                invoiceTax1ID    = item.InvoiceTax1ID,
                invoiceTax2ID    = item.InvoiceTax2ID
            }));

            var invoiceTaxes     = daoFactory.InvoiceTaxDao.GetAll();
            var invoiceTaxesJson = JsonConvert.SerializeObject(invoiceTaxes.ConvertAll(item => new
            {
                id          = item.ID,
                name        = item.Name,
                rate        = item.Rate,
                description = item.Description
            }));

            var invoiceSettings     = Global.TenantSettings.InvoiceSetting ?? InvoiceSetting.DefaultSettings;
            var invoiceSettingsJson = JsonConvert.SerializeObject(new
            {
                autogenerated = invoiceSettings.Autogenerated,
                prefix        = invoiceSettings.Prefix,
                number        = invoiceSettings.Number,
                terms         = invoiceSettings.Terms
            });

            var presetContactsJson = string.Empty;
            var presetContactID    = UrlParameters.ContactID;

            if (targetInvoice == null && presetContactID != 0)
            {
                var targetContact = daoFactory.ContactDao.GetByID(presetContactID);
                if (targetContact != null)
                {
                    presetContactsJson = JsonConvert.SerializeObject(new
                    {
                        id                   = targetContact.ID,
                        displayName          = targetContact.GetTitle().HtmlEncode().ReplaceSingleQuote(),
                        smallFotoUrl         = ContactPhotoManager.GetSmallSizePhoto(targetContact.ID, targetContact is Company),
                        currencyAbbreviation = targetContact.Currency
                    });
                }
            }

            var currencyRates     = daoFactory.CurrencyRateDao.GetAll();
            var currencyRatesJson = JsonConvert.SerializeObject(currencyRates.ConvertAll(item => new
            {
                id           = item.ID,
                fromCurrency = item.FromCurrency,
                toCurrency   = item.ToCurrency,
                rate         = item.Rate
            }));

            var          apiServer    = new Api.ApiServer();
            const string apiUrlFormat = "{0}crm/contact/{1}/data.json";

            var contactInfoData   = string.Empty;
            var consigneeInfoData = string.Empty;

            if (targetInvoice != null)
            {
                if (targetInvoice.ContactID > 0)
                {
                    contactInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, targetInvoice.ContactID), "GET");
                }
                if (targetInvoice.ConsigneeID > 0)
                {
                    consigneeInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, targetInvoice.ConsigneeID), "GET");
                }
            }
            else if (presetContactID != 0)
            {
                contactInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, presetContactID), "GET");
            }

            var apiUrl = String.Format("{0}crm/invoice/{1}.json",
                                       SetupInfo.WebApiBaseUrl,
                                       targetInvoice != null ? targetInvoice.ID.ToString(CultureInfo.InvariantCulture) : "sample");
            var invoiceData = apiServer.GetApiResponse(apiUrl, "GET");

            var script = String.Format(@"
                                        var invoiceItems = '{0}';
                                        var invoiceTaxes = '{1}';
                                        var invoiceSettings = '{2}';
                                        var invoicePresetContact = '{3}';
                                        var currencyRates = '{4}';
                                        var invoiceJsonData = '{5}';",
                                       Global.EncodeTo64(invoiceItemsJson),
                                       Global.EncodeTo64(invoiceTaxesJson),
                                       Global.EncodeTo64(invoiceSettingsJson),
                                       Global.EncodeTo64(presetContactsJson),
                                       Global.EncodeTo64(currencyRatesJson),
                                       targetInvoice != null ? Global.EncodeTo64(targetInvoice.JsonData) : ""
                                       );

            page.RegisterInlineScript(script, onReady: false);
            page.JsonPublisher(contactInfoData, "invoiceContactInfo");
            page.JsonPublisher(consigneeInfoData, "invoiceConsigneeInfo");
            page.JsonPublisher(invoiceData, "invoice");
        }
Пример #18
0
        private void GetApiData()
        {
            var apiServer = new Api.ApiServer();
            var currentUserId = SecurityContext.CurrentAccount.ID;

            if (RequestContext.IsInConcreteProject())
            {
                var projectParticipants = apiServer.GetApiResponse(string.Format("api/1.0/project/{0}/team.json?fields={1}", 
                    RequestContext.GetCurrentProjectId(), "id,displayName"), "GET");
                JsonPublisher(projectParticipants, "projectTeam");

                var milestones = apiServer.GetApiResponse(string.Format("api/1.0/project/milestone/filter.json?sortBy=deadline&sortOrder=descending&status=open&projectId={0}&fields={1}",
                            RequestContext.GetCurrentProjectId(), "id,title,deadline"), "GET");
                JsonPublisher(milestones, "milestones");
            }
            else
            {
                var milestones = apiServer.GetApiResponse(ProjectSecurity.IsAdministrator(currentUserId) 
                    ? string.Format("api/1.0/project/milestone/filter.json?sortBy=deadline&sortOrder=descending&status=open&fields={0}", "id,title,deadline")
                    : string.Format("api/1.0/project/milestone/filter.json?sortBy=deadline&sortOrder=descending&status=open&participant={0}&fields={1}", currentUserId, "id,title,deadline"), 
                    "GET");
                JsonPublisher(milestones, "milestones");

                var tags = apiServer.GetApiResponse(string.Format("api/1.0/project/tag.json"), "GET");
                JsonPublisher(tags, "tags");

                var projects = apiServer.GetApiResponse(ProjectSecurity.IsAdministrator(currentUserId)
                    ? string.Format("api/1.0/project/filter.json?status=open&sortBy=title&sortOrder=ascending&fields={0}", "id,title,security,isPrivate")
                    : string.Format("api/1.0/project/filter.json?participant={0}&status=open&sortBy=title&sortOrder=ascending&fields={1}", currentUserId, "id,title,security,isPrivate"),
                    "GET");
                JsonPublisher(projects, "projects");
            }
        }
Пример #19
0
        private void GetDataFromCookie()
        {
            //init data for first request
            var filterObj = GetFilterObjectFromCookie();

            var queryString = String.Format("startIndex={0}&count={1}", filterObj.StartIndex, filterObj.Count);

            queryString += String.Format("&sortBy={0}", filterObj.SortBy);
            queryString += String.Format("&sortOrder={0}", filterObj.SortOrder);
            queryString += !String.IsNullOrEmpty(filterObj.FilterValue) ? String.Format("&filterValue={0}", filterObj.FilterValue) : "";
            if (filterObj.Tags != null && filterObj.Tags.Count != 0)
            {
                queryString = filterObj.Tags.Aggregate(queryString,
                                                       (current, tag) => current + String.Format("&tags[]={0}", tag));
            }
            queryString += !String.IsNullOrEmpty(filterObj.ContactListView) ? String.Format("&contactListView={0}", filterObj.ContactListView) : "";
            queryString += filterObj.ContactType != 0 ? String.Format("&contactType={0}", filterObj.ContactType) : "";
                
            var apiServer = new Api.ApiServer();
            var contactsForFirstRequest = apiServer.GetApiResponse(
                String.Format("api/1.0/crm/contact/filter.json?{0}", queryString), "GET");

            Page.JsonPublisher(contactsForFirstRequest, "contactsForFirstRequest");

            //init Page Navigator
            _phPagerContent.Controls.Add(new PageNavigator
            {
                ID = "contactPageNavigator",
                CurrentPageNumber = filterObj.CurrentPageNumber,
                VisibleOnePage = false,
                EntryCount = 0,
                VisiblePageCount = Global.VisiblePageCount,
                EntryCountOnPage = filterObj.Count
            });
        }
Пример #20
0
        private String GetProjectTitle(object folderID)
        {
            var cacheKey = "documents/folders/" + folderID.ToString();

            var projectTitle = Convert.ToString(_cache.Get(cacheKey));

            if (!String.IsNullOrEmpty(projectTitle)) return projectTitle;

            var bunchObjectID = GetBunchObjectID(folderID);

            if (String.IsNullOrEmpty(bunchObjectID))
                throw new Exception("Bunch Object id is null");

            if (!bunchObjectID.StartsWith("projects/project/"))
                return String.Empty;

            var bunchObjectIDParts = bunchObjectID.Split('/');

            if (bunchObjectIDParts.Length < 3)
                throw new Exception("Bunch object id is not supported format");

            var projectID = Convert.ToInt32(bunchObjectIDParts[bunchObjectIDParts.Length - 1]);

            if (HttpContext.Current == null)
                return string.Empty;

            var apiServer = new Api.ApiServer();

            var apiUrl = String.Format("{0}project/{1}.json", SetupInfo.WebApiBaseUrl, projectID);

            var responseApi = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiServer.GetApiResponse(apiUrl, "GET"))))["response"];

            if (responseApi != null && responseApi.HasValues)
            {
                projectTitle = Global.ReplaceInvalidCharsAndTruncate(responseApi["title"].Value<String>());
            }
            else
            {
                return string.Empty;
            }
            if (!String.IsNullOrEmpty(projectTitle))
                _cache.Insert(cacheKey, projectTitle, null, Cache.NoAbsoluteExpiration,
                              TimeSpan.FromMinutes(15));

            return projectTitle;
        }
Пример #21
0
        protected override void PageLoad()
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(TaskDescriptionView), Page);
            ((IStudioMaster)Master).DisabledSidePanel = true;

            Project = RequestContext.GetCurrentProject(false);

            if (RequestContext.IsInConcreteProject() && Project == null)
            {
                Response.Redirect("tasks.aspx", true);
            }
           
            InitBreadCrumbs();

            int taskID;

            if (Int32.TryParse(UrlParameters.EntityID, out taskID))
            {
                if (Project == null) return;

                var apiServer = new Api.ApiServer();
                var task = apiServer.GetApiResponse(String.Format("api/1.0/project/task/{0}.json", taskID), "GET");
                JsonPublisher(task, "taskDescription");

                var jTask = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(task)));

                if (jTask["count"].ToObject<int>() > 0)
                {
                    var taskDescriptionView = (TaskDescriptionView)LoadControl(PathProvider.GetControlVirtualPath("TaskDescriptionView.ascx"));

                    var taskDescription = new Task
                                              {
                                                  ID = jTask["response"]["id"].ToObject<int>(),
                                                  Title = jTask["response"]["title"].ToString(),
                                                  Status = jTask["response"]["status"].ToObject<TaskStatus>(),
                                                  Project = Project
                                              };

                    taskDescriptionView.Task = taskDescription;
                    taskDescriptionView.CanEditTask = (bool)jTask["response"]["canEdit"];
                    taskDescriptionView.CanDeleteTask = (int)jTask["response"]["canWork"] == 3;

                    _content.Controls.Add(taskDescriptionView);
                    Master.BreadCrumbs.Add(new BreadCrumb());
                }
                else
                {
                    TaskNotFoundControlView(Project.ID);
                    Master.BreadCrumbs.Clear();
                }
            }
            else
            {
               var advansedFilter = new Studio.Controls.Common.AdvansedFilter { BlockID = "AdvansedFilter" };
                _filter.Controls.Add(advansedFilter);

                var taskList = (TaskList) LoadControl(PathProvider.GetControlVirtualPath("TaskList.ascx"));
                _content.Controls.Add(taskList);

                var emptyScreenControlFilter = new Studio.Controls.Common.EmptyScreenControl
                {
                    ImgSrc = WebImageSupplier.GetAbsoluteWebPath("empty-filter.png", ProductEntryPoint.ID),
                    Header = TaskResource.NoTasks,
                    Describe = TaskResource.DescrEmptyListTaskFilter,
                    ButtonHTML = String.Format("<span class='baseLinkAction clearFilterButton'>{0}</span>", ProjectsFilterResource.ClearFilter)
                };
                _content.Controls.Add(emptyScreenControlFilter);

                var emptyScreenControl = new Studio.Controls.Common.EmptyScreenControl
                                             {
                                                 ImgSrc = WebImageSupplier.GetAbsoluteWebPath("empty_screen_tasks.png", ProductEntryPoint.ID),
                                                 Header = TaskResource.NoTasksCreated,
                                                 Describe = String.Format(TaskResource.TasksHelpTheManage)
                                             };

                if (CanCreateTask())
                    emptyScreenControl.ButtonHTML = String.Format("<span class='baseLinkAction addFirstElement'>{0}</span>", TaskResource.AddFirstTask);

                _content.Controls.Add(emptyScreenControl);
            }

            GetApiData();

            Title = HeaderStringHelper.GetPageTitle(TaskResource.Tasks, Master.BreadCrumbs);    
        }
Пример #22
0
        private void GetDataFromCookie()
        {
            //init data for first request
            var filterObj = GetFilterObjectFromCookie();

            var filterNotEmpty = false;
            if (filterObj.ContactID != 0 || !String.IsNullOrEmpty(filterObj.FilterValue)
                || filterObj.FromDate != DateTime.MinValue || filterObj.ToDate != DateTime.MinValue || filterObj.OpportunityStagesID != 0
                || filterObj.ResponsibleID != Guid.Empty || filterObj.StageType != null
                || filterObj.Tags != null && filterObj.Tags.Count != 0)
                    filterNotEmpty = true;

            var queryString = String.Format("startIndex={0}&count={1}", filterObj.StartIndex, filterObj.Count);
            queryString += String.Format("&sortBy={0}", filterObj.SortBy);
            queryString += String.Format("&sortOrder={0}", filterObj.SortOrder);
            queryString += !String.IsNullOrEmpty(filterObj.FilterValue) ? String.Format("&filterValue={0}", filterObj.FilterValue) : "";

            queryString += filterObj.ResponsibleID != Guid.Empty ? String.Format("&responsibleID={0}", filterObj.ResponsibleID) : "";
            queryString += !String.IsNullOrEmpty(filterObj.StageType) ? String.Format("&stageType={0}", filterObj.StageType) : "";
            queryString += filterObj.OpportunityStagesID != 0 ? String.Format("&opportunityStagesID={0}", filterObj.OpportunityStagesID) : "";


            queryString += filterObj.FromDate != DateTime.MinValue && filterObj.ToDate != DateTime.MinValue
                               ? String.Format("&fromDate={0}&toDate={1}", DateToStringApi(filterObj.FromDate),
                                               DateToStringApi(filterObj.ToDate))
                               : "";

            queryString += filterObj.ContactID != 0 && filterObj.ContactAlsoIsParticipant != null
                                        ? String.Format("&contactID={0}&contactAlsoIsParticipant={1}",
                                                    filterObj.ContactID, filterObj.ContactAlsoIsParticipant)
                                        : "";
            if (filterObj.Tags != null)
            {
                queryString = filterObj.Tags.Aggregate(queryString,
                                                       (current, tag) => current + String.Format("&tags[]={0}", tag));
            }


            var apiServer = new Api.ApiServer();
            var opportunitiesForFirstRequest = apiServer.GetApiResponse(
                          String.Format("api/1.0/crm/opportunity/filter.json?{0}", queryString), "GET");

            
            var opportunitiesRequest = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(opportunitiesForFirstRequest)));
            Page.JsonPublisher(opportunitiesForFirstRequest, "opportunitiesForFirstRequest");

            NoDeals = !filterNotEmpty && opportunitiesRequest["count"].ToString() == "0";

            //init Page Navigator
            _phPagerContent.Controls.Add(new PageNavigator
            {
                ID = "dealPageNavigator",
                CurrentPageNumber = filterObj.CurrentPageNumber,
                VisibleOnePage = false,
                EntryCount = 0,
                VisiblePageCount = Global.VisiblePageCount,
                EntryCountOnPage = filterObj.Count,
            });
        }
        private void InitForumsData()
        {
            IsForumsAvailable = true;

            var apiServer = new Api.ApiServer();
            var apiResponse = apiServer.GetApiResponse(String.Format("{0}community/forum/count.json", SetupInfo.WebApiBaseUrl), "GET");
            var obj = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
            var count = 0;
            if (Int32.TryParse(obj["response"].ToString(), out count))
                ForumsHasThreadCategories = count > 0;

            if (InAParticularTopic && TopicID > 0)
            {
                apiServer = new Api.ApiServer();
                apiResponse = apiServer.GetApiResponse(String.Format("{0}community/forum/topic/{1}.json", SetupInfo.WebApiBaseUrl, TopicID), "GET");
                obj = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
                if(obj["response"]!=null)
                {
                    obj = JObject.Parse(obj["response"].ToString());
                    var status = 0;
                    if (Int32.TryParse(obj["status"].ToString(), out status))
                        MakeCreateNewTopic = status != 1 && status != 3;
                }
            }
        }
Пример #24
0
        protected override void PageLoad()
        {
            ((IStudioMaster)Master).DisabledSidePanel = true;

            if (!Global.ModuleManager.IsVisible(ModuleType.TimeTracking))
            {
                Response.Redirect(ProjectsCommonResource.StartURL);
            }

            var project = RequestContext.GetCurrentProject(false);

            if (RequestContext.IsInConcreteProject() && project == null)
            {
                Response.Redirect("default.aspx", true);
            }

            ProjectFat = new ProjectFat(project);

            if (!IsTimer)
            {
                if (TaskID <= 0)
                {
                    var advansedFilter = new Studio.Controls.Common.AdvansedFilter {
                        BlockID = "AdvansedFilter"
                    };
                    _filter.Controls.Add(advansedFilter);

                    var emptyScreenControlFilter = new Studio.Controls.Common.EmptyScreenControl
                    {
                        ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("empty-filter.png", ProductEntryPoint.ID),
                        Header     = TimeTrackingResource.NoTimersFilter,
                        Describe   = TimeTrackingResource.DescrEmptyListTimersFilter,
                        ButtonHTML = String.Format("<span class='baseLinkAction clearFilterButton'>{0}</span>", ProjectsFilterResource.ClearFilter)
                    };
                    emptyScreenFilter.Controls.Add(emptyScreenControlFilter);
                }

                InitPage(ProjectFat);

                var emptyScreenControl = new Studio.Controls.Common.EmptyScreenControl
                {
                    ImgSrc   = WebImageSupplier.GetAbsoluteWebPath("empty_screen_time_tracking.png", ProductEntryPoint.ID),
                    Header   = TimeTrackingResource.NoTtimers,
                    Describe = String.Format(TimeTrackingResource.NoTimersNote)
                };

                if (CanCreateTime())
                {
                    emptyScreenControl.ButtonHTML = String.Format("<span class='baseLinkAction addFirstElement'>{0}</span>", TimeTrackingResource.StartTimer);
                }

                emptyScreen.Controls.Add(emptyScreenControl);

                var apiServer = new Api.ApiServer();

                if (TaskID > 0)
                {
                    var timesForFirstRequest = apiServer.GetApiResponse(String.Format("api/1.0/project/task/{0}/time.json", TaskID), "GET");
                    JsonPublisher(timesForFirstRequest, "timesForFirstRequest");
                }


                if (RequestContext.IsInConcreteProject())
                {
                    var projectTeam = apiServer.GetApiResponse(string.Format("api/1.0/project/{0}/team.json?fields={1}", RequestContext.GetCurrentProjectId(), "id,displayName"), "GET");
                    JsonPublisher(projectTeam, "projectTeam");
                }

                TotalTime = TaskID > 0
                                ? Global.EngineFactory.GetTimeTrackingEngine().GetByTask(TaskID).Sum(r => r.Hours)
                                : Global.EngineFactory.GetTimeTrackingEngine().GetByProject(ProjectFat.Project.ID).Sum(r => r.Hours);
            }
            else
            {
                var taskId = TaskID;
                if (taskId > 0)
                {
                    var t = Global.EngineFactory.GetTaskEngine().GetByID(taskId);
                    if (t == null || t.Status == TaskStatus.Closed)
                    {
                        taskId = -1;
                    }
                }
                Master.DisabledSidePanel = true;
                var cntrlTimer = (TimeSpendActionTimer)LoadControl(PathProvider.GetControlVirtualPath("TimeSpendActionTimer.ascx"));

                if (ProjectFat != null)
                {
                    cntrlTimer.Project = ProjectFat.Project;
                }

                cntrlTimer.Target = taskId;
                _phTimeSpendTimer.Controls.Add(cntrlTimer);
                Title = HeaderStringHelper.GetPageTitle(ProjectsCommonResource.AutoTimer, Master.BreadCrumbs);
            }
        }
        public static void DataDealMilestoneView(BasePage page)
        {
            var apiServer = new Api.ApiServer();
            var data = apiServer.GetApiResponse(String.Format("{0}crm/opportunity/stage.json", SetupInfo.WebApiBaseUrl), "GET");

            page.JsonPublisher(data, "dealMilestoneList");
        }
        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);
            }


            return(item);
        }
Пример #27
0
        protected void GetDataFromCookie()
        {
            //init data for first request
            var filterObj = GetFilterObjectFromCookie();

            var filterNotEmpty = false;
            if (!String.IsNullOrEmpty(filterObj.FilterValue) || filterObj.IsClosed != null || filterObj.Tags != null)
                filterNotEmpty = true;

            var queryString = String.Format("startIndex={0}&count={1}", filterObj.StartIndex, filterObj.Count);

            queryString += String.Format("&sortBy={0}", filterObj.SortBy);
            queryString += String.Format("&sortOrder={0}", filterObj.SortOrder);
            queryString += !String.IsNullOrEmpty(filterObj.FilterValue) ? String.Format("&filterValue={0}", filterObj.FilterValue) : "";
            queryString += filterObj.IsClosed != null ? String.Format("&isClosed={0}", filterObj.IsClosed.ToString().ToLower()): "";
            
            if (filterObj.Tags != null && filterObj.Tags.Count != 0)
            {
                queryString = filterObj.Tags.Aggregate(queryString,
                                                       (current, tag) => current + String.Format("&tags[]={0}", tag));
            }

            var apiServer = new Api.ApiServer();
            var casesForFirstRequest = apiServer.GetApiResponse(
                String.Format("api/1.0/crm/case/filter.json?{0}", queryString), "GET");

            var casesRequest = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(casesForFirstRequest)));
            Page.JsonPublisher(casesForFirstRequest, "casesForFirstRequest");


            NoCases = !filterNotEmpty && casesRequest["count"].ToString() == "0";

            //init Page Navigator
            _phPagerContent.Controls.Add(new PageNavigator
            {
                ID = "casesPageNavigator",
                CurrentPageNumber = filterObj.CurrentPageNumber,
                VisibleOnePage = false,
                EntryCount = 0,
                VisiblePageCount = Global.VisiblePageCount,
                EntryCountOnPage = filterObj.Count
            });
        }
        public static void DataInvoicesActionView(BasePage page, Invoice targetInvoice)
        {
            var invoiceItems = Global.DaoFactory.GetInvoiceItemDao().GetAll();
            var invoiceItemsJson = JsonConvert.SerializeObject(invoiceItems.ConvertAll(item => new
                {
                    id = item.ID,
                    title = item.Title,
                    stockKeepingUnit = item.StockKeepingUnit,
                    description = item.Description,
                    price = item.Price,
                    quantity = item.Quantity,
                    stockQuantity = item.StockQuantity,
                    trackInventory = item.TrackInventory,
                    invoiceTax1ID = item.InvoiceTax1ID,
                    invoiceTax2ID = item.InvoiceTax2ID
                }));

            var invoiceTaxes = Global.DaoFactory.GetInvoiceTaxDao().GetAll();
            var invoiceTaxesJson = JsonConvert.SerializeObject(invoiceTaxes.ConvertAll(item => new
                {
                    id = item.ID,
                    name = item.Name,
                    rate = item.Rate,
                    description = item.Description
                }));

            var invoiceSettings = Global.TenantSettings.InvoiceSetting ?? InvoiceSetting.DefaultSettings;
            var invoiceSettingsJson = JsonConvert.SerializeObject(new
                {
                    autogenerated = invoiceSettings.Autogenerated,
                    prefix = invoiceSettings.Prefix,
                    number = invoiceSettings.Number,
                    terms = invoiceSettings.Terms
                });

            var presetContactsJson = string.Empty;
            var presetContactID = UrlParameters.ContactID;
            if (targetInvoice == null && presetContactID != 0)
            {
                var targetContact = Global.DaoFactory.GetContactDao().GetByID(presetContactID);
                if (targetContact != null)
                {
                    presetContactsJson = JsonConvert.SerializeObject(new
                    {
                        id = targetContact.ID,
                        displayName = targetContact.GetTitle().HtmlEncode().ReplaceSingleQuote(),
                        smallFotoUrl = ContactPhotoManager.GetSmallSizePhoto(targetContact.ID, targetContact is Company),
                        currencyAbbreviation = targetContact.Currency
                    });
                }
            }

            var currencyRates = Global.DaoFactory.GetCurrencyRateDao().GetAll();
            var currencyRatesJson = JsonConvert.SerializeObject(currencyRates.ConvertAll(item => new
            {
                id = item.ID,
                fromCurrency = item.FromCurrency,
                toCurrency = item.ToCurrency,
                rate = item.Rate
            }));

            var apiServer = new Api.ApiServer();
            const string apiUrlFormat = "{0}crm/contact/{1}/data.json";

            var contactInfoData = string.Empty;
            var consigneeInfoData = string.Empty;
            
            if(targetInvoice != null)
            {
                if (targetInvoice.ContactID > 0)
                {
                    contactInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, targetInvoice.ContactID), "GET");
                }
                if (targetInvoice.ConsigneeID > 0)
                {
                    consigneeInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, targetInvoice.ConsigneeID), "GET");
                }
            } else if (presetContactID != 0)
            {
                contactInfoData = apiServer.GetApiResponse(String.Format(apiUrlFormat, SetupInfo.WebApiBaseUrl, presetContactID), "GET");
            }

            var apiUrl = String.Format("{0}crm/invoice/{1}.json",
                                       SetupInfo.WebApiBaseUrl,
                                       targetInvoice != null ? targetInvoice.ID.ToString(CultureInfo.InvariantCulture) : "sample");
            var invoiceData = apiServer.GetApiResponse(apiUrl, "GET");

            var script = String.Format(@"
                                        var invoiceItems = '{0}';
                                        var invoiceTaxes = '{1}';
                                        var invoiceSettings = '{2}';
                                        var invoicePresetContact = '{3}';
                                        var currencyRates = '{4}';
                                        var invoiceJsonData = '{5}'; ",
                                       Global.EncodeTo64(invoiceItemsJson),
                                       Global.EncodeTo64(invoiceTaxesJson),
                                       Global.EncodeTo64(invoiceSettingsJson),
                                       Global.EncodeTo64(presetContactsJson),
                                       Global.EncodeTo64(currencyRatesJson),
                                       targetInvoice != null ? Global.EncodeTo64(targetInvoice.JsonData) : ""
                );

            page.RegisterInlineScript(script, onReady: false);
            page.JsonPublisher(contactInfoData, "invoiceContactInfo");
            page.JsonPublisher(consigneeInfoData, "invoiceConsigneeInfo");
            page.JsonPublisher(invoiceData, "invoice");
        }