Esempio n. 1
0
 public Lib.Data.Osoba Osoba()
 {
     if (_osoba == null)
     {
         _osoba = Data.Osoby.GetByNameId.Get(this.Item);
     }
     return(_osoba);
 }
Esempio n. 2
0
        public static List <Edge> vsechnyDcerineVazbyInternal(Lib.Data.Osoba person, int level, bool goDeep, Edge parent,
                                                              ExcludeDataCol excludeICO          = null, IEnumerable <int> excludeOsobaId = null, DateTime?datumOd = null, DateTime?datumDo = null,
                                                              Relation.AktualnostType aktualnost = Relation.AktualnostType.Libovolny)
        {
            if (excludeOsobaId == null)
            {
                excludeOsobaId = new int[] { }
            }
            ;

            string sql = @"select vazbakIco, vazbakOsobaId, datumOd, datumDo, typVazby, pojmenovaniVazby, podil from OsobaVazby 
                            where osobaId = @osobaId and
	(
		(datumOd <= @datumOd or @datumOd is null)
		OR (datumOd >= @datumOd and datumDo is null) 
	)
	and (datumDo >= @datumDo or datumDo is null or @datumDo is null)
";
            var    p   = new IDataParameter[] {
                new SqlParameter("osobaId", person.InternalId),
                new SqlParameter("datumOd", datumOd),
                new SqlParameter("datumDo", datumDo),
            };

            var relForPerson = GetChildrenRelations(sql, Node.NodeType.Person, person.InternalId.ToString(),
                                                    datumOd, datumDo,
                                                    p, level, goDeep, parent, excludeICO, aktualnost);

            var relForConnectedPersons = new List <Edge>();

            using (DbEntities db = new DbEntities())
            {
                var navazaneOsoby = db.OsobaVazby.Where(m => m.OsobaID == person.InternalId && m.VazbakOsobaId != null).ToList();
                if (navazaneOsoby.Count > 0)
                {
                    foreach (var ov in navazaneOsoby)
                    {
                        Edge parentRelFound = relForPerson
                                              .Where(r => r.To.Type == Node.NodeType.Person &&
                                                     r.To.Id == ov.VazbakOsobaId.Value.ToString())
                                              .FirstOrDefault();

                        if (!excludeOsobaId.Contains(ov.VazbakOsobaId.Value))
                        {
                            Osoba o = Osoby.GetById.Get(ov.VazbakOsobaId.Value);
                            excludeOsobaId = excludeOsobaId.Union(new int[] { ov.VazbakOsobaId.Value });
                            var rel = vsechnyDcerineVazbyInternal(o, level + 1, true, parentRelFound, excludeOsobaId: excludeOsobaId, aktualnost: aktualnost);
                            relForConnectedPersons = Edge.Merge(relForConnectedPersons, rel);
                        }
                    }
                }
            }

            var finalRel = Edge.Merge(relForConnectedPersons, relForPerson);

            return(finalRel);
        }
Esempio n. 3
0
        public OsobaStatistic(Data.Osoba o, Data.Relation.AktualnostType aktualnost, bool refresh = false)
        {
            this.Item       = o.NameId;
            this._osoba     = o;
            this.Aktualnost = aktualnost;

            osq = new OsobaStatisticQuery()
            {
                NameId = this.Item, Aktualnost = this.Aktualnost
            };

            if (refresh)
            {
                osobaStatcache.Delete(osq);
            }

            this.InitData();
        }
Esempio n. 4
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 = Devmasters.DT.Util.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.JmenoInText(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));
                }
            }
        }
