/// <summary> /// Functions searches previous scans and adds current scan there or if it can't tries to add it for today /// </summary> /// <param name="response"></param> /// <param name="techEntry"></param> /// <param name="sc"></param> /// <param name="dostawaEntry"></param> /// <returns></returns> public bool CheckBackOrAdd(ScannedResponse response, Technical techEntry, ScannedCode sc, Dostawa dostawaEntry) { if (!SearchBack(techEntry, sc, dostawaEntry)) { return(AddOrCreateNewSet(response, techEntry, sc, dostawaEntry)); } return(true); }
/// <summary> /// Functions searches previous scans and adds current scan there or if it can't tries to add it for today if scan wasn't complete according to delivery /// </summary> /// <param name="response"></param> /// <param name="techEntry"></param> /// <param name="sc"></param> /// <param name="dostawaEntry"></param> /// <returns></returns> public bool CheckBackOrAddQuantityIncorrect(ScannedResponse response, Technical techEntry, ScannedCode sc, Dostawa dostawaEntry) { if (!SearchBack(techEntry, sc, dostawaEntry)) { var deliveriesForToday = _db.Dostawa.AsNoTracking().Include(c => c.Technical) .Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList(); return(AddQuantityIncorrect(deliveriesForToday, response, techEntry, sc, dostawaEntry)); } return(true); }
/// <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> /// Adds record to current scan or if it can't adds it as a brand new one /// </summary> /// <param name="response"></param> /// <param name="techEntry"></param> /// <param name="sc"></param> /// <param name="dostawaEntry"></param> /// <returns></returns> public bool AddQuantityIncorrect(List <Dostawa> deliveriesForToday, ScannedResponse response, Technical techEntry, ScannedCode sc, Dostawa dostawaEntry) { if (!sc.isForcedQuantity) { response.Header = HeaderTypes.error; response.Flag = FlagType.quantityIncorrect; response.Args.Add(dostawaEntry.Ilosc.ToString()); var sets = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy == sc.dataDostawyOld).ToList(); int declared = GetPossibleDeclaredValue(sc, sets, deliveriesForToday, sc.NumerKompletu); response.Args.Add(GetScannedForDay(sc, sets).ToString()); response.Args.Add(declared.ToString()); response.Args.Add($"{declared - sc.sztukiSkanowane}"); return(false); } else { var VTList = ExistInVTList(sc); var scansForDay = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList(); if (VTList.Count <= 0 && !sc.addedBefore) { // if record doesn't exist add it AddToVT(techEntry, sc, dostawaEntry); } else if (VTList.Count <= 0 && sc.addedBefore) { if (sc.isForcedInsert) { // if record have been added previously add for today AddToVT(techEntry, sc, dostawaEntry); } else { response.Header = HeaderTypes.error; response.Flag = FlagType.codeExistsBack; return(false); } } else { List <VTMagazyn> forceOverLimit = new List <VTMagazyn>(); foreach (var vt in VTList) { // Check if we can add current scan to complete one today var perfectVT = GetPerfectMatchVT(sc, vt.NumerKompletu, VTList, scansForDay, deliveriesForToday); if (perfectVT != null) { perfectVT.SztukiZeskanowane += sc.sztukiSkanowane; sc.NumerKompletu = perfectVT.NumerKompletu; if (dostawaEntry != null) { UpdateVT(dostawaEntry, perfectVT); } _db.VTMagazyn.Update(perfectVT); _db.SaveChanges(); return(true); } } foreach (var vt in VTList) { // check if there are any scans we can add current scan to var belowMatches = GetBelowDeclaredMatches(sc, vt.NumerKompletu, VTList, scansForDay, deliveriesForToday); if (belowMatches.Count() == 0) { if (vt.autocompleteEnabled) { int possibleDeclaredValue = GetPossibleDeclaredValue(sc, scansForDay, deliveriesForToday, vt.NumerKompletu); // if adding would exceed declared value if (vt.SztukiZeskanowane < possibleDeclaredValue && vt.SztukiZeskanowane + sc.sztukiSkanowane > possibleDeclaredValue) { forceOverLimit.Add(vt); } } } else { belowMatches[0].SztukiZeskanowane += sc.sztukiSkanowane; sc.NumerKompletu = belowMatches[0].NumerKompletu; if (dostawaEntry != null) { UpdateVT(dostawaEntry, belowMatches[0]); } _db.VTMagazyn.Update(belowMatches[0]); _db.SaveChanges(); return(true); } } if (forceOverLimit.Count() > 0) { if (!sc.isForcedOverLimit) { response.Header = HeaderTypes.error; response.Flag = FlagType.quantityOverLimit; response.Args.Add((forceOverLimit[0].SztukiZeskanowane + sc.sztukiSkanowane).ToString()); response.Args.Add(GetPossibleDeclaredValue(sc, scansForDay, deliveriesForToday, forceOverLimit[0].NumerKompletu).ToString()); return(false); } else { forceOverLimit[0].SztukiZeskanowane += sc.sztukiSkanowane; sc.NumerKompletu = forceOverLimit[0].NumerKompletu; if (dostawaEntry != null) { UpdateVT(dostawaEntry, forceOverLimit[0]); } _db.VTMagazyn.Update(forceOverLimit[0]); _db.SaveChanges(); return(true); } } else { if (sc.isForcedInsert) { AddToVT(techEntry, sc, dostawaEntry, true); return(true); } else { response.Header = HeaderTypes.error; response.Flag = FlagType.codeExists; return(false); } } } } return(true); }