Esempio n. 1
0
        public override void AddItem(object item)
        {
            // TODO: Set current week from the datetime on the new session
            if (this.SelectedActivity != null)
            {
                List <dev1_session> sessions   = GetCurrentWeek();
                dev1_session        itemAdding = (dev1_session)item;
                dev1_session        newItem    = new dev1_session();

                newItem.dev1_Description = itemAdding.dev1_Description;
                newItem.dev1_StartTime   = itemAdding.dev1_StartTime;
                newItem.dev1_Duration    = itemAdding.dev1_Duration;
                newItem.Account          = itemAdding.Account;
                newItem.activitypointer_regardingobjectid = itemAdding.activitypointer_regardingobjectid == null ? this.SelectedActivity : itemAdding.activitypointer_regardingobjectid;
                newItem.activitypointer_subject           = itemAdding.activitypointer_regardingobjectid == null ? this.SelectedActivity.Name : itemAdding.activitypointer_subject;
                newItem.dev1_ActivityId       = this.SelectedActivity.Id.ToString();
                newItem.dev1_ActivityTypeName = this.SelectedActivity.LogicalName;

                // Set the activity reference
                switch (this.SelectedActivity.LogicalName)
                {
                case "phonecall":
                    newItem.dev1_PhoneCallId = this.SelectedActivity;
                    break;

                case "task":
                    newItem.dev1_TaskId = this.SelectedActivity;
                    break;

                case "letter":
                    newItem.dev1_LetterId = this.SelectedActivity;
                    break;

                case "email":
                    newItem.dev1_EmailId = this.SelectedActivity;
                    break;
                }

                newItem.EntityState = EntityStates.Created;
                // If no date set, set to the currently selected date
                if (newItem.dev1_StartTime == null)
                {
                    newItem.dev1_StartTime = SelectedDay == null ? WeekStart : SelectedDay;
                }

                // Add to the sessions view cache
                AddSession(sessions, newItem);

                // Add to the data view as well
                data.Add(newItem);

                // refresh
                DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                args.From = data.Count - 1;
                args.To   = data.Count - 1;

                this.OnDataLoaded.Notify(args, null, null);
                this.OnRowsChanged.Notify(null, null, null);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Only show the view of selected activity
        /// </summary>
        private void RefreshActivityView()
        {
            // filter sessions by activity and seleced day


            data = new List <dev1_session>();
            foreach (dev1_session session in GetCurrentWeek())
            {
                if (
                    (
                        (SelectedActivityID == null)
                        ||
                        (session.dev1_ActivityId == SelectedActivityID.ToString())
                    )
                    &&
                    (
                        (SelectedDay == null)
                        ||
                        (session.dev1_StartTime.GetDay() == SelectedDay.GetDay())
                    )
                    ) // TODO: filter day
                {
                    data.Add(session);
                }
            }
            // Notify
            DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();

            args.From = 0;
            args.To   = data.Count - 1;

            this.OnDataLoaded.Notify(args, null, null);
            this.OnRowsChanged.Notify(null, null, this);
        }
Esempio n. 3
0
 public override void Refresh()
 {
     if (rows != null)
     {
         DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
         args.From = 0;
         args.To   = rows.Count - 1;
         this.OnDataLoaded.Notify(args, null, null);
         this.OnRowsChanged.Notify(null, null, this);
     }
 }
        private void Connections_OnDataLoaded(EventData e, object data)
        {
            DataLoadedNotifyEventArgs args = (DataLoadedNotifyEventArgs)data;

            for (int i = 0; i < args.To; i++)
            {
                Connection connection = (Connection)Connections.GetItem(i);
                if (connection == null)
                {
                    return;
                }
                connection.PropertyChanged += connection_PropertyChanged;
            }
        }
Esempio n. 5
0
        private void Contacts_OnDataLoaded(EventData e, object data)
        {
            DataLoadedNotifyEventArgs args = (DataLoadedNotifyEventArgs)data;

            for (int i = 0; i < args.To; i++)
            {
                Contact contact = (Contact)Contacts.GetItem(i);
                if (contact == null)
                {
                    return;
                }
                contact.PropertyChanged += Contact_PropertyChanged;
            }
        }
Esempio n. 6
0
        public void DataBindEvents(Grid grid, DataViewBase dataView, string gridContainerDivId)
        {
            // Data Sorting
            grid.OnSort.Subscribe(delegate(EventData o, Object item)
            {
                SortColData sorting = (SortColData)item;
                dataView.Sort(sorting);
                grid.Invalidate();
                grid.Render();
            });

            // Session Grid DataBinding
            grid.OnAddNewRow.Subscribe(delegate(EventData o, Object item)
            {
                EditEventData data = (EditEventData)item;
                dataView.AddItem(data.item);


                Column column = data.column;
                grid.InvalidateRow(dataView.GetLength() - 1);

                grid.UpdateRowCount();
                grid.Render();
            });

            dataView.OnRowsChanged.Subscribe(delegate(EventData e, object a)
            {
                OnRowsChangedEventArgs args = (OnRowsChangedEventArgs)a;
                if (args != null && args.Rows != null)
                {
                    grid.InvalidateRows(args.Rows);
                    grid.Render();
                }
                else
                {
                    // Assume that a new row has been added
                    grid.InvalidateRow(dataView.GetLength());
                    grid.UpdateRowCount();
                    grid.Render();
                }
                grid.ResizeCanvas();
            });


            jQueryObject loadingIndicator = null;


            // Wire up the validation error
            jQueryObject validationIndicator = null;
            Action <EventData, object> clearValidationIndicator = delegate(EventData e, object a)
            {
                if (validationIndicator != null)
                {
                    validationIndicator.Hide();
                    validationIndicator.Remove();
                }
            };

            grid.OnCellChange.Subscribe(clearValidationIndicator);
            grid.OnActiveCellChanged.Subscribe(clearValidationIndicator);
            grid.OnBeforeCellEditorDestroy.Subscribe(clearValidationIndicator);

            grid.OnValidationError.Subscribe(delegate(EventData e, object a)
            {
                ValidationEventArgs args          = (ValidationEventArgs)a;
                ValidationResult validationResult = (ValidationResult)args.ValidationResults;
                jQueryObject activeCellNode       = (jQueryObject)args.CellNode;
                object editor       = args.Editor;
                string errorMessage = "";
                if (validationResult.Message != null)
                {
                    errorMessage = validationResult.Message;
                }
                bool valid_result = validationResult.Valid;

                // Add the message to the tooltip on the cell
                if (!valid_result)
                {
                    jQuery.FromObject(activeCellNode).Attribute("title", errorMessage);
                    clearValidationIndicator(e, a);
                    validationIndicator = jQuery.FromHtml("<div class='popup-box-container'><div width='16px' height='16px' class='sparkle-imagestrip-inlineedit_warning popup-box-icon' alt='Error' id='icon'/><div class='popup-box validation-text'/></div>").AppendTo(Document.Body);
                    validationIndicator.Find(".validation-text").Text(errorMessage);

                    string colisionPosition = ValidationPopupUseFitPosition ? "fit fit" : "none none";
                    Script.Literal(@"{0}.position({{
                                            my: 'left bottom',
                                            at: 'left top',
                                            collision: '{2}',
                                            of: {1}
                                        }})
                                        .show({{
                                        effect: 'blind'
                                        }})
                                        .delay( 500000 )
                                        .hide({{
                                            effect: 'fade',
                                            duration: 'slow', 
                                        }},
                                            function() {{
                                                $( this ).remove();
                                                
                                            }});
                                        ", validationIndicator, activeCellNode, colisionPosition);
                }
                else
                {
                    clearValidationIndicator(e, a);
                    jQuery.FromObject(activeCellNode).Attribute("title", "");
                }
            });

            // Wire up the loading spinner
            dataView.OnDataLoading.Subscribe(delegate(EventData e, object a)
            {
                loadingIndicator = ShowLoadingIndicator(loadingIndicator, gridContainerDivId);
                foreach (Column col in grid.GetColumns())
                {
                    if (col.MaxWidth != null)
                    {
                        col.MaxWidth = 400;
                    }
                }
            });

            dataView.OnDataLoaded.Subscribe(delegate(EventData e, object a)
            {
                DataLoadedNotifyEventArgs args = (DataLoadedNotifyEventArgs)a;
                if (args != null)
                {
                    if (args.ErrorMessage == null)
                    {
                        for (int i = args.From; i <= args.To; i++)
                        {
                            grid.InvalidateRow(i);
                        }
                        grid.UpdateRowCount();
                        grid.Render();
                    }
                    else
                    {
                        Script.Alert("There was a problem refreshing the grid.\nPlease contact your system administrator:\n" + args.ErrorMessage);
                    }
                }
                if (loadingIndicator != null)
                {
                    loadingIndicator.Plugin <jQueryBlockUI>().Unblock();
                }
            });

            // Wire up edit complete to property changed
            grid.OnCellChange.Subscribe(delegate(EventData e, object data)
            {
                OnCellChangedEventData eventData = (OnCellChangedEventData)data;
                dataView.RaisePropertyChanged("");
            });
        }