Esempio n. 5
0
        public virtual string AddData(string data, string id, string createdBy, bool validateSchema = true, bool skipOCR = false)
        {
            Newtonsoft.Json.Linq.JObject obj = Newtonsoft.Json.Linq.JObject.Parse(data);
            dynamic objDyn = Newtonsoft.Json.Linq.JObject.Parse(data);

            if (validateSchema)
            {
                Newtonsoft.Json.Schema.JSchema schema = DataSetDB.Instance.GetRegistration(this.datasetId).GetSchema();

                if (schema != null)
                {
                    IList <string> errors;
                    if (!obj.IsValid(schema, out errors))
                    {
                        if (errors == null || errors?.Count == 0)
                        {
                            errors = new string[] { "", "" }
                        }
                        ;

                        throw DataSetException.GetExc(this.datasetId,
                                                      ApiResponseStatus.DatasetItemInvalidFormat.error.number,
                                                      ApiResponseStatus.DatasetItemInvalidFormat.error.description,
                                                      errors.Aggregate((f, s) => f + ";" + s)
                                                      );
                    }
                }
            }
            if (string.IsNullOrEmpty(id))
            {
                throw new DataSetException(this.datasetId, ApiResponseStatus.DatasetItemNoSetID);
            }

            if (objDyn.Id == null
                &&
                objDyn.id == null)
            {
                throw new DataSetException(this.datasetId, ApiResponseStatus.DatasetItemNoSetID);
            }
            else
            {
                id = objDyn.Id == null ? (string)objDyn.id : (string)objDyn.Id;
            }

            objDyn.DbCreated   = DateTime.UtcNow;
            objDyn.DbCreatedBy = createdBy;



            //check special HsProcessType
            var jobj   = (Newtonsoft.Json.Linq.JObject)objDyn;
            var jpaths = jobj
                         .SelectTokens("$..HsProcessType")
                         .ToArray();
            var jpathObjs = jpaths.Select(j => j.Parent.Parent).ToArray();

            if (this.DatasetId == DataSetDB.DataSourcesDbName) //don't analyze for registration of new dataset
            {
                jpathObjs = new JContainer[] { }
            }
            ;

            foreach (var jo in jpathObjs)
            {
                if (jo["HsProcessType"].Value <string>() == "person")
                {
                    var jmenoAttrName = jo.Children()
                                        .Select(c => c as JProperty)
                                        .Where(c => c != null)
                                        .Where(c => c.Name.ToLower() == "jmeno" ||
                                               c.Name.ToLower() == "name")
                                        .FirstOrDefault()?.Name;
                    var prijmeniAttrName = jo.Children()
                                           .Select(c => c as JProperty)
                                           .Where(c => c != null)
                                           .Where(c => c.Name.ToLower() == "prijmeni" ||
                                                  c.Name.ToLower() == "surname")
                                           .FirstOrDefault()?.Name;
                    var narozeniAttrName = jo.Children()
                                           .Select(c => c as JProperty)
                                           .Where(c => c != null)
                                           .Where(c => c.Name.ToLower() == "narozeni" ||
                                                  c.Name.ToLower() == "birthdate")
                                           .FirstOrDefault()?.Name;
                    var osobaIdAttrName = jo.Children()
                                          .Select(c => c as JProperty)
                                          .Where(c => c != null)
                                          .Where(c => c.Name.ToLower() == "osobaid")
                                          .FirstOrDefault()?.Name ?? "OsobaId";

                    var celejmenoAttrName = jo.Children()
                                            .Select(c => c as JProperty)
                                            .Where(c => c != null)
                                            .Where(c => c.Name.ToLower() == "celejmeno" ||
                                                   c.Name.ToLower() == "fullname")
                                            .FirstOrDefault()?.Name;


                    #region FindOsobaId
                    if (jmenoAttrName != null && prijmeniAttrName != null && narozeniAttrName != null)
                    {
                        if (string.IsNullOrEmpty(jo["OsobaId"]?.Value <string>()) &&
                            jo[narozeniAttrName] != null && jo[narozeniAttrName].Value <DateTime?>().HasValue
                            ) //pokud OsobaId je vyplnena, nehledej jinou
                        {
                            string osobaId   = null;
                            var    osobaInDb = Osoba.GetByName(
                                jo[jmenoAttrName].Value <string>(),
                                jo[prijmeniAttrName].Value <string>(),
                                jo[narozeniAttrName].Value <DateTime>()
                                );
                            if (osobaInDb == null)
                            {
                                osobaInDb = Osoba.GetByNameAscii(
                                    jo[jmenoAttrName].Value <string>(),
                                    jo[prijmeniAttrName].Value <string>(),
                                    jo[narozeniAttrName].Value <DateTime>()
                                    );
                            }

                            if (osobaInDb != null && string.IsNullOrEmpty(osobaInDb.NameId))
                            {
                                osobaInDb.NameId = osobaInDb.GetUniqueNamedId();
                                osobaInDb.Save();
                            }
                            osobaId       = osobaInDb?.NameId;
                            jo["OsobaId"] = osobaId;
                        }
                    }
                    else if (celejmenoAttrName != null && narozeniAttrName != null)
                    {
                        if (string.IsNullOrEmpty(jo["OsobaId"]?.Value <string>()) &&
                            jo[narozeniAttrName].Value <DateTime?>().HasValue
                            ) //pokud OsobaId je vyplnena, nehledej jinou
                        {
                            string         osobaId      = null;
                            Lib.Data.Osoba osobaZeJmena = Lib.Validators.OsobaInText(jo[celejmenoAttrName].Value <string>());
                            if (osobaZeJmena != null)
                            {
                                var osobaInDb = Osoba.GetByName(
                                    osobaZeJmena.Jmeno,
                                    osobaZeJmena.Prijmeni,
                                    jo[narozeniAttrName].Value <DateTime>()
                                    );

                                if (osobaInDb == null)
                                {
                                    osobaInDb = Osoba.GetByNameAscii(
                                        osobaZeJmena.Jmeno,
                                        osobaZeJmena.Prijmeni,
                                        jo[narozeniAttrName].Value <DateTime>()
                                        );
                                }

                                if (osobaInDb != null && string.IsNullOrEmpty(osobaInDb.NameId))
                                {
                                    osobaInDb.NameId = osobaInDb.GetUniqueNamedId();
                                    osobaInDb.Save();
                                }
                                osobaId = osobaInDb?.NameId;
                            }
                            jo["OsobaId"] = osobaId;
                        }
                    }

                    #endregion
                }
            }


            string   updatedData = Newtonsoft.Json.JsonConvert.SerializeObject(objDyn);
            PostData pd          = PostData.String(updatedData);

            var tres = client.LowLevel.Index <StringResponse>(client.ConnectionSettings.DefaultIndex, id, pd); //todo: es7 check

            if (tres.Success)
            {
                Newtonsoft.Json.Linq.JObject jobject = Newtonsoft.Json.Linq.JObject.Parse(tres.Body);

                string finalId = jobject.Value <string>("_id");

                //do DocumentMining after successfull save
                //record must exists before document mining
                bool needsOCR = false;
                if (skipOCR == false)
                {
                    foreach (var jo in jpathObjs)
                    {
                        if (jo["HsProcessType"].Value <string>() == "document")
                        {
                            if (jo["DocumentUrl"] != null && string.IsNullOrEmpty(jo["DocumentPlainText"].Value <string>()))
                            {
                                if (Uri.TryCreate(jo["DocumentUrl"].Value <string>(), UriKind.Absolute, out var uri2Ocr))
                                {
                                    //get text from document
                                    //var url = Devmasters.Core.Util.Config.GetConfigValue("ESConnection");
                                    //url = url + $"/{client.ConnectionSettings.DefaultIndex}/data/{finalId}/_update";
                                    //string callback = HlidacStatu.Lib.OCR.Api.CallbackData.PrepareElasticCallbackDataForOCRReq($"{jo.Path}.DocumentPlainText", false);
                                    //var ocrCallBack = new HlidacStatu.Lib.OCR.Api.CallbackData(new Uri(url), callback, HlidacStatu.Lib.OCR.Api.CallbackData.CallbackType.LocalElastic);
                                    //HlidacStatu.Lib.OCR.Api.Client.TextFromUrl(
                                    //    Devmasters.Core.Util.Config.GetConfigValue("OCRServerApiKey"),
                                    //    uri2Ocr, "Dataset+" + createdBy,
                                    //    HlidacStatu.Lib.OCR.Api.Client.TaskPriority.Standard, HlidacStatu.Lib.OCR.Api.Client.MiningIntensity.Maximum
                                    //    ); //TODOcallBackData: ocrCallBack);

                                    needsOCR = true;
                                }
                            }
                        }
                    }
                }
                if (needsOCR)
                {
                    Lib.Data.ItemToOcrQueue.AddNewTask(ItemToOcrQueue.ItemToOcrType.Dataset, finalId, this.datasetId, OCR.Api.Client.TaskPriority.Standard);
                }

                return(finalId);
            }
            else
            {
                var status = ApiResponseStatus.DatasetItemSaveError;
                if (tres.TryGetServerError(out var servererr))
                {
                    status.error.errorDetail = servererr.Error.ToString();
                }
                throw new DataSetException(this.datasetId, status);
            }

            //return res.ToString();
            //ElasticsearchResponse<string> result = this.client.Raw.Index(document.Index, document.Type, document.Id, documentJson);
        }