Ejemplo n.º 1
0
 /// <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);
 }
Ejemplo n.º 2
0
 /// <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);
 }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }