public ActionResult TestByeah()
        {
            var ansatt = ADHelper.GetADBruker(20235).Get();

            HRMHelper.HentAnsattStillingsInfo(ansatt, GetUsername());
            return(View("Index"));
        }
        private Response <bool> IsLoggedInUserEntitled(Bundles.AnsattInfo ansattInfo)
        {
            var loggedInUser = GetLoggedInUserAD();

            if (AnsattHelper.IsUserSuper(loggedInUser))
            {
                return(new Response <bool>(true, "User is testAdmin", Codes.Code.OK));
            }

            Bundles.LederInfo[] lederListe = ansattInfo.Lederliste;

            // sjekk om det ble funnet ledere i AD, hvis ikke hent fra HRM
            if (lederListe == null || lederListe.Length <= 0)
            {
                var lederResponse = HRMHelper.FinnLedereForAnsatt(ansattInfo.Fornavn, ansattInfo.Etternavn, ansattInfo.AnsattNr);

                if (lederResponse.Success)
                {
                    lederListe = lederResponse.Get();
                }
            }

            // sjekk om innlogget bruker står som leder for den ansatte
            foreach (var leder in lederListe)
            {
                if (leder.AD.ToUpper().Equals(loggedInUser))
                {
                    return(new Response <bool>(true, "OK", Codes.Code.OK));
                }
            }

            // sjekk om innlogget bruker er leders leder
            foreach (var leder in lederListe)
            {
                var lederResult = ADHelper.GetAnsattInfoForLeder(leder.AD);

                if (lederResult.Success)
                {
                    var ledersLedere = HRMHelper.FinnLedereForAnsatt(lederResult.Get());

                    if (ledersLedere.Success)
                    {
                        foreach (var ledersLeder in ledersLedere.Get())
                        {
                            if (ledersLeder.AD.ToUpper().Equals(loggedInUser))
                            {
                                return(new Response <bool>(true, "OK", Codes.Code.OK));
                            }
                        }
                    }
                }
                else
                {
                    return(new Response <bool>(false, lederResult.Message, Codes.Code.ERROR));
                }
            }

            return(new Response <bool>(false, "Du står ikke som leder for denne ansatte", Codes.Code.ERROR));
        }
        public ActionResult Notat()
        {
            var dokument = RouteData.Values["docID"];

            if (dokument != null)
            {
                var lederResult = ADHelper.GetLederBundle(GetLoggedInUserAD());

                if (lederResult.Success)
                {
                    var leder = lederResult.Get();
                    ViewBag.Ledernavn = leder.Navn;
                    Bundles.AnsattInfo ansatt = GetAnsattFromSession();

                    if (!ansatt.Equals(Bundles.AnsattInfo.Empty))
                    {
                        ViewBag.Ansattnavn = ansatt.Navn;
                        ViewBag.Ansattnr   = ansatt.AnsattNr;
                        ViewBag.Date       = DateTime.Now.ToString("dd'/'MM yyyy");

                        if (dokument.Equals(Dokumenter.Dag1))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging dag 1",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn notat for dag 1 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert område når du trykker 'Send inn', "
                                       + $"før den blir arkivert i WebSak av roboten.",
                                       "Tips: Trykk på 'Fyll ut' for å få ferdig utfylt spørsmålstekst i dokumentet.",
                                       $"<font size='5'>Sykefraværsoppfølging dag 1 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær,
                                       Maltekst.HentMalTekst("Dag1-5")
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dag5))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging dag 5",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn notat for dag 5 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert område når du trykker 'Send inn', "
                                       + $"før den blir arkivert i WebSak av roboten.",
                                       "Tips: Trykk på 'Fyll ut' for å få ferdig utfylt spørsmålstekst i dokumentet.",
                                       $"<font size='5'>Sykefraværsoppfølging dag 5 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær,
                                       Maltekst.HentMalTekst("Dag1-5")
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dag14))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging dag 14",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn notat for dag 14 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert område når du trykker 'Send inn', "
                                       + $"før den blir arkivert i WebSak av roboten.",
                                       "Tips: Trykk på 'Fyll ut' for å få ferdig utfylt spørsmålstekst i dokumentet.",
                                       $"<font size='5'>Sykefraværsoppfølging dag 14 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær,
                                       Maltekst.HentMalTekst("Dag14")
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dag28))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging dag 28",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn notat for dag 28 og laste opp en oppfølgingsplan for {ansatt.Navn}. Teksten blir lagret som pdf-fil på sikkert område når du trykker 'Send inn', "
                                       + $"før den blir arkivert i WebSak av roboten.",
                                       "Tips: Trykk på 'Fyll ut' for å få ferdig utfylt spørsmålstekst i dokumentet.",
                                       $"<font size='5'>Sykefraværsoppfølging dag 28 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær,
                                       Maltekst.HentMalTekst("Dag28")
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dialogmøte1))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging Dialogmøte 1",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn referat fra dialogmøte 1 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert"
                                       + " område når du trykker 'Send inn', før den blir arkivert i WebSak av roboten.",
                                       "",
                                       $"<font size='5'>Sykefraværsoppfølging Dialogmøte 1 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dialogmøte2))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging Dialogmøte 2",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn referat fra dialogmøte 2 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert"
                                       + " område når du trykker 'Send inn', før den blir arkivert i WebSak av roboten.",
                                       "",
                                       $"<font size='5'>Sykefraværsoppfølging Dialogmøte 2 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Dialogmøte3))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Sykefraværsoppfølging Dialogmøte 3",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn referat fra dialogmøte 3 vedrørende {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert"
                                       + " område når du trykker 'Send inn', før den blir arkivert i WebSak av roboten.",
                                       "",
                                       $"<font size='5'>Sykefraværsoppfølging Dialogmøte 3 - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.GenereltFraværsnotat))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            return(MakeNoteEditor(
                                       "Generelt fraværsnotat/Tilretteleggingssamtale",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive generelle notater relatert til fravær for {ansatt.Navn}. Teksten blir lagret som pdf-fil på sikkert"
                                       + " område når du trykker 'Send inn', før den blir arkivert i WebSak av roboten.",
                                       "",
                                       $"<font size='5'>Generelt fraværsnotat/Tilretteleggingssamtale - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Sykefravær
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.GenereltDokument))
                        {
                            string mappetype = (string)Session["docID"];
                            int    docId     = "Sykefraværsmappe".Equals(mappetype) ? Mappetype.Sykefravær : Mappetype.Ansattforhold;

                            MakeFileUploader("", "Generelle dokumenter", $"Her kan du laste opp generelle dokumenter for {ansatt.Navn} ({mappetype}).", Dokumenter.GenereltDokument, docId);
                            return(View("GenereltDokument"));
                        }
                        else if (dokument.Equals(Dokumenter.MøteinnkallingOppfølgingssamtale))
                        {
                            // logg besøkende på de ulike dagene for sikkerhets skyld
#if !DEBUG
                            System.IO.File.AppendAllText(@"C:\inetpub\logs\visitors.txt", DateTime.Now.ToString() + ": " + GetLoggedInUserAD() + ": " + dokument + "\n");
#endif
                            ViewBag.HelpLink = HelpLinks.Sykefravær;

                            ViewBag.Heading = $"Her kan du skrive møteinnkalling til oppfølgingssamtale for {ansatt.Navn}. Møteinnkallingen sendes"
                                              + " via elektronisk post til den ansatte hvis de har digital postkasse, hvis ikke sendes den som brev i posten.";

                            ViewBag.AutocompleteText = Maltekst.HentMalTekst("Møteinnkalling");

                            return(View("Moteinnkalling"));
                        }
                        else if (dokument.Equals(Dokumenter.GenereltUtgåendeDokument))
                        {
                            string mappetype = (string)Session["docID"];
                            int    docId     = "Sykefraværsmappe".Equals(mappetype) ? Mappetype.Sykefravær : Mappetype.Ansattforhold;
                            ViewBag.DocId   = docId;
                            ViewBag.Heading = $"Her kan du skrive utgående brev til {ansatt.Navn}. Brevet sendes"
                                              + " via elektronisk post til den ansatte hvis de har digital postkasse, hvis ikke sendes det som brev i posten.";

                            return(View("GenereltUtgaendeDokument"));
                        }
                        else if (dokument.Equals(Dokumenter.DigitalArbeidskontrakt))
                        {
                            ViewBag.HelpLink = HelpLinks.Arbeidskontrakt;

                            return(MakeFileUploader(
                                       "Arbeidskontrakt",
                                       $"Du laster nå opp dokumenter vedrørende {ansatt.Navn} på mappe Ansattforhold i WebSak.",
                                       "Har du sendt en arbeidsavtale til e-signering? <a href='https://signering.posten.no/virksomhet/#/' target='_blank'>Last den ned her</a>",
                                       "digital arbeidskontrakt",
                                       Mappetype.Ansattforhold
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Permisjonssøknad))
                        {
                            return(MakeFileUploader(
                                       "Permisjonssøknad",
                                       $"Du laster nå opp dokumenter vedrørende {ansatt.Navn} på mappe Ansattforhold i WebSak.",
                                       "Permisjonssøknader over 2 uker skal arkiveres i personalmappen.",
                                       "permisjonssøknad",
                                       Mappetype.Ansattforhold
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Utviklingssamtale))
                        {
                            ViewBag.HelpLink = HelpLinks.Utviklingssamtale;

                            return(MakeNoteEditor(
                                       "Utviklings-/medarbeidersamtale",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive inn utviklings-/medarbeidersamtale for {ansatt.Navn} direkte. Teksten blir lagret som pdf-fil på sikkert"
                                       + " område når du trykker 'Send inn', før den blir arkivert i WebSak av roboten.",
                                       "",
                                       $"<font size='5'>Utviklings-/medarbeidersamtale - {GetFormattedDate()}</font><blockquote></blockquote>",
                                       Mappetype.Ansattforhold
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Arbeidsattest))
                        {
                            ViewBag.HelpLink = HelpLinks.Arbeidsattest;

                            return(MakeNoteEditor(
                                       "Arbeidsattest",
                                       Datotype.Opplastingsdato,
                                       $"Her kan du skrive arbeidsattest for {ansatt.Navn}. Arbeidstaker som fratrer etter lovlig oppsigelse har krav på skriftlig attest av arbeidsgiver. " +
                                       $"Attesten skal inneholde opplysninger om arbeidstakers navn, fødselsdato, hva arbeidet har bestått i og om arbeidsforholdets varighet " +
                                       $"<a href='http://arbeidsmiljoloven.com/article/%C2%A7-15-15-attest/' target='_blank'>(se mer informasjon)</a>.<br/>" +
                                       $"Attesten blir arkivert i WebSak og sendt som digitalt brev med logo til den ansatte når du trykker 'Send inn'.",
                                       "",
                                       string.Format(Maltekst.HentMalTekst("Arbeidsattest"), ansatt.Navn),
                                       Mappetype.Ansattforhold,
                                       null,
                                       true
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.PolitiattestFormål))
                        {
                            ViewBag.HelpLink = HelpLinks.VedleggPolitiattest;

                            ViewBag.LovhjemmelListe = PolitiattestFactory.LovhjemmelListe;
                            ViewBag.Ansattfornavn   = ansatt.Fornavn;
                            ViewBag.Ansattetternavn = ansatt.Etternavn;
                            return(View("PolitiattestFormaal"));
                        }
                        else if (dokument.Equals(Dokumenter.Anvisningsfullmakt))
                        {
                            return(View("Anvisningsfullmakt"));
                        }
                        else if (dokument.Equals(Dokumenter.TilbaketrekkingAnvisningsfullmakt))
                        {
                            return(View("TilbaketrekkingAnvisningsfullmakt"));
                        }
                        else if (dokument.Equals(Dokumenter.FremlagtPolitiattest))
                        {
                            return(MakeNoteEditor(
                                       "Fremlagt politiattest",
                                       Datotype.Opplastingsdato,
                                       $"Fyll ut stillingstittel markert med <b>fet</b> tekst i editoren under."
                                       + " Roboten noterer i personalmappen at du bekrefter at politiattesten er mottatt, vurdert og makulert. For mer informasjon, se egen"
                                       + "<a href='https://kvalitet.kommuneforlaget.no/kvalitetsstyring#/documents/e04344b1-7aa4-4764-89b4-0d1e1b4788e1/80f68daf-0eb9-4610-97fb-a2925946dd5b' target='_blank'>"
                                       + " rutine</a> for politiattest.",
                                       "NB: merknad vedr. ansettelse jf. barnevernloven: politiattest skal ikke makuleres jf. forskrift om politiattest i henhold til barnevernloven §8",
                                       string.Format(Maltekst.HentMalTekst("FremlagtPolitiattest"), GetFormattedDate(), ansatt.Navn, leder.Navn),
                                       Mappetype.Ansattforhold
                                       ));
                        }
                        else if (dokument.Equals(Dokumenter.Esignering))
                        {
                            ViewBag.HelpLink = HelpLinks.Esignering;
                            return(View("E-signering"));
                        }
                        else if (dokument.Equals(Dokumenter.ArbeidsavtaleNyeNarvik))
                        {
                            ViewBag.Navn = ansatt.Navn;
                            var infoResult = HRMHelper.HentAnsattStillingsInfo(ansatt, GetLoggedInUserAD());



                            if (infoResult.Success)
                            {
                                var sID = Request.QueryString["stillingID"];
                                if (infoResult.Get().Count == 1 || sID != null)
                                {
                                    AvtaleInfo aInfo;

                                    if (sID != null)
                                    {
                                        aInfo = infoResult.Get()[int.Parse(sID)];
                                    }
                                    else
                                    {
                                        aInfo = infoResult.Get()[0];
                                    }

                                    ViewBag.Navn           = aInfo.Navn;
                                    ViewBag.Personnr       = aInfo.Personnr;
                                    ViewBag.Arbeidssted    = aInfo.Arbeidssted;
                                    ViewBag.TittelStilling = aInfo.TittelStilling;
                                    ViewBag.Prosent        = aInfo.Prosent;
                                    ViewBag.Lonn           = aInfo.Lonn;
                                    ViewBag.TimerPrUke     = aInfo.TimerPrUke;
                                    ViewBag.Fast           = aInfo.ErFastStilling();
                                    if (!aInfo.ErFastStilling())
                                    {
                                        var aInfoMid = (AvtaleInfoMidlertidlig)aInfo;
                                        ViewBag.Hjemmel   = aInfoMid.Hjemmel;
                                        ViewBag.Sluttdato = aInfoMid.Sluttdato;
                                    }
                                    return(View("ArbeidsavtaleNyeNarvik"));
                                }
                                else
                                {
                                    // må håndtere flere stillinger på samme leder
                                    ViewBag.StillingListe = infoResult.Get();
                                    return(View("VelgStilling"));
                                }
                            }

                            return(View("ArbeidsavtaleNyeNarvik"));
                        }
                        else
                        {
                            TempData["ErrorMsgGlobal"] = dokument + " er ikke tilgjengelig";
                            return(RedirectToAction("VelgDokument", "Home"));
                        }
                    }
                    else
                    {
                        TempData["ErrorMsgGlobal"] = "Du må velge en ansatt for å bruke denne funksjonen";
                        return(RedirectToAction("Index", "Home"));
                    }
                }
                else
                {
                    return(new HttpUnauthorizedResult());
                }
            }
            else
            {
                TempData["ErrorMsgGlobal"] = "Velg et dokument fra menyen under";
                return(RedirectToAction("VelgDokument", "Home"));
            }
        }
