/// <summary>
        /// Groups the model controller finished.
        /// </summary>
        /// <param name="sender">The sender.</param>
        public virtual void GroupModelControllerFinished(UPGroupModelController sender)
        {
            var newPage = this.InstantiatePage();
            var oldPage = this.Page;

            newPage.LabelText = oldPage.LabelText;
            this.DrawWholePage(newPage);
            this.TopLevelElement = newPage;
            this.PageLoadingFinished();

            if (sender?.Group != null)
            {
                sender.Group.ConfiguredPostionOfGroup = sender.RootTabIndex;

                //this.InformAboutDidChangeTopLevelElement(oldPage, newPage, null, UPChangeHints.ChangeHintsWithHint(Constants.GroupPageChangeHint));
                this.InformAboutDidChangeTopLevelElement(oldPage, newPage, new List <IIdentifier> {
                    sender.Group.Identifier
                }, UPChangeHints.ChangeHintsWithHint(Constants.GroupAddedToPageHint));
            }
            else if (sender != null && sender.Group == null && oldPage.Groups.Count > sender.RootTabIndex)
            {
                var idenifier = oldPage.Groups[sender.RootTabIndex].Identifier;
                this.InformAboutDidChangeTopLevelElement(oldPage, newPage, new List <IIdentifier> {
                    idenifier
                }, UPChangeHints.ChangeHintsWithHint(Constants.GroupAddedToPageHint));
            }
        }
Example #2
0
        /// <summary>
        /// The favorite model controller favorite record identification.
        /// </summary>
        /// <param name="favoriteModelController">The favorite model controller.</param>
        /// <param name="favoriteRecordIdentification">The favorite record identification.</param>
        public void FavoriteModelControllerFavoriteRecordIdentification(UPFavoriteModelController favoriteModelController, string favoriteRecordIdentification)
        {
            ((UPMOrganizer)this.TopLevelElement).FavoriteRecordIdentification = favoriteRecordIdentification;
            UPMOrganizerAction action = this.ActionItem(StringIdentifier.IdentifierWithStringId(Core.Constants.ActionIdToggleFavorite));

            if (action != null)
            {
                action.Aktive    = string.IsNullOrEmpty(favoriteRecordIdentification);
                action.LabelText = !action.Aktive ? LocalizedString.TextProcessDeleteFromFavorites : LocalizedString.TextProcessAddToFavorites;
                this.ModelControllerDelegate?.ModelControllerDidChange(this, this.TopLevelElement, this.TopLevelElement,
                                                                       new List <IIdentifier> {
                    action.Identifier
                }, UPChangeHints.ChangeHintsWithHint("ActionItemStatusChanged"));
            }
        }
Example #3
0
        /// <summary>
        /// Does the discard.
        /// </summary>
        private void DoDiscard()
        {
            UPMSyncConflictWithContext syncConflictWithContext = (UPMSyncConflictWithContext)this.discardedSyncConflict;

            if (syncConflictWithContext.OfflineRequest.DeleteRequest(true) != 0)
            {
                SimpleIoc.Default.GetInstance <ILogger>().LogError("Offline request could not be deleted because of database error");
            }
            else
            {
                this.SyncConflictsPage.RemoveConflict(this.discardedSyncConflict);
                if (this.SyncConflictsPage.NumberOfSyncConflicts == 0)
                {
                    this.AddNoConflictsFoundPage(this.SyncConflictsPage);
                }

                this.InformAboutDidChangeTopLevelElement(this.TopLevelElement, this.TopLevelElement, new List <IIdentifier> {
                    this.discardedSyncConflict.Identifier
                }, UPChangeHints.ChangeHintsWithHint("DiscardConflict"));
                Messenger.Default.Send(SyncManagerMessage.Create(SyncManagerMessageKey.NumberOfConflictsChanged));
            }
        }
        /// <summary>
        /// Fills the page with result row request option.
        /// </summary>
        /// <param name="page">The page.</param>
        /// <param name="resultRow">The result row.</param>
        /// <param name="requestOption">The request option.</param>
        public virtual void FillPageWithResultRow(Page page, UPCRMResultRow resultRow, UPRequestOption requestOption)
        {
            // use localArray because the array could be changed from outside
            var localArray       = new List <UPGroupModelController>(this.GroupModelControllerArray);
            var changeIdentifier = new List <IIdentifier>();

            try
            {
                foreach (var groupModelController in localArray)
                {
                    if (requestOption != UPRequestOption.Default)
                    {
                        if (requestOption != UPRequestOption.Offline || !groupModelController.OnlineOnly)
                        {
                            groupModelController.RequestOption = requestOption;
                        }
                    }

                    if (groupModelController.DelegateCleared)
                    {
                        continue;
                    }

                    groupModelController.ApplyResultRow(resultRow);
                    if (groupModelController.ControllerState != GroupModelControllerState.Finished ||
                        groupModelController.Group == null)
                    {
                        continue;
                    }

                    changeIdentifier.Add(groupModelController.Group.Identifier);
                    groupModelController.Group.ConfiguredPostionOfGroup = groupModelController.RootTabIndex;
                }
            }
            catch (Exception error)
            {
                SimpleIoc.Default.GetInstance <ILogger>().LogError(error);
            }

            if (this.DrawablePageModelController(true))
            {
                this.DrawWholePage(page);
                if (changeIdentifier.Count > 0)
                {
                    this.InformAboutDidChangeTopLevelElement(page, page, changeIdentifier, UPChangeHints.ChangeHintsWithHint(Constants.GroupAddedToPageHint));
                }
            }
        }
Example #5
0
        /// <summary>
        /// Sets the questionnaire finalized.
        /// </summary>
        /// <param name="finalized">if set to <c>true</c> [finalized].</param>
        public void SetQuestionnaireFinalized(bool finalized)
        {
            if (finalized)
            {
                UPMOrganizerAction action             = this.ActionItem(StringIdentifier.IdentifierWithStringId("action.save"));
                List <IIdentifier> changedIdentifiers = new List <IIdentifier>();
                if (action != null)
                {
                    action.LabelText = finalized ? LocalizedString.TextClose : LocalizedString.TextSave;
                    changedIdentifiers.Add(action.Identifier);
                }

                if (this.LeftNavigationBarItems.Count > 0)
                {
                    action         = (UPMOrganizerAction)this.LeftNavigationBarItems[0];
                    action.Enabled = false;
                    changedIdentifiers.Add(action.Identifier);
                }

                this.InformAboutDidChangeTopLevelElement(this.TopLevelElement, this.TopLevelElement, changedIdentifiers, UPChangeHints.ChangeHintsWithHint("EditActionsChanged"));
            }
        }
Example #6
0
        /// <summary>
        /// Method Loads tiles and subviews into Details Organizer Page
        /// </summary>
        private void ContinueBuildDetailsOrganizerPageTilesLoaded()
        {
            var configStore     = ConfigurationUnitStore.DefaultStore;
            var detailOrganizer = (UPMOrganizer)TopLevelElement;
            var recordTiles     = GetUPMTiles();

            detailOrganizer.Tiles       = recordTiles;
            Organizer.OrganizerColor    = ColorForInfoAreaWithId(InfoAreaId);
            Organizer.DisplaysTitleText = true;
            Organizer.ExpandFound       = true;
            RefreshTableCaption();

            if (string.IsNullOrWhiteSpace(VirtualInfoAreaId) || string.IsNullOrWhiteSpace(ExpandConfig.UnitName))
            {
                return;
            }

            var additionalParameters = new Dictionary <string, object>
            {
                { nameof(VirtualInfoAreaId), VirtualInfoAreaId },
                { "CurrentExpandName", ExpandConfig.UnitName }
            };

            var detailPageModelController = new DetailPageModelController(ViewReference.ViewReferenceWith(additionalParameters));

            detailPageModelController.Init();
            var overviewPage = detailPageModelController.Page;

            overviewPage.Parent = detailOrganizer;
            AddPageModelController(detailPageModelController);
            detailOrganizer.AddPage(overviewPage);
            var expandHeader = configStore.HeaderByNameFromGroup(HeaderNameExpand, ExpandConfig.HeaderGroupName);

            if (expandHeader != null)
            {
                UPMOrganizerAddPages(expandHeader, detailOrganizer, overviewPage);
                AddActionButtonsFromHeaderRecordIdentification(expandHeader, RecordIdentification);
                var offline = UPCRMDataStore.DefaultStore.RecordExistsOffline(RecordIdentification);
                if (!offline)
                {
                    OnlineData       = true;
                    SyncRecordAction = new UPMOrganizerAction(StringIdentifier.IdentifierWithStringId(ActionSyncRecord));
                    SyncRecordAction.SetTargetAction(this, PerformAction);
                    var parameter = new List <string> {
                        "RecordId", "Value", "uid"
                    };
                    var parameters = new List <object> {
                        parameter
                    };
                    var definition = new List <object> {
                        string.Empty, "Action:syncRecord", parameters
                    };
                    var syncRecordViewReference = new ViewReference(definition, ButtonSyncRecordText);
                    SyncRecordAction.ViewReference = syncRecordViewReference.ViewReferenceWith(RecordIdentification);
                }
                else
                {
                    OnlineData       = false;
                    SyncRecordAction = null;
                }
            }

            Organizer.DisplaysImage = IsOrganizerHeaderImageConfigured();
            Organizer.LineCountAdditionalTitletext = LinecountOrganizerHeaderSubLabelConfigured();
            UpdateActionItemsStatus();
            InformAboutDidChangeTopLevelElement(Organizer, Organizer, null, UPChangeHints.ChangeHintsWithHint(HintAlternateExpandFound));
        }
