Exemplo n.º 1
0
        private SendtMelding SendNyJournalpost(journalpost jp)
        {
            Guid receiverId = Guid.Parse(config["sendToAccountId"]);                                                             // Receiver id as Guid
            Guid senderId   = Guid.Parse(config["accountId"]);                                                                   // Sender id as Guid

            var konto = client.Lookup(new LookupRequest("KOMM:0825", "no.geointegrasjon.arkiv.oppdatering.arkivmelding.v1", 3)); //TODO for å finne receiverId
            //Prosess også?

            var messageRequest = new MeldingRequest(
                mottakerKontoId: receiverId,
                avsenderKontoId: senderId,
                meldingType: "no.geointegrasjon.arkiv.oppdatering.arkivmeldingUtgaaende.v1");                       // Message type as string
                                                                                                                    //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            var arkivmld = new arkivmelding();

            // arkivmld.sluttbrukerIdentifikator = "Fagsystemets brukerid";
            arkivmld.antallFiler = 0;
            arkivmld.system      = jp.referanseEksternNoekkel.fagsystem;
            arkivmld.meldingId   = jp.referanseEksternNoekkel.noekkel;
            arkivmld.tidspunkt   = DateTime.Now;
            arkivmld.Items       = new journalpost[] { jp };

            string payload = Serialize(arkivmld);

            // Creates FIKS IO message
            List <IPayload> payloads = new List <IPayload>();

            payloads.Add(new StringPayload(payload, "journalpost.xml"));

            // Sends to FIKS IO (archive solution)
            var msg = client.Send(messageRequest, payloads).Result;

            Console.WriteLine("Melding " + msg.MeldingId.ToString() + " sendt..." + msg.MeldingType);
            Console.WriteLine(payload);

            // TODO: Await result from archive and return key
            return(null);
        }