Esempio n. 7
0
        public override void Refresh()
        {
            //if (_suspendRefresh)
            //    return;

            _suspendRefresh = true;
            // check if we have loaded this page yet
            int firstRowIndex = (int)paging.PageNum * (int)paging.PageSize;

            // If we have deleted all rows, we don't want to refresh the grid on the first page
            bool       allDataDeleted = (paging.TotalRows == 0) && (DeleteData != null) && (DeleteData.Count > 0);
            List <int> rows           = new List <int>();

            if (firstRowIndex >= _pageLoaded)
            {
                this.OnDataLoading.Notify(null, null, null);

                string orderBy = ApplySorting();

                // We need to load the data from the server
                int?fetchPageSize;

                fetchPageSize = this.paging.PageSize;
                if (String.IsNullOrEmpty(_fetchXml))
                {
                    return;
                }
                string parameterisedFetchXml = String.Format(_fetchXml, fetchPageSize, XmlHelper.Encode(this.paging.extraInfo), this.paging.PageNum + 1, orderBy);
                OrganizationServiceProxy.BeginRetrieveMultiple(parameterisedFetchXml, delegate(object result)
                {
                    try
                    {
                        EntityCollection results = OrganizationServiceProxy.EndRetrieveMultiple(result, _entityType);

                        // Set data
                        int i = firstRowIndex;
                        if (_lazyLoadPages)
                        {
                            // We are returning just one page - so add it into the data
                            foreach (Entity e in results.Entities)
                            {
                                _data[i] = (Entity)e;
                                ArrayEx.Add(rows, i);
                                i = i + 1;
                            }
                        }
                        else
                        {
                            // We are returning all results in one go
                            _data = results.Entities.Items();
                        }



                        // Notify
                        DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                        args.From = firstRowIndex;
                        args.To   = firstRowIndex + (int)paging.PageSize - 1;


                        this.paging.TotalRows  = results.TotalRecordCount;
                        this.paging.extraInfo  = results.PagingCookie;
                        this.paging.FromRecord = firstRowIndex + 1;
                        this.paging.TotalPages = Math.Ceil(results.TotalRecordCount / this.paging.PageSize);
                        this.paging.ToRecord   = Math.Min(results.TotalRecordCount, firstRowIndex + paging.PageSize);
                        if (this._itemAdded)
                        {
                            this.paging.TotalRows++;
                            this.paging.ToRecord++;
                            this._itemAdded = false;
                        }
                        this.OnPagingInfoChanged.Notify(GetPagingInfo(), null, null);
                        this.OnDataLoaded.Notify(args, null, null);
                    }
                    catch (Exception ex)
                    {
                        this.ErrorMessage = ex.Message;
                        DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                        args.ErrorMessage = ex.Message;
                        this.OnDataLoaded.Notify(args, null, null);
                    }
                });
            }
            else
            {
                // We already have the data
                DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                args.From = 0;
                args.To   = (int)paging.PageSize - 1;
                this.paging.FromRecord = firstRowIndex + 1;
                this.paging.ToRecord   = Math.Min(this.paging.TotalRows, firstRowIndex + paging.PageSize);

                this.OnPagingInfoChanged.Notify(GetPagingInfo(), null, null);
                this.OnDataLoaded.Notify(args, null, null);
                this._itemAdded = false;
            }

            OnRowsChangedEventArgs refreshArgs = new OnRowsChangedEventArgs();

            refreshArgs.Rows = rows;

            this.OnRowsChanged.Notify(refreshArgs, null, this);
            _suspendRefresh = false;
        }