Example #7
0
        /// <summary>
        /// Tileses the did finish with success.
        /// </summary>
        /// <param name="crmTiles">The CRM tiles.</param>
        /// <param name="data">The data.</param>
        public void TilesDidFinishWithSuccess(UPCRMTiles crmTiles, object data)
        {
            this.Tiles = crmTiles;
            UPMOrganizer detailOrganizer = (UPMOrganizer)this.TopLevelElement;

            if (detailOrganizer.ExpandFound)
            {
                List <UPMTile> recordTiles = new List <UPMTile>();
                foreach (UPCRMTile tile in this.Tiles.Tiles)
                {
                    if (string.IsNullOrEmpty(tile.Value) && string.IsNullOrEmpty(tile.Text))
                    {
                        continue;
                    }

                    UPMTile tileElement = new UPMTile(StringIdentifier.IdentifierWithStringId("Tile"))
                    {
                        TextField = new UPMStringField(StringIdentifier.IdentifierWithStringId("TileText"))
                        {
                            StringValue = tile.Text
                        },
                        ValueField = new UPMStringField(StringIdentifier.IdentifierWithStringId("ValueText"))
                        {
                            StringValue = tile.Value
                        },
                        ImageName = tile.ImageName
                    };
                    recordTiles.Add(tileElement);
                }

                detailOrganizer.Tiles = recordTiles;
                this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("RecordDataChanged"));
            }
            else
            {
                this.ContinueBuildDetailsOrganizerPageTilesLoaded();
            }
        }
Example #8
0
        private void RefreshTableCaption()
        {
            IConfigurationUnitStore configStore = ConfigurationUnitStore.DefaultStore;
            var    crmStore         = UPCRMDataStore.DefaultStore;
            string tableCaptionName = this.ExpandConfig.TableCaptionName;

            if (string.IsNullOrEmpty(tableCaptionName))
            {
                tableCaptionName = this.InfoAreaId;
            }

            UPConfigTableCaption tableCaption = configStore.TableCaptionByName(tableCaptionName);
            string recordTableCaption         = tableCaption?.TableCaptionForRecordIdentification(this.RecordIdentification);

            if (string.IsNullOrEmpty(recordTableCaption) && !crmStore.RecordExistsOffline(this.RecordIdentification))
            {
                this.Organizer.TitleText = configStore.BasicTextByIndex(4);
                tableCaption?.RequestTableCaptionForRecordIdentification(this.RecordIdentification, this);
            }
            else
            {
                this.Organizer.TitleText = recordTableCaption;
            }

            string subTitleText = null;

            if (!string.IsNullOrEmpty(this.ExpandConfig.HeaderGroupName))
            {
                UPConfigHeader header = configStore.HeaderByNameFromGroup("Expand", this.ExpandConfig.HeaderGroupName);
                subTitleText = header?.Label;
            }

            if (string.IsNullOrEmpty(subTitleText))
            {
                InfoArea infoAreaConfig = configStore.InfoAreaConfigById(this.InfoAreaId);
                subTitleText = infoAreaConfig.SingularName;
                if (string.IsNullOrEmpty(subTitleText))
                {
                    subTitleText = crmStore.TableInfoForInfoArea(this.InfoAreaId).Label;
                }
            }

            this.Organizer.SubtitleText = subTitleText;
            this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("TableCaptionChanged"));
        }
