/// <summary>
        /// Section IV: Procedure Information
        /// </summary>
        /// <returns>The PROCEDURES_ICAR XElement</returns>
        private XElement ProcedureInformation()
        {
            var previousOjs = _notice.TenderingInformation.Defence?.PreviousPriorInformationNoticeOjsNumber ?? new OjsNumber();

            if (_notice.Type == NoticeType.DefenceContractAward)
            {
                previousOjs = _notice.TenderingInformation.Defence.PreviousContractNoticeOjsNumber;
            }
            if (_notice.Type == NoticeType.ExAnte)
            {
                previousOjs = _notice.TenderingInformation.Defence.PreviousExAnteOjsNumber;
            }
            return(TedHelpers.Element("PROCEDURES_ICAR",
                                      TedHelpers.Element("TYPE_OF_PROCEDURE_CORRIGENDUM",
                                                         TedHelpers.ElementWithAttribute("TYPE_OF_PROCEDURE_DETAIL_FOR_ICAR", "VALUE", ProcedureType())),
                                      TedHelpers.Element("ADMINISTRATIVE_INFORMATION",
                                                         TedHelpers.PElement("FILE_REFERENCE_NUMBER", _notice.Project?.ReferenceNumber),
                                                         TedHelpers.Element("SIMAP_ESENDER_NOTICE_REFERENCE",
                                                                            TedHelpers.ElementWithAttribute("SIMAP_ESENDER", "VALUE", "OJS_ESENDER"),
                                                                            TedHelpers.ElementWithAttribute("LOGIN", "CLASS", "B",
                                                                                                            TedHelpers.Element("ESENDER_LOGIN", _eSenderLogin)),
                                                                            TedHelpers.Element("NO_DOC_EXT", _notice.NoticeNumber)),
                                                         TedHelpers.Element("NOTICE_PUBLICATION",
                                                                            TedHelpers.Element("NOTICE_NUMBER_OJ", previousOjs.Number),
                                                                            TedHelpers.DateElement("DATE_OJ", previousOjs.Date)),
                                                         TedHelpers.DateElement("ORIGINAL_DISPATCH_DATE", _parent.TedPublishRequestSentDate != DateTime.MinValue ? _parent.TedPublishRequestSentDate :  null))
                                      //TODO (TuomasT): Allow setting original date manually
                                      ));
        }
        /// <summary>
        /// Section II: Object
        /// </summary>
        /// <returns>OBJECT_CONTRACT XElement</returns>
        private XElement ObjectContract()
        {
            var contract = TedHelpers.Element("OBJECT_ICAR",
                                              TedHelpers.Element("DESCRIPTION_ICAR",
                                                                 TedHelpers.PElement("TITLE_CONTRACT", _notice.Project.Title),
                                                                 TedHelpers.PElement("SHORT_DESCRIPTION_CONTRACT", _notice.ProcurementObject.ShortDescription),
                                                                 TedHelpers.Element("CPV",
                                                                                    TedHelpers.CpvCodeElement("CPV_MAIN", new CpvCode[] { _notice.ProcurementObject.MainCpvCode }),
                                                                                    TedHelpers.CpvCodeElement("CPV_ADDITIONAL", _notice.ProcurementObject.Defence.AdditionalCpvCodes))));

            return(contract);
        }
        private static Tuple <List <XElement>, ChangeType> NewValue(Change change)
        {
            List <XElement> newValue;
            ChangeType      type;

            if (change.NewText != null && change.NewText.Length > 0 && !string.IsNullOrEmpty(change.NewText[0]))
            {
                type     = ChangeType.Text;
                newValue = new List <XElement> {
                    TedHelpers.PElement("TEXT", change.NewText)
                };
            }
            else if (change.NewNutsCodes != null && change.NewNutsCodes.Length > 0 && !string.IsNullOrEmpty(change.NewNutsCodes[0]))
            {
                type     = ChangeType.Nuts;
                newValue = new List <XElement> {
                    TedHelpers.PElement("NUTS", change.NewText)
                };
            }
            else if (change.NewDate != null && change.NewDate != DateTime.MinValue)
            {
                type     = ChangeType.Date;
                newValue = new List <XElement> {
                    TedHelpers.DateTimeElement("DATE_TIME", change.NewDate)
                };
            }
            else if (change.NewMainCpvCode != null && !string.IsNullOrEmpty(change.NewMainCpvCode.Code))
            {
                type     = ChangeType.Cpv;
                newValue = new List <XElement> {
                    TedHelpers.Element("CPV_MAIN",
                                       TedHelpers.ElementWithAttribute("CPV_CODE", "CODE", change.NewMainCpvCode.Code),
                                       change.NewMainCpvCode.VocCodes?.Select(x => TedHelpers.ElementWithAttribute("CPV_SUPPLEMENTARY_CODE", "CODE", x.Code)))
                };
            }
            else if (change.NewAdditionalCpvCodes != null && change.NewAdditionalCpvCodes.Count > 0)
            {
                type     = ChangeType.Cpv;
                newValue = change.NewAdditionalCpvCodes.Select(x =>
                                                               TedHelpers.Element("CPV_ADDITIONAL",
                                                                                  TedHelpers.ElementWithAttribute("CPV_CODE", "CODE", x.Code),
                                                                                  x.VocCodes?.Select(y => TedHelpers.ElementWithAttribute("CPV_SUPPLEMENTARY_CODE", "CODE", y.Code)))
                                                               ).ToList();
            }
            else
            {
                type     = ChangeType.Undefined;
                newValue = null;
            }

            return(new Tuple <List <XElement>, ChangeType>(newValue, type));
        }
Пример #4
0
        private IEnumerable <XElement> AnnexD3Defence()
        {
            var annex = _notice?.Annexes?.D3 ?? throw new NullReferenceException("Annex D3 not set!");

            // AD3.1.1-2
            if (annex.NoTenders)
            {
                string value;
                switch (annex.ProcedureType)
                {
                case AnnexProcedureType.DProcNegotiatedPriorCallCompetition:
                    value = "NEGOTIATED_PROCEDURE_COMPETITION";
                    break;

                case AnnexProcedureType.DProcRestricted:
                    value = "RESTRICTED_PROCEDURE";
                    break;

                case AnnexProcedureType.DProcCompetitiveDialogue:
                    value = "COMPETITIVE_DIALOGUE";
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                yield return(TedHelpers.Element("NO_OPEN_RESTRICTED",
                                                new XAttribute("VALUE", value)));
            }

            if (annex.AllTenders)
            {
                yield return(TedHelpers.Element("ONLY_IRREGULAR_INACCEPTABLE_TENDERERS"));
            }
            else
            {
                yield return(TedHelpers.Element("NO_ONLY_IRREGULAR_INACCEPTABLE_TENDERERS"));
            }

            if (_notice.ProcedureInformation.ProcedureType == ProcedureType.AwardWoPriorPubD1)
            {
                yield return(TedHelpers.Element("JUSTIFICATION_CHOICE_NEGOCIATED_PROCEDURE",
                                                JUSTIFICATION_C(annex)));
            }
            else if (_notice.ProcedureInformation.ProcedureType == ProcedureType.AwardWoPriorPubD1Other)
            {
                yield return(TedHelpers.Element("OTHER_JUSTIFICATION",
                                                OTHER_JUSTIFICATION(annex)));
            }

            yield return(TedHelpers.PElement("REASON_CONTRACT_LAWFUL", annex.Justification));
        }
 /// <summary>
 /// Section IV: COMPLEMENTARY INFORMATION
 /// </summary>
 /// <returns>The COMPLEMENTARY_ICAR XElement</returns>
 private XElement ComplementaryInformation()
 {
     return(TedHelpers.Element("COMPLEMENTARY_ICAR",
                               TedHelpers.Element("NOTICE_INVOLVES_ICAR",
                                                  TedHelpers.Element("CORRECTION_ADDITIONAL_INFO",
                                                                     TedHelpers.Element("CORRECTION"),
                                                                     TedHelpers.Element("INFORMATION_CORRECTED_ADDED",
                                                                                        TedHelpers.Element("MODIFICATION_ORIGINAL_PUBLICATION_TED",
                                                                                                           TedHelpers.Element("MODIFICATION_ORIGINAL")),
                                                                                        TedHelpers.Element("ORIGINAL_NOTICE_CORRESPONDING_TENDER",
                                                                                                           TedHelpers.Element("ORIGINAL_NOTICE",
                                                                                                                              ChangesToXml(new DefenceChangesFactory(_notice, _parent, _translationProvider).Changes()),
                                                                                                                              TedHelpers.Element("ADDR_CORR",
                                                                                                                                                 TedHelpers.Element("WHERE", $"I.1"),
                                                                                                                                                 TedHelpers.Element("MODIFIED_ADDRESS",
                                                                                                                                                                    TedHelpers.INC_01("CA_CE_CONCESSIONAIRE_PROFILE", _notice.Project.Organisation, _notice.ContactPerson),
                                                                                                                                                                    TedHelpers.Element("MODIFIED_INTERNET",
                                                                                                                                                                                       TedHelpers.Element("URL_INFORMATION", _notice.CommunicationInformation.ElectronicAccess),
                                                                                                                                                                                       TedHelpers.Element("URL_PARTICIPATE", _notice.CommunicationInformation.ElectronicAddressToSendTenders))))))))),
                               TedHelpers.PElement("OTHER_ADDITIONAL_INFO", _notice.CorrigendumAdditionalInformation),
                               TedHelpers.DateElement("NOTICE_DISPATCH_DATE", DateTime.Now)));
 }