Beispiel #1
0
        public ActionResult OsobaHledat(string jmeno, string prijmeni, string narozen)
        {
            if (Framework.ApiAuth.IsApiAuth(this, "TeamMember").Authentificated)
            {
                DateTime?dt = ParseTools.ToDateTime(narozen
                                                    , "yyyy-MM-dd");
                if (dt.HasValue == false)
                {
                    return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(
                                       new { error = "invalid date format. Use yyyy-MM-dd format." }
                                       ), "application/json"));
                }
                var found = Osoba.GetAllByNameAscii(jmeno, prijmeni, dt.Value)
                            .Select(o => new osobaResult(o))
                            .ToArray();

                return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(
                                   new { Total = found.Count(), Result = found }
                                   ), "application/json"));
            }
            else
            {
                return(View("Error401"));
            }
        }
Beispiel #2
0
        public ActionResult FindOsobaId(string jmeno, string prijmeni, string narozeni)
        {
            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("jmeno", jmeno),
                new Framework.ApiCall.CallParameter("prijmeni", prijmeni),
                new Framework.ApiCall.CallParameter("narozeni", narozeni)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                DateTime?dt = ParseTools.ToDateTime(narozeni, "yyyy-MM-dd");
                if (dt.HasValue == false)
                {
                    var status = ApiResponseStatus.InvalidFormat;
                    status.error.errorDetail = "invalid date format for parameter 'narozeni'. Use yyyy-MM-dd format.";
                    return(Json(status, JsonRequestBehavior.AllowGet));
                }

                var found = HlidacStatu.Lib.StaticData.Politici.Get()
                            .Where(o =>
                                   string.Equals(o.Jmeno, jmeno, StringComparison.OrdinalIgnoreCase) &&
                                   string.Equals(o.Prijmeni, prijmeni, StringComparison.OrdinalIgnoreCase) &&
                                   o.Narozeni == dt.Value)
                            .FirstOrDefault();
                if (found == null) //try without diacritics
                {
                    string jmenoasc    = Devmasters.Core.TextUtil.RemoveDiacritics(jmeno);
                    string prijmeniasc = Devmasters.Core.TextUtil.RemoveDiacritics(prijmeni);
                    found = HlidacStatu.Lib.StaticData.Politici.Get()
                            .Where(o =>
                                   string.Equals(o.JmenoAscii, jmenoasc, StringComparison.OrdinalIgnoreCase) &&
                                   string.Equals(o.PrijmeniAscii, prijmeniasc, StringComparison.OrdinalIgnoreCase) &&
                                   o.Narozeni == dt.Value)
                            .FirstOrDefault();
                }

                if (found == null)
                {
                    return(Json(new { }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new
                    {
                        Jmeno = found.Jmeno,
                        Prijmeni = found.Prijmeni,
                        Narozeni = found.Narozeni.Value.ToString("yyyy-MM-dd"),
                        OsobaId = found.NameId
                    }
                                , JsonRequestBehavior.AllowGet));
                }
            }
        }
        public ActionResult HledejOsoby(string jmeno, string prijmeni, string narozeni)
        {
            DateTime?nar   = ParseTools.ToDateTime(narozeni, "yyyy-MM-dd");
            var      osoby = Osoba.GetAllByName(jmeno, prijmeni, nar);

            if (osoby.Count() == 0)
            {
                osoby = Osoba.GetAllByNameAscii(jmeno, prijmeni, nar);
            }

            return(View(osoby));
        }
Beispiel #4
0
        private DateTime ParseDate(string value)
        {
            var dat = ParseTools.ToDateTime(value, "d. M. yyyy");

            if (dat.HasValue)
            {
                return(dat.Value);
            }

            TULogger.Error($"KB: chybejici datum pro ucet {Ucet.CisloUctu}");
            throw new ApplicationException($"KB: chybejici datum pro ucet {Ucet.CisloUctu}");
        }