Exemple #4
0
        // lagrer alle opplastede filer til disk (G:\), oppretter hjelpefiler og returnerer mappeadressen
        private Response <string> SaveFilesToDisk(HttpPostedFileBase hoveddokument, IEnumerable <HttpPostedFileBase> vedlegg, string hovedfilnavn, string journalpostnavn, int sak = 0, bool sendCopy = false, Dictionary <string, string> helperFiles = null)
        {
            sak = sak >= _websakMapper.Length || sak < 0 ? 0 : sak;

            // sett mimetype avhengig av hvilken fil som skal lagres
            var allowedMime   = sendCopy ? "text/html" : "application/pdf";
            var fileExtension = "";

            if (hovedfilnavn.Equals(Dokumenter.GenereltDokument))
            {
                fileExtension = "." + hoveddokument.FileName.Split('.').Last();
            }
            else
            {
                fileExtension = sendCopy ? ".html" : ".pdf";
            }

            var ansatt = GetAnsattFromSession();

            try
            {
                // sjekk filtypen
                if (hoveddokument.ContentType.Equals(allowedMime) || hovedfilnavn.Equals(Dokumenter.GenereltDokument))
                {
                    // bruker impersonate for å få skrivetilgang på G:\ for asp.net-prosessen
                    Imposter.ImpersonateRobot();

                    // gjør klar diverse filnavn
                    hovedfilnavn = hovedfilnavn.Replace(" ", "_");

                    var mappenavn          = CreateUniqueFoldername();
                    var opplastingsmappe   = $"{Paths.UNC_ADDRESS}{Paths.INPUT_FOLDER}{Paths.UPLOAD_FOLDER}{mappenavn}\\";  // asp.net-prosessen vil ha adressen på formen \\server\user$
                    var mappenavnForUiPath = $"{Paths.DRIVE_LETTER}{Paths.INPUT_FOLDER}{Paths.UPLOAD_FOLDER}{mappenavn}\\"; // UiPath vil ha adressen på formen G:\mappe

                    // opprett en ny mappe for dokumentene til denne journalposten
                    Directory.CreateDirectory(opplastingsmappe);

                    // gi hoveddokumentet et standard navn slik at det kan finnes av roboten i WebSak
                    var hovedfiladresse = $"{opplastingsmappe}{hovedfilnavn}{fileExtension}";
                    hoveddokument.SaveAs(hovedfiladresse);

                    var filListe = "";
                    if (!sendCopy)
                    {
                        filListe += $"{mappenavnForUiPath}{hovedfilnavn}{fileExtension}"; // html-dokumentet skal ikke importeres i WebSak
                    }
                    var vedleggteller = 0;

                    // lagre alle vedlegg hvis de eksisterer
                    if (vedlegg != null)
                    {
                        foreach (var fil in vedlegg)
                        {
                            if (fil != null)
                            {
                                // lager filnavn som brukes av roboten når den skal importere i WebSak. Legger til "vedlegg_" for å unngå navnekonflikt med hovedfil/vedlegg
                                var vedleggAdresse   = opplastingsmappe + Path.GetFileName("vedlegg_" + fil.FileName);
                                var hjelpefiladresse = mappenavnForUiPath + Path.GetFileName("vedlegg_" + fil.FileName);
                                fil.SaveAs(vedleggAdresse);

                                Debug.WriteLine(fil.FileName);

                                filListe += System.Environment.NewLine + hjelpefiladresse;
                                vedleggteller++;
                            }
                        }
                    }

                    // loggfør valgt dokument for statistikk
                    var basePath = Paths.UNC_ADDRESS + Paths.PORTAL_LOG;

                    if (sak == Mappetype.Sykefravær)
                    {
                        basePath += $@"Sykefravær\";
                    }
                    else if (sak == Mappetype.Ansattforhold)
                    {
                        basePath += $@"Ansattforhold\";
                    }

                    var logContent = $"{journalpostnavn}{System.Environment.NewLine}";
                    System.IO.File.AppendAllText(basePath + $"{DateTime.Now.ToString("dd.MM.yyyy")}.txt", logContent);

                    // opprett hjelpfiler for robot
                    System.IO.File.WriteAllText($"{opplastingsmappe}{HelperFile.FILE_LIST}", filListe);
                    var lederInfoResult = ADHelper.GetLederBundle(GetUsername());

                    if (lederInfoResult.Success)
                    {
                        var hrmLederInfo    = lederInfoResult.Get();
                        var websakLederInfo = HardCodeDB.TryCorrect(hrmLederInfo); // må håndtere avvik mellom navn i WebSak og HRM

                        SaveFile(HelperFile.MANAGER_AD, websakLederInfo.AD);
                        SaveFile(HelperFile.DEPARTMENT, websakLederInfo.Enhet);         // enhet for å sette riktig saksbehandler  i WebSak
                        //-------------------------------------//
                        SaveFile(HelperFile.MANAGER_EMAIL, hrmLederInfo.EPost);         // e-postadresse til leder for evt. e-postvarsel fra robot (den som laster opp)
                        SaveFile(HelperFile.FOLDER_TYPE, _websakMapper[sak]);           // hvilken sakstype roboten skal opprette under 'Ny sak' i WebSak
                        SaveFile(HelperFile.DATE, DateTime.Now.ToString("dd/MM/yyyy")); // dato dokumentet ble lastet opp
                        SaveFile(HelperFile.POST_NAME, journalpostnavn);

                        // prøv å finne ansattinfo i HRM-databasen slik at roboten slipper å åpne HRM-programmet
                        // sparer tid og er mer stabilt
                        var personnrResult = HRMHelper.FinnPersonnrForAnsatt(ansatt);
                        if (personnrResult.Success)
                        {
                            SaveFile(HelperFile.EMPLOYEE_NAME, $"{ansatt.Etternavn} {ansatt.Fornavn}");
                            SaveFile(HelperFile.SSIN, personnrResult.Get());
                            SaveFile(HelperFile.EMPLOYEE_ID, ansatt.AnsattNr);
                        }
                        else
                        {
                            SaveFile(HelperFile.EMPLOYEE_ID, ansatt.AnsattNr);
                            SaveFile(HelperFile.HRM_ERROR, personnrResult.Message); // lagre feilmelding i egen fil
                        }

                        if (sendCopy)
                        {
                            SaveFile(HelperFile.SVARUT, "NULL");
                        }

                        // skriv tillegsshjelpefiler til disk
                        if (helperFiles != null)
                        {
                            foreach (var file in helperFiles)
                            {
                                SaveFile(file.Key, file.Value);
                            }
                        }

                        void SaveFile(string name, string content)
                        {
                            System.IO.File.WriteAllText($"{opplastingsmappe}{name}", content, Encoding.UTF8);
                        }

                        Imposter.UndoImpersonation();

                        var msg = $"Notatet '{hoveddokument.FileName}' og {vedleggteller} vedlegg har blitt lastet opp!";
                        return(new Response <string>(opplastingsmappe, msg, Codes.Code.OK));
                    }
                    else
                    {
                        Imposter.UndoImpersonation();
                        return(new Response <string>(null, lederInfoResult.Message, Codes.Code.ERROR));
                    }
                }
                else
                {
                    var msg = $"Feil: Hoveddokumentet '{hoveddokument.FileName}' var ikke i pdf-format.";
                    return(new Response <string>(null, msg, Codes.Code.ERROR));
                }
            }

            catch (Exception e)
            {
                Imposter.UndoImpersonation();
                //if (_writeLog)
                //    System.IO.File.AppendAllText(@"C:\inetpub\logs\error.txt", $"{GetUsername()} {e.Message}{System.Environment.NewLine}"); // for debugging
                //Logger.Log();
                return(new Response <string>(null, e.Message, Codes.Code.ERROR));
            }
        }
