Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /*
         * 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();
        }