public async Task <IActionResult> GetFile() { try { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); var allCitDebtsLines = new string[10000000]; // while (true) //{ // if (DateTime.Now.AddHours(3).ToShortTimeString() == "09:58:00 aM") // { //List<string> fileNames = new List<string>(); //List<string[]> lstCloudFilesdata = new List<string[]>(); CloudStorageAccount storageAccount = CloudStorageAccount.Parse($"{configuration["ConnectionString1"]}"); CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); CloudFileShare fileShare = fileClient.GetShareReference("import"); //looks for a file share in the cloud bool fileShareExists = await fileShare.ExistsAsync(); if (fileShareExists) { List <CloudFile> lstCloudFiles = new List <CloudFile>(); CloudFileDirectory rootDir = fileShare.GetRootDirectoryReference(); List <string> sl = new List <string>(); DeptResults DeptResults = new DeptResults(); List <ErrorLines> ErrorLines = new List <ErrorLines>(); ErrorLines ErrorLine = new ErrorLines(); string bigfilename = "CitizenDebts_1M_3Big.txt"; string fileName = "CitizenDebts_1M_3.txt"; //"DEBTS_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; CloudFile file = rootDir.GetFileReference(fileName); string checkfile = bigfilename; //if the file exists bool asd = await file.ExistsAsync(); if (asd) { //adds new datasting array sl = await ReadDataAsync(file); if (sl is null) { //return NotFound(HttpStatusCode.NotFound + "\n" + "\nΣφάλμα\nΤο αρχείο δεν περιέχει σωστό αριθμό στηλών</b>"); Redirect(DeptResults.BillsCount = 0, DeptResults.NewUsers = 0, HttpStatusCode.NotFound.ToString(), null, "\n" + "\nΣφάλμα\nΤο αρχείο δεν περιέχει σωστό αριθμό στηλών</b>"); } } else { Redirect(DeptResults.BillsCount = 0, DeptResults.NewUsers = 0, HttpStatusCode.NotFound.ToString(), null, "\n" + "\nΣφάλμα\nΔεν βρέθηκε το αρχείο</b>"); // return NotFound(HttpStatusCode.NotFound+ "\n" + "\nΣφάλμα\nΔεν βρέθηκε το αρχείο</b>"); } Console.WriteLine("File into List " + DateTime.Now.ToString()); //foreach (string y in sl) //{ Console.WriteLine("From list new : " + y); }; string[] cols; for (int i = sl.Count - 1; i >= 0; i--) { cols = sl.ElementAt(i).Split(';'); if (cols[0].Trim().Length != 10 || !cols[0].All(char.IsDigit)) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος ΑΦΜ"; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); continue; //return NotFound(HttpStatusCode.NotFound + "\n" + "\nΣφάλμα Λάθος ΑΦΜ");} } if (cols[1].Trim().Length == 0) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Όνομα "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); //return NotFound(HttpStatusCode.NotFound + "\n" + "\nΣφάλμα Λάθος Όνομα "); } if (cols[2].Trim().Length == 0) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Επώνυμο "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } if (cols[3].Trim().Length == 0 || !Regex.IsMatch(cols[3], @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Email "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } if (cols[4].Trim().Length == 0 || !cols[4].All(char.IsDigit)) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Τηλέφωνο "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } if (cols[5].Trim().Length == 0) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Διεύθυσνη "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } if (cols[6].Trim().Length == 0) { sl.RemoveAt(i); return(NotFound(HttpStatusCode.NotFound + "\n" + "\nΣφάλμα Λάθος Περιοχή ")); } //!Regex.IsMatch(cols[7], @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$") if (cols[7].Trim().Length == 0) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Αρ.Λογαριασμού "; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } if (cols[8].Trim().Length == 0) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Περιγραφή Λογαριασμού"; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } decimal number; if (cols[9].Trim().Length == 0 || !Decimal.TryParse(cols[9], out number) || cols[9].Contains('.')) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Ποσό"; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } DateTime d; if (cols[10].Trim().Length == 0 || !DateTime.TryParseExact(cols[10], "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out d)) { ErrorLine.line = i; ErrorLine.ErrorMessage = "Σφάλμα Λάθος Ημερομηνία"; ErrorLine.LineString = sl[i]; ErrorLines.Add(ErrorLine); sl.RemoveAt(i); } } IEnumerable <CitizenDepts> o = from eachLine in ( from inner in sl select inner.Split(';') ) select new CitizenDepts { VAT = eachLine[0], FirstName = eachLine[1], LastName = eachLine[2], Email = eachLine[3], Phone = eachLine[4], Address = eachLine[5], County = eachLine[6], BillId = eachLine[7], Bill_description = eachLine[8], //Amount = Decimal.Parse(eachLine[9]), Amount = Decimal.Parse(eachLine[9], System.Globalization.CultureInfo.GetCultureInfo("el-GR")), DueDate = DateTime.ParseExact(eachLine[10], "yyyyMMdd", CultureInfo.InvariantCulture) }; Console.WriteLine("File splitted " + DateTime.Now.ToString()); var all = from c in _context.CitizenDepts select c; _context.CitizenDepts.RemoveRange(all); await _context.SaveChangesAsync(); Console.WriteLine("CitizenDept table deleted " + DateTime.Now.ToString()); foreach (var p in o) { _context.Add(p); } Console.WriteLine("Context filledup " + DateTime.Now.ToString()); await _context.SaveChangesAsync(); Console.WriteLine("Context saved to DB " + DateTime.Now.ToString()); //filter citizens NewCitizens = o. Where(x => !((_context.ApplicationUser.Any(y => y.VAT == x.VAT)) || (_context.ApplicationUser.Any(y => y.Email == x.Email)))) .Select(x => x).AsEnumerable(); Console.WriteLine("Citizens filterd " + DateTime.Now.ToString()); foreach (var p in NewCitizens) { Console.WriteLine(p.VAT + " , " + p.Email + " , " + p.LastName + " , " + p.Bill_description); } Console.WriteLine("Citizens log " + DateTime.Now.ToString()); //only new citizens foreach (var p in NewCitizens.Distinct()) { var user = new ApplicationUser { UserName = p.Email, Email = p.Email }; var TempPass = GeneratePassword(3, 3, 3, 3); // int lowercase, int uppercase, int numerics, int symbols Console.WriteLine(TempPass); var result = await _userManager.CreateAsync(user, TempPass); if (result.Succeeded) { if (checkfile != "CitizenDebts_1M_3.txt") { Console.WriteLine("Sending Emails"); SendMail(p.LastName, p.Email, TempPass); } var query = from UserUpd in _context.ApplicationUser where UserUpd.Email == p.Email select UserUpd; foreach (ApplicationUser UserUpd in query) { UserUpd.VAT = p.VAT; UserUpd.IsFirst = true; UserUpd.LastName = p.LastName; UserUpd.FirstName = p.FirstName; UserUpd.Phone = p.Phone; UserUpd.County = p.County; UserUpd.Address = p.Address; } } else { Console.WriteLine("#############################ALREADY REGISTERED " + p.VAT + " , " + p.Email + " , " + p.LastName); } NewUsers++; } ; await _context.SaveChangesAsync(); Console.WriteLine("New Users Registered and Emailed " + DateTime.Now.ToString()); foreach (var a in _context.ApplicationUser) { var query2 = from UIdUpd in _context.CitizenDepts where UIdUpd.VAT == a.VAT select UIdUpd; foreach (CitizenDepts UIdUpd in query2) { UIdUpd.UserGUId = a.Id; } } ; await _context.SaveChangesAsync(); List <Bills> NewBillsls = new List <Bills>(); Bills NewBill = new Bills(); List <CitizenDepts> UpdCit = new List <CitizenDepts>(); UpdCit.AddRange(_context.CitizenDepts); foreach (var e in UpdCit) { Console.WriteLine("#############################CITIZEN_DEPTS " + e.VAT + " , " + e.Email + " , " + e.UserGUId); NewBill.GuId = e.BillId; NewBill.Amount = e.Amount; NewBill.DueDate = e.DueDate; NewBill.Bill_description = e.Bill_description; NewBill.Status = 0; NewBill.UserId = e.UserGUId; NewBill.PaymentMethodId = 1; NewBill.SettlementId = 1; NewBillsls.Add(NewBill); NewBill = new Bills(); } //.... delete bills var allBills = from c in _context.Bills select c; _context.Bills.RemoveRange(allBills); await _context.SaveChangesAsync(); //.... delete settlements _context.Settlements.RemoveRange( _context.Settlements .Where(s => s.ID != 1) ); await _context.SaveChangesAsync(); _context.Bills.AddRange(NewBillsls); await _context.SaveChangesAsync(); string Mes; if (ErrorLines.Count() > 0) { Mes = "Ύπήρχαν " + ErrorLines.Count() + " σφάλματα στην εισαγωγή του αρχείου"; } else { Mes = "Δεν Υπήρχαν Σφάλματα στην εισαγωγή του αρχείου"; } // return View(NewCitizens); return(RedirectToAction("DeptResults", "DeptResults", new DeptResults { BillsCount = NewBillsls.Count(), NewUsers = NewUsers, HttpStatus = "", ErrorLines = ErrorLines, Message = Mes })); } else { return(NotFound(HttpStatusCode.NotFound + "\n" + "\nΔεν βρέθηκε ο κοινός φάκελος!")); } } catch (Exception ex) { return(NotFound(HttpStatusCode.ExpectationFailed + "\n" + ex.Message + "\nΣφάλμα\nΑπροσδιόριστο σφάλμα Στην Εισαγωγή του αρχείου</b>")); } finally { Console.WriteLine("Import Finished Successfully " + DateTime.Now.ToString()); } return(View()); }
public IActionResult DeptResults(DeptResults model) { ///model.ErrorLines = TempData["list"] as List<ErrorLines>; return(View("DeptResultsView", model)); }