Exemple #5
0
        public async Task <ActionResult> MakeEsignatureJob(IEnumerable <string> mottakere, int dokID, bool selfSign, string fornavn = null, string etternavn = null, HttpPostedFileBase arbeidsavtale = null, bool sendConfirmation = false)
        {
            if (Session["ansatt"] != null)
            {
                ViewBag.AnsattNr = GetAnsattFromSession().AnsattNr;
            }
            else
            {
                TempData["statusCode"] = (int)Codes.Code.ERROR;
                TempData["errorMsg"]   = StringConstants.ERROR_GENERIC;
                return(RedirectToAction("Index", "Signeringsportal", null));
            }

            Imposter.ImpersonateRobot();
            var currentPersonnr = ""; // ta vare på personnr i tilfelle en feil oppstår

            try
            {
                // hvis serveren ikke klarer å laste ned dokumentet fra drive (feil med robotpassord el.),
                // bruke lokale kopier
                var    fileName = _dokumentNavn[dokID];
                byte[] docBytes;

                if (dokID == 0 && arbeidsavtale != null)
                {
                    if (arbeidsavtale.ContentType.Equals("application/pdf"))
                    {
                        MemoryStream target = new MemoryStream();
                        arbeidsavtale.InputStream.CopyTo(target);
                        docBytes = target.ToArray();
                    }
                    else
                    {
                        var msg = $"Feil: Hoveddokumentet '{arbeidsavtale.FileName}' var ikke i pdf-format.";
                        ViewBag.Response = new Response <bool>(false, msg, Codes.Code.ERROR);
                        return(View());
                    }
                }
                else
                {
                    var res = GoogleDriveDownloader.DownloadDocs(_avtaleURLs[dokID], false);
                    if (res.Success)
                    {
                        docBytes = res.Get();
                    }
                    else
                    {
                        ViewBag.Response = new Response <bool>(false, res.Message, res.Code);
                        return(View());
                    }
                }
                var documentToSign = new Document(fileName, StringConstants.SIGN_REQUEST, FileType.Pdf, docBytes);
                var signers        = new List <Signer>();
                var hjelperfiler   = new Dictionary <string, string>(); // hjelpefiler som skal skrives til disk senere

                // legg til mottakere
                foreach (var personnr in mottakere)
                {
                    if (personnr.Equals(HRMHelper.HRM_FLAG))
                    {
                        // bruker en ansatt, fødselsnummer skal hentes fra HRM
                        var personnrResponse = HRMHelper.FinnPersonnrForAnsatt(GetAnsattFromSession());
                        if (personnrResponse.Success)
                        {
                            signers.Add(new Signer(new PersonalIdentificationNumber(personnrResponse.Get()), new NotificationsUsingLookup()
                            {
                                SmsIfAvailable = true
                            }));
                            continue;
                        }
                        else
                        {
                            ViewBag.Response = new Response <bool>(false, personnrResponse.Message, Codes.Code.ERROR);
                            return(View());
                        }
                    }

                    else if (fornavn != null && etternavn != null)
                    {
                        currentPersonnr = personnr;
                        signers.Add(new Signer(new PersonalIdentificationNumber(personnr), new NotificationsUsingLookup()
                        {
                            SmsIfAvailable = true
                        }));
                        hjelperfiler.Add(HelperFile.EMPLOYEE_NAME, $"{etternavn} {fornavn}");
                        hjelperfiler.Add(HelperFile.SSIN, personnr);

                        // innlogget bruker settes automatisk som nærmeste leder/saksbehandler i WebSak
                        hjelperfiler.Add(HelperFile.MANAGER_AD, GetUsername()); // hvis fødselsnummeret ikke er i HRM antas det at det er nærmeste leder som lastet opp, og AD settes til innlogget bruker
                    }
                    else
                    {
                        ViewBag.Response = new Response <bool>(false, StringConstants.ERROR_MISSING_NAME, Codes.Code.ERROR);
                        return(View());
                    }
                }

                // hvis bruker skal motta varsel på e-post når dokumentet har blitt signert og arkivert i WebSak
                if (sendConfirmation)
                {
                    hjelperfiler.Add(HelperFile.ARCHIVE_CONFIRMATION, "true");
                }

                // finn leders fødselsnummer hvis leder også skal signere
                // leder SKAL ALLTID signere på arbeidskontrakt
                if (selfSign || dokID == 0)
                {
                    var lederInfoResponse = ADHelper.GetAnsattInfoForLeder(GetUsername());
                    if (lederInfoResponse.Success)
                    {
                        var personnrResponse = HRMHelper.FinnPersonnrForAnsatt(lederInfoResponse.Get());

                        if (personnrResponse.Success)
                        {
                            // setter onBehalfOf.other for å ikke havne i leders private postkasse
                            signers.Add(new Signer(new PersonalIdentificationNumber(personnrResponse.Get()), new Notifications(new Email(lederInfoResponse.Get().AnsattEPost)))
                            {
                                OnBehalfOf = OnBehalfOf.Other
                            });
                        }
                        else
                        {
                            ViewBag.Response = new Response <bool>(false, personnrResponse.Message, Codes.Code.ERROR);
                            return(View());
                        }
                    }
                    else
                    {
                        ViewBag.Response = new Response <bool>(false, lederInfoResponse.Message, Codes.Code.ERROR);
                        return(View());
                    }
                }


                // lag en unik kø-id for dette signeringsoppdraget
                var queueID      = GetUsername() + DateTime.Now.ToShortDateString() + "." + DateTime.Now.ToLongTimeString();
                var portalClient = new CustomPortalClient(queueID, fileName);

                hjelperfiler.Add(HelperFile.SIGNATURE_STATUS, "false"); // hjelpefil som sier noe om status på signeringsoppdrag (false er usignert)
                // ta vare på referansen til dette signeringsoppdraget for å kunne polle senere
                hjelperfiler.Add(HelperFile.REFERENCE, portalClient.GetReference());

                // lagre filene til disk mens vi venter på signaturen
                var response = SaveFilesToDisk(new NotatFil(docBytes, fileName), null, fileName, $"{fileName}{Datotype.Signaturdato}", 1, false, hjelperfiler);

                if (response.Success)
                {
                    var portalJob = new Job(documentToSign, signers, queueID)
                    {
                        IdentifierInSignedDocuments = IdentifierInSignedDocuments.Name
                    };                                                                                                                            // fødselsnummer skal ikke vises i det signerte dokumentet

#if !DEBUG
                    await portalClient.Create(portalJob);
#endif
                    var responseString = string.Format(StringConstants.ESIGN_SUCCESS, signers.Count() + (signers.Count() == 1 ? " mottaker" : " mottakere"));
                    ViewBag.Response = new Response <bool>(true, responseString, Codes.Code.OK);
                }
                else
                {
                    ViewBag.Response = new Response <bool>(false, response.Message, Codes.Code.ERROR);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("The Pattern constraint failed"))
                {
                    ViewBag.Response = new Response <bool>(false, string.Format(StringConstants.INVALID_SSN, currentPersonnr), Codes.Code.ERROR);
                }
                else
                {
                    ViewBag.Response = new Response <bool>(false, ex.Message, Codes.Code.ERROR);
                }
            }
            Imposter.UndoImpersonation();

            return(View());
        }
        public ActionResult VelgDokument(string identifikator)
        {
            ViewBag.Message = $"Logget inn som {User.Identity.Name}";
            Response <Bundles.AnsattInfo> ansattResponse;

            ViewBag.DocID = Session["docID"];

            if (identifikator.Equals("-1"))
            {
                ViewBag.Ansattnr = identifikator;
                ansattResponse   = new Response <Bundles.AnsattInfo>(Bundles.AnsattInfo.Skipped, null, Codes.Code.OK);
                return(Success(ansattResponse.Get()));
            }
            else if (identifikator.StartsWith("!") && AnsattHelper.IsUserSuper(GetLoggedInUserAD()))
            {
                // testbrukere
                var ansattnr = identifikator.Substring(1, identifikator.Length - 1);
                ansattResponse   = AnsattHelper.GetTestUser(ansattnr, GetLoggedInUserAD());
                ViewBag.Ansattnr = ansattnr;
            }
            else if (identifikator.Contains("@")) // anta e-postadresse
            {
                ansattResponse = ADHelper.GetADBrukerForEpost(identifikator);
            }
            else if (long.TryParse(identifikator, out long idNummer)) // et nummer - altså ansattnr. eller personnr.
            {
                if (idNummer > 99999)
                {
                    ansattResponse = HRMHelper.FinnAnsatt(identifikator);
                }
                else
                {
                    ansattResponse = ADHelper.GetADBruker((int)idNummer);
                }
            }
            else
            {
                return(Failure(Codes.Code.ERROR, $"Ugyldig identifikator oppgitt: '{identifikator}'"));
            }

            if (ansattResponse.Success)
            {
                var ansatt     = ansattResponse.Get();
                var authResult = IsLoggedInUserEntitled(ansatt);
                if (authResult.Get())
                {
                    return(Success(ansatt));
                }
                else
                {
                    // Gjør oppslag i HRM for å finne alle ledere for denne ansatte
                    var lederResponse = HRMHelper.FinnLedereForAnsatt(ansatt.Fornavn, ansatt.Etternavn, ansatt.AnsattNr);

                    if (lederResponse.Success)
                    {
                        ansatt.Lederliste = lederResponse.Get();

                        authResult = IsLoggedInUserEntitled(ansatt);
                        if (authResult.Success)
                        {
                            if (authResult.Get())
                            {
                                return(Success(ansatt));
                            }
                            else
                            {
                                return(Failure(authResult.Code, authResult.Message));
                            }
                        }
                        else
                        {
                            return(Failure(authResult.Code, authResult.Message));
                        }
                    }
                    else
                    {
                        return(Failure(authResult.Code, authResult.Message));
                    }
                }
            }
            else
            {
                return(Failure(ansattResponse.Code, ansattResponse.Message));
            }
        }
        public async Task <ActionResult> EditUser(EditUserViewModel model)
        {
            var Roleslist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem {
                Value = rr.Name.ToString(), Text = rr.Name
            }).ToList();

            ViewBag.Roles = Roleslist;
            List <UserEntity> RoleManagers = UserServices.GetUserByRoleName("Manager");
            List <UserEntity> RoleAdmins   = UserServices.GetUserByRoleName("Admin");

            RoleManagers.AddRange(RoleAdmins);
            ViewBag.Manager      = RoleManagers;
            ViewBag.Designations = UserServices.GetAllDesignations();
            if (ModelState.IsValid)
            {
                UserEntity UserObj = UserServices.GetUserByID(model.UserId);
                if (UserObj != null)
                {
                    try
                    {
                        ApplicationUser User = await UserManager.FindByNameAsync(UserObj.UserName);

                        IList <string> UserRoles = await UserManager.GetRolesAsync(User.Id);

                        foreach (var role in UserRoles)
                        {
                            await UserManager.RemoveFromRoleAsync(User.Id, role);
                        }
                        await UserManager.AddToRoleAsync(User.Id, model.Role);

                        if (model.Password != null)
                        {
                            UserStore <ApplicationUser> store = new UserStore <ApplicationUser>(context);
                            String          hashedNewPassword = UserManager.PasswordHasher.HashPassword(model.Password);
                            ApplicationUser cUser             = await store.FindByIdAsync(User.Id);

                            await store.SetPasswordHashAsync(cUser, hashedNewPassword);

                            await store.UpdateAsync(cUser);
                        }

                        UserObj.Name          = model.Name;
                        UserObj.Email         = model.Email;
                        UserObj.PersonalEmail = model.PersonalEmail;
                        UserObj.ManagerId     = model.ManagerId;
                        UserObj.DesignationId = model.DesignationId;
                        UserObj.ContactNo     = model.ContactNo;
                        UserObj.Address       = model.Address;
                        UserObj.Salary        = model.Salary;
                        UserObj.DOJ           = model.DOJ;
                        UserObj.DOR           = model.DOR;
                        UserObj.DOB           = model.DOB;
                        //Speial Case For Admin by UserName
                        if (UserObj.UserName == "Admin")
                        {
                            UserObj.Status = true;
                        }
                        else
                        {
                            UserObj.Status = model.Status;
                        }
                        int x = UserServices.InsertUpdateUser(UserObj);
                        if (x > 0)
                        {
                            TempData[HRMWeb.Helpers.AlertStyles.Success] = UserObj.UserName + " is Updated Successfully.";
                        }

                        try
                        {
                            if (Request.Files.Count > 0)
                            {
                                var file = Request.Files[0];

                                if (file != null && file.ContentLength > 0)
                                {
                                    string FileExtention = Path.GetExtension(file.FileName);
                                    string NewFileName   = UserObj.UserId.ToString() + FileExtention;
                                    string path          = HRMHelper.GetUserDirectory();
                                    path = Path.Combine(path, NewFileName);
                                    file.SaveAs(path);
                                    path          = path.Replace(Server.MapPath("~"), "");
                                    path          = path.Replace("\\", "/");
                                    UserObj.Image = path;
                                    int y = UserServices.InsertUpdateUser(UserObj);
                                    if (y > 0)
                                    {
                                        model.Image = path;
                                    }
                                }
                            }
                        }
                        catch { }
                    }
                    catch
                    {
                        TempData[HRMWeb.Helpers.AlertStyles.Warning] = "Updation Fails";
                    }
                }
            }
            if (model.Image == null)
            {
                model.Image = string.Empty;
            }
            return(View(model));
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            var Roleslist = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem {
                Value = rr.Name.ToString(), Text = rr.Name
            }).ToList();

            ViewBag.Roles = Roleslist;
            List <UserEntity> RoleManagers = UserServices.GetUserByRoleName("Manager");
            List <UserEntity> RoleAdmins   = UserServices.GetUserByRoleName("Admin");

            RoleManagers.AddRange(RoleAdmins);
            ViewBag.Manager      = RoleManagers;
            ViewBag.Designations = UserServices.GetAllDesignations();
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser()
                {
                    UserName = model.UserName
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    UserEntity ob = new UserEntity();
                    ob.UserName      = user.UserName;
                    ob.Name          = model.Name;
                    ob.Status        = model.Status;
                    ob.Guid          = user.Id;
                    ob.Email         = model.Email;
                    ob.PersonalEmail = model.PersonalEmail;
                    ob.DesignationId = model.DesignationId;
                    ob.ContactNo     = model.ContactNo;
                    ob.Address       = model.Address;
                    ob.Salary        = model.Salary;
                    ob.ManagerId     = model.ManagerId;
                    ob.DOB           = model.DOB;
                    ob.DOJ           = model.DOJ;
                    ob.DOR           = model.DOR;
                    ob.UserId        = UserServices.InsertUpdateUser(ob);
                    if (ob.UserId > 0)
                    {
                        TempData[HRMWeb.Helpers.AlertStyles.Success] = model.UserName + " is Successfully added";
                        UserManager.AddToRole(user.Id, model.Role);
                    }
                    else
                    {
                        var tempUser = UserManager.FindByName(model.UserName);
                        await UserManager.DeleteAsync(tempUser);
                    }
                    //await SignInAsync(user, isPersistent: false);
                    //return RedirectToAction("Index", "Home");

                    try
                    {
                        if (Request.Files.Count > 0)
                        {
                            var file = Request.Files[0];

                            if (file != null && file.ContentLength > 0)
                            {
                                string FileExtention = Path.GetExtension(file.FileName);
                                string NewFileName   = ob.UserId.ToString() + FileExtention;
                                string path          = HRMHelper.GetUserDirectory();
                                path = Path.Combine(path, NewFileName);
                                file.SaveAs(path);
                                path     = path.Replace(Server.MapPath("~"), "");
                                path     = path.Replace("\\", "/");
                                ob.Image = path;
                                UserServices.InsertUpdateUser(ob);
                            }
                        }
                    }
                    catch { }
                    model = new RegisterViewModel();
                }
                else
                {
                    string error = "";
                    foreach (string item in result.Errors)
                    {
                        error += item + "\n";
                    }
                    TempData[HRMWeb.Helpers.AlertStyles.Danger] = error;
                    //AddErrors(result);
                }
            }
            // If we got this far, something failed, redisplay form
            return(View(model));
        }