コード例 #1
0
        public TenderingCriterion TranslateCriterion(TenderingCriterion tenderingCriterion)
        {
            if (tenderingCriterion.Name != null)
            {
                tenderingCriterion.Name = Translate(tenderingCriterion.Name);
            }

            if (tenderingCriterion.Description != null)
            {
                tenderingCriterion.Description = Translate(tenderingCriterion.Description);
            }

            if (tenderingCriterion.SubTenderingCriteria != null)
            {
                foreach (var subCriteria in tenderingCriterion.SubTenderingCriteria)
                {
                    TranslateCriterion(subCriteria);
                }
            }

            if (tenderingCriterion.TenderingCriterionPropertyGroups != null)
            {
                foreach (var propertyGroup in tenderingCriterion.TenderingCriterionPropertyGroups)
                {
                    TranslateCriterionPropertyGroup(propertyGroup);
                }
            }

            return(tenderingCriterion);
        }
コード例 #2
0
        public static IEnumerable <TenderingCriterionPropertyGroup> DescendantGroups(this TenderingCriterion criterion)
        {
            var ownGroups = criterion?.TenderingCriterionPropertyGroups;

            return(ownGroups.Union(criterion?.TenderingCriterionPropertyGroups?.SelectMany(g => g.DescendantGroups())
                                   .Union(criterion.SubTenderingCriteria?.SelectMany(g => g.DescendantGroups()) ??
                                          Enumerable.Empty <TenderingCriterionPropertyGroup>())));
        }
        private static void FinalizeCriterion(TenderingCriterion criterion, QualificationApplicationRequest request,
                                              string[] selectedLots)
        {
            var procurementHasLots = request.IsProcurementDividedIntoLots;

            criterion.TenderingCriterionPropertyGroups = FinalizeGroups(criterion.TenderingCriterionPropertyGroups).ToArray();

            IEnumerable <TenderingCriterionPropertyGroup> FinalizeGroups(IEnumerable <TenderingCriterionPropertyGroup> groups)
            {
                if (groups == null)
                {
                    yield break;
                }

                foreach (var group in groups)
                {
                    yield return(FinalizeGroup(@group));
                }
            }

            TenderingCriterionPropertyGroup FinalizeGroup(TenderingCriterionPropertyGroup propertyGroup)
            {
                if (propertyGroup == null)
                {
                    throw new ArgumentNullException(nameof(propertyGroup));
                }

                if (propertyGroup?.TenderingCriterionProperties?.Any() ?? false)
                {
                    propertyGroup.TenderingCriterionProperties =
                        FilterAndFinalizeProperties(propertyGroup)
                        .ToArray();
                }
                else
                {
                    // Set empty property to conform to espd schema
                    propertyGroup.TenderingCriterionProperties = new[]
                    {
                        CriterionHelper.EmptyCaptionProperty
                    };
                }

                if (propertyGroup.SubsidiaryTenderingCriterionPropertyGroups != null)
                {
                    propertyGroup.SubsidiaryTenderingCriterionPropertyGroups =
                        FinalizeGroups(propertyGroup?.SubsidiaryTenderingCriterionPropertyGroups).ToArray();
                }

                return(propertyGroup);
            }

            IEnumerable <TenderingCriterionProperty> FilterAndFinalizeProperties(
                TenderingCriterionPropertyGroup group)
            {
                foreach (var property in group.TenderingCriterionProperties)
                {
                    if (IsLotIdentifier(property) && IsRequirementProperty(property))
                    {
                        foreach (var lotProperty in SetRequirementLotIdentifierValue(property))
                        {
                            yield return(lotProperty);
                        }
                    }
                    else
                    {
                        // Set default value to Contributions threshold value as per Comission suggestion
                        if (group.ID.Value == ContributionThresholdGroupId.ToString())
                        {
                            if (property.ValueDataTypeCode.Equals(ResponseDataTypeCode.Amount))
                            {
                                // Set default threshold to 0
                                property.ExpectedAmount = new AmountType {
                                    Value = 0, CurrencyID = "EUR"
                                };
                            }
                            if (property.ValueDataTypeCode.Equals(ResponseDataTypeCode.Description))
                            {
                                // Set default threshold to 0
                                property.ExpectedDescription = string.Empty;
                            }
                        }

                        // Generate new if for property
                        property.ID = EuComGrowId.Random();
                        yield return(property);
                    }
                }

                IEnumerable <TenderingCriterionProperty> SetRequirementLotIdentifierValue(TenderingCriterionProperty property)
                {
                    if (procurementHasLots)
                    {
                        // Duplicate requirement lot property for each lot
                        foreach (var projectLot in selectedLots)
                        {
                            yield return(new TenderingCriterionProperty()
                            {
                                _cardinality = property._cardinality,
                                ID = EuComGrowId.Random(),
                                Name = property.Name,
                                Description = property.Description,
                                ExpectedID = new EuComGrowId(projectLot),
                                TypeCode = CriterionElementType.Requirement,
                                ValueDataTypeCode = ResponseDataTypeCode.LotIdentifier
                            });
                        }
                    }
                    else
                    {
                        property.ID         = EuComGrowId.Random();
                        property.ExpectedID = new EuComGrowId(0.ToString());
                        yield return(property);
                    }
                }

                bool IsLotIdentifier(TenderingCriterionProperty property)
                {
                    return(property.ValueDataTypeCode.Value == ResponseDataTypeCode.LotIdentifier.Value);
                }

                bool IsRequirementProperty(TenderingCriterionProperty property)
                {
                    return(property?.TypeCode?.Equals(CriterionElementType.Requirement) ?? false);
                }
            }
        }
コード例 #4
0
 public static IEnumerable <TenderingCriterionProperty> DescendantProperties(this TenderingCriterion criterion)
 {
     return(criterion?.TenderingCriterionPropertyGroups.SelectMany(g => g.DescendantProperties())
            .Union(criterion.SubTenderingCriteria?.SelectMany(g => g.DescendantProperties()) ??
                   Enumerable.Empty <TenderingCriterionProperty>()));
 }