private void AddToVT(int SetID, int value, int declared, string dokDostawy, DateTime dataDostawy) { VTMagazyn vt = new VTMagazyn { NumerKompletu = SetID, SztukiZeskanowane = value, SztukiDeklarowane = declared, Wiazka = Input.Wiazka, KodCiety = Input.KodCiety, Pracownik = User.Identity.Name, DokDostawy = dokDostawy, DataUtworzenia = DateTime.Now, DataDostawy = dataDostawy, Komplet = false, Deklarowany = Input.isDeclared, DataDopisu = Input.DeliveryDate, DopisanaIlosc = value, Uwagi = Input.Uwagi, autocompleteEnabled = Input.isAutocompleteEnabled, wymuszonaIlosc = Input.isForcedDeclared, Technical = _db.Technical.IgnoreQueryFilters().FirstOrDefault(c => c.PrzewodCiety == Input.KodCiety && c.Wiazka == Input.Wiazka), }; vt.Dostawy = new List <VtToDostawa>(); _db.VTMagazyn.Add(vt); _db.SaveChanges(); }
/// <summary> /// Tries to add current scan as a whole /// </summary> /// <param name="response"></param> /// <param name="techEntry"></param> /// <param name="sc"></param> /// <param name="dostawaEntry"></param> /// <returns></returns> public bool AddOrCreateNewSet(ScannedResponse response, Technical techEntry, ScannedCode sc, Dostawa dostawaEntry) { VTMagazyn VT = ExistsInVT(sc); if (VT == null && !sc.addedBefore) { // If no instance of this scan exists AddToVT(techEntry, sc, dostawaEntry); } else if (VT == null && sc.addedBefore) { if (sc.isForcedInsert) { // If instance of this code have been added to previous scans AddToVT(techEntry, sc, dostawaEntry); } else { response.Header = HeaderTypes.error; response.Flag = FlagType.codeExistsBack; return(false); } } else { if (sc.isForcedInsert) { var deliveriesForToday = _db.Dostawa.AsNoTracking().Include(c => c.Technical) .Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList(); var VTList = new List <VTMagazyn>(); VTList.Add(VT); // ? // If instance of this scan have been added for todays delivery if (VT.SztukiZeskanowane < GetPossibleDeclaredValue(sc, VTList, deliveriesForToday)) { return(AddQuantityIncorrect(deliveriesForToday, response, techEntry, sc, dostawaEntry)); } else { AddToVT(techEntry, sc, dostawaEntry, true); } } else { response.Header = HeaderTypes.error; response.Flag = FlagType.codeExists; return(false); } } return(true); }
/// <summary> /// Update relation between Dostawa and VTMagazyn when adding to already existing scan /// </summary> /// <param name="dostawaEntry"></param> /// <param name="vt">Scan to update</param> public void UpdateVT(Dostawa dostawaEntry, VTMagazyn vt) { VtToDostawa vttd = new VtToDostawa(); vttd.DostawaId = dostawaEntry.DostawaId; vttd.VTMagazynId = vt.VTMagazynId; vttd.VTMagazyn = vt; vttd.Dostawa = dostawaEntry; if (vt.Dostawy.FirstOrDefault(c => c.VTMagazynId == vttd.VTMagazynId && c.DostawaId == vttd.DostawaId) == null) { vt.Dostawy.Add(vttd); } }
public void UpdateWiazkaOnChange(VTMagazyn record, int originalValue) { if (record.SztukiZeskanowane == 0) { if (originalValue >= record.SztukiDeklarowane) { var toUpdate = _db.VTMagazyn.Where(c => c.Wiazka == record.Wiazka && c.NumerKompletu == record.NumerKompletu && c.DataDostawy.Date == record.DataDostawy.Date).ToList(); foreach (var rec in toUpdate) { rec.ZeskanowanychNaKomplet--; if (rec.autocompleteEnabled) { rec.Komplet = false; } } _db.UpdateRange(toUpdate); } _db.VtToDostawa.RemoveRange(_db.VtToDostawa.Where(c => c.VTMagazynId == record.VTMagazynId)); _db.VTMagazyn.Remove(record); } else if (record.SztukiZeskanowane < record.SztukiDeklarowane && originalValue >= record.SztukiDeklarowane) { if (originalValue >= record.SztukiDeklarowane) { var toUpdate = _db.VTMagazyn.Where(c => c.Wiazka == record.Wiazka && c.NumerKompletu == record.NumerKompletu && c.DataDostawy.Date == record.DataDostawy.Date).ToList(); foreach (var rec in toUpdate) { rec.ZeskanowanychNaKomplet--; if (rec.autocompleteEnabled) { rec.Komplet = false; } } _db.UpdateRange(toUpdate); } } }
/// <summary> /// Adds scan to the database /// </summary> /// <param name="technical"></param> /// <param name="scanned"></param> /// <param name="dostawa"></param> /// <param name="newCmplt">Does it need to create new set</param> public void AddToVT(Technical technical, ScannedCode scanned, Dostawa dostawa, bool newCmplt = false) { if (dostawa != null && dostawa.Uwagi != "") { scanned.complete = true; } // Set proper set ID depending which set ID is missing if (!newCmplt) { scanned.NumerKompletu = 0; } else { int nextKpl = 0; var SetNumbers = GetCompleteID(scanned); foreach (var kplNumber in SetNumbers) { if (nextKpl != kplNumber) { break; } nextKpl++; } scanned.NumerKompletu = nextKpl; } VtToDostawa vtToDostawa = new VtToDostawa(); vtToDostawa.Dostawa = dostawa; VTMagazyn vt = new VTMagazyn { NumerKompletu = scanned.NumerKompletu, SztukiZeskanowane = scanned.sztukiSkanowane, SztukiDeklarowane = 0, Wiazka = technical.Wiazka, KodCiety = technical.PrzewodCiety, Pracownik = scanned.User, DokDostawy = scanned.DokDostawy, DataUtworzenia = scanned.dataUtworzenia, DataDostawy = scanned.dataDostawyOld == DateTime.MinValue ? scanned.dataDostawy : scanned.dataDostawyOld, Komplet = scanned.complete, Deklarowany = scanned.Declared, DataDopisu = scanned.DataDopisu, DostawaDopis = scanned.DostawaDopis, DopisanaIlosc = scanned.DopisanaIlosc, Uwagi = scanned.Uwagi, autocompleteEnabled = true, wymuszonaIlosc = false, Technical = technical }; vtToDostawa.VTMagazyn = vt; // Create a relation between Dostawa and VTMagazyn scan vt.Dostawy = new List <VtToDostawa>(); if (dostawa != null) { vt.Dostawy.Add(vtToDostawa); } _db.VTMagazyn.Add(vt); }
public async Task <IActionResult> OnPostLoadVTMagazynAsync() { int chunkSize = 20000; string backupDir = $"./Snapshots/{Date.Day}{Date.Month}{Date.Year}"; if (!Directory.Exists("./Snapshots")) { return(Page()); } if (!Directory.Exists(backupDir)) { return(Page()); } if (System.IO.File.Exists(backupDir + "/VTMagazyn.csv")) { using (var reader = new StreamReader(backupDir + "/VTMagazyn.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { _db.RemoveRange(_db.VTMagazyn); int i = 0; await csv.ReadAsync(); csv.ReadHeader(); while (await csv.ReadAsync()) { var record = new VTMagazyn { VTMagazynId = csv.GetField <Guid>("VTMagazynId"), NumerKompletu = csv.GetField <int>("NumerKompletu"), SztukiDeklarowane = csv.GetField <int>("SztukiDeklarowane"), SztukiZeskanowane = csv.GetField <int>("SztukiZeskanowane"), ZeskanowanychNaKomplet = csv.GetField <int>("ZeskanowanychNaKomplet"), NaKomplet = csv.GetField <int>("NaKomplet"), Wiazka = csv.GetField <string>("Wiazka"), KodCiety = csv.GetField <string>("KodCiety"), Pracownik = csv.GetField <string>("Pracownik"), DokDostawy = csv.GetField <string>("DokDostawy"), DataUtworzenia = csv.GetField <DateTime>("DataUtworzenia"), DataDostawy = csv.GetField <DateTime>("DataDostawy"), Komplet = csv.GetField <bool>("Komplet"), Deklarowany = csv.GetField <bool>("Deklarowany"), autocompleteEnabled = csv.GetField <bool>("autocompleteEnabled"), wymuszonaIlosc = csv.GetField <bool>("wymuszonaIlosc"), DataDopisu = csv.GetField <DateTime?>("DataDopisu"), DopisanaIlosc = csv.GetField <int>("DopisanaIlosc"), Uwagi = csv.GetField <string>("Uwagi"), Technical = await _db.Technical.FindAsync(csv.GetField <string>("CietyWiazka")), Dostawy = new List <VtToDostawa>() }; await _db.VTMagazyn.AddAsync(record); //await _db.VTMagazyn.AddAsync(csv.GetRecord<VTMagazyn>()); i++; if (i >= chunkSize) { await _db.SaveChangesAsync(); i = 0; } } } } await _db.SaveChangesAsync(); if (System.IO.File.Exists(backupDir + "/VtToDostawa.csv")) { using (var reader = new StreamReader(backupDir + "/VtToDostawa.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { _db.RemoveRange(_db.VtToDostawa); int i = 0; await csv.ReadAsync(); csv.ReadHeader(); while (await csv.ReadAsync()) { var vttd = new VtToDostawa { VTMagazynId = csv.GetField <Guid>("VTMagazynId"), DostawaId = csv.GetField <Guid>("DostawaId") }; var vt = _db.VTMagazyn.Include(c => c.Dostawy).FirstOrDefault(c => c.VTMagazynId == vttd.VTMagazynId); var dost = _db.Dostawa.Include(c => c.Skany).FirstOrDefault(c => c.DostawaId == vttd.DostawaId); vttd.Dostawa = dost; vttd.VTMagazyn = vt; vt.Dostawy.Add(vttd); dost.Skany.Add(vttd); _db.Update(dost); _db.Update(vt); await _db.VtToDostawa.AddAsync(vttd); i++; if (i >= chunkSize) { await _db.SaveChangesAsync(); i = 0; } } } } await _db.SaveChangesAsync(); return(RedirectToPage("/Manager/AdminManager/LoadDbFromFiles")); }
private bool SearchBack(List <List <VTMagazyn> > pastScans, List <Dostawa> pastDeliveries, int value, VTMagazyn vtScan) { foreach (var scanPerDate in pastScans) { var duplicateScans = scanPerDate.Where(c => c.KodCiety == Input.KodCiety).OrderBy(c => c.NumerKompletu).ToList(); int mostFrequentCount = 0; if (duplicateScans.Count > 0) { foreach (var scan in duplicateScans) { mostFrequentCount = scan.SztukiDeklarowane; if (scan.SztukiZeskanowane + value == mostFrequentCount && scan.SztukiZeskanowane != mostFrequentCount) { scan.SztukiZeskanowane += value; scan.DataDopisu = Input.DeliveryDate; scan.DopisanaIlosc = value; _db.Update(scan); checkComplete(scan.NumerKompletu, Input.Wiazka, scan.DataDostawy); return(true); } } int[] setIDs = scanPerDate.Where(c => c.Komplet == false).Select(c => c.NumerKompletu).Distinct().ToArray(); foreach (int setID in setIDs) { mostFrequentCount = GetPossibleDeclaredValue( new ScannedCode { Wiazka = Input.Wiazka, dataDostawyOld = scanPerDate[0].DataDostawy }, scanPerDate, pastDeliveries, setID); // Only add on the previous date if "declared" value is the same as scanned if (value == mostFrequentCount && duplicateScans.Where(c => c.NumerKompletu == setID).Select(c => c.KodCiety).FirstOrDefault() != vtScan.KodCiety) { AddToVT(0, value, mostFrequentCount, vtScan.DokDostawy, scanPerDate[0].DataDostawy); checkComplete(0, Input.Wiazka, scanPerDate[0].DataDostawy); return(true); } } } else { mostFrequentCount = scanPerDate.Where(c => c.NumerKompletu == 0).First().SztukiDeklarowane; // Only add on the previous date if "declared" value is the same as scanned if (value == mostFrequentCount) { DateTime date = scanPerDate.Where(c => c.NumerKompletu == 0).FirstOrDefault().DataDostawy; AddToVT(0, value, mostFrequentCount, vtScan.DokDostawy, date); checkComplete(0, Input.Wiazka, date); return(true); } } } return(false); }