var Modules;
(function (Modules) {
    /**
     * Class which holds all the functions for the ProductDetail Page
     */
    class WordWriter {
        /**
         * Generates the word file for the document
         */
        static CreateWord(bFormular = false) {
            var template = null;
            if (+Classes.Decision.Entscheidungstyp === Entscheidungstyp.Erstbeschaffung) {
                template = Classes.TemplateContainer.FormularA;
            }
            else if (+Classes.Decision.Entscheidungstyp === Entscheidungstyp.Nachtrag) {
                template = Classes.TemplateContainer.FormularAB;
            }
            else if (+Classes.Decision.Entscheidungstyp === Entscheidungstyp.Zuschlagsentscheid) {
                template = Classes.TemplateContainer.FormularB;
            }
            if (bFormular === true) {
                template = Classes.TemplateContainer.FormularB;
            }
            // for alle formulars needed
            template = template.replace(/{projekt}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.Projekt));
            template = template.replace(/{projekt_nr}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ProjektNr));
            template = template.replace("{gegenstand}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Gegenstand));
            if (Classes.Decision.EinzelvertragReferenz !== "") {
                template = template.replace(/{verfahrensart}/g, VerfahrensartDisplay[Classes.Decision.Verfahrensart] + " | Referenz: " + WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzelvertragReferenz));
            }
            else {
                template = template.replace(/{verfahrensart}/g, VerfahrensartDisplay[Classes.Decision.Verfahrensart]);
            }
            template = template.replace(/{verfahrensart_a_titel}/g, VerfahrensartTitleDisplay[Classes.Decision.Verfahrensart]);
            template = template.replace(/{vertragstyp}/g, VertragstypDisplay[Classes.Decision.Vertragstyp]);
            template = template.replace(/{beschaffungsart}/g, ArtDerBeschaffungDisplay[Classes.Decision.ArtDerBeschaffung]);
            template = template.replace(/{projektleiter_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ProjektLeiterName));
            template = template.replace(/{projektleiter_mail}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ProjektLeiterEmail));
            template = template.replace(/{bereichsleiter_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.BereichsLeiterName));
            template = template.replace(/{bereichsleiter_mail}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.BereichsLeiterEmail));
            template = template.replace(/{bl_support_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.BereichsleiterSupportName));
            template = template.replace(/{bl_support_mail}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.BereichsleiterSupportEmail));
            template = template.replace(/{icp_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ICPName));
            template = template.replace(/{ext_partner_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ExtBeauftragteName));
            template = template.replace(/{ext_partner_mail}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.ExtBeauftragteEmail));
            template = template.replace(/{ext_partner_fkt}/g, ExtPartnerFunktionDisplay[Classes.Decision.ExtBeauftragteFunktion]);
            template = template.replace(/{verteiler}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.VerteilerKopieAn));
            var weitereExterneBeauftragte = "";
            Classes.Decision.ExterneBeauftragteWeitere.forEach((element) => {
                var innerTemplate = Classes.TemplateContainer.ExterneBeauftragteTemplate;
                innerTemplate = innerTemplate.replace(/new_name_here/g, WordWriter.ReplaceSpecialCharacters(element.PersonName));
                innerTemplate = innerTemplate.replace(/new_mail_here/g, WordWriter.ReplaceSpecialCharacters(element.PersonEmail));
                innerTemplate = innerTemplate.replace(/new_function_here/g, ExtPartnerFunktionDisplay[element.PersonFunktion]);
                weitereExterneBeauftragte += innerTemplate;
            });
            template = template.replace(/<!--new_external_agent-->/g, weitereExterneBeauftragte);
            var begruendungsText = "";
            // if there is a Begruendung show this else show on purpose of the Verfahrensart
            if (Classes.Decision.Begründung !== undefined) {
                begruendungsText = BegründungText[Classes.Decision.Begründung];
            }
            else {
                if (Classes.Decision.GrundAlternateText !== undefined) {
                    begruendungsText = Classes.Decision.GrundAlternateText;
                }
                else {
                    begruendungsText = "Art. 10 Abs. 3 BöB – nicht im Anwendungsbereich des BöB";
                }
            }
            //          if (Classes.Decision.HasBagatelle === true) {
            //              begruendungsText += " / Bagatellklausel";
            //          }
            if (Classes.Decision.HasBagatelle === true && Classes.Decision.HasToGrund === true) {
                begruendungsText += " i. V. m. Art. 16 Abs. 4 BöB";
            }
            // replace Begruendung on the word document
            template = template.replace(/{begruendung}/g, WordWriter.ReplaceSpecialCharacters(begruendungsText));
            // add Version to footer on the word document
            const versionsInfo = "3.4.9";
            template = template.replace(/{versionsinfo}/g, WordWriter.ReplaceSpecialCharacters(versionsInfo));
            template = template.replace("{begruendung_nachtrag_1}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.ZusaetzlicheLeistungenNotwendig));
            template = template.replace("{begruendung_nachtrag_2}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.WarumFolgebeschaffungNoetig));
            template = template.replace("{begruendung_nachtrag_3}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.WarumZusaetzlicheArbeiten));
            template = template.replace("{begruendung_nachtrag_4}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.WasWaerenFolgen));
            // A-Formular
            template = template.replace(/{vv_name}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.VertragsverantwortlicherName));
            template = template.replace(/{vv_mail}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.VertragsverantwortlicherEmail));
            if (+Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Bauleistung) {
                template = template.replace("{titel_gesamtprojekt}", "Gesamtsumme aller Bauleistungen (exkl. MWSt):");
            }
            else if (+Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Dienstleistung || +Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Lieferung) {
                template = template.replace("{titel_gesamtprojekt}", "Auftragswert Gesamtprojekt (exkl. MWSt):");
            }
            template = template.replace("{vertragsbeginn}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Vertragsbeginn));
            template = template.replace("{vertragsende}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Vertragsende));
            if (+Classes.Decision.Vertragstyp === Vertragstyp.IK) {
                template = template.replace("{beschaffungskompetenz}", "Delegation");
            }
            else {
                template = template.replace("{beschaffungskompetenz}", "zentrale Beschaffungsstelle");
            }
            template = template.replace("{beschaffungskategorie}", BeschaffungskategorieDisplay[Classes.Decision.Beschaffungskategorie]);
            template = template.replace(/{genehmiger}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.GenehmigerName));
            if (Classes.Decision.Zahlungsbedingungen == 0) {
                template = template.replace(/{zahlungsbedingungen}/g, "30 Tage");
            }
            else if (Classes.Decision.Zahlungsbedingungen == 1) {
                template = template.replace(/{zahlungsbedingungen}/g, "45 Tage");
            }
            else if (Classes.Decision.Zahlungsbedingungen == 2) {
                template = template.replace(/{zahlungsbedingungen}/g, WordWriter.ReplaceSpecialCharacters(Classes.Decision.AndereZahlungsbedingung) + " Tage");
            }
            else {
                template = template.replace(/{zahlungsbedingungen}/g, "");
            }
            if (Classes.Decision.ProjektCheckbox === true) {
                template = template.replace("<chk_a_projekt_state>", "1");
                template = template.replace("<chk_a_projekt_look>", "☒");
            }
            else {
                template = template.replace("<chk_a_projekt_state>", "0");
                template = template.replace("<chk_a_projekt_look>", "☐");
            }
            if (Classes.Decision.RealCheckbox === true) {
                template = template.replace("<chk_a_real_state>", "1");
                template = template.replace("<chk_a_real_look>", "☒");
            }
            else {
                template = template.replace("<chk_a_real_state>", "0");
                template = template.replace("<chk_a_real_look>", "☐");
            }
            if (Classes.Decision.AuftragswertAusbauUnterhalt !== undefined) {
                template = template.replace("{fk_a_u}", Classes.Decision.AuftragswertAusbauUnterhalt.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AuftragswertKapazitaetserweiterung !== undefined) {
                template = template.replace("{fk_ka_erw}", Classes.Decision.AuftragswertKapazitaetserweiterung.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AuftragswertDritte !== undefined) {
                template = template.replace("{fk_dritte}", Classes.Decision.AuftragswertDritte.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AuftragswertBetrieb !== undefined) {
                template = template.replace("{fk_betrieb}", Classes.Decision.AuftragswertBetrieb.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AuftragswertTotal !== undefined) {
                template = template.replace("{fk_total}", Classes.Decision.AuftragswertTotal.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AuftragswertGesamt !== undefined) {
                template = template.replace("{gesamtprojekt}", Classes.Decision.AuftragswertGesamt.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.BisherigeBagatellBeschaffung !== undefined) {
                template = template.replace("{bagatellklausel_bisher}", Classes.Decision.BisherigeBagatellBeschaffung.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            else {
                template = template.replace("{bagatellklausel_bisher}", " ");
            }
            if (Classes.Decision.Vorbefassung === true) {
                template = template.replace("<chk_vorbefassung_ja_state>", "1");
                template = template.replace("<chk_vorbefassung_nein_state>", "0");
                template = template.replace("<chk_vorbefassung_ja_look>", "☒");
                template = template.replace("<chk_vorbefassung_nein_look>", "☐");
            }
            else {
                template = template.replace("<chk_vorbefassung_ja_state>", "0");
                template = template.replace("<chk_vorbefassung_nein_state>", "1");
                template = template.replace("<chk_vorbefassung_ja_look>", "☐");
                template = template.replace("<chk_vorbefassung_nein_look>", "☒");
            }
            // Massnahme Checkboxes
            if (Classes.Decision.MassnahmeAusschluss === true) {
                template = template.replace("<chk_vorbefassung_ausschluss_state>", "1");
                template = template.replace("<chk_vorbefassung_ausschluss_look>", "☒");
            }
            else {
                template = template.replace("<chk_vorbefassung_ausschluss_state>", "0");
                template = template.replace("<chk_vorbefassung_ausschluss_look>", "☐");
            }
            if (Classes.Decision.MassnahmeFristverlaengerung === true) {
                template = template.replace("<chk_vorbefassung_fristverlaengerung_state>", "1");
                template = template.replace("<chk_vorbefassung_fristverlaengerung_look>", "☒");
            }
            else {
                template = template.replace("<chk_vorbefassung_fristverlaengerung_state>", "0");
                template = template.replace("<chk_vorbefassung_fristverlaengerung_look>", "☐");
            }
            if (Classes.Decision.MassnahmeUnterlagen === true) {
                template = template.replace("<chk_vorbefassung_uavg_state>", "1");
                template = template.replace("<chk_vorbefassung_uavg_look>", "☒");
            }
            else {
                template = template.replace("<chk_vorbefassung_uavg_state>", "0");
                template = template.replace("<chk_vorbefassung_uavg_look>", "☐");
            }
            if (Classes.Decision.EinzuladendeAnbieterInhalt != undefined) {
                template = template.replace("{anbieter_vergabe}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzuladendeAnbieterInhalt));
            }
            else {
                template = template.replace("{anbieter_vergabe}", "");
            }
            if (Classes.Decision.EinzuladendeAnbieterMail != undefined) {
                template = template.replace("{anbieter_mail}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzuladendeAnbieterMail));
            }
            else {
                template = template.replace("{anbieter_mail}", "");
            }
            if ((+Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Bauleistung || +Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Dienstleistung || +Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Lieferung) && +Classes.Decision.Entscheidungstyp === Entscheidungstyp.Erstbeschaffung) {
                let weitereEinzuladendeAnbieter = "";
                if (bFormular === true) {
                    Classes.Decision.EinzuladendeAnbieterWeitere.forEach((element) => {
                        var innerTemplate = Classes.TemplateContainer.EinzuladendeAnbieterBTemplate;
                        innerTemplate = innerTemplate.replace(/new_provider_b_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterInhalt));
                        innerTemplate = innerTemplate.replace(/new_provider_mail_b_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterMail));
                        weitereEinzuladendeAnbieter += innerTemplate;
                    });
                }
                else {
                    Classes.Decision.EinzuladendeAnbieterWeitere.forEach((element) => {
                        var innerTemplate = Classes.TemplateContainer.EinzuladendeAnbieterTemplate;
                        innerTemplate = innerTemplate.replace(/new_provider_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterInhalt));
                        weitereEinzuladendeAnbieter += innerTemplate;
                    });
                }
                template = template.replace("<!--new_provider_placing-->", weitereEinzuladendeAnbieter);
                if (Classes.Decision.hasEvaluationsteam === true) {
                    var evaluationsteam = Classes.TemplateContainer.EvaluationsteamTemplate;
                    evaluationsteam = evaluationsteam.replace("{evaluationsteam}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Evaluationsteam));
                    template = template.replace(/<!--evaluationsteam-->/g, evaluationsteam);
                }
            }
            else if ((+Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Bauleistung || +Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Dienstleistung || +Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Lieferung) && +Classes.Decision.Entscheidungstyp === Entscheidungstyp.Nachtrag) {
                // vergabe an
                let weitereEinzuladendeAnbieter = "";
                if (bFormular === true) {
                    Classes.Decision.EinzuladendeAnbieterWeitere.forEach((element) => {
                        var innerTemplate = Classes.TemplateContainer.EinzuladendeAnbieterBTemplate;
                        innerTemplate = innerTemplate.replace(/new_provider_b_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterInhalt));
                        innerTemplate = innerTemplate.replace(/new_provider_mail_b_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterMail));
                        weitereEinzuladendeAnbieter += innerTemplate;
                    });
                }
                else {
                    Classes.Decision.EinzuladendeAnbieterWeitere.forEach((element) => {
                        var innerTemplate = Classes.TemplateContainer.EinzuladendeAnbieterTemplate;
                        innerTemplate = innerTemplate.replace(/new_provider_placing_here/g, WordWriter.ReplaceSpecialCharacters(element.AnbieterInhalt));
                        weitereEinzuladendeAnbieter += innerTemplate;
                    });
                }
                template = template.replace("<!--new_provider_placing-->", weitereEinzuladendeAnbieter);
            }
            /*template = template.replace("{einzuladende_anbieter_z2}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzuladendeAnbieter2));
            template = template.replace("{einzuladende_anbieter_z3}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzuladendeAnbieter3));
            template = template.replace("{einzuladende_anbieter_z4}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EinzuladendeAnbieter4));*/
            if (+Classes.Decision.ArtDerBeschaffung === ArtDerBeschaffung.Bauleistung) {
                var bagatellBetrag = Classes.Decision.AuftragswertTotal + Classes.Decision.BisherigeBagatellBeschaffung;
                if (Classes.Decision.SelectBagatellIfPossible === false || !(+Classes.Decision.Verfahrensart === Verfahrensart.FreihändigUnterSchwellenwert && bagatellBetrag < 2000000 && bagatellBetrag < Classes.Decision.AuftragswertGesamt / 5)) {
                    bagatellBetrag = Classes.Decision.BisherigeBagatellBeschaffung;
                }
                if (+Classes.Decision.Verfahrensart === Verfahrensart.InHouseInState) {
                    template = template.replace("{bagatellklausel_prozent}", "Bei InHouse / Instate / Kostenteiler Kanton oder Gemeinde nicht möglich");
                }
                else {
                    let bagatellPercent = bagatellBetrag / (Classes.Decision.AuftragswertGesamt / 100);
                    let bagatellText = bagatellPercent.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'");
                    bagatellText += " %";
                    template = template.replace("{bagatellklausel_prozent}", bagatellText);
                }
            }
            else {
                template = template.replace("{bagatellklausel_prozent}", "Bei Dienstleistungen/Planerleistung nicht möglich");
            }
            // AB-Formular
            template = template.replace("{verfahrensart_ab_titel}", VerfahrensartTitleABDisplay[Classes.Decision.Verfahrensart]);
            template = template.replace("{projekt}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Projekt));
            template = template.replace("{projekt_nr}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.ProjektNr));
            //template = template.replace("{vergabe_an}", Classes.Decision.VergabeAn);
            template = template.replace(/{verfahrensart_u_b}/g, VerfahrensartDisplay[Classes.Decision.UrspruenglicheVerfahrensart]);
            //if (Classes.Decision.MengenAenderung === true) {
            //    template = template.replace("<chk_mengenaenderung_state>", "1");
            //    template = template.replace("<chk_mengenaenderung_look>", "☒");
            //} else {
            //    template = template.replace("<chk_mengenaenderung_state>", "0");
            //    template = template.replace("<chk_mengenaenderung_look>", "☐");
            //}
            //if (Classes.Decision.BestellungsAenderung === true) {
            //    template = template.replace("<chk_bestellungsaenderung_state>", "1");
            //    template = template.replace("<chk_bestellungsaenderung_look>", "☒");
            //} else {
            //    template = template.replace("<chk_bestellungsaenderung_state>", "0");
            //    template = template.replace("<chk_bestellungsaenderung_look>", "☐");
            //}
            template = template.replace("{beschaffungskategorienachtrag}", BeschaffungskategorieDisplay[Classes.Decision.BeschaffungskategorieNachtrag]);
            if (Classes.Decision.SIMAPPublikation() === true) {
                template = template.replace("<chk_simap_ja_state>", "1");
                template = template.replace("<chk_simap_ja_look>", "☒");
                template = template.replace("<chk_simap_nein_state>", "0");
                template = template.replace("<chk_simap_nein_look>", "☐");
            }
            else {
                template = template.replace("<chk_simap_ja_state>", "0");
                template = template.replace("<chk_simap_ja_look>", "☐");
                template = template.replace("<chk_simap_nein_state>", "1");
                template = template.replace("<chk_simap_nein_look>", "☒");
            }
            if (Classes.Decision.Nachtragsgrund !== undefined) {
                template = template.replace("{nachtragsgrund}", NachtragsgrundDisplay[Classes.Decision.Nachtragsgrund]);
            }
            template = template.replace("{datum_u_beschaffung}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.DatumUrspruenglicheBeschaffung));
            template = template.replace("{u_beschaffungsstelle}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.UrspruenglicheBeschaffungsstelle));
            var nrGrundvertrag = "";
            if (Classes.Decision.NrGrundvertrag !== undefined && Classes.Decision.NrGrundvertrag !== "") {
                nrGrundvertrag = "\u00A0" + WordWriter.ReplaceSpecialCharacters(Classes.Decision.NrGrundvertrag);
            }
            template = template.replace("{nr_grundvertrag}", nrGrundvertrag);
            if (Classes.Decision.UrspruenglicheVertragssumme !== undefined) {
                template = template.replace("{u_vs}", Classes.Decision.UrspruenglicheVertragssumme.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            template = template.replace("{bgnn}", Classes.Decision.BisherGenehmigteNachtraegeNummer);
            if (Classes.Decision.BisherGenehmigteNachtraegeTotal !== undefined) {
                template = template.replace("{bgn}", Classes.Decision.BisherGenehmigteNachtraegeTotal.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            template = template.replace("{vbnn}", Classes.Decision.VorliegenderBereinigterNachtragNr);
            if (Classes.Decision.VorliegenderBereinigterNachtragTotal !== undefined) {
                template = template.replace("{vbn}", Classes.Decision.VorliegenderBereinigterNachtragTotal.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.UrspruenglicheVertragssumme !== undefined && Classes.Decision.BisherGenehmigteNachtraegeTotal !== undefined && Classes.Decision.VorliegenderBereinigterNachtragTotal !== undefined) {
                Classes.Decision.NeueVertragssumme = Classes.Decision.UrspruenglicheVertragssumme + Classes.Decision.BisherGenehmigteNachtraegeTotal + Classes.Decision.VorliegenderBereinigterNachtragTotal;
                template = template.replace("{nvs}", Classes.Decision.NeueVertragssumme.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            template = template.replace("{vhb_prozent}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VerhaeltnisHonorar));
            template = template.replace("{vbns_d}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VerhandlungenNachtrag));
            template = template.replace("{vbns_p}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VerhandlungenNachtragDurch));
            template = template.replace("{vbnsp_d}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VerhandlungenVglProtokoll));
            // B-Formular
            if (Classes.Decision.AnzahlAngebote !== undefined) {
                template = template.replace("{offerte_zahl}", Classes.Decision.AnzahlAngebote.toFixed(0).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AngeboteVon !== undefined) {
                template = template.replace("{offerte_von}", Classes.Decision.AngeboteVon.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            if (Classes.Decision.AngeboteBis !== undefined) {
                template = template.replace("{offerte_bis}", Classes.Decision.AngeboteBis.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            // ausschluss Anbieter
            if (Classes.Decision.AusschlussAnbieter === true) {
                template = template.replace("<chk_ausschluss_anbieter_state>", "1");
                template = template.replace("<chk_ausschluss_anbieter_look>", "☒");
            }
            else {
                template = template.replace("<chk_ausschluss_anbieter_state>", "0");
                template = template.replace("<chk_ausschluss_anbieter_look>", "☐");
            }
            if (Classes.Decision.AusschlussAnbieterWer !== undefined) {
                template = template.replace("{angebot_bis}", Classes.Decision.AngeboteBis.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            // ausschluss Anbieter
            if (Classes.Decision.EvaluationsberichtVorhanden === true) {
                template = template.replace("<chk_evab_ja_state>", "1");
                template = template.replace("<chk_evab_ja_look>", "☒");
                template = template.replace("<chk_evab_nein_state>", "0");
                template = template.replace("<chk_evab_nein_look>", "☐");
            }
            else {
                template = template.replace("<chk_evab_nein_state>", "1");
                template = template.replace("<chk_evab_nein_look>", "☒");
                template = template.replace("<chk_evab_ja_state>", "0");
                template = template.replace("<chk_evab_ja_look>", "☐");
            }
            template = template.replace("{antrag_zuschlag_z1}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.AntragZuschlag1));
            template = template.replace("{antrag_zuschlag_z2}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.AntragZuschlag2));
            template = template.replace("{antrag_zuschlag_z3}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.AntragZuschlag3));
            template = template.replace("{antrag_zuschlag_z4}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.AntragZuschlag4));
            template = template.replace("{vergabeantrag_datum}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VergabeAntragAngebotVom));
            if (Classes.Decision.VergabeAntragBetrag !== undefined) {
                template = template.replace("{vergabeantrag_zahl}", Classes.Decision.VergabeAntragBetrag.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
                template = template.replace("{vergabeantrag_zahl}", Classes.Decision.VergabeAntragBetrag.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            else {
                template = template.replace("{vergabeantrag_zahl}", "");
                template = template.replace("{vergabeantrag_zahl}", "");
            }
            template = template.replace("{vertragsbeginn}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VertragsbeginnNachtrag));
            template = template.replace("{vertragsende}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.VertragsendeNachtrag));
            template = template.replace("{b_e_nachtrag}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.BeginnEndeNachtrag));
            template = template.replace("{ausschluss_wer}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.AusschlussAnbieterWer));
            template = template.replace("{evab_datum}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.EvaluationsberichtDatum));
            template = template.replace("{preisbasis_datum}", Classes.Decision.Preisbasis);
            template = template.replace("{k_n_prozent}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.KonditionenNebenkosten));
            template = template.replace("{k_n_r_prozent}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.KonditionenRabatt));
            template = template.replace("{k_n_r_s_prozent}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.KonditionenSkonto));
            // Zusätzliche Checkboxen für Fragebogen
            if (Classes.Decision.hasFragebogen === true) {
                var fragebogen = Classes.TemplateContainer.FragebogenTemplate;
                if (Classes.Decision.SchriftlicheBegruendungB === true) {
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_beg_fr_vergabe_nein_look>", "☒");
                }
                if (Classes.Decision.BegruendungJuristischB === true) {
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_ju_ge_re_do_nein_look>", "☒");
                }
                if (Classes.Decision.WirtschaftlichkeitsueberlegungenB === true) {
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_wi_ge_dok_nein_look>", "☒");
                }
                if (Classes.Decision.LeistungsumfangB === true) {
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_le_be_pf_er_nein_look>", "☒");
                }
                if (Classes.Decision.BedarfsanalyseB === true) {
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_bedarfsanalyse_nein_look>", "☒");
                }
                if (Classes.Decision.RisikobeurteilungB === true) {
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_ja_state>", "1");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_nein_state>", "0");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_ja_look>", "☒");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_nein_look>", "☐");
                }
                else {
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_ja_state>", "0");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_nein_state>", "1");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_ja_look>", "☐");
                    fragebogen = fragebogen.replace("<chk_risikobeurteilung_nein_look>", "☒");
                }
                template = template.replace(/<!--questionnaire-->/g, fragebogen);
            }
            // Rechnungsstellung Checkboxes
            if (Classes.Decision.RechnungsstellungBauherr === true) {
                template = template.replace("<chk_rs_bauherr_state>", "1");
                template = template.replace("<chk_rs_bauherr_look>", "☒");
            }
            else {
                template = template.replace("<chk_rs_bauherr_state>", "0");
                template = template.replace("<chk_rs_bauherr_look>", "☐");
            }
            if (Classes.Decision.RechnungsstellungBHU === true) {
                template = template.replace("<chk_rs_bhu_state>", "1");
                template = template.replace("<chk_rs_bhu_look>", "☒");
            }
            else {
                template = template.replace("<chk_rs_bhu_state>", "0");
                template = template.replace("<chk_rs_bhu_look>", "☐");
            }
            if (Classes.Decision.RechnungsstellungOertlBauleitung === true) {
                template = template.replace("<chk_rs_oert_bauleitung_state>", "1");
                template = template.replace("<chk_rs_oert_bauleitung_look>", "☒");
            }
            else {
                template = template.replace("<chk_rs_oert_bauleitung_state>", "0");
                template = template.replace("<chk_rs_oert_bauleitung_look>", "☐");
            }
            if (Classes.Decision.RechnungsstellungOberbauleitung === true) {
                template = template.replace("<chk_rs_oberbauleitung_state>", "1");
                template = template.replace("<chk_rs_oberbauleitung_look>", "☒");
            }
            else {
                template = template.replace("<chk_rs_oberbauleitung_state>", "0");
                template = template.replace("<chk_rs_oberbauleitung_look>", "☐");
            }
            // Preisart Checkboxes
            if (Classes.Decision.PreisartEinheitspreis === true) {
                template = template.replace("<chk_pa_einheitspreis_state>", "1");
                template = template.replace("<chk_pa_einheitspreis_look>", "☒");
            }
            else {
                template = template.replace("<chk_pa_einheitspreis_state>", "0");
                template = template.replace("<chk_pa_einheitspreis_look>", "☐");
            }
            if (Classes.Decision.PreisartPauschalpreis === true) {
                template = template.replace("<chk_pa_pauschalpreis_state>", "1");
                template = template.replace("<chk_pa_pauschalpreis_look>", "☒");
            }
            else {
                template = template.replace("<chk_pa_pauschalpreis_state>", "0");
                template = template.replace("<chk_pa_pauschalpreis_look>", "☐");
            }
            if (Classes.Decision.PreisartKostendach === true) {
                template = template.replace("<chk_pa_kostendach_state>", "1");
                template = template.replace("<chk_pa_kostendach_look>", "☒");
            }
            else {
                template = template.replace("<chk_pa_kostendach_state>", "0");
                template = template.replace("<chk_pa_kostendach_look>", "☐");
            }
            template = template.replace("{teilprojekt}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Teilprojekt));
            template = template.replace("{finanzierungskonto}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Finanzierungskonto));
            template = template.replace("{inventarobjekt}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Inventarobjekt));
            template = template.replace("{kostenart}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Kostenart));
            template = template.replace("{bemerkungen}", WordWriter.ReplaceSpecialCharacters(Classes.Decision.Bemerkungen));
            if (Classes.Decision.VoraussichtlicheAbrechnungssumme !== undefined) {
                template = template.replace("{vas}", Classes.Decision.VoraussichtlicheAbrechnungssumme.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1'"));
            }
            var grundTemplate = "";
            if (Classes.Decision.Grund !== undefined && Classes.Decision.Entscheidungstyp !== Entscheidungstyp.Zuschlagsentscheid && bFormular === false) {
                grundTemplate = Classes.Decision.Grund.GenerateWord();
            }
            template = template.replace("<!--new_page_connector-->", grundTemplate);
            const today = new Date();
            const todayyear = today.getFullYear();
            const todaymonth = today.getMonth() + 1;
            var todaymonthfixed;
            if (todaymonth < 10) {
                todaymonthfixed = ("0" + todaymonth).toString();
            }
            else {
                todaymonthfixed = todaymonth.toString();
            }
            const todayday = today.getDate();
            var fileName = `${todayyear}${todaymonthfixed}${todayday}_` + Classes.Decision.Projekt;
            // define different filenames for different formulars
            if (bFormular === true) {
                fileName += "_B-Form";
                // replaces all the signature lines on the file for Zuschlagsentscheid
                template = this.ReplaceSignatureLines(template, Classes.Decision.GetSignatures(Entscheidungstyp.Zuschlagsentscheid));
            }
            else if (+Classes.Decision.Entscheidungstyp === Entscheidungstyp.Nachtrag) {
                fileName += "_A+B-Form";
                // replaces all the signature lines on the template for Nachtrag
                template = this.ReplaceSignatureLines(template, Classes.Decision.GetSignatures(Entscheidungstyp.Nachtrag));
            }
            else {
                fileName += "_A-Form";
                // replaces all the signatures lines on the template for Erstbeschaffung
                template = this.ReplaceSignatureLines(template, Classes.Decision.GetSignatures(Entscheidungstyp.Erstbeschaffung));
            }
            this.Export2XmlDoc(template, fileName, bFormular);
        }
        /**
         reaplces all the signatures of the formula on the bottom. Not used lines are the position and the name of the person filled with a hyphen (-)
         * @param {string} template template to replace the signatures on
         * @param {Classes.Signature[]} signatureLines all lines which there a person has to be for the signature
         * @returns the replaced template
         */
        static ReplaceSignatureLines(template, signatureLines) {
            var i = 1;
            var allSignature = "";
            // order the signatures by SignaturePerson, so always same order will be filled
            signatureLines = signatureLines.sort((a, b) => a.SignaturePerson > b.SignaturePerson ? 1 : ((b.SignaturePerson > a.SignaturePerson) ? -1 : 0));
            signatureLines.forEach((val, index) => {
                // if any signature is icp, rpelace the comment with the icp message
                if (val.SignaturePerson !== SignaturePerson.ICP) {
                    var innerTemplate = Classes.TemplateContainer.VisumAllgemein;
                    // replace the function of the signature
                    innerTemplate = innerTemplate.replace("{visum_f}", SignaturePersonDisplay[val.SignaturePerson]);
                    // replace the name of the signature person
                    innerTemplate = innerTemplate.replace("{visum_n}", val.SignatureName);
                    allSignature += innerTemplate;
                    i++;
                }
                else {
                    // replace icp signature line and replace correct name
                    var innerTemplate = Classes.TemplateContainer.VisumIcp;
                    innerTemplate = innerTemplate.replace("{visum_n_icp}", val.SignatureName);
                    allSignature += innerTemplate;
                }
            });
            template = template.replace(/<!--visum_all-->/g, allSignature);
            return template;
        }
        /**
         * Generates the XML Word file and sends it as download to the user
         * @param {string} xml the xml file to send
         * @param {string} filename the fileName without the .xml
         */
        static Export2XmlDoc(xml, filename, bFormular) {
            var blob = new Blob(["\ufeff", xml], {
                type: "application/msword"
            });
            // Specify link url
            var url = "data:application/vnd.openxmlformats-package.relationships+xml;charset=utf-8," + encodeURIComponent(xml);
            // Specify file name
            filename = filename ? filename + ".xml" : "document.xml";
            var downloadLink;
            if (bFormular === true) {
                downloadLink = $("#download-b-formular-button");
            }
            else {
                downloadLink = $("#download-formular-button");
            }
            if (navigator.msSaveOrOpenBlob) {
                downloadLink.click(() => navigator.msSaveOrOpenBlob(blob, filename));
                downloadLink.attr("href", "#");
            }
            else {
                // add link to download-button
                downloadLink.attr("href", url);
                // Setting the file name
                downloadLink.attr("download", filename);
            }
            downloadLink.attr("cursor");
            //triggering the function
            downloadLink.show();
        }
        /**
         * Replaces all occurences of special characters in a string
         * @param {string} inputString string to replace the characters inside
         * @returns replaced string
         */
        static ReplaceSpecialCharacters(inputString) {
            if (inputString) {
                let replacedString = inputString.replace(/&/g, "&amp;");
                replacedString = replacedString.replace(/</g, "&lt;");
                replacedString = replacedString.replace(/>/g, "&gt;");
                // replace the now wrong linebreaks
                replacedString = replacedString.replace(/&lt;w:br\/&gt;/g, "<w:br/>");
                return replacedString;
            }
            else {
                return inputString;
            }
        }
    }
    Modules.WordWriter = WordWriter;
})(Modules || (Modules = {}));
//# sourceMappingURL=WordWriter.js.map