public static DataCollectionViewModelStep2 MapFrom(this DataCollectionViewModelStep2 vm, DataCollection collection)
        {
            if (vm == null || collection == null)
            {
                return(vm);
            }

            vm.InjectFrom(collection);

            MapForCodes(vm.FieldsOfResearch, collection.FieldsOfResearch);
            MapSeoCodes(vm.SocioEconomicObjectives, collection.SocioEconomicObjectives);
            vm.Manager       = MapManager(collection.Parties);
            vm.UrdmsUsers    = MapUrdmsUsers(collection.Parties);
            vm.NonUrdmsUsers = MapNonUrdmsUsers(collection.Parties);
            return(vm);
        }
        public static DataCollection MapFrom(this DataCollection entity, DataCollectionViewModelStep2 vm, bool removeMissingParties = false)
        {
            if (vm == null || entity == null)
            {
                return(entity);
            }


            entity.InjectFrom(vm);


            entity.FieldsOfResearch.MapFrom <DataCollectionFieldOfResearch, FieldOfResearch>(vm.FieldsOfResearch.Select(s => (DataCollectionFieldOfResearch)s).ToList());
            entity.SocioEconomicObjectives.MapFrom <DataCollectionSocioEconomicObjective, SocioEconomicObjective>(vm.SocioEconomicObjectives.Select(s => (DataCollectionSocioEconomicObjective)s).ToList());


            entity.Parties.MapFrom(vm);
            if (removeMissingParties)
            {
                // combining project party ids of all parties from the view model URDMS and non URDMS users
                var dataCollectionPartyIds = vm.UrdmsUsers
                                             .Where(o => o.Id > 0)
                                             .Select(o => o.Id)
                                             .Union(vm.NonUrdmsUsers.Where(o => o.Id > 0)
                                                    .Select(o => o.Id))
                                             .ToList();
                if (dataCollectionPartyIds.Count != 0)
                {
                    // Get a list of ProjectParty keys requiring deletion
                    var partyDeleteKeys = entity.Parties
                                          .Where(o => o.Relationship != DataCollectionRelationshipType.Manager && o.Id > 0 && !dataCollectionPartyIds.Any(q => o.Id == q))
                                          .Select(t => t.Id)
                                          .ToList();

                    // Remove them
                    partyDeleteKeys.Do(o => entity.Parties.RemoveAll(p => p.Id == o));
                }
            }
            entity.Parties.ForEach(p => p.DataCollection = entity);

            return(entity);
        }
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var form =  controllerContext.HttpContext.Request.Form;
            var model = new DataCollectionViewModelStep2();
            model.ExtractForCodes<DataCollectionFieldOfResearch>(form);
            model.ExtractSeoCodes<DataCollectionSocioEconomicObjective>(form);
            int collectionDescriptionId;
            if (int.TryParse(form["Id"], out collectionDescriptionId))
            {
                var collection = DataCollectionRepository.Get(collectionDescriptionId);

                model.Manager = collection.Parties
                                .Where(p => p.Party.UserId != null && p.Relationship == DataCollectionRelationshipType.Manager)
                                .Single().Party;
            }
            model.DeserializeUrdmsUsers<DataCollectionRelationshipType>(form);
            model.DeserializeNonUrdmsUsers<DataCollectionRelationshipType>(form);

            bindingContext.ModelMetadata.Model = model;

            return base.BindModel(controllerContext, bindingContext); 
        }
        public static DataCollection MapFrom(this DataCollection entity, DataCollectionViewModelStep2 vm, bool removeMissingParties = false)
        {
            if (vm == null || entity == null)
                return entity;

            
            entity.InjectFrom(vm);
           

            entity.FieldsOfResearch.MapFrom<DataCollectionFieldOfResearch, FieldOfResearch>(vm.FieldsOfResearch.Select(s => (DataCollectionFieldOfResearch)s).ToList());
            entity.SocioEconomicObjectives.MapFrom<DataCollectionSocioEconomicObjective, SocioEconomicObjective>(vm.SocioEconomicObjectives.Select(s => (DataCollectionSocioEconomicObjective) s).ToList());

            
            entity.Parties.MapFrom(vm);
            if (removeMissingParties)
            {
				// combining project party ids of all parties from the view model URDMS and non URDMS users
                var dataCollectionPartyIds = vm.UrdmsUsers
                    .Where(o => o.Id > 0)
                    .Select(o => o.Id)
                    .Union(vm.NonUrdmsUsers.Where(o => o.Id > 0)
                               .Select(o => o.Id))
                    .ToList();
                if (dataCollectionPartyIds.Count != 0)
                {
                    // Get a list of ProjectParty keys requiring deletion
                    var partyDeleteKeys = entity.Parties
                        .Where(o => o.Relationship != DataCollectionRelationshipType.Manager && o.Id > 0 && !dataCollectionPartyIds.Any(q => o.Id == q))
                        .Select(t => t.Id)
                        .ToList();

                    // Remove them
                    partyDeleteKeys.Do(o => entity.Parties.RemoveAll(p => p.Id == o));
                }
            }
            entity.Parties.ForEach(p => p.DataCollection = entity);

            return entity;
        }
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var form  = controllerContext.HttpContext.Request.Form;
            var model = new DataCollectionViewModelStep2();

            model.ExtractForCodes <DataCollectionFieldOfResearch>(form);
            model.ExtractSeoCodes <DataCollectionSocioEconomicObjective>(form);
            int collectionDescriptionId;

            if (int.TryParse(form["Id"], out collectionDescriptionId))
            {
                var collection = DataCollectionRepository.Get(collectionDescriptionId);

                model.Manager = collection.Parties
                                .Where(p => p.Party.UserId != null && p.Relationship == DataCollectionRelationshipType.Manager)
                                .Single().Party;
            }
            model.DeserializeUrdmsUsers <DataCollectionRelationshipType>(form);
            model.DeserializeNonUrdmsUsers <DataCollectionRelationshipType>(form);

            bindingContext.ModelMetadata.Model = model;

            return(base.BindModel(controllerContext, bindingContext));
        }
        public void Setup()
        {
            Builder<DataCollectionViewModelStep1>
                .CreateNew()
                .With(o => o.ProjectId = 1)
                .With(o => o.Title = DataCollectionTitle)
                .With(o => o.StartDate = new DateTime(2011, 8, 22))
                .With(o => o.EndDate = new DateTime(2012, 12, 12))
                .With(o => o.ResearchDataDescription = "This is a description")
                .Build();

            var manager = Builder<Party>.CreateNew().Build();

            var urdmsUserViewModel = Builder<UrdmsUserViewModel>
                .CreateListOfSize(2)
                .All()
                .With(o => o.Id = 0)
                .Build();

            var nonUrdmsUserViewModel = Builder<NonUrdmsUserViewModel>
                .CreateListOfSize(2)
                .TheFirst(1)
                .With(o => o.PartyId = 3)
                .TheNext(1)
                .With(o => o.PartyId = 4)
                .All()
                .With(o => o.Id = 0)
                .Build();

            var forList = new List<DataCollectionFieldOfResearch>
                              {
                                  new DataCollectionFieldOfResearch
                                      {Id = 1, FieldOfResearch = new FieldOfResearch {Id = "FOF", Name = "FOF"}},
                                  new DataCollectionFieldOfResearch
                                      {Id = 2, FieldOfResearch = new FieldOfResearch {Id = "POP", Name = "POP"}}
                              };


            var seoList = new List<DataCollectionSocioEconomicObjective>
                              {
                                  new DataCollectionSocioEconomicObjective
                                      {
                                          Id = 1,
                                          SocioEconomicObjective = new SocioEconomicObjective {Id = "SOP", Name = "SOP"}
                                      },
                                  new DataCollectionSocioEconomicObjective
                                      {
                                          Id = 2,
                                          SocioEconomicObjective = new SocioEconomicObjective {Id = "SOB", Name = "SOB"}
                                      }
                              };


            _dataCollectionViewModelStep2 = Builder<DataCollectionViewModelStep2>
                .CreateNew()
                .With(o => o.ProjectId = 1)
                .With(o => o.Keywords = ConstKeywordtestproject)
                .With(o => o.Manager = manager)
                .With(o => o.NonUrdmsUsers = nonUrdmsUserViewModel)
                .With(o => o.UrdmsUsers = urdmsUserViewModel)
                .With(o => o.FieldsOfResearch = forList.Select(c => (ClassificationBase)c).ToList())
                .With(o => o.SocioEconomicObjectives = seoList.Select(c => (ClassificationBase)c).ToList())
                .Build();
        }
        public void Update_DataCollection_for_step2()
        {
            var project = SetUpFullProjectWithAuthentication();
            var dataCollection = SetUpFullDataCollection(project);
            var values = new
                             {
                                 DataCollectionType = dataCollection.Type,
                                 ProjectTitle = project.Title,
                                 DataCollectionManager = dataCollection.Parties.Single(o => o.Relationship == DataCollectionRelationshipType.Manager)
                             };

            var forCode = new DataCollectionFieldOfResearch
                              {
                                  Code = Builder<FieldOfResearch>.CreateNew()
                                      .With(o => o.Id = Pick<string>.RandomItemFrom(new[] {"ABC", "DEF", "GHI"}))
                                      .And(o => o.Name = string.Format("{0} Name", o.Id))
                                      .Build()
                              };

            var seoCode = new DataCollectionSocioEconomicObjective
                              {
                                  Code = Builder<SocioEconomicObjective>.CreateNew()
                                      .With(o => o.Id = Pick<string>.RandomItemFrom(new[] {"XYZ", "RST", "UVW"}))
                                      .And(o => o.Name = string.Format("{0} Name", o.Id))
                                      .Build()
                              };

            var parties = Builder<DataCollectionParty>.CreateListOfSize(2)
                .All()
                    .With(o => o.Id = 0)
                    .And(o => o.Relationship = PickHelper.RandomEnumExcept(DataCollectionRelationshipType.Manager, DataCollectionRelationshipType.None))
                .TheFirst(1)
                    .With(o => o.Party = Builder<Party>.CreateNew()
                        .With(q => q.FirstName = Pick<string>.RandomItemFrom(new[] {"Neil", "Nathan", "Nelly"}))
                        .And(q => q.LastName = Pick<string>.RandomItemFrom(new[] {"Lee", "Lim", "Tan"}))
                        .And(q => q.UserId = string.Format("{0}{1}{2}",q.FirstName.Substring(0,3).ToUpper(), q.LastName.Substring(0,3).ToUpper(), Pick<int>.RandomItemFrom(Enumerable.Range(1,10).ToList())))
                        .And(q => q.Email = string.Format("{0}.{1}@yourdomain.edu.au",q.FirstName.ToLower(), q.LastName.ToLower()))
                        .And(q => q.Organisation = "")
                        .Build())
                .TheLast(1)
                    .With(o => o.Party = Builder<Party>.CreateNew()
                        .With(q => q.FirstName = Pick<string>.RandomItemFrom(new[]{"Samuel","Samantha","Steve"}))
                        .And(q => q.LastName = Pick<string>.RandomItemFrom(new[]{"Matt","Majors","Mellencamp"}))
                        .And(q => q.UserId = null)
                        .And(q => q.Email = null)
                        .And(q => q.Organisation = "Edinburgh University")
                        .Build())
                        
                .Do(o =>
                        {
                            o.Party.FullName = string.Format("{0} {1}", o.Party.FirstName, o.Party.LastName);
                        })
                .Build();

            var vm = new DataCollectionViewModelStep2
                         {
                             
                             FieldsOfResearch = dataCollection.FieldsOfResearch.Except(dataCollection.FieldsOfResearch.Take(1)).Union(new[]{forCode}).Cast<ClassificationBase>().ToList(),
                             SocioEconomicObjectives = dataCollection.SocioEconomicObjectives.Except(dataCollection.SocioEconomicObjectives.Take(1)).Union(new[]{seoCode}).Cast<ClassificationBase>().ToList(),
                             Manager = values.DataCollectionManager.Party,
                             Keywords = "exertus, scientia, scisco",
                             Id = dataCollection.Id,
                             ProjectId = dataCollection.ProjectId,
                             UrdmsUsers = parties.Take(1)
                                .Union(dataCollection.Parties
                                    .Where(o => o.Relationship != DataCollectionRelationshipType.Manager && 
                                        !string.IsNullOrWhiteSpace(o.Party.UserId))
                                    .Skip(1))
                                .Select(p => new UrdmsUserViewModel
                                    {
                                        UserId = p.Party.UserId,
                                        FullName = p.Party.FullName,
                                        Id = p.Id,
                                        PartyId = p.Party.Id,
                                        Relationship = (int) p.Relationship
                                    }).ToList(),
                             NonUrdmsUsers = parties.Skip(1)
                                .Union(dataCollection.Parties
                                    .Where(o => string.IsNullOrWhiteSpace(o.Party.UserId))
                                    .Skip(1))
                                .Select(p => new NonUrdmsUserViewModel
                                    {
                                        FullName = p.Party.FullName,
                                        Id = p.Id,
                                        PartyId = p.Party.Id,
                                        Organisation = p.Party.Organisation,
                                        Relationship = (int)p.Relationship

                                    }).ToList()


                         };

            var allParties = vm.UrdmsUsers
                .Select(o => new DataCollectionParty
                                 {
                                     Id = o.Id,
                                     Relationship = (DataCollectionRelationshipType) o.Relationship,
                                     Party = new Party
                                                 {
                                                     Id = o.PartyId,
                                                     UserId = o.UserId,
                                                     FullName = o.FullName,
                                                     Organisation = ""
                                                 }
                                 })
                .Union(vm.NonUrdmsUsers
                           .Select(o => new DataCollectionParty
                                            {
                                                Id = o.Id,
                                                Relationship = (DataCollectionRelationshipType)o.Relationship,
                                                Party = new Party
                                                            {
                                                                Id = o.PartyId,
                                                                FullName = o.FullName,
                                                                Organisation = o.Organisation
                                                            }
                                            }))
                .Union(new[]{values.DataCollectionManager})
                .ToList();

            _controller.WithCallTo(c => c.Step2(vm))
                .ShouldRedirectTo(_controller.GetType().GetMethod("Index", new[] { typeof(int)}));
            
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.CurrentState.State == DataCollectionStatus.Draft));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.Id == vm.Id));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.Type == values.DataCollectionType));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.FieldsOfResearch.All(q => vm.FieldsOfResearch.Any(r => r.Code.Id == q.Code.Id))));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.SocioEconomicObjectives.All(q => vm.SocioEconomicObjectives.Any(r => r.Code.Id == q.Code.Id))));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.Keywords == vm.Keywords));
            _dataCollectionRepository.Received().Save(Arg.Is<DataCollection>(o => o.Parties
                    .Any(q => allParties
                            .Any(r =>
                                r.Id == q.Id &&
                                r.Party.Id == q.Party.Id &&
                                r.Relationship == q.Relationship &&
                                r.Party.FullName == q.Party.FullName &&
                                r.Party.Organisation == q.Party.Organisation &&
                                (r.Party.UserId ?? "") == (q.Party.UserId ?? "")))));
           
        }
        public void Add_a_non_urdms_user_to_user_access_list()
        {
            _dataCollectionRepository.Get(Arg.Any<int>()).Returns(new DataCollection());
            var vm = new DataCollectionViewModelStep2 { NonUrdmsNewUserName = "******" };

			_controller.WithCallTo(x => x.AddNonUrdmsUser(vm)).ShouldRenderView("DataCollectionStep2").WithModel
                <DataCollectionViewModelStep2>(
                    m =>
                    {
                        Assert.That(m.NonUrdmsUsers, Is.Not.Null, "URDMS users does not exist");
                        Assert.That(m.NonUrdmsUsers.Count, Is.EqualTo(1), "URDMS users list does not match dmp list size");
                        Assert.That(m.NonUrdmsUsers[0].FullName, Is.EqualTo("Romesh"), "Non URDMS user's name not the same");
                        return true;
                    });

        }
        public void Add_a_user_to_user_access_list_for_a_valid_staff_id()
        {
            _dataCollectionRepository.Get(Arg.Any<int>()).Returns(new DataCollection());
            var vm = new DataCollectionViewModelStep2 { FindUserId = "GA37493" };
            _lookup.GetUser(vm.FindUserId)
                .Returns(new UrdmsUser { FullName = "Joe Research", EmailAddress = "*****@*****.**", CurtinId = vm.FindUserId });

			_controller.WithCallTo(x => x.AddUrdmsUser(vm)).ShouldRenderView("DataCollectionStep2").WithModel
                <DataCollectionViewModelStep2>(
                    m =>
                    {
                        Assert.That(m.UrdmsUsers, Is.Not.Null, "URDMS users does not exist");
                        Assert.That(m.UrdmsUsers.Count, Is.EqualTo(1), "URDMS users list does not match DMP list size");
                        Assert.That(m.UrdmsUsers[0].UserId, Is.EqualTo("GA37493"), "URDMS user's ID not the same");
                        return true;
                    });

        }
