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")); } }
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)); }
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}"); }
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)); } }
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); }
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)); } } }
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); }