Esempio n. 1
0
        /// <summary>
        /// Will add a resource by type which will be selected via a dialog
        /// </summary>
        private async Task AddResource(object parameters)
        {
            var typeDialog = new TypeSelectorViewModel(ResourceServiceModel, SelectedResource);
            await DialogManager.ShowDialogAsync(typeDialog);

            if (!typeDialog.Result)
            {
                return;
            }

            IsBusy = true;

            var detailsVm = DetailsFactory.Create(typeDialog.SelectedType.Name);

            await LoadDetails(async delegate
            {
                await detailsVm.Load(typeDialog.ResourcePrototype);
            });

            // Add selected resource as parent reference
            if (SelectedResource != null)
            {
                var parentReference = detailsVm.EditableObject.References.First(r => r.Model.Name == "Parent");
                parentReference.Targets.Add(SelectedResource.Resource);
            }

            ActivateItem(detailsVm);
            EnterEdit();

            IsBusy = false;
        }
Esempio n. 2
0
        private async Task ActivateDetails(string productType, long detailsId)
        {
            //Select view model for the right resource type
            var detailsVm = DetailsFactory.Create(productType);

            await LoadDetails(() => detailsVm.Load(detailsId));

            ActivateItem(detailsVm);

            // Don't know why but validate all commands again
            CommandManager.InvalidateRequerySuggested();
        }
        ///
        protected override void OnInitialize()
        {
            base.OnInitialize();

            // Show busy indicator on master because we are not sure if the master is currently loaded
            IsBusy = true;

            Logger = Logger.GetChild(typeof(TDetailsType).Name, GetType());

            // Create empty details here
            EmptyDetails = DetailsFactory.Create(DetailsConstants.EmptyType) as TEmptyDetails;
            ShowEmpty();
        }
        public override async Task OnMasterItemChanged(object sender, RoutedPropertyChangedEventArgs <object> args)
        {
            var selectedRecipe = (RecipeViewModel)args.NewValue;

            if (selectedRecipe == null)
            {
                ShowEmpty();
                return;
            }

            var detailsVm = DetailsFactory.Create(selectedRecipe.Type);

            await LoadDetails(() => detailsVm.Load(selectedRecipe.Id, _workplans));

            ActivateItem(detailsVm);
        }
Esempio n. 5
0
        /// <summary>
        /// Select <see cref="ResourceTreeItemViewModel"/> and load the details
        /// </summary>
        private async Task SelectResource(ResourceTreeItemViewModel treeItem)
        {
            SelectedResource = treeItem;

            if (treeItem == null)
            {
                ShowEmpty();
                return;
            }

            //Select view model for the right resource type
            var detailsVm = DetailsFactory.Create(treeItem.Resource.TypeName);

            await LoadDetails(() => detailsVm.Load(treeItem.Resource.Id));

            ActivateItem(detailsVm);
        }
        /// <inheritdoc />
        public override void ActivateItem(IScreen item)
        {
            if (item == ActiveItem)
            {
                return;
            }

            if (ActiveItem != null)
            {
                // TODO: ActiveItem is null after Deactivate
                base.DeactivateItem(ActiveItem, true);
                var detailItem = (TDetailsType)ActiveItem;
                DetailsFactory.Destroy(detailItem);
            }

            base.ActivateItem(item);
            NotifyOfPropertyChange(() => CurrentDetails);
        }
Esempio n. 7
0
        public void DetailsFactory_ContractWithNull(int pin, string expectedDetails)
        {
            // Arrange
            var rules = new List <Func <Employee, string> >
            {
                DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 3, 7 }, "divided_by_3_and_7"),
                DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 3 }, "divided_by_3"),
                DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 7 }, "divided_by_7")
            };
            var detailsFactory = DetailsFactory.Create(rules);
            var employee       = new Employee {
                Pin = pin
            };

            // Act
            var details = detailsFactory.GetDetails(employee);

            // Assert
            Assert.AreEqual(expectedDetails, details);
        }
Esempio n. 8
0
        public void EnumerateEmployeesWithNonEmptyDetails_Algorithm()
        {
            int count_total = 10;

            // Arrange
            var employees = Enumerable.Range(1, count_total).Select(i => new Employee {
                Pin = i
            }).ToList();
            var rules = new List <Func <Employee, string> >
            {
                DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 2 }, "divided_by_2")
            };
            var detailsFactory = DetailsFactory.Create(rules);

            // Act
            var employeesWithDetails = EmployeeWithDetails.EnumerateEmployeesWithNonEmptyDetails(employees, detailsFactory).ToList();

            // Assert
            Assert.AreEqual(count_total, employees.Count);
            Assert.AreEqual(count_total / 2, employeesWithDetails.Count);
        }