Ejemplo n.º 10
0
        public void Setup()
        {
            Builder <DataCollectionViewModelStep1>
            .CreateNew()
            .With(o => o.ProjectId = 1)
            .With(o => o.Title     = DataCollectionTitle)
            .With(o => o.StartDate = new DateTime(2011, 8, 22))
            .With(o => o.EndDate   = new DateTime(2012, 12, 12))
            .With(o => o.ResearchDataDescription = "This is a description")
            .Build();

            var manager = Builder <Party> .CreateNew().Build();

            var urdmsUserViewModel = Builder <UrdmsUserViewModel>
                                     .CreateListOfSize(2)
                                     .All()
                                     .With(o => o.Id = 0)
                                     .Build();

            var nonUrdmsUserViewModel = Builder <NonUrdmsUserViewModel>
                                        .CreateListOfSize(2)
                                        .TheFirst(1)
                                        .With(o => o.PartyId = 3)
                                        .TheNext(1)
                                        .With(o => o.PartyId = 4)
                                        .All()
                                        .With(o => o.Id = 0)
                                        .Build();

            var forList = new List <DataCollectionFieldOfResearch>
            {
                new DataCollectionFieldOfResearch
                {
                    Id = 1, FieldOfResearch = new FieldOfResearch {
                        Id = "FOF", Name = "FOF"
                    }
                },
                new DataCollectionFieldOfResearch
                {
                    Id = 2, FieldOfResearch = new FieldOfResearch {
                        Id = "POP", Name = "POP"
                    }
                }
            };


            var seoList = new List <DataCollectionSocioEconomicObjective>
            {
                new DataCollectionSocioEconomicObjective
                {
                    Id = 1,
                    SocioEconomicObjective = new SocioEconomicObjective {
                        Id = "SOP", Name = "SOP"
                    }
                },
                new DataCollectionSocioEconomicObjective
                {
                    Id = 2,
                    SocioEconomicObjective = new SocioEconomicObjective {
                        Id = "SOB", Name = "SOB"
                    }
                }
            };


            _dataCollectionViewModelStep2 = Builder <DataCollectionViewModelStep2>
                                            .CreateNew()
                                            .With(o => o.ProjectId               = 1)
                                            .With(o => o.Keywords                = ConstKeywordtestproject)
                                            .With(o => o.Manager                 = manager)
                                            .With(o => o.NonUrdmsUsers           = nonUrdmsUserViewModel)
                                            .With(o => o.UrdmsUsers              = urdmsUserViewModel)
                                            .With(o => o.FieldsOfResearch        = forList.Select(c => (ClassificationBase)c).ToList())
                                            .With(o => o.SocioEconomicObjectives = seoList.Select(c => (ClassificationBase)c).ToList())
                                            .Build();
        }