/// <summary> /// Initializes the content components. /// </summary> private void InitializeContent() { DefaultContent InitialContent = new DefaultContent(Header.Week, wrapper); InitialContent.Finish += HandleMenuSelect; AddContent(InitialContent); AddContent(new CancelRequestController()); WorkflowInitializer.SetupSchedulingContent(wrapper, AddContent, WorkflowController); ContentController.ContentChanged += (object sender, ReferenceArgs <IInterfaceContent> args) => { if (args.Value is IComponent c) { Content.SetSelected(c); } OnHomeScreen.Value = args.Value.Name == "Default"; }; ContentController.Default = InitialContent.Name; ContentController.Activate(ContentController.Default); }
/* * overidden method to access saveMap, which contains all the entities that will be saved * saveMap allows you to modifed & pass new entites back to the front-end * * if you query it from the session, you must include it in saveMap back to the client * the UI will update automatically */ private void AfterSaveEntities(Dictionary <Type, List <EntityInfo> > saveMap, List <KeyMapping> keyMappings) { var requestToChange = saveMap .Where(p => p.Key.IsAssignableFrom(typeof(Request))) .Select(p => p.Value) .FirstOrDefault(); var smToChange = saveMap .Where(p => p.Key.IsAssignableFrom(typeof(SourceMaterial))) .Select(p => p.Value.Where(x => x.EntityState == EntityState.Added).ToList()) .FirstOrDefault(); if (requestToChange != null) { var rq = ((Request)requestToChange.First().Entity); if (rq.RequestTemplateId != null) { bool selectedTemplateChangedValue = false; var selectedTemplateChanged = requestToChange.First().UnmappedValuesMap.SingleOrDefault(x => x.Key == "SelectedTemplateChanged"); // only if true, if false or null don't create jobs if (!string.IsNullOrEmpty(selectedTemplateChanged.Key) && (bool.TryParse(selectedTemplateChanged.Value.ToString(), out selectedTemplateChangedValue) && selectedTemplateChangedValue)) { _requestBL.CreateJobsBasedOnRequestTemplate(rq); var sms = Session.Query <SourceMaterial>().Where(x => x.RequestId == rq.Id).Where(x => !x.Jobs.Any()).ToList(); foreach (var sm in sms) { if (!CheckForObjectTypeInSaveMap(sm, saveMap)) { sm.UpdateDate = DateTime.UtcNow; saveMap.AddCustomEntity <SourceMaterial>(sm, this); } } } } } else if (smToChange != null && smToChange.Count > 0) { var rq = Session.Query <Request>().SingleOrDefault(x => x.Id == ((SourceMaterial)smToChange.First().Entity).RequestId); if (rq.RequestTemplateId != null) { _requestBL.CreateJobsBasedOnRequestTemplate(rq); } } // upload file to filemanagement service when a new file is saved var physicalFiles = saveMap .Where(p => p.Key.IsAssignableFrom(typeof(PhysicalFile))) .Select(p => p.Value) .FirstOrDefault(); if (physicalFiles != null) { foreach (var physicalFile in physicalFiles) { if (physicalFile.EntityState == EntityState.Added) { // see TFS 11203 var file = Session.Load <PhysicalFile>(((PhysicalFile)physicalFile.Entity).Id); // call external storage service StoreFileResponse resp = null; Helper.UseWcfService <IFileManagement>("FileManagement", null, null, p => { try { // Copying from a physical file (case we use a template with references they must be cloned) if (file.ExternalStorageFileId == null) { var filePath = Path.Combine(ConfigurationManager.AppSettings["UploadFolder"], file.PhysicalPath); // Reads data from the client temp folder var fileBytes = File.ReadAllBytes(filePath); resp = p.StoreFile(new StoreFileRequest() { FileData = fileBytes, FileName = file.FileName, Anonymize = true }); // check embedded only if it's a sourcematerial if (file.MaterialClassification.Code != "CREF" && new EmbeddedFileBL().IsEmbedded(filePath, file.FileName)) { file.IsEmbedded = true; } } else { resp = p.CloneFile(new CloneFileRequest() { ExternalStorageFileId = file.ExternalStorageFileId.Value, FileName = file.FileName }); } } catch (FaultException <FileIOFault> ex) { if (ex.Detail.FaultType == FileIOFault.FaultTypes.UnableToStoreError) { // Display an error if an upload issue happened // find temp key in keymappings var tempKey = keyMappings.Where(key => (Guid)key.RealValue == file.Id).Select(key => key.TempValue); var entityError = new EntityError { ErrorName = "Store file", ErrorMessage = ex.Detail.ErrorMessage, EntityTypeName = file.GetType().FullName, PropertyName = "FileName", KeyValues = tempKey.ToArray() }; throw new EntityErrorsException("Error saving file", new List <EntityError>() { entityError }); } } }); file.ExternalStorageFileId = resp.FileId; Session.Save(file); } } } var entityInfos = saveMap .Where(p => p.Key.IsAssignableFrom(typeof(Request))) .Select(p => p.Value) .FirstOrDefault(); if (entityInfos != null) { foreach (var entityInfo in entityInfos) { // initialize workflow or send email only if the status of the request has changed if (entityInfo.OriginalValuesMap.ContainsKey("StatusId")) { Request request = (Request)entityInfo.Entity; if (request.Status.Code == "MTS" && request.RequestType.Code == "RST001") { this.SendMarkedToSendEmail(request); } Status oldStatus = Session.Query <Status>().First(x => x.Id == Guid.Parse(entityInfo.OriginalValuesMap["StatusId"].ToString())); if (request.Status.Code == "DRAF" && request.RequestType.Code == "RST001" && oldStatus.Code == Status.Codes.MTS) { this.SendBackToDraftEmail(request); } if (request.Status.Code == "NEW" && request.RequestType.Code == "RST003") { WorkflowInitializer.Initialize(request, "AsaDefaultFlow", this.Session); } else if (request.Status.Code == "NEW" && request.RequestType.Code == "RST001") { WorkflowInitializer.Initialize(request, "EcdtDefaultFlow", this.Session); } } } } AfterSaveSourceMaterial(saveMap); AfterSaveJob(saveMap); Session.Flush(); }