/// <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)); } }
/// <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")); } }
/// <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)); } } }
/// <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")); } }
/// <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)); }
/// <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(); } }
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")); }
/// <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")); }
/// <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(); } }
/// <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")); }
/// <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")); }
/// <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")); }
/// <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)); } } }
/// <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); } }