Example #9
0
 /// <summary>
 /// Sets the record title for organizer header.
 /// </summary>
 /// <param name="recordTitle">The record title.</param>
 public void SetRecordTitleForOrganizerHeader(string recordTitle)
 {
     this.Organizer.AdditionalTitleText = recordTitle;
     this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("RecordDataChanged"));
 }
Example #10
0
        /// <summary>
        /// Processes the changes.
        /// </summary>
        /// <param name="listOfIdentifiers">The list of identifiers.</param>
        public override void ProcessChanges(List <IIdentifier> listOfIdentifiers)
        {
            base.ProcessChanges(listOfIdentifiers);
            if (this.Organizer.Invalid)
            {
                this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("Reset"));
                this.UpdatedElement(this.Organizer);
            }
            else
            {
                if (listOfIdentifiers.Count > 0)
                {
                    this.RefreshTableCaption();
                }

                this.Tiles?.Load();
            }
        }
Example #11
0
 /// <summary>
 /// Sets the image for organizer header.
 /// </summary>
 /// <param name="imageDocument">The image document.</param>
 public void SetImageForOrganizerHeader(UPMDocument imageDocument)
 {
     this.Organizer.ImageDocument = imageDocument;
     this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("RecordDataChanged"));
 }
Example #12
0
 /// <summary>
 /// The table caption did finish with result.
 /// </summary>
 /// <param name="tableCaption">The table caption.</param>
 /// <param name="tableCaptionString">The table caption string.</param>
 public void TableCaptionDidFinishWithResult(UPConfigTableCaption tableCaption, string tableCaptionString)
 {
     this.Organizer.TitleText = tableCaptionString;
     this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("RecordDataChanged"));
 }
Example #13
0
 /// <summary>
 /// The table caption did fail with error.
 /// </summary>
 /// <param name="tableCaption">The table caption.</param>
 /// <param name="error">The error.</param>
 public void TableCaptionDidFailWithError(UPConfigTableCaption tableCaption, Exception error)
 {
     this.Organizer.TitleText = LocalizedString.Localize(LocalizationKeys.TextGroupErrors, LocalizationKeys.KeyErrorsCouldNotLoadTableCaption);
     this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("RecordDataChanged"));
 }
Example #14
0
        /// <summary>
        /// Informs the delegate about changed records.
        /// </summary>
        /// <param name="changes">The changes.</param>
        public override void InformDelegateAboutChangedRecords(List <IIdentifier> changes)
        {
            if (this.RefreshOrganizer)
            {
                foreach (IIdentifier identifier in changes)
                {
                    var recordIdentifier = identifier as RecordIdentifier;
                    if (recordIdentifier != null && recordIdentifier.RecordIdentification == this.RecordIdentification)
                    {
                        this.PageModelControllers.Clear();
                        this.UpdatedElement(this.Organizer);
                        this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("Reset"));
                        return;
                    }
                }
            }

            base.InformDelegateAboutChangedRecords(changes);
        }
        /// <summary>
        /// Groups the model controller value changed.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="value">The value.</param>
        public virtual void GroupModelControllerValueChanged(object sender, object value)
        {
            var group            = (UPGroupModelController)sender;
            var changedValueName = group.ValueName;

            if (string.IsNullOrEmpty(changedValueName))
            {
                return;
            }

            changedValueName = $"${changedValueName}";
            var changedValue = group.Value ?? string.Empty;

            List <UPGroupModelController> affectedGroupModelController = null;

            foreach (var g in this.GroupModelControllerArray)
            {
                if (!g.AffectedByKey(changedValueName))
                {
                    continue;
                }

                if (affectedGroupModelController == null)
                {
                    affectedGroupModelController = new List <UPGroupModelController> {
                        g
                    };
                }
                else
                {
                    affectedGroupModelController.Add(g);
                }
            }

            this.ValueDictionary.SetObjectForKey(changedValue, changedValueName);
            if (this.GroupModelControllerArray.Count == 0)
            {
                return;
            }

            var changedIdentfiers = new List <IIdentifier>();

            if (affectedGroupModelController != null)
            {
                foreach (var g in affectedGroupModelController)
                {
                    g.ApplyContext(this.ValueDictionary);
                    if (g.ControllerState != GroupModelControllerState.Finished)
                    {
                        continue;
                    }

                    if (g.Group != null)
                    {
                        changedIdentfiers.Add(g.Group.Identifier);
                    }
                }
            }

            var newPage = this.InstantiatePage();

            this.drawn = false;
            this.DrawWholePage(newPage);
            var oldPage = this.Page;

            this.TopLevelElement = newPage;
            if (this.DrawablePageModelController(false))
            {
                this.PageLoadingFinished();
                this.InformAboutDidChangeTopLevelElement(this.Page, this.Page, null, UPChangeHints.ChangeHintsWithHint(Constants.GroupPageChangeHint));
                if (changedIdentfiers.Count > 0)
                {
                    this.InformAboutDidChangeTopLevelElement(oldPage, newPage, changedIdentfiers, UPChangeHints.ChangeHintsWithHint(Constants.GroupAddedToPageHint));
                }
            }
        }
Example #16
0
        /// <summary>
        /// The alternate expand checker did finish with result.
        /// </summary>
        /// <param name="expandChecker">The expand checker.</param>
        /// <param name="expand">The expand.</param>
        public void AlternateExpandCheckerDidFinishWithResult(UPCRMAlternateExpandChecker expandChecker, UPConfigExpand expand)
        {
            if (expand != null)
            {
                this.ExpandConfig = expand;
            }

            this.ContinueBuildDetailsOrganizerPage();
            this.InformAboutDidChangeTopLevelElement(this.Organizer, this.Organizer, null, UPChangeHints.ChangeHintsWithHint("AlternateExpandFound"));
            this.AddToHistory(this.RecordIdentification, this.ViewReference, this.ExpandConfig.ImageName);
        }
        private void UpdatePageFromResultReset(AnalysisResult result, bool reset)
        {
            this.AnalysisResult = result;
            var searchPage  = (UPMGridPage)this.CreatePageInstance();
            var oldPage     = this.Page;
            var oldGridPage = (UPMGridPage)this.Page;

            if (reset)
            {
                var resetHeadOption = oldGridPage.ResetHeadOption;
                searchPage.ResetHeadOption = resetHeadOption;
            }

            searchPage.InitialSortColumn = this.AnalysisResult.SortColumn + 1;
            var columnCount         = result.Columns.Count;
            var identifier          = StringIdentifier.IdentifierWithStringId("columnHeader");
            var section             = new UPMResultSection(identifier);
            var columnHeaderListRow = new UPMResultRow(identifier);
            var fieldArray          = this.CreateFieldArray();

            var xColumnArray = new List <object>(result.Columns.Count);

            ProcessColumns(result.Columns, searchPage, fieldArray, xColumnArray);

            columnHeaderListRow.Fields = fieldArray;
            this.AddCategoryActionsToRow(columnHeaderListRow);
            section.AddResultRow(columnHeaderListRow);
            searchPage.AddResultSection(section);

            var keyAsRawString = result.Settings.Category.IsExplicitCategory;

            if (keyAsRawString)
            {
                searchPage.SetColumnInfoAtIndexDataTypeSpecialSort(0, UPMColumnDataType.String, true);
            }

            this.ProcessResultRows(result, searchPage, xColumnArray, keyAsRawString, columnCount, section);

            this.AddDrillupActionsFromResultToPage(result, searchPage);
            this.AddCategoriesFromResultToPage(result, searchPage);
            this.UpdateResetHeadOption(searchPage, reset, result);

            this.TopLevelElement = searchPage;
            this.InformAboutDidChangeTopLevelElement(oldPage, searchPage, null, oldGridPage.Reset ? UPChangeHints.ChangeHintsWithHint("ResetAnalysis") : null);
        }
 /// <summary>
 /// Informs about change of top level element.
 /// </summary>
 /// <param name="oldTopLevelElement">The old top level element.</param>
 /// <param name="newTopLevelElement">The new top level element.</param>
 /// <param name="changedIdentifiers">The changed identifiers.</param>
 /// <param name="changeHints">The change hints.</param>
 public override void InformAboutDidChangeTopLevelElement(ITopLevelElement oldTopLevelElement,
                                                          ITopLevelElement newTopLevelElement, List <IIdentifier> changedIdentifiers, UPChangeHints changeHints)
 {
     if (this.TestDelegate != null)
     {
         this.TestDelegate.ModelControllerDidFinishWithSuccess(this, (MDetailPage)newTopLevelElement);
     }
     else
     {
         base.InformAboutDidChangeTopLevelElement(oldTopLevelElement, newTopLevelElement, changedIdentifiers,
                                                  changeHints);
     }
 }