Esempio n. 8
0
        public override void Refresh()
        {
            int requestedPage = paging.PageNum.Value;
            int pageLoadState = _pagesLoaded[requestedPage];

            if (_suspendRefresh == true)
            {
                return;
            }

            _suspendRefresh = true;

            // If we have deleted all rows, we don't want to refresh the grid on the first page
            bool       allDataDeleted = (paging.TotalRows == 0) && (DeleteData != null) && (DeleteData.Count > 0);
            List <int> rows           = new List <int>();
            int        firstRowIndex  = requestedPage * (int)paging.PageSize;

            if (pageLoadState != LOADING && pageLoadState != LOADED)
            {
                if (String.IsNullOrEmpty(_fetchXml))
                {
                    _suspendRefresh = false;
                    return;
                }
                _pagesLoaded[requestedPage] = LOADING;

                this.OnDataLoading.Notify(null, null, null);

                string orderBy = ApplySorting();

                // We need to load the data from the server
                int?fetchPageSize;

                fetchPageSize = this.paging.PageSize;


                string parameterisedFetchXml = String.Format(_fetchXml, fetchPageSize, XmlHelper.Encode(this.paging.extraInfo), requestedPage + 1, orderBy);

                OrganizationServiceProxy.BeginRetrieveMultiple(parameterisedFetchXml, delegate(object result)
                {
                    try
                    {
                        EntityCollection results = OrganizationServiceProxy.EndRetrieveMultiple(result, _entityType);

                        // Set data
                        int i = firstRowIndex;
                        if (_lazyLoadPages)
                        {
                            // We are returning just one page - so add it into the data
                            foreach (Entity e in results.Entities)
                            {
                                _data[i] = (Entity)e;
                                ArrayEx.Add(rows, i);
                                i = i + 1;
                            }
                        }
                        else
                        {
                            // We are returning all results in one go
                            _data = results.Entities.Items();
                        }

                        _pagesLoaded[requestedPage] = LOADED;

                        this.paging.TotalRows  = results.TotalRecordCount;
                        this.paging.extraInfo  = results.PagingCookie;
                        this.paging.FromRecord = firstRowIndex + 1;
                        this.paging.TotalPages = Math.Ceil(results.TotalRecordCount / this.paging.PageSize);
                        this.paging.ToRecord   = Math.Min(results.TotalRecordCount, firstRowIndex + paging.PageSize);
                        if (this._itemAdded)
                        {
                            this.paging.TotalRows++;
                            this.paging.ToRecord++;
                            this._itemAdded = false;
                        }
                        this.OnPagingInfoChanged.Notify(GetPagingInfo(), null, null);
                        // Notify
                        DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                        args.From = firstRowIndex;
                        args.To   = firstRowIndex + (int)paging.PageSize - 1;
                        this.OnDataLoaded.Notify(args, null, null);
                        FinishSuspend();
                    }
                    catch (Exception ex)
                    {
                        // Issue #40 - Check for Quick Find Limit
                        bool quickFindLimit         = ex.Message.IndexOf("QuickFindQueryRecordLimit") > -1;
                        _pagesLoaded[requestedPage] = LOADED;
                        this.paging.TotalRows       = 5001;
                        this.OnPagingInfoChanged.Notify(GetPagingInfo(), null, null);
                        DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                        if (!quickFindLimit)
                        {
                            this.ErrorMessage = ex.Message;
                            args.ErrorMessage = ex.Message;
                        }

                        this.OnDataLoaded.Notify(args, null, null);
                        //_pendingRefresh = false;
                        FinishSuspend();
                    }
                });
            }
            else if (pageLoadState == LOADED)
            {
                // We already have the data
                DataLoadedNotifyEventArgs args = new DataLoadedNotifyEventArgs();
                args.From = 0;
                args.To   = (int)paging.PageSize - 1;
                this.paging.FromRecord = firstRowIndex + 1;
                this.paging.ToRecord   = Math.Min(this.paging.TotalRows, firstRowIndex + paging.PageSize);

                this.OnPagingInfoChanged.Notify(GetPagingInfo(), null, null);
                this.OnDataLoaded.Notify(args, null, null);
                this._itemAdded = false;
                FinishSuspend();
            }
        }