public FinanceSetupViewModel(Project project, int currentUserId) { ProjectName = project.ProjectName; ProjectId = project.ProjectId; HasEditAccess = project.HasMasterAccess(currentUserId, acl => acl.CanManageMoney); var potentialCashPaymentTypes = project.ProjectAcls.Where(acl => project.PaymentTypes.All(pt => pt.UserId != acl.UserId)) .Select(acl => new PaymentTypeListItemViewModel(acl)); var createdPaymentTypes = project.PaymentTypes.Select(p => new PaymentTypeListItemViewModel(p)); PaymentTypes = createdPaymentTypes.Union(potentialCashPaymentTypes) .OrderBy(li => !li.IsActive) .ThenBy(li => !li.IsDefault) .ThenBy(li => li.IsCash) .ThenBy(li => li.Name) .ToList(); Masters = project.GetMasterListViewModel(); FeeSettings = project.ProjectFeeSettings.Select(fs => new ProjectFeeSettingListItemViewModel(fs)).ToList(); CurrentUserToken = project.ProjectAcls.Single(acl => acl.UserId == currentUserId).Token.ToHexString(); GlobalSettings = new FinanceGlobalSettingsViewModel { ProjectId = ProjectId, WarnOnOverPayment = project.Details.FinanceWarnOnOverPayment }; }
public FinanceSetupViewModel(Project project, int currentUserId, bool isAdmin, User virtualPaymentsUser) { IsAdmin = isAdmin; ProjectName = project.ProjectName; ProjectId = project.ProjectId; HasEditAccess = project.HasMasterAccess(currentUserId, acl => acl.CanManageMoney); var potentialCashPaymentTypes = project.ProjectAcls .Where( acl => project.PaymentTypes .Where(pt => pt.TypeKind == PaymentTypeKind.Cash) .All(pt => pt.UserId != acl.UserId)) .Select(acl => new PaymentTypeListItemViewModel(acl)); var existedPaymentTypes = project.PaymentTypes .Where(pt => pt.TypeKind != PaymentTypeKind.Online) .Select(pt => new PaymentTypeListItemViewModel(pt)); var onlinePaymentTypes = new[] { project.PaymentTypes .Where(pt => pt.TypeKind == PaymentTypeKind.Online) .Select(pt => new PaymentTypeListItemViewModel(pt)) .DefaultIfEmpty(new PaymentTypeListItemViewModel(PaymentTypeKind.Online, virtualPaymentsUser, project.ProjectId)) .Single() }; PaymentTypes = onlinePaymentTypes.Union( existedPaymentTypes.Union(potentialCashPaymentTypes) .OrderBy(li => !li.IsActive) .ThenBy(li => !li.IsDefault) .ThenBy(li => li.TypeKind != PaymentTypeKindViewModel.Custom) .ThenBy(li => li.Name)) .ToList(); Masters = project.GetMasterListViewModel(); FeeSettings = project.ProjectFeeSettings .Select(fs => new ProjectFeeSettingListItemViewModel(fs)) .ToList(); CurrentUserToken = project.ProjectAcls.Single(acl => acl.UserId == currentUserId) .Token.ToHexString(); GlobalSettings = new FinanceGlobalSettingsViewModel { ProjectId = ProjectId, WarnOnOverPayment = project.Details.FinanceWarnOnOverPayment, PreferentialFeeEnabled = project.Details.PreferentialFeeEnabled, PreferentialFeeConditions = project.Details.PreferentialFeeConditions.Contents, }; }