Beispiel #5
0
        public ActionResult Dump(string date)
        {
            if (Framework.ApiAuth.IsApiAuth(this, parameters: new Framework.ApiCall.CallParameter[] { new Framework.ApiCall.CallParameter("Dump", date) }).Authentificated)
            {
                HlidacStatu.Util.Consts.Logger.Info(new Devmasters.Core.Logging.LogMessage()
                                                    .SetMessage("Downloading smlouvy.dump.zip")
                                                    .SetCustomKeyValue("UserId", this.User.Identity.Name)
                                                    );

                DateTime?specificDate = ParseTools.ToDateTime(date, "yyyy-MM-dd");
                string   onlyfile     = "smlouvy.dump" + (specificDate.HasValue ? "-" + specificDate.Value.ToString("yyyy-MM-dd") : "");
                string   fn           = HlidacStatu.Lib.StaticData.App_Data_Path + $"dump\\{onlyfile}" + ".zip";
                if (System.IO.File.Exists(fn))
                {
                    long   FileL = (new FileInfo(fn)).Length;
                    byte[] bytes = new byte[1024 * 1024];
                    Response.Clear();
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("content-disposition", "attachment; filename=" + System.IO.Path.GetFileName(fn));
                    Response.AddHeader("Content-Length", FileL.ToString());
                    try
                    {
                    }
                    catch (System.Web.HttpException wex)
                    {
                        if (wex.Message.StartsWith("The remote host closed the connection"))
                        {
                            //ignore
                        }
                        else
                        {
                            HlidacStatu.Util.Consts.Logger.Error("DUMP?" + date, wex);
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    using (FileStream FS = System.IO.File.OpenRead(fn))
                    {
                        int bytesRead = 0;
                        while ((bytesRead = FS.Read(bytes, 0, bytes.Length)) > 0)
                        {
                            Response.OutputStream.Write(bytes, 0, bytesRead);
                            Response.Flush();
                        }
                        ;

                        Response.Flush();
                    }
                    //Response.Close();
                    Response.End();
                    return(null);
                    //return File(fn, "application/zip");
                }
                else
                {
                    return(new HttpStatusCodeResult(404));
                }
            }
            else
            {
                return(new HttpStatusCodeResult(401));
            }
        }
Beispiel #6
0
        protected override IEnumerable <IBankovniPolozka> DoParse(DateTime?fromDate = null, DateTime?toDate = null)
        {
            var polozky    = new List <IBankovniPolozka>();
            var onPage     = new List <IBankovniPolozka>();
            var currentUrl = Ucet.Url;

            do
            {
                onPage = new List <IBankovniPolozka>();

                using (var url = new URLContent(currentUrl))
                {
                    url.Referer          = Ucet.Url;
                    url.IgnoreHttpErrors = true;
                    var s    = url.GetContent(Encoding.UTF8).Text;
                    var doc  = new XPath(s);
                    var rows = doc.GetNodes("//table[@id='transparentAccountTable']/tbody/tr")
                               ?? doc.GetNodes("//tr")
                               ?? new List <HtmlNode>();

                    foreach (var row in rows)
                    {
                        var cols = row.ChildNodes.Where(n => n.Name == "td").Select(n => n.InnerHtml).ToArray();
                        var p    = new SimpleBankovniPolozka();
                        p.CisloUctu = Ucet.CisloUctu;
                        var date = ParseTools.ToDateTime(cols[0], "d.M.yyyy");
                        if (!date.HasValue || (fromDate.HasValue && date.Value < fromDate.Value) || (toDate.HasValue && date.Value > toDate.Value))
                        {
                            continue;                             //skip this, it's not row with data
                        }
                        p.Datum = date.Value;

                        var parts = cols[1].Split(new string[] { "</br>", "<br>" }, StringSplitOptions.None)?.Select(v => WebUtility.HtmlDecode(v)).ToArray() ?? new string[] { "" };
                        p.NazevProtiuctu = TextUtil.NormalizeToBlockText(WebUtility.HtmlDecode(parts[0]));

                        if (parts.Length == 3)
                        {
                            p.ZpravaProPrijemce = TextUtil.NormalizeToBlockText(parts[2]);
                        }

                        p.VS = TextUtil.NormalizeToBlockText(cols[3]);
                        if (p.VS.Contains("---------"))
                        {
                            p.VS = "";
                        }


                        p.Castka = ParseTools.ToDecimal(
                            WebUtility.HtmlDecode(cols[4])
                            .Replace(" CZK", "")
                            .Replace(" ", "")
                            ).Value;
                        p.ZdrojUrl = Ucet.Url;

                        onPage.Add(p);
                    }
                    polozky.AddRange(onPage);

                    var lineWithLastTransactionDate = s.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("lastTransactionDate"));
                    if (lineWithLastTransactionDate != null)
                    {
                        var parts = lineWithLastTransactionDate.Trim().Split(':');
                        if (parts.Length >= 2)
                        {
                            var lastTransactionDate = parts[1].Replace("'", "").Trim();
                            currentUrl = $"https://transparentniucty.moneta.cz/homepage?p_p_id=TransparentAccountPortlet_WAR_monetaportletsportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=serveTableData&p_p_cacheability=cacheLevelPage&p_p_col_id=column-8&p_p_col_count=1&_TransparentAccountPortlet_WAR_monetaportletsportlet_accountNumber={Ucet.CisloUctu.Replace("/0600", "")}&_TransparentAccountPortlet_WAR_monetaportletsportlet_reverse=NORMAL&_TransparentAccountPortlet_WAR_monetaportletsportlet_transactionNumber=1&_TransparentAccountPortlet_WAR_monetaportletsportlet_transactionDate={lastTransactionDate}&_={(long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds}";
                        }
                    }
                }
            } while (onPage.Count > 0);

            return(polozky);
        }
            public Osoba Save(string user)
            {
                Osoba o = null;
                var   t = this;

                DateTime?narozeni = ParseTools.ToDateTime(t.Narozeni, "yyyy-MM-dd");

                //find existing
                if (this.Id > 0)
                {
                    o = Osoby.GetById.Get(this.Id);
                }
                else if (narozeni.HasValue == false)
                {
                    return(null);
                }
                if (o == null)
                {
                    o = Osoba.GetByName(t.Jmeno, t.Prijmeni, narozeni.Value);
                }
                if (o == null)
                {
                    o = Osoba.GetByNameAscii(t.Jmeno, t.Prijmeni, narozeni.Value);
                }

                if (o == null)
                {
                    o = new Data.Osoba();
                }

                o.Pohlavi  = (t.Gender == gender.Žena) ? "f" : "m";
                o.Jmeno    = t.Jmeno;
                o.Narozeni = narozeni.Value;
                o.Umrti    = ParseTools.ToDateTime(t.Umrti, "yyyy-MM-dd");
                o.Prijmeni = t.Prijmeni;
                o.Status   = (int)t.Status;
                o.NameId   = t.NameId;
                o.Save();

                foreach (var e in t.Event)
                {
                    OsobaEvent ev = new OsobaEvent();
                    ev.pk         = e.pk;
                    ev.Organizace = e.Organizace;
                    ev.AddInfoNum = e.AddInfoNum;
                    ev.DatumOd    = ParseTools.ToDateTime(e.DatumOd, "yyyy-MM-dd");
                    ev.DatumDo    = ParseTools.ToDateTime(e.DatumDo, "yyyy-MM-dd");
                    ev.Note       = e.Note;
                    ev.Title      = e.Title;
                    ev.Type       = (int)e.Typ;
                    ev.AddInfo    = e.AddInfo;
                    ev.Zdroj      = e.Zdroj;
                    ev.OsobaId    = o.InternalId;
                    o.AddOrUpdateEvent(ev, user);
                }

                foreach (var v in t.Vazbyfirmy)
                {
                    if (!string.IsNullOrEmpty(v.VazbaKOsoba))
                    {
                        var os = Osoby.GetByNameId.Get(v.VazbaKOsoba);
                        if (os != null)
                        {
                            OsobaVazby.AddOrUpdate(o.InternalId, os.InternalId, (int)v.TypVazby, v.Popis, 0, ParseTools.ToDateTime(v.DatumOd, "yyyy-MM-dd"), ParseTools.ToDateTime(v.DatumDo, "yyyy-MM-dd"), v.Zdroj);
                        }
                    }
                    else
                    {
                        OsobaVazby.AddOrUpdate(o.InternalId, v.VazbaKIco, (int)v.TypVazby, v.Popis, 0, ParseTools.ToDateTime(v.DatumOd, "yyyy-MM-dd"), ParseTools.ToDateTime(v.DatumDo, "yyyy-MM-dd"), v.Zdroj);
                    }
                }
                return(o);
            }
Beispiel #8
0
        public ActionResult FindOsobaId(string jmeno, string prijmeni, string celejmeno, string narozeni, string funkce)
        {
            if (!Framework.ApiAuth.IsApiAuth(this,
                                             parameters: new Framework.ApiCall.CallParameter[] {
                new Framework.ApiCall.CallParameter("jmeno", jmeno),
                new Framework.ApiCall.CallParameter("prijmeni", prijmeni),
                new Framework.ApiCall.CallParameter("celejmeno", celejmeno),
                new Framework.ApiCall.CallParameter("narozeni", narozeni),
                new Framework.ApiCall.CallParameter("funkce", funkce)
            })
                .Authentificated)
            {
                //Response.StatusCode = 401;
                return(Json(ApiResponseStatus.ApiUnauthorizedAccess, JsonRequestBehavior.AllowGet));
            }
            else
            {
                DateTime?dt = ParseTools.ToDateTime(narozeni, "yyyy-MM-dd");
                if (dt.HasValue == false && string.IsNullOrEmpty(funkce))
                {
                    var status = ApiResponseStatus.InvalidFormat;
                    status.error.errorDetail = "invalid date format for parameter 'narozeni'. Use yyyy-MM-dd format.";
                    return(Json(status, JsonRequestBehavior.AllowGet));
                }

                if (string.IsNullOrEmpty(jmeno) && string.IsNullOrEmpty(prijmeni) && !string.IsNullOrEmpty(celejmeno))
                {
                    Lib.Data.Osoba osobaZeJmena = Lib.Validators.OsobaInText(celejmeno);
                    if (osobaZeJmena == null)
                    {
                        jmeno    = "";
                        prijmeni = "";
                    }
                    else
                    {
                        jmeno    = osobaZeJmena.Jmeno;
                        prijmeni = osobaZeJmena.Prijmeni;
                    }
                }
                if (string.IsNullOrEmpty(jmeno) || string.IsNullOrEmpty(prijmeni))
                {
                    var status = ApiResponseStatus.InvalidFormat;
                    status.error.errorDetail = "no data for parameter 'jmeno' or 'prijmeni' or 'celejmeno'.";
                    return(Json(status, JsonRequestBehavior.AllowGet));
                }

                IEnumerable <Lib.Data.Osoba> found = null;
                if (dt.HasValue)
                {
                    found = FindByDate(jmeno, prijmeni, dt);
                }
                else
                {
                    found = FindByFunkce(jmeno, prijmeni, funkce);
                }

                if (found == null || found?.Count() == 0)
                {
                    return(Json(new { }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    var f = found.First();
                    return(Json(new {
                        Jmeno = f.Jmeno,
                        Prijmeni = f.Prijmeni,
                        //Narozeni = found.Narozeni.Value.ToString("yyyy-MM-dd"),
                        OsobaId = f.NameId
                    }
                                , JsonRequestBehavior.AllowGet));
                }
            }
        }
Beispiel #9
0
        private IEnumerable <IBankovniPolozka> ParseStatement(string url)
        {
            var polozky = new HashSet <IBankovniPolozka>();

            using (var net = new Devmasters.Net.Web.URLContent(url))
            {
                net.IgnoreHttpErrors = true;
                var content = net.GetContent(Encoding.UTF8).Text;
                if (content.Contains("Některé pohyby nemusí být zobrazeny. Zmenšete datumový rozsah."))
                {
                    throw new StatementTooLongException();
                }
                var doc = new XPath(content);

                var xoverviewRows = "//div[contains(@class, 'pohybySum')]/table/tbody/tr";
                var overviewRows  = doc.GetNodes(xoverviewRows)?.Count ?? 0;
                if (overviewRows == 0)
                {
                    TULogger.Warning($"FIO: Account statement page was not found for account {Ucet.CisloUctu}. Account has been probably canceled. Url: {url}");
                    return(new List <IBankovniPolozka>());
                }

                var overview = new StatementOverview
                {
                    OpeningBalance = parseAmount(doc.GetNodeText(xoverviewRows + "/td[1]")),
                    FinalBalance   = parseAmount(doc.GetNodeText(xoverviewRows + "/td[2]")),
                    CreditSum      = parseAmount(doc.GetNodeText(xoverviewRows + "/td[3]")),
                    DebitSum       = parseAmount(doc.GetNodeText(xoverviewRows + "/td[4]"))
                };

                var xrows = "//table[@class='table' and starts-with(@id,'id')]/tbody/tr";
                var rows  = doc.GetNodes(xrows)?.Count ?? 0;
                for (var row = 1; row <= rows; row++)
                {
                    var xroot = xrows + "[" + row + "]";

                    var p = new SimpleBankovniPolozka
                    {
                        CisloUctu         = Ucet.CisloUctu,
                        Datum             = ParseTools.ToDateTime(doc.GetNodeText(xroot + "/td[1]"), "dd.MM.yyyy").Value,
                        Castka            = parseAmount(System.Net.WebUtility.HtmlDecode(doc.GetNodeText(xroot + "/td[2]"))),
                        PopisTransakce    = System.Net.WebUtility.HtmlDecode(doc.GetNodeText(xroot + "/td[3]")),
                        NazevProtiuctu    = System.Net.WebUtility.HtmlDecode(doc.GetNodeText(xroot + "/td[4]")),
                        ZpravaProPrijemce = Devmasters.Core.TextUtil.NormalizeToBlockText(
                            System.Net.WebUtility.HtmlDecode(doc.GetNodeHtml(xroot + "/td[5]"))
                            ?.Replace("<br>", " \n")
                            )
                    };

                    var poznamka = Devmasters.Core.TextUtil.NormalizeToBlockText(
                        System.Net.WebUtility.HtmlDecode(doc.GetNodeHtml(xroot + "/td[9]"))
                        ?.Replace("<br>", " \n")
                        );

                    if (poznamka != p.ZpravaProPrijemce)
                    {
                        p.ZpravaProPrijemce += " " + poznamka;
                    }

                    p.KS       = doc.GetNodeText(xroot + "/td[6]");
                    p.VS       = doc.GetNodeText(xroot + "/td[7]");
                    p.SS       = doc.GetNodeText(xroot + "/td[8]");
                    p.ZdrojUrl = net.Url;


                    p.CisloProtiuctu = ""; //neni k dispozici

                    if (!polozky.Contains(p))
                    {
                        polozky.Add(p);
                    }
                }

                ValidateParsedItems(polozky, overview);
            }

            return(polozky);
        }