Exemplo n.º 2
0
        private void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message
            var arkivmeldingXmlSchemaSet = new XmlSchemaSet();

            arkivmeldingXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/arkivmelding/v2", Path.Combine("Schema", "arkivmelding.xsd"));
            arkivmeldingXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/metadatakatalog/v2", Path.Combine("Schema", "metadatakatalog.xsd"));

            var sokXmlSchemaSet = new XmlSchemaSet();

            sokXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/sok", Path.Combine("Schema", "sok.xsd"));

            var xmlValidationErrorOccured = false;

            if (ArkivintegrasjonMeldingTypeV1.IsBasis(mottatt.Melding.MeldingType))
            {
                var validationResult         = new List <List <string> >();
                var deserializedArkivmelding = new arkivmelding();
                Console.WriteLine($"Melding {mottatt.Melding.MeldingId} {mottatt.Melding.MeldingType} mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet
                if (mottatt.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    if (asiceReadEntry.FileName.Contains(".xml")) //TODO regel på navning? alltid arkivmelding.xml?
                                    {
                                        //TODO validere arkivmelding og evt sende feil om den ikke er ok for arkivering
                                        validationResult = new XmlValidation().ValidateXml(
                                            entryStream,
                                            arkivmeldingXmlSchemaSet
                                            );
                                        if (validationResult[0].Count > 0)
                                        {
                                            xmlValidationErrorOccured = true;
                                        }
                                        var          newEntryStream = asiceReadEntry.OpenStream();
                                        StreamReader reader1        = new StreamReader(newEntryStream);
                                        string       text           = reader1.ReadToEnd();
                                        deserializedArkivmelding = ArkivmeldingSerializeHelper.DeSerialize(text);
                                        Console.WriteLine(text);
                                    }
                                    else
                                    {
                                        Console.WriteLine($"Mottatt vedlegg: {asiceReadEntry.FileName}");
                                    }
                                }
                            }
                            // Check that all digests declared in the manifest are valid
                            if (asice.DigestVerifier.Verification().AllValid)
                            {
                                // Do something
                            }
                            else
                            {
                                // Handle error
                            }
                        }
                    if (xmlValidationErrorOccured) // Ugyldig forespørsel
                    {
                        var ugyldigforespørsel = new Ugyldigforespørsel
                        {
                            ErrorId       = Guid.NewGuid().ToString(),
                            Feilmelding   = "Feilmelding:\n" + string.Join("\n ", validationResult[0]),
                            CorrelationId = Guid.NewGuid().ToString()
                        };
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                        var errorMessage = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                        Console.WriteLine($"Svarmelding {errorMessage.MeldingId} {errorMessage.MeldingType} sendt");
                    }
                    else
                    {
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                        var svarmsg = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.Mottatt).Result;
                        Console.WriteLine($"Svarmelding {svarmsg.MeldingId} {svarmsg.MeldingType} sendt...");
                        Console.WriteLine("Melding er mottatt i arkiv ok ......");
                    }
                }
                else   // Ugyldig forespørsel
                {
                    var ugyldigforespørsel = new Ugyldigforespørsel
                    {
                        ErrorId       = Guid.NewGuid().ToString(),
                        Feilmelding   = "Meldingen mangler innhold",
                        CorrelationId = Guid.NewGuid().ToString()
                    };

                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    var svarmsg = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                    Console.WriteLine($"Svarmelding {svarmsg.MeldingId} {svarmsg.MeldingType} sendt");
                }

                if (!xmlValidationErrorOccured)
                {
                    var kvittering = new arkivmelding();
                    kvittering.tidspunkt = DateTime.Now;
                    var type = deserializedArkivmelding?.Items?[0]?.GetType();

                    if (type == typeof(saksmappe))
                    {
                        var mp = new saksmappe();
                        mp.systemID          = new systemID();
                        mp.systemID.Value    = Guid.NewGuid().ToString();
                        mp.saksaar           = DateTime.Now.Year.ToString();
                        mp.sakssekvensnummer = new Random().Next().ToString();

                        kvittering.Items = new List <saksmappe>()
                        {
                            mp
                        }.ToArray();
                    }
                    else if (type == typeof(journalpost))
                    {
                        var jp = new journalpost();

                        jp.systemID             = new systemID();
                        jp.systemID.Value       = Guid.NewGuid().ToString();
                        jp.journalaar           = DateTime.Now.Year.ToString();
                        jp.journalsekvensnummer = new Random().Next().ToString();
                        jp.journalpostnummer    = new Random().Next(1, 100).ToString();

                        kvittering.Items = new List <journalpost>()
                        {
                            jp
                        }.ToArray();
                    }
                    //TODO simulerer at arkivet arkiverer og nøkler skal returneres

                    string payload = ArkivmeldingSerializeHelper.Serialize(kvittering);

                    var svarmsg2 = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.Kvittering, payload, "arkivmelding.xml").Result;
                    Console.WriteLine("$Svarmelding {svarmsg2.MeldingId} {svarmsg2.MeldingType} sendt...");
                    Console.WriteLine("Arkivering er ok ......");
                }
            }
            else if (ArkivintegrasjonMeldingTypeV1.IsSok(mottatt.Melding.MeldingType))
            {
                var validationResult = new List <List <string> >();
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                if (mottatt.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    if (asiceReadEntry.FileName.Contains(".xml")) //TODO regel på navning? alltid arkivmelding.xml?
                                    {
                                        validationResult = new XmlValidation().ValidateXml(
                                            entryStream,
                                            sokXmlSchemaSet
                                            );
                                        if (validationResult[0].Count > 0)
                                        {
                                            xmlValidationErrorOccured = true;
                                        }
                                        var reader1 = new StreamReader(entryStream);
                                        var text    = reader1.ReadToEnd();
                                        Console.WriteLine("Søker etter: " + text);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Mottatt vedlegg: " + asiceReadEntry.FileName);
                                    }
                                }
                            }
                        }
                    if (xmlValidationErrorOccured)
                    {
                        var ugyldigforespørsel = new Ugyldigforespørsel
                        {
                            ErrorId       = Guid.NewGuid().ToString(),
                            Feilmelding   = "Feilmelding:\n" + string.Join("\n ", validationResult[0]),
                            CorrelationId = Guid.NewGuid().ToString()
                        };
                        var errorMessage = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                        Console.WriteLine($"Svarmelding {errorMessage.MeldingId} {errorMessage.MeldingType} sendt");
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                }

                //Konverterer til arkivmelding xml
                var simulertSokeresultat = MessageSamples.GetForenkletArkivmeldingInngåendeMedSaksreferanse();
                var arkivmelding         = ArkivmeldingFactory.GetArkivmelding(simulertSokeresultat);
                var payload = ArkivmeldingSerializeHelper.Serialize(arkivmelding);
                //Lager FIKS IO melding
                List <IPayload> payloads = new List <IPayload>();
                payloads.Add(new StringPayload(payload, "arkivmelding.xml"));

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                var svarmsg = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.InnsynSokResultat, payloads).Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");
                Console.WriteLine("Melding er håndtert i arkiv ok ......");
            }
            else if (ArkivintegrasjonMeldingTypeV1.IsAvansert(mottatt.Melding.MeldingType))
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");
                //TODO håndtere meldingen med ønsket funksjonalitet
                Console.WriteLine("Melding er håndtert i arkiv ok ......");
                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ukjent melding i køen som avvises " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType);
                mottatt.SvarSender.Nack(); // Nack message to remove it from the queue
            }
        }
        public static arkivmelding ConvertForenkletNotatToArkivmelding(ArkivmeldingForenkletNotat input)
        {
            if (input.nyttNotat == null)
            {
                throw new Exception("Badrequest -notat må være angitt");
            }

            var       arkivmld = new arkivmelding();
            int       antFiler = 0;
            saksmappe mappe    = null;

            if (input.referanseSaksmappe != null)
            {
                mappe = ConvertSaksmappe(input.referanseSaksmappe);
            }

            if (input.nyttNotat != null)
            {
                var journalpst = new journalpost();
                journalpst.tittel = input.nyttNotat.tittel;


                journalpst.journalposttype = "I";
                //if (input.nyttNotat.mottattDato != null)
                //{
                //    journalpst.mottattDato = input.nyttNotat.mottattDato.Value;
                //    journalpst.mottattDatoSpecified = true;
                //}
                if (input.nyttNotat.dokumentetsDato != null)
                {
                    journalpst.dokumentetsDato          = input.nyttNotat.dokumentetsDato.Value;
                    journalpst.dokumentetsDatoSpecified = true;
                }
                //if (input.nyttNotat.offentlighetsvurdertDato != null)
                //{
                //    journalpst.offentlighetsvurdertDato = input.nyttNotat.offentlighetsvurdertDato.Value;
                //    journalpst.offentlighetsvurdertDatoSpecified = true;
                //}

                //journalpst.offentligTittel = input.nyttNotat.offentligTittel;

                ////skjerming
                //if (input.nyttNotat.skjermetTittel)
                //{
                //    journalpst.skjerming = new skjerming()
                //    {
                //        skjermingshjemmel = input.nyttNotat.skjerming?.skjermingshjemmel,
                //        skjermingMetadata = new List<string> { "tittel", "korrespondansepart" }.ToArray()
                //    };
                //}
                //Håndtere alle filer
                List <dokumentbeskrivelse> dokbliste = new List <dokumentbeskrivelse>();

                if (input.nyttNotat.hoveddokument != null)
                {
                    var dokbesk = new dokumentbeskrivelse
                    {
                        dokumentstatus            = "F",
                        tilknyttetRegistreringSom = "H",
                        tittel = input.nyttNotat.hoveddokument.tittel
                    };

                    if (input.nyttNotat.hoveddokument.skjermetDokument)
                    {
                        dokbesk.skjerming = new skjerming()
                        {
                            //skjermingshjemmel = input.nyttNotat.skjerming?.skjermingshjemmel,
                            skjermingDokument = "Hele"
                        };
                    }
                    var dok = new dokumentobjekt
                    {
                        referanseDokumentfil = input.nyttNotat.hoveddokument.filnavn
                    };
                    List <dokumentobjekt> dokliste = new List <dokumentobjekt>();
                    dokliste.Add(dok);

                    dokbesk.dokumentobjekt = dokliste.ToArray();

                    dokbliste.Add(dokbesk);
                    antFiler++;
                }
                foreach (var item in input.nyttNotat.vedlegg)
                {
                    var dokbesk = new dokumentbeskrivelse();
                    dokbesk.dokumentstatus            = "F";
                    dokbesk.tilknyttetRegistreringSom = "V";
                    dokbesk.tittel = item.tittel;

                    var dok = new dokumentobjekt();
                    dok.referanseDokumentfil = item.filnavn;
                    List <dokumentobjekt> dokliste = new List <dokumentobjekt>();
                    dokliste.Add(dok);

                    dokbesk.dokumentobjekt = dokliste.ToArray();

                    dokbliste.Add(dokbesk);
                    antFiler++;
                }
                journalpst.dokumentbeskrivelse = dokbliste.ToArray();

                //Korrespondanseparter
                List <korrespondansepart> partsListe = new List <korrespondansepart>();

                foreach (var internMottaker in input.nyttNotat.internAvsender)
                {
                    korrespondansepart korrpart = InternKorrespondansepartToArkivPart(_internavsenderKode, internMottaker);
                    partsListe.Add(korrpart);
                }

                foreach (var internMottaker in input.nyttNotat.internMottaker)
                {
                    korrespondansepart korrpart = InternKorrespondansepartToArkivPart(_internmottakerKode, internMottaker);
                    partsListe.Add(korrpart);
                }

                journalpst.korrespondansepart = partsListe.ToArray();


                List <journalpost> jliste = new List <journalpost>
                {
                    journalpst
                };

                if (mappe != null)
                {
                    var mappeliste = new List <saksmappe>();
                    mappe.Items = jliste.ToArray();
                    mappeliste.Add(mappe);
                    arkivmld.Items = mappeliste.ToArray();
                }
                else
                {
                    arkivmld.Items = jliste.ToArray();
                }
            }
            arkivmld.antallFiler = antFiler;
            arkivmld.system      = input.nyttNotat.referanseEksternNøkkel.fagsystem;
            arkivmld.meldingId   = input.nyttNotat.referanseEksternNøkkel.nøkkel;
            arkivmld.tidspunkt   = DateTime.Now;

            return(arkivmld);
        }