public async Task <UploadingProgress> CreateProgressAsync(string fileName, string userID) { var progress = new UploadingProgress() { StartDate = DateTime.Now, UserId = userID, FileName = Path.GetFileNameWithoutExtension(fileName), Percent = 0, IsCompleted = false }; _db.UploadProgress.Add(progress); await _db.SaveChangesAsync(); return(progress); }
public void StartImport(UploadingProgress progress, DocumentType type, string filePath, string userID) { try { switch (type) { case DocumentType.AdministrativePractice: ImportAdministrativePractice(progress, filePath, userID); break; case DocumentType.TemporaryResidencePermit: break; case DocumentType.Residence: break; case DocumentType.Citizenship: ImportСitizenship(progress, filePath, userID); break; default: break; } } catch (Exception ex) { progress.HasErrors = true; progress.ExceptionMessage = ex.Message; throw; } finally { progress.IsCompleted = true; progress.EndDate = DateTime.Now; _db.SaveChanges(); } }
private void ImportСitizenship(UploadingProgress progress, string filePath, string userid) { var table = ReadCSVTable(filePath, ';', new string[] { "Рег.номер", "Тип дела", "Дата приема", "Основание для приема", "ФИО", "Дата рождения", "Гражданство", "Тип документа", "Номер документа", "Адрес", "Решение", "Основание решения", "Дата решения", "Номер решения" }); DateTime birthday, date1, date2; var miscnames = _db.MiscNames.ToList(); var parameterFactNames = _db.PrmFactNames.ToList(); int i = 0; foreach (var row in table) { if (string.IsNullOrWhiteSpace(row["ФИО"])) { continue; } if (!DateTime.TryParseExact(row["Дата рождения"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthday)) { continue; } var m1 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Тип дела"), row["Тип дела"]); var m2 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Основание для приема"), row["Основание для приема"]); var m3 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Гражданство"), row["Гражданство"]); var m4 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Тип документа"), row["Тип документа"]); var m5 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Решение"), row["Решение"]); var m6 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Основание решения"), row["Основание решения"]); var person = GetOrCreatePerson(row["ФИО"], birthday, PersonCategory.Individual, PersonType.Applicant); var document = GetOrCreateDocument(person, DocumentType.Citizenship, NormalizeString(row["Рег.номер"]), userid); GetOrCreatePersonFact(false, person, parameterFactNames.Single(f => f.NameRu == "Гражданство"), null, m3.Id); GetOrCreatePersonFact(false, person, parameterFactNames.Single(f => f.NameRu == "Тип документа"), NormalizeString(row["Номер документа"]), m4.Id); GetOrCreatePersonFact(false, person, parameterFactNames.Single(f => f.NameRu == "Адрес"), NormalizeString(row["Адрес"])); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Тип дела"), null, m1.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Основание для приема"), null, m2.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Решение"), null, m5.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Основание решения"), null, m6.Id); if (DateTime.TryParseExact(row["Дата приема"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date1)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Дата приема"), null, null, null, date1); } if (DateTime.TryParseExact(row["Дата решения"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date2)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Дата решения"), null, null, null, date2); } i++; progress.Percent = (float)i / table.Count * 100; _db.SaveChanges(); } }
private void ImportAdministrativePractice(UploadingProgress progress, string filePath, string userid) { var table = ReadCSVTable(filePath, ';', new string[] { "ФИО", "Дата рождения", "Гражданство", "Категория лица", "Адрес регистрации", "Номер протокола", "Дата составления", "Статья", "Вид правонарушения", "Орган рассмотрения", "Статус дела", "Дата постановления", "Принятое решение", "Тип взыскания", "Сумма(начислено)", "Сумма(оплачено)" }); DateTime birthday, date1, date2; float sum1, sum2; var miscnames = _db.MiscNames.ToList(); var parameterFactNames = _db.PrmFactNames.ToList(); int i = 0; foreach (var row in table) { if (string.IsNullOrWhiteSpace(row["ФИО"])) { continue; } if (!DateTime.TryParseExact(row["Дата рождения"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthday)) { continue; } var m1 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Гражданство"), row["Гражданство"]); var m2 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Статья"), row["Статья"]); var m3 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Вид правонарушения"), row["Вид правонарушения"]); var m4 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Орган рассмотрения"), row["Орган рассмотрения"]); var m5 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Статус дела"), row["Статус дела"]); var m6 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Принятое решение"), row["Принятое решение"]); var m7 = GetOrCreateMisc(miscnames.Single(m => m.NameRu == "Тип взыскания"), row["Тип взыскания"]); var person = GetOrCreatePerson(row["ФИО"], birthday, row["Категория лица"] == "Физическое" ? PersonCategory.Individual : PersonCategory.Legal, row["Гражданство"] == "Россия" ? PersonType.Host : PersonType.Applicant); var document = GetOrCreateDocument(person, DocumentType.AdministrativePractice, NormalizeString(row["Номер протокола"]), userid); GetOrCreatePersonFact(false, person, parameterFactNames.Single(f => f.NameRu == "Гражданство"), null, m1.Id); GetOrCreatePersonFact(false, person, parameterFactNames.Single(f => f.NameRu == "Адрес"), NormalizeString(row["Адрес регистрации"])); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Статья"), null, m2.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Вид правонарушения"), null, m3.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Орган рассмотрения"), null, m4.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Статус дела"), null, m5.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Принятое решение"), null, m6.Id); GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Тип взыскания"), null, m7.Id); if (DateTime.TryParseExact(row["Дата составления"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date1)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Дата составления"), null, null, null, date1); } if (DateTime.TryParseExact(row["Дата постановления"], "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date2)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Дата постановления"), null, null, null, date2); } if (float.TryParse(row["Сумма(начислено)"], out sum1)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Сумма(начислено)"), null, null, sum1); } if (float.TryParse(row["Сумма(оплачено)"], out sum2)) { GetOrCreateDocumentParameter(false, document, parameterFactNames.Single(d => d.NameRu == "Сумма(оплачено)"), null, null, sum2); } i++; progress.Percent = (float)i / table.Count * 100; _db.SaveChanges(); } }